#ifndef _FMTUNER_H_
#define _FMTUNER_H_
/*======================================================
FILE:  FMTUNER.h

SERVICES:
   SANYO FMTUNER Interface

DESCRIPTION:
   This file provides the interface specification for
   the SANYO PHONESYSTEM Interface

CLASS IDs:

NOTES:


=====================================================*/
/*-----------------------------------------------------------------------------
                        EDIT HISTORY FOR MODULE

No.      when      who          what, where, why
001		04/10/20	dan@cresco	background ctrl

--------  --------  -----------  -----------------------------------------------
--------------------------------------------------------------------------------*/
#include "AEE.h"


typedef struct _IFMTUNER IFMTUNER;

//
// Command codes
//
//
#define FMT_CMD_BASE           1        // Command base used by IMedia
#define FMT_CMD_USER_BASE      0x100    // Command base for derived class

#define FMT_CMD_SEEK           (FMT_CMD_BASE + 1)    // Seek()
#define FMT_CMD_SEEKSTOP       (FMT_CMD_BASE + 2)    // SeekStop()
#define FMT_CMD_GETVOLUME      (FMT_CMD_BASE + 3)    // GetVolume()
#define FMT_CMD_SETVOLUME      (FMT_CMD_BASE + 4)    // SetVolume()
#define FMT_CMD_SETTUNE        (FMT_CMD_BASE + 5)    // SetTune()
#define FMT_CMD_GETTUNE        (FMT_CMD_BASE + 6)    // GetTune()
#define FMT_CMD_GETSTATUS      (FMT_CMD_BASE + 7)    // GetStatus()
#define FMT_CMD_CTRLPOWER      (FMT_CMD_BASE + 8)    // CtrlPower()
#define FMT_CMD_HEADSET        (FMT_CMD_BASE + 9)    // headset
#define FMT_CMD_CLOSEAPP       (FMT_CMD_BASE + 10)   // CLOSE application
#define FMT_CMD_DISABLEALARM   (FMT_CMD_BASE + 11)   // alarm disable
#define FMT_CMD_MANNER         (FMT_CMD_BASE + 12)   // MANNER mode 
// PTX803_FMradio_background_Add -s-
#define FMT_CMD_SEEK_BG        (FMT_CMD_BASE + 13)   // BGアプリ用Seek()
#define FMT_CMD_GETVOLUME_BG   (FMT_CMD_BASE + 14)   // BGアプリ用GetVolume()
#define FMT_CMD_SETVOLUME_BG   (FMT_CMD_BASE + 15)   // BGアプリ用SetVolume()
#define FMT_CMD_SETTUNE_BG     (FMT_CMD_BASE + 16)   // BGアプリ用SetTune()
#define FMT_CMD_GETTUNE_BG     (FMT_CMD_BASE + 17)   // BGアプリ用GetTune()
// PTX803_FMradio_background_Add -s-

//
// Status codes
//
#define FMT_STATUS_BASE              1     // Status used by IMedia
#define FMT_STATUS_USER_BASE         0x100 // Status base for derived class

#define FMT_STATUS_START             (FMT_STATUS_BASE)        // [FMTuner] started
#define FMT_STATUS_DONE              (FMT_STATUS_BASE + 1)    // [FMTuner] Command completed
#define FMT_STATUS_ABORT             (FMT_STATUS_BASE + 2)    // [FMTuner] Command aborted
#define FMT_STATUS_SEEK              (FMT_STATUS_BASE + 3)    // [FMTuner] seek done
#define FMT_STATUS_SEEK_FAIL         (FMT_STATUS_BASE + 4)    // [FMTuner] seek cmd failed
#define FMT_STATUS_SEEK_STOP         (FMT_STATUS_BASE + 5)    // [FMTuner] NOT USED
#define FMT_STATUS_SEEK_NOW          (FMT_STATUS_BASE + 6)    // [FMTuner] seek cmd now freq
#define FMT_STATUS_SEEKSTOP          (FMT_STATUS_BASE + 7)    // [FMTuner] seekstop done
#define FMT_STATUS_SEEKSTOP_FAIL     (FMT_STATUS_BASE + 8)    // [FMTuner] seekstop failed
#define FMT_STATUS_GETVOLUME         (FMT_STATUS_BASE + 9)    // [FMTuner] getvolume done
#define FMT_STATUS_GETVOLUME_FAIL    (FMT_STATUS_BASE + 10)   // [FMTuner] getvolume failed
#define FMT_STATUS_SETVOLUME         (FMT_STATUS_BASE + 11)   // [FMTuner] setvolume done
#define FMT_STATUS_SETVOLUME_FAIL    (FMT_STATUS_BASE + 12)   // [FMTuner] setvolume failed
#define FMT_STATUS_GETTUNE           (FMT_STATUS_BASE + 13)   // [FMTuner] gettune done
#define FMT_STATUS_GETTUNE_FAIL      (FMT_STATUS_BASE + 14)   // [FMTuner] gettune failed
#define FMT_STATUS_SETTUNE           (FMT_STATUS_BASE + 15)   // [FMTuner] settune done
#define FMT_STATUS_SETTUNE_FAIL      (FMT_STATUS_BASE + 16)   // [FMTuner] settune failed
#define FMT_STATUS_GETSTATUS         (FMT_STATUS_BASE + 17)   // [FMTuner] getstatus done
#define FMT_STATUS_GETSTATUS_FAIL    (FMT_STATUS_BASE + 18)   // [FMTuner] getstatus failed
#define FMT_STATUS_CTRLPOWER         (FMT_STATUS_BASE + 19)   // [FMTuner] ctrlpower done
#define FMT_STATUS_CTRLPOWER_FAIL    (FMT_STATUS_BASE + 20)   // [FMTuner] ctrlpower failed
#define FMT_STATUS_HEADSET           (FMT_STATUS_BASE + 21)   // [FMTuner] headset status get done
#define FMT_STATUS_CLOSEAPP          (FMT_STATUS_BASE + 22)   // [FMTuner] close fmtuner applet done
#define FMT_STATUS_DISABLEALARM      (FMT_STATUS_BASE + 23)   // [FMTuner] disable alarm
#define FMT_STATUS_MANNER            (FMT_STATUS_BASE + 24)   // [FMTuner] manner mode

#define FMT_PENDING                  0xEFFFFFFF               // [FMTuner] pending


// 端末情報INFOコマンド
#define FMT_INFO_BASE           1        
#define FMT_INFO_USER_BASE      0x100    

#define FMT_INFO_HEADSET       (FMT_INFO_BASE + 1)    // HEADSET INFO
#define FMT_INFO_FLIP          (FMT_INFO_BASE + 2)    // FLIP INFO
#define FMT_INFO_ROAMING       (FMT_INFO_BASE + 3)    // ROAMING INFO

// 定数定義
#define FMT_DEF_HEADSET_ON     1
#define FMT_DEF_HEADSET_OFF    0
#define FMT_DEF_FLIP_OPEN      0
#define FMT_DEF_FLIP_CLOSE     1
#define FMT_DEF_POWER_ON       1
#define FMT_DEF_POWER_OFF      0
#define FMT_DEF_STEREO         0
#define FMT_DEF_MONO           1
#define FMT_DEF_MANNER_OFF     0
#define FMT_DEF_MANNER_ON      1
#define FMT_DEF_ROAMING_OFF    0
#define FMT_DEF_ROAMING_ON     1



typedef struct AEEFMTunerCmdNotify {
   AEECLSID    clsFMTuner;   // CLSID of IFMTuner concrete class
   IFMTUNER   *pIFMTuner;    // Pointer to IFMTuner
   int         nCmd;         // Command code
   int         nSubCmd;      // Sub command code, if any or 0
   int         nStatus;      // Status code
   void *      pCmdData;     // Contains one of the values listed above
   uint32      dwSize;       // Size of pCmdData
} AEEFMTunerCmdNotify;

typedef void (*PFNFMTUNERNOTIFY)(void * pUser, AEEFMTunerCmdNotify *pCmdNotify);


#define INHERIT_IFMTuner(iname) \
   INHERIT_IQueryInterface(iname);\
    \
    int     (*RegisterNotify)(iname *p, PFNFMTUNERNOTIFY pfnNotify, void *pUser);\
    \
    int     (*Seek)(iname *p, int dir, uint32 *pFreq);\
    int     (*SeekStop)(iname *p);\
    int     (*SetVolume)(iname *p, int vol);\
    int     (*GetVolume)(iname *p, int *pVol);\
    int     (*SetTune)(iname *p, uint32 Freq, int *pSen);\
    int     (*GetTune)(iname *p, uint32 *pFreq);\
    int     (*GetState)(iname *p, int *pSen);\
    int     (*CtrlPower)(iname *p, int Power);\
    int     (*ChangeDevice)(iname *p, int dev);\
    int     (*GetInfo)(iname *p, int para, int *pInfo );\
    int     (*SetMode)(iname *p, int mode);\
    \
    int     (*Record)(iname *p);\
    int     (*RecStop)(iname *p);\
    int     (*GetFileName)(iname *p, unsigned char *name, int *wSize)
QINTERFACE(IFMTUNER)
{
   INHERIT_IFMTuner(IFMTUNER);
};




#define     IFMTUNER_AddRef(p)                        GET_PVTBL(p,IFMTUNER)->AddRef(p)
#define     IFMTUNER_Release(p)                       GET_PVTBL(p,IFMTUNER)->Release(p)
#define     IFMTUNER_QueryInterface(p,c,i)            GET_PVTBL(p,IFMTUNER)->QueryInterface(p,c,i)
#define     IFMTUNER_Seek(p,dir,pFreq)                GET_PVTBL(p,IFMTUNER)->Seek(p,dir,pFreq)
#define     IFMTUNER_SeekStop(p)                      GET_PVTBL(p,IFMTUNER)->SeekStop(p)
#define     IFMTUNER_SetVolume(p,vol)                 GET_PVTBL(p,IFMTUNER)->SetVolume(p,vol)
#define     IFMTUNER_GetVolume(p,pVol)                GET_PVTBL(p,IFMTUNER)->GetVolume(p,pVol)
#define     IFMTUNER_SetTune(p,Freq,pSen)             GET_PVTBL(p,IFMTUNER)->SetTune(p,Freq,pSen)
#define     IFMTUNER_GetTune(p,pFreq)                 GET_PVTBL(p,IFMTUNER)->GetTune(p,pFreq)
#define     IFMTUNER_GetState(p,pSen)                 GET_PVTBL(p,IFMTUNER)->GetState(p,pSen)
#define     IFMTUNER_CtrlPower(p,power)               GET_PVTBL(p,IFMTUNER)->CtrlPower(p,power)
#define     IFMTUNER_ChangeDevice(p,dev)              GET_PVTBL(p,IFMTUNER)->ChangeDevice(p,dev)
#define     IFMTUNER_RegisterNotify(p,pFn,pUser)      GET_PVTBL(p,IFMTUNER)->RegisterNotify(p,pFn,pUser)
#define     IFMTUNER_GetInfo(p,para,info)             GET_PVTBL(p,IFMTUNER)->GetInfo(p,para,info)
#define     IFMTUNER_SetMode(p,mode)                  GET_PVTBL(p,IFMTUNER)->SetMode(p,mode)
//PTX805 Cui Xinyu add For UIQ401 20050916-S-
#define     IFMTUNER_Record(p)                  GET_PVTBL(p,IFMTUNER)->Record(p)
#define     IFMTUNER_RecStop(p)                  GET_PVTBL(p,IFMTUNER)->RecStop(p)
#define     IFMTUNER_GetFileName(p, name, wSize)                  GET_PVTBL(p,IFMTUNER)->GetFileName(p, name, wSize)
//PTX805 Cui Xinyu add For UIQ401 20050916-E-
/*
=======================================================================
  INTERFACES   DOCUMENTATION
=======================================================================
*/

/*=====================================================================

関数名: IFMTUNER_AddRef()

機能:
   この関数は IFMTUNERインタフェースオブジェクトの参照カウントを
   増やす。これは呼び出し元が複数の場合にオブジェクトを共有することを許容
   する。オブジェクトは参照カウントが０（ゼロ）に達したときに解放される。
   IFMTUNER_Release()も参照のこと。

プロトタイプ:
   uint32  IFMTUNER_AddRef
   (
      IFMTUNER  *pIFMTUNER
   )

パラメータ:
   pIFMTUNER    IFMTUNERインタフェースオブジェクトへのポインタ

戻り値:
   増加後のオブジェクトに対する参照カウント

解説:
   オブジェクトが有効であれば正の値が返る

副作用:
   なし

関連:
   IFMTUNER_Release()

=======================================================================

関数名: IFMTUNER_Seek()

機能:
   受信可能周波数をシークする。

プロトタイプ:
   int IFMTUNER_Seek
   (
      IFMTUNER  * pIFMTUNER,
      int         direction,
      uint32    * pFrequency
   )

パラメータ:
   pIFMTUNER [in]      IFMTUNERインタフェースオブジェクトへのポインタ
   direction [in]      SEEK方向（＋はインクリメンタル、−はデクリメンタル）
   pFrequency[in/out]  受信開始周波数（入力でセットされた周波数からシーク開始する）
                       CALLBACKが設定されていない場合は、受信した周波数が戻される。

戻り値:
   SUCCESS             正常終了（正常に命令を受け付けた）
   EBADPARAM           引数が不正な場合
   EBADSTATE           IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   このＡＰＩを使用するには前に、IFMTUNER_RegisterNotify()関数によりCALLBACKルーチンを
   登録すること。（シークに時間を要する為、非同期処理にする為）

副作用:
   なし

関連:
   IFMTUNER_RegisterNotify()

=======================================================================

関数名: IFMTUNER_SeekStop()

機能:
   FMチューナーのSEEK処理を中止する

プロトタイプ:

   int IFMTUNER_SeekStop
   (
      IFMTUNER      *pIFMTUNER
   )

パラメータ:
   pIFMTUNER [in]   IFMTUNERインタフェースオブジェクトへのポインタ

戻り値:
   SUCCESS              正常終了
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   なし

副作用:
   なし

関連:
   なし

=======================================================================

関数名: IFMTUNER_SetVolume()

機能:
   ラジオ出力する音量をセットする

プロトタイプ:
   int IFMTUNER_SetVolume
   (
      IFMTUNER      *pIFMTUNER,
      int           Volume
   )

パラメータ:
   pIFMTUNER [in]   IFMTUNERインタフェースオブジェクトへのポインタ
   Volume    [in]   音量（０〜１００％）

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   音量値は、０〜１００を有効とし、０はMUTEとする

副作用:
   なし

関連:
   なし

=======================================================================

関数名: IFMTUNER_GetVolume()

機能:
   現在設定されているラジオの出力音量を取得する。

プロトタイプ:
   int IFMTUNER_GetVolume
   (
      IFMTUNER      *pIFMTUNER,
      int           *pVolume
   )

パラメータ:
   pIFMTUNER [in]       IFMTUNERインタフェースオブジェクトへのポインタ
   pVolume   [out]      取得した音量値

戻り値:
   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   このＡＰＩを使用するには前に、IFMTUNER_RegisterNotify()関数によりCALLBACKルーチンを
   登録すること。（音量取得に時間を要する為、非同期処理にする為）

副作用:
   なし

関連:
   IFMTUNER_RegisterNotify()

=======================================================================

関数名: IFMTUNER_SetTune()

機能:
   指定周波数にチューニングを行う。

プロトタイプ:
   int IFMTUNER_SetTune
   (
      IFMTUNER  *pIFMTUNER,
      uint32     Frequency,
      int       *pSensitivity
   )

パラメータ:
   pIFMTUNER [in]       IFMTUNERインタフェースオブジェクトへのポインタ
   Frequency [in]       設定周波数
   pSensitivity [out]   受信感度

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   このＡＰＩを使用するには前に、IFMTUNER_RegisterNotify()関数によりCALLBACKルーチンを
   登録すること。（チューニングに時間を要する為、非同期処理にする為）

副作用:
   なし

関連:
   IFMTUNER_RegisterNotify()

=======================================================================

関数名: IFMTUNER_GetTune()

機能:
   現在設定されているチューナーの周波数を取得する。

プロトタイプ:
   int IFMTUNER_GetTune
   (
      IFMTUNER  *pIFMTUNER,
      uint32    *pFrequency
   )

パラメータ:
   pIFMTUNER  [in]    IFMTUNERインタフェースオブジェクトへのポインタ
   pFrequency [out]   設定周波数

戻り値:
   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   このＡＰＩを使用するには前に、IFMTUNER_RegisterNotify()関数によりCALLBACKルーチンを
   登録すること。（設定周波数取得に時間を要する為、非同期処理にする為）

副作用:
   なし

関連:
   IFMTUNER_RegisterNotify()

=======================================================================

関数名: IFMTUNER_GetState()

機能:
   ＦＭチューナーの受信感度を取得します

プロトタイプ:
   int IFMTUNER_GetState
   (
      IFMTUNER  *pIFMTUNER,
      int       *pSensitivity
   )

パラメータ:
   pIFMTUNER    [in]  IFMTUNERインタフェースオブジェクトへのポインタ
   pSensitivity [out] 受信感度

戻り値:
   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   このＡＰＩを使用するには前に、IFMTUNER_RegisterNotify()関数によりCALLBACKルーチンを
   登録すること。（設定周波数取得に時間を要する為、非同期処理にする為）

副作用:
   なし

関連:
   IFMTUNER_RegisterNotify()

=======================================================================

関数名: IFMTUNER_CtrlPower()

機能:
   ＦＭチューナーの電源制御を行う。

プロトタイプ:
   int IFMTUNER_CtrlPower
   (
      IFMTUNER  *pIFMTUNER,
      int       Power
   )

パラメータ:
   pIFMTUNER [in]   IFMTUNERインタフェースオブジェクトへのポインタ
   Power     [in]   電源制御情報（０：ＯＦＦ／１：ＯＮ）

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   なし

副作用:
   なし

関連:
   なし

=======================================================================

関数名: IFMTUNER_ChangeDevice()

機能:
   移動機内の情報の通話履歴もしくは着信履歴の件数を取得します

プロトタイプ:
   int IFMTUNER_ChangeDevice
   (
      IFMTUNER  *pIFMTUNER,
      int        Device
   )

パラメータ:
   pIFMTUNER [in]   IFMTUNERインタフェースオブジェクトへのポインタ
   Device    [out]  出力デバイス

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
  今回サポートデバイスは、イヤフォンのみとする。

副作用:
   なし

関連:
   AEESoundDevice

=======================================================================

関数名: IFMTUNER_RegisterNotify()

機能:
   ＦＭチューナー関連のコールバック関数を登録します。

プロトタイプ:
   int IFMTUNER_RegisterNotify
   (
      IFMTUNER         *pIFMTUNER,
      PFNFMTUNERNOTIFY  pfnNotify,
      void             *pUser
   )

パラメータ:
   pIFMTUNER [in]   IFMTUNERインタフェースオブジェクトへのポインタ
   pfnNotify [in]   コールバック関数へのポインタ
   pUser     [in]   コールバックを処理する時に使用するユーザ−データ

戻り値:
   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   非同期処理され通知されるイベント対応コールバックルーチンを登録する。

副作用:
   なし

関連:
   なし

=======================================================================

関数名: IFMTUNER_Release()

機能:
   この関数は IFMTUNER インタフェースオブジェクトの参照カウントを
   減らす。参照カウントが０（ゼロ）に達したら、オブジェクトはメモリから
   解放され、無効となる。

プロトタイプ:
   uint32 IFMTUNER_Release
   (
      IFMTUNER  *pIFMTUNER,
   )

パラメータ:
   pIFMTUNER    IFMTUNERインタフェースオブジェクトへのポインタ

戻り値:
   参照カウント         減少後のオブジェクトに対する参照カウント
   ０（ゼロ）           オブジェクトが既に開放され無効となっていた場合

解説:
   なし

副作用:
   なし

関連:
   IFMTUNER_AddRef()

=======================================================================

関数名: IFMTUNER_GetInfo()

機能:
   この関数は BREWでサポートされていない端末の状態を取得する。

プロトタイプ:
   uint IFMTUNER_GetInfo
   (
      IFMTUNER  *pIFMTUNER,
      int        para,
      int       *pInfo
   )

パラメータ:
   pIFMTUNER    IFMTUNERインタフェースオブジェクトへのポインタ
   int          要求パラメータ
   info         通知情報

戻り値:

   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない

解説:
   なし

副作用:
   なし

関連:
   なし

=======================================================================

関数名: IFMTUNER_SetMode()

機能:
   この関数は FMラジオのステレオ／モノラルMODE切り替えを行う。

プロトタイプ:
   uint IFMTUNER_SetMode
   (
      IFMTUNER  *pIFMTUNER,
      int        mode
   )

パラメータ:
   pIFMTUNER    IFMTUNERインタフェースオブジェクトへのポインタ
   int          モード（ステレオ／モノラル）

戻り値:

   SUCCESS              成功
   EBADSTATE            IFMTUNERインタフェースオブジェクトがレディ状態でない
   EBADPARAM            引数が不正な場合

解説:
   なし

副作用:
   なし

関連:
   なし

=======================================================================
*/

#endif //_FMTUNER_H_
