/***************************************************************************
 *
 *	CRI Middleware SDK
 *
 *	Copyright (c) 2001-2004 CRI-MW
 *
 *	Appli.	: CRI Middleware Sample Program
 *	Module	: Users Functions Header
 *	File	: usr.h
 *	Date	: 2004-09-02
 *
 ***************************************************************************/

#ifndef INCLUDED_USR_H		/* Re-definition prevention */
#define INCLUDED_USR_H

/***************************************************************************
 *		インクルードファイル
 *		Include Files
 ***************************************************************************/
#include <cri_ut.h>

/***************************************************************************
 *		定数マクロ
 *		Constant Macros
 ***************************************************************************/

/* パッド入力の種類				*/
/* Kind of inputs of peripheral	*/
#define USR_PD_UP			UTPAD_UP
#define USR_PD_DOWN			UTPAD_DOWN
#define USR_PD_LEFT			UTPAD_LEFT
#define USR_PD_RIGHT		UTPAD_RIGHT
#define USR_PD_BUTTON1		UTPAD_BUTTON1
#define USR_PD_BUTTON2		UTPAD_BUTTON2
#define USR_PD_BUTTON3		UTPAD_BUTTON3
#define USR_PD_BUTTON4		UTPAD_BUTTON4
#define USR_PD_L			UTPAD_L
#define USR_PD_R			UTPAD_R
#define USR_PD_START		UTPAD_START

/* パッドのポート番号			*/
/* Port number of peripherals	*/
#define USR_PD_PORT_MAX		UTPAD_PORT_MAX
#define USR_PD_PORT1		UTPAD_PORT1
#define USR_PD_PORT2		UTPAD_PORT2

/***************************************************************************
 *		処理マクロ
 *		Process Macros
 ***************************************************************************/

/***************************************************************************
 *		データ型宣言
 *		Data Type Declarations
 ***************************************************************************/
/* パッド情報			*/
/* Peripheral states	*/
typedef struct { 
	Uint32	on; 
	Uint32	press; 
	Sint16	x1; 
	Sint16	y1; 
} USR_PERIPHERAL; 

/***************************************************************************
 *		変数宣言
 *		Variable Declarations
 ***************************************************************************/

/***************************************************************************
 *		関数宣言
 *		Function Declarations
 ***************************************************************************/
#ifdef  __cplusplus
extern "C" {					/* __cplusplus */
#endif

/***
 *		System Functions
 ***/

/* システムの初期化			*/
/* Initialize the system	*/
void UsrInitSystem(const void *in, void *out);

/* システムの終了		*/
/* Finalize the system	*/
void UsrFinishSystem(void);


/***
 *		Video Functions
 ***/

/* ビデオシステムの初期化		*/
/* Initialize the video system	*/
void UsrInitVideo(const void *in, void *out);

/* ビデオシステムの終了			*/
/* Finalize the video system	*/
void UsrFinishVideo(void);

/* 描画開始			*/
/* Start drawing	*/
void UsrBeginDraw(void);

/* 描画終了		*/
/* End drawing	*/
void UsrEndDraw(void);

/* VBlank待ち		*/
/* Wait a Vblank	*/
void UsrWaitVBlank(void);

/* 同期システムの初期化						*/
/* Initialize the synchronization system	*/
/*	cnt :frame count						*/
/*	cnt=0:interlace	/ cnt>0:non interlace	*/
void UsrInitSync(Sint32 cnt);

/* フレーム同期			*/
/* Synchronize frame	*/
void UsrSyncFrame(void);


/***
 *		Audio Functions
 ***/

/* サウンドシステムの初期化		*/
/* Initialize the sound system	*/
void UsrInitSound(const void *in, void *out);

/* サウンドシステムの終了		*/
/* Finalize the sound system	*/
void UsrFinishSound(void);


/***
 *		Drawing Movie Functions
 ***/
/* ムービーデータのテクスチャへの転送	*/
/* Load movie frame for Sofdec			*/
void UsrLoadMvFrm(Uint8 *bufadr, Sint32 sx, Sint32 sy);

/* ムービーフレームの描画	*/
/* Draw Movie frame			*/
void UsrDrawMv(void);


/***
*		Peripheral Functions
***/

/* パッド情報取得			*/
/* Get peripheral states	*/
const USR_PERIPHERAL* UsrGetPeripheral(Uint32 port);


/***
 *		Utility Functions
 ***/

/* メモリ確保			*/
/* Allocate memory		*/
void *UsrMalloc(Uint32 size);

/* メモリ開放	*/
/* Free memory	*/
void UsrFree(void *ptr);

/* Vsyncカウント値の取得	*/
/* Get Vsync count			*/
Uint32 UsrGetVcount(void);

/* デバッグ文字表示			*/
/* Print string for debug	*/
Sint32 UsrPrintf(Sint32 lx, Sint32 ly, const Char8 *fmt, ...);

/* デバッグ文字色設定	*/
/* Set text color		*/
void UsrSetColor(Uint8 r, Uint8 g, Uint8 b);

/* スクリーンサイズの取得	*/
/* Get size of screen		*/
void UsrGetMetrix(Sint32 *w, Sint32 *h);

/* デバッグ文字列出力		*/
/* Output string for debug	*/
Sint32 UsrDbgPrintf(const Char8 *fmt, ...);

/* オンメモリにデータをロードする	*/
/* Load data to memory				*/
void *UsrLoadFile(const Char8 *fname, Sint32 *len);

/* インタレースムービー用テクスチャロードタイミング判定	*/
/* Check timing of loading texture for interlace movie	*/
Bool UsrIsLoadTiming(void);

/* トレーオープンステータスチェック	*/
/* Check door status				*/
Bool UsrIsDoorOpen(void);

/* 時刻の変換																*/
/* Convert from sampling frequency and counter to time(hour,min,sec,frame)	*/
void UsrSfcnt2time(Sint32 sf, Sint32 ncnt, 
					Sint32 *hh, Sint32 *mm, Sint32 *ss, Sint32 *ff);

/* 時刻の取得(usec単位)		*/
/* Get time as micro sec	*/
Uint32 UsrGetTimeMicro(void);

/* エラー表示ループ	*/
/* Error loop		*/
void UsrErrLoop(const Char8 *fmt, ...);

/* 終了するかどうかの確認					*/
/* Check whether Usr module is terminated	*/
Bool UsrIsTerminated();

#ifdef  __cplusplus
}
#endif

#endif	/* #ifndef INCLUDED_USR_H */
