蓝牙无线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,执行哪些动作,以后何去何从?
且听我们下次详解!
评论