williamr@2: // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // 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 williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedPartner williamr@2: */ williamr@2: williamr@2: #ifndef HCIFRAME_H williamr@2: #define HCIFRAME_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: /** williamr@2: Class representing an Hctl Frame as specified in the Bluetooth Core Specification, HCI Section williamr@2: This is abstract and the different frame types (Command, ACL, SCO etc) derive from it williamr@2: @publishedPartner williamr@2: */ williamr@2: NONSHARABLE_CLASS(CHctlFrameBase) : public CBase williamr@2: { williamr@2: public: williamr@2: ~CHctlFrameBase(); williamr@2: williamr@2: protected: williamr@2: CHctlFrameBase(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: void ConstructL(TUint32 aHctlFrameSize); williamr@2: williamr@2: protected: williamr@2: const TUint8 iHctlHeaderSize; williamr@2: const TUint8 iHctlTrailerSize; williamr@2: williamr@2: TPtr8 iFramePtr; williamr@2: HBufC8* iHctlFrame; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Class representing an Hctl Command Frame as specified in the Bluetooth Core Specification, HCI Section williamr@2: @publishedPartner williamr@2: */ williamr@2: NONSHARABLE_CLASS(CHctlCommandFrame) : public CHctlFrameBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CHctlCommandFrame* NewL(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: williamr@2: IMPORT_C void FinaliseCommand(); williamr@2: IMPORT_C void ResetCommand(); williamr@2: williamr@2: IMPORT_C void SetOpcode(THCIOpcode aOpcode); williamr@2: IMPORT_C void PutByte(TUint8 aByte); williamr@2: IMPORT_C void PutBytes16(TUint16 aVal); williamr@2: IMPORT_C void PutBytes24(TUint32 aVal); williamr@2: IMPORT_C void PutBytes32(TUint32 aVal); williamr@2: IMPORT_C void PutBytes32(TUint32 aVal,TUint8 aNumOfBytes); williamr@2: IMPORT_C void PutString(const TDesC8& aString); williamr@2: IMPORT_C void PutPaddedString(const TDesC8& aString, TInt aRequiredLength); williamr@2: IMPORT_C void PutDevAddr(const TBTDevAddr& aBdaddr); williamr@2: IMPORT_C void PutAFHHostChannelClassification(const TDesC8& aClassification); williamr@2: IMPORT_C void PutLinkKey(const TBTLinkKey& aLinkKey); williamr@2: IMPORT_C void PutConnectionHandle(THCIConnectionHandle aConnectionHandle); williamr@2: IMPORT_C void PutSimplePairingHash(const TBluetoothSimplePairingHash& aHash); williamr@2: IMPORT_C void PutSimplePairingRandomizer(const TBluetoothSimplePairingRandomizer& aRandomizer); williamr@2: williamr@2: IMPORT_C const TDesC8& HCTLPayload() const; williamr@2: williamr@2: private: williamr@2: CHctlCommandFrame(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: williamr@2: public: williamr@2: // Hctl Command specific constants williamr@2: const static TUint8 KHCICommandLengthFieldOffset = 2; williamr@2: const static TUint8 KHCICommandLengthFieldLength = 1; williamr@2: williamr@2: const static TUint8 KHCICommandPacketHeaderLength = 3; williamr@2: const static TInt KHCIMaxCommandLength = 255; williamr@2: }; williamr@2: williamr@2: /** williamr@2: Class representing an Hctl Data Frame as specified in the Bluetooth Core Specification, HCI Section williamr@2: This is abstract and the different data types (ACL, SCO etc) derive from it williamr@2: @publishedPartner williamr@2: */ williamr@2: NONSHARABLE_CLASS(CHctlDataFrameBase) : public CHctlFrameBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C void SetConnectionHandle(THCIConnHandle aConnectionHandle); williamr@2: IMPORT_C static THCIConnHandle ConnectionHandle(const TDesC8& aHCIDataFrame); williamr@2: IMPORT_C const TDesC8& HCTLPayload() const; williamr@2: williamr@2: virtual void SetDataPayload(const TDesC8& aData)=0; williamr@2: williamr@2: protected: williamr@2: CHctlDataFrameBase(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: williamr@2: public: williamr@2: const static TUint8 KHCIDataPacketLengthFieldOffset = 2; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Class representing an Hctl ACL Data Frame as specified in the Bluetooth Core Specification, HCI Section williamr@2: @publishedPartner williamr@2: */ williamr@2: NONSHARABLE_CLASS(CHctlAclDataFrame) : public CHctlDataFrameBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CHctlAclDataFrame* NewL(TUint16 aPayloadSize, TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: williamr@2: IMPORT_C static TAclPacketBoundaryFlag PacketBoundaryFlag(const TDesC8& aData); williamr@2: IMPORT_C static TAclPacketBroadcastFlag PacketBroadcastFlag(const TDesC8& aData); williamr@2: williamr@2: IMPORT_C void SetFlags(TAclPacketBoundaryFlag aBoundaryFlag, TAclPacketBroadcastFlag aBroadcastFlag); williamr@2: IMPORT_C void SetDataPayload(const TDesC8& aData); williamr@2: IMPORT_C THCIConnHandle ConnectionHandle() const; williamr@2: williamr@2: public: williamr@2: // Hctl ACL Data specific constants williamr@2: const static TUint8 KHCIACLDataPacketLengthFieldLength = 2; williamr@2: williamr@2: const static TUint8 KHCIACLDataPacketHeaderLength = 4; // 2 bytes ConnH, 2 bytes data length field williamr@2: const static TUint16 KHCTLMaxACLDataSize = 0xffff; williamr@2: williamr@2: private: williamr@2: CHctlAclDataFrame(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: void Finalise(); williamr@2: }; williamr@2: williamr@2: /** williamr@2: Class representing an Hctl Synchronous Data Frame as specified in the Bluetooth Core Specification, HCI Section williamr@2: @publishedPartner williamr@2: */ williamr@2: NONSHARABLE_CLASS(CHctlSynchronousDataFrame) : public CHctlDataFrameBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CHctlSynchronousDataFrame* NewL(TUint8 aBufSize, TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: virtual void SetDataPayload(const TDesC8& aData); williamr@2: williamr@2: public: williamr@2: // HCI SCO Data specific constants williamr@2: const static TUint8 KHCISCODataPacketLengthFieldLength = 1; williamr@2: williamr@2: const static TUint8 KHCISynchronousDataPacketHeaderLength = 3; // 2 bytes ConnH, 1 byte data length field williamr@2: const static TUint8 KHCTLMaxSynchronousDataSize = 0xff; williamr@2: private: williamr@2: CHctlSynchronousDataFrame(TUint8 aHctlHeaderSize, TUint8 aHctlTrailerSize); williamr@2: void Finalise(); williamr@2: }; williamr@2: williamr@2: #endif // HCIFRAME_H