diff -r cce62ebc198e -r 93c594350b9a fmradio/activeidleengine/src/fmradioactiveidleengine.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/fmradio/activeidleengine/src/fmradioactiveidleengine.cpp Wed Sep 01 12:30:32 2010 +0100 @@ -0,0 +1,386 @@ +/* +* Copyright (c) 2009 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: FMRadio active idle engine +* +*/ + + +#include + +#include "fmradioactiveidleengine.h" +#include "fmradioactiveidleenginenotifyhandler.h" + + +/** +* Listing of the subscribed P&S values. +* Changing the order of this enumeration requires changes to CFMRadioActiveIdleEngine::ConstructL as well. +*/ + +enum TFMRadioActiveIdleStatusObserverArray + { + //EFMRadioActiveIdleRadioVolumeObserver, /**< Index of the radio volume observer. */ + EFMRadioActiveIdleTuningStateObserver, /**< Index of the tuning state observer. */ + EFMRadioActiveIdleFrequencyObserver, /**< Index of the current frequency observer. */ + EFMRadioActiveIdleChannelChangeObserver, /**< Index of the current channel observer. */ + EFMRadioActiveIdleChannelModifyObserver, /**< Index of the channel modified observer. */ + EFMRadioActiveIdleMuteStateObserver, /**< Index of the muting state observer. */ + EFMRadioActiveIdleApplicationObserver, /**< Index of the FM Radio application observer used to observer whether the application is running or not. */ + EFMRadioActiveIdleHeadsetStatusObserver, /**< Index of the antenna status observer. */ + EFMRadioActiveIdleDecimalCountObserver, /**< Index of the frequency decimal count observer. */ + EFMRadioActiveIdlePowerStateObserver, /**< Index of the power state observer. */ + EFMRadioActiveIdleRDSProgramServiceObserver, /**< Index of the RDS Program Service observer. */ + EFMRadioPSDataRDSRadioText, + EFMRadioPSDataChannelName, + EFMRadioActiveIdlePresetListCountObserver, /**< Index of the active preset list count observer */ + EFMRadioActiveIdlePresetListFocusObserver /**< Index of the active preset list focus observer */ + }; + +// ==================== LOCAL FUNCTIONS ==================== + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CFMRadioActiveIdleEngine::CFMRadioActiveIdleEngine( MFMRadioActiveIdleEngineNotifyHandler& aObserver ) + : iObserver( aObserver ) + { + } + +// --------------------------------------------------------------------------- +// Second-phase constructor. +// --------------------------------------------------------------------------- +// +void CFMRadioActiveIdleEngine::ConstructL() + { + //User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioEnginePSUid, KFMRadioPSDataVolume, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataTuningState, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataFrequency, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataChannel, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataChannelDataChanged, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataRadioMuteState, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataApplicationRunning, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataHeadsetStatus, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataFrequencyDecimalCount, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataRadioPowerState, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataRDSProgramService, CFMRadioPropertyObserver::EFMRadioPropertyText ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataRDSRadioText, CFMRadioPropertyObserver::EFMRadioPropertyText ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioPSDataChannelName, CFMRadioPropertyObserver::EFMRadioPropertyText ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioActiveIdlePresetListCount, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + User::LeaveIfError( iPropertyObserverArray.Append( CFMRadioPropertyObserver::NewL( *this, KFMRadioPSUid, KFMRadioActiveIdlePresetListFocus, CFMRadioPropertyObserver::EFMRadioPropertyInt ) ) ); + } + +// --------------------------------------------------------------------------- +// Makes all pubsub objects to subscribe. +// --------------------------------------------------------------------------- +// +EXPORT_C void CFMRadioActiveIdleEngine::ActivateL() + { + for ( TInt i = 0; i < iPropertyObserverArray.Count(); i++ ) + { + iPropertyObserverArray[i]->ActivateL(); + } + } + +// --------------------------------------------------------------------------- +// Cancels all pubsub objects. +// --------------------------------------------------------------------------- +// +EXPORT_C void CFMRadioActiveIdleEngine::Cancel() + { + for ( TInt i = 0; i < iPropertyObserverArray.Count(); i++ ) + { + iPropertyObserverArray[i]->Cancel(); + } + } + +// --------------------------------------------------------------------------- +// Static constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CFMRadioActiveIdleEngine* CFMRadioActiveIdleEngine::NewL( MFMRadioActiveIdleEngineNotifyHandler& aObserver ) + { + CFMRadioActiveIdleEngine* self = new ( ELeave ) CFMRadioActiveIdleEngine( aObserver ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CFMRadioActiveIdleEngine::~CFMRadioActiveIdleEngine() + { + iPropertyObserverArray.ResetAndDestroy(); + iPropertyObserverArray.Close(); + /* + if ( iServ ) + { + iServ->Close(); + } + delete iServ; + */ + } + +// --------------------------------------------------------------------------- +// Invoked when a listened integer P&S key is changed. +// --------------------------------------------------------------------------- +// +void CFMRadioActiveIdleEngine::HandlePropertyChangeL( const TUid& aCategory, TUint aKey, TInt aValue ) + { + if ( aCategory == KFMRadioPSUid ) + { + switch ( aKey ) + {/* + case KFMRadioPSDataVolume: + iObserver.HandleRadioVolumeChangeL( aValue ); + break;*/ + + case KFMRadioPSDataTuningState: + iObserver.HandleTuningStateChangeL( static_cast( aValue ) ); + break; + + case KFMRadioPSDataFrequency: + iObserver.HandleFrequencyChangeL( aValue ); + break; + + case KFMRadioPSDataChannel: + // Sync the cache values for channel name and index + iPropertyObserverArray[EFMRadioPSDataChannelName]->ValueDes( ETrue ); + iObserver.HandleChannelChangeL( aValue ); + break; + + case KFMRadioPSDataChannelDataChanged: + iPropertyObserverArray[EFMRadioPSDataChannelName]->ValueDes( ETrue ); + iObserver.HandleChannelModifyL( aValue ); + break; + + case KFMRadioPSDataRadioMuteState: + iObserver.HandleMuteStateChangeL( static_cast( aValue ) ); + break; + + case KFMRadioPSDataApplicationRunning: + iObserver.HandleApplicationRunningStateChangeL( static_cast( aValue ) ); + break; + + case KFMRadioPSDataHeadsetStatus: + iObserver.HandleAntennaStatusChangeL( static_cast( aValue ) ); + break; + + case KFMRadioPSDataFrequencyDecimalCount: + iObserver.HandleFrequencyDecimalCountChangeL( static_cast( aValue ) ); + break; + + case KFMRadioPSDataRadioPowerState: + iObserver.HandlePowerStateChangeL( static_cast( aValue ) ); + break; + + case KFMRadioActiveIdlePresetListCount: + iObserver.HandlePresetListCountChangeL( aValue ); + break; + + case KFMRadioActiveIdlePresetListFocus: + //iObserver.HandlePresetListFocusChangeL( aValue ); + break; + + default: + break; + } + } + } + +// --------------------------------------------------------------------------- +// Invoked when a listened byte array P&S key is changed. +// --------------------------------------------------------------------------- +// +//void CFMRadioActiveIdleEngine::HandlePropertyChangeL( const TUid& /*aCategory*/, TUint /*aKey*/, const TDesC8& /*aValue*/ ) +// { +// } + +// --------------------------------------------------------------------------- +// Invoked when a listened text P&S key is changed. +// --------------------------------------------------------------------------- +// + +void CFMRadioActiveIdleEngine::HandlePropertyChangeL( const TUid& aCategory, TUint aKey, const TDesC& aValue ) + { + if ( aCategory == KFMRadioPSUid ) + { + switch ( aKey ) + { + case KFMRadioPSDataRDSProgramService: + iObserver.HandleRDSProgramServiceChangeL( aValue ); + break; + case KFMRadioPSDataRDSRadioText: + iObserver.HandleRDSRadioTextChangeL( aValue ); + break; + case KFMRadioPSDataChannelName: + // Sync the cache valuse for channel name and index + iPropertyObserverArray[EFMRadioActiveIdleChannelChangeObserver]->ValueInt( ETrue ); + iObserver.HandleChannelNameChangeL( aValue ); + break; + default: + break; + } + } + + } +// --------------------------------------------------------------------------- +// Invoked when a listened text P&S key is changed. +// --------------------------------------------------------------------------- +// +void CFMRadioActiveIdleEngine::HandlePropertyChangeL( const TUid&, TUint, const TDesC8&) + { + } + +// --------------------------------------------------------------------------- +// Invoked when an error has occured while fetching the new value of any listened P&S key. +// --------------------------------------------------------------------------- +// +void CFMRadioActiveIdleEngine::HandlePropertyChangeErrorL( const TUid& /*aCategory*/, TUint /*aKey*/, TInt aError ) + { + if (aError < 0) + { + // If any error should pass to this method, handle it like 'application shutdown'. + // This situation will realize whenever the application is killed, by accident/by system/by an app crash + // or due to change to offline mode. + HandlePropertyChangeL(KFMRadioPSUid, KFMRadioPSDataApplicationRunning, EFMRadioPSApplicationClosing); + } + } + +// --------------------------------------------------------------------------- +// Returns the current radio volume. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CFMRadioActiveIdleEngine::RadioVolume() const + { + //return iPropertyObserverArray[EFMRadioActiveIdleRadioVolumeObserver]->ValueInt(); + return 0; + } + +// --------------------------------------------------------------------------- +// Sets the radio volume. +// --------------------------------------------------------------------------- +// +EXPORT_C void CFMRadioActiveIdleEngine::AdjustRadioVolume( TFMRadioPSAdjustVolume aVolume ) const + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlAdjustVolume, aVolume ); + } + + +// --------------------------------------------------------------------------- +// Returns the current tuning state. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSTuningState CFMRadioActiveIdleEngine::TuningState() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdleTuningStateObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Returns the current frequency. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CFMRadioActiveIdleEngine::Frequency() const + { + return iPropertyObserverArray[EFMRadioActiveIdleFrequencyObserver]->ValueInt(); + } + +// --------------------------------------------------------------------------- +// Returns the currently active channel ID. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CFMRadioActiveIdleEngine::Channel() const + { + return iPropertyObserverArray[EFMRadioActiveIdleChannelChangeObserver]->ValueInt(); + } + +// --------------------------------------------------------------------------- +// Returns the currently active channel name. +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC& CFMRadioActiveIdleEngine::ChannelName() const + { + return iPropertyObserverArray[EFMRadioPSDataChannelName]->ValueDes(); + } + +// --------------------------------------------------------------------------- +// Returns the current mute state. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSRadioMuteState CFMRadioActiveIdleEngine::MuteState() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdleMuteStateObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Sets the mute state. +// --------------------------------------------------------------------------- +// +EXPORT_C void CFMRadioActiveIdleEngine::SetMuteState( TFMRadioPSRadioMuteState aMuteState ) const + { + RProperty::Set( KFMRadioPSUid, KFMRadioPSControlSetRadioMuteState, aMuteState ); + } + +// --------------------------------------------------------------------------- +// Returns the current antenna connectivity status. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSHeadsetStatus CFMRadioActiveIdleEngine::AntennaStatus() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdleHeadsetStatusObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Returns the current frequency decimal count. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSFrequencyDecimalCount CFMRadioActiveIdleEngine::FrequencyDecimalCount() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdleDecimalCountObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Returns FM Radio application's running state. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSApplicationRunningState CFMRadioActiveIdleEngine::ApplicationRunningState() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdleApplicationObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Returns the radio's power state. +// --------------------------------------------------------------------------- +// +EXPORT_C TFMRadioPSRadioPowerState CFMRadioActiveIdleEngine::PowerState() const + { + return static_cast( iPropertyObserverArray[EFMRadioActiveIdlePowerStateObserver]->ValueInt() ); + } + +// --------------------------------------------------------------------------- +// Returns RDS Program Service information. +// --------------------------------------------------------------------------- +// + +EXPORT_C const TDesC& CFMRadioActiveIdleEngine::RDSProgramService() const + { + return iPropertyObserverArray[EFMRadioActiveIdleRDSProgramServiceObserver]->ValueDes(); + } + +// ================= OTHER EXPORTED FUNCTIONS ============== +