/*
    Header for CE-AP1 control
*/
/*
  This file is written by Kentaro Shirakata, and completely
 in public domain. You can freely use, copy, modify, and
 redistribute the whole content, without this notice.
*/
/*
  ChangeLog

  2001/09/21 First release.
  2001/11/15 Add comment for Ceap1Dispose() and Ceap1GetKeyStatus()
*/

#ifndef ceap1_h
#define ceap1_h

typedef struct {
	char	buf[488];
} MP3BUF;
/* 制御構造体
  CE-AP1制御関数を呼び出すときに必要となります。
  実際には様々なデータが入っていますが、普通に利用する分には
  中身は気にせずに、ポインタだけを使えばいいようになっています。
*/


MP3BUF *Ceap1New(void);
/* 初期化
  返り値:	制御構造体へのポインタ (NULLならエラー)

  MP3ドライバを初期化し、制御構造体のメモリを確保して、
  一部初期設定の上、ポインタを返します。
  (この関数を除く)APIの呼び出しには常にこの構造体へのポインタを利用します。
  プログラム開始時に呼ぶことになるでしょう。
  なお、初期化時には音量が0になっているので、Ceap1SetVolume()を
  呼び出すのを忘れないようにしてください。
*/


void	Ceap1Dispose(MP3BUF *mp3buf);
/* 開放
  mp3buf:	制御構造体へのポインタ

  ドライバと構造体を開放します。
　この関数は必ずPIMExecEnd()関数内で呼び出すようにして下さい。
  それ以外の場所で呼び出すと動作が不安定になります。
*/


int	Ceap1StartPlayMp3File(MP3BUF *mp3buf, const char *filename);
/* 演奏開始
  mp3buf:	制御構造体へのポインタ
  filename:	MP3ファイル名
  返り値:	0:正常 0以外:エラー

  指定されたMP3ファイルの演奏を開始します。
  現在演奏中だった場合も、現在の演奏を中止してこのファイルを演奏します。
*/


int	Ceap1StopPlayMp3File(MP3BUF *mp3buf);
/* 演奏終了
  mp3buf:	制御構造体へのポインタ
  返り値:	0:正常 0以外:エラー

  現在演奏中の場合、演奏を終了します。
*/


int	Ceap1SetVolume(MP3BUF *mp3buf, const int speaker, const unsigned char vol);
#define	CEAP1_SP_BOTH	0
#define	CEAP1_SP_RIGHT	1
#define	CEAP1_SP_LEFT	2
/* 音量設定
  mp3buf:	制御構造体へのポインタ
  speaker:	スピーカー選択(上記#define参照)
  vol:		音量
  返り値:	0:正常 0以外:エラー

  音量を設定します。
  左右の音量を別々に設定することも出来ます。
*/


int Ceap1GetPlayStatus(MP3BUF *mp3buf);
/* 演奏状態チェック
  mp3buf:	制御構造体へのポインタ
  返り値: 0:停止 1:演奏 2:演奏終了(?)  3:一時停止

  現在の演奏状態を返します。
  複数の曲を演奏したり、リピートしたりする場合は、
  返り値が2になった時に処理すればよい、と思われますが、
  この状態が捕捉できる事が保証されているのかどうかがいまいち不明です。
*/


int	Ceap1IsPlayMp3File(MP3BUF *mp3buf);
/* 演奏中かチェック
  mp3buf:	制御構造体へのポインタ
  返り値:	1:演奏中 0:非演奏中

  一時停止中も「非演奏中」とみなされます。
  Ceap1GetPlayStatus()があればいらないような気がします。
*/


int Ceap1PausePlayMp3File(MP3BUF *mp3buf);
/* 演奏一時停止
  mp3buf:	制御構造体へのポインタ
  返り値:	0:正常 0以外:エラー

  演奏を一時停止します。
*/

int Ceap1RestartPlayMp3File(MP3BUF *mp3buf);
/* 演奏再開
  mp3buf:	制御構造体へのポインタ
  返り値:	0:正常 0以外:エラー

  一時停止した演奏を再開します。
*/


int	Ceap1IsCeap1Connect(MP3BUF *mp3buf);
/* CE-AP1接続チェック
  mp3buf:	制御構造体へのポインタ
  返り値:	0:非接続 1:接続

  オプションポートにCE-AP1が接続されているかをチェックします。
  明示的にチェックしなくても、非接続状態で演奏しようとすると
  エラーが返るようです。
*/


int	Ceap1GetPlayedLength(MP3BUF *mp3buf);
/* 演奏済時間チェック
  mp3buf:	制御構造体へのポインタ
  返り値:	今の曲の演奏済時間(秒)

  現在演奏中の曲が、演奏して何秒経過したかを返します。
*/


int Ceap1SetTreble(MP3BUF *mp3buf, unsigned char lev);
/* 高音域レベル設定
  mp3buf:	制御構造体へのポインタ
  返り値:	不明

  高音域をどれくらい強調するかを設定します。
*/


Ceap1SetBass(MP3BUF *mp3buf, unsigned char lev);
/* 低音域レベル設定
  mp3buf:	制御構造体へのポインタ
  返り値:	不明

  低音域をどれくらい強調するかを設定します。
*/


int	Ceap1GetLastPlayErr(MP3BUF *mp3buf);
/* 直前エラー番号
  mp3buf:	制御構造体へのポインタ
  返り値:	エラー番号

  直前に発生したエラーのエラー番号を返します。
*/


void	Ceap1ClearLastPlayErr(MP3BUF *mp3buf);
/* 直前エラー番号クリア
  mp3buf:	制御構造体へのポインタ

  Ceap1GetLastPlayErr()で返されるエラー番号をクリアします。
*/


int Ceap1GetKeyStatus(MP3BUF *mp3buf);
#define	CEAP1_KEY_PLAY	0x0001
#define	CEAP1_KEY_STOP	0x0002
#define	CEAP1_KEY_NEXT	0x0004
#define	CEAP1_KEY_PREV	0x0008
#define	CEAP1_KEY_UP	0x0010
#define	CEAP1_KEY_DOWN	0x0020
#define	CEAP1_KEY_LOCK	0x0080
/* リモコンボタン状態所得
  mp3buf:	制御構造体へのポインタ
  返り値:	リモコンボタンの状態

  リモコンボタンの状態を所得します。
  返り値は押されているボタンを表す値の論理和となります。
*/

/*
  以下はまだ判明していない関数群です。

int Ceap1PlayForward(MP3BUF *mp3buf, int val);
int Ceap1PlayRewind(MP3BUF *mp3buf, int val);

Ceap1SetPauseStatus(MP3BUF *mp3buf, const char *str, int num);
int Ceap1GetPauseStatus(MP3BUF *mp3buf, char *str, int *num);
int Ceap1IsKeyPressed(MP3BUF *mp3buf, int code);
*/
#endif
