AWTK 开源串口屏开发(5) - MCU端 SDK 用法

AWTK 开源智能串口屏,不但开放了串口屏端全部源码,还提供了MCU 端 SDK,大大加快 MCU 软件的开发。本介绍一下 MCU 端 SDK 在不同平台上的用法。

完整示例可以参考下面的几个例子:

  • 普通嵌入式系统 mcu/stm32/hmi_app/hmi_app.c

  • 低端嵌入式系统 mcu/mini-sdk/hmi/examples/socket/main.c

  • Arduino 系统 mcu/mini-sdk/hmi/examples/arduino/awtk_hmi_demo.ino

在这里插入图片描述

  • MCU 模拟器 simulator/src/pages/home_page.c

在这里插入图片描述

基本用法

  • 创建 hmi 对象

创建 hmi 对象时,需要提供一个回调函数,当属性变化时,会调用这个函数。

示例

static ret_t hmi_on_prop_change(hmi_t* hmi, const char* name, const value_t* v) {
  /*处理参数变化*/
  if (tk_str_eq(name, "温度")) {
    int32_t temp = value_int(v);
    log_debug("temp=%d\n", temp);
  }

  return RET_OK;
}

...
  io = tk_stream_factory_create_iostream(url);
  hmi = hmi_create(io, hmi_on_prop_change, NULL);
  • 设置属性

示例

  hmi_set_prop_int(hmi, "温度", 36);
  • 获取属性

示例

  int32_t temp = hmi_get_prop_int(hmi, "温度", 0);
  • 在主循环中分发事件

示例

  hmi_dispatch(hmi);

完整示例


/*本文必须保存为 UTF-8 BOM 格式 */

#include "tkc/mem.h"
#include "hmi/hmi.h"

static int s_value = 0;
static uint32_t s_heap_mem[10240];

#define HMI_PROP_TEMP "温度"

/*回调函数*/
static ret_t hmi_on_prop_change(hmi_t* hmi, const char* name, const value_t* v) {
  if (strcmp(name, "温度") == 0) {
    s_value = value_int(v);
  }

  return RET_OK;
}

static void system_init(void) {
  Cache_Enable();                  //打开L1-Cache
  HAL_Init();                      //初始化HAL库
  Stm32_Clock_Init(160, 5, 2, 4);  //设置时钟,400Mhz
  delay_init(400);                 //延时初始化
  LED_Init();                      //初始化LED
  KEY_Init();                      //初始化按键
}

int main(void) {
  u8 key = 0;
  hmi_t* hmi = NULL;

  system_init();

  /*初始化内存*/
  tk_mem_init(s_heap_mem, sizeof(s_heap_mem));

  /*创建HMI对象*/
  hmi = hmi_create_with_serial("1", hmi_on_prop_change, NULL);

  while (1) {
    key = KEY_Scan(0);
    if (key) {
      switch (key) {
        case KEY2_PRES: {
          s_value = 0;
          break;
        }
        case KEY1_PRES: {
          s_value--;
          break;
        }
        case KEY0_PRES: {
          s_value++;
          break;
        }
        default: {
          break;
        }
      }

      /*修改数据*/
      hmi_set_prop_int(hmi, HMI_PROP_TEMP, s_value);
    } else {
      delay_ms(10);
    }

    /*分发事件*/
    hmi_dispatch(hmi);
  }
}

API 参考

串口屏客户端(供 MCU 使用)。


函数

函数名称说明
hmi_create创建hmi对象。
hmi_create_with_serial创建hmi对象。
hmi_destroy销毁hmi对象。
hmi_dispatch处理事件。
hmi_get_prop获取属性。
hmi_get_prop_bool获取布尔属性。
hmi_get_prop_float获取浮点数属性。
hmi_get_prop_int获取整数属性。
hmi_get_prop_int64获取64位整数属性。
hmi_get_prop_str获取字符串属性。
hmi_set_prop设置属性。
hmi_set_prop_bool设置布尔属性。
hmi_set_prop_float设置浮点数属性。
hmi_set_prop_int设置整数属性。
hmi_set_prop_int64设置64位整数属性。
hmi_set_prop_str设置字符串属性。

属性

属性名称类型说明
remote_uiremote_ui_t*remote ui 对象。
hmi_create 函数

  • 函数功能:

创建hmi对象。

  • 函数原型:
hmi_t* hmi_create (tk_iostream_t* io, hmi_on_prop_changed_t on_prop_changed, void* ctx);
  • 参数说明:
参数类型说明
返回值hmi_t*返回hmi对象。
iotk_iostream_t*流对象。
on_prop_changedhmi_on_prop_changed_t属性变化回调函数。
ctxvoid*上下文。
hmi_create_with_serial 函数

  • 函数功能:

创建hmi对象。

  • 函数原型:
hmi_t* hmi_create_with_serial (const char* device, hmi_on_prop_changed_t on_prop_changed, void* ctx);
  • 参数说明:
参数类型说明
返回值hmi_t*返回hmi对象。
deviceconst char*串口设备。
on_prop_changedhmi_on_prop_changed_t属性变化回调函数。
ctxvoid*上下文。
hmi_destroy 函数

  • 函数功能:

销毁hmi对象。

  • 函数原型:
ret_t hmi_destroy (hmi_t* hmi);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
hmi_dispatch 函数

  • 函数功能:

处理事件。

  • 函数原型:
ret_t hmi_dispatch (hmi_t* hmi);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
hmi_get_prop 函数

  • 函数功能:

获取属性。

  • 函数原型:
ret_t hmi_get_prop (hmi_t* hmi, const char* target, const char* name, value_t* v);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
targetconst char*目标对象。
nameconst char*属性名称。
vvalue_t*属性值。
hmi_get_prop_bool 函数

  • 函数功能:

获取布尔属性。

  • 函数原型:
bool_t hmi_get_prop_bool (hmi_t* hmi, const char* name, bool_t defvalue);
  • 参数说明:
参数类型说明
返回值bool_t返回属性值。
hmihmi_t*hmi对象。
nameconst char*属性名称。
defvaluebool_t默认值。
hmi_get_prop_float 函数

  • 函数功能:

获取浮点数属性。

  • 函数原型:
float hmi_get_prop_float (hmi_t* hmi, const char* name, float defvalue);
  • 参数说明:
参数类型说明
返回值float返回属性值。
hmihmi_t*hmi对象。
nameconst char*属性名称。
defvaluefloat默认值。
hmi_get_prop_int 函数

  • 函数功能:

获取整数属性。

  • 函数原型:
int32_t hmi_get_prop_int (hmi_t* hmi, const char* name, int32_t defvalue);
  • 参数说明:
参数类型说明
返回值int32_t返回属性值。
hmihmi_t*hmi对象。
nameconst char*属性名称。
defvalueint32_t默认值。
hmi_get_prop_int64 函数

  • 函数功能:

获取64位整数属性。

  • 函数原型:
int64_t hmi_get_prop_int64 (hmi_t* hmi, const char* name, int64_t defvalue);
  • 参数说明:
参数类型说明
返回值int64_t返回属性值。
hmihmi_t*hmi对象。
nameconst char*属性名称。
defvalueint64_t默认值。
hmi_get_prop_str 函数

  • 函数功能:

获取字符串属性。

  • 函数原型:
const char* hmi_get_prop_str (hmi_t* hmi, const char* name, const char* defvalue);
  • 参数说明:
参数类型说明
返回值const char*返回属性值。
hmihmi_t*hmi对象。
nameconst char*属性名称。
defvalueconst char*默认值。
hmi_set_prop 函数

  • 函数功能:

设置属性。

  • 函数原型:
ret_t hmi_set_prop (hmi_t* hmi, const char* target, const char* name, const value_t* v);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
targetconst char*目标对象。
nameconst char*属性名称。
vconst value_t*属性值。
hmi_set_prop_bool 函数

  • 函数功能:

设置布尔属性。

  • 函数原型:
ret_t hmi_set_prop_bool (hmi_t* hmi, const char* name, bool_t value);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
nameconst char*属性名称。
valuebool_t属性值。
hmi_set_prop_float 函数

  • 函数功能:

设置浮点数属性。

  • 函数原型:
ret_t hmi_set_prop_float (hmi_t* hmi, const char* name, float value);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
nameconst char*属性名称。
valuefloat属性值。
hmi_set_prop_int 函数

  • 函数功能:

设置整数属性。

  • 函数原型:
ret_t hmi_set_prop_int (hmi_t* hmi, const char* name, int32_t value);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
nameconst char*属性名称。
valueint32_t属性值。
hmi_set_prop_int64 函数

  • 函数功能:

设置64位整数属性。

  • 函数原型:
ret_t hmi_set_prop_int64 (hmi_t* hmi, const char* name, int64_t value);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
nameconst char*属性名称。
valueint64_t属性值。
hmi_set_prop_str 函数

  • 函数功能:

设置字符串属性。

  • 函数原型:
ret_t hmi_set_prop_str (hmi_t* hmi, const char* name, const char* value);
  • 参数说明:
参数类型说明
返回值ret_t返回RET_OK表示成功,否则表示失败。
hmihmi_t*hmi对象。
nameconst char*属性名称。
valueconst char*属性值。
remote_ui 属性

remote ui 对象。 高级用户可以使用此对象直接操作远程UI。

  • 类型:remote_ui_t*
特性是否支持
可直接读取
可直接修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/295228.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

23 导航栏

效果演示 实现了一个响应式的导航栏&#xff0c;当鼠标悬停在导航栏上的某个选项上时&#xff0c;对应的横条会从左到右地移动&#xff0c;从而实现了导航栏的动态效果。 Code <div class"flex"><ul><li>1</li><li>2</li><l…

04 supervised learning

Summary: unspervised learning clustering&#xff08;聚类算法&#xff09;Anomaly detection&#xff08;异常检测&#xff09; Recommender Systems&#xff08;推荐系统&#xff09;Reinforcement Learning&#xff08;强化学习&#xff09; 一 、 K-means算法 1.Notio…

Visual studio 2010的安装与使用

一、下载及安装 1、下载软件。 百度网盘&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/115RibV7dOI_y8LUGW-94cA?pwd4hrs 提取码&#xff1a;4hrs 2、右键解压下载好的文件。 3、找到cn_visual_2010_……/Setup.hta&#xff0c;双击运行。 4、选择第三个“ Visual…

Spring学习之——AOP(面向切面)

AOP 概念 AOP&#xff1a;全称是Aspect Oriented Programming即&#xff1a;面向切面编程。 简单的说它就是把我们程序重复的代码抽取出来&#xff0c;在需要执行的时候&#xff0c;使用动态代理的技术&#xff0c;在不修改源码的基础上&#xff0c;对程序进行增强&#xff…

Mac上安装 Node.js 的版本管理工具 n,以及 n 使用,的使用

安装 最近刚更换 Mac 本进行项目的开发&#xff0c;刚上手 Mac 本还不是很熟练&#xff0c;需要安装 Node.js 的包管理工具 在 Windows 上我是实用的 nvm 来管理的 Node 版本&#xff0c;但是我尝试下载 Nvm &#xff0c;发现下载安装后的 Nvm 无法使用&#xff0c;提示 “Th…

基于web3.js和ganache实现智能合约调用

目的&#xff1a;智能合约发布到本地以太坊模拟软件ganache并完成交互 准备工作&#xff1a; web3.jsganache模拟软件 ganache参数配置 从ganache获取一个url&#xff0c;和一个账号的地址&#xff0c; url直接使用图中的rpc server位置的数据即可 账号address从下列0x开头…

解决报错Exception encountered during context initialization

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读报错解决 报错 今天在测试一个类时&#xff0c;突然间报了以下错误。 juni…

【电路笔记】-电感器

电感器 文章目录 电感器1、概述2、电感器的时间常数3、电感器示例1 电感器是一种由线圈组成的无源电气元件&#xff0c;其设计目的是利用电流通过线圈而产生的磁力和电力之间的关系。 1、概述 在本中&#xff0c;我们将看到电感器是一种电子元件&#xff0c;用于将电感引入到电…

qiankun 公共依赖

1、提取公共依赖的目的 减少相同资源的重复加载资源版本不同步打包文件庞大2、如何提取公共依赖 基本思路&#xff1a;1、相同依赖 采用 CDN 的方式加载&#xff0c;并把 所有依赖的 CDN 链接 统一放到一个文件中进行管理 2、把存放 CDN 链接的文件&#xff0c;引入到 vue.conf…

【mysql】报错1349 - View‘s SELECT contains a subquery in the FROM clause

操作 创建视图的sql语句中有不支持子查询 mysql创建视图 select * from (select name,age from table_name where 11 and namea ) tb where 11 and type1问题 报错1349 - View’s SELECT contains a subquery in the FROM clause 原因 原因创建视图的sql语句中有不支持子查…

2024最新阿里云服务器地域(城市)对照表

2024年阿里云服务器地域分布表&#xff0c;地域指数据中心所在的地理区域&#xff0c;通常按照数据中心所在的城市划分&#xff0c;例如华北2&#xff08;北京&#xff09;地域表示数据中心所在的城市是北京。阿里云地域分为四部分即中国、亚太其他国家、欧洲与美洲和中东&…

在mybatis中编写SQL时,提示表名和字段名的设置方法

一、在设置中搜索SQL Dialects 二、将Global SQL Dialect和Project SQL Dialect设置为MySQL 三、添加Path&#xff0c;选择当前项目&#xff0c;完成后应用 四、连接要使用的数据库&#xff0c;连接到具体要使用的数据库 五、连接完成后&#xff0c;在xml中编写sql语句就会有…

鸡目标检测数据集VOC格式500张

鸡&#xff0c;一种家禽&#xff0c;是人类的重要食物来源之一&#xff0c;也是农业生产中的重要组成部分。 鸡的外观相对较为简单&#xff0c;身体呈圆锥形&#xff0c;羽毛密集&#xff0c;双翅短小&#xff0c;无法飞行。鸡的头部较小&#xff0c;嘴巴尖锐&#xff0c;方便…

DZ-200系列中间继电器 板后不带底座 DZY-212X DC220V JOSEF约瑟

DZY-200系列中间继电器 系列型号&#xff1a; DZY-201中间继电器 DZY-222中间继电器 DZY-202中间继电器 DZY-203中间继电器 DZY-204中间继电器 DZY-205中间继电器 DZY-206中间继电器 DZY-207中间继电器 DZY-208中间继电器 DZY-209中间继电器 DZY-210中间继电器 DZY-211中间继电…

全视通-医院智能视讯系统 病房视讯系统解决方案 智能医院对讲系统信息发布系统

医院智能视讯系统解决方案 1、行业背景 对于患者来说现阶段各大医院的住院部大都面临同样的问题&#xff0c;例如患者就医缺乏精准化医疗&#xff0c;缺乏对患者的心理健康引导&#xff0c;缺乏多维度沟通渠道&#xff0c;缺乏多元增值服务等。 对于传统医院住院部病房&am…

zookeeper应用场景之分布式的ID生成器

1. 分布式ID生成器的使用场景 在分布式系统中&#xff0c;分布式ID生成器的使用场景非常之多&#xff1a; 大量的数据记录&#xff0c;需要分布式ID。大量的系统消息&#xff0c;需要分布式ID。大量的请求日志&#xff0c;如restful的操作记录&#xff0c;需要唯一标识&#x…

腾讯云服务器和轻量服务器选哪个好(各自的优势区别)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

带你玩转AM62x开发板的显示接口——LVDS的显示和修改方式

此前小编已为大家介绍过OK6254-C开发板的RGB显示和修改方式&#xff0c;今天将继续为大家介绍OK6254-C开发板的LVDS显示和修改方式。话不多说&#xff0c;我们进入正题。 1 、LVDS接口规格 飞凌嵌入式OK6254-C开发板提供2个4-lane LVDS显示串行接口&#xff0c;每lane最高支持…

Mac——VsCode使用格式化工具进行整理和格式化

1. 打开VSCode编辑器。 2. 点击左下角⚙️图标&#xff0c;打开设置 3. 进入设置后&#xff0c;你会看到一个搜索框&#xff0c;在搜索框中输入 format on save 来查找相关设置项。 4. 在设置列表中找到 Editor: Format On Save 选项&#xff0c;勾选它以启用在保存文件时自动格…

智能分析网关V4太阳能风光互补远程视频智能监控方案

一、背景需求 在一些偏远地区&#xff0c;也具有视频监控的需求。但是这类场景中&#xff0c;一般无法就近获取市电&#xff0c;如果要长距离拉取市电&#xff0c;建设的成本非常高且长距离传输有安全隐患&#xff0c;因此风光互补远程视频监控方案的需求也较多。利用风光电转化…