Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Timew/ConsoleAlarmAlertServer/Source/ConsoleAlarmAlertConsole.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,402 @@
+// 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 the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include "consolealarmalertconsole.h"
+
+// System includes
+#include <e32twin.h>
+#include <e32base.h>
+#include <e32svr.h>
+
+// User includes
+#include "asaltdefs.h"
+#include "consolealarmalertsession.h"
+
+// Type definitions
+
+// Constants
+
+// Enumerations
+
+// Classes referenced
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+// ----> CConsoleAlarmAlertConsole (source)
+///////////////////////////////////////////////////////////////////////////////////////
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::CConsoleAlarmAlertConsole(CConsoleAlarmAlertSession& aSession)
+:	CActive(CActive::EPriorityLow), iSession(aSession), iInstructionIndex(0)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+
+//*************************************************************************************
+CConsoleAlarmAlertConsole::~CConsoleAlarmAlertConsole()
+	{
+	Cancel();
+	Hide();
+	}
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::GetKey()
+	{
+	if	(iWin && !IsActive())
+		{
+		SetActive();
+		iWin->Read(iStatus);
+		}		
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CancelKey()
+	{
+	if	(IsActive())
+		Cancel();
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DecCounter()
+	{
+	if	(iTimeInterval > 0)
+		{
+		--iTimeInterval;
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::UpdateDisplay()
+	{
+	TBuf<180> buf;
+	_LIT(KEalwlAlarmSoundOff, "Off");
+	_LIT(KEalwlAlarmSoundOn, "On");
+	_LIT(KEalwlStatusEnabled, "Are");
+	_LIT(KEalwlStatusNotEnabled, "Are Not");
+	_LIT(KEalwlStatusIs, "Is");
+	_LIT(KEalwlStatusIsNo, "Is No");
+	//
+	if	(!iWin)
+		return;
+	iWin->SetCursorPosAbs(TPoint(0,0));
+
+	// MESSAGE
+	buf.Format(_L("Message : %S"), &iSession.Alarm().Message());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DATA
+	if	(iSession.Alarm().HasAssociatedData())
+		{
+		const TAgnAlarmInfo data = iSession.AlarmData();
+		const TUid KUidAgendaModelAlarmCategory = { 0x101F4A70 };
+		if (data.iAlarmCategory == KUidAgendaModelAlarmCategory)
+			{
+			_LIT(KEalwlAgendaData,"\ndata: agenda filename \"%S\"");
+			if (data.iFileName.Length() < 40)
+				buf.Format(KEalwlAgendaData,&data.iFileName);
+			else
+				{
+				TBuf<40> temp = data.iFileName.Left(40);
+				buf.Format(KEalwlAgendaData,&temp);
+				}
+			}
+		else
+			buf.Format(_L("\nAlarm has %d data bytes"), iSession.AlarmDataSize());
+		}
+	else
+		{
+		buf = _L("\nAlarm has no associated data");
+		}
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// DEFER TIME
+	if	(iSession.DeferTime() != Time::NullTTime())
+		{
+		TDateTime dateTime(iSession.DeferTime().DateTime());
+		buf.Format(_L("\nDefer   : %02d:%02d"), dateTime.Hour(), dateTime.Minute());
+		}
+	else
+		buf=_L("\nNULL defer time");
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// TIME INTERVAL
+	buf.Format(_L("\nCurrent time interval is %d minutes"), GetTimeInterval());
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// STATE FLAGS
+	buf.Format(_L("\nAlarm sounds are %S"),(iAlertState&EASAltStateFlagsSilentRunning)?&KEalwlAlarmSoundOff:&KEalwlAlarmSoundOn);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S paused"),(iAlertState&EASAltStateFlagsSoundIsPaused)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nAlarm sounds %S deferred"),(iAlertState&EASAltStateFlagsInQuietPeriod)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S more than one unacknowledged alarms"),(iAlertState&EASAltStateFlagsMoreThanOneDueAlarm)?&KEalwlStatusEnabled:&KEalwlStatusNotEnabled);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S memory to snooze alarms"),(iAlertState&EASAltStateFlagsNoMemoryForSnoozeAlarm)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+	buf.Format(_L("\nThere %S an alarm sound to play"),(iAlertState&EASAltStateFlagsAlarmHasNoSoundFileName)?&KEalwlStatusIsNo:&KEalwlStatusIs);
+	iWin->Write(buf);
+	iWin->ClearToEndOfLine();
+
+	// COMMAND PROMPTS
+	iWin->Write(_L("\nENTER = Silence alarm          SPACE = Quiet Period"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nESCAPE = Acknowledge alarm     A = Acknowledge all"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\nP = Pause alarm sound          TAB = Snooze alarm"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n1 = 1 min sound interval		 0 = 0 mins sound interval"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n+ = Increase int. and pause    - = Decrease int. and pause"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n! = Kill alarm alert server"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\n"));
+	iWin->ClearToEndOfLine();
+	iWin->Write(_L("\r"));
+	//
+	if(!iSession.InstructionSet()) //Get user input if instruction set unspecified.
+		GetKey();
+	else if (iInstructionIndex >= static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count()) //Get user input if program has already iterated thru entire instruction set.
+		GetKey();
+	else //Use the command in the instruction set, instead of waiting for user input.
+		{
+			if(!IsActive())
+			{
+			iStatus = KRequestPending;
+			TRequestStatus* ptrStatus = &iStatus;
+			User::RequestComplete( ptrStatus, KErrNone );
+			SetActive();
+			}
+		}
+	}
+
+//*************************************************************************************
+TInt CConsoleAlarmAlertConsole::GetTimeInterval() const
+	{
+	return(iTimeInterval);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetVisibility(TInt aVis)
+	{
+	if	(!aVis)
+		Hide();
+	else if (!iWin)
+		{
+		// Create a new window, since cannot set order of console windows
+		CreateWin();
+		UpdateDisplay();
+		}
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::SetAlertState(TInt aFlags)
+	{
+	iAlertState = aFlags;
+	UpdateDisplay();
+	}
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::RunL()
+	{
+	if (iStatus.Int() == KErrCancel)
+		return;
+
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	TInt key = iWin->KeyCode();
+	if(iSession.InstructionSet() && iInstructionIndex < static_cast<RArray<TInt>*>(iSession.InstructionSet())->Count())
+		{
+		RArray<TInt>* temp = static_cast<RArray<TInt>*>(iSession.InstructionSet());
+		key = (*temp)[iInstructionIndex++];
+		GetKey();
+		}
+	else
+		{
+		GetKey();
+		if ((key>=EKeyF1 && key<=EKeyF12) || key==EKeyTab)
+			{
+			DoDeferTime(EASAltAlertServerResponseSnooze);
+			}
+		}
+
+	switch (key)
+		{
+	// ACKNOWLEDGE CURRENT
+	case EKeyEscape:
+		iSession.Notify(EASAltAlertServerResponseClear);
+		return;
+	// ACKNOWLEDGE ALL
+	case 'a':
+	case 'A':
+		iSession.Notify(EASAltAlertServerResponseClearAll);
+		return;
+	// QUIET PERIOD
+	case EKeySpace:
+		DoDeferTime(EASAltAlertServerResponseQuietPeriod);
+		break;
+	// PAUSE SOUND
+	case 'p':
+	case 'P':
+		DoDeferTime(EASAltAlertServerResponsePauseSound);
+		break;
+	// SILENCE ALL SOUND
+	case EKeyEnter:
+		iSession.Notify(EASAltAlertServerResponseSilence);
+		break;
+	// INTERVAL 1 MINUTE
+	case '1':
+		iTimeInterval=1;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// INTERVAL 0 MINUTES
+	case '0':
+		iTimeInterval=0;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE +
+	case '=':
+	case '+':
+		iTimeInterval++;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+	// PAUSE -
+	case '-':
+		iTimeInterval--;
+		iSession.Notify(EASAltAlertServerResponsePauseSound);
+		break;
+
+	// QUIT
+	case '!':
+		CActiveScheduler::Stop();
+		break;
+		}
+
+	TBuf<10> buf;
+	buf.Format(_L("'%c',"), key);
+	iWin->Write(buf);
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoCancel()
+	{
+	__ASSERT_DEBUG(iWin, User::Invariant());
+	iWin->ReadCancel();
+	}
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::Hide()
+	{
+	if	(iWin)
+		CancelKey(); 
+	//
+	delete iWin;
+	iWin = NULL;
+	//
+	if	(iCountDown)
+		iCountDown->Cancel();
+	//
+	delete iCountDown;
+	iCountDown=NULL;
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::CreateWin()
+	{
+	_LIT(KAlarmAlertConsoleCaption, "Test Alarm Alert Server Console");
+	//
+	__ASSERT_DEBUG(!iWin, User::Invariant());
+	__ASSERT_DEBUG(!iCountDown, User::Invariant());
+	//
+	TRAPD(trapCheck, iWin = Console::NewL(KAlarmAlertConsoleCaption, TSize(KConsFullScreen, KConsFullScreen)));
+	if	(trapCheck)
+		{
+		iWin=NULL;
+		return;
+		}
+	
+	TRAP(trapCheck, iCountDown = CPeriodic::NewL(CActive::EPriorityIdle));
+	if	(trapCheck)
+		{
+		iCountDown=NULL;
+		return;
+		}
+	//
+	const TTimeIntervalMicroSeconds32 interval(60000000);
+	iCountDown->Start(interval, interval, TCallBack(&CountDownCallBack, this));
+	}
+
+
+//*************************************************************************************
+void CConsoleAlarmAlertConsole::DoDeferTime(TASAltAlertServerResponse aResponse)
+	{
+	if	(++iTimeInterval > 60)
+		{
+		iTimeInterval = 5;
+		User::Beep(440, 12);
+		}
+	//
+	TTime now;
+	now.HomeTime();
+	now += TTimeIntervalMinutes(iTimeInterval);
+	//
+	iSession.Notify(aResponse, now);
+	}
+
+
+//*************************************************************************************
+TBool CConsoleAlarmAlertConsole::CountDownCallBack(TAny* aSelf)
+	{
+	CConsoleAlarmAlertConsole& self = *reinterpret_cast<CConsoleAlarmAlertConsole*>(aSelf);
+	self.DecCounter();
+	//
+	return EFalse;
+	}