/*	
 *	clipgpio.h
 *
 *	汎用I/Oルーチン
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2013 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メモリ節約しました。
 */
#ifndef __CLIP_GPIO_H__
#define __CLIP_GPIO_H__

/****************************************************************************
 *	チャタリング除去
 ****************************************************************************/

typedef struct _ST_ChatteringCanceller {
	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_ChatteringCanceller;	/* =32 */

void ChatteringCanceller_Init(ST_ChatteringCanceller* pChatteringCanceller, int StableCount);
void ChatteringCanceller_Update(ST_ChatteringCanceller* pChatteringCanceller, int PortStatus);
int ChatteringCanceller_GetStatus(ST_ChatteringCanceller* pChatteringCanceller, int* pOnEdge/*NULL可*/, int* pOffEdge/*NULL可*/);

#endif/*__CLIP_GPIO_H__*/
