/****************************************************************************************
 * 文件名:kf8ts27_touch_s.c
 * 版 本:   V3.0
 * 日 期:   2016-1-1
 * 作 者:  上海芯旺微电子技术有限公司
 * 说明：    电容触摸库库变量资源
 ****************************************************************************************/
#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_lib_Slide_Finded_MAX_I_T27_SW_[SLIDE_CH];//滑条组变化率最大通道号
signed int			_KF8_lib_Slide_Finded_MAX_I_Buf_T27_SW_[SLIDE_CH];//滑条组变化率最大备份
signed char  		_KF8_LIBi_Slide_round_count_[SLIDE_CH];//滑条组滑过圈数统计
unsigned int   		_KF8_LIBi_Slide_channel_back_[SLIDE_CH];//滑条组初始值备份

//当前处理通道位置
unsigned char _KF8_LIBc_channel_;
//最大通道数，达到该值时，下次通道切换选择第一个映射的通道号
unsigned char const CHS_AMOUNT = MX_CH;
//最大滑条组数，达到该值时，下次判断普通按键
unsigned char const SLIDE_AMOUNT = SLIDE_CH;
//通道按键按下滤波0到255可设，仅满足最大手指阀，且计数到该数值时判定按键被按下
unsigned char const TCS_AMOUNT = 4;
//滑条按键按下滤波0到255可设，仅满足最大手指阀，且计数到该数值时判定按键被按下
unsigned char const TCS_Slide_AMOUNT = 4;//4
//异常识别起始在接下来的0到65535个扫描周期特殊处理，多通道一定幅度下降认为水，识别动作后的周期内不会进行按键判断。
unsigned int const _KF8_Disturb_Protect_Circle_=100;

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

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


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

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

//量化定义向上/向下变化率多于x属于突变，突变计数，多于一定数量属于异变
signed char const _KF8_BasicLine_UP_Noise_Threshold_=-15;
signed char const _KF8_BasicLine_Down_Noise_Threshold_=15;
signed char const _KF8_Data_Steady_Threshold_Set_=6;  //上下次波动限定，低于属于趋势稳定

//量化参考通道变化率多于x属于电源波动
signed char const _KF8_Inside_Reference_Channel_Disturb_Threshold_Set_=5; //仅用于参考通道
unsigned char const _KF8_Inside_Reference_Channel_Declare_=25; //内容值为参考通道，不使用时赋予一个不存在的值即可

//使用的通道数据及通道号，这里需和芯片对应，如CT3写3，不同芯片的内部参考通道可能不同，需要_KF8_Inside_Reference_Channel_Declare_定义，如这为CT10
unsigned char const _KF8_TOUCH_CH_EN[MX_CH]={
								8,	7,	6,	5,		//对应第一组滑条的通道排列顺序
								14,	15,	13,	12,

								18,	17,	16,	10,		//对应第二组滑条的通道排列顺序
								9,	1,	0,	19,

								4,	3,				//普通单键排列顺序
							};

//滑条组通道分配情况
unsigned char const _SLIDE_DISTRIBUTION[SLIDE_CH]={
		8,//对应第一组滑条的通道个数
		8,//对应第二组滑条的通道个数
};

//滑条组输出最大分辨率设置
unsigned int const _SLIDE_RESOLUTION[SLIDE_CH]={
		50,//第一组滑条输出0-15级
		24,//第二组滑条输出0-255级
};
//滑条组单通道均摊分辨率设置，当最大分辨率除以通道数结果不为整数时，如100/7=14.28，则设置均摊分辨率为15；
unsigned char const _SLIDE_SINGLE_RESOLUTION[SLIDE_CH]={
		7,//15,//第一组滑条均摊16/4
		3,//13,//第二组滑条均摊256/8
};
//滑条组偏置分辨率设置，先把该值设置为0；
unsigned char const _SLIDE_OFFSET[SLIDE_CH]={
		8,//第一组滑条偏置
		0,//第二组滑条偏置
};
/*;;理想条件变化量从小到大依次分为：小范围波动，噪声阀，来水阀，手指阀;;
 * 即：超过噪声阀通道数量满足大于等于3个，判断按键存在水，来水后变化率
 * 应该比手指阀小从而水不会产生按键误识别，手指阀，延时滤波直接关系到灵敏度
 * 防水建议不应按键太过灵敏，建议1秒可识别2次的速度
*/

/**这里调整正常模式下按下需要幅度，针对滑轮滑条，阀值不需要太多，否则滑动过程中会中断*/
signed int const _KF8_Config_Finger_Threshold[MX_CH]={
								30,		30,		30,		30,	//对应第一组滑条的手指阈值
								30,		30,		30,		30,

								15,		15,		15,		15,	//对应第二组滑条的手指阈值
								15,		15,		15,		15,
								40,		30,					//对应普通单键的手指阈值

							};
/*多个通道的有幅度下降，记为异常，异常的通道识别后使用该阀值，相对来说该数值比手指阀设置要大，
  如果干扰不需要识别，可将阀值设定到一个按键无法到达的幅度，即不识别，当不考虑该能够能也可以和手指阀设置一样*/
signed int const _KF8_Config_Finger_Threshold_In_Disturb_[MX_CH]={
								500,		500,		500,		500,
								500,		500,		500,		500,
								500,		500,		500,		500,
								500,		500,		500,		500,
								500,		500,
							};
unsigned long _KF8_LIBi_channel_flag_;  //对外提供按键信息
unsigned char _KF8_LIBi_Slide_Press_Flag;	//滑条组标志，按下置对应bit为1
unsigned int  _KF8_LIBi_Slide_channel_out_[SLIDE_CH];//滑动组 输出当前分辨率
signed int  _KF8_LIBi_Slide_distance_out_[SLIDE_CH];//滑动组 输出滑动距离
/********************************************************************************************/
//触摸库使用资源结束
/********************************************************************************************/
/*********************引用按键标志****************************/
/********************触摸通道配置结束****************************************************/
