/*	
 *	clipcbx.h
 *
 *	P/ECE シリアルMIDI Driver
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2004 Naoyuki Sawa
 *
 *	* Tue May 18 21:36:00 JST 2004 Naoyuki Sawa
 *	- 作成開始。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __CLIP_CBX_H__
#define __CLIP_CBX_H__

#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus

/* “CBX”の名称は、YAMAHA社製シリアルMIDIドライバ“YAMAHA CBX Driver”から拝借しました。 */

/****************************************************************************
 *	定数・型定義
 ****************************************************************************/

/* シリアル通信設定 */
#define CBX_BAUDRATE	31250		/* 転送速度 PC-1 (PC-9801)        (どちらか選択) */
//#define CBX_BAUDRATE	38400		/* 転送速度 PC-2 (PC-9801/IBM-PC) (どちらか選択) */
#define CBX_PARITY	0		/* パリティ無し */
#define CBX_BYTESIZE	8		/* 8バイト */
#define CBX_STOPBITS	1		/* ストップビット1ビット */

/* 演奏用タイマコールバック設定 */
#define CBX_TIMER_CH	0		/* pceTimerSetCallback()で使用するチャネル番号 (変更可) */
#define CBX_TIMER_RATE	200		/* 1秒当りコールバック回数、多いほど正確に演奏 (調整可) */
					/* pceTimerSetCallback()への時間間隔指定はミリ秒単位で行うので、  */
					/* 誤差を防ぐために1000[ミリ秒]を割り切れる数を指定してください。 */

#define CBXTRACKS	16		/* CBXドライバがサポートする最大トラック数 (調整可) */

/*
 *	MIDIトラック構造体
 */
typedef struct _CBXTRACK {
	const unsigned char* pos;	/* 演奏位置 */
	int delta;			/* デルタタイム */
	int running_status;		/* ランニングステータス */
} CBXTRACK;

/*
 *	CBXドライバ構造体
 */
typedef struct _CBXDRIVER {
	int track_count;		/* トラック数 (0:停止中) */
	int time_unit;			/* 時間単位(四分音符当りのデルタタイム) */
	int tempo;			/* テンポ(四分音符当りのマイクロ秒) */
	long long timer;		/* 経過時間の余り[usec] (時間計算はマイクロ秒単位なので、intでは足りない) */
	CBXTRACK track[CBXTRACKS];	/* トラック */
} CBXDRIVER;

/****************************************************************************
 *	アプリケーション用関数
 ****************************************************************************/

/* 標準MIDIファイル(SMF)の再生を開始します。
 * [in]
 *	data		SMFデータの先頭アドレス。
 * [out]
 *	戻り値		再生開始に成功したら、 0を返します。
 *			再生開始できなければ、-1を返します。
 * [note]
 *	* アプリケーション終了前に、必ずcbx_stop()を呼んで演奏停止してください。
 *	  cbx_stop()を呼ばずにアプリケーションを終了すると、ハングアップします。
 */
int cbx_play(const void* data);

/* 標準MIDIファイル(SMF)の再生を停止します。
 * [note]
 *	* 再生中でなければ、この関数は何もしません。
 */
void cbx_stop();

#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus

#endif /*__CLIP_CBX_H__*/
