/*
* 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 HSREMOTECONTROLLER_H
#define HSREMOTECONTROLLER_H
#include <e32base.h>
#include <bttypes.h>
#include <bt_sock.h>
#include <UTF.H>
#include <hsrcbttoolsobserver.h>
#include <hsremoterequest.h>
_LIT(KHSRemoteControllerNotConnectedPanicMsg,
"Not connected to Headset Simulator");
class CHsRCBTManager;
/** Length of the remote request data */
const TInt KHsRemoteControlDataLength = 1024;
/** Buffer for remote control */
typedef TBuf8 <KHsRemoteControlDataLength> THsRemoteControlBuffer;
/**
* @brief Interface for handling Headset Simulator Remote Controller's status
*/
class MHsRCObserver
{
public:
/**
* Informs about connection with Headset Simulator
*
* @param aErr error value. If aErr == KErrNone connection is established,
* otherwise not.
*/
virtual void HandleConnectedToHs( TInt aErr ) = 0;
/**
* Informs about released connection with Headset Simulator
*/
virtual void HandleDisconnectedFromHs( TInt aErr ) = 0;
/**
* Informs that connection with Headset Simulator is being established
*/
virtual void HandleConnectingToHs() = 0;
/**
* Informs that remote request was sent
* @param aType THsRemoteControlCommandType
*/
virtual void HandleRequestSent( THsRemoteControlCommandType aType ) = 0;
};
/**
* @brief Class responsible for remote control of Headset Simulator
*/
class CHsRemoteController : public CBase, public MBluetoothSocketNotifier,
public MHsRCBTManagerObserver
{
public:
/**
* Two-phase constructor
* @param aObserver pointer to MHsRCObserver
* @return instance of class
*/
IMPORT_C static CHsRemoteController* NewL( MHsRCObserver* aObserver );
/**
* Two-phase constructor
* @param aObserver pointer to MHsRCObserver
* @return instance of class
*/
IMPORT_C static CHsRemoteController* NewLC( MHsRCObserver* aObserver );
/**
* Destructor
*/
IMPORT_C ~CHsRemoteController();
public:
/**
* Connects Headset Simulator by its bluetooth address
*
* When request completes notification is sent to
* MHsRCObserver::HandleConnectedToHs()
*
* @param aDevAddr Headset Simulator's bluetooth address
* @param aService Headset Simulator's Remote Control service TUUID
*
* @leave KErrInUse if connection with Headset Simulator is already
* established
*/
IMPORT_C void ConnectHsDevAddrL( const TBTDevAddr& aDevAddr,
const TUUID& aService );
/**
* Connects Headset Simulator by its bluetooth name
*
* When request completes notification is sent to
* MHsRCObserver::HandleConnectedToHs()
*
* @param aHsName Headset Simulator's bluetooth name
* @param aService Headset Simulator's Remote Control service TUUID
*
* @leave KErrInUse if connection with Headset Simulator is
* already established
*/
IMPORT_C void ConnectHsDevNameL( const TDesC& aHsName,
const TUUID& aService );
/**
* Cancels attempt of connection with Headset Simulator
*/
IMPORT_C void CancelConnectingToHs();
/**
* Disconnects from Headset Simulator
*
* When request completes notification is sent to
* MHsRCObserver::HandleDisconnectedFromHs()
*/
IMPORT_C void DisconnectFromHs();
//remote requests
/**
* Requests turning HS on (i.e. start providing headset service)
*
* @pre Established connection with Headset Simulator
* @param aPluginCod CoD plugin's name
* @param aPluginSdp SDP plugin's name
* @param aPluginProfile Profile plugin's name
*/
IMPORT_C void ReqTurnOnHs( const TDesC& aPluginCod,
const TDesC& aPluginSdp, const TDesC& aPluginProfile );
/**
* Requests turning HS off (i.e. stop providing headset service)
*
* @pre Established connection with Headset Simulator
*/
IMPORT_C void ReqTurnOffHs();
/**
* Requests connection establishment between Headset Simulator and AG
* with specified bluetooth address. Address should be lower-case.
*
* @pre Established connection with Headset Simulator
*
* @param aDevAddr AG's bluetooth device address
*/
IMPORT_C void ReqConnectWithDevAddr( const TBTDevAddr& aDevAddr );
/**
* Requests connection establishment between Headset Simulator and AG
* with specified bluetooth name
*
* @pre Established connection with Headset Simulator
*
* @param aDevName AG's bluetooth device name
*/
IMPORT_C void ReqConnectWithDevName( const TDesC& aDevName );
/**
* Requests connection establishment between Headset Simulator and
* last-connected AG
*
* @pre Established connection with Headset Simulator
*/
IMPORT_C void ReqConnectWithLastConnected();
/**
* Requests accept incoming call on AG
*
* @pre Established connection with Headset Simulator
*/
IMPORT_C void ReqAcceptCall();
/**
* Requests call release on AG
*
* @pre Established connection with Headset Simulator
*/
IMPORT_C void ReqReleaseCall();
/**
* Requests setting AG's microphone gain
*
* @pre Established connection with Headset Simulator
*
* @param aValue text-value
*/
IMPORT_C void ReqSetMicGain( const TDesC& aValue );
/**
* Requests setting AG's speaker volume
*
* @pre Established connection with Headset Simulator
*
* @param aValue text-value
*/
IMPORT_C void ReqSetSpeakerVolume( const TDesC& aValue );
/**
* Requests sending any AT command
*
* @pre Established connection with Headset Simulator
*
* @param aValue text-value
*/
IMPORT_C void ReqSendAnyAt( const TDesC& aValue );
/**
* Requests disconnection of AG from Headset Simulator
*
* @pre Established connection with Headset Simulator
*/
IMPORT_C void ReqDisconnectAG();
private:
/**
* Constructor for performing 1st stage construction
*
* @param aObserver pointer to MHsRCObserver
*/
CHsRemoteController( MHsRCObserver* aObserver );
/**
* Constructor for performing 2nd stage construction
*/
void ConstructL();
private:
/**
* Sends request to Headset Simulator
*
* @param aCommandType type of command
* @param aData additional data send within request
*/
void SendRequest( const THsRemoteControlCommandType aCommandType,
const TDesC& aData = KNullDesC );
/**
* Sends data (THsRCCommand as a descriptor) to remote bluetooth device
*
* @param aData data to be send
* @return error value
*/
TInt Send( const TDesC8& aData );
/**
* Receives data from remote bluetooth device
*/
void Receive();
/**
* Connects with Headset Simulator's Remote Control server
*
* @param aAddr Headset Simulator's bluetooth address
* @param aPort Headset Simulator's remote controls's server port
*
* @return error value
*/
TInt ConnectRemoteControlServer( const TBTDevAddr &aAddr, const TInt aPort );
/**
* Creates component responsible for handling bluetooth
*
* @return error value
*/
TInt CreateBTManager();
private:
//Methods inherited 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:
//Methods inherited from MHsRCBTManagerObserver
void HandleDesiredDevFound( const TDesC& aDevName,
const TBTDevAddr& aDevAddr, const TInt aPort );
void HandleDesiredDevNotFound( TInt aErr );
private:
/** received data */
THsRemoteControlBuffer iReceiveDataBuffer;
/** data to be sent */
THsRemoteControlBuffer iSendDataBuffer;
/** buffered data */
THsRemoteControlBuffer iTempDataBuffer;
/** data length */
TSockXfrLength iDataLength;
/** instance of socket server */
RSocketServ iSocketServ;
/** denotes if connection with Headset Simulator is established */
TBool iConnected;
/** pointer to CHsRCBTManager, owned */
CHsRCBTManager* iBTManager;
/** pointer to CBluetoothSocket, owned */
CBluetoothSocket* iSocket;
/** pointer to MHsRCObserver, not owned */
MHsRCObserver* iObserver;
};
#endif // HSREMOTECONTROLLER_H