/** ##########################################################################
**     Filename  : XXXXXXX.h
**     Project   : General
**     Module    : bsp
**     Processor : General
**     Version   : V1.0
**     Compiler  : General
**     Date/Time : 2020/7/13
**     Abstract  :
**
**     Contents  :
**
**
**     (c) Copyright dmdz Co.,Ltd
**  --------------------------------------------------------------------------
**               R E V I S I O N   H I S T O R Y
**  --------------------------------------------------------------------------
**  Date       Ver   Author             Description

**  ---------  ----  -----------------  --------------------------------------
** #########################################################################*/
#ifndef _KEY_ADC_CFG_H_
#define _KEY_ADC_CFG_H_

/*****************************************************************************
* I N C L U D E   F I L E S
*****************************************************************************/



#include "common_cfg.h"
#include "adc.h"

#define KEY_ADC_EN  1 //AD按键使能

typedef uint16_t  key_adc_time_t;


#define KEY_ADC_STATE_IDLE 0u  //注意，和第一行判断 空闲电平，相关联
#define KEY_ADC_STATE_FAULT 0xffu  //不在任何判斷範圍

//先用原始值；
#define KEY_ADC_CHANNEL_ID_1  0u   //
#define KEY_ADC_CHANNEL_ID_2  1u   //
#define KEY_ADC_CHANNEL_ID_3  2u	//
#define KEY_ADC_CHANNEL_ID_4  3u   //
#define KEY_ADC_CHANNEL_ID_5  4u
#define KEY_ADC_CHANNEL_ID_6  5u
#define KEY_ADC_CHANNEL_ID_7  6u
#define KEY_ADC_CHANNEL_ID_8  7u

#define KEY_ADC_CHANNEL_TOTALS  (ADC0_LOGIC_CHN_NORMAL_KEY_MAX)   //有幾個通道用於按鍵  -- ADC_CHANNEL_KEY_AD_MAX  因為有一路ad，專用於ASIL
#define KEY_ADC_1CHANNEL_JUDGE_TOTALS  6u  //每一個通道 最多有幾行不同的判斷



#define KEY_ADC_1CHANNEL_PHY_TOTALS 4u   //每一個通道 最多容下几個物理按鍵
//
#define KEY_ADC_ORIGINAL_K1_IDLE_MIN  (5000u-200u)
#define KEY_ADC_ORIGINAL_K11_MIN  (0u)  //
#define KEY_ADC_ORIGINAL_K1_IDLE_MAX  (5500u)
#define KEY_ADC_ORIGINAL_K11_MAX  (0u+200u)	 //
#define KEY_ADC_ORIGINAL_K12_MIN  (1493u-150u)  //
#define KEY_ADC_ORIGINAL_K12_MAX  (1493u+150u)	 //
#define KEY_ADC_ORIGINAL_K13_MIN  (2939u-150u)  //
#define KEY_ADC_ORIGINAL_K13_MAX  (2939u+150u)	 //
//#define KEY_ADC_ORIGINAL_K14_MIN  (1070u-200u)  //
//#define KEY_ADC_ORIGINAL_K14_MAX  (1070u+150u)	 //
#define KEY_ADC_ORIGINAL_K1_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K1_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K1_FAULT2_MIN  (5500u)
#define KEY_ADC_ORIGINAL_K1_FAULT2_MAX  (5700u)

#define KEY_ADC_ORIGINAL_K2_IDLE_MIN  (5000u-200u)
#define KEY_ADC_ORIGINAL_K2_IDLE_MAX  (5500u)
#define KEY_ADC_ORIGINAL_K21_MIN  (0u)  //
#define KEY_ADC_ORIGINAL_K21_MAX  (0u+200u)		//
#define KEY_ADC_ORIGINAL_K22_MIN  (1493u-150u)		//
#define KEY_ADC_ORIGINAL_K22_MAX  (1493u+150u)		//
#define KEY_ADC_ORIGINAL_K23_MIN  (2939u-150u)  //
#define KEY_ADC_ORIGINAL_K23_MAX  (2939u+150u)	 //
#define KEY_ADC_ORIGINAL_K24_MIN  (4353u-150u)  //
#define KEY_ADC_ORIGINAL_K24_MAX  (4353u+150u)	 //
#define KEY_ADC_ORIGINAL_K2_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K2_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K2_FAULT2_MIN  (5500u)
#define KEY_ADC_ORIGINAL_K2_FAULT2_MAX  (5700u)

#define KEY_ADC_ORIGINAL_K3_IDLE_MIN  (4200u-200u)
#define KEY_ADC_ORIGINAL_K3_IDLE_MAX  (4200u+200u)
#define KEY_ADC_ORIGINAL_K31_MIN  (2280u-200u)  //
#define KEY_ADC_ORIGINAL_K31_MAX  (2280u+200u)	//
#define KEY_ADC_ORIGINAL_K32_MIN  (3189u-200u)	//
#define KEY_ADC_ORIGINAL_K32_MAX  (3189u+200u)	//
#define KEY_ADC_ORIGINAL_K33_MIN  (0u)  //
#define KEY_ADC_ORIGINAL_K33_MAX  (0u+200u)	 //
#define KEY_ADC_ORIGINAL_K3_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K3_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K3_FAULT2_MIN  (4400u)
#define KEY_ADC_ORIGINAL_K3_FAULT2_MAX  (5700u)

#define KEY_ADC_ORIGINAL_K4_IDLE_MIN  (4200u-200u)
#define KEY_ADC_ORIGINAL_K4_IDLE_MAX  (4200u+200u)
#define KEY_ADC_ORIGINAL_K41_MIN  (2280u-200u)  //
#define KEY_ADC_ORIGINAL_K41_MAX  (2280u+200u)	//
#define KEY_ADC_ORIGINAL_K42_MIN  (3189u-200u)	//
#define KEY_ADC_ORIGINAL_K42_MAX  (3189u+200u)	//
#define KEY_ADC_ORIGINAL_K43_MIN  (0u)  //
#define KEY_ADC_ORIGINAL_K43_MAX  (0+200u)	 //
#define KEY_ADC_ORIGINAL_K4_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K4_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K4_FAULT2_MIN  (4400u)
#define KEY_ADC_ORIGINAL_K4_FAULT2_MAX  (5700u)


#define KEY_ADC_ORIGINAL_K5_IDLE_MIN  (4200u-200u)
#define KEY_ADC_ORIGINAL_K5_IDLE_MAX  (4200u+200u)
#define KEY_ADC_ORIGINAL_K51_MIN  (2280u-200u) //s
#define KEY_ADC_ORIGINAL_K51_MAX  (2280u+200u)	//
#define KEY_ADC_ORIGINAL_K52_MIN  (3189u-200u)	//
#define KEY_ADC_ORIGINAL_K52_MAX  (3189u+200u)	//
#define KEY_ADC_ORIGINAL_K53_MIN  (1900u-100u)  //
#define KEY_ADC_ORIGINAL_K53_MAX  (1900u+100u)	 //
#define KEY_ADC_ORIGINAL_K5_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K5_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K5_FAULT2_MIN  (4400u)
#define KEY_ADC_ORIGINAL_K5_FAULT2_MAX  (5700u)


#define KEY_ADC_ORIGINAL_K6_IDLE_MIN  (4200u-200u)
#define KEY_ADC_ORIGINAL_K6_IDLE_MAX  (4200u+200u)
#define KEY_ADC_ORIGINAL_K61_MIN  (2280u-200u)  //
#define KEY_ADC_ORIGINAL_K61_MAX  (2280u+200u)	//
#define KEY_ADC_ORIGINAL_K62_MIN  (3189u-200u)	//
#define KEY_ADC_ORIGINAL_K62_MAX  (3189u+200u)	//
#define KEY_ADC_ORIGINAL_K63_MIN  (1900u-100u)  //
#define KEY_ADC_ORIGINAL_K63_MAX  (1900u+100u)	 //
#define KEY_ADC_ORIGINAL_K6_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K6_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K6_FAULT2_MIN  (4400u)
#define KEY_ADC_ORIGINAL_K6_FAULT2_MAX  (5700u)


#define KEY_ADC_ORIGINAL_K7_IDLE_MIN  (3820u-200u)
#define KEY_ADC_ORIGINAL_K7_IDLE_MAX  (3820u+200u)
#define KEY_ADC_ORIGINAL_K71_MIN  (2070u-100u)  //
#define KEY_ADC_ORIGINAL_K71_MAX  (2070u+200u)	//
#define KEY_ADC_ORIGINAL_K72_MIN  (2900u-300u)	//
#define KEY_ADC_ORIGINAL_K72_MAX  (2900u+300u)	//
#define KEY_ADC_ORIGINAL_K73_MIN  (1770u-200u)  //
#define KEY_ADC_ORIGINAL_K73_MAX  (1770u+150u)	 //
#define KEY_ADC_ORIGINAL_K7_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K7_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K7_FAULT2_MIN  (4300u)
#define KEY_ADC_ORIGINAL_K7_FAULT2_MAX  (5700u)


#define KEY_ADC_ORIGINAL_K8_IDLE_MIN  (3820u-200u)
#define KEY_ADC_ORIGINAL_K8_IDLE_MAX  (3820u+200u)
#define KEY_ADC_ORIGINAL_K81_MIN  (2070u-100u)  //
#define KEY_ADC_ORIGINAL_K81_MAX  (2070u+200u)	//
#define KEY_ADC_ORIGINAL_K82_MIN  (2900u-300u)	//
#define KEY_ADC_ORIGINAL_K82_MAX  (2900u+300u)	//
#define KEY_ADC_ORIGINAL_K83_MIN  (1770u-200u)  //
#define KEY_ADC_ORIGINAL_K83_MAX  (1770u+150u)	 //
#define KEY_ADC_ORIGINAL_K8_FAULT1_MIN  (0u)
#define KEY_ADC_ORIGINAL_K8_FAULT1_MAX  (200u)
#define KEY_ADC_ORIGINAL_K8_FAULT2_MIN  (4200u)
#define KEY_ADC_ORIGINAL_K8_FAULT2_MAX  (5700u)


//没有按键按下的范围
//#define ADC_ORIGINAL_NO_KEY_MIN  (3820u-200u)
//#define ADC_ORIGINAL_NO_KEY_MAX  (3820u+200u)  //要超過4096

//机械故障的情况--要么短路到地，或电源，或者开路
//#define ADC_ORIGINAL_FAULT1_MIN  (0u)
//#define ADC_ORIGINAL_FAULT1_MAX  (200u)
//#define ADC_ORIGINAL_FAULT2_MIN  (4200u)
//#define ADC_ORIGINAL_FAULT2_MAX  (5500u)


//#define ADC_KEY_TIME_UNIT  APP_TASK_10MS   //時間周期
//#define ADC_KEY_TIME_DEBOUNCE  (50u/ADC_KEY_TIME_UNIT)
//#define ADC_KEY_TIME_FAULT  (300u/ADC_KEY_TIME_UNIT)
//#define ADC_KEY_TIME_STUCK  (20000u/ADC_KEY_TIME_UNIT)  //目前沒用到


typedef struct
{
	u16 min;	 //ad有效范围最小值
	u16 max;	 //ad有效范围最大值
	u16 debounce;  //消抖時間
	u8 valid;	//有效值，每1位表示1个按键，因为有可能多个按键按下
}key_adc_range_cfg_s;


extern const key_adc_range_cfg_s g_key_adc_range_cfg[KEY_ADC_CHANNEL_TOTALS][KEY_ADC_1CHANNEL_JUDGE_TOTALS] ;

void key_adc_driver_cfg_get_value(uint8_t channel_max,adc_result_t *p_value);



#ifndef RAM_OPTIMIZE_EN
//#define KEY_ADC_DEBUG_EN  1 //调试功能
#endif







#endif /* end _KEYBOARD_ADC_CFG_H_ */

/* [] END OF FILE */
