/****************************************************************************************
 * 文件名: kf8s_touch_w.c
 * 版 本:   V2.4
 * 日 期:   2015-12-20
 * 作 者:  上海芯旺微电子技术有限公司
 * 说明：    电容触摸库库变量资源
 ****************************************************************************************/
#include "main.h"
/********************************************************************************************/
//触摸库使用防水
/********************************************************************************************/
/****以下为触摸算法所用到的通用变量数据，数组的元素个数必须与所开通的通道数一致！！！****/
signed 		char 	_KF8_LIBc_baseline_count_[MX_CH]; 	//用作补偿基准线，满足条件的一定数量后采样IIR滤波方式更新
unsigned 	int  	_KF8_LIBi_buff_hit_[MX_CH]; 	  	//记录当前通道的采样值
unsigned 	int  	_KF8_LIBi_buff_baseline_[MX_CH];	//当前通道的基准值
unsigned 	char 	_KF8_LIBc_touch_count_[MX_CH];  	//记录当前按键的判定时次数，满足TCS_AMOUNT时置按下标志
signed 		int  	_KF8_LIBi_Date_Change_[MX_CH];		//按键采样变化量级，正数表示低于，负数表示高于


unsigned char _KF8_LIBc_channel_;       //当前处理通道位置
//最大通道数，达到该值时，下次通道切换选择第一个映射的通道号
unsigned char const CHS_AMOUNT = MX_CH;
//通道按键按下滤波0到255可设，仅满足最大手指阀，且计数到该数值时判定按键被按下
unsigned char const TCS_AMOUNT = 3;

//异常识别起始在接下来的0到65535个扫描周期特殊处理，多通道一定幅度下降认为水，识别动作后的周期内不会进行按键判断。
unsigned int const _KF8_Disturb_Protect_Circle_=200;

//双键允许时间设定，有效参数11-65535，当为0时，限定时间概念失效
/**效果说明：如首个按键识别后，在接下来时间内允许组合双键，超过时间仅识别首个按键(单键)**/
/**设置说明：这里的数值为扫描循环周期，示例：如800,约时间(800乘（通道数4)乘(单通道处理时间1ms)=3秒**/
unsigned int const _KF8_DoubleKey_Compages_Limitable_Circle_=800;

//按键最长有效时间设定，有效参数1-65535，当为0时，最长时间概念失效
/**效果说明：如按键最长时间为35秒，超过的计为异常，超时的清除标志，失效时无时长概念**/
/**设置说明：这里的数值为扫描循环周期，示例：如8000,约时间(8000乘（通道数4)乘(单通道处理时间1ms)=32秒**/
unsigned int  const _KF8_Key_Max_Pressed_Limitable_Circle_=8000;


//更新基准线快慢参数，值越小更新的约快，正负0-125可设，建议为按键有效计数的正数倍
signed char const _KF8_BaseLine_Update_Circle_Count_For_UP_=64;    //正方向计数到采样IIR滤波
signed char const _KF8_BaseLine_Update_Circle_Count_For_Down_=-64;   //负方向计数到采样IIR滤波，对等地位

//同时变化通道数属于异变，主要用于向下,最小值2，最大值根据通道数量
unsigned char const  _KF8_Define_Disturb_Channels_Amount_=3;

//量化定义向上/向下变化率多于x属于突变，突变计数，多于一定数量属于异变
signed char const _KF8_BasicLine_UP_Noise_Threshold_=-35;
signed char const _KF8_BasicLine_Down_Noise_Threshold_=35;
signed char const _KF8_Data_Steady_Threshold_Set_=20;  //上下次波动限定，低于属于趋势稳定
//量化参考通道变化率多于x属于电源波动
signed char const _KF8_Inside_Reference_Channel_Disturb_Threshold_Set_=15;  //仅用于参考通道

//双键定义，最多支持3组，不满3组的，多于的赋值为不存在组合即可
/**设置说明: 采用每4bit存贮1个按键信息，即允许组合的双键扫描顺序号必须小于16 **/
/**解释： 如_KF8_TOUCH_CH_EN[MX_CH]下标2和5组合，可以设定该组合码为0x25，数组的内容为CTx，即不限定下标2或5内容为CT2和CT5*/
/**特殊应用，当不要太多组合时，如仅1组时，将组合2，和3设定为0xFF即可，即同一下标*/
unsigned char const  Double_Key_SET_EN_1=0x01;
unsigned char const  Double_Key_SET_EN_2=0x23;
unsigned char const  Double_Key_SET_EN_3=0x45;

//使用的通道数据及通道号，这里需和芯片对应，如CT3写3，不同芯片的内部参考通道可能不同，需要_KF8_Inside_Reference_Channel_Declare_定义，如这为CT10
unsigned char const _KF8_TOUCH_CH_EN[MX_CH]={
										2,
										3,
										4,
										5,
										8,
										9,
										10,
										11,
							};
unsigned char const _KF8_Inside_Reference_Channel_Declare_=20; //内容值为参考通道，不使用时赋予一个不存在的值即可

/*;;理想条件变化量从小到大依次分为：小范围波动，噪声阀，来水阀，手指阀;;
 * 即：超过噪声阀通道数量满足大于等于3个，判断按键存在水，来水后变化率
 * 应该比手指阀小从而水不会产生按键误识别，手指阀，延时滤波直接关系到灵敏度
 * 防水建议不应按键太过灵敏，建议1秒可识别2次的速度
*/

/**这里调整无水时按下需要幅度，*/
signed int const _KF8_Config_Finger_Threshold[MX_CH]={
									50,
									50,
									50,
									50,
									50,
									50,
									50,
									50,
									};
/**防水监听，无水按键，在手指按键后有水，设置该值略小于引水后的变化率*/
unsigned char const  _KF8_Water_Monitor_ = 25;
/**多个通道的有幅度下降，记为异常，标记为水存在，水及按下会带来更多的变化量，因此阀需要卡的更高些，*/
signed int const _KF8_CONFIG_FINGER_THRESHOLD_IN_WATER_[MX_CH]={
									100,
									100,
									100,
									100,
									100,
									100,
									100,
									100,
									};
unsigned int _KF8_LIBi_channel_flag_;  //对外提供按键信息
/********************************************************************************************/
//触摸库使用资源结束
/********************************************************************************************/
/********************触摸通道配置结束****************************************************/
