resourceinterfaces/fmtransmittercontrol/inc/HWRMFmTx.h
author Dario Sestito <darios@symbian.org>
Fri, 07 May 2010 16:55:32 +0100
branchRCL_3
changeset 20 d80caf2a6605
parent 0 4e1aa6a622a0
child 78 3f0699f2e14c
permissions -rw-r--r--
Still on bug 2620, ssm.state.policy.0001.dll is not conflicting

/*
* Copyright (c) 2006-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 HWRMFMTX_H
#define HWRMFMTX_H

// INCLUDES

#include <e32base.h> 
#include <hwrm/hwrmfmtxdata.h>

// FUNCTION PROTOTYPES

// FORWARD DECLARATIONS
class MHWRMFmTxObserver;

// CLASS DECLARATIONS

/**
* Base class of FM Tx Client API of HWRM
*
* The HWRM FM Tx API provides the ability to control the device's FM radio transmitter
*
*  @publishedPartner
*  @deprecated
*/
class CHWRMFmTx : public CBase
    {
    public:  // Constructors
        
        /**
        * Two-phased constructor for implementation class.
        * Use this method for creating a FM Tx client with callbacks.
        *
        * @param aCallback Pointer to callback instance (NULL if callbacks are 
        *        not required).
        * @return New CHWRMFmTx implementing instance.
        * @exception KErrNotSupported Device doesn't support FM Tx feature.
        *            KErrNoMemory if there is a memory allocation failure. 
        */
        IMPORT_C static CHWRMFmTx* NewL(MHWRMFmTxObserver* aCallback = NULL);
        
        /**
        * Two-phased constructor for implementation class. 
        * Use this method for creating a FM Tx client with callbacks.
        * Leaves instance on cleanup stack.
        *
        * @param aCallback Pointer to callback instance (NULL if callbacks are 
        *        not required).
        * @return New CHWRMFmTx implementing instance.
        * @exception KErrNotSupported Device doesn't support FM Tx feature.
        *            KErrNoMemory if there is a memory allocation failure. 
        */
        IMPORT_C static CHWRMFmTx* NewLC(MHWRMFmTxObserver* aCallback = NULL);

    public: // New functions

        /**
        * Reserves FM Tx resource exclusively for this client.
        * A higher priority client may cause lower priority client reservation to be 
        * temporarily suspended.  If FM Tx is already reserved by a higher or equal 
        * priority application, reserving will still succeed, but reservation is 
        * immediately suspended.
        * The suspended client will not get any notification about suspension.  Any 
        * ongoing commands will be cancelled, when a client’s reservation is suspended.  
        * Only reservation and status query commands may be issued, in the suspended 
        * state.
        *		
        * @param aForceNoCCoeEnv If EFalse, then reservation requires that this
        *        client is on the foreground at the time of reservation and FM Tx
        *        will be automatically released and re-reserved based on
        *        background/foreground status of the this client. This also implies
        *        that CCoeEnv::Static() != NULL is required.
        *        If ETrue, the client will not require CCoeEnv to be present nor
        *        does it automatically reserve/release FM Tx.
        *        Only trusted clients are allowed to set this flag to ETrue.
        *
        * @exception KErrAccessDenied if aForceNoCCoeEnv is ETrue and client is not
    	*            trusted.
        *            KErrBadHandle if aForceNoCCoeEnv is EFalse and no CCoeEnv present.
        *            KErrNotReady if trying to reserve while on background and 
        *            aForceNoCCoeEnv is EFalse.
        *            KErrNoMemory if there is a memory allocation failure. 
    	*/
        virtual void ReserveL(TBool aForceNoCCoeEnv)=0;    	

        /**
        * Releases FM Tx resource, if it was previously reserved for this client.
        * If this client has not reserved FM Tx, then this method does nothing.
        */    	
    	virtual void Release() = 0;
    	
        /**
        * This method retrieves the current FM Tx state. 
        *
        * @return TFmTxState The current FM Tx state. 
        * @see MHWRMFmTxObserver
        */
        virtual TFmTxState Status() const = 0;
    	
        /** 
        * The EnableL method switches the FM transmitter on.  This is a synchronous 
        * method that will block the client application.
        *
        * @param aFrequency The initial transmitter frequency. Defaults to the previous 
        *        frequency setting in Central Repository.
    	* @exception KErrInUse if reserved by another client.
    	*            KErrArgument if frequency is out of range
    	*            KErrNotReady if there is a wired accessory conflict. Some  
    	*            accessories are mutually exclusive with FM Tx. 
        *            KErrNoMemory if there is a memory allocation failure. 
        *            KErrGeneral if there is a hardware error.
		*/
		virtual void EnableL(TInt aFrequency=0) = 0;

        /** 
        * The DisableL method switches the FM transmitter off.  This is a synchronous 
        * method that will block the client application.
        *
    	* @exception KErrInUse if reserved by another client.
    	*            KErrGeneral if there is a hardware error.
		*/
		virtual void DisableL() = 0;

        /** 
        * The Frequency method queries the current FM Tx frequency
        *
        * @return TInt The current FM Tx frequency (kHz).
		*/
        virtual TInt Frequency() const = 0;

		/** 
        * The GetFrequencyRangeL method queries the valid FM frequency range
        *
        * @param aFrequencyRange On return, min. and max. frequencies and step size
        * of the FM range (kHz)
        * @exception KErrInUse if reserved by another client
        *            KErrGeneral if there is a hardware error
		*/
		virtual void GetFrequencyRangeL(TFmTxFrequencyRange& aFrequencyRange) const = 0;

        /**
        * The SetFrequencyL method sets the FM transmission frequency. FM Tx
        * does not need to be enabled. This is a synchronous method 
        * that will block the client application.
        *
        * @param TInt aFrequency The new Tx frequency (Hz)
        * @exception KErrInUse if reserved by another client
        *            KErrArgument if frequency parameter is out of range
        *            KErrGeneral if there is a hardware error
        */
        virtual void SetFrequencyL(TInt aFrequency) = 0;

        /**
        * The GetNextClearFrequency method requests a new clear frequency 
        * suggestion.  This results in a RSSI scan at the hardware level, 
        * starting from the frequency increment after the previous suggested 
        * clear frequency.  This is a synchronous method that will block
        * the client application.
        *
        * @param aClearFrequency  On return, this is set to a new (suggested) 
        * clear frequency.
        * @exception KErrInUse if reserved by another client
        *            KErrNotSupported if RSSI scanning is unsupported
        *            KErrGeneral if there is a hardware error
        *            KErrNotReady if FM Tx is not enabled
        */ 
        virtual void GetNextClearFrequencyL(TInt& aClearFrequency) = 0;

        /**
        * The GetNextClearFrequency method requests a new clear frequency 
        * suggestion.  This results in a RSSI scan at the hardware level, 
        * starting from the frequency increment after the previous suggested 
        * clear frequency.  This is a synchronous method that will block
        * the client application.
        *
        * @param aClearFrequencyArray  On return, this contains 0-KClearFrequencyArrayMax
        * clear frequencies.
        * @param aCount  The number of clear frequencies requested (1-KClearFrequencyArrayMax)
        * On return, this is set to the actual number of clear frequencies found.
        * @exception KErrInUse if reserved by another client
        *            KErrArgument  If aCount is out of range
        *            KErrNotSupported if RSSI scanning is unsupported
        *            KErrGeneral if there is a hardware error
        *            KErrNotReady if FM Tx is not enabled
        */ 
        virtual void GetNextClearFrequencyL(TClearFrequencyArray& aClearFrequencyArray, TUint& aCount) = 0;

        /**
        * The GetNextClearFrequency method requests a new clear frequency 
        * suggestion.  This results in a RSSI scan at the hardware level, 
        * starting from the frequency increment after the previous suggested 
        * clear frequency.  This is an asynchronous method.
        *
        * @param aStatus This will be completed when a clear frequency is found
        * @param aClearFrequency The clear frequency is returned in this parameter,
        * which is only valid when aStatus == KErrNone.
        */ 
        virtual void GetNextClearFrequency(TRequestStatus& aStatus, TInt& aClearFrequency) = 0;

        /**
        * The GetNextClearFrequency method requests a new clear frequency 
        * suggestion.  This results in a RSSI scan at the hardware level, 
        * starting from the frequency increment after the previous suggested 
        * clear frequency.  This is an asynchronous method.
        *
        * @param aStatus This will be completed when a clear frequency is found        
        * @param aClearFrequencyArray  On return, this contains 0-KClearFrequencyArrayMax 
        * clear frequencies.
        * @param aCount  The number of clear frequencies requested (1-KClearFrequencyArrayMax).  
        * On completion, this is set to the actual number of clear frequencies found.
        * @exception KErrArgument if aCount is out of range
        */ 
        virtual void GetNextClearFrequencyL(TRequestStatus& aStatus, TClearFrequencyArray& aClearFrequencyArray, TUint& aCount) = 0;

        /**
        * The CancelGetNextClearFrequency method cancels any outstanding
        * GetNextClearFrequency requests.  If no requests have been made,
        * then this has no effect.  Note that the request may complete,
        * before it can be cancelled.
        */
        virtual void CancelGetNextClearFrequency() = 0;

        /**
        * The SetNextClearFrequency method sets the FM Tx frequency to a
        * new clear frequency suggested.  This is equivalent to calling
        * SetFrequencyL, with a result returned from GetNextClearFrequency.
        * This is a synchronous method that will block the client application.
        *
        * @param aClearFrequency On return, this is set to the new Tx frequency.
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if RSSI scanning is unsupported
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetNextClearFrequencyL(TInt& aClearFrequency) = 0;
   
        /**
        * The SetNextClearFrequency method sets the FM Tx frequency to a
        * new clear frequency suggested.  This is equivalent to calling
        * SetFrequencyL, with a result returned from GetNextClearFrequency.
        * This is an asynchronous method.
        *
        * @param aStatus This will be completed when a clear frequency is found
        * @param aClearFrequency The clear frequency is returned in this parameter,
        * which is only valid when aStatus == KErrNone. 
        */
        virtual void SetNextClearFrequency(TRequestStatus& aStatus, TInt& aClearFrequency) = 0;

        /**
        * The CancelSetNextClearFrequency method cancels any outstanding
        * SetNextClearFrequency requests.  If no requests have been made,
        * then this has no effect.  Note that the request may complete,
        * before it can be cancelled.
        */
        virtual void CancelSetNextClearFrequency() = 0;
             
        /**
        * The IsAutoFrequencyEnabled method queries whether auto frequency 
        * mode is enabled.
        *
        * @return TBool ETrue if auto frequency is enabled.
        */
        virtual TBool IsAutoFrequencyEnabled() = 0;
        
        /**
        * The EnableAutoFrequency method enables the FM Tx automatic frequency 
        * tuning mode.  In this mode, the transmitter will continuously scan
        * for interference from other transmitters.  When interference is detected,
        * the FM Tx frequency will change automatically, resulting in a
        * MHWRMFmTxObserver::FmTxFrequencyChanged indication.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if auto frequency is unsupported
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void EnableAutoFrequencyL() = 0;
        
        /**
        * The DisableAutoFrequency method disables the FM Tx automatic frequency
        * tuning mode.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrGeneral if there is a hardware error.
        */
        virtual void DisableAutoFrequencyL() = 0;

        /**
        * The GetRdsData method Queries the current FM Tx RDS data.
        * If FM Tx is enabled, then this data is being transmitted.
        *
        * @param aData The current FM Tx RDS data.
        */        
        virtual void GetRdsData(TFmTxRdsData& aData) = 0;
        
        /**
        * The SetRdsPTY method sets the RDS Programme Type to be transmitted.
        *
        * @param aPty The new Programme Type
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if RDS is unsupported
        *            KErrArgument if aPty out of range
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRdsPtyL(TRdsProgrammeType aPty) = 0;
        
        /**
        * The SetRdsPTYN method sets the RDS Programme Type Name to be transmitted.
        *
        * @param aPtyn The new Programme Type Name
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if RDS is unsupported
        *            KErrArgument if non-latin characters are supplied or
        *            programme type name too long
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRdsPtynL(TRdsProgrammeTypeName& aPtyn) = 0;
        
        /**
        * The SetRdsMS method sets the RDS Music/Speech flag
        *
        * @param aMusic ETrue if transmitting music.  EFalse if transmitting speech.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if RDS is unsupported
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRdsMsL(TBool aMusic) = 0;
        
        /**
        * The SetRdsLanguageId method sets the RDS language ID.  Only relevant if MS flag
        * is set to Speech.
        *
        * @param aLanguageId The new language ID.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if RDS is unsupported
        *            KErrArgument if aLanguageId out of range
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRdsLanguageIdL(TRdsLanguageIdType aLanguageId) = 0;

        /**
        * The ClearRdsData method clears any RDS data previously set by clients.
        * This does not include Radiotext or Radiotext+ data.
        */
        virtual void ClearRdsData() = 0;
        
        /**
        * The SetRadiotext method sets the Radiotext to be transmitted.
        *
        * @param aText The new Radiotext data.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if Radiotext is unsupported
        *            KErrArgument if non-latin characters are supplied
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRadiotextL(TDes& aText) = 0;
        
        /**
        * The SetRadiotextPlus method sets the Radiotext+ to be transmitted.
        *
        * @param aText The new Radiotext+ data.
        * @param aTag The Radiotext+ content type.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if Radiotext+ is unsupported
        *            KErrArgument if non-latin characters are supplied or 
        * 				if content type not valid.
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRadiotextPlusL(TDes& aText, TRtPlusContentType aContentType) = 0;
        
        /**
        * The SetRadiotextPlus method sets the Radiotext+ to be transmitted.
        *
        * @param aText The new Radiotext+ data.
        * @param aTag A Radiotext+ tag.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if Radiotext+ is unsupported
        *            KErrArgument if non-latin characters are supplied or 
        * 				 if RT-plus tag content not valid.
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRadiotextPlusL(TDes& aText, TRtPlusTag aTag) = 0;
        
        /**
        * The SetRadiotextPlus method sets the Radiotext+ to be transmitted.
        *
        * @param aText The new Radiotext+ data.
        * @param aTag A Radiotext+ tag.
        * @param aTag A second Radiotext+ tag.
        *
        * @exception KErrInUse if reserved by another client.
        *            KErrNotSupported if Radiotext+ is unsupported
        *            KErrArgument if non-latin characters are supplied or 
        * 				 if RT-plus tag content not valid.
        *            KErrGeneral if there is a hardware error.
        *            KErrNotReady if FM Tx is not enabled
        */
        virtual void SetRadiotextPlusL(TDes& aText, TRtPlusTag aTag1, TRtPlusTag aTag2) = 0;

        /**
        * The ClearRdsData method clears any Radiotext or Radiotext+ data previously 
		* set by clients.
        */
        virtual void ClearRadiotextData() = 0;
    };

/**
*  MHWRMFmTxObserver
*  A client should derive from this abstract class, to receive FM Tx status notifications.
*
* @publishedPartner
* @released
*/
class MHWRMFmTxObserver
    {    
    public:
        
        /** 
        * Called when the device FM Tx status changes.
        *
        * @param aState Indicates current FM Tx state.
        *
	 	* @see TFmTxState
		*/
        virtual void FmTxStatusChanged(TFmTxState aState) = 0;
        
        /** 
        * Called when the device FM Tx frequency changes.
        *
        * @param aFrequency Indicates current FM Tx frequency (Hz).
		*/        
        virtual void FmTxFrequencyChanged(TInt aFrequency) = 0;
	};


#endif // HWRMFMTX_H   
            
// End of File