藍牙無線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,執行哪些動作,以後何去何從?
且聽我們下次詳解!
評論
Dylen Cui
2 個月前