diff -r 000000000000 -r f63038272f30 bluetoothengine/bteng/inc/btengserver.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/bteng/inc/btengserver.h Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,565 @@ +/* +* Copyright (c) 2006 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: BTEng server header definition +* +*/ + + +#ifndef BTENGSERVER_H +#define BTENGSERVER_H + +#include +#ifndef __WINS__ +#include +#endif //__WINS__ +#include +#include +#include +#include "btengdomaincrkeys.h" +#include "btengconstants.h" + +class CBTEngSrvState; +class CBTEngSrvPluginMgr; +class CBTEngPlugin; +class CBTEngSrvBBConnMgr; +class CBTEngSrvKeyWatcher; +class CBTEngSdpDbHandler; +class CBTEngPairMan; +class CPolicyServer; +class TEComResolverParams; +class CImplementationInformation; +class CDeltaTimer; + +/** + * Main function in which the server is running. + * + * @since S60 v3.2 + */ +static void RunServerL(); + +/** + * Utility to panic the client. + * + * @since S60 v3.2 + * @param aMessage Client message + * @param aPanic Panic reason code. + */ +void PanicClient( const RMessage2& aMessage, TInt aPanic ); + +/** + * Utility to panic the server. + * + * @since S60 v3.2 + * @param aPanic Panic reason code. + */ +void PanicServer( TInt aPanic ); + +/** Panic category */ +_LIT( KBTEngPanic, "BTEng panic" ); + +/** Panic codes */ +enum TBTEngServerPanic + { + EBTEngPanicMemoryLeak = 10000, + EBTEngPanicArgumentIsNull, + EBTEngPanicMemberVarIsNull, + EBTEngPanicCorrupt, + EBTEngPanicCorruptSettings + }; + + +/** + * Class CBTEngServer + * + * Core server class of BTEng. + * + * @lib bteng.lib + * @since S60 S60 v3.2 + */ +NONSHARABLE_CLASS( CBTEngServer ) : public CPolicyServer + { + + friend class CBTEngSrvSession; + friend class CBTEngSrvState; + friend class CBTEngSrvPluginMgr; + friend class CBTEngSrvKeyWatcher; + friend class CBTEngPairMan; + +public: + + static CBTEngServer* NewLC(); + + virtual ~CBTEngServer(); + + /** + * ?description + * + * @since S60 v3.2 + * @param aState The new power state. + * @param aTemp Turn BT off after use (ETrue) or not (EFalse). + */ + void SetPowerStateL( TBTPowerStateValue aState, TBool aTemporary ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void SetVisibilityModeL( TBTVisibilityMode aMode, TInt aTime ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void UpdateVisibilityModeL( TInt aStackScanMode ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void DisconnectAllL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void SetDutMode( TInt aDutMode ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void ScanModeTimerCompletedL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void DisconnectAllCompleted(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void DispatchPluginMessageL( const RMessage2& aMessage ); + + /** + * Increment the session count. + * + * @since S60 v3.2 + */ + void AddSession(); + + /** + * Decrement the session count. + * + * @since S60 v3.2 + * @param aAutoOff Indicator if this session had requested BT temporary on. + */ + void RemoveSession( TBool aAutoOff ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void SetUiIndicatorsL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void SetIndicatorStateL( const TInt aIndicator, const TInt aState ); + + /** + * Check whether BT should be turned off automatically. + * + * @since S60 v5.0 + */ + void CheckAutoPowerOffL(); + + /** + * Utility to get HW power state. + * + * @since S60 v5.1 + * @param aState On return, this will contain the current HW power state. + * @return KErrNone if successful, otherwise one of the system-wide error codes. + */ + TInt GetHwPowerState( TBTPowerStateValue& aState ); + + /** + * queue a timer if Simple Pairing debug mode has been enabled. + * + * @since S60 v3.2 + * @param aDebugMode State of Simple Pairing debug mode. + */ + void CheckSspDebugModeL( TBool aDebugMode ); + + /** + * Gets the access to pairing manager. Ownership is not transferred. + * @return the pairing manager + */ + CBTEngPairMan& PairManager(); + + /** + * Be informed when registry remote device table is changed + */ + void RemoteRegistryChangeDetected(); + + /** + * gets the reference of socket server session + */ + RSocketServ& SocketServ(); + + /** + * gets the reference of registry session. + */ + RBTRegServ& BTRegServ(); + + /** + * Returns the service (limited to services managed in bteng scope) + * level connection status of the specified device. + * + * @param aAddr the address of the device + * @return one of TBTEngConnectionStatus enums + */ + TBTEngConnectionStatus IsDeviceConnected( const TBTDevAddr& aAddr ); + +// from base class CPolicyServer + + /** + * From CPolicyServer. + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + virtual CSession2* NewSessionL( const TVersion& aVersion, + const RMessage2& aMessage ) const; + +// from base class MBTPowerManagerObserver + + BluetoothFeatures::TEnterpriseEnablementMode EnterpriseEnablementMode() const; + +private: + + CBTEngServer(); + + void ConstructL(); + + /** + * Checks if power is off and no session are connected, and + * starts a shutdown timer if so. + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void CheckIdle(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + TInt SetPowerState( TBool aState ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + TInt SetLocalNameL(); + + TInt GetLocalNameFromRegistryL(TDes& aName); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void SetClassOfDeviceL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void InitBTStackL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void StopBTStackL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void UpdateCenRepPowerKeyL( TBTPowerStateValue aValue ); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void LoadBTPowerManagerL(); + + /** + * ?description + * + * @since S60 v3.2 + * @param ?arg1 ?description + */ + void ManageDIServiceL( TBool aState ); + + /** + * Reads the product-specific IDs for this phone from central repository. + * These values are used in the BT Device Information profile. + * + * @since S60 v3.2 + * @param aVendorId On return, holds the vendor ID for this phone. + * @param aProductId On return, holds the product ID for this phone. + */ + void GetProductIdsL( TInt& aVendorId, TInt& aProductId ); + + /** + * Checks if a client requests temporary power on/off, and keeps track + * of the number of clients requesting that. + * + * @since S60 v5.0 + * @param aCurrentState On return, will contain the current power state. + * @param aNewState The requested power state. + * @param aTemporary Indicates if this is about a tempororary state change. + */ + void CheckTemporaryPowerStateL( TBTPowerStateValue& aCurrentState, + TBTPowerStateValue aNewState, + TBool aTemporary ); + + /** + * Callback function for expiry of CDeltaTimer timer of temporary + * visibility mode. + * + * @since S60 v3.2 + * @param aPtr Pointer to ourselves. + * @return Result + */ + static TInt ScanModeTimerCallBack( TAny* aPtr ); + + /** + * Callback function for completion of disconnecting all + * Bluetoooth Baseband links. + * + * @since S60 v3.2 + * @param aPtr Pointer to ourselves. + * @return Result + */ + static TInt DisconnectAllCallBack( TAny* aPtr ); + + /** + * Callback function for expiriy CDeltaTimer timer of server idle timeout. + * + * @since S60 v3.2 + * @param aPtr Pointer to ourselves. + * @return Result + */ + static TInt IdleTimerCallBack( TAny* aPtr ); + + /** + * Callback function for expiriy CDeltaTimer timer of + * Simple Pairing Debug Mode. + * + * @since S60 v3.2 + * @param aPtr Pointer to ourselves. + * @return Result + */ + static TInt DebugModeTimerCallBack( TAny* aPtr ); + + /** + * Callback function for turning BT off automatically after all + * connections are gone. + * + * @since S60 v5.0 + * @param aPtr Pointer to ourselves. + * @return Result + */ + static TInt AutoPowerOffCallBack( TAny* aPtr ); + +private: // data + + /** + * Counter of the number of open sessions, which is used to + * stop the server when no session exists and Bluetooth is off. + */ + TInt iSessionCount; + + /** + * Handle to BT Power Manager library; this handle must exist + * for the lifetime of the loaded library. + */ + TUint32 iDiSdpRecHandle; + + /** + * Flag indicating if BT is going to be switched off automatically. + */ + TBool iAutoSwitchOff; + + /** + * Number of clients that are using BT temporarily. + * Note that this is equal or less than the active number of links. + */ + TInt iAutoOffClients; + + /** + * Flag indicating hidden mode has been set for temporary power on. + */ + TBool iRestoreVisibility; + + /** + * To decide wether DUT mode should be enabled in power mode + * change callback. + */ + TBool iEnableDutMode; + + /** + * Remember which timer has been queued. (CDeltaTimer does not + * provide this information). + */ + TUint32 iTimerQueued; + + /** + * Callback for expiry of temporary visibility mode timer. + */ + TDeltaTimerEntry iScanModeCallBack; + + /** + * Callback for expiry of temporary power on mode timer. + */ + TDeltaTimerEntry iPowerOffCallBack; + + /** + * Callback for expiry of idle timer. + */ + TDeltaTimerEntry iIdleCallBack; + /** + * Callback for expiry of Simple Pairing debug mode. + */ + TDeltaTimerEntry iDebugModeCallBack; + + /** + * Handle to BT Power Manager library; this handle must exist + * for the lifetime of the loaded library. + */ + RLibrary iPowerMgrLib; +#ifndef __WINS__ + /** + * Handle for DUT mode API + */ + RBluetoothDutMode iDutMode; +#endif //__WINS__ + + /** + * Pairing manager. + */ + CBTEngPairMan* iPairMan; + + /** + * Socket Server instance for this and other classes to access Bluetooth socket APIs. + */ + RSocketServ iSocketServ; + + + /** + * Registry Server instance for bteng to access Bluetooth registry APIs. + */ + RBTRegServ iBTRegServ; + + /** + * BT Power Manager. + * Own. + */ + CBTEngSrvState* iServerState; + + /** + * ECOM plugin manager. + * Own. + */ + CBTEngSrvPluginMgr* iPluginMgr; + + /** + * Bluetooth Baseband connection manager. + * Own. + */ + CBTEngSrvBBConnMgr* iBBConnMgr; + + /** + * Watcher for the relevant CenRep and PubSub keys. + * Own. + */ + CBTEngSrvKeyWatcher* iWatcher; + + /** + * BT Power Manager (HCIv2 version). + */ + RBTPowerControl iPowerMgr; + +#ifdef __WINS__ + /** + * Current BT power state (power manager is not used in emulator). + */ + TBTPowerState iPowerState; +#endif //__WINS__ + + /** + * SDP database handler. + * Own. + */ + CBTEngSdpDbHandler* iSdpDbHandler; + + /** + * Timer for setting various timeouts. + * Own. + */ + CDeltaTimer* iTimer; + + BluetoothFeatures::TEnterpriseEnablementMode iEnterpriseEnablementMode; + }; + + +#endif // BTENGSERVER