radioapp/radioenginewrapper/inc/radioenginehandler.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 23 Jun 2010 18:12:57 +0300
changeset 32 189d20c34778
child 54 a8ba0c289b44
permissions -rw-r--r--
Revision: 201023 Kit: 2010125

/*
* 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:
*
*/

#ifndef _RADIOENGINEHANDLER_H_
#define _RADIOENGINEHANDLER_H_

// System includes
#include <QScopedPointer>

// User includes
#include "radio_global.h"
#include "mradioengineinitializer.h"

// Forward declarations
class CRadioEngine;
class MRadioRdsDataObserver;
class MRadioEngineHandlerObserver;
class MRadioApplicationSettings;

// Class declaration
class RadioEngineHandler : public MRadioEngineInitializer
{
public:

    RadioEngineHandler( MRadioEngineHandlerObserver& observer );

    ~RadioEngineHandler();

    /*!
     * Attempts to construct the radio engine
     */
    bool constructEngine();

    /*!
     * Sets the rds data observer
     */
    void setRdsObserver( MRadioRdsDataObserver* observer );

    /*!
     * Starts or stops receiving RDS data
     */
    void setRdsEnabled( bool rdsEnabled );

    /*!
     * Returns the radio status
     * @return ETrue = radio is on, EFalse = radio is off
     */
    bool isRadioOn();

    /*!
     * Sets the manual seek status
     */
    void setManualSeekMode( bool manualSeek );

    /*!
     * Returns the manual seek status
     */
    bool isInManualSeekMode() const;

    /*!
     * Tune to the specified frequency
     * @param aFrequency - frequency to lock onto.
     */
    void setFrequency( uint frequency );

    /*!
     * Sets the audio mute state
     * @param aMuted - flag to determine whether mute should be turned on or off
     */
    void setMute( const bool muted, const bool updateSettings = true );

    /*!
     * Gets the audio mute state
     * @return ETrue or EFalse to indicate whether mute is currently on.
     */
    bool isMuted() const;

    /*!
     * Sets the volume level of the FM radio
     * @param aVolume - the volume to be used.
     */
    void setVolume( int newVolume );

    /*!
     * Gets the volumelevel.
     * @return the current volume
     */
    int volume() const;

    /*!
     * Gets the max volumelevel.
     * @return the max volume
     */
    int maxVolume() const;

    /*!
     * Increases the volume by one increment
     */
    void increaseVolume();

    /*!
     * Decreases the volume by one increment
     */
    void decreaseVolume();

    /*!
     * Checks if the antenna is attached
     * @return ETrue or EFalse to indicate whether antenna is currently attached.
     */
    bool isAntennaAttached() const;

    /*!
     * Retrieves the current frequency.
     * @return the frequency in hertz
     */
    uint currentFrequency() const;

    /*!
     * Returns the minimum allowed frequency in the current region
     */
    uint minFrequency() const;

    /*!
     * Returns the maximum allowed frequency in the current region
     */
    uint maxFrequency() const;

    /*!
     * Checks if the given frequency is valid in the current region
     */
    bool isFrequencyValid( uint frequency ) const;

    /*!
     * Scan up to the next available frequency.
     */
    void seek( Seek::Direction direction );

    /*!
     * Cancel previously requested scan.
     */
    void cancelSeek();

    /*!
     * Returns the engine seeking state
     */
    Seek::State seekingState() const;

    /*!
     * Rreturn step size for tuning.
     * @return step size
     */
    uint frequencyStepSize() const;

    /*!
     * Determine current region
     * @return fmradio region. In case of error, returns EFMRadioRegionNone.
     */
    RadioRegion::Region region() const;

    /*!
     * Sets whether or not audio should be routed to loudspeaker
     * @param aLoudspeaker ETrue if loudspeaker should be used, EFalse if not
     */
    void setAudioRouteToLoudspeaker( bool loudspeaker );

    /*!
     * Checks if audio is routed to loudspeaker
     * @return ETrue if loudspeaker is used, EFalse if headset is used
     */
    bool isAudioRoutedToLoudspeaker() const;

    /*!
     * Returns a reference to the application settings
     */
    MRadioApplicationSettings& applicationSettings() const;

private:

// from base class MRadioEngineInitializer

    CRadioAudioRouter* InitAudioRouterL();
    CRadioSystemEventCollector* InitSystemEventCollectorL();
    CRadioSettings* InitSettingsL();

private: // data

    /*!
     * Radio engine holder
     * Own.
     */
    QScopedPointer<CRadioEngine>    mEngine;

    /*!
     * Radio handler observer
     * Not own.
     */
    MRadioEngineHandlerObserver&    mObserver;

    /*!
     * Selected radio region
     */
    RadioRegion::Region             mRegion;

};

#endif //_RADIOENGINEHANDLER_H_