/*	
 *	clipgpio.h
 *
 *	汎用I/Oルーチン
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2016 Naoyuki Sawa
 *
 *	* Wed Sep 11 00:35:50 JST 2013 Naoyuki Sawa
 *	- 1stリリース。
 *	* Wed Sep 11 23:15:01 JST 2013 Naoyuki Sawa
 *	- ChatteringCanceller_Update()をASM化し、約32byteメモリ節約しました。
 *	* Wed Nov 18 21:37:53 JST 2015 Naoyuki Sawa
 *	- 'extern "C" {'〜'}'で囲みました。.cppを含むWin32プロジェクトからもインクルード出来るようにするためです。
 *	* Sat Apr 02 23:34:06 JST 2016 Naoyuki Sawa
 *	- ARRAY_SIZE()マクロの変更に伴い、VC++6.0でintとunsignedの比較に対する警告が厳密に出るようになったので、警告が出ないように明示的なキャストを追加しました。
 *	  動作自体はこれまでと変わりません。
 *	  詳細はclipmisc.hの同日のコメントを参照して下さい。
 *	* Wed Aug 17 21:19:23 JST 2016 Naoyuki Sawa
 *	- 構造体の名前を、ST_ChatteringCanceller⇒ST_Gpioに変更しました。
 *	  関数の名前を、ChatteringCanceller_〜⇒Gpio_〜に変更しました。
 *	  名前を変更した理由は、変更前の名前は長過ぎてアプリケーションで使い辛かったからです。
 *	  名前以外には変更は無く、当モジュールの動作は変わっていません。
 */
#ifndef __CLIP_GPIO_H__
#define __CLIP_GPIO_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	チャタリング除去
 ****************************************************************************/
typedef struct _ST_Gpio {
	int	StableStatus;	//+ 0, 4 安定状態
	int	StableOnEdge;	//+ 4, 4 安定状態のOnエッジ  (蓄積)
	int	StableOffEdge;	//+ 8, 4 安定状態のOffエッジ (蓄積)
	int	StableCount;	//+12, 4 チャタリング除去回数(0〜4)	//ポート状態が(StableCount+1)回連続で同じならば安定状態と見なす。0ならばチャタリング除去を行わない。
	int	PortStatus[4];	//+16,16 (i+1)回前のポート状態
} ST_Gpio;			//=32
/*--------------------------------------------------------------------------*/
void Gpio_Init(ST_Gpio* pGpio, int StableCount);
void Gpio_Update(ST_Gpio* pGpio, int PortStatus);
int Gpio_GetStatus(ST_Gpio* pGpio, int* pOnEdge/*NULL可*/, int* pOffEdge/*NULL可*/);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_GPIO_H__
