step 1:
在config.h中,定义宏
#define DUT_MODE 0X7D7
step2:
六击功能实现
typedef struct {
u8 counter;
u8 strikes;
u16 val;
} key_six_t;
key_six_t key_six_cb;
AT(.com_text.bsp.key)
u16 key_six_press_process(u16 key_val)
{
key_six_t *s = &key_six_cb;
if (s->counter) {
s->counter--;
}
if (!s->counter) {
s->strikes = 0;
s->val = NO_KEY;
}
if (check_key_return(key_val)) {
s->strikes++;
if ((key_val == s->val) && (s->strikes == 6)) {
//检测到6击按键
printf("666666666666666666666666666666666\n");
//msg_enqueue(DUT_MODE | (key_val & 0xff));
msg_enqueue(DUT_MODE);
} else {
if (key_val != s->val) {
s->strikes = 1;
s->val = key_val;
}
s->counter = 120; //按键松开超时600ms
}
}
return key_val;
}
,并在bsp_key_process函数中,调用
step 3 :
在bsp_sys.h中, sys_cb_t结构体中,新建成员变量
u8 User_cbt_test_en; //测试模式
在config.h中,新建宏 #define USER_ENTER_CBT_EN_DATA 0xa8
#define USER_ENTER_CBT_EN_DATA 0xa8
在func_bt中,func_bt_enter函数中,添加如下代码
#if !BT_BACKSTAGE_EN
//bsp_bt_init();
if(USER_ENTER_CBT_EN_DATA==sys_cb.User_cbt_test_en)
{
printf(" CBT test mode OK... %x\n",sys_cb.User_cbt_test_en);//
bt_cfg.cbt_test_mode = 1;
// bt_cfg.fcc_test_mode = 1;
printf(" f_bt.disp_status = %x\n",f_bt.disp_status);
led_set_sta(0xff,0,4, 0xff);
// sys_cb.User_cbt_test_en = 0;
}
else
{
printf(" sys_cb.User_cbt_test_en != 0xa8 %x\n",sys_cb.User_cbt_test_en);
bt_cfg.cbt_test_mode = 0;
// bt_cfg.fcc_test_mode = 0;
sys_cb.User_cbt_test_en= 0;
}
dis_auto_pwroff();
step 4:
在msg_bt.c中 新增case
case DUT_MODE:
printf("DUT_MODE\n");
sys_cb.User_cbt_test_en = USER_ENTER_CBT_EN_DATA;// 0xa8 则重启 BT mode 进入 测试模式
// sys_cb.Test_mode_kth_cnt = 0;
bt_nor_delete_link_info();
func_cb.sta = FUNC_NULL;
break;
此时运行6击进入DUT,发现在此处设置led_set_sta(0xff,0,4, 0xff);后,按键无效
经发现,需要在#if !BT_BACKSTAGE_EN 新增一句bsp_bt_init();
调试后,红灯常亮在此处设置无效,6击之后直接进入勒配对模式,并没有运行led_set_sta(0xff,0,4, 0xff);
解决办法:
在func_bt.c 中,在func_bt_disp_status函数中,判断当前状态是否是test mode
if(1==bt_cfg.cbt_test_mode)
{
rled_on(); //红灯常亮
//led_on();
led_off();//蓝灯灭
return;
}
转载:https://blog.csdn.net/longkang1311/article/details/101308332
查看评论