--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/adaptationlayer/tsy/simatktsy_dll/inc/sattimer.h Fri Nov 06 17:28:23 2009 +0000
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+*
+*/
+
+
+
+#ifndef CSATTIMER_H
+#define CSATTIMER_H
+
+
+// INCLUDES
+#include <e32base.h> // base class cbase
+
+
+// CONSTANTS
+const TInt KEnvelopeMaxSize = 0xFF;
+
+
+// FORWARD DECLARATIONS
+class CSatMessHandler;
+class CTsySatMessaging;
+
+
+// CLASS DECLARATION
+
+/**
+* Sat Timer class.
+* This class handles timers in SAT. Class utilizes CPeriodic timer
+* to provide desired functionality.
+*
+* @lib SIMATKTSY.LIB
+* @since Series 60 Series60_2.6
+*/
+class CSatTimer : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @since NCP 5.0
+ * @param aSatMessHandler pointer to satmessagehandler class
+ * @param aSatMessaging pointer to satmessaging class
+ */
+ static CSatTimer* NewL( CSatMessHandler* aSatMessHandler,
+ CTsySatMessaging* aSatMessaging );
+
+ /**
+ * Destructor.
+ * @since NCP 5.0
+ */
+ virtual ~CSatTimer();
+
+
+ private: // Constructors
+
+ /**
+ * C++ default constructor.
+ * @since NCP 5.0
+ * @param aSatMessHandler pointer to satmessagehandler class
+ * @param aSatMessaging pointer to satmessaging class
+ */
+ CSatTimer( CSatMessHandler* aSatMessHandler,
+ CTsySatMessaging* aSatMessaging );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @since NCP 5.0
+ */
+ void ConstructL();
+
+
+ public: // New functions
+
+ /**
+ * Starts the timer with the provided id and duration.
+ * If there is already timer with same id, older is replaced by the
+ * new one
+ * @since Series 60 Series60_2.6
+ * @param aTimerId ID of timer
+ * @param aTimerValue duration of timer in seconds
+ * @return KErrNone or error code
+ */
+ TInt StartTimer( TInt aTimerId, TUint32 aTimerValue );
+
+
+ /**
+ * Deletes timer from the table
+ * @since Series 60 Series60_2.6
+ * @param TInt aTimerId: timer identifier
+ * @return TInt: KErrNone or KErrNotFound
+ */
+ TInt DeleteTimerById( TInt aTimerId );
+
+ /**
+ * Gets current value of timer by timer id
+ * @since Series 60 Series60_2.6
+ * @param TInt aTimerId: timer identifier
+ * @return TUint32: Current timer value
+ */
+ TUint32 GetCurrentValueOfTimerById( TInt aTimerId );
+
+ /**
+ * Sets status for ProactiveCommandOnGoing flag
+ * @since Series 60 Series60_2.6
+ * @param TBool aStatus: status for proactiveCommand
+ * @return None
+ */
+ void SetProactiveCommandOnGoingStatus( TBool aStatus );
+
+ /**
+ * Clears the timer table. Used when SIM is reset.
+ * @since Series 60 Series60_3.0
+ * @param None
+ * @return None
+ */
+ void ClearTimerTable();
+
+ /**
+ * Stores the envelope for possible need of resending
+ * @since Series 60 Series60_3.0
+ * @param TUint8 aTId Transaction id of envelope about to be sent
+ * @param TDesC8& aEnvelope Envelope data
+ * @return KErrNone or KErrAlreadyExists if envelope with same
+ * transaction id exists.
+ */
+ TInt StoreEnvelope( const TUint8 aTId, const TDesC8& aEnvelope );
+
+ /**
+ * Activates the resending stored envelope. This will happen if the
+ * sending of envelope failed and error code returned from the SIM
+ * is supported by the CSatTimer.
+ * @since Series 60 Series60_3.0
+ * @param TUint8 aTId Transaction id of envelope to be activated
+ * @param TUint8 aCause Error code returned from SIM (SW1)
+ * @return KErrNone. KErrNotFound if envelope with given id is not
+ * found. KErrNotSupported if usupported cause was given.
+ */
+ TInt ActivateEnvelopeResend( const TUint8 aTId, const TUint8 aCause );
+
+ /**
+ * Removes the requested envelope from the envelope table.
+ * @since Series 60 Series60_3.0
+ * @param TUint8 aTId Transaction id of envelope about to be removed.
+ * @param TBool aRemoveTimer If the envelope typ is a timer expiration,
+ * It shall be removed also from internal timer table as a default.
+ * @return KErrNone or KErrNotFound if envelope with given id coun't be
+ * found.
+ */
+ TInt RemoveEnvelope( const TUint8 aTId, TBool aRemoveTimer = ETrue );
+
+
+ private:
+
+ /**
+ * Callback function that shall be called when timer is active.
+ * @since Series 60 Series60_3.0
+ * @param TAny* aSatTimer Reference to SatTimer
+ * @return None
+ */
+ static TInt Tick( TAny* aSatTimer );
+
+ /**
+ * Starts the timer if it's not already running.
+ * @since Series 60 Series60_3.0
+ * @param None
+ * @return None
+ */
+ void Start();
+
+ /**
+ * Stops the timer counting if there are no active timers
+ * or delayed envelopes
+ * @since Series 60 Series60_3.0
+ * @param None
+ * @return None
+ */
+ void Stop();
+
+ /**
+ * Restarts the deactivated Sat timer.
+ * @since Series 60 Series60_3.0
+ * @param aTimerId Id of timer to be restarted-
+ * @return KErrNone or KErrNotFound if timer with given id wasn't found
+ */
+ TInt RestartTimer( TInt aTimerId );
+
+ /**
+ * Returns true if the timer exists in the timer table.
+ * @since Series 60 Series60_3.0
+ * @param TInt aTimerId: timer identifier
+ * @return TBool : ETrue if the timer has an entry in the table
+ EFalse otherwise.
+ */
+ TBool CheckTimerTable( TInt aTimerId );
+
+ /**
+ * Locates the position of the requested envelope within envelope table.
+ * @since Series 60 Series60_3.0
+ * @param TUint8 aTId Transaction id of envelope about to be located.
+ * @return KErrNone or KErrNotFound if envelope with given id coun't be
+ * found.
+ */
+ TInt LocateEnvelope( const TUint8 aTId );
+
+
+ private: // Enumerations, data types
+
+ // Envelope types
+ enum TEnvelopeType
+ {
+ ETypeUnknown = 0xD0,
+ ESmsPpDownload = 0xD1,
+ ECellBroadcast = 0xD2,
+ EMenuSelection = 0xD3,
+ ECallControl = 0xD4,
+ EMoShortMessageControl = 0xD5,
+ EEventDownload = 0xD6,
+ ETimerExpiration = 0xD7
+ };
+
+ // Supported causes for envelope resending
+ enum TCause
+ {
+ ESimBusy = 0x93,
+ ERefManagement = 0x94
+ };
+
+ // Envelope struct
+ struct TSatEnvelope
+ {
+ TUint8 iTId; // Transaction id
+ TUint8 iType; // Type of envelope
+ TUint8 iDelay; // Delay in ticks
+ TBool iActive; // Is resending active
+ TBuf8<KEnvelopeMaxSize> iEnvelope;
+ };
+
+ private: // Private nested class
+
+ class TTimer
+ {
+ public: // Enumerations
+
+ enum TState
+ {
+ ETicking, // When timer is ticking
+ EBeingSent, // When sending envelope
+ EWaitingForTr // When sent during pcmd
+ };
+
+
+ public: // Methods
+ /**
+ * Non default Constructor
+ * @since Series 60 Series60_2.6
+ * @param TInt iTimerId
+ * @param TUint32 iStartTime
+ * @param TUint32 iTimeStamp
+ */
+ TTimer( TInt iTimerId,
+ TUint32 iStartTime,
+ TUint32 iTimeStamp );
+
+ /**
+ * returns iTimeStamp from a TTimer
+ * @since Series 60 Series60_3.0
+ * @return TUint32: value of the iTimeStamp attribute
+ */
+ TUint32 TimeStamp();
+
+ /**
+ * returns iTimerId from a TTimer
+ * @since Series 60 Series60_3.0
+ * @return TInt: value of the iTimerId attribute
+ */
+ TInt Id();
+
+ /**
+ * returns iStartTime from a TTimer
+ * @since Series 60 Series60_3.0
+ * @return TUint32: value of the iStartTime attribute
+ */
+ TUint32 StartTime();
+
+ /**
+ * Setter for timer's internal state.
+ * @param TBool aState Desired state
+ * @since NCP 5.1
+ * @return none
+ */
+ void SetState( TState aState );
+
+ /**
+ * Getter for timer's internal state.
+ * @since NCP 5.1
+ * @return State of a timer
+ */
+ TState State();
+
+ /**
+ * Returns ETrue if two entries are equal
+ * @since Series 60 Series60_3.0
+ * @param const TTimer& arg1
+ * @param const TTimer& arg2
+ * @return TBool: ETrue if two entries are equal
+ */
+ static TBool CompareEntries( const TTimer& arg1,
+ const TTimer& arg2 );
+
+ /**
+ * Returns order between two entries
+ * @since Series 60 Series60_3.0
+ * @param const CTableEntry& arg1
+ * @param const CTableEntry& arg2
+ * @return Tint: 0 if arg1 = arg2
+ 1 if arg1 > arg2
+ -1 else
+ */
+ static TInt OrderEntries( const TTimer& arg1,
+ const TTimer& arg2 );
+
+ private: // Data members
+
+ // Timer identifier
+ TInt iTimerId;
+
+ // Timer start time
+ TUint32 iStartTime;
+
+ // Time stamp
+ TUint32 iTimeStamp;
+
+ // Timer state machine
+ TState iState;
+
+ };
+
+ private: // Data members
+
+ // Pointer to CSatMesshandler instance
+ CSatMessHandler* iSatMessHandler;
+
+ // Pointer to CSatMessaging instance
+ CTsySatMessaging* iSatMessaging;
+
+ // Counts the number of second passed since the timer was started
+ TUint32 iSecondsPassed;
+
+ // Because timer ticks twice in a second, we need to keep track when
+ // to update iSecondsPassed-member
+ TBool iHalfSecondTick;
+
+ // Flag for proactiveCommandOnGoing status
+ // True if proactive command is ongoing
+ TBool iProactiveCommandOnGoing;
+
+ // Pointer to the CPeriodic type timer. (ETel)
+ CPeriodic* iTimer;
+
+ // Pointer to the timer entry array
+ RArray<TTimer>* iTimerTable;
+
+ // Pointer to the envelope entry array
+ RArray<TSatEnvelope>* iEnvelopeTable;
+
+ };
+
+#endif //CSATTIMER_H
+
+// End of File