#ifndef _TK_CFG_H
#define _TK_CFG_H
#include "tk_lib.h"
#include "tk_cfg_user.h"
#include "drivers.h"
// <<< Use Configuration Wizard in Context Menu >>>
//  <h> 基础配置
//  <i> 设置电容模式，参考电压，滤波系数，自适应电流，跳频模式等
//  <o>	CMOD电容
//  <i> 设置CMOD外接或内置
//  <0=> 内部
//  <1=> 外部
#define EXTCMOD						0	
//  <o>	参考电压
//  <i> 设置触摸比较器参考电压
//  <0=> 0.6V
//  <1=> 1.0V
//  <2=> 1.5V
//  <3=> 2.0V
#define CONFIG_VREF					3	
//  <o>	自适应电流
//  <i> 自动设置电流
//  <0=> DISABLE
//  <1=> ENABLE
#define CONFIG_IDAC0				1
//  <o>滤波系数
//  <i>滤波系数推荐取值范围：5~50，此数值设置越小，数据越平滑，但按键响应速度越慢
//  <1-200>
#define FILTER_COEFF								25
//  <e>	跳频模式
//  <i> 用于开启跳频
#define SW_MODE					1
//  <o>多项式宽度
//  <i>范围：1 ~ 15
//  <1-15>
#define PWMM_PRS_LFSRW		8					
//  <o>随机数种子
//  <i>（最低位必须为1）
//  <1-255>
#define PWMM_PRS_SEED		0XA7		
//  </e>	
//  </h>	

//  <h>	按键参数配置
//  <i> 设置按键参数
//  <o>分频系数
//  <i>PWM:SWCLK = APB_CLK / SW_DIV，定义为6，即SWCLK = 4M
//  <i>PRS:SWCLK = APB_CLK / (SW_DIV * 2)，定义为8，即SWCLK = 1.5M
//  <1-511>
#define SW_DIV					3
//  <o> 扫描窗口
//  <i> 采样窗口时间 = win * (1/Ftk_clk)，如Ftk_clk = 24M, win=12000, 即采样窗口时间为500us。
//  <0-65535>
#define CONFIG_WIN					12000	
//  <o>按下消抖次数
//  <0-50>
#define FINGER_PRESS_DEBOUNCE_CNT					(3) 		
//  <o>释放消抖次数
//  <0-50>
#define FINGER_RELEASE_DEBOUNCE_CNT				  	(3)  		
//  <o>基线向上更新步进时间
//  <i>单位为1ms
//  <0-1000>
#define BASELINE_TRACE_UP_STEP_TIME					(500)		//单位为5ms
#define BASELINE_TRACE_UP_TICK_CNT					(BASELINE_TRACE_UP_STEP_TIME/5)	
//  <o>基线向下更新步进时间
//  <i>单位为1ms
//  <0-1000>
#define BASELINE_TRACE_DN_STEP_TIME					(200)		//单位为5ms
#define BASELINE_TRACE_DN_TICK_CNT					(BASELINE_TRACE_DN_STEP_TIME/5)	
//  <o>限制最长输出时间
//  <i>单位为ms，最长为2分钟，若定义为0，则关闭此功能	
//  <0-120000>
#define KEY_OUT_MAX_TIME		30000
#define KEY_OUT_MAX_TICK_CNT	(KEY_OUT_MAX_TIME / 5)	
//  <o>释放门限值比例
//  <i>释放门限值比例
//  <50-90>
#define RELEASE_RATE			75	
//  <o>基线更新模式
//  <i> MODE0：有按键触发时，非触发的按键通道继续更新基线，常规按键通常使用此模式。  
//  <i> MODE1：有按键触发时，非触发的按键通道停止更新基线，隔空按键应使用此模式。
//  <0=> MODE0
//  <1=> MODE1
#define BASELINE_TRACE_MODE_DEF		0		
//  <o>	单键触发模式
//  <i> 设置单键触发
//  <0=> DISABLE
//  <1=> ENABLE
#define SIGLE_KEY_TRIGGER			1		
//  <o>	多按键数量
//  <i> 当多按键同时触发时强制更新BASELINE,设置为0即功能关闭
//  <0-255>
#define MAX_TRIGGER_KEY_CNT 		0	
//  <e>	同步采样模式
//  <i> 同步采样模式
#define SYNC_SENSITVITY				0	
//  <o> 扫描窗口
//  <i> 扫描微窗口
//  <0-65535>
#define SYNC_SENSITVITY_WIN			2400	
//  <o> 扫描次数
//  <i> 扫描次数
//  <6-100>
#define SYNC_SENSITVITY_COEFF		10	
// </e>
//  <e>	输出补偿
//  <i> 未扫描输出控制 
#define COPA_ENABLE				1	
//  <o>	补偿输出电压
//  <i> 设置补偿电压
//  <0=> 1.6V
//  <1=> 2.0V
//  <2=> 2.4V
//  <3=> 2.8V
//  <4=> 3.2V
//  <5=> 3.6V
//  <6=> 4.0V
//  <7=> 4.4V
#define CONFIG_VCC1				1																				
//  <o>	补偿输出类型
//  <i> 设置输出状态
//  <0=> 低电平
//  <1=> 高电平
//  <2=> 反相
//  <3=> 同相
//  <4=> 悬浮
#define COPADATA_OUTPUT			0	
//  </e>
// </h>

//  <h> 滑条参数配置
//  <o> 分频系数
//  <i>PWM:SWCLK = APB_CLK / SW_DIV，定义为6，即SWCLK = 4M
//  <i>PRS:SWCLK = APB_CLK / (SW_DIV * 2)，定义为8，即SWCLK = 1.5M
//  <1-511>
#define SLIDER_SW_DIV			3	
//  <o> 扫描窗口
//  <i> 采样窗口时间 = win * (1/Ftk_clk)，如Ftk_clk = 24M, win=12000, 即采样窗口时间为500us。
//  <0-65535>
#define SLIDER_CONFIG_WIN					6000
//  <o> 按下消抖次数
//  <0-50>
#define SLIDER_PRESS_DEBOUNCE_CNT					(3) 		
//  <o> 释放消抖次数
//  <0-50>
#define SLIDER_RELEASE_DEBOUNCE_CNT				  	(3)  
//  <o> 基线向上更新步进时间
//  <i>单位为1ms
//  <0-1000>
#define SLIDER_BASELINE_TRACE_UP_STEP_TIME					(500)		//单位为5ms
#define SLIDER_BASELINE_TRACE_UP_TICK_CNT					(SLIDER_BASELINE_TRACE_UP_STEP_TIME/5)	
//  <o> 基线向下更新步进时间
//  <i>单位为1ms
//  <0-1000>
#define SLIDER_BASELINE_TRACE_DN_STEP_TIME					(200)		//单位为5ms
#define SLIDER_BASELINE_TRACE_DN_TICK_CNT					(SLIDER_BASELINE_TRACE_DN_STEP_TIME/5)	
//  <o> 限制最长输出时间
//  <i>单位为ms，最长为2分钟，若定义为0，则关闭此功能	
//  <0-120000>
#define SLIDER_OUT_MAX_TIME		30000
#define SLIDER_OUT_MAX_TICK_CNT	(SLIDER_OUT_MAX_TIME / 5)	
//  </h>	


//  <e>	触摸省电配置
//  <i> 用于设置触摸省电模式，无操作一段时间后进入休眠模式，需要停止休眠时，将 TKCtr.SleepEn设置为0即可
#define SLEEP_EN		   		0	
//  <o>无操作进入休眠时间
//  <i>进入触摸省电模式倒计时时间，单位为5ms，定义为200即为1秒。
//  <0-65535>
#define ENTER_SLEEPTIME			200  	
//  <o>唤醒门限值
//  <i>当触摸数据变化量大于此数值将退出省电模式，设置过大会造成触摸较难唤醒，设置过小会造成触摸误唤醒（休眠功耗也会对应增加）
//  <0-65535>
#define LP_NORMRMALDELTA		15	
//  <o>唤醒滤波次数
//  <i>当采样值幅度大于门限值时连续采样的次数
//  <1-10>
#define CONFIG_LP_FITER_CNT		3
//  <o>唤醒滤波间隔
//  <i>当采样值幅度大于门限值时连续采样的间隔
//  <1-50>
#define CONFIG_LP_FITER_TICK	5
//  <o>扫描窗口
//  <i>设置低功耗触摸扫描窗口时间，时间越短，功耗越低
//  <0-65535>
#define CONFIG_LP_WIN			6000	
//  <o>分频系数
//  <i>PWM:SWCLK = APB_CLK / SW_DIV，定义为6，即SWCLK = 4M
//  <i>PRS:SWCLK = APB_CLK / (SW_DIV * 2)，定义为8，即SWCLK = 1.5M
//  <1-511>
#define CONFIG_LP_SW_DIV		8
//  <o>	参考电压
//  <i> 设置休眠状态下触摸比较器的参考电压，电压越低，功耗越低
//  <0=> 0.6V
//  <1=> 1.0V
//  <2=> 1.5V
//  <3=> 2.0V
#define CONFIG_LPVREF			0
//  <o> STOP调试使能
//  <i> 通过上位机显示休眠状态实时数据，方便设置唤醒门限值
//  <0=> DISABLE
//  <1=> ENABLE
#define STOP_DEBUG				0	
//  </e>	



//  <e>	内部参考配置
//  <i> 设置内部参考通道
#define REF_CH_EN				0			
//  <o> 噪音门限值
//  <i> 设置内部参考通道门限值
//  <0-2000>
#define REF_CH_THD				25		
// </e>

//  <e>	防水模式配置
//  <i> 设置防水模式开关，开启后需要将输出补偿打开，并将输出类型设置为同相
#define WATER_PROOF_EN				0			
//  <o> SHIELD通道
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
//  <33=>NO_PIN
#define WATER_SHIELD_CH				5	
//  <o>	有水按键处理
//  <i> 设置有水按键处理模式
//  <0=> 正常触发
//  <1=> 屏蔽按键
#define WATER_PROOF_MODE			0	
//  <e>	防湿抹布
//  <i> 防湿抹布功能开关
#define DUSTERCLOTH_EN				0	
//  <o> 湿抹布判断门限值
//  <i> 当保护通道变化量超过该值时任务有抹布动作
//  <0-1000>
#define DUSTERCLOTH_THD				85	
// </e>
// </e>

//  <e>	触摸检水配置
//  <i> 用于开启触摸检水功能
#define WATER_DETECT_EN				0	
//  <o> 参考通道
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_REF_CH				14	
//  <o>迟滞窗口
//  <i>设置迟滞窗口，防止抖动
//  <0-100>
#define WATER_NOISE			15
//  <o>分频系数
//  <i> 设置检水模式SW频率
//  <i>PWM:SWCLK = APB_CLK / SW_DIV，定义为6，即SWCLK = 4M
//  <i>PRS:SWCLK = APB_CLK / (SW_DIV * 2)，定义为8，即SWCLK = 1.5M
//  <1-511>
#define WATER_SW_DIV				8	
//  <o>扫描窗口
//  <i>设置检水模式扫描窗口
//  <0-65535>
#define CONFIG_WATER_WIN			12000
//  <e>	检水通道0
#define WATER_DETECT0_ENABLE		1	
//  <o> 检水通道0选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH0				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD0					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE0			941		
// </e>
//  <e>	检水通道1
#define WATER_DETECT1_ENABLE		0	
//  <o> 检水通道1选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH1				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD1					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE1			400		
// </e>
//  <e>	检水通道2
#define WATER_DETECT2_ENABLE		0	
//  <o> 检水通道2选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH2				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD2					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE2			400		
// </e>
//  <e>	检水通道3
#define WATER_DETECT3_ENABLE		0	
//  <o> 检水通道3选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH3				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD3					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE3			400		
// </e>
//  <e>	检水通道4
#define WATER_DETECT4_ENABLE		0	
//  <o> 检水通道4选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH4				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD4					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE4			400		
// </e>
//  <e>	检水通道5
#define WATER_DETECT5_ENABLE		0	
//  <o> 检水通道5选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH5				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD5					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE5			400		
// </e>
//  <e>	检水通道6
#define WATER_DETECT6_ENABLE		0	
//  <o> 检水通道6选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH6				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD6					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE6			400		
// </e>
//  <e>	检水通道7
#define WATER_DETECT7_ENABLE		0	
//  <o> 检水通道7选择
//  <0=>TK0
//  <1=>TK1
//  <2=>TK2
//  <3=>TK3
//  <4=>TK4
//  <5=>TK5
//  <6=>TK6
//  <7=>TK7
//  <8=>TK8
//  <9=>TK9
//  <10=>TK10
//  <11=>TK11
//  <12=>TK12
//  <13=>TK13
//  <14=>TK14
//  <15=>TK15
//  <16=>TK16
//  <17=>TK17
//  <18=>TK18
//  <19=>TK19
//  <20=>TK20
//  <21=>TK21
//  <22=>TK22
//  <23=>TK23
//  <24=>TK24
//  <25=>TK25
//  <26=>TK26
//  <27=>TK27
//  <28=>TK28
//  <29=>TK29
//  <30=>TK30
//  <31=>TK31
//  <32=>TK32
#define WATER_DETECT_CH7				17	
//  <o> 有水门限值
//  <i> 当检水通道数据与参考通道数据差值小于该值时认为有水
//  <0-1000>
#define WATER_THD7					200	
//  <o> 无水校准千分比
//  <i> 校准值，参考通道与检水通道无水状态下的比例，用于修正误差
//  <0-10000>
#define CALIBRATION_VALUE7			400		
// </e>
// </e>

// <<< end of configuration section >>>


#if (WATER_PROOF_EN == 1) && (COPADATA_OUTPUT != 3 || COPA_ENABLE != 1)
	#error "error!开启后需要将输出补偿打开，并将输出类型设置为同相"
#endif
//******************************************************************************************************************************************************
#if (CH_KEY0 == TK_CH_NONE)
	#define KEY_CH_TOTAL		0
#elif (CH_KEY1 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		1
#elif (CH_KEY2 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		2
#elif (CH_KEY3 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		3
#elif (CH_KEY4 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		4
#elif (CH_KEY5 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		5
#elif (CH_KEY6 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		6
#elif (CH_KEY7 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		7
#elif (CH_KEY8 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		8
#elif (CH_KEY9 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		9
#elif (CH_KEY10 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		10
#elif (CH_KEY11 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		11
#elif (CH_KEY12 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		12
#elif (CH_KEY13 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		13
#elif (CH_KEY14 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		14
#elif (CH_KEY15 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		15
#elif (CH_KEY16 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		16
#elif (CH_KEY17 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		17
#elif (CH_KEY18 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		18
#elif (CH_KEY19 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		19
#elif (CH_KEY20 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		20
#elif (CH_KEY21 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		21
#elif (CH_KEY22 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		22
#elif (CH_KEY23 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		23
#elif (CH_KEY24 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		24
#elif (CH_KEY25 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		25
#elif (CH_KEY26 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		26
#elif (CH_KEY27 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		27
#elif (CH_KEY28 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		28
#elif (CH_KEY29 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		29
#elif (CH_KEY30 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		30
#elif (CH_KEY31 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		31
#elif (CH_KEY32 == TK_CH_NONE) 
	#define KEY_CH_TOTAL		32
#else
	#define KEY_CH_TOTAL		33
#endif

#if WATER_PROOF_EN	
	#define SHIELD_CH_TOTAL  1
#elif HIGH_SENSITVITY_EN
#if (SENSITVITY_SHIELD_CH == TK_CH_NONE)
	#define SHIELD_CH_TOTAL  0
#else
	#define SHIELD_CH_TOTAL  1
#endif
#else
	#define SHIELD_CH_TOTAL  0
#endif

#if (WATER_PROOF_EN && HIGH_SENSITVITY_EN)
	#error "error!"
#endif


#if (SLIDER_OR_WHEEL0_TYPE != TK_APP_NONE)
	#if (SLIDER_OR_WHEEL0_CH0 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL0_CH1 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL0_CH2 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	2
	#elif (SLIDER_OR_WHEEL0_CH3 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	3
	#elif (SLIDER_OR_WHEEL0_CH4 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	4
	#elif (SLIDER_OR_WHEEL0_CH5 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	5
	#elif (SLIDER_OR_WHEEL0_CH6 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	6
	#elif (SLIDER_OR_WHEEL0_CH7 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL0_CH_CNT	7
	#else
		#define SLIDER_OR_WHEEL0_CH_CNT	8
	#endif
#else 
	#define SLIDER_OR_WHEEL0_CH_CNT	0
#endif
#if (SLIDER_OR_WHEEL1_TYPE != TK_APP_NONE)
	#if (SLIDER_OR_WHEEL1_CH0 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL1_CH1 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL1_CH2 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	2
	#elif (SLIDER_OR_WHEEL1_CH3 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	3
	#elif (SLIDER_OR_WHEEL1_CH4 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	4
	#elif (SLIDER_OR_WHEEL1_CH5 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	5
	#elif (SLIDER_OR_WHEEL1_CH6 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	6
	#elif (SLIDER_OR_WHEEL1_CH7 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL1_CH_CNT	7
	#else
		#define SLIDER_OR_WHEEL1_CH_CNT	8
	#endif
#else 
	#define SLIDER_OR_WHEEL1_CH_CNT	0
#endif
#if (SLIDER_OR_WHEEL2_TYPE != TK_APP_NONE)
	#if (SLIDER_OR_WHEEL2_CH0 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL2_CH1 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL2_CH2 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	2
	#elif (SLIDER_OR_WHEEL2_CH3 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	3
	#elif (SLIDER_OR_WHEEL2_CH4 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	4
	#elif (SLIDER_OR_WHEEL2_CH5 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	5
	#elif (SLIDER_OR_WHEEL2_CH6 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	6
	#elif (SLIDER_OR_WHEEL2_CH7 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL2_CH_CNT	7
	#else
		#define SLIDER_OR_WHEEL2_CH_CNT	8
	#endif
#else 
	#define SLIDER_OR_WHEEL2_CH_CNT	0
#endif
#if (SLIDER_OR_WHEEL3_TYPE != TK_APP_NONE)
	#if (SLIDER_OR_WHEEL3_CH0 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL3_CH1 == TK_CH_NONE)
		#error "error!"
	#elif (SLIDER_OR_WHEEL3_CH2 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	2
	#elif (SLIDER_OR_WHEEL3_CH3 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	3
	#elif (SLIDER_OR_WHEEL3_CH4 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	4
	#elif (SLIDER_OR_WHEEL3_CH5 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	5
	#elif (SLIDER_OR_WHEEL3_CH6 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	6
	#elif (SLIDER_OR_WHEEL3_CH7 == TK_CH_NONE)
		#define SLIDER_OR_WHEEL3_CH_CNT	7
	#else
		#define SLIDER_OR_WHEEL3_CH_CNT	8
	#endif
#else 
	#define SLIDER_OR_WHEEL3_CH_CNT		0
#endif

#if (REF_CH_EN)
#define EXTERNAL_CHS		INSIDE_CHS		/*	外部参考通道 */
#define EXTERNAL_CNT		1
#else
#define EXTERNAL_CNT		0
#endif

#if (SLEEP_EN && STOP_DEBUG)
#define SLEEP_CHS_CNT		1
#else
#define SLEEP_CHS_CNT		0
#endif

#if WATER_DETECT_EN
#define WATER_DETECT_CNT	(1 + WATER_DETECT0_ENABLE + WATER_DETECT1_ENABLE + WATER_DETECT2_ENABLE + WATER_DETECT3_ENABLE + WATER_DETECT4_ENABLE + WATER_DETECT5_ENABLE + WATER_DETECT6_ENABLE + WATER_DETECT7_ENABLE)
#else
#define WATER_DETECT_CNT	0
#endif

#define SLIDER_OR_WHEEL_CH_TOTAL	(SLIDER_OR_WHEEL0_CH_CNT + SLIDER_OR_WHEEL1_CH_CNT + SLIDER_OR_WHEEL2_CH_CNT + SLIDER_OR_WHEEL3_CH_CNT)

#define TK_CHMAX  			(KEY_CH_TOTAL + EXTERNAL_CNT + SHIELD_CH_TOTAL + SLIDER_OR_WHEEL_CH_TOTAL + SLEEP_CHS_CNT + WATER_DETECT_CNT)

void log_init(void);
void log_putstr(char *str);
void EnterStop_Callback(void);
void ExitStop_Callback(void);
void LoopStop_Callback(void);

#endif
