如果 AWTK-HMI 內(nèi)置模型無(wú)法滿足需求,可以使用 C 語(yǔ)言來(lái)擴(kuò)展默認(rèn)模型。本文通過(guò)一個(gè)簡(jiǎn)單的例子,介紹一下用 C 語(yǔ)言擴(kuò)展默認(rèn)模型的方法。
AWTK-HMI 內(nèi)置了不少模型,利用這些模型開(kāi)發(fā)應(yīng)用程序,不需要編寫代碼即可實(shí)現(xiàn)常見(jiàn)的應(yīng)用。但是,有時(shí)候我們需要自定義一些命令,以實(shí)現(xiàn)一些特殊的功能。本文檔介紹如何使用 C 語(yǔ)言自定義命令。
1. 實(shí)現(xiàn) hmi_model_cmd_t 接口
1.1 exec 函數(shù)
本函數(shù)用于執(zhí)行命令。函數(shù)原型如下:
typedef ret_t (*hmi_model_cmd_exec_t)(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args);
參數(shù):
- cmd:命令對(duì)象;
- obj:默認(rèn)模型對(duì)象;
- args:參數(shù)。
返回:
- RET_OBJECT_CHANGED 表示模型對(duì)象發(fā)生了變化,界面自動(dòng)更新。
- RET_OK 表示命令執(zhí)行成功,但模型對(duì)象沒(méi)有發(fā)生變化。
- 其他值表示命令執(zhí)行失敗。
1.2 can_exec 函數(shù)
本函數(shù)用于判斷命令是否可以執(zhí)行。函數(shù)原型如下:
typedef bool_t (*hmi_model_cmd_can_exec_t)(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args);
參數(shù):
- cmd:命令對(duì)象;
- obj:默認(rèn)模型對(duì)象;
- args:參數(shù)。
返回:
- TRUE 表示命令可以執(zhí)行;
- FALSE 表示命令不能執(zhí)行。
1.3 聲明命令對(duì)象
命令對(duì)象一般定義為全局變量。
示例
static const hmi_model_cmd_t s_inc_temp_cmd = { .name = "inc_temp", .exec = inc_temp_exec, .can_exec = inc_temp_can_exec,};
2.注冊(cè)命令
調(diào)用函數(shù) hmi_model_add_cmd 注冊(cè)命令。
ret_t custom_cmds_init(void) { tk_object_t* model = hmi_service_get_default_model(); hmi_model_add_cmd(model, &s_inc_temp_cmd);
return RET_OK;}
3.完整示例
下面的代碼實(shí)現(xiàn)了一個(gè)命令 inc_temp,用于增加溫度屬性的值。溫度的值小于 100 時(shí),命令可以執(zhí)行。
#define PROP_TEMP "溫度"
static ret_t inc_temp_exec(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args) { int temp = tk_object_get_prop_int(obj, PROP_TEMP, 0); tk_object_set_prop_int(obj, PROP_TEMP, temp + 1);
return RET_OBJECT_CHANGED;}
static bool_t inc_temp_can_exec(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args) { int temp = tk_object_get_prop_int(obj, PROP_TEMP, 0); return temp < 100;}
static const hmi_model_cmd_t s_inc_temp_cmd = { .name = "inc_temp", .exec = inc_temp_exec, .can_exec = inc_temp_can_exec,};
ret_t custom_cmds_init(void) { tk_object_t* model = hmi_service_get_default_model(); hmi_model_add_cmd(model, &s_inc_temp_cmd);
return RET_OK;}
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7630瀏覽量
140333 -
串口屏
+關(guān)注
關(guān)注
8文章
578瀏覽量
38110 -
awtk
+關(guān)注
關(guān)注
0文章
50瀏覽量
352
發(fā)布評(píng)論請(qǐng)先 登錄
用LISP語(yǔ)言自定義AutoCAD命令
創(chuàng)建自定義的u-boot命令
基于AWTK和AWPLC開(kāi)發(fā)自定義功能塊
ESP32上的自定義UART協(xié)議開(kāi)源

自定義算子開(kāi)發(fā)

【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開(kāi)發(fā)嵌入式應(yīng)用程序 (4)- 自定義功能塊(上)

【產(chǎn)品應(yīng)用】用 AWTK 和 AWPLC 快速開(kāi)發(fā)嵌入式應(yīng)用程序 (5)- 自定義功能塊(下)

AWTK 開(kāi)源智能串口屏方案

?【AWTK開(kāi)源智能串口屏方案】方案介紹和工作原理

【AWTK使用經(jīng)驗(yàn)】如何自定義combo_box下拉框樣式

評(píng)論