mmserv/radioutility/radioserver/Session/Src/RadioEventHandler.cpp
changeset 0 71ca22bcf22a
child 19 095bea5f582e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Session/Src/RadioEventHandler.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2002-2004 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:  Active object for each spontaneous event from Radio Server.
+*				 Notifies MRadioEventObserver upon receiving a new event.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "RadioEventHandler.h"
+#include    "RadioClientServer.h"
+#include    "RadioDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CRadioEventHandler::CRadioEventHandler
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CRadioEventHandler::CRadioEventHandler(
+	MRadioObserver& aObserver,
+	RRadioSession& aSession,
+	TUint aKey )
+	:	CActive(EPriorityStandard),
+		iSession(aSession),
+		iKey(aKey),
+		iObserver(aObserver)
+    {
+    if ( iKey == ERadioServPsAfSearchEnd )
+    	{
+		// This is necessary to make sure AfSearchEnd comes in before FrequencyChanged event.
+		// Because the AO for FrequencyChanged is added to the scheduler first, AfSearchEnd
+		// must have slightly higer priority to come in first.
+    	SetPriority(EPriorityUserInput);
+    	}
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioEventHandler::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CRadioEventHandler::ConstructL()
+    {
+	RADIO_RDEBUG(_L("[RADIO-SESS] CRadioEventHandler::ConstructL()"));
+	CActiveScheduler::Add(this);
+	User::LeaveIfError( iProperty.Attach(KRadioServerPropertyCategory, iKey) );
+	iProperty.Subscribe(iStatus);
+	SetActive();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioEventHandler::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CRadioEventHandler* CRadioEventHandler::NewLC(
+	MRadioObserver& aObserver,
+	RRadioSession& aSession,
+	TUint aKey )
+    {
+    CRadioEventHandler* self = new( ELeave ) CRadioEventHandler(aObserver,aSession, aKey);
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// Destructor
+CRadioEventHandler::~CRadioEventHandler()
+    {
+	if ( IsActive() )
+		{
+		Cancel();
+		}
+	iProperty.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioEventHandler::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CRadioEventHandler::DoCancel()
+    {
+	iProperty.Cancel();
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioEventHandler::RunL
+// -----------------------------------------------------------------------------
+//
+void CRadioEventHandler::RunL()
+    {
+    // Subscribe immediately before analyzing the notification to ensure that we
+    // don't miss further updates.
+	iProperty.Subscribe(iStatus);
+	SetActive();
+
+	switch ( iKey )
+		{
+		case ERadioServPsPlayerState:
+			{
+			TPckgBuf<TRsSettingsData> playerState;
+    		iProperty.Get(playerState);
+            iObserver.RadioEventStateChange(playerState().iData1,	// Player state
+               								playerState().iError);
+			}
+			break;
+		case ERadioServPsAntennaStatus:
+			{
+			TBool attached;
+			iProperty.Get(attached);
+		    iObserver.RadioEventAntennaStatusChange(attached);
+			}
+			break;
+		case ERadioServPsOfflineMode:
+			{
+			TBool offline;
+			iProperty.Get(offline);
+			iObserver.RadioEventOfflineModeChange(offline);
+			}
+			break;
+		case ERadioServPsTransmitterStatus:
+			{
+			TBool transmitter;
+			iProperty.Get(transmitter);
+			iObserver.RadioEventTransmitterStatusChange(transmitter);
+			}
+			break;
+		case ERadioServPsFrequency:
+			{
+			TInt frequency;
+			iProperty.Get(frequency);
+			iObserver.RadioEventFrequencyChange(frequency);
+			}
+			break;
+		case ERadioServPsFrequencyRange:
+			{
+			TInt freqRange;
+			iProperty.Get(freqRange);
+			iObserver.RadioEventFrequencyRangeChanged((TRsFrequencyRange) freqRange);
+			}
+			break;
+		case ERadioServPsForceMonoReception:
+		    {
+		    TBool forcedMono;
+		    iProperty.Get(forcedMono);
+			iObserver.RadioEventForcedMonoChanged(forcedMono);
+			}
+			break;
+		case ERadioServPsSquelch:
+			{
+			TBool squelch;
+			iProperty.Get(squelch);
+			iObserver.RadioEventSquelchChanged(squelch);
+			}
+			break;
+		case ERadioServPsVolume:
+			{
+			TInt volume;
+			iProperty.Get(volume);
+			iObserver.RadioEventVolumeChange(volume);
+			}
+			break;
+		case ERadioServPsMuteStatus:
+			{
+			TBool muted;
+			iProperty.Get(muted);
+			iObserver.RadioEventMuteChange(muted);
+			}
+			break;
+		case ERadioServPsBalance:
+			{
+			TPckgBuf<TRsSettingsData> balance;
+			iProperty.Get(balance);
+			iObserver.RadioEventBalanceChange(balance().iData1,		// Left
+			                                  balance().iData2);	// Right
+			}
+			break;
+		case ERadioServPsRdsSignalStatus:
+			{
+			TBool signal;
+   			iProperty.Get(signal);
+       		iObserver.RadioEventRdsSignalChange(signal);
+			}
+			break;
+		case ERadioServPsAutoSwitchStatus:
+			{
+			TBool autoSwitch;
+			iProperty.Get(autoSwitch);
+			iObserver.RadioEventRdsAutomaticSwitchingChange(autoSwitch);
+			}
+			break;
+		case ERadioServPsProgrammeIdentification:
+			{
+			TInt pi;
+			iProperty.Get(pi);
+			iObserver.RadioEventRdsDataPI(pi);
+			}
+			break;
+	    case ERadioServPsProgrammeType:
+	        {
+			TRsRdsProgrammeType pty;
+			iProperty.Get(pty);
+	        iObserver.RadioEventRdsDataPTY(pty);
+			}
+			break;
+		case ERadioServPsProgrammeService:
+			{
+			TRsRdsPSName ps;
+	 		iProperty.Get(ps);
+			iObserver.RadioEventRdsDataPS(ps);
+			}
+			break;
+		case ERadioServPsRadioText:
+			{
+			TRsRdsRadioText rt;
+			iProperty.Get(rt);
+	        iObserver.RadioEventRdsDataRT(rt);
+			}
+			break;
+    case ERadioServPsRadioTextPlusObjects:
+      {
+      TPckgBuf<TRsRdsRTPlusObjectData> objData;
+      TUint32 iClassType1;
+      TUint32 iClassType2;
+      TRsRdsRadioText aRTobject1;
+      TRsRdsRadioText aRTobject2;
+
+      iProperty.Get(objData);
+      
+      aRTobject1 = objData().aRtObj1;
+      iClassType1 = objData().iContentType1;
+      aRTobject2 = objData().aRtObj2;
+      iClassType2 = objData().iContentType2;
+
+      iObserver.RadioEventRdsDataRTplus( (TRsRdsRTplusClass)iClassType1, aRTobject1 );
+      iObserver.RadioEventRdsDataRTplus( (TRsRdsRTplusClass)iClassType2, aRTobject2 );
+      }
+      break;
+		case ERadioServPsClockTime:
+			{
+			TPckgBuf<TDateTime> rdsCt;
+			iProperty.Get(rdsCt);
+			iObserver.RadioEventRdsDataCT(rdsCt());
+			}
+			break;
+		case ERadioServPsTrafficAnnouncementStatus:
+			{
+			TBool taOn;
+ 			iProperty.Get(taOn);
+			iObserver.RadioEventRdsDataTA(taOn);
+			}
+			break;
+		case ERadioServPsAfSearchBegin:
+			{
+			iObserver.RadioEventRdsSearchBeginAF();
+			}
+			break;
+		case ERadioServPsAfSearchEnd:
+			{
+			TPckgBuf<TRsSettingsData> afData;
+			iProperty.Get(afData);
+			iObserver.RadioEventRdsSearchEndAF(afData().iError,
+				                     afData().iData1);	// Frequency
+			}
+			break;
+		default:
+			{
+			RADIO_RDEBUG(_L("[RADIO-SESS] CRadioEventHandler::RunL(): ERROR case default !!!"));
+			User::Panic(_L("RadioServer"), KErrGeneral );
+			}
+			break;
+		}
+	}
+
+//  End of File
+