epoc32/include/hcibase.h
branchSymbian2
changeset 2 2fe1408b6811
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/epoc32/include/hcibase.h	Tue Mar 16 16:12:26 2010 +0000
     1.3 @@ -0,0 +1,1876 @@
     1.4 +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
     1.5 +// All rights reserved.
     1.6 +// This component and the accompanying materials are made available
     1.7 +// 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
     1.8 +// which accompanies this distribution, and is available
     1.9 +// at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
    1.10 +//
    1.11 +// Initial Contributors:
    1.12 +// Nokia Corporation - initial contribution.
    1.13 +//
    1.14 +// Contributors:
    1.15 +//
    1.16 +// Description:
    1.17 +// This is the API that the bluetooth stack expects from the HCI layer.
    1.18 +// It comprises an event notification interface and a command sending interface.
    1.19 +// Implementations of the HCI must derive from CHCIBase.
    1.20 +// 
    1.21 +//
    1.22 +
    1.23 +
    1.24 +
    1.25 +/**
    1.26 + @file
    1.27 + @publishedPartner
    1.28 + @released
    1.29 +*/
    1.30 +
    1.31 +#ifndef BT_HCIBASE_H_
    1.32 +#define BT_HCIBASE_H_
    1.33 +
    1.34 +#include <bttypes.h>
    1.35 +#include <hcierrors.h>
    1.36 +#include <hcitypes.h>
    1.37 +#include <e32base.h>
    1.38 +
    1.39 +#include <bluetooth/hci/hciopcodes.h>
    1.40 +#include <bluetooth/hci/aclpacketconsts.h>
    1.41 +#include <bluetooth/hci/hciconsts.h>
    1.42 +#include <bluetooth/hci/basebandpacketconsts.h>
    1.43 +
    1.44 +class CHCICommandFrame;
    1.45 +class CHCIACLDataFrame;
    1.46 +class CHCISCODataFrame;
    1.47 +class CHCIBase;
    1.48 +class MHCIEventObserver;
    1.49 +class CESockIniData;
    1.50 +
    1.51 +/** Factory for creating CHCIBase derived class.
    1.52 +
    1.53 +To provide a new HCI implementation, re-implement this
    1.54 +class in a DLL, which has a factory fucntion at oridnal 1
    1.55 +which returns a TAny* to the instance of this factory.
    1.56 +NewHCIL() will then be called on the factory to actually
    1.57 +create the CHCIBase derived object.
    1.58 +
    1.59 +@released
    1.60 +@publishedPartner
    1.61 +*/	
    1.62 +NONSHARABLE_CLASS(CHCIFactory) : public CBase
    1.63 +    {
    1.64 +public: 
    1.65 +	CHCIFactory();
    1.66 +    virtual TVersion Version() const;
    1.67 +    virtual CHCIBase* NewHCIL(MHCIEventObserver* aParent, CESockIniData* aIni=0);
    1.68 +	virtual CHCICommandFrame* NewHCICommandFrameL(THCIOpcode aOpcode);
    1.69 +	virtual CHCIACLDataFrame* NewHCIACLDataFrameL(TUint16 aSize);
    1.70 +	virtual CHCISCODataFrame* NewHCISCODataFrameL(TUint8 aSize);
    1.71 +	};
    1.72 +
    1.73 +
    1.74 +/** Abstract HCI Interface class.
    1.75 + 
    1.76 +The Symbian Bluetooth stack uses this abstract class as the 
    1.77 +polymorphic base through which it obtains host controller
    1.78 +access. The actual implementation is dependent on the DLL
    1.79 +loaded at run-time, as specified in the bt.bt.esk file.
    1.80 +The concrete class derived from this should be returned
    1.81 +by the CHCIFactory class, located through ordinal 1 in the
    1.82 +polymorphic DLL.
    1.83 +
    1.84 +@publishedPartner
    1.85 +@released
    1.86 +@see 
    1.87 +CHCI for detailed description of the functions.
    1.88 +MHCIEventObserver for the callback interface for events received over HCI.
    1.89 +*/ 
    1.90 +NONSHARABLE_CLASS(CHCIBase) : public CBase
    1.91 +	{
    1.92 +public:
    1.93 +
    1.94 +	/** Writes command frame.
    1.95 +
    1.96 +	 @param aFrame command frame to write
    1.97 +	 @return KErrBcspWriteCommandDataFailed on failure, KErrNone otherwise
    1.98 +	 @released
    1.99 +	 @publishedPartner
   1.100 +	 */
   1.101 +	virtual TInt WriteCommand(const CHCICommandFrame& aFrame)=0;
   1.102 +
   1.103 +	// HCI General exports
   1.104 +	/** Sets option.
   1.105 +
   1.106 +	 @param aName option to set
   1.107 +	 @param aData option value
   1.108 +	 @return System wide error code
   1.109 +	 @released
   1.110 +	 @publishedPartner
   1.111 +	 */
   1.112 +    virtual TInt SetOption(TUint aName,const TDesC8& aData)=0;
   1.113 +
   1.114 +    /** Gets option.
   1.115 +
   1.116 +	 @param aName option to set
   1.117 +	 @param aData desriptor to be filled with option data
   1.118 +	 @return System wide error code
   1.119 +     @released
   1.120 +     @publishedPartner
   1.121 +     */
   1.122 +    virtual TInt GetOption(TUint aName,TDes8& aData)=0;
   1.123 +	
   1.124 +	// HCI Data Calls
   1.125 +    /** Formats ACL Data.
   1.126 +
   1.127 +	 @param aFrame Reference to CHCIACLDataFrame which will be formatted with the data supplied in the other params
   1.128 +	 @param aConnH Connection handle for this frame
   1.129 +	 @param aFlags Flags to be set for this frame
   1.130 +	 @param aData Data for this frame
   1.131 +     @released
   1.132 +     @publishedPartner
   1.133 +     */
   1.134 +    virtual void FormatACLData(CHCIACLDataFrame& aFrame, THCIConnHandle aConnH,TUint8 aFlags,const TDesC8& aData)=0;
   1.135 +    
   1.136 +	/** Formats SCO Data.
   1.137 +
   1.138 +	 @param aFrame Reference to CHCISCODataFrame which will be formatted with the data supplied in the other params
   1.139 +	 @param aConnH Connection handle for this frame
   1.140 +	 @param aData Data for this frame
   1.141 +     @released
   1.142 +     @publishedPartner
   1.143 +     */
   1.144 +    virtual void FormatSCOData(CHCISCODataFrame& aFrame, THCIConnHandle aConnH, const TDesC8& aData)=0;
   1.145 +
   1.146 +    /** Writes ACL Data.
   1.147 +
   1.148 +	This forwards a write from link layer to host controller.  The descriptor in the frame is owned by the link layer.
   1.149 +
   1.150 +	 @param aFrame the formatted ACL payload from the linkmanager
   1.151 +	 @return System wide error code
   1.152 +     @released
   1.153 +     @publishedPartner
   1.154 +     */
   1.155 +	virtual TInt WriteACLData(const CHCIACLDataFrame& aFrame)=0;
   1.156 +
   1.157 +	/** Writes SCO Data.
   1.158 +
   1.159 +	This forwards a write from link layer to host controller.  The descriptor in the frame is owned by the link layer.
   1.160 +	 
   1.161 +	 @param aFrame the formatted SCO payload from the linkmanager
   1.162 +	 @return System wide error code
   1.163 +	 @released
   1.164 +	 @publishedPartner
   1.165 +	 */
   1.166 +    virtual TInt WriteSCOData(const CHCISCODataFrame& aFrame)=0;
   1.167 +
   1.168 +	// HCI Frame information commands
   1.169 +    /** Gets frame connection handle
   1.170 +
   1.171 +	 @param aFrame the frame to return the connection handle of
   1.172 +	 @return the connection handle from aFrame
   1.173 +     @released
   1.174 +     @publishedPartner
   1.175 +     */
   1.176 +	virtual THCIConnHandle FrameConnectionHandle(const CHCIACLDataFrame& aFrame) const =0;
   1.177 +
   1.178 +	/** Gets frame opcode.
   1.179 +
   1.180 +	 @param aFrame the frame to return the opcode of
   1.181 +	 @return the opcode of aFrame
   1.182 +	 @released
   1.183 +	 @publishedPartner
   1.184 +	 */
   1.185 +	virtual THCIOpcode FrameOpcode(const CHCICommandFrame& aFrame) const =0;
   1.186 +	
   1.187 +	// HCI Commands
   1.188 +	/**	Commands the host controller to start looking for remote devices within range.
   1.189 +  
   1.190 +	 The HCI client should not issue a second  Inquiry() before the first has 
   1.191 +	 completed, because the HC cannot cope with this and will return a 
   1.192 +	 COMMAND_DISALLOWED error
   1.193 +
   1.194 +	 @param aFrame The HCI frame to format
   1.195 +	 @param aCode InquiryAccessCode (3 bytes)
   1.196 +	 @param aLength InquiryLength N where N * 1.28s is the no. of seconds for inquiry
   1.197 +	 @param aNumResponses Number of responses from inquiry before it is halted - default 0 is unlimited number of responses.
   1.198 +	 @released
   1.199 +	 @publishedPartner
   1.200 +	 */
   1.201 +    virtual void Inquiry(CHCICommandFrame& aFrame, const TUint aCode=KGIAC, const TUint8 aLength=10, const TUint8 aNumResponses=0)=0;
   1.202 +
   1.203 +    /** Cancels an ongoing inquiry.
   1.204 +
   1.205 +	 @param aFrame frame to apply any necessary formatting to for inquiry cancel.
   1.206 +     @released
   1.207 +     @publishedPartner
   1.208 +     */
   1.209 +    virtual void InquiryCancel(CHCICommandFrame& aFrame)=0;
   1.210 +
   1.211 +    /** Commands the host controller to enter periodic enquiry mode
   1.212 +
   1.213 +	 @param aFrame The HCI frame to format
   1.214 +	 @param aMax MaxPeriodLength. The HC chooses a value between aMax and aMin. 
   1.215 +	 @param aMin MinPeriodLength 
   1.216 +	 @param aCode InquiryAccessCode (3 bytes)
   1.217 +	 @param aLength InquiryLength (default N=2)
   1.218 +	 @param aNumResponses Number of Responses (default=0)
   1.219 +     @released
   1.220 +     @publishedPartner
   1.221 +     */
   1.222 +	virtual void PeriodicInquiryMode(CHCICommandFrame& aFrame, TUint16 aMax,TUint16 aMin, const TUint aCode=0,const TUint8 aLength=2,const TUint8 aNumResponses=0)=0;
   1.223 +
   1.224 +	/** Exits the periodic inquiry.
   1.225 +
   1.226 +	 @param aFrame The HCI frame to format
   1.227 +	 @released
   1.228 +	 @publishedPartner
   1.229 +	 */
   1.230 +    virtual void ExitPeriodicInquiryMode(CHCICommandFrame& aFrame)=0;
   1.231 +
   1.232 +	/**	Initiates connection to remote device using the specified baseband packet type.
   1.233 +
   1.234 +	 @param aFrame The HCI frame to format
   1.235 +	 @param aBdaddr remove device address
   1.236 +	 @param aPacketType Packet Type
   1.237 +	 @param aPageScanRepetitionMode pages scan repetition mode
   1.238 +	 @param aPageScanMode page scan mode
   1.239 +	 @param aClockOffset Offset between local and remote clock
   1.240 +	 @param aAllowRoleSwitch Whether the remote device is allowed to role switch the local device
   1.241 +	 @released
   1.242 +	 @publishedPartner
   1.243 +	 */
   1.244 +    virtual void CreateConnection(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,
   1.245 +					TUint16 aPacketType=KDM1Packet, TUint8 aPageScanRepetitionMode=0,
   1.246 +					TUint8 aPageScanMode=0, TUint16 aClockOffset=0, TUint8 aAllowRoleSwitch=1)=0;
   1.247 +
   1.248 +    /**	Add an SCO connection between the Host Controller and the remote device.
   1.249 +
   1.250 +	 @param aFrame The HCI frame to format
   1.251 +	 @param aConnHandle Connection handle
   1.252 +	 @param aPacketType Packet Type
   1.253 +     @released
   1.254 +     @publishedPartner
   1.255 +     */
   1.256 +    virtual void AddSCOConnection(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TUint16 aPacketType)=0;
   1.257 +
   1.258 +
   1.259 +
   1.260 +
   1.261 +
   1.262 +
   1.263 +
   1.264 +	/**
   1.265 +	Adds a new or modifies an existing synchronous logical transport (SCO or eSCO)
   1.266 +	@param aFrame The HCI frame to format	
   1.267 +	@param aConnHandle Connection handle (2 bytes)
   1.268 +	@param aTransmitBandwidth (4 bytes)
   1.269 +	@param aReceiveBandwidth  (4 bytes)
   1.270 +	@param aMaxLatency        (2 bytes)
   1.271 +	@param aVoiceSettings     (2 bytes)
   1.272 +	@param aRetransmissionEffort (1 bytes)	
   1.273 +	@param aPacketType 		     (2 bytes)	
   1.274 +	*/
   1.275 +	virtual void SetupSynchronousConnectionCommand(CHCICommandFrame& aFrame, TUint16 aConnHandle,
   1.276 +						TUint aTransmitBandwidth,	TUint aReceiveBandwidth, TUint16 aMaxLatency,
   1.277 +						TUint16 aVoiceSettings,	TUint8  aRetransmissionEffort,
   1.278 +						TUint16 aPacketType)=0;
   1.279 +
   1.280 +	/**
   1.281 +	Accepts an incoming connection request for an synchronous connection.
   1.282 +	@param aFrame The HCI frame to format	
   1.283 +	@param aBdaddr BDADDR (6 bytes)
   1.284 +	@param aTransmitBandwidth (4 bytes)
   1.285 +	@param aReceiveBandwidth  (4 bytes)
   1.286 +	@param aMaxLatency        (2 bytes)
   1.287 +	@param aContentFormat        (2 bytes)
   1.288 +	@param aRetransmissionEffort (1 bytes)	
   1.289 +	@param aPacketType           (2 bytes)
   1.290 +	*/					
   1.291 +	virtual void AcceptSynchronousConnectionRequestCommand(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,
   1.292 +						TUint aTransmitBandwidth,	TUint aReceiveBandwidth, TUint16 aMaxLatency,
   1.293 +						TUint16 aContentFormat, TUint8  aRetransmissionEffort, TUint16 aPacketType)=0;
   1.294 +	/**
   1.295 +	Rejects the synchronous connction from thre remote device (aBdaddr).
   1.296 +
   1.297 +	@param aFrame The HCI frame to format
   1.298 +	@param aBdaddr BDADDR
   1.299 +	@param THCIErrorCode Reject reason
   1.300 +	*/					
   1.301 +	virtual void RejectSynchronousConnectionRequestCommand(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIErrorCode aReason)=0;
   1.302 +																	
   1.303 +
   1.304 +
   1.305 +
   1.306 +
   1.307 +
   1.308 +
   1.309 +    /**	Accepts an incoming connection request.
   1.310 +
   1.311 +	 @param aFrame The HCI frame to format
   1.312 +	 @param aBdaddr bluetooth address of remote device
   1.313 +	 @param aRole Role - 0x00=Master, 0x01=Slave.
   1.314 +     @released
   1.315 +     @publishedPartner
   1.316 +     */
   1.317 +    virtual void AcceptConnectionRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,TUint8 aRole)=0;
   1.318 +
   1.319 +    /**	Rejects the connection from the remote device.
   1.320 +
   1.321 +	 @param aFrame The HCI frame to format
   1.322 +	 @param aBdaddr Bluetooth address of remote device
   1.323 +	 @param THCIErrorCode Reject reason
   1.324 +     @released
   1.325 +     @publishedPartner
   1.326 +     */
   1.327 +    virtual void RejectConnectionRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIErrorCode aReason)=0;
   1.328 +
   1.329 +    /**	Replies to the remote host with the supplied link key.
   1.330 +
   1.331 +	 @param aFrame The HCI frame to format
   1.332 +	 @param aBdaddr bluetooth address of remote device
   1.333 +	 @param aLinkKey Link key (16 bytes)
   1.334 +     @released
   1.335 +     @publishedPartner
   1.336 +     */
   1.337 +    virtual void LinkKeyRequestReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,const TDesC8& aLinkKey)=0;
   1.338 +
   1.339 +    /**	Notifies the remote host that the link key was not accepted.
   1.340 +
   1.341 +	 @param aFrame The HCI frame to format
   1.342 +	 @param aBdaddr Bluetooth address of remote device
   1.343 +     @released
   1.344 +     @publishedPartner
   1.345 +     */
   1.346 +    virtual void LinkKeyRequestNegativeReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr)=0;
   1.347 +
   1.348 +    /**	Returns to the remote host the requested PIN.
   1.349 +
   1.350 +	 @param aFrame The HCI frame to format
   1.351 +	 @param aBdaddr Bluetooth address of remote device
   1.352 +	 @param aPIN PIN Code (up to 16 bytes)
   1.353 +     @released
   1.354 +     @publishedPartner
   1.355 +     */
   1.356 +    virtual void PINCodeRequestReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,const TDesC8& aPIN)=0; 
   1.357 +
   1.358 +    /**	Notifies the remote host that the PIN code was rejected.
   1.359 +
   1.360 +	 @param aFrame The HCI frame to format
   1.361 +	 @param aBdaddr Bluetooth address of remote device
   1.362 +     @released
   1.363 +     @publishedPartner
   1.364 +     */
   1.365 +    virtual void PINCodeRequestNegativeReply(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr)=0; 
   1.366 +
   1.367 +    /**	Disconnect the ACL or SCO connection corresponding to the supplied handle.
   1.368 +
   1.369 +	 @param aFrame The HCI frame to format
   1.370 +	 @param aConnHandle Handle of connection to disconnect
   1.371 +	 @param aReason Reason for disconnection
   1.372 +     @released
   1.373 +     @publishedPartner
   1.374 +     */
   1.375 +	virtual void Disconnect(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,THCIErrorCode aReason)=0;
   1.376 +
   1.377 +	/**	Changes baseband packet type (e.g DH1, DM3 etc.).
   1.378 +
   1.379 +	 @param aFrame The HCI frame to format
   1.380 +	 @param aConnHandle Connection Handle
   1.381 +	 @param aType Packet Type.  This should be one of the consts defined in hcibase.h e.g. KDM1Packet.
   1.382 +	 @released
   1.383 +	 @publishedPartner
   1.384 +	 */
   1.385 +	virtual void ChangeConnectionPacketType(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TUint16 aType)=0;
   1.386 +
   1.387 +	/** Perform authenticaction request.	
   1.388 +
   1.389 +	 @param aFrame The HCI frame to format
   1.390 +	 @param aConnHandle Connection Handle
   1.391 +	 @released
   1.392 +	 @publishedPartner
   1.393 +	 */
   1.394 +    virtual void AuthenticationRequest(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.395 +
   1.396 +    /** Sets connection encryption
   1.397 +
   1.398 +	 @param aFrame The HCI frame to format
   1.399 +	 @param aConnHandle Connection Handle
   1.400 +	 @param aEnable Enable flag ETrue=Enable link encryption, EFalse=Disable link encryption
   1.401 +     @released
   1.402 +     @publishedPartner
   1.403 +     */
   1.404 +    virtual void SetEncryptionEnable(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TBool aEnable)=0;
   1.405 +
   1.406 +    /**	Notifies host of need to change connection key for the supplied connection handle.
   1.407 +
   1.408 +	 @param aFrame The HCI frame to format
   1.409 +	 @param aConnHandle Connection Handle
   1.410 +     @released
   1.411 +     @publishedPartner
   1.412 +     */
   1.413 +    virtual void ChangeConnectionLinkKey(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.414 +
   1.415 +    /**	Not used.
   1.416 +
   1.417 +	 @param aFrame The HCI frame to format
   1.418 +	 @param aKeyFlag Link Key Flag. Possible values are ETrue to use temporary link key or EFalse to  use regular link key
   1.419 +     @released
   1.420 +     @publishedPartner
   1.421 +     */
   1.422 +    virtual void MasterLinkKey(CHCICommandFrame& aFrame, TBool aKeyFlag)=0;
   1.423 +
   1.424 +    /**	Retrieves the remote hosts advertised hardware/firmware features.
   1.425 +
   1.426 +	 @param aFrame The HCI frame to format
   1.427 +	 @param aConnHandle Connection Handle
   1.428 +     @released
   1.429 +     @publishedPartner
   1.430 +     */
   1.431 +    virtual void ReadRemoteSupportedFeatures(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.432 +
   1.433 +    /**	Retrieve remote hosts HW/Firmware revision information.
   1.434 +
   1.435 +	 @param aFrame The HCI frame to format
   1.436 +	 @param aConnHandle Connection Handle
   1.437 +     @released
   1.438 +     @publishedPartner
   1.439 +     */
   1.440 +    virtual void ReadRemoteVersionInfo(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.441 +
   1.442 +	/** Request on human redable name of remote host.
   1.443 +
   1.444 +	 @param aFrame The HCI frame to format
   1.445 +	 @param aBdaddr The bluetooth address of device on which we seek to find a name
   1.446 +	 @param aPageScanRepetitionMode Page scan repetition mode
   1.447 +	 @param aPageScanMode Page scan mode
   1.448 +	 @param aClockOffset Offset of remote device clock from local device clock
   1.449 +	 @released
   1.450 +	 @publishedPartner
   1.451 +	 */
   1.452 +    virtual void RemoteNameRequest(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr, TUint8 aPageScanRepetitionMode=0,
   1.453 +					TUint8 aPageScanMode=0, TBasebandTime aClockOffset=0)=0;
   1.454 +
   1.455 +    /**	Retrieve offset of remote clock from local clock.
   1.456 +
   1.457 +	 @param aFrame The HCI frame to format
   1.458 +	 @param aConnHandle Connection Handle
   1.459 +     @released
   1.460 +     @publishedPartner
   1.461 +     */
   1.462 +    virtual void ReadClockOffset(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.463 +
   1.464 +	// HCI Link Policy Commands 
   1.465 +    /**	Write local link policy settings
   1.466 +
   1.467 +	 @param aFrame The HCI frame to format
   1.468 +	 @param aConnHandle Connection Handle
   1.469 +	 @param aSettings @see Bluetooth HCI specification
   1.470 +     @released
   1.471 +     @publishedPartner
   1.472 +     */
   1.473 +	virtual void WriteLinkPolicySettings(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TUint16 aSettings)=0;
   1.474 +
   1.475 +	/**	Switch radio and host controller to Hold mode.
   1.476 +
   1.477 +	 @param aFrame The HCI frame to format
   1.478 +	 @param aConnHandle Connection Handle 
   1.479 +	 @param aHoldMaxInterval Max Hold Interval N, where Time of Hold=N*0.625ms (1 baseband slot)
   1.480 +	 @param aHoldMinInterval Min Hold interval N, as above (both up to 40.9 sec)
   1.481 +	 @released
   1.482 +	 @publishedPartner
   1.483 +	 */
   1.484 +    virtual void HoldMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TBasebandTime aHoldMaxInterval, 
   1.485 +		TBasebandTime aHoldMinInterval)=0;
   1.486 +
   1.487 +	/**	Switch radio and host controller to Sniff mode.
   1.488 +
   1.489 +	 @param aFrame The HCI frame to format
   1.490 +	 @param aConnHandle Connection Handle
   1.491 +	 @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)
   1.492 +	 @param aSniffMinInterval Min Sniff interval , as above
   1.493 +	 @param aAttemptSlots Sniff Attempt - the period the slave will listen after each sniff interval
   1.494 +	 @param aTimeOutSlots Sniff Timeout - time listening for packets as long as some arrive
   1.495 +	 @released
   1.496 +	 @publishedPartner
   1.497 +	 */
   1.498 +    virtual void SniffMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle,TBasebandTime aSniffMaxInterval,TBasebandTime
   1.499 +		aSniffMinInterval, TBasebandTime aAttempSlots, TBasebandTime aTimeOutSlots)=0;
   1.500 +
   1.501 +	/**	Switch radio and host out of the Sniff mode.
   1.502 +
   1.503 +	 @param aFrame The HCI frame to format
   1.504 +	 @param aConnHandle Connection Handle
   1.505 +	 @released
   1.506 +	 @publishedPartner
   1.507 +	 */
   1.508 +    virtual void ExitSniffMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.509 +
   1.510 +	/**	Switch radio and host controller to the Park mode.
   1.511 +
   1.512 +	 @param aFrame The HCI frame to format
   1.513 +	 @param aConnHandle Connection Handle
   1.514 +	 @param aBeaconMax Beacon Max Interval Length N where interval between beacons=N*0.625ms
   1.515 +	 @param aBeaconMin Beacon Min Interval Length N where interval between beacons=N*0.625ms
   1.516 +	 @released
   1.517 +	 @publishedPartner
   1.518 +	 */
   1.519 +    virtual void ParkMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle, TBasebandTime aBeaconMaxInterval, 
   1.520 +		TBasebandTime aBeaconMinInterval)=0;
   1.521 +
   1.522 +    /**	Switch radio and host controller off the Park mode.
   1.523 +
   1.524 +	 @param aFrame The HCI frame to format
   1.525 + 	 @param aConnHandle Connection Handle
   1.526 +     @released
   1.527 +     @publishedPartner
   1.528 +     */
   1.529 +    virtual void ExitParkMode(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.530 +
   1.531 +	/**	Initiate role discovery for the supplied connection handle.
   1.532 +
   1.533 +	 @param aFrame The HCI frame to format
   1.534 +	 @param aConnHandle Connection Handle
   1.535 +	 @released
   1.536 +	 @publishedPartner
   1.537 +	 */
   1.538 +    virtual void RoleDiscovery(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.539 +
   1.540 +	/**	Switch current role (master / slave) for the physical link associated with the bluetooth device address provided.
   1.541 +	
   1.542 +	 @param aFrame The HCI frame to format
   1.543 +	 @param aRole New role 
   1.544 +	 @param aAddr Bluetooth device address of remote device 
   1.545 +	 @released
   1.546 +	 @publishedPartner
   1.547 +	 */
   1.548 +	virtual void SwitchRole(CHCICommandFrame& aFrame, TBTBasebandRole aRole, const TBTDevAddr& aAddr)=0;
   1.549 +
   1.550 +
   1.551 +	// HCI Host Controller and Baseband Commands 
   1.552 +	/**	Sets the mask for the reception or the filtering-out of HCI events from the host controller.
   1.553 +
   1.554 + 	 @param aFrame The HCI frame to format
   1.555 +	 @param aMask Event Mask
   1.556 +	 @released
   1.557 +	 @publishedPartner
   1.558 +	 */
   1.559 +    virtual void SetEventMask(CHCICommandFrame& aFrame, const THCIEventMask& aMask)=0;
   1.560 +
   1.561 +    /**	Resets the Host Controller hardware state. 
   1.562 +
   1.563 +	 @param aFrame The HCI frame to format
   1.564 +     @released
   1.565 +     @publishedPartner
   1.566 +     */
   1.567 +    virtual void Reset(CHCICommandFrame& aFrame)=0;
   1.568 +
   1.569 +    /**	Set the filter mask for remotely initiated  events.
   1.570 +
   1.571 +	 @param aFrame The HCI frame to format
   1.572 +	 @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
   1.573 +     @released
   1.574 +     @publishedPartner
   1.575 +     */
   1.576 +    virtual void SetEventFilter(CHCICommandFrame& aFrame, const THCIEventCondition& aData)=0;
   1.577 +
   1.578 +    /**	Flush buffers corresponding to the supplied connection handle.
   1.579 +
   1.580 +	 @param aFrame The HCI frame to format
   1.581 +	 @param aConnHandle Connection Handle
   1.582 +     @released
   1.583 +     @publishedPartner
   1.584 +     */
   1.585 +    virtual void Flush(CHCICommandFrame& aFrame, THCIConnHandle aConnHandle)=0;
   1.586 +
   1.587 +    /**	Creates a new unit key in the host controller.
   1.588 +
   1.589 +	 @param aFrame The HCI frame to format
   1.590 +     @released
   1.591 +     @publishedPartner
   1.592 +     */
   1.593 +    virtual void CreateNewUnitKey(CHCICommandFrame& aFrame)=0;
   1.594 +
   1.595 +    /**	Reads out from the host controller the stored link key for given device address
   1.596 +
   1.597 +	 @param aFrame The HCI frame to format
   1.598 +	 @param aBdaddr Bluetooth device address to read the link key for.
   1.599 +	 @param aFlag Read all keys flag
   1.600 +     @released
   1.601 +     @publishedPartner
   1.602 +     */
   1.603 +    virtual void ReadStoredLinkKey(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIReadAllKeysFlag aFlag)=0;
   1.604 +
   1.605 +	/**	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.
   1.606 +	
   1.607 +	 @param aFrame The HCI frame to format
   1.608 +	 @param aNumOfKeysToWrite Number of keys to write to storage
   1.609 +	 @param aBdaddr Bluetooth device address for the associated link key
   1.610 +	 @param aLinkKey The Link Key
   1.611 +	 @released
   1.612 +	 @publishedPartner
   1.613 +	 */
   1.614 +    virtual void WriteStoredLinkKey(CHCICommandFrame& aFrame, /*TUint8 aNumOfKeysToWrite,*/
   1.615 +		const TBTDevAddr& aBdaddr,const TDesC8& aLinkKey)=0;
   1.616 +
   1.617 +    /**	Delete the link key stored in the host controller's volatile storage.
   1.618 +
   1.619 +	 @param aFrame The HCI frame to format
   1.620 +	 @param aBdaddr Bluetooth device address associated with the link key to delete.
   1.621 +	 @param aFlag Delete options flag
   1.622 +     @released
   1.623 +     @publishedPartner
   1.624 +     */
   1.625 +    virtual void DeleteStoredLinkKey(CHCICommandFrame& aFrame, const TBTDevAddr& aBdaddr,THCIDeleteAllKeysFlag aFlag)=0;
   1.626 +
   1.627 +    /**	Sets the local Bluetooth device name.
   1.628 +
   1.629 +	 @param aFrame The HCI frame to format
   1.630 +	 @param aName Local device name (max 248 characters as defined in bluetooth specification).
   1.631 +     @released
   1.632 +     @publishedPartner
   1.633 +     */
   1.634 +    virtual void ChangeLocalName(CHCICommandFrame& aFrame, const TDesC8& aName)=0;
   1.635 +
   1.636 +    /**	Reads out the stored local Bluetooth device name.
   1.637 +	
   1.638 +	 @param aFrame The HCI frame to format
   1.639 +     @released
   1.640 +     @publishedPartner
   1.641 +     */
   1.642 +	virtual void ReadLocalName(CHCICommandFrame& aFrame)=0;
   1.643 +
   1.644 +	/**	Reads out of the Bluetooth device the connection accept timeout, for incoming connections.
   1.645 +
   1.646 +	 @param aFrame The HCI frame to format
   1.647 +	 @released
   1.648 +	 @publishedPartner
   1.649 +	 */
   1.650 +    virtual void ReadConnectionAcceptTimeout(CHCICommandFrame& aFrame)=0;
   1.651 +
   1.652 +    /**	Sets the connection accept timeout in the host controller.
   1.653 +
   1.654 +	 @param aFrame The HCI frame to format
   1.655 +	 @param aTimeout The connection timeout
   1.656 +     @released
   1.657 +     @publishedPartner
   1.658 +     */
   1.659 +    virtual void WriteConnectionAcceptTimeout(CHCICommandFrame& aFrame, TBasebandTime aTimeout)=0;
   1.660 +    
   1.661 +    /**	Commands the Bluetooth hardware to respond with its Page Timeout.
   1.662 +	
   1.663 +	 @param aFrame The HCI frame to format
   1.664 +     @released
   1.665 +     @publishedPartner
   1.666 +     */
   1.667 +	virtual void ReadPageTimeout(CHCICommandFrame& aFrame)=0;
   1.668 +
   1.669 +	/**	Sets the page timeout in the host controller.
   1.670 +
   1.671 +	 @param aFrame The HCI frame to format
   1.672 +	 @param aTimeout Page Timeout.  This must be between KMaxPageTimeout and KMinPageTimeout.
   1.673 +	 @released
   1.674 +	 @publishedPartner
   1.675 +	 */
   1.676 +    virtual void WritePageTimeout(CHCICommandFrame& aFrame, TBasebandTime aTimeout)=0;
   1.677 +
   1.678 +    /**	Read out of the host controller the scan options.
   1.679 +	
   1.680 +	 @param aFrame The HCI frame to format
   1.681 +     @released
   1.682 +     @publishedPartner
   1.683 +     */
   1.684 +    virtual void ReadScanEnable(CHCICommandFrame& aFrame)=0;
   1.685 +
   1.686 +    /**	Sets the scan options on the host controller.
   1.687 +
   1.688 +	 @param aFrame The HCI frame to format
   1.689 +	 @param  aScanEnable Scan enable options
   1.690 +     @released
   1.691 +     @publishedPartner
   1.692 +     */
   1.693 +    virtual void WriteScanEnable(CHCICommandFrame& aFrame, THCIScanEnable aEnable=EInquiryAndPageScan)=0;
   1.694 +	
   1.695 +    /**	Read out of the host controller the number of supported inquiry access codes.
   1.696 +
   1.697 +	 @param aFrame The HCI frame to format
   1.698 +     @released
   1.699 +     @publishedPartner
   1.700 +     */
   1.701 +	virtual void ReadNumberOfSupportedIAC(CHCICommandFrame& aFrame)=0;
   1.702 +
   1.703 +	/**	Write to the host controller the lower address parts supplied.
   1.704 +
   1.705 +	 @param aFrame The HCI frame to format
   1.706 +	 @param aNumCurrentIAC The number of inquiry access code lower address parts being sent to the hardware
   1.707 +	 @param aIAC_LAP The inquiry access code lower address parts - 3 bytes each: e.g: GIACLAP=0x9e8b33, LIACLAP=0x9e8b00
   1.708 +	 @released
   1.709 +	 @publishedPartner
   1.710 +	 */
   1.711 +    virtual void WriteCurrentIACLAP(CHCICommandFrame& aFrame, TUint8 aNumCurrentIAC, TUint aIAC_LAP[])=0;
   1.712 +
   1.713 +    /**	Read out the inquiry access code lower address parts.
   1.714 +	
   1.715 +	 @param aFrame The HCI frame to format
   1.716 +     @released
   1.717 +     @publishedPartner
   1.718 +     */
   1.719 +	virtual void ReadCurrentIACLAP(CHCICommandFrame& aFrame)=0;
   1.720 +
   1.721 +	/**	Read out from the host controller whether authentication is enabled.
   1.722 +
   1.723 +	 @param aFrame The HCI frame to format
   1.724 +	 @released
   1.725 +	 @publishedPartner
   1.726 +	 */
   1.727 +    virtual void ReadAuthenticationEnable(CHCICommandFrame& aFrame)=0;
   1.728 +
   1.729 +    /**	Set/Unset authentication.
   1.730 +
   1.731 +	 @param aFrame The HCI frame to format
   1.732 +	 @param aAuthEnable	Authentication Enable.  Possible values are EFalse for authentication disabled or ETrue for authentication enabled
   1.733 +     @released
   1.734 +     @publishedPartner
   1.735 +     */
   1.736 +    virtual void WriteAuthenticationEnable(CHCICommandFrame& aFrame, TBool aAuthEnable)=0;
   1.737 +
   1.738 +    /**	Read out the encryption mode.
   1.739 +
   1.740 +	 @param aFrame The HCI frame to format
   1.741 +     @released
   1.742 +     @publishedPartner
   1.743 +     */
   1.744 +    virtual void ReadEncryptionMode(CHCICommandFrame& aFrame)=0;
   1.745 +
   1.746 +    /**	Set/unset the encryption.
   1.747 +
   1.748 +	 @param aFrame The HCI frame to format
   1.749 +	 @param aFlag Whether to enable encryption.	 Possible values are EFalse to disable encryption or ETrue to enable encryption.
   1.750 +     @released
   1.751 +     @publishedPartner
   1.752 +     */
   1.753 +    virtual void WriteEncryptionMode(CHCICommandFrame& aFrame, THCIEncryptModeFlag aFlag)=0;
   1.754 +
   1.755 +    /**	Reads out the class of device of the local Bluetooth device.
   1.756 +
   1.757 +	 @param aFrame The HCI frame to format
   1.758 +     @released
   1.759 +     @publishedPartner
   1.760 +     */
   1.761 +    virtual void ReadClassOfDevice(CHCICommandFrame& aFrame)=0;
   1.762 +
   1.763 +    /**	Sets the local Bluetooth class of device.
   1.764 +
   1.765 +	 @param aFrame The HCI frame to format
   1.766 +	 @param aCoD Class Of Device
   1.767 +     @released
   1.768 +     @publishedPartner
   1.769 +     */
   1.770 +    virtual void WriteClassOfDevice(CHCICommandFrame& aFrame, TUint aCoD)=0;
   1.771 +
   1.772 +    /**	Read the Bluetooth hardware voice settings.
   1.773 +
   1.774 +	 @param aFrame The HCI frame to format
   1.775 +     @released
   1.776 +     @publishedPartner
   1.777 +     */
   1.778 +	virtual void ReadVoiceSetting(CHCICommandFrame& aFrame)=0;
   1.779 +
   1.780 +	/**	Set the local Bluetooth device voice settings. 
   1.781 +
   1.782 +	 @param aFrame The HCI frame to format
   1.783 +	 @param aVoiceChannelSetting	Voice channel settings as defined by the HCI specification.
   1.784 +	 @released
   1.785 +	 @publishedPartner
   1.786 +	 */
   1.787 +	virtual void WriteVoiceSetting(CHCICommandFrame& aFrame, TInt16 aVoiceChannelSetting)=0;
   1.788 +    
   1.789 +	// HCI Informational Parameters Commands
   1.790 +	/**	Retrieve local hardware/firmware revision info.
   1.791 +
   1.792 +	 @param aFrame The HCI frame to format
   1.793 +	 @released
   1.794 +	 @publishedPartner
   1.795 +	 */
   1.796 +	virtual void ReadLocalVersionInformation(CHCICommandFrame& aFrame)=0;
   1.797 +
   1.798 +	/**	Retrieve local hardware/firmware capabilities.
   1.799 +
   1.800 +	 @param aFrame The HCI frame to format
   1.801 +	 @released
   1.802 +	 @publishedPartner
   1.803 +	 */
   1.804 +	virtual void ReadLocalSupportedFeatures(CHCICommandFrame& aFrame)=0;
   1.805 +
   1.806 +	/**	Retrieve from the host controller its buffering capabilities.
   1.807 +
   1.808 +	 @param aFrame The HCI frame to format
   1.809 +	 @released
   1.810 +	 @publishedPartner
   1.811 +	 */
   1.812 +    virtual void ReadBufferSize(CHCICommandFrame& aFrame)=0;  
   1.813 +  
   1.814 +    /**	Retrieve the hardware's intended country code (for security/encryption issues). 
   1.815 +
   1.816 +	 @param aFrame The HCI frame to format
   1.817 +     @released
   1.818 +     @publishedPartner
   1.819 +     */
   1.820 +	virtual void ReadCountryCode(CHCICommandFrame& aFrame)=0;
   1.821 +
   1.822 +	/**	Retrieve local Bluetooth device address.
   1.823 +
   1.824 +	 @param aFrame The HCI frame to format
   1.825 +	 @released
   1.826 +	 @publishedPartner
   1.827 +	 */
   1.828 +    virtual void ReadBDADDR(CHCICommandFrame& aFrame)=0;
   1.829 +	
   1.830 +	// Host Controller to Host Data Flow Control
   1.831 +    /**	Set/unset notification of delivery of packets, from the host controller to the host.
   1.832 +
   1.833 +	 @param aFrame The HCI frame to format
   1.834 +	 @param aFlowFlag Flow Control Enable flag
   1.835 +     @released
   1.836 +     @publishedPartner
   1.837 +     */
   1.838 +    virtual void SetHostControllerToHostFlowControl(CHCICommandFrame& aFrame, TBool aHC2HFlowFlag)=0;// may return KErrNoMemory
   1.839 +
   1.840 +    /** Notification to host controller of the number of packets that the above 
   1.841 +	 layers (L2CAP) have consumed.  HostNumberOfCompletedPackets command to be 
   1.842 +	 issued by L2CAP.
   1.843 +
   1.844 +	 @param aFrame The HCI frame to format
   1.845 +	 @param aNumHandles	Number of connectionhandles
   1.846 +	 @param aConnH Connection handle 
   1.847 +	 @param aCompletedPacketsNo	Host num of completed packets
   1.848 +     @released
   1.849 +     @publishedPartner
   1.850 +     */
   1.851 +	virtual void HostNumberOfCompletedPackets(CHCICommandFrame& aFrame, TUint8 aNumHandles, THCIConnHandle aConnH[], TUint16 aCompletedPacketsNo[])=0;
   1.852 +
   1.853 +	/**	Notifies the host controller of the hosts buffering capabilities.
   1.854 +
   1.855 +	 @param aFrame The HCI frame to format
   1.856 +	 @param aACLDataLength	Host's ACL Data Packet Length
   1.857 +	 @param aSCODataLength	Host's SCO Data Packet Length   
   1.858 +	 @param aTotalACLPackets Total Number of ACL Data Packets that the Host can handle
   1.859 +	 @param aTotalSCOPackets Total Number of SCO Data Packets that the Host can handle
   1.860 +	 @released
   1.861 +	 @publishedPartner
   1.862 +	 */
   1.863 +	virtual void HostBufferSize(CHCICommandFrame& aFrame, TUint16 aACLDataLength,TUint8 aSCODataLength,
   1.864 +        TUint16 aTotalACLPackets, TUint16 aTotalSCOPackets)=0;
   1.865 +
   1.866 +	/** Writes link supervision timeout.
   1.867 +
   1.868 +	 @param aFrame The HCI frame to format
   1.869 +	 @param aConnH Connection handle
   1.870 +	 @param aTimeout Timeout to write
   1.871 +	 @released
   1.872 +	 @publishedPartner
   1.873 +	 */
   1.874 +	virtual void WriteLinkSupervisionTimeout(CHCICommandFrame& aFrame, THCIConnHandle aConnH, TBasebandTime aTimeout)=0;
   1.875 +
   1.876 +	/** This call allows for a raw HCI command frame to be written to the HC.
   1.877 +
   1.878 +    This is intended for vendor specific commands for which the opcode 
   1.879 +	field will be known to the HCI.
   1.880 +
   1.881 +    These raw frames should be constructed by calling the HCI factory
   1.882 +    function with the opcode constructed of the vendor debug opcode group field
   1.883 +	and the particular OCF required.  This function should then be called with the
   1.884 +    appropriately formatted parameters which shall be placed into the frame's
   1.885 +    payload.  It should be noted that the client need NOT to be concerned
   1.886 +    with the HCTL framing at all.
   1.887 +
   1.888 +    The HCI will only then copy this frame to the host controller after putting 
   1.889 +	it in an HCTL frame.
   1.890 +
   1.891 +    Note that the client is responsible for policing the size of the descriptor
   1.892 +    passed to this function.  The length should be: 0 <= n <= KHCIMaxCommandLength
   1.893 +
   1.894 +     @param aFrame The HCI frame to format
   1.895 +     @param aData The frame parameters   
   1.896 +	 @released
   1.897 +	 @publishedPartner
   1.898 +	 */
   1.899 +	virtual void WriteVendorRawFrameCommand(CHCICommandFrame& aFrame, const TDesC8& aData)=0;
   1.900 +
   1.901 +
   1.902 +	// HCI Status Parameters Commands
   1.903 +	// not here yet
   1.904 +	
   1.905 +	// HCI Testing Commands
   1.906 +	// not here yet 
   1.907 +	/** Used for testing.
   1.908 +
   1.909 +	 @released
   1.910 +	 @internalComponent
   1.911 +	 */
   1.912 +	virtual TAny *LogIndex() const=0;
   1.913 +
   1.914 +	// methods to allow stack to query HCI about its features
   1.915 +	/** Reads ACL reporting interval.
   1.916 +
   1.917 +	 @return the ACL reporting interval.
   1.918 +	 @released
   1.919 +	 @publishedPartner
   1.920 +	 */
   1.921 +	virtual TUint16 ReadACLReportingInterval() = 0; // Some hardware only reports on the nth ACL data packet being sent
   1.922 +	                                                // this is an opportunity for the HCI to supply a minimum value of n
   1.923 +													// to the Link Manager
   1.924 +
   1.925 +	/** Reads size of HCI framing overhead per frame.
   1.926 +
   1.927 +	 @return size of HCI framing overhead per frame.
   1.928 +	 @released
   1.929 +	 @publishedPartner
   1.930 +	 */
   1.931 +	virtual TUint16 ReadACLFramingOverhead() = 0; // Size of HCI framing overhead per frame
   1.932 +
   1.933 +	// Adaptive Frequency Hopping (AFH)
   1.934 +	
   1.935 +	/**	Notifies the host controller of channels that are known by the host to be bad or to be about to be bad.
   1.936 +	
   1.937 +	 This allows those channels to be avoided if Adaptive Frequency Hopping is active on a connection.
   1.938 +	 
   1.939 +	 @param aFrame The HCI frame to format
   1.940 +	 @param aChannelClassification Bitwise representation of the bad channels
   1.941 +	 @released
   1.942 +	 @publishedPartner
   1.943 +	 */
   1.944 +    virtual void SetAFHHostChannelClassification(CHCICommandFrame& aFrame, const TDesC8& aChannelClassification)=0;
   1.945 +
   1.946 +	/**	Retrieves the AFH channel map being used on the specified connection.
   1.947 +	
   1.948 +	 If we are master this will be the local AFH channel map. If we are slave it 
   1.949 +	 will be the remote master's AFH channel map.
   1.950 +	 
   1.951 +	 @param aFrame The HCI frame to format
   1.952 +	 @param aConnH Connection handle 
   1.953 +	 @released
   1.954 +	 @publishedPartner
   1.955 +	*/
   1.956 +	virtual void ReadAFHChannelMap(CHCICommandFrame& aFrame, THCIConnHandle aConnH)=0;
   1.957 +
   1.958 + 	/**	Notifies the host controller whether or not it is required to keep checking for busy channels..
   1.959 +	
   1.960 +	 @param aFrame The HCI frame to format
   1.961 +	 @param aEnable Check for busy channels if ETrue, otherwise don't
   1.962 +	 @released
   1.963 +	 @publishedPartner
   1.964 +	 */
   1.965 +    virtual void WriteAFHChannelAssessmentMode(CHCICommandFrame& aFrame, TBool aEnable)=0;
   1.966 +
   1.967 + 	/**	Asks the host controller whether or not it is checking for busy channels..
   1.968 +	
   1.969 +	 @param aFrame The HCI frame to format
   1.970 +	 @released
   1.971 +	 @publishedPartner
   1.972 +	 */
   1.973 +    virtual void ReadAFHChannelAssessmentMode(CHCICommandFrame& aFrame)=0;
   1.974 +
   1.975 +    /** HCI level Ioctl
   1.976 +
   1.977 +	 @param aLevel			The Ioctl level
   1.978 +	 @param aName			The Ioctl function number
   1.979 +	 @param aOption			Data associated with this Ioctl
   1.980 +	 @param aStackSAP		A pointer to the SAP, used to track Ioctls
   1.981 +     @released
   1.982 +     @publishedPartner
   1.983 +     */
   1.984 +	virtual void Ioctl(TUint aLevel,TUint aName, TDes8* aOption, TAny* aStackSAP) = 0;
   1.985 +
   1.986 +    /** Cancel HCI level Ioctl
   1.987 +
   1.988 +	 @param aLevel			The Ioctl level
   1.989 +	 @param aName			The Ioctl function number
   1.990 +	 @param aStackSAP		A pointer to the SAP, used to track Ioctls
   1.991 +     @released
   1.992 +     @publishedPartner
   1.993 +     */
   1.994 +	virtual void CancelIoctl(TUint aLevel,TUint aName, TAny* aStackSAP) = 0;
   1.995 +	};
   1.996 +
   1.997 +enum THCIErrorCode;
   1.998 +
   1.999 +
  1.1000 +
  1.1001 +/** Event handler mixin that must be implemented by the client of HCI.
  1.1002 +
  1.1003 +A class that implements this interface must be passed into the
  1.1004 +CHCIBase derived class on construction, and will be used by the HCI
  1.1005 +class to notify the client of events received over the HCI interface.
  1.1006 +
  1.1007 +@released
  1.1008 +@publishedPartner
  1.1009 +*/
  1.1010 +class MHCIEventObserver
  1.1011 +    {   
  1.1012 +public:
  1.1013 +	// Interfaces to allow HCI to notify LL
  1.1014 +	/** This provides command credits.
  1.1015 +
  1.1016 +	 @param aCredits Provided command credits.
  1.1017 +	 @released
  1.1018 +	 @publishedPartner
  1.1019 +	 */
  1.1020 +	virtual void SetCommandCredits(TUint16 aCredits)=0;
  1.1021 +
  1.1022 +	/** Informs of the ACL MTU for this host.
  1.1023 +
  1.1024 +	 @param aMTU Maximum size of ACL packet the host can send.
  1.1025 +	 @released
  1.1026 +	 @publishedPartner
  1.1027 +	 */
  1.1028 +	virtual void HCIMaximumACLPacketSize(TUint16 aMTU)=0;
  1.1029 +
  1.1030 +	/** Called when transport channels have become free.
  1.1031 +
  1.1032 +	 @param aChannel Channel that is free.
  1.1033 +	 @released
  1.1034 +	 @publishedPartner
  1.1035 +	 */
  1.1036 +	virtual void CanSend(THCITransportChannel aChannel = KHCITransportAllChannels)=0;
  1.1037 +
  1.1038 +	// Events as per spec
  1.1039 +	/** Called on an inquiry complete event.
  1.1040 +
  1.1041 +	 @param aNumResponses Number of responses received from the inquiry.  This is zero if not supported or there is an error.
  1.1042 +	 @param aErr HCI specific or system wide error code.
  1.1043 +	 @released
  1.1044 +	 @publishedPartner
  1.1045 +	 */
  1.1046 +    virtual void InquiryCompleteEvent(THCIErrorCode aErr, TUint8 aNumResponses)=0;
  1.1047 +
  1.1048 +    /** Called on an inquiry result complete event.
  1.1049 +
  1.1050 +	 @param aEntry TInquiryLogEntry containing results of inquiry.
  1.1051 +     @param aErr HCI specific or system wide error code.
  1.1052 +     @released
  1.1053 +     @publishedPartner
  1.1054 +     */
  1.1055 +    virtual void InquiryResultCompleteEvent(THCIErrorCode aErr,const TInquiryLogEntry& aEntry)=0;
  1.1056 +
  1.1057 +    /** Called on a connection complete event.
  1.1058 +
  1.1059 +	 @param aConn Contains information about the completed connection.
  1.1060 +     @param aErr HCI specific or system wide error code.
  1.1061 +     @released
  1.1062 +     @publishedPartner
  1.1063 +     */
  1.1064 +    virtual void ConnectionCompleteEvent(THCIErrorCode aErr, const TBTConnect &aConn)=0;
  1.1065 +
  1.1066 +    /** Called on a connection request event.
  1.1067 +
  1.1068 +	 @param aConn Information about the device requesting the connection.
  1.1069 +     @released
  1.1070 +     @publishedPartner
  1.1071 +     */
  1.1072 +    virtual void ConnectionRequestEvent(const TBTConnect &aConn)=0;
  1.1073 +
  1.1074 +    /** Called on a disconnection complete event.
  1.1075 +
  1.1076 +	 @param aConnH Connection handle
  1.1077 +	 @param aReason Reason for disconnection.
  1.1078 +     @param aErr HCI specific or system wide error code.
  1.1079 +     @released
  1.1080 +     @publishedPartner
  1.1081 +     */
  1.1082 +    virtual void DisconnectionCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, THCIErrorCode aReason)=0;
  1.1083 +
  1.1084 +    /** Called on an authentication complete event.
  1.1085 +
  1.1086 +	 @param aConnH Connection handle
  1.1087 +     @param aErr HCI specific or system wide error code.
  1.1088 +     @released
  1.1089 +     @publishedPartner
  1.1090 +     */
  1.1091 +    virtual void AuthenticationCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0;
  1.1092 +
  1.1093 +    /** Called on a remote name request complete event.
  1.1094 +
  1.1095 +	 @param aBdaddr Bluetooth address of remote device
  1.1096 +	 @param aBuf Name of remote device (max 248 bytes as defined by the bluetooth specification).
  1.1097 +     @param aErr HCI specific or system wide error code.
  1.1098 +     @released
  1.1099 +     @publishedPartner
  1.1100 +     */
  1.1101 +    virtual void RemoteNameReqCompleteEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr, const TDesC8& aBuf)=0;
  1.1102 +
  1.1103 +    /** Called on encryption change event.
  1.1104 +
  1.1105 +	 @param aConnH Connection handle
  1.1106 +	 @param aEnable Whether encryption is enabled
  1.1107 +     @param aErr HCI specific or system wide error code.
  1.1108 +     @released
  1.1109 +     @publishedPartner
  1.1110 +     */
  1.1111 +    virtual void EncryptionChangeEvent(THCIErrorCode aErr, THCIConnHandle aConnH,TBool aEnable)=0;
  1.1112 +
  1.1113 +    /** Called on link key complete event.
  1.1114 +
  1.1115 +	 @param Connection handle
  1.1116 +     @param aErr HCI specific or system wide error code.
  1.1117 +     @released
  1.1118 +     @publishedPartner
  1.1119 +     */
  1.1120 +    virtual void ChangeLinkKeyCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0;
  1.1121 +
  1.1122 +    /** Called on master link key complete event.
  1.1123 +
  1.1124 +	 @param aConnH Connection handle
  1.1125 +	 @param aKeyFlag See bluetooth specification
  1.1126 +     @param aErr HCI specific or system wide error code.
  1.1127 +     @released
  1.1128 +     @publishedPartner
  1.1129 +     */
  1.1130 +    virtual void MasterLinkKeyCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH,TBool aKeyFlag)=0;
  1.1131 +
  1.1132 +    /** Called on read remote supported features complete event.
  1.1133 +
  1.1134 +	 @param aConnH Connection handle
  1.1135 +	 @param aBitMaskList LMP_Features Bit Mask List (8 bytes)
  1.1136 +     @param aErr HCI specific or system wide error code.
  1.1137 +     @released
  1.1138 +     @publishedPartner
  1.1139 +     */
  1.1140 +    virtual void ReadRemoteSupportedFeaturesCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TUint64 aBitMaskList)=0;
  1.1141 +    /**  Called  on read remote version info complete event.
  1.1142 +
  1.1143 +	 @param aConnH Connection handle
  1.1144 +	 @param aVer Information on remote hardware version
  1.1145 +     @param aErr HCI specific or system wide error code.
  1.1146 +     @released
  1.1147 +     @publishedPartner
  1.1148 +     */
  1.1149 +	virtual void ReadRemoteVersionInfoCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, const TBTDevRemoteHwVersion& aVer)=0;
  1.1150 +
  1.1151 +    /** Called on QOS setup complete event.
  1.1152 +     
  1.1153 +     @param  aQOS QOS information.
  1.1154 +     @param aErr HCI specific or system wide error code.
  1.1155 +     @param aConnH Connection handle
  1.1156 +     @released
  1.1157 +     @publishedPartner
  1.1158 +     */
  1.1159 +	virtual void QOSSetupCompleteEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBTQOS aQOS)=0;
  1.1160 +
  1.1161 +    /**  Called on Command Complete Event.
  1.1162 +
  1.1163 +     @param aErr HCI specific or system wide error code.
  1.1164 +     @released
  1.1165 +     @publishedPartner
  1.1166 +     */
  1.1167 +    virtual void CommandCompleteEvent(THCIErrorCode aErr,THCIOpcode aOpcode)=0;
  1.1168 +
  1.1169 +    /** Called on command status event.
  1.1170 +
  1.1171 +     @param aOpcode Opcode of the successfully completed event.
  1.1172 +     @released
  1.1173 +     @publishedPartner
  1.1174 +     */
  1.1175 +    virtual void CommandStatusEvent(THCIOpcode aOpcode)=0;
  1.1176 +
  1.1177 +    /** Called on Hardware Error Event.
  1.1178 +
  1.1179 +	 @param aHwCode Hardware code.
  1.1180 +     @released
  1.1181 +     @publishedPartner
  1.1182 +     */
  1.1183 +    virtual void HardwareErrorEvent(TUint8 aHwCode)=0;
  1.1184 +
  1.1185 +    /** Called on Flush Occurred Event.
  1.1186 +
  1.1187 +     @param aErr HCI specific or system wide error code.
  1.1188 +     @param aConnH Connection handle
  1.1189 +     @released
  1.1190 +     @publishedPartner
  1.1191 +     */
  1.1192 +	virtual void FlushOccurredEvent(THCIErrorCode aErr, THCIConnHandle aConnH)=0;
  1.1193 +
  1.1194 +    /** Called on Role Change Event.
  1.1195 +
  1.1196 +	 @param aRole New role.
  1.1197 +	 @param aBdaddr Bluetooth device address of remote device.
  1.1198 +     @param aErr HCI specific or system wide error code.
  1.1199 +     @released
  1.1200 +     @publishedPartner
  1.1201 +     */
  1.1202 +    virtual void RoleChangeEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr,TBTBasebandRole aRole)=0;
  1.1203 +
  1.1204 +    /** Called on HCI Completed Packets event.
  1.1205 +
  1.1206 +     @param aConnH Connection handle
  1.1207 +	 @param aNumPacketsCompleted Number of packets completed.
  1.1208 +     @released
  1.1209 +     @publishedPartner
  1.1210 +     */
  1.1211 +    virtual void HCICompletedPackets(THCIConnHandle aConnH, TUint16 aNumPacketsCompleted)=0; //NumberCompletedPacketsEvent
  1.1212 +
  1.1213 +    /** Called on Mode Change Event.
  1.1214 +
  1.1215 +	 @param aMode Current mode.
  1.1216 +	 @param aInterval Interval defined according to current mode (see bluetooth specification).
  1.1217 +     @param aErr HCI specific or system wide error code.
  1.1218 +     @param aConnH Connection handle
  1.1219 +     @released
  1.1220 +     @publishedPartner
  1.1221 +     */
  1.1222 +    virtual void ModeChangeEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBTLinkMode aMode, TUint16 aInterval)=0;
  1.1223 +
  1.1224 +    /** Called on Return Link Keys Event.
  1.1225 +
  1.1226 +	 @param aBdaddr Bluetooth device address of remote device.
  1.1227 +	 @param aLinkKey Link key.
  1.1228 +     @param aErr HCI specific or system wide error code.
  1.1229 +     @released
  1.1230 +     @publishedPartner
  1.1231 +     */
  1.1232 +    virtual void ReturnLinkKeysEvent(THCIErrorCode aErr, const TBTDevAddr& aBdaddr,const TBTLinkKey& aLinkKey)=0;
  1.1233 +
  1.1234 +    /** Called on PIN Code Request Event.
  1.1235 +
  1.1236 +	 @param aBdaddr Bluetooth device address
  1.1237 +     @released
  1.1238 +     @publishedPartner
  1.1239 +     */
  1.1240 +    virtual void PINCodeRequestEvent(const TBTDevAddr& aBdaddr)=0;
  1.1241 +
  1.1242 +    /** Called on Link Key Request Event.
  1.1243 +
  1.1244 +	 @param aBdaddr Bluetooth device address
  1.1245 +     @released
  1.1246 +     @publishedPartner
  1.1247 +     */
  1.1248 +    virtual void LinkKeyRequestEvent(const TBTDevAddr& aBdaddr)=0;
  1.1249 +
  1.1250 +    /** Called on Link Key Notification Event.
  1.1251 +
  1.1252 +	 @param aBdaddr Bluetooth device address.
  1.1253 +	 @param aLinkKey Link key.
  1.1254 +     @released
  1.1255 +     @publishedPartner
  1.1256 +     */
  1.1257 +    virtual void LinkKeyNotificationEvent(const TBTDevAddr& aBdaddr,const TBTLinkKey& aLinkKey)=0;
  1.1258 +
  1.1259 +    /** Called on Loopback Command Event.  Not currently supported.
  1.1260 +
  1.1261 +     @released
  1.1262 +     @internalTechnology
  1.1263 +     */
  1.1264 +	virtual void LoopbackCommandEvent()=0; //not supported yet
  1.1265 +
  1.1266 +    /** Called on Data Buffer Overflow Event. 
  1.1267 +
  1.1268 +	 @param aLinkType
  1.1269 +     @released
  1.1270 +     @publishedPartner
  1.1271 +     */
  1.1272 +	virtual void DataBufferOverflowEvent(TUint8 aLinkType)=0;
  1.1273 +
  1.1274 +    /** Called on Max Slots Change Event.
  1.1275 +
  1.1276 +	 @param aMaxSlots New value of max slots.
  1.1277 +     @param aConnH Connection handle
  1.1278 +     @released
  1.1279 +     @publishedPartner
  1.1280 +     */
  1.1281 +	virtual void MaxSlotsChangeEvent(THCIConnHandle aConnH, TUint8 aMaxSlots)=0;
  1.1282 +
  1.1283 +    /** Called on Read Clock Offset Result Event.
  1.1284 +
  1.1285 +	 @param aClockOffset Clock offset.
  1.1286 +     @param aErr HCI specific or system wide error code.
  1.1287 +     @param aConnH Connection handle
  1.1288 +     @released
  1.1289 +     @publishedPartner
  1.1290 +     */
  1.1291 +	virtual void ReadClockOffsetResultEvent(THCIErrorCode aErr, THCIConnHandle aConnH, TBasebandTime aClockOffset)=0;
  1.1292 +
  1.1293 +    /** Called on Connection Packet Type Changed Event.
  1.1294 +
  1.1295 +	 @param aPacketType New packet type.
  1.1296 +     @param aErr HCI specific or system wide error code.
  1.1297 +     @param aConnH Connection handle
  1.1298 +     @released
  1.1299 +     @publishedPartner
  1.1300 +     */
  1.1301 +	virtual void ConnectionPacketTypeChangedEvent(THCIErrorCode aErr,
  1.1302 +					THCIConnHandle aConnH, TUint16 aPacketType)=0;
  1.1303 +
  1.1304 +    /** Called on QOS Violation Event.
  1.1305 +
  1.1306 +     @param aConnH Connection handle
  1.1307 +     @released
  1.1308 +     @publishedPartner
  1.1309 +     */
  1.1310 +	virtual void QOSViolationEvent(THCIConnHandle aConnH)=0;
  1.1311 +
  1.1312 +    /** Called on Page Scan Mode Change Event.
  1.1313 +
  1.1314 +	 @param aBdaddr Bluetooth device address.
  1.1315 +	 @param aPageScanMode New page scan mode
  1.1316 +     @released
  1.1317 +     @publishedPartner
  1.1318 +     */
  1.1319 +	virtual void PageScanModeChangeEvent(const TBTDevAddr& aBdaddr, TUint8 aPageScanMode)=0;
  1.1320 +
  1.1321 +    /** Called on Page Scan Repetition Mode Change Event.
  1.1322 +
  1.1323 +	 @param aBdaddr Bluetooth device address
  1.1324 +	 @param aPageScanRepetitionMode New page scan repetition mode
  1.1325 +     @released
  1.1326 +     @publishedPartner
  1.1327 +     */
  1.1328 +	virtual void PageScanRepetitionModeChangeEvent(const TBTDevAddr& aBdaddr, TUint8 aPageScanRepetitionMode)=0;
  1.1329 +
  1.1330 +    // data events
  1.1331 +
  1.1332 +    /** Called on ACLDataReceivedEvent.
  1.1333 +
  1.1334 +     @param aConnH Connection handle
  1.1335 +	 @param aData Received data
  1.1336 +	 @param aFlag See bluetooth specification
  1.1337 +     @released
  1.1338 +     @publishedPartner
  1.1339 +     */
  1.1340 +	virtual void ACLDataReceivedEvent(THCIConnHandle aConnH,TUint8 aFlag,const TDesC8& aData)=0;
  1.1341 +
  1.1342 +    /** Called on SCO Data Received Event.
  1.1343 +
  1.1344 +	 @param aData Recieved data.
  1.1345 +     @param aConnH Connection handle
  1.1346 +     @released
  1.1347 +     @publishedPartner
  1.1348 +     */
  1.1349 +	virtual void SCODataReceivedEvent(THCIConnHandle aConnH, const TDesC8& aData)=0;
  1.1350 +
  1.1351 +	// complete events
  1.1352 +
  1.1353 +
  1.1354 +    /** Called on Reset Complete Event.
  1.1355 +
  1.1356 +     @param aStatus HCI specific or system wide error code.
  1.1357 +     @released
  1.1358 +     @publishedPartner
  1.1359 +     */
  1.1360 +	virtual void ResetCompleteEvent(THCIErrorCode aStatus)=0;
  1.1361 +
  1.1362 +    /** Called on Write Link Supervision Timeout Complete Event.
  1.1363 +
  1.1364 +     @param aStatus HCI specific or system wide error code.
  1.1365 +     @released
  1.1366 +     @publishedPartner
  1.1367 +     */
  1.1368 +	virtual void WriteLinkSupervisionTimeoutCompleteEvent(THCIErrorCode aStatus)=0;
  1.1369 +
  1.1370 +    /** Called on Link Key Request Reply Complete Event.
  1.1371 +
  1.1372 +     @param aStatus HCI specific or system wide error code.
  1.1373 +     @released
  1.1374 +     @publishedPartner
  1.1375 +     */
  1.1376 +	virtual void LinkKeyRequestReplyCompleteEvent(THCIErrorCode aStatus)=0;
  1.1377 +
  1.1378 +    /** Called on Link Key Request Reply Negative Complete Event.
  1.1379 +
  1.1380 +     @param aStatus HCI specific or system wide error code.
  1.1381 +     @released
  1.1382 +     @publishedPartner
  1.1383 +     */
  1.1384 +    virtual void LinkKeyRequestReplyNegativeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1385 +
  1.1386 +    /** Called on PIN Code Request Reply Complete Event.
  1.1387 +
  1.1388 +     @param aStatus HCI specific or system wide error code.
  1.1389 +     @released
  1.1390 +     @publishedPartner
  1.1391 +     */
  1.1392 +    virtual void PINCodeRequestReplyCompleteEvent(THCIErrorCode aStatus)=0;
  1.1393 +
  1.1394 +    /** Called on PIN Code Request Reply Negative Complete Event.
  1.1395 +
  1.1396 +     @param aStatus HCI specific or system wide error code.
  1.1397 +     @released
  1.1398 +     @publishedPartner
  1.1399 +     */
  1.1400 +    virtual void PINCodeRequestReplyNegativeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1401 +
  1.1402 +    /** Called on Inquiry Cancel Complete Event.
  1.1403 +
  1.1404 +     @param aStatus HCI specific or system wide error code.
  1.1405 +     @released
  1.1406 +     @publishedPartner
  1.1407 +     */
  1.1408 +    virtual void InquiryCancelCompleteEvent(THCIErrorCode aStatus)=0;
  1.1409 +
  1.1410 +    /** Called on Periodic Inquiry Mode Complete Event.
  1.1411 +
  1.1412 +     @param aStatus HCI specific or system wide error code.
  1.1413 +     @released
  1.1414 +     @publishedPartner
  1.1415 +     */
  1.1416 +    virtual void PeriodicInquiryModeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1417 +
  1.1418 +    /** Called on Exit Periodic Inquiry Mode Complete Event.
  1.1419 +
  1.1420 +     @param aStatus HCI specific or system wide error code.
  1.1421 +     @released
  1.1422 +     @publishedPartner
  1.1423 +     */
  1.1424 +    virtual void ExitPeriodicInquiryModeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1425 +
  1.1426 +    /** Called on Set Event Mask Complete Event.
  1.1427 +
  1.1428 +     @param aStatus HCI specific or system wide error code.
  1.1429 +     @released
  1.1430 +     @publishedPartner
  1.1431 +     */
  1.1432 +    virtual void SetEventMaskCompleteEvent(THCIErrorCode aStatus)=0;
  1.1433 +
  1.1434 +    /** Called on Set Event Filter Complete Event.
  1.1435 +
  1.1436 +     @param aStatus HCI specific or system wide error code.
  1.1437 +     @released
  1.1438 +     @publishedPartner
  1.1439 +     */
  1.1440 +    virtual void SetEventFilterCompleteEvent(THCIErrorCode aStatus)=0;
  1.1441 +
  1.1442 +    /** Called on Create New Unit Key Complete Event.
  1.1443 +
  1.1444 +     @param aStatus HCI specific or system wide error code.
  1.1445 +     @released
  1.1446 +     @publishedPartner
  1.1447 +     */
  1.1448 +    virtual void CreateNewUnitKeyCompleteEvent(THCIErrorCode aStatus)=0;
  1.1449 +
  1.1450 +    /** Called on Change Local Name Complete Event.
  1.1451 +
  1.1452 +     @param aStatus HCI specific or system wide error code.
  1.1453 +     @released
  1.1454 +     @publishedPartner
  1.1455 +     */
  1.1456 +    virtual void ChangeLocalNameCompleteEvent(THCIErrorCode aStatus)=0;
  1.1457 +
  1.1458 +    /** Called on Write Authentication Enable Complete Event.
  1.1459 +
  1.1460 +     @param aStatus HCI specific or system wide error code.
  1.1461 +     @released
  1.1462 +     @publishedPartner
  1.1463 +     */
  1.1464 +    virtual void WriteAuthenticationEnableCompleteEvent(THCIErrorCode aStatus)=0;
  1.1465 +
  1.1466 +    /** Called on Write Encryption Mode Complete Event.
  1.1467 +
  1.1468 +     @param aStatus HCI specific or system wide error code.
  1.1469 +     @released
  1.1470 +     @publishedPartner
  1.1471 +     */
  1.1472 +    virtual void WriteEncryptionModeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1473 +
  1.1474 +    /** Called on Write Page Timeout Complete Event.
  1.1475 +
  1.1476 +     @param aStatus HCI specific or system wide error code.
  1.1477 +     @released
  1.1478 +     @publishedPartner
  1.1479 +     */
  1.1480 +    virtual void WritePageTimeoutCompleteEvent(THCIErrorCode aStatus)=0;
  1.1481 +
  1.1482 +    /** Called on Write Connection Accept Timeout Complete Event.
  1.1483 +
  1.1484 +     @param aStatus HCI specific or system wide error code.
  1.1485 +     @released
  1.1486 +     @publishedPartner
  1.1487 +     */
  1.1488 +    virtual void WriteConnectionAcceptTimeoutCompleteEvent(THCIErrorCode aStatus)=0;
  1.1489 +
  1.1490 +    /** Called on Write Class Of Device Complete Event.
  1.1491 +
  1.1492 +     @param aStatus HCI specific or system wide error code.
  1.1493 +     @released
  1.1494 +     @publishedPartner
  1.1495 +     */
  1.1496 +    virtual void WriteClassOfDeviceCompleteEvent(THCIErrorCode aStatus)=0;
  1.1497 +
  1.1498 +    /** Called on Write Voice Setting Complete Event.
  1.1499 +
  1.1500 +     @param aStatus HCI specific or system wide error code.
  1.1501 +     @released
  1.1502 +     @publishedPartner
  1.1503 +     */
  1.1504 +	virtual void WriteVoiceSettingCompleteEvent(THCIErrorCode aStatus)=0;
  1.1505 +
  1.1506 +    /** Called on Write Current IAC LAP Complete Event.
  1.1507 +
  1.1508 +     @param aStatus HCI specific or system wide error code.
  1.1509 +     @released
  1.1510 +     @publishedPartner
  1.1511 +     */
  1.1512 +	virtual void WriteCurrentIACLAPCompleteEvent(THCIErrorCode aStatus)=0;
  1.1513 +
  1.1514 +    /** Called on Set Host Controller To Host Flow Complete Event.
  1.1515 +
  1.1516 +     @param aStatus HCI specific or system wide error code.
  1.1517 +     @released
  1.1518 +     @publishedPartner
  1.1519 +     */
  1.1520 +	virtual void SetHostControllerToHostFlowCompleteEvent(THCIErrorCode aStatus)=0;
  1.1521 +
  1.1522 +    /** Called on Host Buffer Size Complete Event.
  1.1523 +
  1.1524 +     @param aStatus HCI specific or system wide error code.
  1.1525 +     @released
  1.1526 +     @publishedPartner
  1.1527 +     */
  1.1528 +	virtual void HostBufferSizeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1529 +
  1.1530 +    /** Called on Host Number Of Completed Packets Complete Event.
  1.1531 +
  1.1532 +     @param aStatus HCI specific or system wide error code.
  1.1533 +     @released
  1.1534 +     @publishedPartner
  1.1535 +     */
  1.1536 +	virtual void HostNumberOfCompletedPacketsCompleteEvent(THCIErrorCode aStatus)=0;
  1.1537 +
  1.1538 +    /** Called on Write Scan Enable Complete Event.
  1.1539 +
  1.1540 +     @param aStatus HCI specific or system wide error code.
  1.1541 +     @released
  1.1542 +     @publishedPartner
  1.1543 +     */
  1.1544 +	virtual void WriteScanEnableCompleteEvent(THCIErrorCode aStatus)=0;
  1.1545 +
  1.1546 +    /** Called on Write Link Policy Settings Complete Event.
  1.1547 +
  1.1548 +     @param aConnH Connection handle
  1.1549 +     @param aStatus HCI specific or system wide error code.
  1.1550 +     @released
  1.1551 +     @publishedPartner
  1.1552 +     */
  1.1553 +	virtual void WriteLinkPolicySettingsCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH)=0;
  1.1554 +
  1.1555 +	// results of local commands
  1.1556 +
  1.1557 +
  1.1558 +    /** Called on Read Stored Link Key Result.
  1.1559 +
  1.1560 +	 @param aNumKeysRead Number of keys read
  1.1561 +	 @param aMaxNumKeys Max number of keys
  1.1562 +     @param aErr HCI specific or system wide error code.
  1.1563 +     @released
  1.1564 +     @publishedPartner
  1.1565 +     */
  1.1566 +    virtual void ReadStoredLinkKeyResult(THCIErrorCode aErr,TUint16 aNumKeysRead,TUint16 aMaxNumKeys)=0;
  1.1567 +
  1.1568 +    /** Called on Write Stored Link Key Result.
  1.1569 +
  1.1570 +	 @param aNumKeysStored Number of keys stored
  1.1571 +     @param aErr HCI specific or system wide error code.
  1.1572 +     @released
  1.1573 +     @publishedPartner
  1.1574 +     */
  1.1575 +    virtual void WriteStoredLinkKeyResult(THCIErrorCode aErr,TUint8 aNumKeysStored)=0;
  1.1576 +
  1.1577 +    /** Called on Delete Stored Link Key Result.
  1.1578 +
  1.1579 +	 @param aNumKeysDeleted Number of keys deleted
  1.1580 +     @param aErr HCI specific or system wide error code.
  1.1581 +     @released
  1.1582 +     @publishedPartner
  1.1583 +     */
  1.1584 +    virtual void DeleteStoredLinkKeyResult(THCIErrorCode aErr,TUint8 aNumKeysDeleted)=0;
  1.1585 +
  1.1586 +    /** Called on Read Scan Enable Result.
  1.1587 +
  1.1588 +	 @param aEnable See bluetooth specification
  1.1589 +     @param aErr HCI specific or system wide error code.
  1.1590 +     @released
  1.1591 +     @publishedPartner
  1.1592 +     */
  1.1593 +    virtual void ReadScanEnableResult(THCIErrorCode aErr,TUint8 aEnable)=0;
  1.1594 +
  1.1595 +    /** Called on Read Authentication Enable Result.
  1.1596 +
  1.1597 +	 @param aEnable See bluetooth specification
  1.1598 +     @param aErr HCI specific or system wide error code.
  1.1599 +     @released
  1.1600 +     @publishedPartner
  1.1601 +     */
  1.1602 +    virtual void ReadAuthenticationEnableResult(THCIErrorCode aErr,TUint8 aEnable)=0;
  1.1603 +
  1.1604 +    /** Called on Read Encryption Enable Result.
  1.1605 +
  1.1606 +	 @param aEnable See bluetooth specification
  1.1607 +     @param aErr HCI specific or system wide error code.
  1.1608 +     @released
  1.1609 +     @publishedPartner
  1.1610 +     */
  1.1611 +    virtual void ReadEncryptionEnableResult(THCIErrorCode aErr,THCIEncryptModeFlag aEnable)=0;
  1.1612 +
  1.1613 +    /** Called on Read Bdaddr Result.
  1.1614 +
  1.1615 +	 @param aBdaddr Bluetooth device address of remote device
  1.1616 +     @param aErr HCI specific or system wide error code.
  1.1617 +     @released
  1.1618 +     @publishedPartner
  1.1619 +     */
  1.1620 +    virtual void ReadBdaddrResult(THCIErrorCode aErr,const TBTDevAddr& aBdaddr)=0;
  1.1621 +
  1.1622 +    /** Called on Read Class Of Device Result.
  1.1623 +
  1.1624 +	 @param aCoD Class of device of remote device
  1.1625 +     @param aErr HCI specific or system wide error code.
  1.1626 +     @released
  1.1627 +     @publishedPartner
  1.1628 +     */
  1.1629 +    virtual void ReadClassOfDeviceResult(THCIErrorCode aErr,TUint aCoD)=0;
  1.1630 +
  1.1631 +    /** Called on Read Voice Setting Result.
  1.1632 +
  1.1633 +	 @param aVoiceChannelSetting Voice channel setting
  1.1634 +     @param aErr HCI specific or system wide error code.
  1.1635 +     @released
  1.1636 +     @publishedPartner
  1.1637 +     */
  1.1638 +	virtual void ReadVoiceSettingResult(THCIErrorCode aErr,TUint16 aVoiceChannelSetting)=0;
  1.1639 +
  1.1640 +    /** Called on Read Local Name Result.
  1.1641 +
  1.1642 +	 @param aLocalName Local name
  1.1643 +     @param aErr HCI specific or system wide error code.
  1.1644 +     @released
  1.1645 +     @publishedPartner
  1.1646 +     */
  1.1647 +	virtual void ReadLocalNameResult(THCIErrorCode aErr,const TDesC8& aLocalName)=0;
  1.1648 +
  1.1649 +    /** Called on Read Timeout Result.
  1.1650 +
  1.1651 +	 @param aType See bluetooth specification
  1.1652 +	 @param aTimeout  See bluetooth specification
  1.1653 +     @param aErr HCI specific or system wide error code.
  1.1654 +     @released
  1.1655 +     @publishedPartner
  1.1656 +     */
  1.1657 +    virtual void ReadTimeoutResult(THCIErrorCode aErr,THCITimeoutType aType,TBasebandTime aTimeout)=0;
  1.1658 +
  1.1659 +    /** Called on Read Local Version Info Result.
  1.1660 +
  1.1661 +	 @param aHCIVersion Version information of local device hardware
  1.1662 +	 @param aLMPVersion Version information of local LMP
  1.1663 +     @param aErr HCI specific or system wide error code.
  1.1664 +     @released
  1.1665 +     @publishedPartner
  1.1666 +     */
  1.1667 +	virtual void ReadLocalVersionInfoResult(THCIErrorCode aErr, TBTDevHCIVersion aHCIVersion, TBTDevLMPVersion aLMPVersion)=0;
  1.1668 +
  1.1669 +    /** Called on Read Local Supported Features Result.
  1.1670 +
  1.1671 +	 @param aBitMaskList See bluetooth specification
  1.1672 +     @param aErr HCI specific or system wide error code.
  1.1673 +     @released
  1.1674 +     @publishedPartner
  1.1675 +     */
  1.1676 +	virtual void ReadLocalSupportedFeaturesResult(THCIErrorCode aErr, TUint64 aBitMaskList)=0;
  1.1677 +    /** Called on Read Country Code Result.
  1.1678 +
  1.1679 +	 @param aCountryCode Country code
  1.1680 +     @param aErr HCI specific or system wide error code.
  1.1681 +     @released
  1.1682 +     @publishedPartner
  1.1683 +     */
  1.1684 +	virtual void ReadCountryCodeResult(THCIErrorCode aErr, TUint8 aCountryCode)=0;
  1.1685 +
  1.1686 +    /** Called on Read Number Of Supported IAC Result.
  1.1687 +
  1.1688 +	 @param aNumIACs  Number of IACs
  1.1689 +     @param aErr HCI specific or system wide error code.
  1.1690 +     @released
  1.1691 +     @publishedPartner
  1.1692 +     */
  1.1693 +	virtual void ReadNumberOfSupportedIACResult(THCIErrorCode aErr, TUint8 aNumIACs)=0;
  1.1694 +
  1.1695 +    /** Called on Read Discoverability Result.
  1.1696 +
  1.1697 +	 @param aNumIACs The number of concurrent IACs on which scanning is/would take place
  1.1698 +	 @param aIAC IAC_LAP array.
  1.1699 +     @param aErr HCI specific or system wide error code.
  1.1700 +     @released
  1.1701 +     @publishedPartner
  1.1702 +     */
  1.1703 +	virtual void ReadDiscoverabilityResult(THCIErrorCode aErr, TUint8 aNumIACs, TUint aIAC[])=0;
  1.1704 +
  1.1705 +    /** Called on Read Buffer Size Result.
  1.1706 +
  1.1707 +	 @param aAclMaxLen Maximum length of each ACL packet
  1.1708 +	 @param aScoMaxLen Maximum length of each SCO packet
  1.1709 +	 @param aNoACL Total number of ACL data packets
  1.1710 +	 @param aNoSCO Total number of SCO data packets
  1.1711 +     @param aErr HCI specific or system wide error code.
  1.1712 +     @released
  1.1713 +     @publishedPartner
  1.1714 +     */
  1.1715 +    virtual void ReadBufferSizeResult(THCIErrorCode aErr,TUint16 aAclMaxLen,
  1.1716 +			      TUint8 aScoMaxLen,TUint16 aNoACL,TUint16 aNoSCO)=0;
  1.1717 +
  1.1718 +    /** Called on Read Role Discovery Result.
  1.1719 +
  1.1720 +	 @param aRole Current role
  1.1721 +     @param aStatus HCI specific or system wide error code.
  1.1722 +     @released
  1.1723 +     @publishedPartner
  1.1724 +     */
  1.1725 +	virtual void ReadRoleDiscoveryResult(THCIErrorCode aStatus, TBTBasebandRole aRole)=0;
  1.1726 +
  1.1727 +    /** Called on Vendor Specific Debug Event.
  1.1728 +	
  1.1729 +	 @param aEventFrame The frame holds the event parameters and parameter length field
  1.1730 +     @released
  1.1731 +     @publishedPartner
  1.1732 +     */
  1.1733 +	virtual void VendorSpecificDebugEvent(TPtrC8 aEventFrame)=0;
  1.1734 +
  1.1735 +	// Power off event
  1.1736 +
  1.1737 +    /** Called on Handle Power Status Change.
  1.1738 +
  1.1739 +	 @param aState New power state
  1.1740 +     @released
  1.1741 +     @publishedPartner
  1.1742 +     */
  1.1743 +	virtual void HandlePowerStatusChange(TBTPowerState aState)=0;
  1.1744 +	
  1.1745 +
  1.1746 +	// Results of Adaptive Frequency Hopping (AFH) commands
  1.1747 +
  1.1748 +    /** Called in response to a SetAFHHostChannelClassification command.
  1.1749 +
  1.1750 +	 @param aStatus The success or not of the SetAFHHostChannelClassification command
  1.1751 +	 @see SetAFHHostChannelClassification
  1.1752 +     @released
  1.1753 +     @publishedPartner
  1.1754 +     */
  1.1755 +	virtual void SetAFHHostChannelClassificationCompleteEvent(THCIErrorCode aStatus)=0;
  1.1756 + 
  1.1757 +    /** Called in response to a ReadAFHChannelMap command.
  1.1758 +
  1.1759 +	 @param aStatus The success or not of the ReadAFHChannelMap command
  1.1760 +	 @param aConnH Connection handle
  1.1761 +	 @param aAFHMode ETrue if AFH is enabled, EFalse if not
  1.1762 +	 @param aAFHChannelMap The AFH channel map being used on the specified connection
  1.1763 +	 @see ReadAFHChannelMap
  1.1764 +     @released
  1.1765 +     @publishedPartner
  1.1766 +     */
  1.1767 +	virtual void ReadAFHChannelMapCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH, TBool aAFHMode, const TDesC8& aAFHChannelMap)=0;
  1.1768 +
  1.1769 +    /** Called in response to a WriteAFHChannelAssessmentMode command.
  1.1770 +
  1.1771 +	 @param aStatus The success or not of the WriteAFHChannelAssessmentMode command
  1.1772 +	 @see WriteAFHChannelAssessmentMode
  1.1773 +     @released
  1.1774 +     @publishedPartner
  1.1775 +     */
  1.1776 +	virtual void WriteAFHChannelAssessmentModeCompleteEvent(THCIErrorCode aStatus)=0;
  1.1777 +
  1.1778 +    /** Called in response to a ReadAFHChannelAssessmentMode command.
  1.1779 +
  1.1780 +	 @param aStatus The success or not of the ReadAFHChannelAssessmentMode command
  1.1781 +	 @param aChannelAssessmentMode The host controller is checking for busy channels if ETrue, otherwise it is not
  1.1782 +	 @see ReadAFHChannelAssessmentMode
  1.1783 +     @released
  1.1784 +     @publishedPartner
  1.1785 +     */
  1.1786 +	virtual void ReadAFHChannelAssessmentModeCompleteEvent(THCIErrorCode aStatus, TBool aChannelAssessmentMode)=0;
  1.1787 +
  1.1788 +	
  1.1789 +    /** Called in response to a Flush command.
  1.1790 +
  1.1791 +	 @param aStatus The success or not of the Flush command
  1.1792 +	 @param aConnH  The connection handle
  1.1793 +     @released
  1.1794 +     @publishedPartner
  1.1795 +     */
  1.1796 +	virtual void FlushCompleteEvent(THCIErrorCode aStatus, THCIConnHandle aConnH)=0;
  1.1797 +
  1.1798 +
  1.1799 +    /** Called on a synchronous connection complete event.  
  1.1800 + 	@param aStatus
  1.1801 +    @param aConnH HCI connection handle
  1.1802 +    @param aBdaddr BT device address
  1.1803 +    @param aLinkType Link Type:SCO, Reserved or eSCO
  1.1804 +    @param aTransmissionInterval Transmission Interval
  1.1805 +    @param aRetransmissionWindow Retransmission Window
  1.1806 +    @param aRxPacketLength Rx Packet Length
  1.1807 +    @param aTxPacketLength Tx Packet Length
  1.1808 +    @param aAirMode Air Mode: uLaw, ALaw, CVSD or Transparent data
  1.1809 +    @released
  1.1810 +    @publishedPartner
  1.1811 +     */
  1.1812 +    virtual void SynchronousConnectionCompleteEvent(const THCIErrorCode aErr,
  1.1813 +    												const THCIConnHandle aConnH,
  1.1814 +    												const TBTDevAddr& aBdaddr,
  1.1815 +    												const TLinkType aLinkType,
  1.1816 +    												const TUint8 aTransmissionInterval,
  1.1817 +    												const TUint8 aRetransmissionWindow,
  1.1818 +    												const TUint16 aRxPacketLength,
  1.1819 +    												const TUint16 aTxPacketLength,
  1.1820 +    												const TAirMode aAirMode)=0;
  1.1821 +
  1.1822 +    /** Called on a synchronous connection changed event
  1.1823 + 	@param aStatus
  1.1824 +    @param aConnH HCI connection handle
  1.1825 +    @param aTransmissionInterval Transmission Interval
  1.1826 +    @param aRetransmissionWindow Retransmission Window
  1.1827 +    @param aRxPacketLength Rx Packet Length
  1.1828 +    @param aTxPacketLength Tx Packet Length
  1.1829 +    @released
  1.1830 +    @publishedPartner
  1.1831 +     */
  1.1832 +    virtual void SynchronousConnectionChangedEvent(const THCIErrorCode aErr,
  1.1833 +    											   const THCIConnHandle aConnH,
  1.1834 +   												   const TUint8 aTransmissionInterval,
  1.1835 +   												   const TUint8 aRetransmissionWindow,
  1.1836 +   												   const TUint16 aRxPacketLength,
  1.1837 +   												   const TUint16 aTxPacketLength)=0;
  1.1838 +    
  1.1839 +  
  1.1840 +
  1.1841 +    /** Called when an HCI level Ioctl completes.
  1.1842 +
  1.1843 +	 @param aLevel			The Ioctl level
  1.1844 +	 @param aName			The Ioctl function number
  1.1845 +	 @param aOption			Data associated with this Ioctl
  1.1846 +	 @param aErr			System-wide error code
  1.1847 +	 @param aStackSAP		A pointer to the SAP, used to track Ioctls
  1.1848 +     @released
  1.1849 +     @publishedPartner
  1.1850 +     */
  1.1851 +	virtual void CompleteIoctl(TUint aLevel,TUint aName,TDes8* aOption,TInt aErr, TAny* aStackSAP)=0;
  1.1852 +    };
  1.1853 +	
  1.1854 +
  1.1855 +/* 
  1.1856 + * Constants used for Symbian's RHCIDirectAccess test functionality
  1.1857 + */
  1.1858 +
  1.1859 +	// Test Ioctls
  1.1860 +	enum THCIDirectAccessTestIoctl
  1.1861 +		{
  1.1862 +		EHCIDirectAccessTestIoctlSetFlag1 = 0,
  1.1863 +		EHCIDirectAccessTestIoctlSetFlag2,
  1.1864 +		EHCIDirectAccessTestIoctlGetFlag1,
  1.1865 +		EHCIDirectAccessTestIoctlGetFlag2,
  1.1866 +		EHCIDirectAccessTestIoctlValidateFlag1,
  1.1867 +		EHCIDirectAccessTestIoctlValidateFlag2,
  1.1868 +		EHCIDirectAccessTestIoctlTimerFiveSeconds,
  1.1869 +		EHCIDirectAccessTestIoctlTimerEightSeconds,
  1.1870 +		EHCIDirectAccessTestIoctlTestDataPath,
  1.1871 +		EHCIDirectAccessTestIoctlNotifyOnEventX,
  1.1872 +		EHCIDirectAccessTestIoctlTriggerEventX,
  1.1873 +		};
  1.1874 +
  1.1875 +	// text strings for testing data path
  1.1876 +	_LIT8(KHCIDirectAccessTestExpectedText, "ExpectedText");
  1.1877 +	_LIT8(KHCIDirectAccessTestUnexpectedText, "UnexpectedText");
  1.1878 +
  1.1879 +#endif