--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/headsetsimulator/remotecontroller/inc/bttools/hsrcbttools.h Wed Sep 15 15:59:44 2010 +0200
@@ -0,0 +1,395 @@
+/*
+ * 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 HSRCBTTOOLS_H
+#define HSRCBTTOOLS_H
+
+#include <btsdp.h>
+#include <bt_sock.h>
+#include <btengconnman.h>
+#include <btengsettings.h>
+#include <btengdiscovery.h>
+
+class CBTEngSettings;
+class CBTEngConnMan;
+class CBTEngDiscovery;
+class RSocketServ;
+class MHsRCBTManagerObserver;
+
+/** Length of device bluetooth address */
+const TInt KDevAddrLength = KBTDevAddrSize * 2;
+
+/** default bluetooth name */
+_LIT(KHsRCDefaultName,"HS_RemoteController");
+
+/**
+ * @brief Observes devices found during inquiry
+ */
+class MHsRCDeviceDiscovererObserver
+{
+public:
+ /**
+ * Informs that device was found during inquiry
+ *
+ * @param aBTAddress 8-bit descriptor containing bluetooth address
+ * @param aBTName 8-bit descriptor containing bluetooth name
+ * @param aMajServClass major service class - part of Class of Device
+ * @param aMajDeviceClass major device class - part of Class of Device
+ * @param aMinDeviceClass minor device class - part of Class of Device
+ */
+ virtual void HandleDeviceFindSuccessL( TDesC8 &aBTAddress, TDesC8 &aBTName,
+ TUint16 aMajServClass, TUint aMajDeviceClass,
+ TUint8 aMinDeviceClass )=0;
+
+ /**
+ * Informs that inquiry finished
+ *
+ * @param aErr error value. If KErrEof - proper finish, otherwise error
+ * occured
+ */
+ virtual void HandleDeviceFindFailed( TInt aErr )=0;
+};
+
+/**
+ * @brief Class asynchronously finds devices equipped with bluetooth
+ */
+class CHsRCDeviceDiscoverer : public CActive
+{
+public:
+ /**
+ * Two-phase constructor
+ * @param aDeviceObserver inquiry observer
+ * @param aSServ session of application
+ *
+ * @return instance of class
+ */
+ static CHsRCDeviceDiscoverer
+ * NewL( MHsRCDeviceDiscovererObserver *aDeviceObserver,
+ RSocketServ &aSServ );
+
+ /**
+ * Two-phase constructor
+ * @param aDeviceObserver inquiry observer
+ * @param aSServ session of application
+ *
+ * @return instance of class
+ */
+ static CHsRCDeviceDiscoverer
+ * NewLC( MHsRCDeviceDiscovererObserver *aDeviceObserver,
+ RSocketServ &aSServ );
+ /**
+ * Destructor
+ */
+ ~CHsRCDeviceDiscoverer();
+
+public:
+
+ /**
+ * Async method for searching devices
+ */
+ void DeviceSearchL();
+
+ /**
+ * Gets device's bluetooth address
+ *
+ * @return TBTDevAddr address of device
+ */
+ TBTDevAddr GetBTDevAddress();
+
+private:
+ /**
+ * Constructor for performing 1st stage construction
+ *
+ * @param aDeviceObserver pointer to inquiry observer
+ * @param aSServ subsession of socket server
+ */
+ CHsRCDeviceDiscoverer( MHsRCDeviceDiscovererObserver* aDeviceObserver,
+ RSocketServ& aSServ );
+
+ /**
+ * Constructor for performing 2nd stage construction
+ */
+ void ConstructL();
+
+private:
+
+ /**
+ * Initializes and connects host resolver
+ */
+ void ConnectHostResolverL();
+
+private:
+ /**
+ * CActive method
+ */
+ void RunL();
+
+ /**
+ * CActive method
+ */
+ void DoCancel();
+
+private:
+
+ /** Session of socket server */
+ RSocketServ& iSServ;
+
+ /** Provides methods to find device*/
+ RHostResolver iHRes;
+
+ /** Bluetooth device's name */
+ TBuf <KMaxBluetoothNameLen> iName;
+
+ /** Socket address used for inquiry */
+ TInquirySockAddr iSockAddr;
+
+ /** Bluetooth address */
+ TBTDevAddr iDevAddr;
+
+ /** Wrapps bluetooth device"*/
+ TNameEntry iEntry;
+
+ /** Denotes if searching is in progress*/
+ TBool iSearching;
+
+ /**
+ * Pointer to observer
+ * not owned
+ */
+ MHsRCDeviceDiscovererObserver* iDeviceObserver;
+};
+
+/**
+ * @brief Provides handling of bluetooth. Manages Headset Simulator searching
+ * and connection
+ */
+class CHsRCBTManager : public CBase, public MBTEngSettingsObserver,
+ public MBTEngConnObserver, public MBTEngSdpResultReceiver,
+ public MHsRCDeviceDiscovererObserver
+{
+
+public:
+
+ /**
+ * Two-phased constructor
+ *
+ * @param aSServ socket server subsession
+ * @param aBTManagerObserver pointer to observer
+ *
+ * @return instance of class
+ */
+ static CHsRCBTManager* NewL( RSocketServ& aSServ,
+ MHsRCBTManagerObserver* aBTManagerObserver );
+
+ /**
+ * Two-phased constructor.
+ *
+ * @param aSServ socket server subsession
+ * @param aBTManagerObserver pointer to observer
+ *
+ * @return instance of class
+ */
+ static CHsRCBTManager* NewLC( RSocketServ& aSServ,
+ MHsRCBTManagerObserver* aBTManagerObserver );
+
+ /**
+ * Destructor
+ */
+ ~CHsRCBTManager();
+
+public:
+
+ /**
+ * Connects with Headset Simulator by bluetooth address
+ *
+ * @pre SetService() should be called
+ *
+ * @param aDevAddr bluetooth address
+ */
+ void ConnectDevAddrL( const TBTDevAddr& aDevAddr );
+
+ /**
+ * Connects with Headset Simulator by bluetooth name
+ *
+ * @pre SetService() should be called
+ *
+ * @param aDeviceName bluetooth name
+ */
+ void ConnectDevNameL( const TDesC& aDeviceName );
+
+ /**
+ * Cancels ongoing attempt to connect with Headset Simulator
+ */
+ void CancelConnecting();
+
+ /**
+ * Sets Headset Simulator's remote control service
+ */
+ void SetService( const TUUID& aService );
+
+private:
+
+ /**
+ * Constructor for performing 1st stage construction
+ */
+ CHsRCBTManager( RSocketServ& aSServ,
+ MHsRCBTManagerObserver* aBTManagerObserver );
+
+ /**
+ * Constructor for performing 2nd stage construction
+ */
+ void ConstructL();
+
+private:
+ /** Methods derived from MBTEngSettingsObserver */
+
+ void PowerStateChanged( TBTPowerStateValue aState );
+
+ void VisibilityModeChanged( TBTVisibilityMode aState );
+
+private:
+ /** Methods derived from MBTEngConnObserver */
+
+ void ConnectComplete( TBTDevAddr& aAddr, TInt aErr,
+ RBTDevAddrArray* aConflicts = NULL );
+
+ void DisconnectComplete( TBTDevAddr& aAddr, TInt aErr );
+
+ void PairingComplete( TBTDevAddr& aAddr, TInt aErr );
+
+private:
+ /** Methods derived from MBTEngSdpResultReceiver */
+
+ void ServiceSearchComplete( const RSdpRecHandleArray& aResult,
+ TUint aTotalRecordsCount, TInt aErr );
+
+ void AttributeSearchComplete( TSdpServRecordHandle aHandle,
+ const RSdpResultArray& aAttr, TInt aErr );
+
+ void ServiceAttributeSearchComplete( TSdpServRecordHandle aHandle,
+ const RSdpResultArray& aAttr, TInt aErr );
+
+ void DeviceSearchComplete( CBTDevice* aDevice, TInt aErr );
+
+private:
+ /** Methods derived from MDeviceDiscovererObserver */
+
+ void HandleDeviceFindSuccessL( TDesC8 & address, TDesC8 & name,
+ TUint16 aMajServClass, TUint aMajDeviceClass,
+ TUint8 aMinDeviceClass );
+
+ void HandleDeviceFindFailed( TInt aErr );
+
+private:
+
+ /**
+ * Finds port on Audio Gateway
+ *
+ * @return error value. KErrNotFound in case of failure, otherwise KErrNone
+ */
+
+ TInt FindPort( const RSdpResultArray& aAttr, TInt& aPort );
+
+ /**
+ * Restores local name and power state to initial values
+ */
+ void RestoreInitialSettingsL();
+
+ /**
+ * Sets local bluetooth name
+ * @param aBTName new local name
+ */
+ void SetBTNameL( const TDesC& aBTName );
+
+ /*
+ * Turns on bluetooth with specified (optional) name
+ *
+ * @param aName bluetooth name
+ */
+ void TurnOnBTL( const TDesC& aName = KHsRCDefaultName );
+
+ /*
+ * Turns off bluetooth on device
+ */
+ void TurnOffBTL();
+
+ /*
+ * Finds service on a specified device
+ *
+ * @param aDevAddr bluetooth address
+ * @param aService service UUID
+ */
+ void FindServiceL( const TBTDevAddr& aDevAddr, const TUUID& aService );
+
+private:
+ /** Searching type enum */
+ enum THsRCSearchType
+ {
+ /** Search device by bluetooth name*/
+ EDevName,
+ /** Search device by bluetooth address*/
+ EDevAddr
+ };
+
+ /** Searching type */
+ THsRCSearchType iSearchType;
+
+ /** Service */
+ TUUID iService;
+
+ /** Needed for restoring bluetooth name */
+ RBuf iBTInitialName;
+
+ /** Needed for restoring bluetooth power */
+ TBTPowerStateValue iBTInitialPowerState;
+
+ /** Needed for restoring bluetooth visibility */
+ TBTVisibilityMode iBTInitialVisibilityMode;
+
+ /** Bluetooth name */
+ RBuf iBTName;
+
+ /** Bluetooth address */
+ TBTDevAddr iDevAddr;
+
+ /** Bluetooth address to be searched */
+ RBuf iDesiredMAC;
+
+ /** Bluetooth name to be searched */
+ RBuf iDesiredName;
+
+ /** Session of socket server */
+ RSocketServ& iSServ;
+
+ /** Pointer to bluetooth settings (power state, local name). Owned */
+ CBTEngSettings* iBTSettings;
+
+ /** Pointer to bluetooth connection manager. Owned */
+ CBTEngConnMan* iBTConnection;
+
+ /** Pointer to class responsible SDP queries */
+ CBTEngDiscovery* iBTDiscovery;
+
+ /** Pointer to class responsible for device discovery */
+ CHsRCDeviceDiscoverer* iDiscoverer;
+
+ /** Pointer to observer */
+ MHsRCBTManagerObserver* iBTManagerObserver;
+
+ /** Denotes if service is set */
+ TBool iServiceSet;
+};
+
+#endif //HSRCBTTOOLS_H