原相藍牙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次,發文人進小黑屋喔~

評論