diff -r 1a6714c53019 -r cce62ebc198e radioapp/radioenginewrapper/src/radioenginehandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/radioapp/radioenginewrapper/src/radioenginehandler.cpp Tue Aug 31 15:15:02 2010 +0300 @@ -0,0 +1,365 @@ +/* +* 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: +* +*/ + +// User includes +#include "cradioengine.h" +#include "cradioaudiorouter.h" +#include "cradiosystemeventcollector.h" +#include "cradiosettings.h" +#include "mradioenginesettings.h" +#include "mradiordsreceiver.h" +#include "radioenginehandler.h" +#include "mradioenginehandlerobserver.h" +#include "radio_global.h" +#include "radiologger.h" +#include "radioenummapper.h" + +/*! + * Map to translate seek direction enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KSeekDirectionMap ) + ENUM_MAP_ITEM( Seek::Down, RadioEngine::ERadioDown ), + ENUM_MAP_ITEM( Seek::Up, RadioEngine::ERadioUp ) +END_ENUM_MAP( KSeekDirectionMap ) + +/*! + * Convenience macro to do the mapping of seek directions + */ +#define MAP_FROM_UI_DIRECTION(ui_enum) MAP_FROM_UI_ENUM( RadioEngine::TRadioTuneDirection, ui_enum, KSeekDirectionMap ) + +/*! + * Map to translate radio region enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KRegionMap ) + ENUM_MAP_ITEM( RadioRegion::None, ERadioRegionNone ), + ENUM_MAP_ITEM( RadioRegion::Default, ERadioRegionDefault ), + ENUM_MAP_ITEM( RadioRegion::Japan, ERadioRegionJapan ), + ENUM_MAP_ITEM( RadioRegion::America, ERadioRegionAmerica ), + ENUM_MAP_ITEM( RadioRegion::Poland, ERadioRegionPoland ), +END_ENUM_MAP( KRegionMap ) + +/*! + * Convenience macros to do the mapping of radio regions + */ +#define MAP_FROM_UI_REGION(ui_enum) MAP_FROM_UI_ENUM( TRadioRegion, ui_enum, KRegionMap ) +#define MAP_TO_UI_REGION(engine_enum) MAP_TO_UI_ENUM( RadioRegion::Region, engine_enum, KRegionMap ) + +/*! + * Map to translate seeking state enum from its definition in the engine to + * its definition in the ui and vice versa + */ +BEGIN_ENUM_MAP( KSeekingStateMap ) + ENUM_MAP_ITEM( Seek::NotSeeking, RadioEngine::ERadioNotSeeking ), + ENUM_MAP_ITEM( Seek::SeekingUp, RadioEngine::ERadioSeekingUp ), + ENUM_MAP_ITEM( Seek::SeekingDown, RadioEngine::ERadioSeekingDown ) +END_ENUM_MAP( KSeekingStateMap ) + +/*! + * Convenience macro to do the mapping of seeking states + */ +#define MAP_TO_UI_SEEKING_STATE(ui_enum) MAP_TO_UI_ENUM( Seek::State, ui_enum, KSeekingStateMap ) + +/*! + * + */ +RadioEngineHandler::RadioEngineHandler( MRadioEngineHandlerObserver& observer ) + : mObserver( observer ) +{ +} + +/*! + * + */ +RadioEngineHandler::~RadioEngineHandler() +{ +} + +/*! + * Attempts to construct the radio engine + */ +bool RadioEngineHandler::constructEngine() +{ + LOG_METHOD; + + CRadioEngine* engine = NULL; + TRAPD( err, engine = CRadioEngine::NewL( *this ) ); + if ( err ) { + return false; + } + + mEngine.reset( engine ); + TRAP( err, + mEngine->SystemEventCollector().AddObserverL( &mObserver ); + mEngine->AddObserverL( &mObserver ); + ); + if ( err ) { + return false; + } + + mRegion = MAP_TO_UI_REGION( mEngine->Settings().EngineSettings().RegionId() ); + return true; +} + +/*! + * Sets the rds data observer + */ +void RadioEngineHandler::setRdsObserver( MRadioRdsDataObserver* observer ) +{ + TRAP_IGNORE( mEngine->RdsReceiver().AddObserverL( observer ) ); +} + +/*! + * Starts or stops receiving RDS data + */ +void RadioEngineHandler::setRdsEnabled( bool rdsEnabled ) +{ + if ( rdsEnabled ) { + mEngine->RdsReceiver().StartReceiver(); + } else { + mEngine->RdsReceiver().StopReceiver(); + } +} + +/*! + * Returns the radio status. + */ +bool RadioEngineHandler::isRadioOn() +{ + return mEngine->Settings().EngineSettings().IsPowerOn(); +} + +/*! + * Sets the manual seek status + */ +void RadioEngineHandler::setManualSeekMode( bool manualSeek ) +{ + mEngine->SetManualSeekMode( manualSeek ); +} + +/*! + * Returns the manual seek status + */ +bool RadioEngineHandler::isInManualSeekMode() const +{ + return mEngine->IsInManualSeekMode(); +} + +/*! + * Tune to the specified frequency + */ +void RadioEngineHandler::setFrequency( uint frequency ) +{ + mEngine->SetFrequency( frequency ); +} + +/*! + * Sets the audio mute state + */ +void RadioEngineHandler::setMute( const bool muted, const bool updateSettings ) +{ + mEngine->SetVolumeMuted( muted, updateSettings ); +} + +/*! + * Gets the audio mute state + */ +bool RadioEngineHandler::isMuted() const +{ + return mEngine->Settings().EngineSettings().IsVolMuted(); +} + +/*! + * Sets the volume level of the FM radio + */ +void RadioEngineHandler::setVolume( int newVolume ) +{ + if ( volume() != newVolume ) { + if ( newVolume > 0 ) { + mEngine->SetVolumeMuted( EFalse ); + } + + mEngine->SetVolume( newVolume ); + } +} + +/*! + * Gets the volumelevel. + */ +int RadioEngineHandler::volume() const +{ + return mEngine->Settings().EngineSettings().Volume(); +} + +/*! + * Gets the max volumelevel. + */ +int RadioEngineHandler::maxVolume() const +{ + return mEngine->MaxVolumeLevel(); +} + +/*! + * Increases the volume by one increment + */ +void RadioEngineHandler::increaseVolume() +{ + mEngine->AdjustVolume( RadioEngine::ERadioIncVolume ); +} + +/*! + * Decreases the volume by one increment + */ +void RadioEngineHandler::decreaseVolume() +{ + mEngine->AdjustVolume( RadioEngine::ERadioDecVolume ); +} + + +/*! + * Checks if the antenna is attached + */ +bool RadioEngineHandler::isAntennaAttached() const +{ + return mEngine->IsAntennaAttached(); +} + +/*! + * Retrieves the current frequency. + */ +uint RadioEngineHandler::currentFrequency() const +{ + return mEngine->Settings().EngineSettings().TunedFrequency(); +} + +/*! + * Returns the minimum allowed frequency in the current region + */ +uint RadioEngineHandler::minFrequency() const +{ + return mEngine->Settings().EngineSettings().MinFrequency(); +} + +/*! + * Returns the maximum allowed frequency in the current region + */ +uint RadioEngineHandler::maxFrequency() const +{ + return mEngine->Settings().EngineSettings().MaxFrequency(); +} + +/*! + * Checks if the given frequency is valid in the current region + */ +bool RadioEngineHandler::isFrequencyValid( uint frequency ) const +{ + return mEngine->IsFrequencyValid( frequency ); +} + +/*! + * Scan up to the next available frequency + */ +void RadioEngineHandler::seek( Seek::Direction direction ) +{ + LOG_TIMESTAMP( "Seek" ); + mEngine->Seek( MAP_FROM_UI_DIRECTION( direction ) ); +} + +/*! + * Cancel previously requested scan, and return to the already tuned frequency + */ +void RadioEngineHandler::cancelSeek() +{ + mEngine->CancelSeek(); +} + +/*! + * Returns the engine seeking state + */ +Seek::State RadioEngineHandler::seekingState() const +{ + return MAP_TO_UI_SEEKING_STATE( mEngine->Seeking() ); +} + +/*! + * return step size for tuning. + */ +uint RadioEngineHandler::frequencyStepSize() const +{ + return mEngine->Settings().EngineSettings().FrequencyStepSize(); +} + +/*! + * Returns the selected radio region + */ +RadioRegion::Region RadioEngineHandler::region() const +{ + return mRegion; +} + +/*! + * Sets whether or not audio should be routed to loudspeaker + */ +void RadioEngineHandler::setAudioRouteToLoudspeaker( bool loudspeaker ) +{ + TRAPD( err, mEngine->AudioRouter().SetAudioRouteL( loudspeaker ? RadioEngine::ERadioSpeaker + : RadioEngine::ERadioHeadset ) ); + if ( err ) { + LOG_FORMAT( "Failed to set audioroute: UseLoudspeadker: %d", loudspeaker ); + } +} + +/*! + * Checks if audio is routed to loudspeaker + */ +bool RadioEngineHandler::isAudioRoutedToLoudspeaker() const +{ + return mEngine->Settings().EngineSettings().AudioRoute() == RadioEngine::ERadioSpeaker; +} + +/*! + * Returns the repository manager. + */ +MRadioApplicationSettings& RadioEngineHandler::applicationSettings() const +{ + return mEngine->Settings().ApplicationSettings(); +} + +/*! + * \reimp + */ +CRadioAudioRouter* RadioEngineHandler::InitAudioRouterL() +{ + return CRadioAudioRouter::NewL( mObserver ); +} + +/*! + * \reimp + */ +CRadioSystemEventCollector* RadioEngineHandler::InitSystemEventCollectorL() +{ + return CRadioSystemEventCollector::NewL(); +} + +/*! + * \reimp + */ +CRadioSettings* RadioEngineHandler::InitSettingsL() +{ + return CRadioSettings::NewL(); +}