/*	
 *	clipldir.h
 *
 *	高速切替・16階調表示
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2014 Naoyuki Sawa
 *
 *	* Sun Jun 6 14:11:00 JST 2004 Naoyuki Sawa
 *	- 作成開始。
 *	* Fri Dec 26 21:45:54 JST 2014 Naoyuki Sawa
 *	- 「8ビットプログラマブルタイマ割り込みの一元管理」を使用するように変更しました。
 *	- これまでは(IL=1)で動作していましたが、今後は(IL=6)で動作します。詳細は、clippce.cのinit_8tu()を参照してください。
 *	  この変更が当モジュールの動作に影響することは無いと思いますが、もし異常が発生した場合は上記の影響を疑ってください。
 *	- これまでは8-bit timer 2を使用していましたが、今後は8-bit timer 1を使用します。
 *	  この変更が当モジュールの動作に影響することは無いと思いますが、もし異常が発生した場合は上記の影響を疑ってください。
 *	- 8-bit timer 2⇒8-bit timer 1に変更した理由は、8-bit timer 1の方が使用上の注意点が多いからです。
 *	  具体的には、P/ECEカーネルがスタンバイ時に「高速(OSC3)発信回路の発振安定待ち時間」として8-bit timer 1を使用しています。
 *	  当モジュールは上記と共存できるため、8-bit timer 1でも動作可能です。
 *	  8-bit timer 2には上記のような注意点が無くて使い易いので、アプリケーションに8-bit timer 2を開放することにしました。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 */
#ifndef __CLIP_LDIR_H__
#define __CLIP_LDIR_H__

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

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

/* 高速切替を開始します。
 * [in]
 *	interval	更新周期をミリ秒単位で指定します。
 * [note]
 *	* 既に高速切替が開始していた場合は、いったん停止した後、指定された更新周期で再開します。
 *	* 更新周期が速すぎると、処理が間に合わずにハングアップします。
 *	  48MHz/1wait時は約15ミリ秒、24MHz/2wait時は24ミリ秒程度を更新頻度上限の目安としてください。
 *	  更新周期を長くするほど、アプリケーションの実行速度は上がりますが、画面がちらつきます。
 */
void ldirect_init(int interval);

/* 高速切替を停止します。
 * [note]
 *	* 高速切替が開始していない場合は、何もしません。
 *  //{{2014/12/26変更:「8ビットプログラマブルタイマ割り込みの一元管理」を使用するように変更しました。
 *  //	* 2004/06/06現在、高速切替ドライバはpceAppNotify()をフックして監視し、アプリケーション終了時に自動的に高速切替を停止します。
 *  //	  現在のところ、ldirect_free()を呼ぶ必要はないのですが、今後のため、なるべく明示的にldirect_free()を呼ぶようにしてください。
 *  //↓2014/12/26変更:「8ビットプログラマブルタイマ割り込みの一元管理」を使用するように変更しました。
 *	* 上記の変更に伴い、高速切替ドライバはpceAppNotify()のフックを、廃止しました。
 *	  'アプリケーション終了時に自動的に高速切替を停止する機能'も、無くなりました。
 *	  今後は、アプリケーションが明示的にldirect_free()を呼ぶ事が、必須となります。
 *  //}}2014/12/26変更:「8ビットプログラマブルタイマ割り込みの一元管理」を使用するように変更しました。
 */
void ldirect_free();

/* デバッグ用タイマ値を取得します。
 * [out]
 *	戻り値		デバッグ用タイマ値。
 * [note]
 *	* デバッグ用タイマ値は、高速切替ドライバが画面更新を行う度に+1するカウンタです。
 *	  高速切替の画面更新周期を確認する場合などに利用してください。
 */
int ldirect_timer();

/****************************************************************************
 *	内部関数
 ****************************************************************************/

void ldirect_mkbuf(const unsigned char wbuff[/*DISP_X / 2 * DISP_Y*/], const unsigned char* lcdbuff);
void ldirect_trans(const unsigned char wbuff[/*DISP_X / 2 * DISP_Y*/], const unsigned short cvttbl[/*256*/]);
void PDW_Draw_4BN(DRAW_OBJECT obj);

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

#endif /*__CLIP_LDIR_H__*/
