/* 
 *  Shinobi Library
 *  Copyright (c) 1998-2000 SEGA
 *
 * File: sg_Calbk.h
 * Desc: Callback Chain library for application creaters.
 *
 * Auth: Jiro Terakwa(SYSTEM R&D)
 * Create: 2000/01/13 Jiro Terakawa: Ver. 2.00
 * Change: Changed the names, "CallBack" -> "Callback" 2000/01/17 J.T
 *         Also chagned sg_CalBk.h -> sg_Calbk.h
 *
 */

#ifndef _SG_CALBK_H_
#define _SG_CALBK_H_


#define SYD_CALLBACK_EVENT_VBLANKIN 0x0900    /* VBLANK-IN */

#define SYD_CALLBACK_EVENT_HBLANK   0x0920    /* HBLANK */


#define SYD_CALLBACK_EVENT_EOR      0x0950    /* End Of Render */
#define SYD_CALLBACK_EVENT_EOYUV    0x0960    /* End Of YUV */









#define SYD_CALLBACK_EVENT_PDPORT   0x0A00   /* pdSetIntFunction() と同じ */

#define SYD_CALLBACK_EVENT_GDEND    0x0A40   /* gdFsEntryRdEndFunc, gdFsEntryTrEndFunc */
#define SYD_CALLBACK_EVENT_AICADM   0x0A60   /* AICA DMA End */

typedef Uint32 SYCALLBACK;
typedef Uint32 SY_CALLBACK_EVENT;

/* 実行優先順位として指定できる値の範囲 */
#define SYD_CALLBACK_PRIORITY_MIN 0x00
#define SYD_CALLBACK_PRIORITY_MAX 0x10

/*-------------------------------------------------------
 * FUNC: syCallbackInit
 * DESC: syCallback ライブラリの初期化
 *       (ただしすでに登録したハンドラは削除しない)
 * ARG:  N/A
 *
 */
Void syCallbackInit(Void);


/*-------------------------------------------------------
 * FUNC: syCallbackFinish
 * DESC: syCallback ライブラリの終了処理
 *       登録したまま放置されたハンドラをすべて削除する
 * ARG:  N/A
 *
 */
Void syCallbackFinish(Void);

/*-------------------------------------------------------
 * FUNC: syCallbackAddHandler
 * DESC: コールバックへのユーザハンドラの追加を行う
 *       同じイベントに同じプライオリティーで登録されても
 *       古いハンドラは削除されずに、新しいハンドラが、
 *       古いハンドラの前に挿入される。
 *
 * ARG:  event: コールバック要因
 *       usrCallbackFunc: 登録する関数へのポインタ
 *       priority: コールバック要因が発生したときに
 *                 呼び出す順番を指定する。
 *                 小さいほど先に実行される。
 *       arg: コールバック関数を呼び出すときに渡す引数。
 *
 */
SYCALLBACK syCallbackAddHandler(SY_CALLBACK_EVENT event,
			  Void (*usrCallbackFunc)(Void *),
			  Uint8 priority,
			  Void *arg);

/*-------------------------------------------------------
 * FUNC: syCallbackAddHandler
 * DESC: コールバックリストからハンドラを削除する
 *
 * ARG:  callbackId: syCallbackAddHandler の戻り値として
 *                   得られるハンドル。
 */
Void syCallbackDeleteHandler(SYCALLBACK callbackId);


/*-------------------------------------------------------
 * FUNC: syCallbackNestCount
 * DESC: 現在の割込みネストの状態を取得する
 *       呼び出し時に割り込み処理中であると、1 以上の値が返る
 *       割り込み処理外で呼び出すと、0 が返る。
 * ARG:  N/A
 */
Uint32 syCallbackGetNestCount(Void);

#endif /* _SG_CALBK_H_ */


