diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/l2cap/L2CapChannelConfig.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btstack/l2cap/L2CapChannelConfig.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,180 @@ +// Copyright (c) 1999-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: +// Defines the L2CAP Channel Config class +// +// + +#ifndef L2CAPCHANNELCONFIG_H +#define L2CAPCHANNELCONFIG_H + +#include +#include + +#include "L2types.h" +#include "L2CapFecNegotiator.h" +#include "l2capEntityConfig.h" +#include "l2capSigPacketConfigure.h" + +// Forward declarations +class TL2CAPEntityConfig; +class HConfigureRequest; +class HConfigureResponse; +class RMBufChain; + +#ifndef __UNITTest__ + class CL2CapSAPSignalHandler; +#else + class CL2CapConfigProxy; +#endif + +NONSHARABLE_CLASS(CL2CapChannelConfig) : public CBase + { +public: + enum TChannelConfigStatus + { + EChannelConfigOutstanding, + EChannelConfigComplete, + EChannelConfigFailed, + }; + + // Configuration constants + const static TUint16 KMinOutgoingFlushTimeout = TL2CapConfig::EMinDataObsolescenceTimeout; //min physically possible + ~CL2CapChannelConfig(); + + static CL2CapChannelConfig* NewL(CL2CapSAPSignalHandler& aSAPSignalHandler); + + TInt HandleConfigRequest(HConfigureRequest& aConfigRequest, RMBufChain& aUnknownOptions); + TInt HandleConfigResponse(HConfigureResponse& aConfigResponse, RMBufChain& aUnknownOptions); + // This does the actual handling and sends a response to a whole Config Request "transaction", + // so that segmented config requests are correctly handled. + TInt ConfigRequestComplete(TBool aConfigRequestSent, TConfigResponseResult& aResult); + + void CloneChannelConfig(const CL2CapChannelConfig& aCL2CapChannelConfig); + TInt UpdateLocalConfigWithEntityCapabilities(); + + TInt UpdateConfigAPIChange(const TL2CapConfig& aAPIConfig, TBool& aOnTheAirReconfigRequired); + + void RegisterL2CapEntityConfig(TL2CAPEntityConfig& aL2CapEntityConfig); + void DetachChannelConfig(); + inline TBool IsPeerInfoDefined(); + + TChannelConfigStatus LocalConfigurationStatus() const; + + TInt GetChannelMode(TL2CapChannelMode& aMode) const; + + // Accessors for configuration options. + inline TL2CapConfigurationOptionGroup& IncomingMTU() const; + inline TL2CapConfigurationOptionGroup& OutgoingMTU() const; + inline TL2CapConfigurationOptionGroup& IncomingFlushTimeout() const; + inline TL2CapConfigurationOptionGroup& OutgoingFlushTimeout() const; + inline TL2CapConfigurationOptionGroup& IncomingQOS() const; + inline TL2CapConfigurationOptionGroup& OutgoingQOS() const; + inline TL2CapFecNegotiator& FecNegotiator(); + inline const TL2CapFecNegotiator& FecNegotiator() const; + +private: +#ifndef __UNITTest__ + CL2CapChannelConfig(CL2CapSAPSignalHandler& aSAPSignalHandler); +#else + CL2CapChannelConfig(CL2CapConfigProxy& aSAPSignalHandler); +#endif + void ConstructL(); + + TBool GenerateFecOptions(const TL2CapEntityInfo& aPeerEntityConfig); + TInt UpdateReliability(const TL2CapConfig& aApiConfig); + TInt UpdateMtuMru(const TL2CapConfig& aApiConfig, TBool& aOnTheAirReconfigRequired); + +private: + // Configuration members. + // MTU / MRU + TL2CapConfigurationOptionGroup* iIncomingMTU; + TL2CapConfigurationOptionGroup* iOutgoingMTU; + + // Incoming and outgoing Flush timers. + TL2CapConfigurationOptionGroup* iIncomingFlushTimeoutDuration; + TL2CapConfigurationOptionGroup* iOutgoingFlushTimeoutDuration; + + // Incoming and outgoing QoS + TL2CapConfigurationOptionGroup* iIncomingQOS; + TL2CapConfigurationOptionGroup* iOutgoingQOS; + + // Incoming and outgoing FEC + TL2CapFecNegotiator iFecNegotiator; + +#ifndef __UNITTest__ + CL2CapSAPSignalHandler& iSAPSignalHandler; +#else + CL2CapConfigProxy& iSAPSignalHandler; +#endif + TL2CAPEntityConfig* iL2CapEntityConfig; // Non-owned. + + TL2CapConfig::TChannelReliability iRequestedChannelReliability; + TBool iLegacyModesDisallowed; + TUint16 iRequestedFlushTimeout; + TUint16 iRequestedRetransmissionTimeout; + + // Thanks to the possibility of segmented ConfigRequests, we need + // this to collect all the options as Config Request segments flow in. + // Then once the whole ConfigRequest transaction is received, we process this. + TL2CapConfigParamOptions iReceivedConfigRequestOptions; + }; + + +// Accessors for configuration options. +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::IncomingMTU() const + { + return *iIncomingMTU; + } + +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::OutgoingMTU() const + { + return *iOutgoingMTU; + } + +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::IncomingFlushTimeout() const + { + return *iIncomingFlushTimeoutDuration; + } + +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::OutgoingFlushTimeout() const + { + return *iOutgoingFlushTimeoutDuration; + } + +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::IncomingQOS() const + { + return *iIncomingQOS; + } + +inline TL2CapConfigurationOptionGroup& CL2CapChannelConfig::OutgoingQOS() const + { + return *iOutgoingQOS; + } + +inline TL2CapFecNegotiator& CL2CapChannelConfig::FecNegotiator() + { + return iFecNegotiator; + } + +inline const TL2CapFecNegotiator& CL2CapChannelConfig::FecNegotiator() const + { + return iFecNegotiator; + } + +inline TBool CL2CapChannelConfig::IsPeerInfoDefined() + { + return iL2CapEntityConfig && iL2CapEntityConfig->PeerInfoDefined(); + } + +#endif