精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【AWTK使用經驗】如何響應物理按鍵

ZLG致遠電子 ? 2024-06-06 08:25 ? 次閱讀

AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章進行解答。

ZTP800示教器 設備上有許多按鍵,假設想在自己的AWTK程序中檢測并使用這些按鍵響應事件,則需要使用AWTK綁定物理按鍵的功能。

本篇文章將借助一個檢測按鍵的demo程序來介紹如何綁定物理按鍵并響應,該demo最終效果是按下任意物理按鍵時會顯示該按鍵key down,松開按鍵時會顯示該按鍵key up。

358f0e00-239b-11ef-bd4a-92fbcf53809c.png?

圖1按鍵檢測程序效果圖

設計界面與綁定按鍵事件

用AWTK Designer打開一個新建工程,并且放置一個靜態文本控件用作顯示按下或彈起的按鍵值。

35a18d64-239b-11ef-bd4a-92fbcf53809c.png

圖2使用AWTK Designer設計界面

1. 綁定按鍵按下與彈起事件

接下來修改項目的src/pages/home_page.c代碼文件,在初始化窗體時注冊監聽全局按鍵按下與彈起事件:

navigator_global_widget_on(EVT_KEY_DOWN, on_global_key_down, win);navigator_global_widget_on(EVT_KEY_UP, on_global_key_up, win);

接著同樣在home_page.c實現按鍵按下和彈起的回調函數,獲取按鍵值并輸出按鍵狀態為按下還是抬起:

static ret_t on_global_key_down(void* ctx, event_t* e) { // 按鍵按下 char ch[50] = {0}; widget_t* win = WIDGET(ctx); key_event_t* evt = key_event_cast(e); widget_t* label = widget_lookup(win, "label", TRUE); const key_type_value_t* ktv = keys_type_find_by_value(evt->key);
if (ktv == NULL || label == NULL || ktv->name == NULL) { return RET_BAD_PARAMS; }
/* ktv->name為custom_keys.json綁定鍵值對應的名稱 */ tk_snprintf(ch, sizeof(ch), "%s key down", ktv->name); widget_set_text_utf8(label, ch);
return RET_OK;}
static ret_t on_global_key_up(void* ctx, event_t* e) { // 按鍵抬起 char ch[50] = {0}; widget_t* win = WIDGET(ctx); key_event_t* evt = key_event_cast(e); widget_t* label = widget_lookup(win, "label", TRUE); const key_type_value_t* ktv = keys_type_find_by_value(evt->key);
if (ktv == NULL || label == NULL || ktv->name == NULL) { return RET_BAD_PARAMS; }
/* ktv->name為custom_keys.json綁定鍵值對應的名稱 */ tk_snprintf(ch, sizeof(ch), "%s key up", ktv->name); widget_set_text_utf8(label, ch);
return RET_OK;}

2. 設定自定義按鍵值

在項目的資源目錄“assets/default/data/”(沒有data文件夾可自行創建)新建一個名為“custom_keys.json”的配置文件,該配置文件記錄按鍵名稱與按鍵值對應關系。下面是記錄“啟動”與“F1”兩個按鈕鍵值示例:

{ "START" : { "value" : 290 }, "F1" : { "value" : 279 }}

文件中“290”與“279”兩個值可以從ZTP800示教器的用戶手冊中獲取,之后在示教器上運行程序,按下“啟動”與“F1”兩個按鍵就能像文章開頭效果圖一樣正確識別按鍵值并顯示在靜態文本控件中。

嵌入式Linux如何開啟綁定物理按鍵功能

若經過上面步驟操作之后還沒效果,可能是沒有開啟ENABLE_CUSTOM_KEYS宏。此時可以在AWTK編譯選項中定義ENABLE_CUSTOM_KEYS=1,再進行編譯AWTK與應用即可開啟自定義按鍵功能,下圖是在awtk-linux-fb移植層的awtk_config.py開啟ENABLE_CUSTOM_KEYS宏的方法,其它平臺可根據實際步驟開啟該宏。

35bb7440-239b-11ef-bd4a-92fbcf53809c.png

圖3配置awtk_config.py開啟宏

RTOS如何綁定物理按鍵

如果想在RTOS平臺綁定物理按鍵也是比較簡單的,只需要在主循環通過按鍵掃描函數獲取物理按鍵并設置供AWTK識別的按鍵值,再調用AWTK函數main_loop_post_key_event將該按鍵值發送到GUI界面即可。
下面是一段STM32F103移植層對接物理按鍵的代碼示例,代碼先調用底層KEY_Scan按鍵掃描函數獲取實際物理按鍵,接著將按鍵值轉換成給AWTK識別的值(如:TK_KEY_UP),最后通過main_loop_post_key_event發送給上層GUI主循環事件隊列。

/* awtk-stm32f103ze-raw/awtk-port/main_loop_stm32_raw.c */void dispatch_input_events(void) { int key = KEY_Scan(0);
switch (key) { case KEY_UP: { key = TK_KEY_UP; break; } case KEY_DOWN: { key = TK_KEY_DOWN; break; } default: { key = 0; } }
if (key) { main_loop_post_key_event(main_loop(), TRUE, key); } else { main_loop_post_key_event(main_loop(), FALSE, key); }}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 檢測
    +關注

    關注

    5

    文章

    4436

    瀏覽量

    91369
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136182
  • awtk
    +關注

    關注

    0

    文章

    42

    瀏覽量

    216
收藏 人收藏

    評論

    相關推薦

    AWTK使用經驗】如何添加中文輸入法

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章
    的頭像 發表于 06-20 08:25 ?987次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何添加中文輸入法

    AWTK使用經驗】如何更換AWTK SDK與渲染模式

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何播放攝像頭畫面?如何更換
    的頭像 發表于 08-01 08:25 ?1013次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何更換<b class='flag-5'>AWTK</b> SDK與渲染模式

    什么是AWTKAWTK有哪些主要特色?

    什么是AWTKAWTK有哪些主要特色?
    發表于 06-16 06:43

    AWTK主要特色

    一、前言剛拿到字節offer,經歷了5次面試,其中4輪技術面,1輪HR面試。在這里分享一下自己的面試經驗和學習心得。希望能夠幫助更多的小伙伴。我本科畢業于四川師范學院計算機系,剛畢業時也是小白,也是
    發表于 08-20 07:28

    介紹AWTK

    ZLG 開源 GUI 引擎 AWTK 1.6 發布一、介紹AWTK全稱 Toolkit AnyWhere,是ZLG開發的開源 GUI 引擎,旨在為嵌入式系統、WEB、各種小程序、手機和 PC 打造
    發表于 08-20 08:09

    AWTK的寓意

    一、介紹AWTK全稱Toolkit AnyWhere,是ZLG開發的開源GUI引擎,旨在為嵌入式系統、WEB、各種小程序、手機和PC打造的通用GUI引擎,為用戶提供一個功能強大、高效可靠、簡單易用
    發表于 08-20 08:12

    介紹AWTK

    ZLG開源GUI引擎AWTK發布1.1版本一、介紹AWTK全稱Toolkit AnyWhere,是ZLG開發的開源GUI引擎,旨在為嵌入式系統、WEB、各種小程序、手機和PC打造的通用GUI引擎,為
    發表于 08-20 08:18

    Android 代碼模擬物理按鍵

    開發中有遇到這樣的情況,物理按鍵個數有限, 想用代碼模擬其他物理按鍵輸入,這里用了shell 命令在程序運行時環境里模擬按鍵事件。因命令執行
    發表于 10-22 15:21 ?43次下載
    Android  代碼模擬<b class='flag-5'>物理</b><b class='flag-5'>按鍵</b>

    AWTK使用經驗】如何設計立體電池進度條?

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章
    的頭像 發表于 04-18 08:25 ?420次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何設計立體電池進度條?

    AWTK使用經驗】加載和釋放外部圖片

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章
    的頭像 發表于 04-26 08:25 ?432次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】加載和釋放外部圖片

    AWTK使用經驗】如何播放視頻或攝像頭畫面

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章
    的頭像 發表于 07-04 08:25 ?571次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何播放視頻或攝像頭畫面

    AWTK使用經驗】如何實現序列幀動畫

    AWTK是基于C語言開發的跨平臺GUI框架。《AWTK使用經驗》系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何加載外部資源?如何設計自定義進度條?這些都會在系列文章
    的頭像 發表于 07-18 08:25 ?365次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何實現序列幀動畫

    AWTK使用經驗】如何在AWTK顯示阿拉伯文本

    AWTK是基于C語言開發的跨平臺GUI框架。AWTK使用經驗系列文章將介紹開發AWTK過程中一些常見問題與解決方案,例如:如何播放視頻或攝像頭畫面?如何播放序列幀動畫?這些都會在系列文
    的頭像 發表于 09-12 08:07 ?305次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何在<b class='flag-5'>AWTK</b>顯示阿拉伯文本

    AWTK使用經驗】如何裁剪字庫以及如何使用點陣字

    AWTK是基于C語言開發的跨平臺GUI框架。AWTK使用經驗系列文章將介紹開發AWTK過程中一些常見問題與解決方案。AWTK如何裁剪字庫在
    的頭像 發表于 10-10 08:05 ?230次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何裁剪字庫以及如何使用點陣字

    AWTK使用經驗】如何使用系統輸入法與開啟最大化窗口功能

    導讀AWTK是基于C語言開發的跨平臺GUI框架。AWTK使用經驗系列文章將介紹開發AWTK過程中一些常見問題與解決方案。AWTK具有跨平臺的
    的頭像 發表于 11-14 01:05 ?137次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經驗</b>】如何使用系統輸入法與開啟最大化窗口功能