diff -r 000000000000 -r 164170e6151a wim/WimServer/src/WimBTSapObserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wim/WimServer/src/WimBTSapObserver.cpp Tue Jan 26 15:20:08 2010 +0200 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 2005 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: Observes the state of Bluetooth Sap. When the state is +* changed into connected, connection to smart card is closed and +* when the state is changed into not connected, initialize +* connection to smart card back. +* +*/ + + + +// INCLUDE FILES +#include "WimBTSapObserver.h" +#include "WimServer.h" +#include "WimSession.h" +#include "WimTrace.h" + +#if defined BT_SAP_TEST_BY_CHARGER +#include +#else +//#include // Property values +#include +#endif // BT_SAP_TEST_BY_CHARGER + + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::CWimBTSapObserver +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CWimBTSapObserver::CWimBTSapObserver() + : CActive( EPriorityNormal ) + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::CWimBTSapObserver|Begin")); + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CWimBTSapObserver::ConstructL() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::ConstructL|Begin")); + iWimSvr = CWimServer::Server(); + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWimBTSapObserver* CWimBTSapObserver::NewL() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::NewL|Begin")); + CWimBTSapObserver* self = new( ELeave ) CWimBTSapObserver (); + + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + return self; + } + + +// Destructor +CWimBTSapObserver::~CWimBTSapObserver() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::~CWimBTSapObserver|Begin")); + Cancel(); + iProperty.Close(); + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::Start +// Start listening publish and subscribe events +// ----------------------------------------------------------------------------- +// +void CWimBTSapObserver::Start() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::Start|Begin")); + if ( !IsActive() ) // If already active, don't activate + { + StartListening(); //Start listening + } + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::StartListening +// Start listening card status from publish and subscribe +// ----------------------------------------------------------------------------- +// +void CWimBTSapObserver::StartListening() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::StartListening|Begin")); + iStatus = KRequestPending; +#if defined BT_SAP_TEST_BY_CHARGER + TInt err = iProperty.Attach( KUidSystemCategory, + KPSUidChargerStatusValue ); + +#else + TInt err = iProperty.Attach( KPSUidBluetoothSapConnectionState, + KBTSapConnectionState ); +#endif // BT_SAP_TEST_BY_CHARGER + if ( err == KErrNone ) + { + iProperty.Subscribe( iStatus ); + SetActive(); + } + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::RunL +// Got event from publish and subscribe +// ----------------------------------------------------------------------------- +// +void CWimBTSapObserver::RunL() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::RunL|Begin")); + //Notify on bluetooth event + TInt btState; + iProperty.Get( btState ); + switch ( btState ) + { +#if defined BT_SAP_TEST_BY_CHARGER + case EPSChargerStatusUninitialized: // Flow through + case EPSChargerDisconnected: // Flow through + case EPSChargerNotCharging: // Charger not charging, no actions +#else + case EBTSapNotConnected: // Flow through + case EBTSapConnecting: // BT Sap not connected, no actions +#endif // BT_SAP_TEST_BY_CHARGER + { + StartListening(); + break; + } +#if defined BT_SAP_TEST_BY_CHARGER + case EPSChargerConnected: +#else + case EBTSapConnected: +#endif // BT_SAP_TEST_BY_CHARGER + { + if ( CWimServer::iWimInitialized ) + { + // Wim initialized, can close WIMI immediately. + // NOTE: Is it ok to run lengthy operations here? + RArray sessions; + TRAPD( err, iWimSvr->GetSessionsL( sessions ) ); + + if ( !err ) // Got sessions correctly + { + // Loop through all sessions and notify all clients that are + // requesting the notification + for ( TInt i( 0 ); i < sessions.Count(); i++ ) + { + sessions[i]->NotifyComplete(); + } + sessions.Reset(); + // Close WIMI + WIMI_CloseDownReq(); + _WIMTRACE(_L("WIM | CWimSatRefreshObserver::Refresh | WIMI closed.")); + } + } + else + { + _WIMTRACE(_L("WIM | CWimSatRefreshObserver::Refresh | WIMI already closed.")); + } + } + } + _WIMTRACE(_L("WIM|CWimBTSapObserver::RunL|End")); + } + +// ----------------------------------------------------------------------------- +// CWimBTSapObserver::DoCancel +// Cancel asynchronous request +// ----------------------------------------------------------------------------- +// +void CWimBTSapObserver::DoCancel() + { + _WIMTRACE(_L("WIM|CWimBTSapObserver::DoCancel|Begin")); + iProperty.Cancel(); + _WIMTRACE(_L("WIM|CWimBTSapObserver::DoCancel|End")); + } + +// End of File