原相蓝牙Mouse 开发二三事(5)设备所处的几种模式(上)-蓝牙门诊部接诊文章





蓝牙无线Mouse,省电很重要,低功耗确实是原相鼠标的一大优势。除了使用中的功耗,休眠与待机功耗也很重要。

原相蓝牙BLE 支持,两路待机:(1)Sleep, (2) Powerdown。

可以把以上状态称为 Sleep1,Sleep2 的状态。

鼠标在使用时,会处于 Active 状态。

无论是Sleep1,Sleep2,还是Active 状态,都是处在系统Timer中。

以下针对原相PAR2822 ,解说一下每个状态的 Source Code


1、Active 

BLE 连接后,只要有Mouse事件触发,就会处在这个状态

/* Timer ID */
#define REPORT_TIMER_ID 1​


以上定义 Active  的Timer ID

以下可以开 Active   Timer :REPORT_TIMER_ID,进入 Active   状态,report_timer_enable(8000, 1);//REPORT_TIMER_ID

以上会调用 _set_evt(SYS_ST, SYS_AC_TIMER);每次用时 8000us ,一直上报SYS_AC_TIMER事件。

从而不停执行:_active_task();每次8ms

以下是_active_task 的代码,代码中做了,Mouse Data 处理:_check_mouse_data();按键相应处理_check_pairing_button(); 电池电量上报等。


static void _active_task(void)
{

_check_mouse_data();


_check_pairing_button();



#ifdef CONFIG_ENABLE_ADC

if (battery_detect_cnt < battery_detect_th)
{
battery_detect_cnt++;
}
else
{
battery_detect_cnt = 0;
_check_adc_val();
}

#endif

}​


其中 _check_mouse_data();执行中,区分BLE 连接状态:(1)BLE 未连接,(2)BLE 连接。


1.1 BLE 未连接

BLE 未连接状态,有个播报结束时间,过了这个时间就关机了。这不是用户关心的,用户更关心使用过程,BLE 的连接状态


1.2 BLE 连接

BLE 连接状态,用户可以一直使用鼠标,如果不使用鼠标,过一段时间就会进入Sleep1,此处是ble_slave_latency_on 状态。

进入这个的时间定义为 latency_th, 鼠标未使用达到 latency_th 后,进入Sleep1:ble_slave_latency_on。

进入Sleep1 会打开哪个Timer,执行哪些动作,以后何去何从?

且听我们下次详解!


这次博文就到这了!

啥都不说了,关注吧!登录,评论,留言,都需要!

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论