--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonappservices/alarmserver/Server/Include/ASSrvAlarm.h Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,323 @@
+// Copyright (c) 1999-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:
+//
+
+#ifndef __ASSRVALARM_H__
+#define __ASSRVALARM_H__
+
+// System includes
+#include <e32base.h>
+
+// User includes
+#include <asshdalarm.h>
+#include <asshddefs.h>
+#include "ASSrvDefs.h"
+#include "ASSrvTimerObserver.h"
+
+// Constants
+const TASSrvAlarmSoundCycleNumber KUndefinedCycleIndex = -1;
+const TInt KAlarmServerCTimerFudgeTimeInSeconds = 2;
+const TInt KAlarmServerDefaultAlowableWindowInSeconds = 0;
+const TInt KAlarmServerStartupExpireWindowInSeconds = 59;
+
+// Enumerations
+
+// Classes referenced
+class CASSrvServerWideData;
+
+
+//
+// ----> TASSrvAlarm (header)
+//
+/**
+ * The server-side representation of an alarm - now based on a UTC alarm.
+ */
+class TASSrvAlarm : public TASShdAlarm, public MASSrvAlarmTimerObserver
+ {
+//
+public: // ENUMERATIONS
+//
+ /**
+ * Used to keep track of whether the alarm has been snoozed
+ * and which time to next use as the basis for alarm expiry
+ */
+ enum TTimeType
+ {
+ ETimeTypeNextDue = 0,
+ ETimeTypeOriginalExpiry
+ };
+
+ /**
+ * Internal flags used within the Alarm Server
+ */
+ enum TInternalServerFlags
+ {
+ /**
+ * The alarm server has a handle to a client's
+ * TRequestStatus (via an RMessage2) which it
+ * will complete when this alarm expires.
+ */
+ EInternalServerFlagsNotifyPending = 0,
+ /**
+ * This alarm sound playing has been paused
+ */
+ EASShdAlarmFlagsSoundHasBeenPaused
+ };
+
+ /**
+ * The state of this alarm with respect to sound
+ */
+ enum TSoundState
+ {
+ /**
+ * This alarm is not playing a sound
+ */
+ ESoundStatePlayingNothing = 0,
+
+ /**
+ * This alarm is playing a sound
+ */
+ ESoundStatePlayingSound
+ };
+
+//
+public: // STATIC CONSTRUCT / DESTRUCT
+//
+
+ TASSrvAlarm(CASSrvServerWideData& aData);
+
+//
+public: // OPERATORS
+//
+
+ TASSrvAlarm& operator=(const TASSrvAlarm& aAlarm);
+
+//
+public: // ACCESS - SETTERS
+//
+
+ TInt SetStatus(TAlarmStatus aStatus);
+
+ void SetState(TAlarmState aState);
+
+ void SetCharacteristicsL(TAlarmCharacteristicsFlags aFlags, TASSrvSessionId aSessionChangingFlags);
+
+#ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT
+ void SetWakeupAndNotifyQueueL(TBool aEnable);
+#endif
+
+#ifdef SYMBIAN_ALARM_REPEAT_EXTENSIONS
+ void SetAlarmDaysL(TUint8 aAlarmDays);
+#endif
+
+ void SetAlarmOrphaned();//set alarm orphaned when the owner session has been closed
+
+ void SetOriginatingSessionId(TASSrvSessionId aId);
+
+//
+public: // ACCESS - GETTERS
+//
+
+ /**
+ * Access the originating session id for this alarm.
+ */
+ TASSrvSessionId OriginatingSessionId() const;
+
+ /**
+ * Access the sound state for this alarm
+ */
+ TSoundState SoundState() const;
+
+//
+public: // ACCESS - MISC
+//
+
+ void RequestExpiryNotificationL(const RMessage2& aMessage);
+
+ void RequestExpiryNotificationComplete(TInt aErrorCode);
+
+ /**
+ * Does this alarm have an owning session and
+ */
+ TBool HasNotificationRequestPending() const;
+
+ void RoundDownTimeToMinute(TTimeType aType);
+
+ void DeQueue();
+
+ void Reset();
+
+ void ClearFlags();
+
+ /**
+ * Update the sound state of this alarm
+ */
+ void SetSoundState(TSoundState aSoundState);
+
+ void ToggleSoundState();
+
+ void ReinitializeSoundState(const TTime& aBaselineForSoundTiming);
+
+ TTime CalculateAndPrepareNextSoundCycle();
+
+ TInt ValidateAndEnable(TTimeIntervalSeconds aAllowableWindow = KAlarmServerStartupExpireWindowInSeconds, TBool aAllowAnyOnceAlarmInThePast = EFalse, TBool aEnable = ETrue);
+
+ void Snooze(const TTime& aTimeToAwaken);
+
+ /**
+ * Has the alarm sound playing been paused?
+ */
+ TBool HasSoundPaused() const;
+
+ /**
+ * Set the EASShdAlarmFlagsSoundHasBeenPaused flag
+ */
+ void SetSoundPausedFlag();
+
+ /**
+ * Clear the EASShdAlarmFlagsSoundHasBeenPaused flag
+ */
+ void ClearSoundPausedFlag();
+
+//
+public: // DATA RELATED
+//
+
+ void DataAttachL(HBufC8* aData);
+
+ void DataDetachL();
+
+ TInt DataSizeL() const;
+
+ const TDesC8& DataL() const;
+
+ const TDesC8& Data() const;
+
+//
+public: // EVENT HANDLERS
+//
+
+ void HandleTimerError(TInt aErrorCode);
+
+ void HandleDeQueue();
+
+ TBool HandleDateTimeChangedL(TUint aWorkdays, TBool aWorkdaysChanged);
+
+//
+private: // FROM MASSrvAlarmTimerObserver
+//
+
+ void MATimerHandleAlarmExpired(TAlarmTimerEvent aEvent, TAlarmId aAlarmId);
+
+//
+private: // INTERNAL
+//
+
+ /**
+ * Return the server data object
+ */
+ CASSrvServerWideData& ServerData() const;
+
+ void NotificationMessageComplete(TInt aCompletionCode);
+
+ TInt PrepareForNextRepeat(TTimeIntervalSeconds aAllowableWindow = KAlarmServerDefaultAlowableWindowInSeconds);
+
+//
+private: // INTERNAL - SOUND TIMING RELATED
+//
+
+ /**
+ * Set the sound cycle
+ */
+ void SetSoundTimingCycleIndex(TASSrvAlarmSoundCycleNumber aSoundNumber);
+
+ /**
+ * Access the sound cycle
+ */
+ TASSrvAlarmSoundCycleNumber SoundTimingCycleIndex() const;
+
+//
+public: // Helper for AlarmQueue Internalize
+//
+
+ /**
+ * Internalize of the Alarm Queue after a Restore (from a backup)
+ * deletes the old queue. This method sends a Cancel notification for
+ * a 'Session Alarm' to its the TRequestStatus object.
+ */
+ void CancelSessionAlarm();
+
+//
+private: // INTERNAL - Set Alarm Status
+//
+
+ /**
+ * Internally used function for set alarm status.
+ */
+ TInt doSetStatus(TAlarmStatus aStatus, TBool aAutoDisabled);
+
+//
+private: // MEMBER DATA
+//
+
+ /**
+ * When an alarm plays, it has a controlling time period which specifies how
+ * long the sound should be played for (before it is automatically made silent again).
+ * Typically there are a series of cycles, each with a custom-defined duration
+ * for the sound. This attribute specifies which cycle is currently being timed.
+ */
+ TASSrvAlarmSoundCycleNumber iSoundPeriodCycleNumber;
+
+ /**
+ * Ordinarily, an alarm is first "heard" when at its due time. However, if
+ * the alarm is snoozed, or there is a quiet period, the alarm's original due
+ * time cannot be used for sound-timing related calcualtions. Therefore, by
+ * default, this value is initialized to the due time when the alarm first
+ * expires, and is updated with a new time when the alarm is snoozed or
+ * the sound is paused.
+ */
+ TTime iStartTimeForSoundCalculations;
+
+ /**
+ * When an alarm is notifying it either is playing a sound or silent (depending
+ * on the alarm sound play intervals). This enumeration represents that state.
+ */
+ TSoundState iSoundState;
+
+ /**
+ * Internal flags used by the server side representation of an alarm object.
+ */
+ TBitFlags iInternalServerFlags;
+
+ /**
+ * The session which originally created this alarm
+ */
+ TASSrvSessionId iOriginatingSessionId;
+
+ /**
+ * The request status object that is completed when the alarm expires or is
+ * cancelled.
+ */
+ RMessagePtr2 iNotificationMessage;
+
+ /**
+ * A handle to the server wide data.
+ */
+ CASSrvServerWideData& iServerWideData;
+ };
+
+
+#endif
+
+