diff -r 000000000000 -r 29b1cd4cb562 bluetoothmgmt/bluetoothclientlib/btlib/btsockethelpers.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothmgmt/bluetoothclientlib/btlib/btsockethelpers.h Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,302 @@ +// 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: +// BT socket active object helpers +// +// + +#ifndef BTSOCKETHELPERS_H +#define BTSOCKETHELPERS_H + + +#include + +//============================================================================= +//Active Objects +// + + + +//CBluetoothSocket Active Objects... +NONSHARABLE_CLASS(CBTConnecter) : public CActive + { +public: + static CBTConnecter* NewL(CBluetoothSocket& aParent); + void Connect(TBTSockAddr& aSockAddr); + void Connect(TBTSockAddr& aSockAddr, const TDesC8& aConnectDataOut, TDes8& aConnectDataIn); + + ~CBTConnecter(); + + +private: + CBTConnecter(CBluetoothSocket& aParent); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + TInt BasebandAccessor(); + + CBluetoothSocket& iParent; + RBTBaseband iActiveModeRequester; + }; + + +NONSHARABLE_CLASS(CBTAccepter) : public CActive + { +public: + static CBTAccepter* NewL(CBluetoothSocket& aParent, CBluetoothSocket& aBlankSocket); + + void Accept(); + void Accept(TDes8& aConnectData); + ~CBTAccepter(); + void SetActive(){CActive::SetActive();}; + +private: + CBTAccepter(CBluetoothSocket& aParent, CBluetoothSocket& aBlankSocket); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + void BasebandAccessor(); + + CBluetoothSocket& iParent; + CBluetoothSocket& iBlankSocket; + }; + + + +NONSHARABLE_CLASS(CBTShutdowner) : public CActive + { +public: + static CBTShutdowner* NewL(CBluetoothSocket& aParent); + void Shutdown(RSocket::TShutdown aHow,const TDesC8& aDisconnectDataOut,TDes8& aDisconnectDataIn); + void Shutdown(RSocket::TShutdown aHow); + void BasebandShutdown(/*TBTDevAddr aAddr*/); + ~CBTShutdowner(); + + +private: + CBTShutdowner(CBluetoothSocket& aParent); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + CBluetoothSocket& iParent; + }; + + +NONSHARABLE_CLASS(CBTSender) : public CActive + { +public: + static CBTSender* NewL(CBluetoothSocket& aParent); + ~CBTSender(); + + void Write(const TDesC8& aDesc); + void Send(const TDesC8& aDesc,TUint someFlags); + void Send(const TDesC8& aDesc,TUint someFlags,TSockXfrLength& aLen); + void SendTo(const TDesC8& aDesc,TSockAddr& aAddr,TUint flags); + void SendTo(const TDesC8& aDesc,TSockAddr& aAddr,TUint flags,TSockXfrLength& aLen); + + +private: + enum TCurrentRequest + { + ENone, + EWrite, + ESend, + }; + CBTSender(CBluetoothSocket& aParent); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + CBluetoothSocket& iParent; + TCurrentRequest iCurrentRequest; + }; + + +NONSHARABLE_CLASS(CBTReceiver) : public CActive + { +public: + static CBTReceiver* NewL(CBluetoothSocket& aParent); + ~CBTReceiver(); + + void Read(TDes8& aDesc); + void ReadSCOData(const TDesC8& aSCOData, TUint32 aPreferredPacket); + void Recv(TDes8& aDesc,TUint flags); + void Recv(TDes8& aDesc,TUint flags,TSockXfrLength& aLen); + void RecvOneOrMore(TDes8& aDesc,TUint flags,TSockXfrLength& aLen); + void RecvFrom(TDes8& aDesc,TSockAddr& aAddr,TUint flags); + void RecvFrom(TDes8& aDesc,TSockAddr& aAddr,TUint flags,TSockXfrLength& aLen); + + +private: + enum TCurrentRequest + { + ENone, + ERead, + ERecv, + }; + CBTReceiver(CBluetoothSocket& aParent); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + CBluetoothSocket& iParent; + TCurrentRequest iCurrentRequest; + }; + + +NONSHARABLE_CLASS(CBTIoctler) : public CActive + { +public: + static CBTIoctler* NewL(CBluetoothSocket& aParent); + ~CBTIoctler(); + + void Ioctl(TUint aCommand, TDes8* aDesc=NULL, TUint aLevel=KLevelUnspecified); + +private: + CBTIoctler(CBluetoothSocket& aParent); + void ConstructL(); + void DoCancel(); + void RunL(); + TInt RunError(TInt aError); + + CBluetoothSocket& iParent; + }; + + +NONSHARABLE_CLASS(MBTBasebandHandler) + { +public: + virtual RBTBaseband& MbbhBTBaseband() = 0; + virtual void MbbhHandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification& aEventNotification) = 0; + virtual TInt MbbhOpen(RSocketServ& aSocketServ, RSocket& aSocket) = 0; + virtual void MbbhClose() = 0; + }; + +NONSHARABLE_CLASS(CBTBasebandChangeEventNotifier) : public CActive + { +public: + static CBTBasebandChangeEventNotifier* NewL(MBTBasebandHandler& aUser); + ~CBTBasebandChangeEventNotifier(); + + void SetNotifyNextModeChange(); + void SetNotify(TUint32 aNotifications); + + +private: + CBTBasebandChangeEventNotifier(MBTBasebandHandler& aUser); + void ConstructL(); + //void SetNotify(TUint32 aNotifications); + void RunL(); + TInt RunError(TInt aError); + void DoCancel(); + +private: + MBTBasebandHandler& iUser; + TUint iCurrentRequest; + TBTBasebandEvent iEvent; + }; + + +NONSHARABLE_CLASS(CAutoSniffDelayTimer) : public CTimer, + public MBTBasebandHandler +/** + This class provides a timer which when it expires requests Sniff Mode. +**/ + { +public: + static CAutoSniffDelayTimer* NewL(CBluetoothSocket& aParent, TInt aIdleSecondsBeforeSniffRequest); + ~CAutoSniffDelayTimer(); + + void Start(); + void StartActive(); + + virtual RBTBaseband& MbbhBTBaseband(); + virtual void MbbhHandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification& aEventNotification); + virtual TInt MbbhOpen(RSocketServ& aSocketServ, RSocket& aSocket); + virtual void MbbhClose(); + + +private: + CAutoSniffDelayTimer(CBluetoothSocket& aParent, TInt aIdleSecondsBeforeSniffRequest); + void ConstructL(); + void RunL(); + TInt MakeSniffRequest(); + +private: + CBluetoothSocket& iParent; + RBTBaseband iBTAutoSniffBaseband; + CBTBasebandChangeEventNotifier* iBTAutoSniffBasebandChangeEventNotifier; + TTimeIntervalMicroSeconds32 iAutoSniffDelay; + TBool iSniffModeRequested; + }; + + +NONSHARABLE_CLASS(CBTBasebandManager) : public CBase +/** + This class manages all basebands in order to keep them in step. +**/ + { +public: + static CBTBasebandManager* NewL(); + ~CBTBasebandManager(); + + TInt RegisterBTBaseband(MBTBasebandHandler& aBasebandHandler); + TInt UnRegisterBTBaseband(MBTBasebandHandler& aBasebandHandler); + TInt HandleConnectionUp(RSocketServ& aSocketServ, RSocket& aSocket); + void HandleConnectionDown(); + TBool Connected() const; + +private: + void ConstructL(); + CBTBasebandManager(); + void CloseAllBasebands(); + +private: + TBool iConnected; + RSocketServ* iSocketServ; + RSocket* iSocket; + + // unowned + RPointerArray iBasebandHandlers; + }; + +NONSHARABLE_CLASS(CBTBasebandChangeEventDelegate) : public CBase, + public MBTBasebandHandler +/** + This class provides CBluetoothSocket a proxy to access virtual functions in MBTBasebandHandler +**/ + { +public: + static CBTBasebandChangeEventDelegate* NewL(CBluetoothSocket& Parent); + + virtual RBTBaseband& MbbhBTBaseband(); + virtual void MbbhHandleActivateBasebandEventNotifierCompleteL(TInt aErr, TBTBasebandEventNotification& aEventNotification); + virtual TInt MbbhOpen(RSocketServ& aSocketServ, RSocket& aSocket); + virtual void MbbhClose(); + +private: + CBTBasebandChangeEventDelegate(CBluetoothSocket& Parent); + void ConstructL(); + +private: + CBluetoothSocket& iParent; + }; + +#endif +