BT8918D---按键模块

1 Preface/Foreword

中科蓝讯BT8918D模块支持:IO按键AD按键

2 数据结构

2.1 按键事件映射表

typedef struct {

u8 adc_val;

u8 usage_id;

} adkey_tbl_t;

按键功能配置表adkey_table

constadkey_tbl_t ++adkey_table++ [] = {

{0x0A, KEY_PREV_VOL_UP}, //PLAY 0R

{0x3F, KEY_PLAY}, //PREV/VOL- 2K

{0x6C, KEY_MODE}, //NEXT/VOL+ 5.1K,

{0x97, KEY_PAIR}, //MODE 10K,

{0xC1, KEY_VOL_DOWN_PREV}, //HSF 22K,

{0xE7, KEY_VOL_UP_NEXT}, //REPEAT 56K,

{0xF7, KEY_REC}, //REC 150K

{0xFF, NO_KEY}, // END

};

3 代码

3.1 获取按键对应的功能ID (get_adkey)

#if (USER_ADKEY || USER_ADKEY_MUX_SDCLK)

AT(.com_text.port.key)

static u8 get_adkey (u8 key_val, u8 key_config_en)

{

u8 num = 0;

u8 *ptr;

//配置工具是否使能

if (!key_config_en) {

return NO_KEY;

}

while (key_val > adkey_table[num].adc_val) {
num++;
}

//工具配置了第一组ADKEY的按键定义?

ptr = get_adkey_configure(num);

if (ptr != NULL) {

if ((num > 11) || (adkey_table[num].adc_val == 0xff)) {

return NO_KEY;

}

return key_config_table[*(ptr+num)];

}

return adkey_table[num].usage_id ;

}

#endif // USER_ADKEY

3.2 按键扫描 (bsp_key_scan_do)

AT(.com_text.bsp.key)

u8 bsp_key_scan_do (void)

{

u8 key_val= NO_KEY;

if (!get_adc_val ()) {

return NO_KEY;

}

#if USER_ADKEY

if (key_val == NO_KEY) {

key_val = get_adkey(adc_cb.key_val, xcfg_cb.user_adkey_en);

}

#endif // USER_ADKEY

return key_val ;

}

3.3 启动获取adc值 (get_adc_val)

AT(.com_text.port.key)

bool get_adc_val (void)

{

u16 channel;

#if USER_ADKEY

if (xcfg_cb.user_adkey_en) {

adc_cb.key_val = (u8)(adc_cb.sfr[ADKEY_CH] >> 2);

}

#endif // USER_ADKEY

return true ;

}