Changes to the phonetsy name from commdb and the make voice dialing not require AT+WIND indications
// Copyright (c) 1997-2009 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:// Declares the CSmsCommDBEvent class.// ///** @file @internalAll*/#if !defined (SMSPCDB_H__)#define SMSPCDB_H__#include <e32base.h>#include <e32property.h>#include "smspcomm.h"#include "smsstacklog.h"#include "smsuact.h"class TSmsSettings;/** * Requests notification of changes in CommDB and in turn notifies an observer, * the CSmsProtocol object. * * Currently this class only waits on changes in the current SMS bearer setting, * though it should be extendable for changes in other CommDB settings in the future. * * The class is a simple active object derived state machine with two states * defined by CSmsCommDBEvent::TSmsCommDBEventState. * * @internalComponent */class CSmspCommDbEvent : public CSmsuActiveBase {protected: ~CSmspCommDbEvent(); virtual void ConstructL(); virtual void NotifyOnEvent(); CSmspCommDbEvent(const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, TInt aPriority); void Complete(TInt aError);protected: // Private members RProperty iProperty; // Property describing the event we require notification of const TSmsSettings& iSmsSettings; RMobileSmsMessaging& iSmsMessaging; };/** * Queries CommDB for the current sms bearer and attempts to change the * bearer of the phone. * * This class works with the classes CSmsCommDBEvent and CSmsProtocol to change * the sms bearer when the corresponding setting changes in CommDB. * * The class is a simple active object derived state machine with these states * defined by CSmspSetBearer::TSmsSetBearerState. * * @internalComponent */class CSmspSetBearer : public CSmspCommDbEvent {public: static CSmspSetBearer* NewL(const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, TInt aPriority); ~CSmspSetBearer(); void Start(); void NotifyBearerSet(TRequestStatus& aStatus);protected: virtual void ConstructL();private: void DoRunL(); void DoCancel();private: CSmspSetBearer(const TSmsSettings& aSmsSettings,RMobileSmsMessaging& aSmsMessaging, TInt aPriority); void SetSmsBearer(); void GetSmsBearerL(RMobileSmsMessaging::TMobileSmsBearer& aBearer); void NotifyOnEvent();private: enum TSmsSetBearerState { ESmsSetBearerStateInit, //< Intial State ESmsSetBearerNotifyOnEvent, //< Wait for notification from property when Bearer changes ESmsSetBearerStateSettingBearer //< Setting the bearer on the current GPRS session };private: TSmsSetBearerState iState; //< The current state of the state machine RMobileSmsMessaging::TMobileSmsBearer iBearer; //< The currently used SMS bearer TBool iBearerSet; //< Boolean tell is bearer set RMobileSmsMessaging::TMobileSmsBearer iPreviousBearer; //< The previously used SMS bearer };/** * @internalComponent */const TInt KSmspReceiveModeCommDbRetryLimit = 5;const TInt KSmspReceiveModeCommDbRetryDelay = 1000000;/** * CSmspReceiveMode reads the CommDB global setting SMS_RECEIVE_MODE, compares this to the TSY's SMS capabilities then sets the Receive Mode on the TSY. * After setting the Receive Mode, CSmspReceiveMode waits for notification from CommDB for changes in global setting SMS_RECEIVE_MODE. * When the global setting has changed, CSmspReceiveMode sets the Receive Mode on the TSY again. * @internalComponent */class CSmspReceiveMode : public CSmspCommDbEvent {public: static CSmspReceiveMode* NewL(const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, const RMobileSmsMessaging::TMobileSmsCapsV1& aSmsCaps, TInt aPriority); virtual ~CSmspReceiveMode(); void Start(TRequestStatus& aStatus);protected: virtual void ConstructL();private: CSmspReceiveMode(const TSmsSettings& aSmsSettings, RMobileSmsMessaging& aSmsMessaging, const RMobileSmsMessaging::TMobileSmsCapsV1& aSmsCaps, TInt aPriority); void DoRunL(); void DoCancel(); RMobileSmsMessaging::TMobileSmsReceiveMode SelectReceiveMode(RMobileSmsMessaging::TMobileSmsReceiveMode aPreferredMode) const; RMobileSmsMessaging::TMobileSmsReceiveMode SelectReceiveMode() const; void GetCommDbReceiveModeL(RMobileSmsMessaging::TMobileSmsReceiveMode& aReceiveMode); void NotifyOnEvent(); void SetReceiveMode(RMobileSmsMessaging::TMobileSmsReceiveMode aReceiveMode);private: enum TSmspReceiveMode { ESmspReceiveModeInit, //< Initial state ESmspReceiveModeRetryCommDb, //< Transitory state while waiting for CommDb access ESmspReceiveModeNotifyOnEvent, //< Wait for notification from property when Bearer changes ESmspReceiveModeSet //< Setting the Receive Mode on the TSY } iState; // When notified that the CommDB has been changed we must re-read SMS_RECEIVE_MODE. Possibly this can transitorily // fail due to power-up race condition, etc. Hence this suppoer for retrying briefly TInt iCommDbRetryCount; //< Count of retry attempts before giving up RTimer iCommDbRetryTimer; RMobileSmsMessaging::TMobileSmsReceiveMode iSmsReceiveModeLastSet; //< Used in the event that CommDb can't be read (rather than simply applying default) const RMobileSmsMessaging::TMobileSmsCapsV1& iSmsCaps; //< TSY SMS Capabilities };#endif // !defined SMSPCDB_H__