--- /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 <e32std.h>
+
+#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<TFMRadioPSTuningState>( 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<TFMRadioPSRadioMuteState>( aValue ) );
+ break;
+
+ case KFMRadioPSDataApplicationRunning:
+ iObserver.HandleApplicationRunningStateChangeL( static_cast<TFMRadioPSApplicationRunningState>( aValue ) );
+ break;
+
+ case KFMRadioPSDataHeadsetStatus:
+ iObserver.HandleAntennaStatusChangeL( static_cast<TFMRadioPSHeadsetStatus>( aValue ) );
+ break;
+
+ case KFMRadioPSDataFrequencyDecimalCount:
+ iObserver.HandleFrequencyDecimalCountChangeL( static_cast<TFMRadioPSFrequencyDecimalCount>( aValue ) );
+ break;
+
+ case KFMRadioPSDataRadioPowerState:
+ iObserver.HandlePowerStateChangeL( static_cast<TFMRadioPSRadioPowerState>( 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<TFMRadioPSTuningState>( 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<TFMRadioPSRadioMuteState>( 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<TFMRadioPSHeadsetStatus>( iPropertyObserverArray[EFMRadioActiveIdleHeadsetStatusObserver]->ValueInt() );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the current frequency decimal count.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TFMRadioPSFrequencyDecimalCount CFMRadioActiveIdleEngine::FrequencyDecimalCount() const
+ {
+ return static_cast<TFMRadioPSFrequencyDecimalCount>( iPropertyObserverArray[EFMRadioActiveIdleDecimalCountObserver]->ValueInt() );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns FM Radio application's running state.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TFMRadioPSApplicationRunningState CFMRadioActiveIdleEngine::ApplicationRunningState() const
+ {
+ return static_cast<TFMRadioPSApplicationRunningState>( iPropertyObserverArray[EFMRadioActiveIdleApplicationObserver]->ValueInt() );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the radio's power state.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TFMRadioPSRadioPowerState CFMRadioActiveIdleEngine::PowerState() const
+ {
+ return static_cast<TFMRadioPSRadioPowerState>( iPropertyObserverArray[EFMRadioActiveIdlePowerStateObserver]->ValueInt() );
+ }
+
+// ---------------------------------------------------------------------------
+// Returns RDS Program Service information.
+// ---------------------------------------------------------------------------
+//
+
+EXPORT_C const TDesC& CFMRadioActiveIdleEngine::RDSProgramService() const
+ {
+ return iPropertyObserverArray[EFMRadioActiveIdleRDSProgramServiceObserver]->ValueDes();
+ }
+
+// ================= OTHER EXPORTED FUNCTIONS ==============
+