#ifndef _OEMFMTUNER_H_
#define _OEMFMTUNER_H_
/*======================================================
FILE:  OEMFMTUNER.c

SERVICES:
   OEM functions for supporting BREW FMTUNER
   Interface

GENERAL DESCRIPTION:
   This file provides the prorotypes of the functions
   that OEMs must provide in order to support the BREW
   FMTUNER interfaces

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


#include "AEE.h"
#include "AEE_OEM.h"

// [PTX635] IFMTUNERの実装 [S]
//#include "snd.h"
// [PTX635] IFMTUNERの実装 [E]
#include "FMTUNER.h"
#include "FMTUNER.bid"

// [PTX635] IFMTUNERの実装 [S]
//typedef void (*PFNFMTUNERHDSET)(snd_af_data_cmd_enum event, uint32 num);
//typedef void (*PFNFMTUNERCLOSEAPP)(int event, uint32 num);
//typedef void (*PFNFMTUNERMANNER)(int event, uint32 num);
// [PTX635] IFMTUNERの実装 [E]

// [PTX635] IFMTUNERの実装 [S]
#ifdef  WIN32
#include "stdarg.h"
#include "crtdbg.h"
#include "windows.h"
#else  //WIN32
#include "msg.h"
#endif //WIN32

//#define  OEMFMTUNER_DEBUG
//#define  OEMFMTUNER_ERROR

#ifdef   OEMFMTUNER_DEBUG
#ifdef   WIN32
static void OEMFMT_MSG( char * fmt, ...) {
    char    buff[128];
    int     len;
    va_list argp;
    va_start( argp, fmt );
    vsprintf( buff, fmt, argp );
    va_end( argp );
    len = strlen( buff );
    buff[len]   = '\n';
    buff[len+1] = '\0';    
    OutputDebugString( buff );
    //_CrtDbgReport( _CRT_ERROR, NULL, 0, "OEMFMTuner.c", fmt, argp );
}
#else  //WIN32
#define  OEMFMT_MSG(fmt, a, b, c)     MSG_HIGH(fmt, a, b, c)
#endif //WIN32
#else  //OEMFMTUNER_DEBUG
#ifdef  WIN32
static void OEMFMT_MSG( char * fmt, ...) {}
#else  //WIN32
#define  OEMFMT_MSG(fmt, ...)
#endif //WIN32
#endif //OEMFMTUNER_DEBUG

#ifdef   OEMFMTUNER_ERROR
#ifdef   WIN32
static void OEMFMT_MSG_ERROR( char * fmt, ... ) {
    char    buff[128];
    int     len;
    va_list argp;
    va_start( argp, fmt );
    vsprintf( buff, fmt, argp );
    va_end( argp );
    len = strlen( buff );
    buff[len]   = '\n';
    buff[len+1] = '\0';    
    OutputDebugString( buff );
    //_CrtDbgReport( _CRT_ERROR, NULL, 0, "OEMFMTuner.c", fmt, argp );
    //exit( 1 );
}
#else  //WIN32
#define  OEMFMT_MSG_ERROR(fmt, a, b, c)     MSG_ERROR(fmt, a, b, c)
#endif //WIN32
#else  //OEMFMTUNER_ERROR
#ifdef  WIN32
static void OEMFMT_MSG_ERROR( char * fmt, ... ) {}
#else  //WIN32
#define  OEMFMT_MSG_ERROR(fmt, ...)
#endif //WIN32
#endif //OEMFMTUNER_ERROR
// [PTX635] IFMTUNERの実装 [E]


// [PTX635] IFMTUNERの実装 [S]
void OEMFMTUNER_Init( void );
// [PTX635] IFMTUNERの実装 [E]

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

関数名: OEMFMTUNER_Free()

機能:
   取得したコンテキストを解放します．

プロトタイプ:
   void OEMFMTUNER_Free
   (
      OEMCONTEXT        cxt
   )

パラメータ:
   cxt                  コンテキストのポインタ

戻り値:
   なし

解説:
   なし

副作用:
   なし

関連:
   OEMFMTUNER_New()

=====================================================================*/
void OEMFMTUNER_Free(OEMCONTEXT cxt);

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

関数名: OEMFMTUNER_Seek()

機能:
   ＦＭチューナーのシーク処理をおこなう。

プロトタイプ:
   int OEMFMTUNER_Seek
   (
      OEMCONTEXT        cxt,
      int               direction,
      uint32           *pFrequency
   )

パラメータ:
   cxt          [in]     コンテキストのポインタ
   direction    [in]     シーク方向
   pFrequency   [in/out] 受信周波数

戻り値:
   SUCCESS             正常終了（正常に命令を受け付けた）
   EBADPARAM           引数が不正な場合
   EBADSTATE           コンテキストが設定されていない

解説:
   CALLBACKルーチンがセットされていない場合は、WAIT処理を行いシーク完了を待つ。

副作用:
   なし

関連:
   OEMFMTUNER_RegisterNotify()

=====================================================================*/
int    OEMFMTUNER_Seek(OEMCONTEXT cxt, int direction, uint32 *pFrequency);

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

関数名: OEMFMTUNER_SeekStop()

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

プロトタイプ:

   int OEMFMTUNER_SeekStop
   (
      OEMCONTEXT        cxt
   )

パラメータ:
   cxt          [in]     コンテキストのポインタ

戻り値:
   SUCCESS              正常終了
   EBADSTATE            コンテキストが設定されていない

解説:
   なし

副作用:
   なし

関連:
   なし

=====================================================================*/
int    OEMFMTUNER_SeekStop(OEMCONTEXT cxt);

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

関数名: OEMFMTUNER_SetVolume()

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

プロトタイプ:
   int OEMFMTUNER_SetVolume
   (
      OEMCONTEXT        cxt,
      int               Volume
   )

パラメータ:
   cxt       [in]       コンテキストのポインタ
   Volume    [in]       音量（０〜１００％）

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            コンテキストが設定されていない

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

副作用:
   なし

関連:
   なし


=====================================================================*/
int    OEMFMTUNER_SetVolume(OEMCONTEXT cxt, int Volume);

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

関数名: OEMFMTUNER_GetVolume()

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

プロトタイプ:
   int OEMFMTUNER_GetVolume
   (
      OEMCONTEXT        cxt,
      int               *pVolume
   )

パラメータ:
   cxt       [in]       コンテキストのポインタ
   pVolume   [out]      取得した音量値

戻り値:
   SUCCESS              成功
   EBADSTATE            コンテキストが設定されていない

解説:
   CALLBACKルーチンがセットされていない場合は、WAIT処理を行い出力音量取得を待つ。

副作用:
   なし

関連:
   OEMFMTUNER_RegisterNotify()

=====================================================================*/
int    OEMFMTUNER_GetVolume(OEMCONTEXT cxt, int *pVolume);

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

関数名: OEMFMTUNER_SetTune()

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

プロトタイプ:
   int OEMFMTUNER_SetTune
   (
      OEMCONTEXT        cxt,
      uint32            Frequency,
      int              *pSensitivity
   )

パラメータ:
   cxt       [in]       コンテキストのポインタ
   Frequency [in]       設定周波数
   pSensitivity [out]   受信感度

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            コンテキストが設定されていない

解説:
   CALLBACKルーチンがセットされていない場合は、WAIT処理を行いチューニングの完了を待つ。

副作用:
   なし

関連:
   OEMFMTUNER_RegisterNotify()


=====================================================================*/
int    OEMFMTUNER_SetTune(OEMCONTEXT cxt, uint32 Frequency, int *pSensitivity);

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

関数名: OEMFMTUNER_GetTune()

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

プロトタイプ:
   int OEMFMTUNER_GetTune
   (
      OEMCONTEXT        cxt,
      uint32           *pFrequency
   )

パラメータ:
   cxt        [in]      コンテキストのポインタ
   pFrequency [out]     設定周波数

戻り値:
   SUCCESS              成功
   EBADSTATE            コンテキストが設定されていない

解説:
   CALLBACKルーチンがセットされていない場合は、WAIT処理を行いチューニング周波数取得の完了を待つ。

副作用:
   なし

関連:
   OEMFMTUNER_RegisterNotify()

=====================================================================*/
int    OEMFMTUNER_GetTune(OEMCONTEXT cxt, uint32 *pFrequency);

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

関数名: OEMFMTUNER_GetState()

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

プロトタイプ:
   int OEMFMTUNER_GetState
   (
      OEMCONTEXT        cxt,
      int              *pSensitivity
   )

パラメータ:
   cxt          [in]    コンテキストのポインタ
   pSensitivity [out]   受信感度

戻り値:
   SUCCESS              成功
   EBADSTATE            コンテキストが設定されていない

解説:
   CALLBACKルーチンがセットされていない場合は、WAIT処理を行い受信感度取得の完了を待つ。

副作用:
   なし

関連:
   OEMFMTUNER_RegisterNotify()

=====================================================================*/
int    OEMFMTUNER_GetState(OEMCONTEXT cxt, int *pSensitivity);

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

関数名: OEMFMTUNER_CtrlPower()

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

プロトタイプ:
   int OEMFMTUNER_CtrlPower
   (
      OEMCONTEXT        cxt,
      boolean           Power
   )

パラメータ:
   cxt          [in]    コンテキストのポインタ
   Power        [in]    電源制御情報（０：ＯＦＦ／１：ＯＮ）

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            コンテキストが設定されていない

解説:
   なし

副作用:
   なし

関連:
   なし


=====================================================================*/
int    OEMFMTUNER_CtrlPower(OEMCONTEXT cxt, int Power);

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

関数名: OEMFMTUNER_ChangeDevice()

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

プロトタイプ:
   int OEMFMTUNER_ChangeDevice
   (
      OEMCONTEXT        cxt,
      int               Device
   )

パラメータ:
   cxt          [in]    コンテキストのポインタ
   Device       [out]   出力デバイス

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            コンテキストが設定されていない

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

副作用:
   なし

関連:
   AEESoundDevice


=====================================================================*/
int    OEMFMTUNER_ChangeDevice(OEMCONTEXT cxt, int Device);

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

関数名: OEMFMTUNER_RegisterNotify()

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

プロトタイプ:
   int OEMFMTUNER_RegisterNotify
   (
      OEMCONTEXT        cxt,
      PFNFMTUNERNOTIFY  pfnNotify,
      void             *pUser
   )

パラメータ:
   cxt          [in]   コンテキストのポインタ
   pfnNotify    [in]   コールバック関数へのポインタ
   pUser        [in]   コールバックを処理する時に使用するユーザ−データ

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

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

副作用:
   なし

関連:
   なし

=====================================================================*/
int    OEMFMTUNER_RegisterNotify(OEMCONTEXT cxt, PFNFMTUNERNOTIFY  pfnNotify, void *pUser);

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

関数名: OEMFMTUNER_New()

機能:
   コンテキストを作成します．

プロトタイプ:
   OEMCONTEXT OEMFMTUNER_New
   (
      int               *pError
   )

パラメータ:
   pError               戻り値にNULLが返却された場合に、エラーが返却される領域のポインタ

戻り値:
   NULL以外             作成されたコンテキストのポインタ
   NULL                 失敗

解説:
   なし

副作用:
   なし

関連:
   OEMFMTUNER_Free()

=====================================================================*/
// [PTX635] IFMTUNERの実装 [S]
//OEMCONTEXT OEMFMTUNER_New(int *pError);
OEMCONTEXT OEMFMTUNER_New( IFMTUNER * pFMTuner, int * pError );
// [PTX635] IFMTUNERの実装 [E]

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

関数名: OEMFMTUNER_Backup()

機能:
   コンテキストを作成します．

プロトタイプ:
   OEMCONTEXT OEMFMTUNER_Backup
   (
      IFMTUNER         *pFMTuner
   )

パラメータ:
   pFMTuner             コールバック用に退避されるFMチューナオブジェクトポインタ

戻り値:
   なし

解説:
   なし

副作用:
   なし

関連:
   なし

=====================================================================*/
// [PTX635] IFMTUNERの実装 [S]
//void OEMFMTUNER_Backup(IFMTUNER *pFMTuner);
// [PTX635] IFMTUNERの実装 [E]
/*=====================================================================

関数名: OEMFMTUNER_GetInfo()

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

プロトタイプ:
   uint OEMFMTUNER_GetInfo
   (
      OEMCONTEXT cxt,
      int        para,
      int       *pInfo
   )

パラメータ:
   cxt          コンテキストのポインタ
   int          要求パラメータ
   info         通知情報

戻り値:

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

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
int    OEMFMTUNER_GetInfo(OEMCONTEXT cxt, int para, int *pInfo);





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

関数名: OEMFMTUNER_GetCallBack()

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

プロトタイプ:
   PFNFMTUNERHDSET OEMFMTUNER_GetCallBack()

パラメータ:
   なし

戻り値:

   NULL                 CALLBACK未登録
   NULL以外             登録済みCALLBACKルーチン

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
// [PTX635] IFMTUNERの実装 [S]
//PFNFMTUNERHDSET OEMFMTUNER_GetCallBack(void);
// [PTX635] IFMTUNERの実装 [E]
/*=====================================================================

関数名: OEMFMTUNER_GetCallBack_CloseApp()

機能:
   この関数は APPLETを終了させる為の通知をCALLBACK処理で通知する。

プロトタイプ:
   PFNFMTUNERCLOSEAPP OEMFMTUNER_GetCallBack_CloseApp()

パラメータ:
   なし

戻り値:

   NULL                 CALLBACK未登録
   NULL以外             登録済みCALLBACKルーチン

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
// [PTX635] IFMTUNERの実装 [S]
//PFNFMTUNERCLOSEAPP OEMFMTUNER_GetCallBack_CloseApp(void);
// [PTX635] IFMTUNERの実装 [E]
/*=====================================================================

関数名: OEMFMTUNER_GetCallBack_Manner()

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

プロトタイプ:
   PFNFMTUNERMANNER OEMFMTUNER_GetCallBack_Manner()

パラメータ:
   なし

戻り値:

   NULL                 CALLBACK未登録
   NULL以外             登録済みCALLBACKルーチン

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
// [PTX635] IFMTUNERの実装 [S]
//PFNFMTUNERMANNER OEMFMTUNER_GetCallBack_Manner(void);
// [PTX635] IFMTUNERの実装 [E]
/*=====================================================================

関数名: OEMFMTUNER_GetFrequency()

機能:
   この関数は 設定中の周波数を取得する

プロトタイプ:
   uint32 OEMFMTUNER_GetFrequency()

パラメータ:
   なし

戻り値:
   設定周波数（Khz)

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
// [PTX635] IFMTUNERの実装 [S]
uint32 OEMFMTUNER_GetFrequency(void);
// [PTX635] IFMTUNERの実装 [E]

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

関数名: OEMFMTUNER_SetMode()

機能:
   FMチューナのステレオ／モノラルのモード設定を行う．

プロトタイプ:
   int OEMFMTUNER_SetMode
   (
      IFMTUNER        *pMe,
      int             mode
   )

パラメータ:
   pMe      [in]       FMチューナオブジェクトのポインタ
   mode     [in]       モード（ステレオ／モノラル）

戻り値:
   SUCCESS              成功
   EBADPARM             入力パラメータ不正
   EBADSTATE            コンテキストが設定されていない

解説:
   なし

副作用:
   なし

関連:
   なし

=====================================================================*/
// [PTX635] IFMTUNERの実装 [S]
int OEMFMTUNER_SetMode(OEMCONTEXT cxt,int mode);
//int OEMFMTUNER_SetMode(IFMTUNER *pMe,int mode);
// [PTX635] IFMTUNERの実装 [E]

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

関数名: OEMFMTUNER_GetNowVol()

機能:
   この関数は 設定中の音量を取得する

プロトタイプ:
   int OEMFMTUNER_GetNowVol()

パラメータ:
   なし

戻り値:
   設定音量（０〜１０)

解説:
   なし

副作用:
   なし

関連:
   なし

======================================================================*/
// [PTX635] IFMTUNERの実装 [S]
int OEMFMTUNER_GetNowVol(void);
// [PTX635] IFMTUNERの実装 [E]

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

関数名: CFMTUNER_Record()

機能:   この関数は FM ラジオの録音を行う。

プロトタイプ:
   int IFMTUNER_Record
   (
       IFMTUNER *pIFMTUNER
   )
   
パラメータ:
    pIFMTUNER IFMTUNER インタフェースオブジェクトへのポインタ
    
戻り値:
    SUCCESS 成功
    EBADSTATE エラー(状態不良)
    EUNSUPPORTED 非対応
    FMT_PENDING 登録されたコールバックの中に値が返された
解説:
    この関数を処理する前に、IFMTuner_RegisterNotify()関数によりコールバック関数を登録し、
    コールバック関数により処理結果を取得すること。
    IFMTUNER_Record()呼び出し時に、状態のチェック（データフォルダの残容量など）を行い、
    OK であれば、FMT_STATUS_REC_STANBY をアプリに通知する。
    実際に録音を開始した時点で、FMT_CMD_RECORD をアプリへ通知する。
    つまり、IFMTUNER_Record()を実行すると、２種類のコールバック通知が発生する。

副作用:
    なし
*----------------------history ------------------------------------------
*  No	Date			Revised By		Item				   Description 
*  1.	2005/09/16		Cui Xinyu		CFMTUNER_Record		Created
=======================================================================*/
int OEMFMTUNER_Record( OEMCONTEXT cxt );
/*=======================================================================

関数名: CFMTUNER_RecStop()

機能:   この関数はFM ラジオの録音を停止する。

プロトタイプ:
    int IFMTUNER_RecStop
    (
        IFMTUNER *pIFMTUNER
    )
    
パラメータ:
    pIFMTUNER IFMTUNER インタフェースオブジェクトへのポインタ

戻り値:
    SUCCESS 成功
    EBADSTATE エラー(状態不良)
    EUNSUPPORTED 非対応
    FMT_PENDING 登録されたコールバックの中に値が返された

解説:
    この関数を処理する前に、IFMTuner_RegisterNotify()関数によりコールバック関数を登録し、
    コールバック関数により処理結果を取得すること。

副作用:
    なし
*----------------------history ------------------------------------------
*  No	Date			Revised By		Item				   Description 
*  1.	2005/09/16		Cui Xinyu		CFMTUNER_RecStop		Created
=======================================================================*/
int OEMFMTUNER_RecStop( OEMCONTEXT cxt );
/*=======================================================================

関数名: CFMTUNER_GetFileName()

機能:   この関数は FM ラジオの録音用ファイル名を取得する。

プロトタイプ:
    int IFMTUNER_GetFileName
    (
        IFMTUNER *pIFMTUNER,
        unsigned char *name,
        int *wSize;
    )
    
パラメータ:
    pIFMTUNER IFMTUNER インタフェースオブジェクトへのポインタ
    name 出力ファイル名
    wSize 出力ファイル名の文字列長

戻り値:
    SUCCESS 成功
    EBADSTATE エラー(状態不良)
    EBADPARAM 引数が不正な場合
    EUNSUPPORTED 非対応

解説:
    なし

副作用:
    なし
*----------------------history ------------------------------------------
*  No	Date			Revised By		Item				       Description 
*  1.	2005/09/16		Cui Xinyu		CFMTUNER_GetFileName		Created
=======================================================================*/
int OEMFMTUNER_GetFileName( OEMCONTEXT cxt, unsigned char *name, int *wSize);
// [PTX803] バックグラウンド再生中リモコン操作対応 [S]
/*=======================================================================

関数名: OEMFMTUNER_BG_SetVolume()

機能:
   バックグランドアプリ用音量設定処理

プロトタイプ:
   void OEMFMTUNER_BG_SetVolume
   (
		int Volume
   )

パラメータ:
	Volume	セットする音量

戻り値:
	なし

副作用:
   なし

関連:
   なし

=======================================================================*/
void  OEMFMTUNER_BG_SetVolume( int Volume );

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

関数名: OEMFMTUNER_BG_Seek()

機能:
   バックグランド再生中FMラジオ自動チューニングを行う

プロトタイプ:
   void OEMFMTUNER_BG_Seek
   (
		int direction,
		uint32 * pFrequency
   )

パラメータ:
	direction	チューニング方向
	pFrequency	チューニング開始周波数

戻り値:
	なし

副作用:
   なし

関連:
   なし

=======================================================================*/
void OEMFMTUNER_BG_Seek( int direction, uint32 * pFrequency );


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

関数名: OEMFMTUNER_BG_SetTune()

機能:
   バックグランド再生中FMラジオの周波数をセットする

プロトタイプ:
   void OEMFMTUNER_BG_SetTune
   (
		uint32 * pFrequency
   )

パラメータ:
	pFrequency	セットする周波数

戻り値:
	なし

副作用:
   なし

関連:
   なし

=======================================================================*/
void  OEMFMTUNER_BG_SetTune( uint32 Frequency);

// [PTX803] バックグラウンド再生中リモコン操作対応 [E]

#endif // _OEMFMTUNER_H_
