--- /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 <es_prot.h>
+#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_