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

描述

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

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分