--- /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 <bttypes.h>
+#include <hcierrors.h>
+#include <hcitypes.h>
+#include <e32base.h>
+
+#include <bluetooth/hci/hciopcodes.h>
+#include <bluetooth/hci/aclpacketconsts.h>
+#include <bluetooth/hci/hciconsts.h>
+#include <bluetooth/hci/basebandpacketconsts.h>
+
+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