在中科蓝汛8852方案研发时,实现长按3s 进入语音助手功能的实现。
代码实现思路如下:
1.使用三击功能,需要先开启双击设定
2.在bsp_key.h 中定义消息宏,该值可自定义
#define SIRI_1500MS_MSG 0x7DC
3.在msg_bt.c 中设置消息
case SIRI_1500MS_MSG:
//自定义消息,判断当前状态是否连接,在判断当前siri状态,0表示已退出,1表示已唤出
if(bt_get_status() == BT_STA_CONNECTED)
{
if( 0 == bt_get_siri_status()){
bt_siri_switch();
}
}
break;
4.设置siri标志,
在bsp_sys.h中 sys_cb结构体中,新建一个成员变量
u8 User_siri_flag; //定义siri语音助手标志
5.
4.设置长按3S动作
在bsp_key.c 中 函数 u8 bsp_key_scan(void)
新建 变量 static u16 msg_ee1_cnt = 0; //用于长按按键计时
//此代码在 函数 u8 bsp_key_scan(void)中
static u16 msg_ee1_cnt = 0; //用于长按按键计时
if(key == 0x0ee1)
{ //#define KH_PLAY_POWER (KEY_PLAY_POWER 0xe1 | KEY_HOLD 0xE00)
msg_ee1_cnt++;
printf("msg_ee1_cnt == %04x\n",msg_ee1_cnt);
}
if( msg_ee1_cnt == 9 ) //当msg_ee1_cnt == 9的时候,差不多3S
{
if(0 == sys_cb.User_siri_flag) //如果当前siri表示已退出状态
{
msg_enqueue(SIRI_1500MS_MSG);
sys_cb.User_siri_flag ==1; //将siri表示为已唤出
}
}
// 检测松手操作,检测到松手,则将msg_ee1_cnt=0
//0x0ce1 == KEY_LONG_UP | KEY_PLAY_POWER 长按松手检测
//0x08e1 == KEY_PLAY_POWER | KEY_PLAY_POWER 短按松手检测
if( key == 0x0ce1 || key == 0x08e1)
{
msg_ee1_cnt = 0;
}