diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btstack/linkmgr/basebandsap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btstack/linkmgr/basebandsap.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,177 @@ +// Copyright (c) 2003-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 base class for baseband SAPs +// +// + +/** + @file + @internalComponent +*/ + +#ifndef _BASEBANDSAP_H_ +#define _BASEBANDSAP_H_ + +#include +#include "BtSap.h" +#include "AcceptWatchdog.h" +#include "MBtHostControllerEventInternalNotifier.h" +#include "notification.h" +#include "SecManNotifiers.h" +#include "btconsts.h" + +static const TUint8 KActiveDisconnectReason = 0x13; + + +class TBTConnect; +class CBTBasebandModel; +class CPhysicalLinksManager; +class CPhysicalLink; + +enum TBasebandTimeout + { + EAccept, + }; + +class MLogicalLink +/** + @internalComponent + Logical links mixin in from this to be offered the logical link connection requests + As it happens, for ACL these occur when PHY connect requests arrive + For SCO its a separate event +**/ + { +public: +/** + @return ETrue if connection is accepted, EFalse if not + @param aConnect a record detailing the connection + @param aPhysicalLink the physical link bearing the potential logical link +*/ + virtual TBool ConnectRequest(const TBTConnect& aConnect, const CPhysicalLink& aPhysicalLink) =0; + +/** + @param aConnect the new logical link details +*/ + virtual void ConnectComplete(const TBTConnect& aConnect) =0; + +/** + Signalled when logical link has disconnected +*/ + virtual void Disconnection() =0; + +/** + Signalled when an error situation affecting the logical link has occurred + @param aError The error +*/ + virtual void Error(TInt aError) =0; + +/** + Data for the logical link has been received +*/ + virtual void DataReceived(THCIConnHandle aConnH, TUint8 aFlag, const TDesC8& aData) =0; + +/** + @param aConnH The handle on which data has been sent + @param aNumPackets The number of packets sent +*/ + virtual void PacketsSent(THCIConnHandle aConnH, TUint16 aNumPackets) =0; + +/** + @return ETrue if the logical link considers itself to be idle +*/ + virtual TBool IsIdle() const = 0; + }; + +/** + @internalComponent + class CBTBasebandSAP + The (abstract) base SAP for the linkmgr + It forms the basis for ACL,SCO and Proxy SAPs + + Derivation allows for SAPs to spy on the phy + +**/ + +/*abstract*/ NONSHARABLE_CLASS(CBTBasebandSAP) : public CBluetoothSAP, public MPhysicalLinkObserver + { +public: +// from SAP + virtual void Start(); + virtual void LocalName(TSockAddr& anAddr) const ; + virtual TInt SetLocalName(TSockAddr& anAddr); + virtual void RemName(TSockAddr& anAddr) const ; + virtual TInt SetRemName(TSockAddr& anAddr); + virtual TInt GetOption(TUint level,TUint name,TDes8& anOption)const ; + virtual void Ioctl(TUint level,TUint name,TDes8* anOption); + virtual void CancelIoctl(TUint aLevel,TUint aName); + virtual TInt SAPSetOption(TUint level,TUint name,const TDesC8 &anOption); + virtual void ActiveOpen(); + virtual void ActiveOpen(const TDesC8& aConnectionData); + virtual TInt PassiveOpen(TUint aQueSize); + virtual TInt PassiveOpen(TUint aQueSize,const TDesC8& aConnectionData); + virtual void Shutdown(TCloseType option); + virtual void Shutdown(TCloseType option,const TDesC8& aDisconnectionData); + virtual void AutoBind(); + TUint Write(const TDesC8& aDesc,TUint aOptions, TSockAddr* aAddr); + void GetData(TDes8& aDesc,TUint options,TSockAddr* anAddr=NULL); + + TInt BindLink(TLinkType aLinkType, CPhysicalLink& aPhysicalLink); + void UnbindLink(TLinkType aLinkType); + + void LinkStateIdle(); + + void RemoveChild(CBTBasebandSAP* aChild); + void DeleteChild(CBTBasebandSAP* aChild); + + virtual void Timeout(TBasebandTimeout aTimeout) =0; + + inline THCIConnHandle Handle() const; + inline MSocketNotify* Socket() const; + inline CBTBasebandSAP*& ListeningSAP(); + virtual TBool IsIdle() const; + virtual TPhysicalLinkObserverQLink& ObserverQLink() {return iQueLink;}; + virtual void ParentClosing(); + +protected: + CBTBasebandSAP(CPhysicalLinksManager& aConnectionMan, CPhysicalLink* aConnection); + void ConstructL(); + CBTBasebandModel& Baseband() const; + +protected: + THCIConnHandle iHandle; // the handle this class represents + CPhysicalLinksManager& iLinksMan; + CPhysicalLink* iPhysicalLink; + CBTBasebandSAP* iParent; + CBTBasebandSAP* iChild; + TAcceptWatchdog iAcceptWatchdog; + TPhysicalLinkObserverQLink iQueLink; + }; + +inline THCIConnHandle CBTBasebandSAP::Handle() const + { + return iHandle; + } + + +inline MSocketNotify* CBTBasebandSAP::Socket() const + { + return iSocket; + } + +inline CBTBasebandSAP*& CBTBasebandSAP::ListeningSAP() + { + return iParent; + } + +#endif //_BASEBANDSAP_H_