杰理按键梳理(基于AC700N-SDK1.3.6)

杰理按键梳理(基于AC700N-SDK1.3.6)

按键的基本配置

1
2
3
4
5
6
u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
// SHORT LONG HOLD UP DOUBLE
{KEY_MUSIC_PP, KEY_POWEROFF, KEY_POWEROFF_HOLD, KEY_NULL, KEY_NULL}, //KEY_0
{KEY_VOL_DOWN, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL}, //KEY_1
{KEY_VOL_UP, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL}, //KEY_2
};

问题一:

如果配置了ADkey(三个按键)、IOkey(三个按键)、THkey(两个按键),那么在那个key_table中谁是KEY_0、KEY_1、KEY_2….

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/************************** IO KEY ****************************/
const struct iokey_port iokey_list[] = {
{
.connect_way = TCFG_IOKEY_POWER_CONNECT_WAY, //IO按键的连接方式
.key_type.one_io.port = TCFG_IOKEY_POWER_ONE_PORT, //IO按键对应的引脚
.key_value = 0, //按键值
},
};

const struct iokey_platform_data iokey_data = {
.enable = TCFG_IOKEY_ENABLE, //是否使能IO按键
.num = ARRAY_SIZE(iokey_list), //IO按键的个数
.port = iokey_list, //IO按键参数表
};

/************************** AD KEY ****************************/
const struct adkey_platform_data adkey_data = {
.enable = TCFG_ADKEY_ENABLE, //AD按键使能
.adkey_pin = TCFG_ADKEY_PORT, //AD按键对应引脚
.ad_channel = TCFG_ADKEY_AD_CHANNEL, //AD通道值
.extern_up_en = TCFG_ADKEY_EXTERN_UP_ENABLE, //是否使用外接上拉电阻
.ad_value = { //根据电阻算出来的电压值
TCFG_ADKEY_VOLTAGE0,
TCFG_ADKEY_VOLTAGE1,
TCFG_ADKEY_VOLTAGE2,
TCFG_ADKEY_VOLTAGE3,
},
.key_value = { //AD按键各个按键的键值
TCFG_ADKEY_VALUE0,
TCFG_ADKEY_VALUE1,
TCFG_ADKEY_VALUE2,
TCFG_ADKEY_VALUE3,
},
};
/************************** LP TOUCH KEY ****************************/
const struct lp_touch_key_platform_data lp_touch_key_config = {
/*触摸按键*/
.ch[0].enable = TCFG_LP_TOUCH_KEY0_EN,
.ch[0].wakeup_enable = TCFG_LP_TOUCH_KEY0_WAKEUP_EN,
.ch[0].port = IO_PORTB_00,
.ch[0].sensitivity = TCFG_LP_TOUCH_KEY0_SENSITIVITY,
.ch[0].key_value = 0,

.ch[1].enable = TCFG_LP_TOUCH_KEY1_EN,
.ch[1].wakeup_enable = TCFG_LP_TOUCH_KEY1_WAKEUP_EN,
.ch[1].port = IO_PORTB_01,
.ch[1].sensitivity = TCFG_LP_TOUCH_KEY1_SENSITIVITY,
.ch[1].key_value = 1,
};

每种key都设置了key_value,对应KEY_0、KEY_1、KEY_2….

问题二:

配置了很多按键,那哪个按键是开机按键呢

在app_main.c中有开机检查void check_power_on_key(void),调用get_power_on_status()判断按键状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
u8 get_power_on_status(void)
{
#if TCFG_IOKEY_ENABLE
struct iokey_port *power_io_list = NULL;

power_io_list = iokey_data.port;

if (iokey_data.enable) {
#if (TCFG_ADC_IIS_ENABLE==ENABLE && IIS_ROLE==ROLE_S && TCFG_APP_LINEIN_EN==ENABLE)
if(gpio_read(IIS_SLAVE_AWAKEN_PORT) == 0) {
#else
if (gpio_read(power_io_list->key_type.one_io.port) == power_io_list->connect_way){
#endif
return 1;
}
}
#endif

#if TCFG_ADKEY_ENABLE
u8 adc_pwr_value = adc_get_value(adkey_data.ad_channel);
if (adkey_data.enable) {
printf("adc_pwr_value = %d\n",adc_pwr_value);
if (adc_pwr_value < 10) {
return 1;
}
}
#endif

#if TCFG_LP_TOUCH_KEY_ENABLE
return lp_touch_key_power_on_status();
#endif

return 0;
}