/*
 *	clipevtm.h
 *
 *	イベントタイマ
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2014 Naoyuki Sawa
 *
 *	* Mon Jun 09 17:53:50 JST 2014 Naoyuki Sawa
 *	- 1st リリース。
 *	- 割り込み外で処理するタイマイベントを、一元管理するための機能です。
 *	  STLプロジェクトの「イベントタイマ更新処理」(SubEventUpdateTimerInfo)の方法を参考にしました。
 */
#ifndef __CLIP_EVTM_H__
#define __CLIP_EVTM_H__

/****************************************************************************
 *	定数、構造体
 ****************************************************************************/
/* イベント番号 */
#define EvtTmr_Event_End	0		/* 終了 */
//				1		┐
//				|		├アプリケーション定義
//				UINT16_MAX-1	┘
#define EvtTmr_Event_Loop	UINT16_MAX	/* ループ */
/*--------------------------------------------------------------------------*/
/* イベントタイマチャネル */
typedef struct _ST_EvtTmrCh {
	const uint16_t* pData;	/* データの現在アドレス。(NULL=停止中) */
	int Wait;		/* 待ち時間の残数 */
} ST_EvtTmrCh;
/*--------------------------------------------------------------------------*/
/* イベントタイマ */
typedef struct _ST_EvtTmr {
	int nEvtTmrCh;					/* イベントタイマチャネル数 */
	const uint16_t* const* pData/*[nEvtTmrCh]*/;	/* 各イベントタイマチャネルのデータ (Wait,Event,Wait,Event,…の並び) */
	void (*onEvent)(int iEvtTmrCh, int iEvent);	/* アプリケーション定義のイベント処理関数 */
	ST_EvtTmrCh EvtTmrCh[0/*nEvtTmrCh*/];		/* イベントタイマチャネル */
} ST_EvtTmr;

/****************************************************************************
 *	アプリケーション用関数
 ****************************************************************************/
ST_EvtTmr* EvtTmr_Init(int nEvtTmrCh, const uint16_t* const* pData/*[nEvtTmrCh]*/, void (*onEvent)(int iEvtTmrCh, int iEvent));
void EvtTmr_InitStatic(ST_EvtTmr* pEvtTmr, int nEvtTmrCh, const uint16_t* const* pData/*[nEvtTmrCh]*/, void (*onEvent)(int iEvtTmrCh, int iEvent));
void EvtTmr_Start(ST_EvtTmr* pEvtTmr, int iEvtTmrCh);
int EvtTmr_Stop(ST_EvtTmr* pEvtTmr, int iEvtTmrCh);
void EvtTmr_StopAll(ST_EvtTmr* pEvtTmr);
int EvtTmr_Stat(ST_EvtTmr* pEvtTmr, int iEvtTmrCh);
void EvtTmr_Exec(ST_EvtTmr* pEvtTmr);

#endif/*__CLIP_EVTM_H__*/
