--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bthci/hci2implementations/hctls/bcsp/inc/hctlbcspframe.h Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,183 @@
+// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef HCTLBCSPFRAME_H
+#define HCTLBCSPFRAME_H
+
+#include <e32base.h>
+
+class HCTLBcspFrameHelper;
+
+NONSHARABLE_CLASS(THCTLBcspPacketType)
+/**
+T Class for setting the correct protocol ID for the BCSP frame Header Byte
+depends on the packet type
+*/
+ {
+public:
+ TInt SetProtocolId(TUint8 aProtocolId);
+ TUint8 ProtocolId() const;
+private:
+ TUint8 iProtocolId;
+ };
+
+
+NONSHARABLE_CLASS(THCTLBcspFlags)
+/**
+T Class for setting the remainder of the information conveyed in the flag header byte
+*/
+ {
+public:
+ void SetSequence(TUint8 aSeq);
+ void SetAck(TUint8 aAck);
+ void SetCrcEnabled(TBool aIsCrcEnabled);
+ void SetIsReliableProtcolType(TBool aIsReliableProtcolType);
+ void SetFlagsField(TUint8 aFlagsField);
+
+ TUint8 Sequence() const;
+ TUint8 Ack() const;
+ TBool CrcEnabled() const;
+ TBool IsReliableProtcolType() const;
+ TUint8 FlagsField() const;
+
+private:
+ TUint8 iFlagsField;
+ };
+
+NONSHARABLE_CLASS(CHCTLBcspFrame) : public CBase
+/**
+Class used to populate a BCSP frame with the correct header,trailer data and payload
+*/
+ {
+public:
+ void SetFlags(TUint8 aAck, TBool aIsCrcEnabled, TBool aIsReliableProtcolType);
+ void SetSequence(TUint8 aSeq);
+
+ TInt SetProtocolId(TUint8 aProtocolId);
+ TBool CrcEnabled() const;
+ TUint8 ProtocolId() const;
+ TUint8 FlagsField() const;
+ TBool IsReliableProtcolType() const;
+ TUint8 Sequence() const;
+ TUint8 Ack() const;
+ TUint8 CheckSum() const;
+ TUint16 CalcCRC(const TDesC8& aData);
+
+ TUint16 PayloadLength() const;
+ TDesC8& Payload();
+
+ TInt ValidateChecksum(const TDesC8& aHeader);
+ virtual TBool IsValid() const;
+ virtual void Reset();
+
+protected:
+ CHCTLBcspFrame();
+ TUint8 CalcCheckSum(const TDesC8& aHeader);
+
+private:
+ TUint16 ReverseCrcBits(TUint16 aCRCValue);
+
+protected:
+ TPtrC8 iPayloadPtr;
+ TUint16 iCRCValue;
+ TUint8 iCheckSum;
+ THCTLBcspFlags iFlagHeaderByte;
+ TBool iIsValid;
+
+private:
+ THCTLBcspPacketType iProtocolId;
+ };
+
+
+NONSHARABLE_CLASS(CTxHctlBcspFrame) : public CHCTLBcspFrame
+/**
+CTxHctlBcspFrame
+Provides an object which embodies a BCSP frame including methods for populating the
+ HCI payload
+ Header bytes
+ CRC bytes
+Provides all error checking (Packet Integrity) excluding SLIP encoding and decoding
+*/
+ {
+ friend class CHCTLBcspWindow;
+
+public:
+ static CTxHctlBcspFrame* NewLC(const TDesC8& aHCIPayload);
+ static CTxHctlBcspFrame* NewLC(TInt aFrameSize=0);
+ static CTxHctlBcspFrame* NewL(const TDesC8& aHCIPayload);
+ static CTxHctlBcspFrame* NewL(TInt aFrameSize=0);
+
+ virtual ~CTxHctlBcspFrame();
+
+ void SetPayload(const TDesC8 &aPayload);
+ void SetPayload();
+
+ void BuildFrame();
+ void SlipEncodeFrame(TPtr8 aSlipFrame);
+
+ void IncrementRetries() { iRetries++; };
+ TInt Retries(void) const { return iRetries; };
+
+ void Reset();
+
+private:
+ CTxHctlBcspFrame();
+
+ void ConstructL(const TDesC8& aHCIPayload);
+ void ConstructL(TInt aFrameSize);
+
+ const TDesC8& BuildHeaderBytes(const TUint8 aFlagHeaderByte, const TUint8 aProtocolId,const TUint16 aPayloadLength);
+
+ TUint16 UpdateCRC(TUint8 aDataByte,TUint16 aCRCValue);
+ TUint16 GetBigEndianCRC(TUint16 aCRCValue);
+
+private:
+ // When config stuff complete chuck all THctlBcspFrame into iSlipEncoded HBufC8*
+ // queue on SequenceBuf or DatagramBuf
+ HBufC8* iFrame;
+ TPtr8 iFramePtr;
+ TInt iRetries; // Number of times that this has been sent so far
+ TSglQueLink iLink; // For SqlQue and the Window
+ };
+
+NONSHARABLE_CLASS(CRxHctlBcspFrame) : public CHCTLBcspFrame
+/**
+TRxHctlBcspFrame
+Provides an object which embodies a BCSP frame including methods for populating the
+ HCI payload
+ Header bytes
+ CRC bytes
+Provides all error checking (Packet Integrity) excluding SLIP encoding and decoding
+*/
+ {
+public:
+ static CRxHctlBcspFrame *NewL();
+
+ TInt SlipDecodeFrame(const TDesC8& aReceivedFrame);
+
+private:
+ CRxHctlBcspFrame();
+ void ParseFlagByte(const TDesC8& aFlagbyte);
+ TInt ParsePayloadLenProtId(const TDesC8& aHeader, TUint16& aRetPayloadLen);
+ TInt CheckCRC(const TDesC8& aFrame);
+ TInt Set(const TDesC8& aHCIPayload);
+ };
+
+#endif // HCTLBCSPFRAME_H