一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【AWTK使用經(jīng)驗(yàn)】如何響應(yīng)物理按鍵

ZLG致遠(yuǎn)電子 ? 2024-06-06 08:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!禔WTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章進(jìn)行解答。

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

本篇文章將借助一個(gè)檢測(cè)按鍵的demo程序來(lái)介紹如何綁定物理按鍵并響應(yīng),該demo最終效果是按下任意物理按鍵時(shí)會(huì)顯示該按鍵key down,松開(kāi)按鍵時(shí)會(huì)顯示該按鍵key up。

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

圖1按鍵檢測(cè)程序效果圖

設(shè)計(jì)界面與綁定按鍵事件

用AWTK Designer打開(kāi)一個(gè)新建工程,并且放置一個(gè)靜態(tài)文本控件用作顯示按下或彈起的按鍵值。

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

圖2使用AWTK Designer設(shè)計(jì)界面

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

接下來(lái)修改項(xiàng)目的src/pages/home_page.c代碼文件,在初始化窗體時(shí)注冊(cè)監(jiān)聽(tīng)全局按鍵按下與彈起事件:

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實(shí)現(xiàn)按鍵按下和彈起的回調(diào)函數(shù),獲取按鍵值并輸出按鍵狀態(tài)為按下還是抬起:

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綁定鍵值對(duì)應(yīng)的名稱(chēng) */ 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綁定鍵值對(duì)應(yīng)的名稱(chēng) */ tk_snprintf(ch, sizeof(ch), "%s key up", ktv->name); widget_set_text_utf8(label, ch);
return RET_OK;}

2. 設(shè)定自定義按鍵值

在項(xiàng)目的資源目錄“assets/default/data/”(沒(méi)有data文件夾可自行創(chuàng)建)新建一個(gè)名為“custom_keys.json”的配置文件,該配置文件記錄按鍵名稱(chēng)與按鍵值對(duì)應(yīng)關(guān)系。下面是記錄“啟動(dòng)”與“F1”兩個(gè)按鈕鍵值示例:

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

文件中“290”與“279”兩個(gè)值可以從ZTP800示教器的用戶(hù)手冊(cè)中獲取,之后在示教器上運(yùn)行程序,按下“啟動(dòng)”與“F1”兩個(gè)按鍵就能像文章開(kāi)頭效果圖一樣正確識(shí)別按鍵值并顯示在靜態(tài)文本控件中。

嵌入式Linux如何開(kāi)啟綁定物理按鍵功能

若經(jīng)過(guò)上面步驟操作之后還沒(méi)效果,可能是沒(méi)有開(kāi)啟ENABLE_CUSTOM_KEYS宏。此時(shí)可以在AWTK編譯選項(xiàng)中定義ENABLE_CUSTOM_KEYS=1,再進(jìn)行編譯AWTK與應(yīng)用即可開(kāi)啟自定義按鍵功能,下圖是在awtk-linux-fb移植層的awtk_config.py開(kāi)啟ENABLE_CUSTOM_KEYS宏的方法,其它平臺(tái)可根據(jù)實(shí)際步驟開(kāi)啟該宏。

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

圖3配置awtk_config.py開(kāi)啟宏

RTOS如何綁定物理按鍵

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

/* 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); }}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 檢測(cè)
    +關(guān)注

    關(guān)注

    5

    文章

    4643

    瀏覽量

    92847
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141765
  • awtk
    +關(guān)注

    關(guān)注

    0

    文章

    50

    瀏覽量

    389
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    AWTK使用經(jīng)驗(yàn)】如何添加中文輸入法

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!?b class='flag-5'>AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章
    的頭像 發(fā)表于 06-20 08:25 ?1578次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何添加中文輸入法

    AWTK使用經(jīng)驗(yàn)】如何更換AWTK SDK與渲染模式

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架。《AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何播放攝像頭畫(huà)面?如何更換
    的頭像 發(fā)表于 08-01 08:25 ?1558次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何更換<b class='flag-5'>AWTK</b> SDK與渲染模式

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

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

    AWTK主要特色

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

    介紹AWTK

    ZLG 開(kāi)源 GUI 引擎 AWTK 1.6 發(fā)布一、介紹AWTK全稱(chēng) Toolkit AnyWhere,是ZLG開(kāi)發(fā)的開(kāi)源 GUI 引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和 PC 打造
    發(fā)表于 08-20 08:09

    AWTK的寓意

    一、介紹AWTK全稱(chēng)Toolkit AnyWhere,是ZLG開(kāi)發(fā)的開(kāi)源GUI引擎,旨在為嵌入式系統(tǒng)、WEB、各種小程序、手機(jī)和PC打造的通用GUI引擎,為用戶(hù)提供一個(gè)功能強(qiáng)大、高效可靠、簡(jiǎn)單易用
    發(fā)表于 08-20 08:12

    介紹AWTK

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

    AWTK-MVVM是什么?其功能有哪些

    AWTK-MVVM是一套為AWTK用C語(yǔ)言開(kāi)發(fā),并支持各種腳本語(yǔ)言的MVVM框架,實(shí)現(xiàn)了數(shù)據(jù)綁定、命令綁定和窗口導(dǎo)航等基本功能,使用AWTK-MVVM開(kāi)發(fā)應(yīng)用程序,無(wú)需學(xué)習(xí)AWTK本身
    發(fā)表于 12-15 06:07

    AWTK使用經(jīng)驗(yàn)】如何設(shè)計(jì)立體電池進(jìn)度條?

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!?b class='flag-5'>AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章
    的頭像 發(fā)表于 04-18 08:25 ?781次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何設(shè)計(jì)立體電池進(jìn)度條?

    AWTK使用經(jīng)驗(yàn)】加載和釋放外部圖片

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!?b class='flag-5'>AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章
    的頭像 發(fā)表于 04-26 08:25 ?882次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】加載和釋放外部圖片

    AWTK使用經(jīng)驗(yàn)】如何播放視頻或攝像頭畫(huà)面

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!?b class='flag-5'>AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章
    的頭像 發(fā)表于 07-04 08:25 ?1511次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何播放視頻或攝像頭畫(huà)面

    AWTK使用經(jīng)驗(yàn)】如何實(shí)現(xiàn)序列幀動(dòng)畫(huà)

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架?!?b class='flag-5'>AWTK使用經(jīng)驗(yàn)》系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何加載外部資源?如何設(shè)計(jì)自定義進(jìn)度條?這些都會(huì)在系列文章
    的頭像 發(fā)表于 07-18 08:25 ?858次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何實(shí)現(xiàn)序列幀動(dòng)畫(huà)

    AWTK使用經(jīng)驗(yàn)】如何在AWTK顯示阿拉伯文本

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架。AWTK使用經(jīng)驗(yàn)系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案,例如:如何播放視頻或攝像頭畫(huà)面?如何播放序列幀動(dòng)畫(huà)?這些都會(huì)在系列文
    的頭像 發(fā)表于 09-12 08:07 ?696次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何在<b class='flag-5'>AWTK</b>顯示阿拉伯文本

    AWTK使用經(jīng)驗(yàn)】如何裁剪字庫(kù)以及如何使用點(diǎn)陣字

    AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架。AWTK使用經(jīng)驗(yàn)系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案。AWTK如何裁剪字庫(kù)在
    的頭像 發(fā)表于 10-10 08:05 ?555次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何裁剪字庫(kù)以及如何使用點(diǎn)陣字

    AWTK使用經(jīng)驗(yàn)】如何使用系統(tǒng)輸入法與開(kāi)啟最大化窗口功能

    導(dǎo)讀AWTK是基于C語(yǔ)言開(kāi)發(fā)的跨平臺(tái)GUI框架。AWTK使用經(jīng)驗(yàn)系列文章將介紹開(kāi)發(fā)AWTK過(guò)程中一些常見(jiàn)問(wèn)題與解決方案。AWTK具有跨平臺(tái)的
    的頭像 發(fā)表于 11-14 01:05 ?662次閱讀
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>經(jīng)驗(yàn)</b>】如何使用系統(tǒng)輸入法與開(kāi)啟最大化窗口功能