diff -r 02103bf20ee5 -r 90dbfc0435e3 bluetoothengine/headsetsimulator/core/inc/Server/hsclient.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/headsetsimulator/core/inc/Server/hsclient.h Wed Sep 15 15:59:44 2010 +0200 @@ -0,0 +1,212 @@ +/* + * Component Name: Headset Simulator + * Author: Comarch S.A. + * Version: 1.0 + * Copyright (c) 2010 Comarch S.A. + * + * This Software is submitted by Comarch S.A. to Symbian Foundation Limited on + * the basis of the Member Contribution Agreement entered between Comarch S.A. + * and Symbian Foundation Limited on 5th June 2009 (“Agreement”) and may be + * used only in accordance with the terms and conditions of the Agreement. + * Any other usage, duplication or redistribution of this Software is not + * allowed without written permission of Comarch S.A. + * + */ + +#ifndef HSCLIENT_H_ +#define HSCLIENT_H_ + +#include + +class MHsClientObserver; +class MHsClientStateNotifier; + +/** Length of AG's receive and send data buffer */ +const TInt32 KHsClientBufferLength = 0x800; + +/** Buffer for communication with AG */ +typedef TBuf8 THsClientBuffer; + +/** + * @brief Class represents AG client. + */ +class CHsClient : public CBase, public MBluetoothSocketNotifier +{ +public: + + /** + * Two-phase constructor + * + * @param aClient socket which AG is connected + * @param aClientStateNotifier pointer to AG state observer + * @param aClientDisconnectNotifier pointer to AG disconnection observer + * @return instance of class + */ + static CHsClient* NewL( CBluetoothSocket* aClient, + MHsClientStateNotifier* aClientStateNotifier = NULL, + MHsClientObserver* aClientDisconnectNotifier = NULL ); + + /** + * Two-phase constructor + * + * @param aClient socket which AG is connected + * @param aClientStateNotifier pointer to AG state observer + * @param aClientDisconnectNotifier pointer to AG disconnection observer + * @return instance of class + */ + static CHsClient* NewLC( CBluetoothSocket* aClient, + MHsClientStateNotifier* aClientStateNotifier = NULL, + MHsClientObserver* aClientDisconnectNotifier = NULL ); + + /** + * Destructor + */ + ~CHsClient(); + +public: + /** + * Sends data to AG. + * + * @pre AG client is connected + * + * @param aData data to be send + */ + void Send( const TDesC8& aData ); + + /** + * Sets observer of AG's disconnection. + * + * @param aNotifier reference to MHsClientObserver + */ + void SetClientDisconnectNotfier( MHsClientObserver& aNotifier ); + + /** + * Sets observer of AG's states. + * + * @param aNotifier reference to MHsClientStateNotifier + */ + void SetClientStateNotfier( MHsClientStateNotifier& aNotifier ); + + /** + * Returns pointer to AG's states observer. + */ + MHsClientStateNotifier* GetClientStateNotifer(); + +private: + /** + * Constructor for performing 1st stage construction + * + * @param aClient socket which AG is connected + * @param aClientStateNotifier pointer to AG state observer + * @param aClientDisconnectNotifier pointer to AG disconnection observer + */ + CHsClient( CBluetoothSocket& aClient, + MHsClientStateNotifier* aClientStateNotifier = NULL, + MHsClientObserver* aClientDisconnectNotifier = NULL ); + + /** + * Constructor for performing 2nd stage construction + */ + void ConstructL(); + +private: + + /** + * Receives data from AG. + * + * @param aData received data buffer + * + * @leave KErrNoMemory if AG socket is NULL + * @leave KErrDisconnected if AG is not connected + */ + void RawRecvL( TDes8& aData ); + + /** + * Sends data to AG. + * + * @param aData data to be send + * + * @leave KErrNoMemory if AG socket is NULL + * @leave KErrDisconnected if AG is not connected + * @leave KErrWrite if parameter is empty + */ + void RawSendL( const TDesC8& aData ); + + /** + * Sends data to AG with double buffering and init receiving when there + * is no data to be send. + * + * @param aData data to be send + */ + void BufferedProcessL( const TDesC8& aData = KNullDesC8 ); + + /** + * Swaps sending buffers. + */ + void SwapBuffers(); + +private: + //Methods derived from MBluetoothSocketNotifier + void HandleConnectCompleteL( TInt aErr ); + + void HandleAcceptCompleteL( TInt aErr ); + + void HandleShutdownCompleteL( TInt aErr ); + + void HandleSendCompleteL( TInt aErr ); + + void HandleReceiveCompleteL( TInt aErr ); + + void HandleIoctlCompleteL( TInt aErr ); + + void HandleActivateBasebandEventNotifierCompleteL( TInt aErr, + TBTBasebandEventNotification& aEventNotification ); + +private: + + /** AG client state enum */ + enum THsClientState + { + /** Idle state */ + EIdle = 0, + /** Sending state */ + ESending, + /** Receiving state */ + EReceiving + }; + + /** AG client's state */ + THsClientState iState; + + /** Bluetooth information receive flags */ + TInt iReceiveFlag; + + /** Bluetooth information send flags */ + TInt iSendFlag; + + /** Denotes if AG is connected */ + TBool iConnected; + + /** Length indicating how much data was read */ + TSockXfrLength iReceiveMessageLength; + + /** Receive data buffer */ + THsClientBuffer iReceiveMessageBuffer; + + /** Send data buffer */ + THsClientBuffer iSendBuf; + + /** Temporary send data buffer */ + THsClientBuffer iTempSendBuf; + + /** Bluetooth socket */ + CBluetoothSocket* iSocket; + + /** Pointer to MHsClientStateNotifier. Not owned */ + MHsClientStateNotifier* iStateNotifier; + + /** Pointer to MHsClientObserver. Not owned */ + MHsClientObserver* iClientObserver; +}; + +#endif /* HSCLIENT_H_ */