BES2300 代碼 燈 按鍵 筆記

因爲公司一些合作原因,暫時沒能拿到板子調試驗證,所以只能看代碼。而BES藍牙SDK開發指南.pdf裏面只有告訴我們配置,沒告訴我們怎麼跑的,所以繼續看了下流程。

1、燈的API設置接口:
在這裏插入圖片描述
LED 的控制在 app_status_ind.c 文件中的函數 app_status_indication_set() 內設置,根據上
層傳送事件,來調用相應的 LED 控制,使用時調用 app_status_indication_set() 函數,並選擇
相應入口參數即可,LED 燈控制邏輯目前不支持優先級控制,打斷之後無法恢復上一個 LED
燈控制邏輯,藍牙狀態指示燈默認支持兩組 LED 燈控制。
a. 一般來說,cfg0 爲藍燈,cfg1 爲紅燈
b. level 表示當前 LED 電平狀態,爲 0 或 1
c. time 表示當前 LED 電平狀態操持時間,以 ms 爲單位
d. part 表示一次操作,一亮一閃爲兩次操作
e. parttotal 表示操作總次數
f. startlevel 表示初始電平
g. periodic 表示是否需要對以上操作進行週期性操作,若狀態不變,則無限循環
h. app_pwl_setup 和 app_pwl_start 配套使用,把 LED 燈操作真正寫進配置,並生效
在 tgt_hardware.c 中進行 LED 燈的配置,包括 GPIO 引腳號、IO 功能映射、IO 電壓配
置、上下拉配置。

在這裏插入圖片描述
在這裏插入圖片描述
流程:
main()---->app_init()---->app_status_indication_init()---->app_pwl_open()
在這裏插入圖片描述
在app_pwl_open()裏面,對燈的IO口進行初始化,並且調用在 tgt_hardware.c 中 LED 燈的IO配置&cfg_hw_pinmux_pwl,開啓定時器。
定時器的配置:
在這裏插入圖片描述
通過app_pwl_setup()和app_pwl_start()傳入配置和開啓。
在這裏插入圖片描述
基本上app_status_indication_set()也只是調用這兩個接口。

P.S.LED燈整個流程是在APP線程裏面的,API的接口最好在APP線程裏面調用,跨線程最好用message或者mail通訊觸發。

2、按鍵配置
apps.cpp 文件內進行按鍵事件註冊,支持組合按鍵設計,app_key_handle_cfg[]。
在這裏插入圖片描述

在 tgt_hardware.c 中進行按鍵配置,包括按鍵名、GPIO 引腳號、IO 功能映射、IO 電壓
配置、上下拉配置。
在這裏插入圖片描述
在 tgt_hardware.h 中配置按鍵數量,開機鍵爲固定按鍵,無需再另行配置。
在這裏插入圖片描述
key IO 驅動流程:
main()---->app_init()---->app_key_open()---->hal_key_open()---->hal_gpiokey_open()

在這裏插入圖片描述
在app_key_open()中,申請了一內存塊,存放着key_list,後面按鍵對應事件爲表掃描查詢。並app_set_threadhandle(APP_MODUAL_KEY, app_key_handle_process);在APP線程loop裏面添加了app_key_handle_process事件觸發。然後,打開hal_gpiokey_open()驅動初始化,最後,開啓硬件定時器,調用回調函數hal_key_debounce_handler()對IO口進行掃描,判斷按鍵的行爲,如按下,釋放,長按,短按,雙擊。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在hal_gpiokey_open()中,把key_event_process()mail通訊事件發送的函數指針傳給了key_detected_callback指針變量,後續封裝爲send_key_event接口出來供hal_key_debounce_handler()調用。
在這裏插入圖片描述
hal_gpiokey_open()中把key io的配置導入,並進行了初始化。
最終,hal_key_debounce_handler()觸發的send_key_event函數,會把按鍵的事件通過mail,發送到app_key_handle_process(),觸發到app_key_handle_cfg[]裏面的功能函數。整一個驅動層到中間層的流程到處結束,以上流程在APP線程裏面完成。
在這裏插入圖片描述

key IO 功能應用流程:(以app_bt_key,調用藍牙功能爲例,跨線程)
app_bt_key()---->bt_key_send()---->app_bt_start_custom_function_in_bt_thread()---->app_bt_mail_send()----> app_bt_mail_process() ---->bt_key_handle()

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

在app_bt_mail_send()中,發送按鍵跟要調度的事件,以及bt_update_key_event()以mail的通訊形式給到besbt線程。
在這裏插入圖片描述
besbt線程在 app_bt_mail_process()中接收到並觸發調用bt_update_key_event()功能,給bt_key_handle()發送了bt_key.code和bt_key.event,並調用到相對的handle。
在這裏插入圖片描述
以上爲按鍵中間層到應用層的流程。
P.S. 對於BesbtThread裏面bt_key_handle()跟app_bt_mail_process()的運行流程,參照我之前的大架筆記。

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章