00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <e32base.h>
00018 #include <e32cons.h>
00019 #include <asshdalarm.h>
00020 #include <asclisession.h>
00021
00022
00023 #include "AlarmServerExample.h"
00024
00025
00026 static CConsoleBase* gConsole;
00027
00028 _LIT(KConsoleStars,"\n*************************");
00029
00030 CExampleAlarmServer* CExampleAlarmServer::NewL()
00031 {
00032 CExampleAlarmServer* self = new (ELeave) CExampleAlarmServer();
00033 CleanupStack::PushL(self);
00034 self->ConstructL();
00035 CleanupStack::Pop(self);
00036 return self;
00037 }
00038
00039 void CExampleAlarmServer::ConstructL()
00040 {
00041
00042 User::LeaveIfError(iAlarmServerSession.Connect());
00043 }
00044
00045 CExampleAlarmServer::~CExampleAlarmServer()
00046 {
00047 iAlarmServerSession.Close();
00048 }
00049
00050
00051 void CExampleAlarmServer::DisplayNotificationType(TAlarmChangeEvent aAlarmChangeEvent, TAlarmId )
00052 {
00053 switch (aAlarmChangeEvent)
00054 {
00055 case EAlarmChangeEventUndefined:
00056 _LIT(KConsoleMsg, "\nAn undefined alarm event has occurred.");
00057 gConsole->Printf(KConsoleMsg);
00058 break;
00059 case EAlarmChangeEventState:
00060 _LIT(KConsoleMsg1, "\nAn alarm has changed state.");
00061 gConsole->Printf(KConsoleMsg1);
00062 break;
00063 case EAlarmChangeEventStatus:
00064 _LIT(KConsoleMsg2, "\nAn alarm has changed status.");
00065 gConsole->Printf(KConsoleMsg2);
00066 break;
00067 case EAlarmChangeEventCharacteristics:
00068 _LIT(KConsoleMsg3, "\nAn alarm has changed characteristics..");
00069 gConsole->Printf(KConsoleMsg3);
00070 break;
00071 case EAlarmChangeEventAlarmDeletion:
00072 _LIT(KConsoleMsg4, "\nAn alarm has been deleted from the queue.");
00073 gConsole->Printf(KConsoleMsg4);
00074 break;
00075 case EAlarmChangeEventAlarmAddition:
00076 _LIT(KConsoleMsg5, "\nAn alarm has been added to the queue.");
00077 gConsole->Printf(KConsoleMsg5);
00078 break;
00079 case EAlarmChangeEventTimerExpired:
00080 _LIT(KConsoleMsg6, "\nAn alarm has expired.");
00081 gConsole->Printf(KConsoleMsg6);
00082 break;
00083 case EAlarmChangeEventSoundPlaying:
00084 _LIT(KConsoleMsg7, "\nThe sound for an alarm has just started playing.");
00085 gConsole->Printf(KConsoleMsg7);
00086 break;
00087 case EAlarmChangeEventSoundStopped:
00088 _LIT(KConsoleMsg8, "\nThe sound for an alarm has just stopped playing.");
00089 gConsole->Printf(KConsoleMsg8);
00090 break;
00091 case EAlarmChangeEventPlayIntervalsChanged:
00092 _LIT(KConsoleMsg9, "\nThe sound intervals associated with sound timing have changed.");
00093 gConsole->Printf(KConsoleMsg9);
00094 break;
00095 case EAlarmChangeEventGlobalSoundStateChanged:
00096 _LIT(KConsoleMsg10, "\nThe global sound state (on/off) has changed.");
00097 gConsole->Printf(KConsoleMsg10);
00098 break;
00099 case EAlarmChangeEventHeadQueueItemChanged:
00100 _LIT(KConsoleMsg11, "\nThe next alarm at the head of the alarm queue has changed.");
00101 gConsole->Printf(KConsoleMsg11);
00102 break;
00103 case EAlarmChangeEventSystemDateTimeChanged:
00104 _LIT(KConsoleMsg12, "\nThe system date or time has changed, or the days defined as workdays have changed.");
00105 gConsole->Printf(KConsoleMsg12);
00106 break;
00107 case EAlarmChangeEventAlarmUIVisible:
00108 _LIT(KConsoleMsg13, "\nThe alarm alert server has been instructed to show the 'alarm expired' display.");
00109 gConsole->Printf(KConsoleMsg13);
00110 break;
00111 case EAlarmChangeEventAlarmUIInvisible:
00112 _LIT(KConsoleMsg14, "\nThe alarm alert server has been instructed to hide the 'alarm expired' display.");
00113 gConsole->Printf(KConsoleMsg14);
00114 break;
00115 case EAlarmChangeEventSoundSilence:
00116 _LIT(KConsoleMsg15, "\nAlarm sounds have been temporarily silenced, the current alarm has been paused or re-enabled.");
00117 gConsole->Printf(KConsoleMsg15);
00118 break;
00119 case EAlarmChangeEventAlarmData:
00120 _LIT(KConsoleMsg16, "\nThe data associated with an alarm has changed.");
00121 gConsole->Printf(KConsoleMsg16);
00122 break;
00123 case EAlarmChangeEventRestoreStarted:
00124 _LIT(KConsoleMsg17, "\nA restore from backup of the alarm server has started. Alarms cannot be added/deleted until this has finished.");
00125 gConsole->Printf(KConsoleMsg17);
00126 break;
00127 case EAlarmChangeEventRestoreFailed:
00128 _LIT(KConsoleMsg18, "\nA restore from backup of the alarm server has failed. Alarms can be added/deleted again.");
00129 gConsole->Printf(KConsoleMsg18);
00130 break;
00131 case EAlarmChangeEventRestoreCompleted:
00132 _LIT(KConsoleMsg19, "\nA restore from backup of the alarm server has completed. The alarm queue has changed.");
00133 gConsole->Printf(KConsoleMsg19);
00134 break;
00135 case EAlarmChangeEventLast:
00136 _LIT(KConsoleMsg20, "\nLast change event (anchor). This is always at the end of the list.");
00137 gConsole->Printf(KConsoleMsg20);
00138 break;
00139 }
00140 }
00141
00142
00143
00144
00145 void CExampleAlarmServer::WaitForAlarmToBeCleared()
00146 {
00147 TAlarmChangeEvent alarmChangeEvent;
00148 do
00149 {
00150 TRequestStatus status;
00151 TAlarmId alarmId;
00152 iAlarmServerSession.NotifyChange(status, alarmId);
00153 User::WaitForRequest(status);
00154 alarmChangeEvent = static_cast<TAlarmChangeEvent>(status.Int());
00155 DisplayNotificationType(alarmChangeEvent,alarmId);
00156 }
00157
00158 while (alarmChangeEvent != EAlarmChangeEventAlarmUIInvisible);
00159 }
00160
00161
00162
00163 void CExampleAlarmServer::SetFloatingAlarmL()
00164 {
00165
00166
00167
00168
00169
00170
00171
00172
00173 _LIT(KConsoleMsg, "\nPress any key to add a floating alarm");
00174 gConsole->Printf(KConsoleMsg);
00175 _LIT(KConsoleMsg2,"\nWhen notification occurs, press Clear to continue");
00176 gConsole->Printf(KConsoleMsg2);
00177 gConsole->Getch();
00178 gConsole->Printf(KConsoleStars);
00179
00180 TASShdAlarm alarm;
00181 alarm.Category() = KASCliCategoryClock;
00182
00183 alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
00184 _LIT(KAlarmMessage,"\nThis is a floating alarm.");
00185 alarm.Message() = KAlarmMessage;
00186
00187 alarm.NextDueTime().HomeTime();
00188
00189
00190
00191 alarm.NextDueTime() -= TTimeIntervalSeconds(2);
00192
00193
00194 User::LeaveIfError(iAlarmServerSession.AlarmAdd(alarm));
00195
00196 WaitForAlarmToBeCleared();
00197 }
00198
00199
00200 void CExampleAlarmServer::DisplayAlarmState(TAlarmState aState)
00201 {
00202 switch (aState)
00203 {
00204 case EAlarmStateInPreparation:
00205 _LIT(KConsoleMsg1, "\nThe alarm state is not currently known by the alarm server..");
00206 gConsole->Printf(KConsoleMsg1);
00207 break;
00208 case EAlarmStateQueued:
00209 _LIT(KConsoleMsg2, "\nThe alarm is in the queue.");
00210 gConsole->Printf(KConsoleMsg2);
00211 break;
00212 case EAlarmStateSnoozed:
00213 _LIT(KConsoleMsg3, "\nThe alarm is snoozed. When the snooze period is over, the alarm expires again.");
00214 gConsole->Printf(KConsoleMsg3);
00215 break;
00216 case EAlarmStateWaitingToNotify:
00217 _LIT(KConsoleMsg4, "\nThe alarm is waiting to be notified.");
00218 gConsole->Printf(KConsoleMsg4);
00219 break;
00220 case EAlarmStateNotifying:
00221 _LIT(KConsoleMsg5, "\nThe alarm is currently notifying");
00222 gConsole->Printf(KConsoleMsg5);
00223 break;
00224 case EAlarmStateNotified:
00225 _LIT(KConsoleMsg6, "\nThe alarm has already notified and has been dismissed.");
00226 gConsole->Printf(KConsoleMsg6);
00227 break;
00228 }
00229 }
00230
00231
00232
00233
00234
00235
00236 void CExampleAlarmServer::AddFetchDeleteFixedAlarmL()
00237 {
00238 gConsole->Printf(KConsoleStars);
00239 _LIT(KConsoleMsg, "\nPress any key to add a fixed alarm");
00240 gConsole->Printf(KConsoleMsg);
00241 gConsole->Getch();
00242
00243 TASShdAlarm alarm;
00244 TAlarmCategory alarmCategory = KASCliCategoryClock;
00245 alarm.Category()=alarmCategory;
00246 _LIT(KAlarmMessage, "This is a fixed alarm");
00247 alarm.Message() = KAlarmMessage;
00248 _LIT(KAlarmSound, "Chimes");
00249 alarm.SoundName() = KAlarmSound;
00250
00251 alarm.RepeatDefinition() = EAlarmRepeatDefintionRepeatOnce;
00252
00253 TTime time;
00254
00255 time.UniversalTime();
00256
00257 time += TTimeIntervalSeconds(2);
00258 alarm.SetUtcNextDueTime(time);
00259
00260
00261 User::LeaveIfError(iAlarmServerSession.AlarmAdd(alarm));
00262
00263
00264 const TAlarmId id = alarm.Id();
00265 TAlarmCategory category;
00266 User::LeaveIfError(iAlarmServerSession.GetAlarmCategory(id, category));
00267 User::LeaveIfError(iAlarmServerSession.GetAlarmDetails(id, alarm));
00268
00269 TAlarmState state = alarm.State();
00270 DisplayAlarmState(state);
00271
00272 TAlarmMessage message = alarm.Message();
00273 TBuf<256> messageBuf;
00274 messageBuf.Copy(message);
00275 _LIT(KConsoleMessage,"\nThe alarm's message is....:");
00276 gConsole->Printf(KConsoleMessage);
00277 gConsole->Printf(messageBuf);
00278
00279 TAlarmSoundName soundName = alarm.SoundName();
00280 messageBuf.Copy(soundName);
00281 _LIT(KConsoleSoundName,"\nThe alarm's sound name is ....:");
00282 gConsole->Printf(KConsoleSoundName);
00283 gConsole->Printf(messageBuf);
00284
00285 _LIT(KDeleteMsg, "\n\nPress any key to finish");
00286 gConsole->Printf(KDeleteMsg);
00287 gConsole->Getch();
00288
00289 User::LeaveIfError(iAlarmServerSession.AlarmDelete(id));
00290 }
00291
00292
00293 void CExampleAlarmServer::EgAlarmServerL()
00294 {
00295 SetFloatingAlarmL();
00296 AddFetchDeleteFixedAlarmL();
00297 }
00298
00299 static void DoExampleL()
00300 {
00301
00302 _LIT(KConsoleMessageDisplay, "Alarm Server Example");
00303 gConsole = Console::NewL(KConsoleMessageDisplay,TSize(KConsFullScreen,KConsFullScreen));
00304 CleanupStack::PushL(gConsole);
00305 gConsole->Printf(KConsoleMessageDisplay);
00306 gConsole->Printf(KConsoleStars);
00307
00308 CExampleAlarmServer* egAlarmServer= CExampleAlarmServer::NewL();
00309 TRAPD(err, egAlarmServer->EgAlarmServerL());
00310 if (err)
00311 {
00312 _LIT(KFailed,"\n\nExample failed: leave code=%d");
00313 gConsole->Printf(KFailed, err);
00314 gConsole->Getch();
00315 }
00316 delete egAlarmServer;
00317 CleanupStack::PopAndDestroy(gConsole);
00318 }
00319
00320
00321 TInt E32Main()
00322 {
00323 __UHEAP_MARK;
00324
00325 CActiveScheduler* scheduler=new CActiveScheduler;
00326
00327 if (scheduler)
00328 {
00329 CActiveScheduler::Install(scheduler);
00330
00331 CTrapCleanup* cleanup=CTrapCleanup::New();
00332 if (cleanup)
00333 {
00334 TRAP_IGNORE(DoExampleL());
00335 delete cleanup;
00336 }
00337 delete scheduler;
00338 }
00339 __UHEAP_MARKEND;
00340 return KErrNone;
00341 }