diff -r 000000000000 -r 0ce1b5ce9557 audiostubs/fmradiotunercontrolstub/Src/FMRadioTunerControlStub.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/audiostubs/fmradiotunercontrolstub/Src/FMRadioTunerControlStub.cpp Thu Jan 14 07:14:53 2010 +0200 @@ -0,0 +1,1400 @@ +/* +* 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: +* Contains implementation of the CAdaptation class. +* Which holds RadioServer Console Test. +* +*/ + + + +// INCLUDE FILES +#include +#include "FMRadioTunerControlStub.h" + +// CONSTANTS +const TInt KReqTunerOn = 1; +const TInt KReqTunerOff = 2; +const TInt KReqSetFrequencyRange = 3; +const TInt KReqSetFrequency = 4; +const TInt KReqStationSeek = 5; +const TInt KReqAudioMode = 6; +const TInt KReqSetAudioMode = 7; +const TInt KReqMaxSignalStrength = 8; +const TInt KReqSignalStrength = 9; +const TInt KReqSquelch = 10; +const TInt KReqSetSquelch = 11; +//--------------------------------------- +const TInt KReqStationSeekByPTY = 12; +const TInt KReqStationSeekByTA = 13; +const TInt KReqStationSeekByTP = 14; +const TInt KReqGetFreqByPTY = 15; +const TInt KReqGetFreqByTA = 16; +const TInt KReqGetPSByPTY = 17; +const TInt KReqGetPSByTA = 18; + +const TInt KEuroAmericaMin = 87500000; +const TInt KEuroAmericaMax = 108000000; +const TInt KJapanMin = 76000000; +const TInt KJapanMax = 90000000; + +/* +KCBI 90.9 PTY = KRdsPtyReligion +KLTY 94.9 PTY = KRdsPtyReligion +KVIL 103.7 PTY = KRdsPtyLightClassical +KHKS 106.1 PTY = KRdsPtyRockMusic +*/ + +const TInt KFrequency1 = 90900000; // TA, TP +const TInt KFrequency2 = 94900000; // Alternate Frequency of KFrequency1 +const TInt KFrequency3 = 103700000; +const TInt KFrequency4 = 106100000; // TP + +// DATA TYPES +struct TRadioMessageRequestData + { + TSglQueLink iLink; + TInt iRequest; + TInt iError; + }; + +// ============================= LOCAL FUNCTIONS =============================== + +/** +* Class CTuner +* @lib FMRadioTunerControlStub.lib +* @since Series 60 3.0 +*/ +class CTuner : public CTimer + { + public: + static CTuner* NewL( MFMRadioTunerControlObserver& aObserver ) + { + CTuner* self = new( ELeave ) CTuner(aObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + }; + + virtual ~CTuner() + { + iFreqList.Close(); + iPsList.Close(); + iRTplusTags.Close(); + if ( IsActive() ) + { + Cancel(); + } + TRadioMessageRequestData* data; + while ( !iRequestQue.IsEmpty() ) + { + data = iRequestQue.First(); + iRequestQue.Remove(*data); + delete data; + } + }; + + void CompleteRequest( TInt aRequest, TInt aError ) + { + TRadioMessageRequestData *data = new (ELeave) TRadioMessageRequestData; + data->iRequest = aRequest; + data->iError = aError; + // Add it to the queue + iRequestQue.AddLast(*data); + if ( !IsActive() ) + { + After(500000); // 0.5 sec by default + } + }; + + void Reset() + { + iTunerOn = EFalse; + iRange = EFMRadioFrequencyEuroAmerica; + iFrequency = KEuroAmericaMin; + iSigStrength = 0; + iMode = EFMRadioAudioStereo; + iSquelch = ETrue; + ResetRds(); + }; + + void ResetRds() + { + iNotifyOn = EFalse; + iRdsSignal = EFalse; + iRdsData = 0; + iAutoSwitch = EFalse; + iFreqList.Reset(); + iPsList.Reset(); + iPi = 0; + iPty = KRdsPtyNone; + iPs = _L8(""); + iRt = _L8(""); + iRTplusTags.Reset(); + // Hardcoded to 2007/11/10 7:35 + iCt.Set(2007,ENovember,10,7,35,0,0); + }; + + void SendRdsData() + { + // Make sure we are still in RDS channel + if ( !iRdsSignal || !iNotifyOn ) + { + return; + } + + if( iRdsData & ERdsProgrammeIdentification ) + { + iRdsObserver->RdsDataPI(iPi); + } + if( iRdsData & ERdsProgrammeType ) + { + iRdsObserver->RdsDataPTY(iPty); + } + if( iRdsData & ERdsProgrammeService ) + { + iRdsObserver->RdsDataPS(iPs); + } + if( iRdsData & ERdsRadioText ) + { + iRdsObserver->RdsDataRT(iRt, iRTplusTags); + } + if( iRdsData & ERdsClockTime ) + { + iRdsObserver->RdsDataCT(iCt); + } + }; + + void SendRdsAf(TBool aBegin) + { + if (aBegin) + { + iRdsObserver->RdsSearchBeginAF(); + } + else + { + iFrequency = KFrequency2; + iSigStrength = 2; + iPs = _L8("KLTY"); + iRdsObserver->RdsSearchEndAF(iError, iFrequency); + } + }; + + + private: + void DoCancel() + {}; + + void RunL() + { + TRadioMessageRequestData* data; + data = iRequestQue.First(); + iRequestQue.Remove(*data); + iRequest = data->iRequest; + iError = data->iError; + delete data; + + switch (iRequest) + { + case KReqTunerOn: + iObserver->TunerOnComplete(iError); + break; + case KReqTunerOff: + iObserver->TunerOffComplete(iError); + break; + case KReqSetFrequencyRange: + iObserver->SetFrequencyRangeComplete(iError); + break; + case KReqSetFrequency: + iObserver->SetFrequencyComplete(iError); + break; + case KReqStationSeek: + iObserver->StationSeekComplete(iError, iFrequency); + break; + case KReqAudioMode: + iObserver->AudioModeComplete(iError, iMode); + break; + case KReqSetAudioMode: + iObserver->SetAudioModeComplete(iError); + break; + case KReqMaxSignalStrength: + iObserver->MaxSignalStrengthComplete(iError, 15); + break; + case KReqSignalStrength: + iObserver->SignalStrengthComplete(iError, iSigStrength); + break; + case KReqSquelch: + iObserver->SquelchComplete(iError, iSquelch); + break; + case KReqSetSquelch: + iObserver->SetSquelchComplete(iError); + break; +// ----------------------------------------------------------------------------- +// RDS + case KReqStationSeekByPTY: + iRdsObserver->StationSeekByPTYComplete(iError, iFrequency); + break; + case KReqStationSeekByTA: + iRdsObserver->StationSeekByTAComplete(iError, iFrequency); + break; + case KReqStationSeekByTP: + iRdsObserver->StationSeekByTPComplete(iError, iFrequency); + break; + case KReqGetFreqByPTY: + iRdsObserver->GetFreqByPTYComplete(iError, iFreqList); + break; + case KReqGetFreqByTA: + iRdsObserver->GetFreqByTAComplete(iError, iFreqList); + break; + case KReqGetPSByPTY: + iRdsObserver->GetPSByPTYComplete(iError, iPsList); + break; + case KReqGetPSByTA: + iRdsObserver->GetPSByTAComplete(iError, iPsList); + break; +// RDS +// ----------------------------------------------------------------------------- + default: + break; + } + + // Process the next item in the queue if any + if ( !iRequestQue.IsEmpty() ) + { + // there is at least one element in the linked list + After(100000); // 0.1 sec by default + } + }; + + private: + CTuner( MFMRadioTunerControlObserver& aObserver ) + : CTimer(EPriorityStandard), + iObserver(&aObserver), + iRdsObserver(NULL), + iRequestQue(_FOFF( TRadioMessageRequestData, iLink )) + {}; + + void ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + Reset(); + }; + + private: // Data + // Tuner observer + MFMRadioTunerControlObserver* iObserver; + // Rds observer + MRdsControlObserver* iRdsObserver; + // Request queue + TSglQue iRequestQue; + // Outstanding request + TInt iRequest; + TInt iError; + + // Tuner data + TBool iTunerOn; + TFMRadioFrequencyRange iRange; + TInt iFrequency; + TInt iSigStrength; + TFMRadioAudioMode iMode; + TBool iSquelch; + + // RDS data + TBool iNotifyOn; + TBool iRdsSignal; + TUint32 iRdsData; + TBool iAutoSwitch; + RArray iFreqList; + RArray iPsList; + TInt iPi; + TRdsProgrammeType iPty; + TRdsPSName iPs; + TRdsRadioText iRt; + RArray iRTplusTags; + TDateTime iCt; + + private: // Friend classes + friend class CAdaptation; + friend class CRdsGenerator; + }; + +/** +* Class CRdsGenerator +* @lib FMRadioTunerControlStub.lib +* @since Series 60 3.2 +*/ +class CRdsGenerator : public CTimer + { + public: + static CRdsGenerator* NewL(CTuner& aTuner) + { + CRdsGenerator* self = new( ELeave ) CRdsGenerator(aTuner); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + }; + + virtual ~CRdsGenerator() + { + if ( IsActive() ) + { + Cancel(); + } + }; + + void Start() + { + if ( IsActive() ) + { + Cancel(); + } + After(1000000); // 1 sec + }; + + private: + void DoCancel() + {}; + + void RunL() + { + iTuner->SendRdsData(); + }; + + private: + CRdsGenerator( CTuner& aTuner ) + : CTimer(EPriorityStandard), + iTuner(&aTuner) + {}; + + void ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + }; + + private: // Data + // Tuner + CTuner* iTuner; + }; + +/** +* Class CAfSwitcher +* @lib FMRadioTunerControlStub.lib +* @since Series 60 3.2 +*/ +class CAfSwitcher : public CTimer + { + public: + static CAfSwitcher* NewL(CTuner& aTuner) + { + CAfSwitcher* self = new( ELeave ) CAfSwitcher(aTuner); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop(); + return self; + }; + + virtual ~CAfSwitcher() + { + if ( IsActive() ) + { + Cancel(); + } + }; + + void Start() + { + if ( IsActive() ) + { + Cancel(); + } + iBegin = ETrue; + After(3000000); // 3 sec + }; + + private: + void DoCancel() + {}; + + void RunL() + { + iTuner->SendRdsAf(iBegin); + if (iBegin) + { + iBegin = EFalse; + After(2000000); // 2 sec + } + }; + + private: + CAfSwitcher( CTuner& aTuner ) + : CTimer(EPriorityStandard), + iTuner(&aTuner), + iBegin(EFalse) + {}; + + void ConstructL() + { + CTimer::ConstructL(); + CActiveScheduler::Add(this); + }; + + private: // Data + // Tuner + CTuner* iTuner; + TBool iBegin; + }; + +EXPORT_C CFMRadioTunerControl* CFMRadioTunerControl::NewL( + MFMRadioTunerControlObserver& aObserver ) + { + return CAdaptation::NewL(aObserver); + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CAdaptation::CAdaptation +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CAdaptation::CAdaptation() + : iTuner(NULL), + iRds(NULL), + iRdsAf(NULL) + { + } + +// ----------------------------------------------------------------------------- +// CAdaptation::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CAdaptation::ConstructL( + MFMRadioTunerControlObserver& aObserver ) + { + iTuner = CTuner::NewL(aObserver); + iRds = CRdsGenerator::NewL(*iTuner); + iRdsAf = CAfSwitcher::NewL(*iTuner); + } + +// ----------------------------------------------------------------------------- +// CAdaptation::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CAdaptation* CAdaptation::NewL( + MFMRadioTunerControlObserver& aObserver ) + { + CAdaptation* self = new( ELeave ) CAdaptation(); + CleanupStack::PushL( self ); + self->ConstructL(aObserver); + CleanupStack::Pop(); + return self; + } + +// Destructor +CAdaptation::~CAdaptation() + { + delete iRdsAf; + delete iRds; + delete iTuner; + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::TunerOn( + TFMRadioFrequencyRange aRange, + TInt aFrequency ) + { + if ( ValidFrequency(aRange, aFrequency) ) + { + iTuner->iTunerOn = ETrue; + iTuner->iRange = aRange; + SetFrequencySettings(aFrequency); + iTuner->CompleteRequest(KReqTunerOn, KErrNone); + } + else + { + iTuner->CompleteRequest(KReqTunerOn, KFMRadioErrFrequencyOutOfBandRange); + } + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelTunerOn() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::TunerOff() + { + iTuner->Reset(); + iTuner->CompleteRequest(KReqTunerOff, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelTunerOff() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SetFrequencyRange( + TFMRadioFrequencyRange aRange ) + { + iTuner->iRange = aRange; + iTuner->CompleteRequest(KReqSetFrequencyRange, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSetFrequencyRange() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SetFrequency( + TInt aFrequency ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqSetFrequency, KFMRadioErrNotPermittedInCurrentState); + return; + } + + if ( ValidFrequency(iTuner->iRange, aFrequency) ) + { + SetFrequencySettings(aFrequency); + iTuner->CompleteRequest(KReqSetFrequency, KErrNone); + } + else + { + iTuner->CompleteRequest(KReqTunerOn, KFMRadioErrFrequencyNotValid); + } + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSetFrequency() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::StationSeek( + TFMRadioSeekDirection aDirection ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqStationSeek, KFMRadioErrNotPermittedInCurrentState); + return; + } + + if ( aDirection == EFMRadioSeekUp ) + { + if ( iTuner->iFrequency < KFrequency1 ) + { + SetFrequencySettings(KFrequency1); + } + else if ( (iTuner->iFrequency >= KFrequency1) && (iTuner->iFrequency < KFrequency2) ) + { + SetFrequencySettings(KFrequency2); + } + else if ( (iTuner->iFrequency >= KFrequency2) && (iTuner->iFrequency < KFrequency3) ) + { + SetFrequencySettings(KFrequency3); + } + else if ( (iTuner->iFrequency >= KFrequency3) && (iTuner->iFrequency < KFrequency4) ) + { + SetFrequencySettings(KFrequency4); + } + else // iTuner->iFrequency >= KFrequency4 + { + SetFrequencySettings(KFrequency1); + } + } + else + { + if ( iTuner->iFrequency > KFrequency4 ) + { + SetFrequencySettings(KFrequency4); + } + else if ( (iTuner->iFrequency <= KFrequency4) && (iTuner->iFrequency > KFrequency3) ) + { + SetFrequencySettings(KFrequency3); + } + else if ( (iTuner->iFrequency <= KFrequency3) && (iTuner->iFrequency > KFrequency2) ) + { + SetFrequencySettings(KFrequency2); + } + else if ( (iTuner->iFrequency <= KFrequency2) && (iTuner->iFrequency > KFrequency1) ) + { + SetFrequencySettings(KFrequency1); + } + else // iTuner->iFrequency < KFrequency1 + { + SetFrequencySettings(KFrequency4); + } + } + + iTuner->CompleteRequest(KReqStationSeek, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelStationSeek() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::AudioMode() + { + iTuner->CompleteRequest(KReqAudioMode, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelAudioMode() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SetAudioMode( + TFMRadioAudioMode aMode ) + { + iTuner->iMode = aMode; + iTuner->CompleteRequest(KReqSetAudioMode, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSetAudioMode() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::MaxSignalStrength() + { + iTuner->CompleteRequest(KReqMaxSignalStrength, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelMaxSignalStrength() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SignalStrength() + { + iTuner->CompleteRequest(KReqSignalStrength, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSignalStrength() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::Squelch() + { + iTuner->CompleteRequest(KReqSquelch, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSquelch() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SetSquelch( + TBool aEnabled ) + { + iTuner->iSquelch = aEnabled; + iTuner->CompleteRequest(KReqSetSquelch, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelSetSquelch() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::BufferToBeFilled( + TDes8& /*aBuffer*/ ) + { + // Not used. + } + +// ----------------------------------------------------------------------------- +// +TFMRadioCapabilities CAdaptation::Capabilities() + { + TFMRadioCapabilities cap; + cap.iSampleRate = EFMRadioSampleRate48000Hz; + cap.iChannels = EFMRadioAudioMono | EFMRadioAudioStereo; + //const TUint32 KMMFFourCCCodePCM16 = 0x36315020; //(' ', 'P', '1', '6') + cap.iEncoding = 0x36315020; + + cap.iTunerBands = EFMRadioFrequencyEuroAmerica | EFMRadioFrequencyJapan; + //cap.iTunerFunctions = ETunerAvailableInOfflineMode | ETunerRdsSupport; + cap.iTunerFunctions = 0x01 | 0x02; + return cap; + } + +/********************************************************************* +* RD_FM_RADIO_ENHANCEMENTS +**********************************************************************/ +#ifdef RD_FM_RADIO_ENHANCEMENTS + +// ----------------------------------------------------------------------------- +// +MRdsControl* CAdaptation::RdsControl( + MRdsControlObserver& aObserver ) + { + iTuner->iRdsObserver = &aObserver; + return this; + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetFrequencyRange( + TFMRadioFrequencyRange& aRange, + TInt& aMinFreq, + TInt& aMaxFreq ) const + { + aRange = iTuner->iRange; + if ( aRange == EFMRadioFrequencyEuroAmerica ) + { + aMinFreq = KEuroAmericaMin; + aMaxFreq = KEuroAmericaMax; + } + else // aRange = EFMRadioFrequencyJapan; + { + aMinFreq = KJapanMin; + aMaxFreq = KJapanMax; + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetCapabilities( + TRdsCapabilities& aCaps ) const + { + aCaps.iRdsFunctions = ERdsProgrammeIdentification | ERdsProgrammeType | ERdsProgrammeService + | ERdsRadioText | ERdsClockTime | ERdsAlternateFrequency; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetRdsSignalStatus( + TBool& aRdsSignal ) const + { + aRdsSignal = iTuner->iRdsSignal; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::NotifyRdsDataChange( + TRdsData aRdsData ) + { + iTuner->iRdsData = aRdsData.iRdsFunctions; + // We'll only generate events for ERdsProgrammeIdentification, ERdsProgrammeType, + // ERdsProgrammeService for now. + if ( (aRdsData.iRdsFunctions & ERdsProgrammeIdentification) || + (aRdsData.iRdsFunctions & ERdsProgrammeType) || + (aRdsData.iRdsFunctions & ERdsProgrammeService) ) + { + iTuner->iNotifyOn = ETrue; + } + + if ( (iTuner->iRdsSignal) && (iTuner->iNotifyOn) ) + { + iRds->Start(); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelNotifyRdsDataChange() + { + iTuner->iRdsData = 0; + iTuner->iNotifyOn = EFalse; + iRds->Cancel(); + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::SetAutomaticSwitching( + TBool aAuto ) + { + iTuner->iAutoSwitch = aAuto; + if ( aAuto && (iTuner->iFrequency == KFrequency1) ) + { + iRdsAf->Start(); + } + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetAutomaticSwitching( + TBool& aAuto ) + { + aAuto = iTuner->iAutoSwitch; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelAFSearch() + { + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::SetAutomaticTrafficAnnouncement( + TBool /*aAuto*/ ) + { + return KErrNotSupported; + }; + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetAutomaticTrafficAnnouncement( + TBool& aAuto ) + { + aAuto = EFalse; + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::StationSeekByPTY( + TRdsProgrammeType aPty, + TBool aSeekUp ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqStationSeekByPTY, KRdsErrNotPermittedInCurrentState); + return; + } + + TInt err = KErrNone; + switch ( aPty ) + { + case KRdsPtyReligion: + if ( aSeekUp ) + { + if ( iTuner->iFrequency < KFrequency1 ) + { + SetFrequencySettings(KFrequency1); + } + else if ( (iTuner->iFrequency >= KFrequency1) && (iTuner->iFrequency < KFrequency2) ) + { + SetFrequencySettings(KFrequency2); + } + else // iTuner->iFrequency >= KFrequency2 + { + SetFrequencySettings(KFrequency1); + } + } + else + { + if ( iTuner->iFrequency > KFrequency2 ) + { + SetFrequencySettings(KFrequency2); + } + else if ( (iTuner->iFrequency <= KFrequency2) && (iTuner->iFrequency > KFrequency1) ) + { + SetFrequencySettings(KFrequency1); + } + else // iTuner->iFrequency < KFrequency1 + { + SetFrequencySettings(KFrequency2); + } + } + break; + case KRdsPtyLightClassical: + SetFrequencySettings(KFrequency3); + break; + case KRdsPtyRockMusic: + SetFrequencySettings(KFrequency4); + break; + default: + err = KErrNotFound; + break; + } + iTuner->CompleteRequest(KReqStationSeekByPTY, err); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::StationSeekByTA( + TBool aSeekUp ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqStationSeekByTA, KRdsErrNotPermittedInCurrentState); + return; + } + + // Just for testing purpose, if aSeekUp return KFrequency1, else return KErrNotFound. + if ( aSeekUp ) + { + SetFrequencySettings(KFrequency1); + iTuner->CompleteRequest(KReqStationSeekByTA, KErrNone); + } + else + { + iTuner->CompleteRequest(KReqStationSeekByTA, KErrNotFound); + } + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::StationSeekByTP( + TBool aSeekUp ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqStationSeekByTP, KRdsErrNotPermittedInCurrentState); + return; + } + + if ( aSeekUp ) + { + if ( iTuner->iFrequency < KFrequency1 ) + { + SetFrequencySettings(KFrequency1); + } + else if ( (iTuner->iFrequency >= KFrequency1) && (iTuner->iFrequency < KFrequency4) ) + { + SetFrequencySettings(KFrequency4); + } + else // iTuner->iFrequency >= KFrequency4 + { + SetFrequencySettings(KFrequency1); + } + } + else + { + if ( iTuner->iFrequency > KFrequency4 ) + { + SetFrequencySettings(KFrequency4); + } + else if ( (iTuner->iFrequency <= KFrequency4) && (iTuner->iFrequency > KFrequency1) ) + { + SetFrequencySettings(KFrequency1); + } + else // iTuner->iFrequency < KFrequency1 + { + SetFrequencySettings(KFrequency4); + } + } + + iTuner->CompleteRequest(KReqStationSeekByTP, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelRdsStationSeek() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::GetFreqByPTY( + TRdsProgrammeType aPty ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqGetFreqByPTY, KRdsErrNotPermittedInCurrentState); + return; + } + + TInt err = KErrNone; + iTuner->iFreqList.Reset(); + switch ( aPty ) + { + case KRdsPtyReligion: + iTuner->iFreqList.Append(KFrequency1); + iTuner->iFreqList.Append(KFrequency2); + break; + case KRdsPtyLightClassical: + iTuner->iFreqList.Append(KFrequency3); + break; + case KRdsPtyRockMusic: + iTuner->iFreqList.Append(KFrequency4); + break; + default: + err = KErrNotFound; + break; + } + iTuner->CompleteRequest(KReqGetFreqByPTY, err); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelGetFreqByPTY() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::GetFreqByTA() + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqGetFreqByTA, KRdsErrNotPermittedInCurrentState); + return; + } + + iTuner->iFreqList.Reset(); + iTuner->iFreqList.Append(KFrequency1); + iTuner->CompleteRequest(KReqGetFreqByTA, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelGetFreqByTA() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::GetPSByPTY + ( TRdsProgrammeType aPty ) + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqGetPSByPTY, KRdsErrNotPermittedInCurrentState); + return; + } + + TInt err = KErrNone; + iTuner->iPsList.Reset(); + switch ( aPty ) + { + case KRdsPtyReligion: + iTuner->iPsList.Append(_L8("KCBI")); + iTuner->iPsList.Append(_L8("KLTY")); + break; + case KRdsPtyLightClassical: + iTuner->iPsList.Append(_L8("KVIL")); + break; + case KRdsPtyRockMusic: + iTuner->iPsList.Append(_L8("KHKS")); + break; + default: + err = KErrNotFound; + break; + } + iTuner->CompleteRequest(KReqGetPSByPTY, err); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelGetPSByPTY() + { + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::GetPSByTA() + { + if ( !iTuner->iTunerOn ) + { + iTuner->CompleteRequest(KReqGetPSByTA, KRdsErrNotPermittedInCurrentState); + return; + } + + iTuner->iPsList.Reset(); + iTuner->iPsList.Append(_L8("KCBI")); + iTuner->CompleteRequest(KReqGetPSByTA, KErrNone); + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::CancelGetPSByTA() + { + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetProgrammeIdentification( + TInt& aPi ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iRdsSignal ) + { + aPi = iTuner->iPi; + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetProgrammeType( + TRdsProgrammeType& aPty ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iRdsSignal ) + { + aPty = iTuner->iPty; + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetProgrammeService( + TRdsPSName& aPs ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iRdsSignal ) + { + aPs = iTuner->iPs; + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetRadioText( + TRdsRadioText& aRt, + RArray& /*aRTplusTags*/ ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iRdsSignal ) + { + aRt = iTuner->iRt; + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetClockTime( + TDateTime& aCt ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iRdsSignal ) + { + // Hardcoded to 2007/11/10 7:35 + aCt.Set(2007,ENovember,10,7,35,0,0); + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetTrafficAnnouncementStatus( + TBool& aTaStatus ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( iTuner->iFrequency == KFrequency1 ) + { + aTaStatus = ETrue; + return KErrNone; + } + else if ( iTuner->iFrequency == KFrequency4 ) + { + aTaStatus = EFalse; + return KErrNone; + } + else + { + return KErrNotFound; + + } + } + +// ----------------------------------------------------------------------------- +// +TInt CAdaptation::GetTrafficProgrammeStatus( + TBool& aTpStatus ) + { + if ( !iTuner->iTunerOn ) + { + return KRdsErrNotPermittedInCurrentState; + } + + if ( (iTuner->iFrequency == KFrequency1) || (iTuner->iFrequency == KFrequency4) ) + { + aTpStatus = ETrue; + return KErrNone; + } + else if ( (iTuner->iFrequency == KFrequency2) || (iTuner->iFrequency == KFrequency3) ) + { + aTpStatus = EFalse; + return KErrNone; + } + else + { + return KErrNotFound; + } + } + +#endif //#ifdef RD_FM_RADIO_ENHANCEMENTS + +// ----------------------------------------------------------------------------- +// +TBool CAdaptation::ValidFrequency( + TFMRadioFrequencyRange aRange, + TInt aFrequency ) + { + if ( aRange == EFMRadioFrequencyEuroAmerica ) + { + if ( (aFrequency < KEuroAmericaMin) || (aFrequency > KEuroAmericaMax) ) + { + return EFalse; + } + } + else // aRange = EFMRadioFrequencyJapan; + { + if ( (aFrequency < KJapanMin) || (aFrequency > KJapanMax) ) + { + return EFalse; + } + } + return ETrue; + } + +// ----------------------------------------------------------------------------- +// +void CAdaptation::SetFrequencySettings( + TInt aFrequency ) + { + iTuner->iFrequency = aFrequency; + switch ( aFrequency ) + { + case KFrequency1: + iTuner->iSigStrength = 1; + iTuner->iRdsSignal = ETrue; + iTuner->iPi = 1000; + iTuner->iPty = KRdsPtyReligion; + iTuner->iPs = _L8("KCBI"); + iTuner->iRt = _L8("Hail to the King"); + if ( iTuner->iAutoSwitch ) + { + iRdsAf->Start(); + } + break; + case KFrequency2: + iTuner->iSigStrength = 2; + iTuner->iRdsSignal = ETrue; + iTuner->iPi = 1000; + iTuner->iPty = KRdsPtyReligion; + iTuner->iPs = _L8("KLTY"); + iTuner->iRt = _L8("He Knows My Name"); + break; + case KFrequency3: + iTuner->iSigStrength = 3; + iTuner->iRdsSignal = ETrue; + iTuner->iPi = 2000; + iTuner->iPty = KRdsPtyLightClassical; + iTuner->iPs = _L8("KVIL"); + iTuner->iRt = _L8("Power of Love"); + break; + case KFrequency4: + iTuner->iSigStrength = 4; + iTuner->iRdsSignal = ETrue; + iTuner->iPi = 3000; + iTuner->iPty = KRdsPtyRockMusic; + iTuner->iPs = _L8("KHKS"); + iTuner->iRt = _L8("The Reason"); + break; + default: + iTuner->iSigStrength = 5; + iTuner->iRdsSignal = EFalse; + break; + } + if ( (iTuner->iRdsSignal) && (iTuner->iNotifyOn) ) + { + iRds->Start(); + } + } + +// ========================== OTHER EXPORTED FUNCTIONS ========================= + + +// End of File +