diff -r 000000000000 -r f63038272f30 bluetoothengine/btsap/src/BTSapState.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btsap/src/BTSapState.cpp Mon Jan 18 20:28:57 2010 +0200 @@ -0,0 +1,178 @@ +/* +* Copyright (c) 2004-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: +* This class is a base state class for all BTSap states +* +* +*/ + + + +// INCLUDE FILES +#include +#include +#include "BTSapDomainPSKeys.h" + +#include +#include "BTSapServerState.h" +#include "debug.h" + +CBTSapServerState::TState::TState(CBTSapServerState& aServerState) +: iSimStatus(0), + iServerState(aServerState), + iResponseMessage(aServerState.BTSapResponseMessage()), + iStatus(NULL) + { + } + +TInt CBTSapServerState::TState::AcceptSapConnection() + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] TState: AcceptSapConnection: Not Ready#"))); + return KErrNotReady; + } + +TInt CBTSapServerState::TState::RejectSapConnection(TBTSapRejectReason /*aReason*/) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] TState: RejectSapConnection: Not Ready#"))); + return KErrNotReady; + } + +TInt CBTSapServerState::TState::DisconnectSapConnection(TBTSapDisconnectType /*aType*/) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] TState: DisconnectSapConnection: Not Ready#"))); + return KErrNotReady; + } + +void CBTSapServerState::TState::SimCardStatusChanged(TCardStatus /*aCardStatus*/) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] TState: SimCardStatusChanged: Not Ready#"))); + } + +TInt CBTSapServerState::TState::ChangeState(TBTSapServerState& aNextState) + { + TInt retVal = KErrNone; + + if (aNextState != EStatePowerOff && + aNextState != EStateReset && + aNextState != EStateDisconnect) + { + aNextState = EStateIdle; + retVal = KErrNotSupported; + } + + return retVal; + } + +void CBTSapServerState::TState::NotifySapState(TSapConnectionState aState) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap] NotifySapState: %d"), aState)); + + TBool simPresent = IsSimPresent(); + + switch(aState) + { + case ESapNotConnected: + { + // If the next state is ESapNotConnected, we need to verify the previous state + TInt previousState; + RProperty::Get(KPSUidBluetoothSapConnectionState, KBTSapConnectionState, previousState); + + // Only show NotConnected if the previous state was connecting (ie. connection failed) + if(previousState == ESapConnecting) + { + if( simPresent ) + { + StartBTNotifier(EBTSapFailed); + } + else + { + // Notify the user of the specific reason that connection + // could not be completed: there is no SIM present + StartBTNotifier(EBTSapNoSim); + } + } + break; + } + + case ESapConnecting: + { + if( simPresent ) + { + // Don't show the note if no SIM is present + StartBTNotifier(EBTEnterSap); + } + break; + } + case ESapConnected: + StartBTNotifier(EBTSapOk); + break; + + default: + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] Invalid state!!! %d"), aState)); + break; + } + + RProperty::Set(KPSUidBluetoothSapConnectionState, KBTSapConnectionState, aState); + } + +void CBTSapServerState::TState::StartBTNotifier(TInt note) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap] StartBTNotifier: %d"), note)); + + RNotifier notifier; + TInt err = notifier.Connect(); + if(err != KErrNone) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] NotifySapState: Couldn't connect to notifier: %d"), err)); + } + else + { + TBTGenericInfoNotiferParamsPckg type; + type().iMessageType = (TBTGenericInfoNoteType) note; + + err = notifier.StartNotifier(KBTGenericInfoNotifierUid, type); + + if (err != KErrNone) + { + BTSAP_TRACE_OPT(KBTSAP_TRACE_ERROR, BTSapPrintTrace(_L("[BTSap] NotifySapState: Couldn't start notifier: err = %d"), err)); + } + + notifier.Close(); + } + } + +TBool CBTSapServerState::TState::IsSimPresent() + { +#ifdef __WINS__ + + BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap] CBTSapServerState::TStateConnect::IsSimPresent ON THE WINS SIDE"))); + return ETrue; + +#else //__WINS__ + + BTSAP_TRACE_OPT(KBTSAP_TRACE_FUNCTIONS, BTSapPrintTrace(_L("[BTSap] CBTSapServerState::TStateConnect::IsSimPresent, SimStatus: %d"), iSimStatus)); + + TInt err = KErrNone; + if( iSimStatus == 0 ) + { + err = RProperty::Get(KPSUidStartup, KPSSimStatus, iSimStatus); + } + TBool retVal = !(err || iSimStatus == ESimNotPresent || iSimStatus == ESimNotSupported); + + BTSAP_TRACE_OPT(KBTSAP_TRACE_INFO, BTSapPrintTrace(_L("[BTSap] TStateConnect::IsSimPresent: err = %d, retVal = %d"), err, retVal)); + return retVal; + +#endif //__WINS__ + } +// End of File