williamr@2: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // williamr@2: williamr@2: #ifndef __ASSHDALARM_H__ williamr@2: #define __ASSHDALARM_H__ williamr@2: williamr@2: williamr@4: // System Includes williamr@2: #include williamr@2: #include williamr@2: williamr@4: // User Includes williamr@2: #include williamr@2: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@4: /** williamr@4: * The Alarm publish and subscribe category williamr@4: * williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@2: const TUid KAlarmServerPubSubCategory = { 0x101f5027 }; williamr@2: williamr@4: /** williamr@4: * Used for subcribing missed alarms or time zone changes williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@2: const TUint KMissingAlarmPubSubKey = 100; williamr@2: williamr@4: /** williamr@4: * The publish and subscribe data for KMissingAlarmPubSubKey williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@2: struct TMissedAlarmPubSubData williamr@2: { williamr@4: /** williamr@4: * The value indicating the changes. williamr@4: * 1 - Time zone has been changes but there are no missed alarms williamr@4: * 2 - Some alarms have been missed after system time or time zone has changed. williamr@4: */ williamr@2: TUint8 iValue; williamr@2: williamr@4: /** williamr@4: * The time that system time change took place, in universal (UTC) time williamr@4: */ williamr@2: TTime iTimeOfChangeUtc; williamr@2: }; williamr@2: williamr@4: #ifdef SYMBIAN_SKIPPED_CALENDAR_ALARMS williamr@4: /** williamr@4: * Used for subscribing to data used when searching for instances in Calendar williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@2: const TUint KSkippedAlarmInstancesPubSubKey = 101; williamr@2: williamr@4: /** williamr@4: * The publish and subscribe data for KMissingAlarmInstancesPubSubKey williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@2: struct TASShdAlarmedInstanceParams williamr@2: { williamr@4: /** williamr@4: * The start of the time range in local time. williamr@4: */ williamr@2: TTime iLocalStartTime; williamr@2: williamr@4: /** williamr@4: * The end of the time range in local time. williamr@4: */ williamr@2: TTime iLocalEndTime; williamr@2: williamr@4: /** williamr@4: * The alarm time types to include. williamr@4: */ williamr@2: TASShdAlarmTimeType iTimeType; williamr@2: }; williamr@2: williamr@4: #endif //SYMBIAN_SKIPPED_CALENDAR_ALARMS williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@4: williamr@4: #ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT williamr@4: williamr@4: /** williamr@4: * Used for subcribing wake-up alarm set and unset notifications williamr@4: * Belonging to the KAlarmServerPubSubCategory alarm publish and subscribe category williamr@4: * williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@4: const TUint KWakeupAlarmPubSubKey = 102; williamr@4: williamr@4: /** williamr@4: * Alarm server sets KWakeupAlarmPubSubKey value to EActiveWakeupAlarmSet when there is an active williamr@4: * wakeup alarm in the alarm queue otherwise sets it to EActiveNoWakeupAlarmsSet. williamr@4: * A wakeup alarm starts the device if it is powered off when the alarm expires. If williamr@4: * the device is in normal mode then it works as a clock alarm. williamr@4: * An active wakeup alarm is a wakeup alarm which has been set and has not started to alert yet. williamr@4: * williamr@4: * EActiveWakeupAlarmUninitialized is used to notify the listeners of 'KWakeupAlarmPubSubKey' williamr@4: * key that the Alarm Server has just started at the device boot time and it needs to internalize williamr@4: * Alarm Queue from backup before checking for the presence of active wake-up alarm. williamr@4: * williamr@4: * @publishedPartner williamr@4: * @released williamr@4: */ williamr@4: enum TActiveWakeupAlarmStatus williamr@4: { williamr@4: EActiveWakeupAlarmUninitialized = 100, williamr@4: EActiveWakeupAlarmSet, williamr@4: EActiveNoWakeupAlarmsSet, williamr@4: }; williamr@4: williamr@4: #endif williamr@4: williamr@4: /** williamr@4: * A client-side alarm object. williamr@4: * williamr@4: * It contains all of the information needed to create an alarm in the Alarm Server. williamr@4: * williamr@4: * @publishedAll williamr@4: * @released williamr@4: */ williamr@2: class TASShdAlarm williamr@2: { williamr@4: public: williamr@2: williamr@2: IMPORT_C TASShdAlarm(); williamr@2: williamr@4: public: williamr@2: williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@4: public: williamr@4: // Read-Only Access williamr@4: williamr@4: /** williamr@4: * Returns the alarm status. williamr@4: * williamr@4: * @return Alarm status. williamr@4: */ williamr@4: inline TAlarmStatus Status() const { return iStatus; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm state. williamr@4: * williamr@4: * @return Alarm state. williamr@4: */ williamr@4: inline TAlarmState State() const { return iState; } williamr@4: williamr@4: IMPORT_C TBool HasAssociatedData() const; williamr@4: IMPORT_C TBool HasOwningSession() const; williamr@4: IMPORT_C TBool HasBecomeOrphaned() const; williamr@2: williamr@4: public: williamr@2: williamr@2: IMPORT_C void Reset(); williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's unique identifier. williamr@4: * williamr@4: * @return Reference to the unique identifier. williamr@4: */ williamr@4: inline TAlarmId& Id() { return iAlarmId; } williamr@4: williamr@4: /** williamr@4: * Return the alarm's unique identifier. williamr@4: * williamr@4: * @return The unique identifier. williamr@4: */ williamr@4: inline TAlarmId Id() const { return iAlarmId; } williamr@4: williamr@4: /** williamr@4: * The Secure ID is only used in the secured platform williamr@4: */ williamr@2: williamr@4: // adds a SID to the alarms private field williamr@4: inline void SetSid(const TSecureId& aSecureID) {iTASShdAlarmSID = aSecureID;} williamr@4: williamr@4: // returns the SID of the alarm's creator williamr@4: inline TSecureId GetSid() const {return iTASShdAlarmSID;} williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the next time the alarm is scheduled to expire. williamr@4: * williamr@4: * @return Next expiry time. williamr@4: */ williamr@4: inline TTime& NextDueTime() { return iNextDueTime; } williamr@2: williamr@4: /** williamr@4: * Returns the next time that the alarm is scheduled to expire. williamr@4: * williamr@4: * @return Next expiry time. williamr@4: */ williamr@4: inline const TTime& NextDueTime() const { return iNextDueTime; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's original expiry time. williamr@4: * williamr@4: * @return Original expiry time. williamr@4: */ williamr@4: inline TTime& OriginalExpiryTime() { return iOriginalExpiryTime; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm's original expiry time. williamr@4: * williamr@4: * The original expiry time is the same as the next due time, unless the alarm williamr@4: * has been snoozed. In that case, the original expiry time is the time when williamr@4: * the alarm first expired, and the next due time is when it is to re-awaken williamr@4: * after the snooze. williamr@4: * williamr@4: * @return Original expiry time. williamr@4: */ williamr@4: inline const TTime& OriginalExpiryTime() const { return iOriginalExpiryTime; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's category. williamr@4: * williamr@4: * Clients can use the category to tag each alarm with a specific code. This williamr@4: * allows clients to identify all related alarms, such as all alarms associated williamr@4: * with a particular application or application engine. williamr@4: * williamr@4: * @return Alarm category. williamr@4: */ williamr@4: inline TAlarmCategory& Category() { return iCategory; } williamr@2: williamr@4: /** williamr@4: * Return this alarm's category. williamr@4: * williamr@4: * @return Alarm category. williamr@4: */ williamr@4: inline TAlarmCategory Category() const { return iCategory; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's characteristics. williamr@4: * williamr@4: * @return Alarm characteristics bit flags. williamr@4: */ williamr@4: inline TAlarmCharacteristicsFlags& Characteristics() { return iCharacteristics; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm's characteristics williamr@4: * williamr@4: * @return Alarm characteristics bit flags. williamr@4: */ williamr@4: inline TAlarmCharacteristicsFlags Characteristics() const { return iCharacteristics; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's repeat definition. williamr@4: * williamr@4: * The repeat definition controls the alarm's behaviour after it has expired. williamr@4: * For example, you can set the repeat definition so that the server automatically williamr@4: * queues the alarm to expire again in exactly 24 hours time. williamr@4: * williamr@4: * @return Alarm repeat definition. williamr@4: */ williamr@4: inline TAlarmRepeatDefinition& RepeatDefinition() { return iRepeatDefinition; } williamr@2: williamr@4: /** williamr@4: * Returns the repeat definition for the alarm. williamr@4: * williamr@4: * @return The alarm's repeat definition. williamr@4: */ williamr@4: inline TAlarmRepeatDefinition RepeatDefinition() const { return iRepeatDefinition; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's message. williamr@4: * williamr@4: * The message is usually displayed in the application UI when the alarm expires. williamr@4: * williamr@4: * @return Reference to the alarm's associated message. williamr@4: */ williamr@4: inline TAlarmMessage& Message() { return iMessage; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm's message. williamr@4: * williamr@4: * The message is usually displayed in the application UI when the alarm expires. williamr@4: * williamr@4: * @return Reference to the alarm's associated message. williamr@4: */ williamr@4: inline const TAlarmMessage& Message() const { return iMessage; } williamr@2: williamr@4: /** williamr@4: * Return a writable version of the alarm sound's filename. williamr@4: * williamr@4: * @return Reference to the alarm's sound filename. williamr@4: */ williamr@4: inline TAlarmSoundName& SoundName() { return iSoundName; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm's sound filename. williamr@4: * williamr@4: * @return Sound filename. williamr@4: */ williamr@4: inline const TAlarmSoundName& SoundName() const { return iSoundName; } williamr@2: williamr@4: /** williamr@4: * Returns the alarm session type. williamr@4: * williamr@4: * @return Alarm session type. williamr@4: */ williamr@4: inline TAlarmDayOrTimed DayOrTimed() const { return iDayOrTimed; } williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm type, i.e. day, timed williamr@4: * williamr@4: * @return iDayOrTimed. williamr@4: */ williamr@4: inline TAlarmDayOrTimed& DayOrTimed() { return iDayOrTimed; } williamr@2: williamr@2: IMPORT_C void SetUtcNextDueTime(TTime aUtcTime); williamr@2: IMPORT_C void SetDeQueueIfDueTimeInPast(); williamr@2: williamr@4: #ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT williamr@4: IMPORT_C void SetWakeup(TBool aEnabled); williamr@4: IMPORT_C TBool IsWakeup() const; williamr@4: #endif williamr@4: williamr@4: #ifdef SYMBIAN_ALARM_REPEAT_EXTENSIONS williamr@2: IMPORT_C TInt SetAlarmDays(TUint8 aAlarmDays); williamr@2: IMPORT_C TUint8 AlarmDays() const; williamr@2: IMPORT_C void SetContinuous(TBool aContinuous); williamr@2: IMPORT_C TBool Continuous(); williamr@4: #endif williamr@2: williamr@4: public: williamr@4: // CLient Data Access williamr@2: williamr@4: /** williamr@4: * Returns a writable version of the alarm's client flags. williamr@4: * williamr@4: * The client flags may be used for any client-specific data - the alarm server does not use them. williamr@4: * williamr@4: * @return Reference to the alarm's bit flags. williamr@4: */ williamr@4: inline TBitFlags16& ClientFlags() { return iClientFlags; } williamr@4: williamr@4: /** williamr@4: * Returns this alarm's client flags. williamr@4: * williamr@4: * @return Reference to the alarm's bit flags. williamr@4: */ williamr@4: inline TBitFlags16 ClientFlags() const { return iClientFlags; } williamr@4: williamr@4: /** williamr@4: * Returns the client data from slot 1 for this alarm. williamr@4: * williamr@4: * @return The first client-specific integer. williamr@4: */ williamr@4: inline TInt ClientData1() const { return iClientData1; } williamr@4: williamr@4: /** williamr@4: * Returns a writable version of the client data from slot 1 for this alarm. williamr@4: * williamr@4: * @return Reference to the first client-specific integer. williamr@4: */ williamr@4: inline TInt& ClientData1() { return iClientData1; } williamr@4: williamr@4: /** williamr@4: * Returns the client data from slot 2 for this alarm. williamr@4: * williamr@4: * @return The second client-specific integer. williamr@4: */ williamr@4: inline TInt ClientData2() const { return iClientData2; } williamr@4: williamr@4: /** williamr@4: * Returns the client data from slot 2 for this alarm. williamr@4: * williamr@4: * @return The second client-specific integer. williamr@4: */ williamr@4: inline TInt& ClientData2() { return iClientData2; } williamr@4: williamr@2: williamr@4: /** williamr@4: * Tests whether the alarm is floating. williamr@4: * williamr@4: * Floating alarms expire at a given wall-clock time regardless of the williamr@4: * current locale and whether any daylight saving time rules are in force. williamr@4: * williamr@4: * @return True if the alarm is floating. williamr@4: */ williamr@4: inline TBool IsFloating() const { return iCharacteristics.IsClear(EAlarmCharacteristicsIsFixed); } williamr@2: williamr@4: protected: williamr@4: // Internal Flags williamr@4: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: /* williamr@2: * @internalAll williamr@2: */ williamr@2: enum TASShdAlarmFlags williamr@2: { williamr@4: /** williamr@4: * @publishedAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasAssociatedData = 0, williamr@2: williamr@4: /** williamr@4: * @publishedAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasOwningSession = 1, williamr@2: williamr@4: /** williamr@4: * @publishedAll williamr@2: */ williamr@2: EASShdAlarmFlagsHasBecomeOrphaned = 2, williamr@2: williamr@4: /** williamr@4: * Set if alarm is disabled manually so that can not be enabled when locale changes. williamr@4: * williamr@4: * @publishedAll williamr@2: */ williamr@2: EASShdAlarmFlagsPermanentDisabled = 4 williamr@2: }; williamr@4: #endif williamr@2: williamr@2: private: williamr@4: #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS williamr@4: williamr@4: #ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT williamr@2: /* williamr@2: * @internalComponent williamr@2: */ williamr@2: enum TASShdAlarmFlags2 williamr@2: { williamr@4: EASShdAlarmFlag2Wakeup = 0, williamr@2: }; williamr@4: #endif williamr@4: williamr@4: #ifdef SYMBIAN_ALARM_REPEAT_EXTENSIONS williamr@4: /* williamr@4: * @internalComponent williamr@4: */ williamr@2: enum TASShdAlarmFlags2AlarmRepeatExtensions williamr@2: { williamr@2: EASShdAlarmFlag2AlarmDayMonday = 1, williamr@2: EASShdAlarmFlag2AlarmDayTuesday = 2, williamr@2: EASShdAlarmFlag2AlarmDayWednesday = 3, williamr@2: EASShdAlarmFlag2AlarmDayThursday = 4, williamr@2: EASShdAlarmFlag2AlarmDayFriday = 5, williamr@2: EASShdAlarmFlag2AlarmDaySaturday = 6, williamr@2: EASShdAlarmFlag2AlarmDaySunday = 7, williamr@2: EASShdAlarmFlag2Continuous = 8 williamr@2: }; williamr@4: #endif williamr@4: williamr@4: #endif //SYMBIAN_ENABLE_SPLIT_HEADERS williamr@2: williamr@2: williamr@4: protected: williamr@2: williamr@4: /** williamr@2: * Various flags - used internally by the alarm object williamr@2: */ williamr@2: TBitFlags8 iFlags; williamr@2: williamr@4: /** williamr@2: * This represents the desired behaviour for a given alarm. williamr@2: * The Alarm Server uses this information to control the williamr@2: * behaviour of the alarm. williamr@2: * williamr@2: * @see TAlarmCharacteristics williamr@2: */ williamr@2: TAlarmCharacteristicsFlags iCharacteristics; williamr@2: williamr@4: /** williamr@2: * The unique identifier assoicated with each alarm maintained williamr@2: * by the alarm world server. williamr@2: */ williamr@2: TAlarmId iAlarmId; williamr@2: williamr@4: /** williamr@2: * The status of this alarm (e.g. enabled, disabled) williamr@2: */ williamr@2: TAlarmStatus iStatus; williamr@2: williamr@4: /** williamr@2: * The state of this alarm (e.g. queued, notifying, notified, snoozed etc) williamr@2: */ williamr@2: TAlarmState iState; williamr@2: williamr@4: /** williamr@2: * The type of this alarm (e.g. day, timed) williamr@2: */ williamr@2: TAlarmDayOrTimed iDayOrTimed; williamr@2: williamr@4: /** williamr@2: * Controls how the alarm repeats after it has expired. Note that williamr@2: * session alarms are not allowed to repeat (they must be "once williamr@2: * only"). williamr@2: */ williamr@2: TAlarmRepeatDefinition iRepeatDefinition; williamr@2: williamr@4: /** williamr@2: * This UID is supplied by the client and is used to indicate williamr@2: * the category that this alarm is part of. The Alarm Server williamr@2: * is category-agnostic, that is, this information is for williamr@2: * the client's use only williamr@2: */ williamr@2: TAlarmCategory iCategory; williamr@2: williamr@4: /** williamr@2: * The date and time at which this alarm is next due. For alarms williamr@2: * that haven't been snoozed, then this is the original due time. williamr@2: * williamr@2: * For alarms that have been snoozed, this is the time at which williamr@2: * the alarm will reawaken. williamr@2: */ williamr@2: TTime iNextDueTime; williamr@2: williamr@4: /** williamr@2: * This attribute is only used in the instance whereby an alarm williamr@2: * is snoozed. It represents the time at which the alarm first williamr@2: * expired. williamr@2: */ williamr@2: TTime iOriginalExpiryTime; williamr@2: williamr@4: /** williamr@2: * The message associated with this alarm, typically used williamr@2: * in an application UI to inform the user as to the reason williamr@2: * for the alarm. williamr@2: */ williamr@2: TAlarmMessage iMessage; williamr@2: williamr@4: /** williamr@2: * A descriptor which holds the name of the sound file which williamr@2: * should be played when the alarm expires. williamr@2: */ williamr@2: TAlarmSoundName iSoundName; williamr@2: williamr@4: protected: williamr@4: williamr@4: // Client Specific Data williamr@4: williamr@4: /** williamr@2: * Flags for use by any particular client. These will williamr@2: * only be relevant to a client who can interpret them. williamr@2: */ williamr@2: TBitFlags16 iClientFlags; williamr@2: williamr@4: /** williamr@2: * For arbitrary client data 1 williamr@2: */ williamr@2: TInt iClientData1; williamr@2: williamr@4: /** williamr@2: * For arbitrary client data 2 williamr@2: */ williamr@2: TInt iClientData2; williamr@2: williamr@4: private: williamr@4: // Binary Compatibility Proofing williamr@2: TSecureId iTASShdAlarmSID; williamr@4: williamr@4: #ifdef SYMBIAN_SYSTEM_STATE_MANAGEMENT williamr@4: /** williamr@2: * Various flags - used internally by the alarm object williamr@2: */ williamr@2: TBitFlags16 iFlags2; williamr@2: TUint16 iTASShdAlarm_2; williamr@4: #else williamr@4: williamr@4: #ifdef SYMBIAN_ALARM_REPEAT_EXTENSIONS williamr@4: /** williamr@4: * Various flags - used internally by the alarm object williamr@4: */ williamr@4: TBitFlags16 iFlags2; williamr@4: TUint16 iTASShdAlarm_2; williamr@4: #else williamr@4: TAny* iTASShdAlarm_2; williamr@4: #endif williamr@4: #endif williamr@2: TAny* iTASShdAlarm_3; williamr@2: }; williamr@2: williamr@2: #endif // #ifndef __ASSHDALARM_H__