基于KT6368A藍(lán)牙芯片開(kāi)發(fā)智能抖音翻頁(yè)翻頁(yè)筆總結(jié)
一、功能簡(jiǎn)介
KT6368A藍(lán)牙芯片也是基于 HID 開(kāi)發(fā),主要用于瀏覽當(dāng)下火爆的抖音等小視頻的上下翻頁(yè)、左右菜單切換、暫停等操作。打開(kāi)手機(jī)藍(lán)牙進(jìn)行連接,進(jìn)入視頻瀏覽界面操作對(duì)應(yīng)按鍵即可。包含一個(gè)藍(lán)牙的指示燈,表示是否連接 。同時(shí)支持adkey按鍵,這個(gè)按鍵就可以根據(jù)需求來(lái)進(jìn)行裁剪。產(chǎn)品最終選用CR3032的電池,所以非常的在意功耗。
二、程序部分理解記錄
在 系 統(tǒng) 進(jìn) 行 初 始 化 的 過(guò) 程 中 , 根 據(jù) 以 下 信 息 進(jìn) 行 APP 注 冊(cè) 。 執(zhí) 行 的 大 致 流 程 為 :REGISTER_APPLICATION--->state_machine--->app_start()--->sys_key_event_enable();這條流程主要進(jìn)行
設(shè)備的初始化設(shè)置以及一些功能使能。
REGISTER_APPLICATION--->event_handler--->app_key_event_handler()--->app_key_deal_test();這 條流 程
在 event_handler 之下有多個(gè) case,上述選擇按鍵事件的處理流程進(jìn)行代碼流說(shuō)明,主要展示按鍵事件發(fā)生時(shí),程序的處理流程。
(2) APP 狀態(tài)機(jī)
狀態(tài)機(jī)有 create,start,pause,resume,stop,destory 狀態(tài),根據(jù)不同的狀態(tài)執(zhí)行對(duì)應(yīng)的分支。APP 注冊(cè)后進(jìn)行初始運(yùn)行,進(jìn)入 APP_STA_START 分支,開(kāi)始 APP 運(yùn)行。
1.? ? ?static int state_machine(struct application *app, enum app_state state, struct intent *it)
2.? ?{? ?switch (state) {
3.? ? ? case APP_STA_CREATE:
4.? ? ? ? break;
5.? ? ? case APP_STA_START:
6.? ? ? ? if (!it) {
7.break;? ? ? ? ?}
8.? ? ? ? switch (it->action) {
9.? ? ? ? case ACTION_TOUCHSCREEN:
10.? ? ?app_start();
進(jìn)入 app_start()函數(shù)后進(jìn)行對(duì)應(yīng)的初始化,時(shí)鐘初始化,模式選擇,低功耗初始化,以及外部事件使能。
1.? ?static void app_start()
2.? ?{
3.? ? ? log_info("=======================================");
4.? ? ? log_info("-----------------------------KEYPAGE------------------------");
5.? ? ? log_info("=======================================");
6.
? ? static int state_machine(struct application *app, enum app_state state, struct intent *it)
? ?{? ?switch (state) {
? ? ? case APP_STA_CREATE:
? ? ? ? break;
5.? ? ? case APP_STA_START:
6.? ? ? ? if (!it) {
7.? ? ? ? ? break;? ? ? ? ?}
8.? ? ? ? switch (it->action) {
9.? ? ? ? case ACTION_TOUCHSCREEN:
10.? ? ? app_start();
進(jìn)入 app_start()函數(shù)后進(jìn)行對(duì)應(yīng)的初始化,時(shí)鐘初始化,模式選擇,低功耗初始化,以及外部事件使能。
1.? ?static void app_start()
2.? ?{
3.? ? ? log_info("=======================================");
4.? ? ? log_info("-----------------------------KEYPAGE------------------------");
5.? ? ? log_info("=======================================");
6.
主體的還是以事件的形式進(jìn)行驅(qū)動(dòng),空閑時(shí)就睡眠,有按鍵或者藍(lán)牙協(xié)議棧的事件,則自己?jiǎn)拘讶缓笞龀鱿鄳?yīng)的動(dòng)作,如下是按鍵的動(dòng)作處理:

當(dāng) APP 注冊(cè)運(yùn)行后,有按鍵事件發(fā)生時(shí),會(huì)進(jìn)行對(duì)應(yīng)的數(shù)據(jù)發(fā)送,由于是 HID 設(shè)備,所以數(shù)據(jù)的發(fā)送形式從對(duì)應(yīng)的 HID 設(shè)備的描述符產(chǎn)生。用戶如需要對(duì)設(shè)備進(jìn)行功能自定義,可以結(jié)合 HID 官方文檔對(duì)下述描述符進(jìn)行修改。
暫停按鍵對(duì)應(yīng)的 HID 設(shè)備發(fā)送數(shù)據(jù)包,通過(guò)下圖的 hid_data_send_pt()進(jìn)行數(shù)據(jù)傳輸。
1.? ?log_info("point: %d,%d", point_cnt, point_len);
2.? ? ?if (point_cnt) {
3.? ? ? ? for (int cnt = 0; cnt < point_cnt; cnt++) {
4.? ? ? ?hid_data_send_pt(1, key_data, point_len);
5.? ? ? ? key_data += point_len;
6.? ? ? ?KEY_DELAY_TIME();
7.? ? ? ? }
8.? ? ?}
由描述符可知,設(shè)備一共有 5 個(gè)輸入實(shí)體 Input,一共組成 7byte 的數(shù)據(jù),所以對(duì)應(yīng)的暫停按鍵數(shù)據(jù)包由 7byte 的數(shù)據(jù)組成,前 2byte 表示識(shí)別是否有觸摸輸入,中間 2 個(gè) 2byte 分別表示 y 坐標(biāo)和x 坐標(biāo),最后 1byte 表示 contact count,不同的按鍵事件對(duì)應(yīng)不同的數(shù)據(jù)包,數(shù)據(jù)通過(guò) hid_data_send_dt
函數(shù)發(fā)送至設(shè)備。對(duì)應(yīng)的按鍵事件通過(guò)事件處理機(jī)制和數(shù)據(jù)發(fā)送實(shí)現(xiàn)對(duì)應(yīng)的功能。
三、實(shí)際開(kāi)發(fā)記錄--參數(shù)詳解
1、由藍(lán)牙芯片自己完成所有的事情,分兩個(gè)按鍵,一個(gè)按鍵短按開(kāi)機(jī),短按關(guān)機(jī) 。第二個(gè)IO口是外掛adkey
2、芯片的2腳LED,7腳【USB-DM】開(kāi)關(guān)機(jī)按鍵,8腳【USB-DP】外掛adkey ??臻e超過(guò)5分鐘就自動(dòng)關(guān)機(jī)
3、藍(lán)牙名:KT6368A-keypage

3.1 測(cè)試環(huán)境--KT6368A的測(cè)試demo板

1、采用3.3V供電,而不選擇用5V供電。直接進(jìn)去測(cè)試模塊的3.3V標(biāo)號(hào)
2、去掉原本測(cè)試板上面的ME6208A的LDO,因?yàn)樗矔?huì)產(chǎn)生功耗
3.2 功耗記錄 ---相對(duì)精度的電流測(cè)試儀器

3.3 實(shí)現(xiàn)的效果如下:

測(cè)試了抖音以及快手的相關(guān)app,實(shí)現(xiàn)上翻和下翻等等功能