bthci/hci2implementations/hctls/bcsp/inc/hctlbcspframe.h
changeset 0 29b1cd4cb562
--- /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