--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/l2cap/l2capSigPacketConfigure.h Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,268 @@
+// Copyright (c) 2004-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:
+//
+
+#ifndef L2CAPSIGPACKETCONFIGURE_H
+#define L2CAPSIGPACKETCONFIGURE_H
+
+#include "l2capCommand.h"
+
+class CL2CapChannelConfig;
+class TL2CapConfigParamOptions;
+
+NONSHARABLE_CLASS(HConfigureRequest) : public HL2CapCommand
+ {
+public:
+ static HConfigureRequest* New(TL2CAPPort aRemotePort, CL2CapChannelConfig& aConfig,
+ TUint8 aRTXTimerDuration = KDefaultRTXTimerDuration,
+ TUint16 aERTXTimerDuration = KDefaultERTXTimerDuration);
+ static TInt NewCommandIfValid(RMBufChain& aBuffer, HL2CapCommand*& aCommand);
+
+ TBool ProcessCommand(CL2CapSignalHandler& aSignalHandler);
+
+ inline TL2CAPPort DestinationCID() const;
+ inline TConfigFlags Flags() const;
+ inline void SetDestinationCID(TL2CAPPort aPort);
+ inline void SetFlags(TConfigFlags aFlags);
+
+ TInt ParseOptions(TL2CapConfigParamOptions& aConfigOptions, RMBufChain& aUnknownOptions) const;
+ TInt AddOptionsToCommand(CL2CapChannelConfig& aConfig);
+
+private:
+ HConfigureRequest(RMBufChain& aCommand,
+ TUint8 aRTXTimerDuration = KDefaultRTXTimerDuration,
+ TUint16 aERTXTimerDuration = KDefaultERTXTimerDuration);
+
+private:
+ const static TUint8 KConfigRequestEmptyLength = 8;
+
+ const static TUint8 KDestinationCIDOffset = 4;
+ const static TUint8 KFlagsOffset = 6;
+ const static TUint8 KOptionsOffset = 8;
+
+ const static TUint8 KNoConfigurationFlags = 0;
+ };
+
+inline TL2CAPPort HConfigureRequest::DestinationCID() const
+ {
+ return GetLittleEndian16(KDestinationCIDOffset, iCommand);
+ }
+
+inline TConfigFlags HConfigureRequest::Flags() const
+ {
+ return GetLittleEndian16(KFlagsOffset, iCommand);
+ }
+
+inline void HConfigureRequest::SetDestinationCID(TL2CAPPort aPort)
+ {
+ PutLittleEndian16(aPort, KDestinationCIDOffset, iCommand);
+ }
+
+inline void HConfigureRequest::SetFlags(TConfigFlags aFlags)
+ {
+ PutLittleEndian16(aFlags, KFlagsOffset, iCommand);
+ }
+
+
+NONSHARABLE_CLASS(HConfigureResponse) :public HL2CapCommand
+ {
+public:
+ static HConfigureResponse* New(TUint8 aId, TL2CAPPort aRemotePort, TConfigFlags aFlags, TConfigResponseResult aResult);
+ static TInt NewCommandIfValid(RMBufChain& aBuffer, HL2CapCommand*& aCommand);
+
+ TBool ProcessCommand(CL2CapSignalHandler& aSignalHandler);
+
+ inline TL2CAPPort SourceCID() const;
+ inline TConfigFlags Flags() const;
+ inline TConfigResponseResult Results() const;
+ inline void SetSourceCID(TL2CAPPort aPort);
+ inline void SetFlags(TConfigFlags aFlags);
+ inline void SetResults(TConfigResponseResult aResult);
+
+ TInt ParseOptions(TL2CapConfigParamOptions& aConfigOptions, RMBufChain& aUnknownOptions) const;
+ TInt AddOptionsToCommand(CL2CapChannelConfig& aConfig, TConfigResponseResult aResult);
+ void AddUnknownOptionsToCommand(RMBufChain& aUnknownOptions);
+
+public:
+ // Used on creation to specify that no flags
+ // (i.e., the continuation flag) are set.
+ const static TUint8 KNoConfigurationFlags = 0;
+
+private:
+ HConfigureResponse(RMBufChain& aCommand);
+
+private:
+ const static TUint8 KConfigResponseEmptyLength = 10;
+
+ const static TUint8 KSourceCIDOffset = 4;
+ const static TUint8 KFlagsOffset = 6;
+ const static TUint8 KResultOffset = 8;
+ const static TUint8 KOptionsOffset = 10;
+ };
+
+inline TL2CAPPort HConfigureResponse::SourceCID() const
+ {
+ return GetLittleEndian16(KSourceCIDOffset, iCommand);
+ }
+
+inline TConfigFlags HConfigureResponse::Flags() const
+ {
+ return GetLittleEndian16(KFlagsOffset, iCommand);
+ }
+
+inline TConfigResponseResult HConfigureResponse::Results() const
+ {
+ return static_cast<TConfigResponseResult>(GetLittleEndian16(KResultOffset, iCommand));
+ }
+
+inline void HConfigureResponse::SetSourceCID(TL2CAPPort aPort)
+ {
+ PutLittleEndian16(aPort, KSourceCIDOffset, iCommand);
+ }
+
+inline void HConfigureResponse::SetFlags(TConfigFlags aFlags)
+ {
+ PutLittleEndian16(aFlags, KFlagsOffset, iCommand);
+ }
+
+inline void HConfigureResponse::SetResults(TConfigResponseResult aResult)
+ {
+ PutLittleEndian16(static_cast<TUint16>(aResult), KResultOffset, iCommand);
+ }
+
+NONSHARABLE_CLASS(TL2CapConfigParamOptions)
+ {
+public:
+ TL2CapConfigParamOptions();
+
+ inline void SetMtu(const TMTUOption& aMtu);
+ inline TBool IsMtuSet() const;
+ inline const TMTUOption& Mtu() const;
+
+ inline void SetFlushTimeout(const TFlushTimeoutDurationOption& aFlushTimeout);
+ inline TBool IsFlushTimeoutSet() const;
+ inline const TFlushTimeoutDurationOption& FlushTimeout() const;
+
+ inline void SetFec(const TRetransmissionAndFlowControlOption& aFec);
+ inline TBool IsFecSet() const;
+ inline const TRetransmissionAndFlowControlOption& Fec() const;
+
+ inline void SetQos(const TQualityOfServiceOption& aQos);
+ inline TBool IsQosSet() const;
+ inline const TQualityOfServiceOption& Qos() const;
+
+ TBool operator==(const TL2CapConfigParamOptions& aThat);
+
+ TInt ParseOptions(TUint8 aOptionOffset, const RMBufChain& aCommand, RMBufChain& aUnknownOptions);
+
+ static TInt AddConfigRequestOptions(CL2CapChannelConfig& aConfig, TUint8 aOptionOffset, RMBufChain& aOptions);
+ static TInt AddConfigResponseOptions(CL2CapChannelConfig& aConfig, TUint8 aOptionOffset, RMBufChain& aOptions, TConfigResponseResult aResult);
+ static TInt AddMtuOptionL(TInt16 aMtu, TUint8 aOptionOffset, RMBufChain& aOptions);
+ static TInt AddFlushOptionL(TInt16 aFlushTimeout, TUint8 aOptionOffset, RMBufChain& aOptions);
+ static TInt AddQosOptionL(const TQualityOfServiceOption& aQosOption, TUint8 aOptionOffset, RMBufChain& aOptions);
+ static TInt AddFecOptionL(const TRetransmissionAndFlowControlOption& aFecOption, TUint8 aOptionOffset, RMBufChain& aOptions);
+ static TBool VerifyOptionsStructure(TUint8 aOptionOffset, const RMBufChain& aCommand);
+private:
+ // Options Constants
+ const static TUint8 KTypeOffset = 0;
+ const static TUint8 KLengthOffset = 1;
+ const static TUint8 KDataOffset = 2;
+ const static TUint8 KOptionHeaderLength = 2;
+
+ const static TUint8 KMTUOptionDataLen = 2;
+ const static TUint8 KFlushOptionDataLen = 2;
+ const static TUint8 KQOSOptionDataLen = 22;
+ const static TUint8 KFECOptionDataLen = 9;
+ const static TUint8 KFcsOptionDataLen = 1;
+
+ //QOS Options Offsets
+ const static TUint8 KQOSServiceTypeOffset = 1;
+ const static TUint8 KTokenRateOffset = 2;
+ const static TUint8 KTokenBucketSizeOffset = 6;
+ const static TUint8 KPeakBandwidthOffset = 10;
+ const static TUint8 KLatencyOffset = 14;
+ const static TUint8 KDelayVariationOffset = 18;
+
+ // FEC Options Offsets
+ const static TUint8 KLinkModeOffset = 0;
+ const static TUint8 KTxWindowSizeOffset = 1;
+ const static TUint8 KMaxTransmitOffset = 2;
+ const static TUint8 KRetransmissionTimeoutOffset = 3;
+ const static TUint8 KMonitorTimeoutOffset = 5;
+ const static TUint8 KMaximumPDUSizeOffset = 7;
+
+private:
+ TBool iMtuSet;
+ TMTUOption iMtu;
+
+ TBool iFlushTimeoutSet;
+ TFlushTimeoutDurationOption iFlushTimeout;
+
+ TBool iFecSet;
+ TRetransmissionAndFlowControlOption iFec;
+
+ TBool iQosSet;
+ TQualityOfServiceOption iQos;
+ };
+
+
+inline void TL2CapConfigParamOptions::SetMtu(const TMTUOption& aMtu)
+ {
+ iMtu = aMtu;
+ iMtuSet = ETrue;
+ }
+
+inline TBool TL2CapConfigParamOptions::IsMtuSet() const
+ { return iMtuSet; }
+
+inline const TMTUOption& TL2CapConfigParamOptions::Mtu() const
+ { return iMtu; }
+
+inline void TL2CapConfigParamOptions::SetFlushTimeout(const TFlushTimeoutDurationOption& aFlushTimeout)
+ {
+ iFlushTimeout = aFlushTimeout;
+ iFlushTimeoutSet = ETrue;
+ }
+
+inline TBool TL2CapConfigParamOptions::IsFlushTimeoutSet() const
+ { return iFlushTimeoutSet; }
+
+inline const TFlushTimeoutDurationOption& TL2CapConfigParamOptions::FlushTimeout() const
+ { return iFlushTimeout; }
+
+inline void TL2CapConfigParamOptions::SetFec(const TRetransmissionAndFlowControlOption& aFec)
+ {
+ iFec = aFec;
+ iFecSet = ETrue;
+ }
+
+inline TBool TL2CapConfigParamOptions::IsFecSet() const
+ { return iFecSet; }
+
+inline const TRetransmissionAndFlowControlOption& TL2CapConfigParamOptions::Fec() const
+ { return iFec; }
+
+inline void TL2CapConfigParamOptions::SetQos(const TQualityOfServiceOption& aQos)
+ {
+ iQos = aQos;
+ iQosSet = ETrue;
+ }
+
+inline TBool TL2CapConfigParamOptions::IsQosSet() const
+ { return iQosSet; }
+
+inline const TQualityOfServiceOption& TL2CapConfigParamOptions::Qos() const
+ { return iQos; }
+
+#endif