AWTK 开源串口屏开发(18) - 用 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_cmd

相关推荐

  1. AWTK 开源串口的配置文件

    2024-05-12 16:04:03       22 阅读
  2. AWTK 开源串口 MODBUS Server 模型

    2024-05-12 16:04:03       37 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-12 16:04:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-12 16:04:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-12 16:04:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-12 16:04:03       20 阅读

热门阅读

  1. python连接SQL Server数据库的几点建议

    2024-05-12 16:04:03       13 阅读
  2. 查看ubuntu当前路径的剩余存储空间

    2024-05-12 16:04:03       11 阅读
  3. baomidou dynamic-datasource 强制查询sql走主库

    2024-05-12 16:04:03       11 阅读
  4. 设计模式-建造者模式

    2024-05-12 16:04:03       12 阅读
  5. flask 模拟简单的登录功能(2)

    2024-05-12 16:04:03       12 阅读
  6. C表示interp2基本功能

    2024-05-12 16:04:03       11 阅读
  7. 实战:Spring Boot 环境准备

    2024-05-12 16:04:03       13 阅读
  8. 力扣Hot100-T8无重复字符的最长子串(经典)

    2024-05-12 16:04:03       10 阅读
  9. 算法系列之堆排序实践哪家强

    2024-05-12 16:04:03       8 阅读
  10. 苹果CMS影视站SEO优化教程

    2024-05-12 16:04:03       10 阅读
  11. Scala 变量和数据类型

    2024-05-12 16:04:03       13 阅读
  12. Spring-全面详解

    2024-05-12 16:04:03       8 阅读
  13. 高架学习笔记之主要敏捷方法概览

    2024-05-12 16:04:03       15 阅读
  14. Leetcode 100:相同的树

    2024-05-12 16:04:03       9 阅读
  15. 读书笔记——《高质量C++/C编程指南》(3)

    2024-05-12 16:04:03       12 阅读
  16. Redis5.0的Stream数据结构

    2024-05-12 16:04:03       10 阅读