diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/hcibase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/epoc32/include/hcibase.h Tue Mar 16 16:12:26 2010 +0000 @@ -0,0 +1,1876 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// This is the API that the bluetooth stack expects from the HCI layer. +// It comprises an event notification interface and a command sending interface. +// Implementations of the HCI must derive from CHCIBase. +// +// + + + +/** + @file + @publishedPartner + @released +*/ + +#ifndef BT_HCIBASE_H_ +#define BT_HCIBASE_H_ + +#include +#include +#include +#include + +#include +#include +#include +#include + +class CHCICommandFrame; +class CHCIACLDataFrame; +class CHCISCODataFrame; +class CHCIBase; +class MHCIEventObserver; +class CESockIniData; + +/** Factory for creating CHCIBase derived class. + +To provide a new HCI implementation, re-implement this +class in a DLL, which has a factory fucntion at oridnal 1 +which returns a TAny* to the instance of this factory. +NewHCIL() will then be called on the factory to actually +create the CHCIBase derived object. + +@released +@publishedPartner +*/ +NONSHARABLE_CLASS(CHCIFactory) : public CBase + { +public: + CHCIFactory(); + virtual TVersion Version() const; + virtual CHCIBase* NewHCIL(MHCIEventObserver* aParent, CESockIniData* aIni=0); + virtual CHCICommandFrame* NewHCICommandFrameL(THCIOpcode aOpcode); + virtual CHCIACLDataFrame* NewHCIACLDataFrameL(TUint16 aSize); + virtual CHCISCODataFrame* NewHCISCODataFrameL(TUint8 aSize); + }; + + +/** Abstract HCI Interface class. + +The Symbian Bluetooth stack uses this abstract class as the +polymorphic base through which it obtains host controller +access. The actual implementation is dependent on the DLL +loaded at run-time, as specified in the bt.bt.esk file. +The concrete class derived from this should be returned +by the CHCIFactory class, located through ordinal 1 in the +polymorphic DLL. + +@publishedPartner +@released +@see +CHCI for detailed description of the functions. +MHCIEventObserver for the callback interface for events received over HCI. +*/ +NONSHARABLE_CLASS(CHCIBase) : public CBase + { +public: + + /** Writes command frame. + + @param aFrame command frame to write + @return KErrBcspWriteCommandDataFailed on failure, KErrNone otherwise + @released + @publishedPartner + */ + virtual TInt WriteCommand(const CHCICommandFrame& aFrame)=0; + + // HCI General exports + /** Sets option. + + @param aName option to set + @param aData option value + @return System wide error code + @released + @publishedPartner + */ + virtual TInt SetOption(TUint aName,const TDesC8& aData)=0; + + /** Gets option. + + @param aName option to set + @param aData desriptor to be filled with option data + @return System wide error code + @released + @publishedPartner + */ + virtual TInt GetOption(TUint aName,TDes8& aData)=0; + + // HCI Data Calls + /** Formats ACL Data. + + @param aFrame Reference to CHCIACLDataFrame which will be formatted with the data supplied in the other params + @param aConnH Connection handle for this frame + @param aFlags Flags to be set for this frame + @param aData Data for this frame + @released + @publishedPartner + */ + virtual void FormatACLData(CHCIACLDataFrame& aFrame, THCIConnHandle aConnH,TUint8 aFlags,const TDesC8& aData)=0; + + /** Formats SCO Data. + + @param aFrame Reference to CHCISCODataFrame which will be formatted with the data supplied in the other params + @param aConnH Connection handle for this frame + @param aData Data for this frame + @released + @publishedPartner + */ + virtual void FormatSCOData(CHCISCODataFrame& aFrame, THCIConnHandle aConnH, const TDesC8& aData)=0; + + /** Writes ACL Data. + + This forwards a write from link layer to host controller. The descriptor in the frame is owned by the link layer. + + @param aFrame the formatted ACL payload from the linkmanager + @return System wide error code + @released + @publishedPartner + */ + virtual TInt WriteACLData(const CHCIACLDataFrame& aFrame)=0; + + /** Writes SCO Data. + + This forwards a write from link layer to host controller. The descriptor in the frame is owned by the link layer. + + @param aFrame the formatted SCO payload from the linkmanager + @return System wide error code + @released + @publishedPartner + */ + virtual TInt WriteSCOData(const CHCISCODataFrame& aFrame)=0; + + // HCI Frame information commands + /** Gets frame connection handle + + @param aFrame the frame to return the connection handle of + @return the connection handle from aFrame + @released + @publishedPartner + */ + virtual THCIConnHandle FrameConnectionHandle(const CHCIACLDataFrame& aFrame) const =0; + + /** Gets frame opcode. + + @param aFrame the frame to return the opcode of + @return the opcode of aFrame + @released + @publishedPartner + */ + virtual THCIOpcode FrameOpcode(const CHCICommandFrame& aFrame) const =0; + + // HCI Commands + /** Commands the host controller to start looking for remote devices within range. + + The HCI client should not issue a second Inquiry() before the first has + completed, because the HC cannot cope with this and will return a + COMMAND_DISALLOWED error + + @param aFrame The HCI frame to format + @param aCode InquiryAccessCode (3 bytes) + @param aLength InquiryLength N where N * 1.28s is the no. of seconds for inquiry + @param aNumResponses Number of responses from inquiry before it is halted - default 0 is unlimited number of responses. + @released + @publishedPartner + */ + virtual void Inquiry(CHCICommandFrame& aFrame, const TUint aCode=KGIAC, const TUint8 aLength=10, const TUint8 aNumResponses=0)=0; + + /** Cancels an ongoing inquiry. + + @param aFrame frame to apply any necessary formatting to for inquiry cancel. + @released + @publishedPartner + */ + virtual void InquiryCancel(CHCICommandFrame& aFrame)=0; + + /** Commands the host controller to enter periodic enquiry mode + + @param aFrame The HCI frame to format + @param aMax MaxPeriodLength. The HC chooses a value between aMax and aMin. + @param aMin MinPeriodLength + @param aCode InquiryAccessCode (3 bytes) + @param aLength InquiryLength (default N=2) + @param aNumResponses Number of Responses (default=0) + @released + @publishedPartner + */ + virtual void PeriodicInquiryMode(CHCICommandFrame& aFrame, TUint16 aMax,TUint16 aMin, const TUint aCode=0,const TUint8 aLength=2,const TUint8 aNumResponses=0)=0; + + /** Exits the periodic inquiry. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ExitPeriodicInquiryMode(CHCICommandFrame& aFrame)=0; + + /** Initiates connection to remote device using the specified baseband packet type. + + @param aFrame The HCI frame to format + @param aBdaddr remove device address + @param aPacketType Packet Type + @param aPageScanRepetitionMode pages scan repetition mode + @param aPageScanMode page scan mode + @param aClockOffset Offset between local and remote clock + @param aAllowRoleSwitch Whether the remote device is allowed to role switch the local device + @released + @publishedPartner + */ + virtual void CreateConnection(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr, + TUint16 aPacketType=KDM1Packet, TUint8 aPageScanRepetitionMode=0, + TUint8 aPageScanMode=0, TUint16 aClockOffset=0, TUint8 aAllowRoleSwitch=1)=0; + + /** Add an SCO connection between the Host Controller and the remote device. + + @param aFrame The HCI frame to format + @param aConnHandle Connection handle + @param aPacketType Packet Type + @released + @publishedPartner + */ + virtual void AddSCOConnection(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TUint16 aPacketType)=0; + + + + + + + + /** + Adds a new or modifies an existing synchronous logical transport (SCO or eSCO) + @param aFrame The HCI frame to format + @param aConnHandle Connection handle (2 bytes) + @param aTransmitBandwidth (4 bytes) + @param aReceiveBandwidth (4 bytes) + @param aMaxLatency (2 bytes) + @param aVoiceSettings (2 bytes) + @param aRetransmissionEffort (1 bytes) + @param aPacketType (2 bytes) + */ + virtual void SetupSynchronousConnectionCommand(CHCICommandFrame& aFrame, TUint16 aConnHandle, + TUint aTransmitBandwidth, TUint aReceiveBandwidth, TUint16 aMaxLatency, + TUint16 aVoiceSettings, TUint8 aRetransmissionEffort, + TUint16 aPacketType)=0; + + /** + Accepts an incoming connection request for an synchronous connection. + @param aFrame The HCI frame to format + @param aBdaddr BDADDR (6 bytes) + @param aTransmitBandwidth (4 bytes) + @param aReceiveBandwidth (4 bytes) + @param aMaxLatency (2 bytes) + @param aContentFormat (2 bytes) + @param aRetransmissionEffort (1 bytes) + @param aPacketType (2 bytes) + */ + virtual void AcceptSynchronousConnectionRequestCommand(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr, + TUint aTransmitBandwidth, TUint aReceiveBandwidth, TUint16 aMaxLatency, + TUint16 aContentFormat, TUint8 aRetransmissionEffort, TUint16 aPacketType)=0; + /** + Rejects the synchronous connction from thre remote device (aBdaddr). + + @param aFrame The HCI frame to format + @param aBdaddr BDADDR + @param THCIErrorCode Reject reason + */ + virtual void RejectSynchronousConnectionRequestCommand(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIErrorCode aReason)=0; + + + + + + + + /** Accepts an incoming connection request. + + @param aFrame The HCI frame to format + @param aBdaddr bluetooth address of remote device + @param aRole Role - 0x00=Master, 0x01=Slave. + @released + @publishedPartner + */ + virtual void AcceptConnectionRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,TUint8 aRole)=0; + + /** Rejects the connection from the remote device. + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth address of remote device + @param THCIErrorCode Reject reason + @released + @publishedPartner + */ + virtual void RejectConnectionRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIErrorCode aReason)=0; + + /** Replies to the remote host with the supplied link key. + + @param aFrame The HCI frame to format + @param aBdaddr bluetooth address of remote device + @param aLinkKey Link key (16 bytes) + @released + @publishedPartner + */ + virtual void LinkKeyRequestReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,const TDesC8& aLinkKey)=0; + + /** Notifies the remote host that the link key was not accepted. + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth address of remote device + @released + @publishedPartner + */ + virtual void LinkKeyRequestNegativeReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr)=0; + + /** Returns to the remote host the requested PIN. + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth address of remote device + @param aPIN PIN Code (up to 16 bytes) + @released + @publishedPartner + */ + virtual void PINCodeRequestReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,const TDesC8& aPIN)=0; + + /** Notifies the remote host that the PIN code was rejected. + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth address of remote device + @released + @publishedPartner + */ + virtual void PINCodeRequestNegativeReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr)=0; + + /** Disconnect the ACL or SCO connection corresponding to the supplied handle. + + @param aFrame The HCI frame to format + @param aConnHandle Handle of connection to disconnect + @param aReason Reason for disconnection + @released + @publishedPartner + */ + virtual void Disconnect(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,THCIErrorCode aReason)=0; + + /** Changes baseband packet type (e.g DH1, DM3 etc.). + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aType Packet Type. This should be one of the consts defined in hcibase.h e.g. KDM1Packet. + @released + @publishedPartner + */ + virtual void ChangeConnectionPacketType(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TUint16 aType)=0; + + /** Perform authenticaction request. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void AuthenticationRequest(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Sets connection encryption + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aEnable Enable flag ETrue=Enable link encryption, EFalse=Disable link encryption + @released + @publishedPartner + */ + virtual void SetEncryptionEnable(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TBool aEnable)=0; + + /** Notifies host of need to change connection key for the supplied connection handle. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ChangeConnectionLinkKey(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Not used. + + @param aFrame The HCI frame to format + @param aKeyFlag Link Key Flag. Possible values are ETrue to use temporary link key or EFalse to use regular link key + @released + @publishedPartner + */ + virtual void MasterLinkKey(CHCICommandFrame& aFrame, TBool aKeyFlag)=0; + + /** Retrieves the remote hosts advertised hardware/firmware features. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ReadRemoteSupportedFeatures(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Retrieve remote hosts HW/Firmware revision information. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ReadRemoteVersionInfo(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Request on human redable name of remote host. + + @param aFrame The HCI frame to format + @param aBdaddr The bluetooth address of device on which we seek to find a name + @param aPageScanRepetitionMode Page scan repetition mode + @param aPageScanMode Page scan mode + @param aClockOffset Offset of remote device clock from local device clock + @released + @publishedPartner + */ + virtual void RemoteNameRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr, TUint8 aPageScanRepetitionMode=0, + TUint8 aPageScanMode=0, TBasebandTime aClockOffset=0)=0; + + /** Retrieve offset of remote clock from local clock. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ReadClockOffset(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + // HCI Link Policy Commands + /** Write local link policy settings + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aSettings @see Bluetooth HCI specification + @released + @publishedPartner + */ + virtual void WriteLinkPolicySettings(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TUint16 aSettings)=0; + + /** Switch radio and host controller to Hold mode. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aHoldMaxInterval Max Hold Interval N, where Time of Hold=N*0.625ms (1 baseband slot) + @param aHoldMinInterval Min Hold interval N, as above (both up to 40.9 sec) + @released + @publishedPartner + */ + virtual void HoldMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TBasebandTime aHoldMaxInterval, + TBasebandTime aHoldMinInterval)=0; + + /** Switch radio and host controller to Sniff mode. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aSniffMaxInterval Max Sniff length (Max number of acceptable slots in a sniff period) N, where the interval (time between sniffs)=N*0.625ms (1 baseband slot) + @param aSniffMinInterval Min Sniff interval , as above + @param aAttemptSlots Sniff Attempt - the period the slave will listen after each sniff interval + @param aTimeOutSlots Sniff Timeout - time listening for packets as long as some arrive + @released + @publishedPartner + */ + virtual void SniffMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TBasebandTime aSniffMaxInterval,TBasebandTime + aSniffMinInterval, TBasebandTime aAttempSlots, TBasebandTime aTimeOutSlots)=0; + + /** Switch radio and host out of the Sniff mode. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ExitSniffMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Switch radio and host controller to the Park mode. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @param aBeaconMax Beacon Max Interval Length N where interval between beacons=N*0.625ms + @param aBeaconMin Beacon Min Interval Length N where interval between beacons=N*0.625ms + @released + @publishedPartner + */ + virtual void ParkMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TBasebandTime aBeaconMaxInterval, + TBasebandTime aBeaconMinInterval)=0; + + /** Switch radio and host controller off the Park mode. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void ExitParkMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Initiate role discovery for the supplied connection handle. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void RoleDiscovery(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Switch current role (master / slave) for the physical link associated with the bluetooth device address provided. + + @param aFrame The HCI frame to format + @param aRole New role + @param aAddr Bluetooth device address of remote device + @released + @publishedPartner + */ + virtual void SwitchRole(CHCICommandFrame& aFrame, TBTBasebandRole aRole, const TBTDevAddr& aAddr)=0; + + + // HCI Host Controller and Baseband Commands + /** Sets the mask for the reception or the filtering-out of HCI events from the host controller. + + @param aFrame The HCI frame to format + @param aMask Event Mask + @released + @publishedPartner + */ + virtual void SetEventMask(CHCICommandFrame& aFrame, const THCIEventMask& aMask)=0; + + /** Resets the Host Controller hardware state. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void Reset(CHCICommandFrame& aFrame)=0; + + /** Set the filter mask for remotely initiated events. + + @param aFrame The HCI frame to format + @param aData Denotes the filter 'category' and its particular properties as such its 'category'/type may be EClearAllFilters, EInquiryResultFilter or EConnectionSetupFilter. Then its condition type (aData.iConditionType) can be as defined in the spec + @released + @publishedPartner + */ + virtual void SetEventFilter(CHCICommandFrame& aFrame, const THCIEventCondition& aData)=0; + + /** Flush buffers corresponding to the supplied connection handle. + + @param aFrame The HCI frame to format + @param aConnHandle Connection Handle + @released + @publishedPartner + */ + virtual void Flush(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0; + + /** Creates a new unit key in the host controller. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void CreateNewUnitKey(CHCICommandFrame& aFrame)=0; + + /** Reads out from the host controller the stored link key for given device address + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth device address to read the link key for. + @param aFlag Read all keys flag + @released + @publishedPartner + */ + virtual void ReadStoredLinkKey(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIReadAllKeysFlag aFlag)=0; + + /** Writes a Link Key to the Host Controllers volatile storage memory. You can write as many keys as you want to storage - this function just does one at a time. + + @param aFrame The HCI frame to format + @param aNumOfKeysToWrite Number of keys to write to storage + @param aBdaddr Bluetooth device address for the associated link key + @param aLinkKey The Link Key + @released + @publishedPartner + */ + virtual void WriteStoredLinkKey(CHCICommandFrame& aFrame, /*TUint8 aNumOfKeysToWrite,*/ + const TBTDevAddr& aBdaddr,const TDesC8& aLinkKey)=0; + + /** Delete the link key stored in the host controller's volatile storage. + + @param aFrame The HCI frame to format + @param aBdaddr Bluetooth device address associated with the link key to delete. + @param aFlag Delete options flag + @released + @publishedPartner + */ + virtual void DeleteStoredLinkKey(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIDeleteAllKeysFlag aFlag)=0; + + /** Sets the local Bluetooth device name. + + @param aFrame The HCI frame to format + @param aName Local device name (max 248 characters as defined in bluetooth specification). + @released + @publishedPartner + */ + virtual void ChangeLocalName(CHCICommandFrame& aFrame, const TDesC8& aName)=0; + + /** Reads out the stored local Bluetooth device name. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadLocalName(CHCICommandFrame& aFrame)=0; + + /** Reads out of the Bluetooth device the connection accept timeout, for incoming connections. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadConnectionAcceptTimeout(CHCICommandFrame& aFrame)=0; + + /** Sets the connection accept timeout in the host controller. + + @param aFrame The HCI frame to format + @param aTimeout The connection timeout + @released + @publishedPartner + */ + virtual void WriteConnectionAcceptTimeout(CHCICommandFrame& aFrame, TBasebandTime aTimeout)=0; + + /** Commands the Bluetooth hardware to respond with its Page Timeout. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadPageTimeout(CHCICommandFrame& aFrame)=0; + + /** Sets the page timeout in the host controller. + + @param aFrame The HCI frame to format + @param aTimeout Page Timeout. This must be between KMaxPageTimeout and KMinPageTimeout. + @released + @publishedPartner + */ + virtual void WritePageTimeout(CHCICommandFrame& aFrame, TBasebandTime aTimeout)=0; + + /** Read out of the host controller the scan options. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadScanEnable(CHCICommandFrame& aFrame)=0; + + /** Sets the scan options on the host controller. + + @param aFrame The HCI frame to format + @param aScanEnable Scan enable options + @released + @publishedPartner + */ + virtual void WriteScanEnable(CHCICommandFrame& aFrame, THCIScanEnable aEnable=EInquiryAndPageScan)=0; + + /** Read out of the host controller the number of supported inquiry access codes. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadNumberOfSupportedIAC(CHCICommandFrame& aFrame)=0; + + /** Write to the host controller the lower address parts supplied. + + @param aFrame The HCI frame to format + @param aNumCurrentIAC The number of inquiry access code lower address parts being sent to the hardware + @param aIAC_LAP The inquiry access code lower address parts - 3 bytes each: e.g: GIACLAP=0x9e8b33, LIACLAP=0x9e8b00 + @released + @publishedPartner + */ + virtual void WriteCurrentIACLAP(CHCICommandFrame& aFrame, TUint8 aNumCurrentIAC, TUint aIAC_LAP[])=0; + + /** Read out the inquiry access code lower address parts. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadCurrentIACLAP(CHCICommandFrame& aFrame)=0; + + /** Read out from the host controller whether authentication is enabled. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadAuthenticationEnable(CHCICommandFrame& aFrame)=0; + + /** Set/Unset authentication. + + @param aFrame The HCI frame to format + @param aAuthEnable Authentication Enable. Possible values are EFalse for authentication disabled or ETrue for authentication enabled + @released + @publishedPartner + */ + virtual void WriteAuthenticationEnable(CHCICommandFrame& aFrame, TBool aAuthEnable)=0; + + /** Read out the encryption mode. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadEncryptionMode(CHCICommandFrame& aFrame)=0; + + /** Set/unset the encryption. + + @param aFrame The HCI frame to format + @param aFlag Whether to enable encryption. Possible values are EFalse to disable encryption or ETrue to enable encryption. + @released + @publishedPartner + */ + virtual void WriteEncryptionMode(CHCICommandFrame& aFrame, THCIEncryptModeFlag aFlag)=0; + + /** Reads out the class of device of the local Bluetooth device. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadClassOfDevice(CHCICommandFrame& aFrame)=0; + + /** Sets the local Bluetooth class of device. + + @param aFrame The HCI frame to format + @param aCoD Class Of Device + @released + @publishedPartner + */ + virtual void WriteClassOfDevice(CHCICommandFrame& aFrame, TUint aCoD)=0; + + /** Read the Bluetooth hardware voice settings. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadVoiceSetting(CHCICommandFrame& aFrame)=0; + + /** Set the local Bluetooth device voice settings. + + @param aFrame The HCI frame to format + @param aVoiceChannelSetting Voice channel settings as defined by the HCI specification. + @released + @publishedPartner + */ + virtual void WriteVoiceSetting(CHCICommandFrame& aFrame, TInt16 aVoiceChannelSetting)=0; + + // HCI Informational Parameters Commands + /** Retrieve local hardware/firmware revision info. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadLocalVersionInformation(CHCICommandFrame& aFrame)=0; + + /** Retrieve local hardware/firmware capabilities. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadLocalSupportedFeatures(CHCICommandFrame& aFrame)=0; + + /** Retrieve from the host controller its buffering capabilities. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadBufferSize(CHCICommandFrame& aFrame)=0; + + /** Retrieve the hardware's intended country code (for security/encryption issues). + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadCountryCode(CHCICommandFrame& aFrame)=0; + + /** Retrieve local Bluetooth device address. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadBDADDR(CHCICommandFrame& aFrame)=0; + + // Host Controller to Host Data Flow Control + /** Set/unset notification of delivery of packets, from the host controller to the host. + + @param aFrame The HCI frame to format + @param aFlowFlag Flow Control Enable flag + @released + @publishedPartner + */ + virtual void SetHostControllerToHostFlowControl(CHCICommandFrame& aFrame, TBool aHC2HFlowFlag)=0;// may return KErrNoMemory + + /** Notification to host controller of the number of packets that the above + layers (L2CAP) have consumed. HostNumberOfCompletedPackets command to be + issued by L2CAP. + + @param aFrame The HCI frame to format + @param aNumHandles Number of connectionhandles + @param aConnH Connection handle + @param aCompletedPacketsNo Host num of completed packets + @released + @publishedPartner + */ + virtual void HostNumberOfCompletedPackets(CHCICommandFrame& aFrame, TUint8 aNumHandles, THCIConnHandle aConnH[], TUint16 aCompletedPacketsNo[])=0; + + /** Notifies the host controller of the hosts buffering capabilities. + + @param aFrame The HCI frame to format + @param aACLDataLength Host's ACL Data Packet Length + @param aSCODataLength Host's SCO Data Packet Length + @param aTotalACLPackets Total Number of ACL Data Packets that the Host can handle + @param aTotalSCOPackets Total Number of SCO Data Packets that the Host can handle + @released + @publishedPartner + */ + virtual void HostBufferSize(CHCICommandFrame& aFrame, TUint16 aACLDataLength,TUint8 aSCODataLength, + TUint16 aTotalACLPackets, TUint16 aTotalSCOPackets)=0; + + /** Writes link supervision timeout. + + @param aFrame The HCI frame to format + @param aConnH Connection handle + @param aTimeout Timeout to write + @released + @publishedPartner + */ + virtual void WriteLinkSupervisionTimeout(CHCICommandFrame& aFrame, THCIConnHandle aConnH, TBasebandTime aTimeout)=0; + + /** This call allows for a raw HCI command frame to be written to the HC. + + This is intended for vendor specific commands for which the opcode + field will be known to the HCI. + + These raw frames should be constructed by calling the HCI factory + function with the opcode constructed of the vendor debug opcode group field + and the particular OCF required. This function should then be called with the + appropriately formatted parameters which shall be placed into the frame's + payload. It should be noted that the client need NOT to be concerned + with the HCTL framing at all. + + The HCI will only then copy this frame to the host controller after putting + it in an HCTL frame. + + Note that the client is responsible for policing the size of the descriptor + passed to this function. The length should be: 0 <= n <= KHCIMaxCommandLength + + @param aFrame The HCI frame to format + @param aData The frame parameters + @released + @publishedPartner + */ + virtual void WriteVendorRawFrameCommand(CHCICommandFrame& aFrame, const TDesC8& aData)=0; + + + // HCI Status Parameters Commands + // not here yet + + // HCI Testing Commands + // not here yet + /** Used for testing. + + @released + @internalComponent + */ + virtual TAny *LogIndex() const=0; + + // methods to allow stack to query HCI about its features + /** Reads ACL reporting interval. + + @return the ACL reporting interval. + @released + @publishedPartner + */ + virtual TUint16 ReadACLReportingInterval() = 0; // Some hardware only reports on the nth ACL data packet being sent + // this is an opportunity for the HCI to supply a minimum value of n + // to the Link Manager + + /** Reads size of HCI framing overhead per frame. + + @return size of HCI framing overhead per frame. + @released + @publishedPartner + */ + virtual TUint16 ReadACLFramingOverhead() = 0; // Size of HCI framing overhead per frame + + // Adaptive Frequency Hopping (AFH) + + /** Notifies the host controller of channels that are known by the host to be bad or to be about to be bad. + + This allows those channels to be avoided if Adaptive Frequency Hopping is active on a connection. + + @param aFrame The HCI frame to format + @param aChannelClassification Bitwise representation of the bad channels + @released + @publishedPartner + */ + virtual void SetAFHHostChannelClassification(CHCICommandFrame& aFrame, const TDesC8& aChannelClassification)=0; + + /** Retrieves the AFH channel map being used on the specified connection. + + If we are master this will be the local AFH channel map. If we are slave it + will be the remote master's AFH channel map. + + @param aFrame The HCI frame to format + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void ReadAFHChannelMap(CHCICommandFrame& aFrame, THCIConnHandle aConnH)=0; + + /** Notifies the host controller whether or not it is required to keep checking for busy channels.. + + @param aFrame The HCI frame to format + @param aEnable Check for busy channels if ETrue, otherwise don't + @released + @publishedPartner + */ + virtual void WriteAFHChannelAssessmentMode(CHCICommandFrame& aFrame, TBool aEnable)=0; + + /** Asks the host controller whether or not it is checking for busy channels.. + + @param aFrame The HCI frame to format + @released + @publishedPartner + */ + virtual void ReadAFHChannelAssessmentMode(CHCICommandFrame& aFrame)=0; + + /** HCI level Ioctl + + @param aLevel The Ioctl level + @param aName The Ioctl function number + @param aOption Data associated with this Ioctl + @param aStackSAP A pointer to the SAP, used to track Ioctls + @released + @publishedPartner + */ + virtual void Ioctl(TUint aLevel,TUint aName, TDes8* aOption, TAny* aStackSAP) = 0; + + /** Cancel HCI level Ioctl + + @param aLevel The Ioctl level + @param aName The Ioctl function number + @param aStackSAP A pointer to the SAP, used to track Ioctls + @released + @publishedPartner + */ + virtual void CancelIoctl(TUint aLevel,TUint aName, TAny* aStackSAP) = 0; + }; + +enum THCIErrorCode; + + + +/** Event handler mixin that must be implemented by the client of HCI. + +A class that implements this interface must be passed into the +CHCIBase derived class on construction, and will be used by the HCI +class to notify the client of events received over the HCI interface. + +@released +@publishedPartner +*/ +class MHCIEventObserver + { +public: + // Interfaces to allow HCI to notify LL + /** This provides command credits. + + @param aCredits Provided command credits. + @released + @publishedPartner + */ + virtual void SetCommandCredits(TUint16 aCredits)=0; + + /** Informs of the ACL MTU for this host. + + @param aMTU Maximum size of ACL packet the host can send. + @released + @publishedPartner + */ + virtual void HCIMaximumACLPacketSize(TUint16 aMTU)=0; + + /** Called when transport channels have become free. + + @param aChannel Channel that is free. + @released + @publishedPartner + */ + virtual void CanSend(THCITransportChannel aChannel = KHCITransportAllChannels)=0; + + // Events as per spec + /** Called on an inquiry complete event. + + @param aNumResponses Number of responses received from the inquiry. This is zero if not supported or there is an error. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void InquiryCompleteEvent(THCIErrorCode aErr, TUint8 aNumResponses)=0; + + /** Called on an inquiry result complete event. + + @param aEntry TInquiryLogEntry containing results of inquiry. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void InquiryResultCompleteEvent(THCIErrorCode aErr,const TInquiryLogEntry& aEntry)=0; + + /** Called on a connection complete event. + + @param aConn Contains information about the completed connection. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ConnectionCompleteEvent(THCIErrorCode aErr, const TBTConnect &aConn)=0; + + /** Called on a connection request event. + + @param aConn Information about the device requesting the connection. + @released + @publishedPartner + */ + virtual void ConnectionRequestEvent(const TBTConnect &aConn)=0; + + /** Called on a disconnection complete event. + + @param aConnH Connection handle + @param aReason Reason for disconnection. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void DisconnectionCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, THCIErrorCode aReason)=0; + + /** Called on an authentication complete event. + + @param aConnH Connection handle + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void AuthenticationCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0; + + /** Called on a remote name request complete event. + + @param aBdaddr Bluetooth address of remote device + @param aBuf Name of remote device (max 248 bytes as defined by the bluetooth specification). + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void RemoteNameReqCompleteEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr, const TDesC8& aBuf)=0; + + /** Called on encryption change event. + + @param aConnH Connection handle + @param aEnable Whether encryption is enabled + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void EncryptionChangeEvent(THCIErrorCode aErr, THCIConnHandle aConnH,TBool aEnable)=0; + + /** Called on link key complete event. + + @param Connection handle + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ChangeLinkKeyCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0; + + /** Called on master link key complete event. + + @param aConnH Connection handle + @param aKeyFlag See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void MasterLinkKeyCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH,TBool aKeyFlag)=0; + + /** Called on read remote supported features complete event. + + @param aConnH Connection handle + @param aBitMaskList LMP_Features Bit Mask List (8 bytes) + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadRemoteSupportedFeaturesCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TUint64 aBitMaskList)=0; + /** Called on read remote version info complete event. + + @param aConnH Connection handle + @param aVer Information on remote hardware version + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadRemoteVersionInfoCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, const TBTDevRemoteHwVersion& aVer)=0; + + /** Called on QOS setup complete event. + + @param aQOS QOS information. + @param aErr HCI specific or system wide error code. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void QOSSetupCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBTQOS aQOS)=0; + + /** Called on Command Complete Event. + + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void CommandCompleteEvent(THCIErrorCode aErr,THCIOpcode aOpcode)=0; + + /** Called on command status event. + + @param aOpcode Opcode of the successfully completed event. + @released + @publishedPartner + */ + virtual void CommandStatusEvent(THCIOpcode aOpcode)=0; + + /** Called on Hardware Error Event. + + @param aHwCode Hardware code. + @released + @publishedPartner + */ + virtual void HardwareErrorEvent(TUint8 aHwCode)=0; + + /** Called on Flush Occurred Event. + + @param aErr HCI specific or system wide error code. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void FlushOccurredEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0; + + /** Called on Role Change Event. + + @param aRole New role. + @param aBdaddr Bluetooth device address of remote device. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void RoleChangeEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr,TBTBasebandRole aRole)=0; + + /** Called on HCI Completed Packets event. + + @param aConnH Connection handle + @param aNumPacketsCompleted Number of packets completed. + @released + @publishedPartner + */ + virtual void HCICompletedPackets(THCIConnHandle aConnH, TUint16 aNumPacketsCompleted)=0; //NumberCompletedPacketsEvent + + /** Called on Mode Change Event. + + @param aMode Current mode. + @param aInterval Interval defined according to current mode (see bluetooth specification). + @param aErr HCI specific or system wide error code. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void ModeChangeEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBTLinkMode aMode, TUint16 aInterval)=0; + + /** Called on Return Link Keys Event. + + @param aBdaddr Bluetooth device address of remote device. + @param aLinkKey Link key. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReturnLinkKeysEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr,const TBTLinkKey& aLinkKey)=0; + + /** Called on PIN Code Request Event. + + @param aBdaddr Bluetooth device address + @released + @publishedPartner + */ + virtual void PINCodeRequestEvent(const TBTDevAddr& aBdaddr)=0; + + /** Called on Link Key Request Event. + + @param aBdaddr Bluetooth device address + @released + @publishedPartner + */ + virtual void LinkKeyRequestEvent(const TBTDevAddr& aBdaddr)=0; + + /** Called on Link Key Notification Event. + + @param aBdaddr Bluetooth device address. + @param aLinkKey Link key. + @released + @publishedPartner + */ + virtual void LinkKeyNotificationEvent(const TBTDevAddr& aBdaddr,const TBTLinkKey& aLinkKey)=0; + + /** Called on Loopback Command Event. Not currently supported. + + @released + @internalTechnology + */ + virtual void LoopbackCommandEvent()=0; //not supported yet + + /** Called on Data Buffer Overflow Event. + + @param aLinkType + @released + @publishedPartner + */ + virtual void DataBufferOverflowEvent(TUint8 aLinkType)=0; + + /** Called on Max Slots Change Event. + + @param aMaxSlots New value of max slots. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void MaxSlotsChangeEvent(THCIConnHandle aConnH, TUint8 aMaxSlots)=0; + + /** Called on Read Clock Offset Result Event. + + @param aClockOffset Clock offset. + @param aErr HCI specific or system wide error code. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void ReadClockOffsetResultEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBasebandTime aClockOffset)=0; + + /** Called on Connection Packet Type Changed Event. + + @param aPacketType New packet type. + @param aErr HCI specific or system wide error code. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void ConnectionPacketTypeChangedEvent(THCIErrorCode aErr, + THCIConnHandle aConnH, TUint16 aPacketType)=0; + + /** Called on QOS Violation Event. + + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void QOSViolationEvent(THCIConnHandle aConnH)=0; + + /** Called on Page Scan Mode Change Event. + + @param aBdaddr Bluetooth device address. + @param aPageScanMode New page scan mode + @released + @publishedPartner + */ + virtual void PageScanModeChangeEvent(const TBTDevAddr& aBdaddr, TUint8 aPageScanMode)=0; + + /** Called on Page Scan Repetition Mode Change Event. + + @param aBdaddr Bluetooth device address + @param aPageScanRepetitionMode New page scan repetition mode + @released + @publishedPartner + */ + virtual void PageScanRepetitionModeChangeEvent(const TBTDevAddr& aBdaddr, TUint8 aPageScanRepetitionMode)=0; + + // data events + + /** Called on ACLDataReceivedEvent. + + @param aConnH Connection handle + @param aData Received data + @param aFlag See bluetooth specification + @released + @publishedPartner + */ + virtual void ACLDataReceivedEvent(THCIConnHandle aConnH,TUint8 aFlag,const TDesC8& aData)=0; + + /** Called on SCO Data Received Event. + + @param aData Recieved data. + @param aConnH Connection handle + @released + @publishedPartner + */ + virtual void SCODataReceivedEvent(THCIConnHandle aConnH, const TDesC8& aData)=0; + + // complete events + + + /** Called on Reset Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ResetCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Link Supervision Timeout Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteLinkSupervisionTimeoutCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Link Key Request Reply Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void LinkKeyRequestReplyCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Link Key Request Reply Negative Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void LinkKeyRequestReplyNegativeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on PIN Code Request Reply Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void PINCodeRequestReplyCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on PIN Code Request Reply Negative Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void PINCodeRequestReplyNegativeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Inquiry Cancel Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void InquiryCancelCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Periodic Inquiry Mode Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void PeriodicInquiryModeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Exit Periodic Inquiry Mode Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ExitPeriodicInquiryModeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Set Event Mask Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void SetEventMaskCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Set Event Filter Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void SetEventFilterCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Create New Unit Key Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void CreateNewUnitKeyCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Change Local Name Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ChangeLocalNameCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Authentication Enable Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteAuthenticationEnableCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Encryption Mode Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteEncryptionModeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Page Timeout Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WritePageTimeoutCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Connection Accept Timeout Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteConnectionAcceptTimeoutCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Class Of Device Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteClassOfDeviceCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Voice Setting Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteVoiceSettingCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Current IAC LAP Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteCurrentIACLAPCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Set Host Controller To Host Flow Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void SetHostControllerToHostFlowCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Host Buffer Size Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void HostBufferSizeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Host Number Of Completed Packets Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void HostNumberOfCompletedPacketsCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Scan Enable Complete Event. + + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteScanEnableCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called on Write Link Policy Settings Complete Event. + + @param aConnH Connection handle + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteLinkPolicySettingsCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH)=0; + + // results of local commands + + + /** Called on Read Stored Link Key Result. + + @param aNumKeysRead Number of keys read + @param aMaxNumKeys Max number of keys + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadStoredLinkKeyResult(THCIErrorCode aErr,TUint16 aNumKeysRead,TUint16 aMaxNumKeys)=0; + + /** Called on Write Stored Link Key Result. + + @param aNumKeysStored Number of keys stored + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void WriteStoredLinkKeyResult(THCIErrorCode aErr,TUint8 aNumKeysStored)=0; + + /** Called on Delete Stored Link Key Result. + + @param aNumKeysDeleted Number of keys deleted + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void DeleteStoredLinkKeyResult(THCIErrorCode aErr,TUint8 aNumKeysDeleted)=0; + + /** Called on Read Scan Enable Result. + + @param aEnable See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadScanEnableResult(THCIErrorCode aErr,TUint8 aEnable)=0; + + /** Called on Read Authentication Enable Result. + + @param aEnable See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadAuthenticationEnableResult(THCIErrorCode aErr,TUint8 aEnable)=0; + + /** Called on Read Encryption Enable Result. + + @param aEnable See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadEncryptionEnableResult(THCIErrorCode aErr,THCIEncryptModeFlag aEnable)=0; + + /** Called on Read Bdaddr Result. + + @param aBdaddr Bluetooth device address of remote device + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadBdaddrResult(THCIErrorCode aErr,const TBTDevAddr& aBdaddr)=0; + + /** Called on Read Class Of Device Result. + + @param aCoD Class of device of remote device + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadClassOfDeviceResult(THCIErrorCode aErr,TUint aCoD)=0; + + /** Called on Read Voice Setting Result. + + @param aVoiceChannelSetting Voice channel setting + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadVoiceSettingResult(THCIErrorCode aErr,TUint16 aVoiceChannelSetting)=0; + + /** Called on Read Local Name Result. + + @param aLocalName Local name + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadLocalNameResult(THCIErrorCode aErr,const TDesC8& aLocalName)=0; + + /** Called on Read Timeout Result. + + @param aType See bluetooth specification + @param aTimeout See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadTimeoutResult(THCIErrorCode aErr,THCITimeoutType aType,TBasebandTime aTimeout)=0; + + /** Called on Read Local Version Info Result. + + @param aHCIVersion Version information of local device hardware + @param aLMPVersion Version information of local LMP + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadLocalVersionInfoResult(THCIErrorCode aErr, TBTDevHCIVersion aHCIVersion, TBTDevLMPVersion aLMPVersion)=0; + + /** Called on Read Local Supported Features Result. + + @param aBitMaskList See bluetooth specification + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadLocalSupportedFeaturesResult(THCIErrorCode aErr, TUint64 aBitMaskList)=0; + /** Called on Read Country Code Result. + + @param aCountryCode Country code + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadCountryCodeResult(THCIErrorCode aErr, TUint8 aCountryCode)=0; + + /** Called on Read Number Of Supported IAC Result. + + @param aNumIACs Number of IACs + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadNumberOfSupportedIACResult(THCIErrorCode aErr, TUint8 aNumIACs)=0; + + /** Called on Read Discoverability Result. + + @param aNumIACs The number of concurrent IACs on which scanning is/would take place + @param aIAC IAC_LAP array. + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadDiscoverabilityResult(THCIErrorCode aErr, TUint8 aNumIACs, TUint aIAC[])=0; + + /** Called on Read Buffer Size Result. + + @param aAclMaxLen Maximum length of each ACL packet + @param aScoMaxLen Maximum length of each SCO packet + @param aNoACL Total number of ACL data packets + @param aNoSCO Total number of SCO data packets + @param aErr HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadBufferSizeResult(THCIErrorCode aErr,TUint16 aAclMaxLen, + TUint8 aScoMaxLen,TUint16 aNoACL,TUint16 aNoSCO)=0; + + /** Called on Read Role Discovery Result. + + @param aRole Current role + @param aStatus HCI specific or system wide error code. + @released + @publishedPartner + */ + virtual void ReadRoleDiscoveryResult(THCIErrorCode aStatus, TBTBasebandRole aRole)=0; + + /** Called on Vendor Specific Debug Event. + + @param aEventFrame The frame holds the event parameters and parameter length field + @released + @publishedPartner + */ + virtual void VendorSpecificDebugEvent(TPtrC8 aEventFrame)=0; + + // Power off event + + /** Called on Handle Power Status Change. + + @param aState New power state + @released + @publishedPartner + */ + virtual void HandlePowerStatusChange(TBTPowerState aState)=0; + + + // Results of Adaptive Frequency Hopping (AFH) commands + + /** Called in response to a SetAFHHostChannelClassification command. + + @param aStatus The success or not of the SetAFHHostChannelClassification command + @see SetAFHHostChannelClassification + @released + @publishedPartner + */ + virtual void SetAFHHostChannelClassificationCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called in response to a ReadAFHChannelMap command. + + @param aStatus The success or not of the ReadAFHChannelMap command + @param aConnH Connection handle + @param aAFHMode ETrue if AFH is enabled, EFalse if not + @param aAFHChannelMap The AFH channel map being used on the specified connection + @see ReadAFHChannelMap + @released + @publishedPartner + */ + virtual void ReadAFHChannelMapCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH, TBool aAFHMode, const TDesC8& aAFHChannelMap)=0; + + /** Called in response to a WriteAFHChannelAssessmentMode command. + + @param aStatus The success or not of the WriteAFHChannelAssessmentMode command + @see WriteAFHChannelAssessmentMode + @released + @publishedPartner + */ + virtual void WriteAFHChannelAssessmentModeCompleteEvent(THCIErrorCode aStatus)=0; + + /** Called in response to a ReadAFHChannelAssessmentMode command. + + @param aStatus The success or not of the ReadAFHChannelAssessmentMode command + @param aChannelAssessmentMode The host controller is checking for busy channels if ETrue, otherwise it is not + @see ReadAFHChannelAssessmentMode + @released + @publishedPartner + */ + virtual void ReadAFHChannelAssessmentModeCompleteEvent(THCIErrorCode aStatus, TBool aChannelAssessmentMode)=0; + + + /** Called in response to a Flush command. + + @param aStatus The success or not of the Flush command + @param aConnH The connection handle + @released + @publishedPartner + */ + virtual void FlushCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH)=0; + + + /** Called on a synchronous connection complete event. + @param aStatus + @param aConnH HCI connection handle + @param aBdaddr BT device address + @param aLinkType Link Type:SCO, Reserved or eSCO + @param aTransmissionInterval Transmission Interval + @param aRetransmissionWindow Retransmission Window + @param aRxPacketLength Rx Packet Length + @param aTxPacketLength Tx Packet Length + @param aAirMode Air Mode: uLaw, ALaw, CVSD or Transparent data + @released + @publishedPartner + */ + virtual void SynchronousConnectionCompleteEvent(const THCIErrorCode aErr, + const THCIConnHandle aConnH, + const TBTDevAddr& aBdaddr, + const TLinkType aLinkType, + const TUint8 aTransmissionInterval, + const TUint8 aRetransmissionWindow, + const TUint16 aRxPacketLength, + const TUint16 aTxPacketLength, + const TAirMode aAirMode)=0; + + /** Called on a synchronous connection changed event + @param aStatus + @param aConnH HCI connection handle + @param aTransmissionInterval Transmission Interval + @param aRetransmissionWindow Retransmission Window + @param aRxPacketLength Rx Packet Length + @param aTxPacketLength Tx Packet Length + @released + @publishedPartner + */ + virtual void SynchronousConnectionChangedEvent(const THCIErrorCode aErr, + const THCIConnHandle aConnH, + const TUint8 aTransmissionInterval, + const TUint8 aRetransmissionWindow, + const TUint16 aRxPacketLength, + const TUint16 aTxPacketLength)=0; + + + + /** Called when an HCI level Ioctl completes. + + @param aLevel The Ioctl level + @param aName The Ioctl function number + @param aOption Data associated with this Ioctl + @param aErr System-wide error code + @param aStackSAP A pointer to the SAP, used to track Ioctls + @released + @publishedPartner + */ + virtual void CompleteIoctl(TUint aLevel,TUint aName,TDes8* aOption,TInt aErr, TAny* aStackSAP)=0; + }; + + +/* + * Constants used for Symbian's RHCIDirectAccess test functionality + */ + + // Test Ioctls + enum THCIDirectAccessTestIoctl + { + EHCIDirectAccessTestIoctlSetFlag1 = 0, + EHCIDirectAccessTestIoctlSetFlag2, + EHCIDirectAccessTestIoctlGetFlag1, + EHCIDirectAccessTestIoctlGetFlag2, + EHCIDirectAccessTestIoctlValidateFlag1, + EHCIDirectAccessTestIoctlValidateFlag2, + EHCIDirectAccessTestIoctlTimerFiveSeconds, + EHCIDirectAccessTestIoctlTimerEightSeconds, + EHCIDirectAccessTestIoctlTestDataPath, + EHCIDirectAccessTestIoctlNotifyOnEventX, + EHCIDirectAccessTestIoctlTriggerEventX, + }; + + // text strings for testing data path + _LIT8(KHCIDirectAccessTestExpectedText, "ExpectedText"); + _LIT8(KHCIDirectAccessTestUnexpectedText, "UnexpectedText"); + +#endif