0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AWTK 开源串口屏开发(18) - 用 C 语言自定义命令

ZLG致远电子 2024-05-11 08:24 次阅读

如果 AWTK-HMI 内置模型无法满足需求,可以使用 C 语言来扩展默认模型。本文通过一个简单的例子,介绍一下用 C 语言扩展默认模型的方法。

AWTK-HMI 内置了不少模型,利用这些模型开发应用程序,不需要编写代码即可实现常见的应用。但是,有时候我们需要自定义一些命令,以实现一些特殊的功能。本文档介绍如何使用 C 语言自定义命令。

1. 实现 hmi_model_cmd_t 接口

1.1 exec 函数

本函数用于执行命令。函数原型如下:

typedef ret_t (*hmi_model_cmd_exec_t)(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args);

参数

  • cmd:命令对象;
  • obj:默认模型对象;
  • args:参数。

返回:

  • RET_OBJECT_CHANGED 表示模型对象发生了变化,界面自动更新。
  • RET_OK 表示命令执行成功,但模型对象没有发生变化。
  • 其他值表示命令执行失败。

1.2 can_exec 函数

本函数用于判断命令是否可以执行。函数原型如下:

typedef bool_t (*hmi_model_cmd_can_exec_t)(hmi_model_cmd_t* cmd, tk_object_t* obj, const char* args);

参数:

  • cmd:命令对象;
  • obj:默认模型对象;
  • args:参数。

返回:

  • TRUE 表示命令可以执行;
  • FALSE 表示命令不能执行。

1.3 声明命令对象

命令对象一般定义为全局变量。

示例

static const hmi_model_cmd_t s_inc_temp_cmd = { .name = "inc_temp", .exec = inc_temp_exec, .can_exec = inc_temp_can_exec,};


2.注册命令

调用函数 hmi_model_add_cmd 注册命令。

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.完整示例

下面的代码实现了一个命令 inc_temp,用于增加温度属性的值。温度的值小于 100 时,命令可以执行。

#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语言
    +关注

    关注

    180

    文章

    7597

    浏览量

    136117
  • 串口屏
    +关注

    关注

    8

    文章

    530

    浏览量

    37304
  • awtk
    +关注

    关注

    0

    文章

    42

    浏览量

    216
收藏 人收藏

    评论

    相关推荐

    串口可以自定义协议吗?

    求问:串口可以自定义协议吗?
    发表于 03-27 15:24

    LISP语言自定义AutoCAD命令

    LISP语言自定义AutoCAD命令 AutoLISP语言作为AutoCAD的二次开发工具,
    发表于 02-14 17:08 2231次阅读

    DOS下自定义时间重启

    DOS环境下,C语言编写,自定义时间重启。
    发表于 03-16 09:40 6次下载

    C#教程之自定义屏保

    C#教程之自定义屏保,很好的C#资料,快来学习吧。
    发表于 04-20 09:59 7次下载

    创建自定义的u-boot命令

    为什么会有这篇文章,因为小生被u-boot源码的设计所吸引了(源码对命令的处理过程)。自定义u-boot命令属于u-boot源码的开发技术啦,可能u-boot官方
    的头像 发表于 08-08 14:46 1073次阅读

    基于AWTK和AWPLC开发自定义功能块

    AWPLC 是 ZLG 自主研发的 PLC 系统(兼容 IEC61131-3),本文定时器为例介绍一下如何扩展自定义功能块。
    的头像 发表于 10-26 11:50 900次阅读

    ESP32上的自定义UART协议开源

    电子发烧友网站提供《ESP32上的自定义UART协议开源.zip》资料免费下载
    发表于 02-13 16:38 4次下载
    ESP32上的<b class='flag-5'>自定义</b>UART协议<b class='flag-5'>开源</b>

    自定义算子开发

    一个完整的自定义算子应用过程包括注册算子、算子实现、含自定义算子模型转换和运行含自定义op模型四个阶段。在大多数情况下,您的模型应该可以通过使用hb_mapper工具完成转换并顺利部署到地平线芯片上……
    的头像 发表于 04-07 16:11 2736次阅读
    <b class='flag-5'>自定义</b>算子<b class='flag-5'>开发</b>

    【产品应用】 AWTK 和 AWPLC 快速开发嵌入式应用程序 (4)- 自定义功能块(上)

    AWPLC是ZLG自主研发的PLC系统(兼容IEC61131-3),本文定时器为例介绍一下如何扩展自定义功能块。背景AWTK全称ToolkitAnyWhere,是ZLG开发
    的头像 发表于 11-02 09:56 705次阅读
    【产品应用】<b class='flag-5'>用</b> <b class='flag-5'>AWTK</b> 和 AWPLC 快速<b class='flag-5'>开发</b>嵌入式应用程序 (4)- <b class='flag-5'>自定义</b>功能块(上)

    【产品应用】 AWTK 和 AWPLC 快速开发嵌入式应用程序 (5)- 自定义功能块(下)

    AWPLC是ZLG自主研发的PLC系统(兼容IEC61131-3),本文以定时器为例介绍一下如何扩展自定义功能块,以及代码生成器的用法。背景AWTK全称ToolkitAnyWhere,是ZLG开发
    的头像 发表于 11-04 10:12 781次阅读
    【产品应用】<b class='flag-5'>用</b> <b class='flag-5'>AWTK</b> 和 AWPLC 快速<b class='flag-5'>开发</b>嵌入式应用程序 (5)- <b class='flag-5'>自定义</b>功能块(下)

    串口LUA教程10-自定义串口指令

    串口LUA教程10-自定义串口指令
    发表于 04-29 13:17 16次下载

    AWTK 开源智能串口方案

    AWTK开源智能串口方案发布,旨在解决传统串口诸多痛点,为用户提供更开放、更易用、更强大的
    的头像 发表于 12-02 08:24 882次阅读
    <b class='flag-5'>AWTK</b> <b class='flag-5'>开源</b>智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案

    ​【AWTK开源智能串口方案】方案介绍和工作原理

    本篇文章介绍一下AWTK开源智能串口方案的基本原理和实际使用效果,包括主要特点、应用场景、工作原理以及简单的Demo演示。引言:AWTK-
    的头像 发表于 12-21 08:24 939次阅读
    ​【<b class='flag-5'>AWTK</b><b class='flag-5'>开源</b>智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】方案介绍和工作原理

    AWTK开源智能串口方案】HMI端程序移植编译及运行

    本篇文章介绍一下AWTK开源智能串口方案的串口端(即HMI端)的编译运行步骤,并介绍如何将H
    的头像 发表于 01-18 08:24 852次阅读
    【<b class='flag-5'>AWTK</b><b class='flag-5'>开源</b>智能<b class='flag-5'>串口</b><b class='flag-5'>屏</b>方案】HMI端程序移植编译及运行

    AWTK使用经验】如何自定义combo_box下拉框样式

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发
    的头像 发表于 05-23 08:25 421次阅读
    【<b class='flag-5'>AWTK</b>使用经验】如何<b class='flag-5'>自定义</b>combo_box下拉框样式