中科蓝汛-------DUT模式详解

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;
		}

 

你可能感兴趣的:(中科蓝汛-------DUT模式详解)