bluetooth/btstack/linkmgr/basebandsap.h
changeset 0 29b1cd4cb562
child 51 20ac952a623c
--- /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_