加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 1. 实现 hmi_model_cmd_t 接口
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

【技术分享】AWTK 开源串口屏开发(18) - 用 C 语言自定义命令

05/10 15:13
1456
阅读需 6 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

如果 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;}

完整示例请参考:demo_custom_cmdhttps://gitee.com/zlgopen/awtk-hmi/tree/master/hmi/demo_custom_cmd

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
SN74LVC1G17DCKT 1 Texas Instruments Single 1.65-V to 5.5-V buffer with Schmitt-Trigger inputs 5-SC70 -40 to 125

ECAD模型

下载ECAD模型
$0.86 查看
NL17SZ17DFT2G 1 onsemi Single Non-Inverting Buffer with Schmitt Trigger Output, SC-88A (SC-70-5 / SOT-353), 3000-REEL

ECAD模型

下载ECAD模型
$0.19 查看
AST3TQ-T-25.000MHZ-28 1 Abracon Corporation XTAL OSC TCXO 25.0000MHZ LVCMOS
$32.98 查看
致远电子

致远电子

广州致远电子股份有限公司成立于2001年,注册资金5000万元,国家级高新技术认证企业,广州市高端工控测量仪器工程技术研究开发中心,Intel ECA全球合作伙伴和微软嵌入式系统金牌合作伙伴。

广州致远电子股份有限公司成立于2001年,注册资金5000万元,国家级高新技术认证企业,广州市高端工控测量仪器工程技术研究开发中心,Intel ECA全球合作伙伴和微软嵌入式系统金牌合作伙伴。收起

查看更多

相关推荐

电子产业图谱