杰理按键梳理(基于AC700N-SDK1.3.6)
按键的基本配置
1 2 3 4 5 6
| u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = { {KEY_MUSIC_PP, KEY_POWEROFF, KEY_POWEROFF_HOLD, KEY_NULL, KEY_NULL}, {KEY_VOL_DOWN, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL}, {KEY_VOL_UP, KEY_NULL, KEY_NULL, KEY_NULL, KEY_NULL}, };
|
问题一:
如果配置了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
| const struct iokey_port iokey_list[] = { { .connect_way = TCFG_IOKEY_POWER_CONNECT_WAY, .key_type.one_io.port = TCFG_IOKEY_POWER_ONE_PORT, .key_value = 0, }, };
const struct iokey_platform_data iokey_data = { .enable = TCFG_IOKEY_ENABLE, .num = ARRAY_SIZE(iokey_list), .port = iokey_list, };
const struct adkey_platform_data adkey_data = { .enable = TCFG_ADKEY_ENABLE, .adkey_pin = TCFG_ADKEY_PORT, .ad_channel = TCFG_ADKEY_AD_CHANNEL, .extern_up_en = TCFG_ADKEY_EXTERN_UP_ENABLE, .ad_value = { TCFG_ADKEY_VOLTAGE0, TCFG_ADKEY_VOLTAGE1, TCFG_ADKEY_VOLTAGE2, TCFG_ADKEY_VOLTAGE3, }, .key_value = { TCFG_ADKEY_VALUE0, TCFG_ADKEY_VALUE1, TCFG_ADKEY_VALUE2, TCFG_ADKEY_VALUE3, }, };
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; }
|