mmserv/radioutility/radioserver/Server/Src/RadioServerFMTuner.cpp
changeset 0 71ca22bcf22a
child 6 e35735ece90c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmserv/radioutility/radioserver/Server/Src/RadioServerFMTuner.cpp	Tue Feb 02 01:08:46 2010 +0200
@@ -0,0 +1,601 @@
+/*
+* 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:  This class implements an interface to FM tuner.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include    "RadioServerFmTuner.h"
+#include    "RadioDebug.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::CRadioServerFMTuner
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CRadioServerFMTuner::CRadioServerFMTuner(
+	MRadioServerFMTunerObserver& aObserver )
+	:	CActive(EPriorityStandard),
+		iObserver(aObserver),
+		iFmTunerQue(_FOFF( TRadioFmTunerData, iLink )),
+		iFmTunerData(NULL)
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::ConstructL()
+    {
+	RADIO_RDEBUG(_L("[RADIO-SVR] CRadioServerFMTuner::ConstructL()"));
+	CActiveScheduler::Add(this);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CRadioServerFMTuner* CRadioServerFMTuner::NewL(
+	MRadioServerFMTunerObserver& aObserver )
+    {
+    CRadioServerFMTuner* self = new( ELeave ) CRadioServerFMTuner(aObserver);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// Destructor
+CRadioServerFMTuner::~CRadioServerFMTuner()
+    {
+	RADIO_RDEBUG(_L("[RADIO-SVR] CRadioServerFMTuner::~CRadioServerFMTuner()"));
+	if ( IsActive() )
+		{
+		Cancel();
+		}
+
+	while ( !iFmTunerQue.IsEmpty() )
+		{
+		iFmTunerData = iFmTunerQue.First();
+		iFmTunerQue.Remove(*iFmTunerData);
+		delete iFmTunerData;
+		}
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::TunerOnComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::TunerOnComplete(
+	TFMRadioTunerError aError )
+    {
+	CompleteNotification(ETunerEventTunerOn, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::TunerOffComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::TunerOffComplete(
+	TFMRadioTunerError aError )
+    {
+	CompleteNotification(ETunerEventTunerOff, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SetFrequencyRangeComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SetFrequencyRangeComplete(
+	TFMRadioTunerError aError )
+    {
+	CompleteNotification(ETunerEventSetFrequencyRange, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SetFrequencyComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SetFrequencyComplete(
+	TFMRadioTunerError aError )
+    {
+	CompleteNotification(ETunerEventSetFrequency, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::StationSeekComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::StationSeekComplete(
+	TFMRadioTunerError aError,
+	TInt aFrequency )
+    {
+	iFrequency = aFrequency;
+	CompleteNotification(ETunerEventStationSeek, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::AudioModeComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::AudioModeComplete(
+	TFMRadioTunerError aError,
+	TFMRadioAudioMode aMode )
+    {
+	iMode = aMode;
+	CompleteNotification(ETunerEventAudioMode, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SetAudioModeComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SetAudioModeComplete(
+	TFMRadioTunerError aError )
+    {
+	CompleteNotification(ETunerEventSetAudioMode, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::MaxSignalStrengthComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::MaxSignalStrengthComplete(
+	TFMRadioTunerError aError,
+	TInt aStrength )
+    {
+	iStrength = aStrength;
+	CompleteNotification(ETunerEventMaxSignalStrength, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SignalStrengthComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SignalStrengthComplete(
+	TFMRadioTunerError aError,
+	TInt aStrength )
+    {
+	iStrength = aStrength;
+	CompleteNotification(ETunerEventSignalStrength, aError);
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SquelchComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SquelchComplete(
+	TFMRadioTunerError aError,
+	TBool aEnabled )
+	{
+	iEnabled = aEnabled;
+	CompleteNotification(ETunerEventSquelch, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::SetSquelchComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::SetSquelchComplete(
+	TFMRadioTunerError aError )
+	{
+	CompleteNotification(ETunerEventSetSquelch, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::BufferFilled
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::BufferFilled(
+	TDes8& /*aBuffer*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RadioEventAntennaStatusChange
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RadioEventAntennaStatusChange(
+	TBool aAttached )
+	{
+	iAttached = aAttached;
+	CompleteNotification(ETunerEventAntennaStatusChange);
+	}
+
+#ifdef RD_FM_RADIO_ENHANCEMENTS
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RadioEventTunerControlChange
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RadioEventTunerControlChange(
+	TInt aError )
+	{
+	CompleteNotification(ETunerEventTunerControlChange, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::StationSeekByPTYComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::StationSeekByPTYComplete(
+	TInt aError,
+	TInt aFrequency )
+	{
+	iFrequency = aFrequency;
+	CompleteNotification(ETunerEventStationSeekByPTY, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::StationSeekByTAComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::StationSeekByTAComplete(
+	TInt aError,
+	TInt aFrequency )
+	{
+	iFrequency = aFrequency;
+	CompleteNotification(ETunerEventStationSeekByTA, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::StationSeekByTPComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::StationSeekByTPComplete(
+	TInt aError,
+	TInt aFrequency )
+	{
+	iFrequency = aFrequency;
+	CompleteNotification(ETunerEventStationSeekByTP, aError);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::GetFreqByPTYComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::GetFreqByPTYComplete(
+	TInt /*aError*/,
+	RArray<TInt>& /*aFreqList*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::GetFreqByTAComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::GetFreqByTAComplete(
+	TInt /*aError*/,
+	RArray<TInt>& /*aFreqList*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::GetPSByPTYComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::GetPSByPTYComplete(
+	TInt /*aError*/,
+	RArray<TRdsPSName>& /*aPsList*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::GetPSByTAComplete
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::GetPSByTAComplete(
+	TInt /*aError*/,
+	RArray<TRdsPSName>& /*aPsList*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataPI
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataPI(
+	TInt aPi )
+	{
+	iObserver.RdsDataPI(aPi);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataPTY
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataPTY(
+	TRdsProgrammeType aPty )
+	{
+	iObserver.RdsDataPTY(aPty);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataPS
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataPS(
+	TRdsPSName& aPs )
+	{
+	iObserver.RdsDataPS(aPs);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataRT
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataRT(
+	TRdsRadioText& aRt,
+	RArray<TRdsRTplusTag>& aRTplusTags )
+	{
+	iObserver.RdsDataRT(aRt, aRTplusTags);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataCT
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataCT(
+	TDateTime& aCt )
+	{
+	iObserver.RdsDataCT(aCt);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsDataTA
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsDataTA(
+	TBool aTaOn )
+	{
+	iObserver.RdsDataTA(aTaOn);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsSearchBeginAF
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsSearchBeginAF()
+	{
+	iObserver.RdsSearchBeginAF();
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsSearchEndAF
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsSearchEndAF(
+	TInt aError,
+	TInt aFrequency )
+	{
+	iObserver.RdsSearchEndAF(aError, aFrequency);
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsStationChangeTA
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsStationChangeTA(
+	TInt /*aFrequency*/ )
+	{
+	// Not supported
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RdsEventSignalChange
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RdsEventSignalChange(
+	TBool aSignal )
+	{
+	iObserver.RdsEventSignalChange(aSignal);
+	}
+
+#endif //RD_FM_RADIO_ENHANCEMENTS
+
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::DoCancel
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::DoCancel()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::RunL
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::RunL()
+    {
+	RADIO_RDEBUG_INT2(_L("[RADIO-SVR] CRadioServerFMTuner::RunL(): Err[%d] Event[%d]"), iFmTunerData->iError, iFmTunerData->iEvent);
+	TInt error = MapTunerError(iFmTunerData->iError);
+	switch ( iFmTunerData->iEvent )
+		{
+		case ETunerEventTunerOn:
+			iObserver.TunerOnComplete(error);
+			break;
+		case ETunerEventTunerOff:
+			iObserver.TunerOffComplete(error);
+			break;
+		case ETunerEventSetFrequencyRange:
+			iObserver.SetFrequencyRangeComplete(error);
+			break;
+		case ETunerEventSetFrequency:
+			iObserver.SetFrequencyComplete(error);
+			break;
+		case ETunerEventStationSeek:
+			iObserver.StationSeekComplete(error, iFrequency);
+			break;
+		case ETunerEventAudioMode:
+			if ( iMode == EFMRadioAudioStereo )
+				{
+				iObserver.AudioModeComplete(error, ETrue);
+				}
+			else
+				{
+				iObserver.AudioModeComplete(error, EFalse);
+				}
+			break;
+		case ETunerEventSetAudioMode:
+			iObserver.SetAudioModeComplete(error);
+			break;
+		case ETunerEventMaxSignalStrength:
+			iObserver.MaxSignalStrengthComplete(error, iStrength);
+			break;
+		case ETunerEventSignalStrength:
+			iObserver.SignalStrengthComplete(error, iStrength);
+			break;
+		case ETunerEventSquelch:
+			iObserver.SquelchComplete(error, iEnabled);
+			break;
+		case ETunerEventSetSquelch:
+			iObserver.SetSquelchComplete(error);
+			break;
+		case ETunerEventAntennaStatusChange:
+			iObserver.RadioEventAntennaStatusChange(iAttached);
+			break;
+		case ETunerEventTunerControlChange:
+			iObserver.RadioEventTunerControlChange(error);
+			break;
+		case ETunerEventStationSeekByPTY:
+			iObserver.StationSeekByPTYComplete(error, iFrequency);
+			break;
+		case ETunerEventStationSeekByTA:
+			iObserver.StationSeekByTAComplete(error, iFrequency);
+			break;
+		case ETunerEventStationSeekByTP:
+			iObserver.StationSeekByTPComplete(error, iFrequency);
+			break;
+		default:
+			RADIO_RDEBUG(_L("[RADIO-SVR] CRadioServerFMTuner::RunL(): ERROR case default !!!"));
+			break;
+		}
+	ProcessNextItemInQueue();
+	}
+
+// -----------------------------------------------------------------------------
+// CRadioServerFMTuner::CompleteNotification
+// This method completes the request status and sets the object active
+// to provide asynchronous behavior.
+// -----------------------------------------------------------------------------
+//
+void CRadioServerFMTuner::CompleteNotification(
+	TTunerEvent aEvent,
+	TFMRadioTunerError aError )
+    {
+	TRadioFmTunerData* data = NULL;
+	TRAPD(err, data = new (ELeave) TRadioFmTunerData);
+	if ( err != KErrNone )
+		{
+		RADIO_RDEBUG_INT(_L("[RADIO-SVR] CRadioServerFMTuner::CompleteNotification(): Err[%d]"), err);
+		return;
+		}
+	data->iEvent = aEvent;
+	data->iError = aError;
+	if ( iFmTunerData )
+		{
+		// Outstanding request exits; add it to the queue
+		iFmTunerQue.AddLast(*data);
+		}
+	else
+		{
+		// Set the current outstanding request
+		iFmTunerData = data;
+		TRequestStatus* stat = &iStatus;
+		User::RequestComplete(stat, KErrNone);
+		SetActive();
+		}
+    }
+
+// ----------------------------------------------------
+// CRadioServer::ProcessNextItemInQueue
+// ----------------------------------------------------
+//
+void CRadioServerFMTuner::ProcessNextItemInQueue()
+	{
+	delete iFmTunerData;
+	iFmTunerData = NULL;
+	if ( !iFmTunerQue.IsEmpty() )
+		{
+		// there is at least one element in the linked list
+		TRadioFmTunerData* data;
+		data = iFmTunerQue.First();
+		iFmTunerQue.Remove(*data);
+		iFmTunerData = data;
+		TRequestStatus* stat = &iStatus;
+		User::RequestComplete(stat, KErrNone);
+		SetActive();
+		}
+	}
+
+// ----------------------------------------------------
+// CRadioServerFMTuner::MapTunerError
+// ----------------------------------------------------
+//
+TInt CRadioServerFMTuner::MapTunerError(
+	TFMRadioTunerError aError )
+	{
+	TInt err;
+	switch ( aError )
+		{
+		case KFMRadioErrHardwareFaulty:
+		case KRdsErrHardwareFaulty:
+			err = KRadioServErrHardwareFaulty;
+			break;
+		case KFMRadioErrTuning:
+			err = KRadioServErrTuning;
+			break;
+		case KFMRadioErrFrequencyOutOfBandRange:
+			err = KRadioServErrFrequencyOutOfBandRange;
+			break;
+		case KFMRadioErrFrequencyNotValid:
+			err = KRadioServErrFrequencyNotValid;
+			break;
+		case KFMRadioErrNotPermittedInCurrentState:
+		case KRdsErrNotPermittedInCurrentState:
+			err = KRadioServErrNotPermittedInCurrentState;
+			break;
+		case KFMRadioErrDuplicateRequest:
+		case KRdsErrDuplicateRequest:
+			err = KRadioServErrDuplicateRequest;
+			break;
+		case KFMRadioErrAntennaNotConnected:
+			err = KRadioServErrAntennaNotConnected;
+			break;
+		case KFMRadioErrFmTransmitterActive:
+			err = KRadioServErrFmTransmitterActive;
+			break;
+		default:
+			err = aError;
+			break;
+		}
+	RADIO_RDEBUG_INT2(_L("[RADIO-SVR] CRadioServerFMTuner::MapTunerError() [%d-%d]"), aError, err);
+	return err;
+	}
+
+//  End of File