/*****************************************************
timer.h : Edited at 1998,3,3 by K.Sasaki
  μITRON サンプルプログラム
  Copyright(C) 1998-2002 佐々木芳

タイマタスク定義

*****************************************************/
#ifndef __TIMER_H__
#define __TIMER_H__

/*通信制御に固有な変数タイプの定義*/
typedef int			TNO;			/*タイマ番号*/
typedef DWORD		TIMEOUT;		/*タイムアウト時間*/

#define DECLARE_MASK			BOOL __ifl
#define SET_MASK				vget_ifl(&__ifl);vchg_ifl(TRUE)	
#define RESTORE_MASK			if(!__ifl) vchg_ifl(FALSE)


/*****************************************************
タイマスロット
*****************************************************/
typedef struct tagTimerSlot{
	TIMEOUT		count;			/*現在のカウント値*/
	TIMEOUT		timeout;		/*設定したカウント値*/
	ID			mbxid;			/*送信先メイルボックスＩＤ*/
	int			szMsg;			/*メッセージのサイズ*/
	MSGBLOCK	*pMsg;			/*送信メッセージのアドレス*/
}TIMERSLOT;


/*****************************************************
タイマ制御
*****************************************************/
void timSetTimer(						/*タイマ設定*/
			 TNO tno,					/*タイマ番号（TNO_xxx)*/
			 TIMEOUT timeout,			/*タイムアウト値（カウント値）*/
			 ID	 mbxid,					/*メイルボックスのＩＤ*/
			 int szMsg,					/*メッセージサイズ*/
			 MSGBLOCK* pMsg);			/*メッセージアドレス*/
void timCancelTimer(TNO tno);			/*タイマの設定解除*/
void timStartTimer(TNO tno);			/*タイマ起動*/
void timStopTimer(TNO tno);				/*タイマ停止*/



/*****************************************************
タイマ関連定数
*****************************************************/

/*定数*/
#define NUM_TIMERS		(16)		/*登録できるタイマの個数*/
#define TIMERUNIT		(20)		/*20msec（タイマタスクはこの間隔で動作）*/
#define TIME_1SEC		(1000)		/*1秒=1000ms*/


#endif /*__TIMER_H__*/
