--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/smsprotocols/smsstack/smsprot/Inc/smspcdb.h Tue Feb 02 01:41:59 2010 +0200
@@ -0,0 +1,166 @@
+// 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__