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_t* hmi_create (tk_iostream_t* io, hmi_on_prop_changed_t on_prop_changed, void* ctx);
- 参数说明:
hmi_create_with_serial 函数
- 函数功能:
- 函数原型:
hmi_t* hmi_create_with_serial (const char* device, hmi_on_prop_changed_t on_prop_changed, void* ctx);
- 参数说明:
hmi_destroy 函数
- 函数功能:
- 函数原型:
ret_t hmi_destroy (hmi_t* hmi);
- 参数说明:
hmi_dispatch 函数
- 函数功能:
- 函数原型:
ret_t hmi_dispatch (hmi_t* hmi);
- 参数说明:
hmi_get_prop 函数
- 函数功能:
- 函数原型:
ret_t hmi_get_prop (hmi_t* hmi, const char* target, const char* name, value_t* v);
- 参数说明:
hmi_get_prop_bool 函数
- 函数功能:
- 函数原型:
bool_t hmi_get_prop_bool (hmi_t* hmi, const char* name, bool_t defvalue);
- 参数说明:
hmi_get_prop_float 函数
- 函数功能:
- 函数原型:
float hmi_get_prop_float (hmi_t* hmi, const char* name, float defvalue);
- 参数说明:
hmi_get_prop_int 函数
- 函数功能:
- 函数原型:
int32_t hmi_get_prop_int (hmi_t* hmi, const char* name, int32_t defvalue);
- 参数说明:
hmi_get_prop_int64 函数
- 函数功能:
- 函数原型:
int64_t hmi_get_prop_int64 (hmi_t* hmi, const char* name, int64_t defvalue);
- 参数说明:
hmi_get_prop_str 函数
- 函数功能:
- 函数原型:
const char* hmi_get_prop_str (hmi_t* hmi, const char* name, const char* defvalue);
- 参数说明:
hmi_set_prop 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop (hmi_t* hmi, const char* target, const char* name, const value_t* v);
- 参数说明:
hmi_set_prop_bool 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop_bool (hmi_t* hmi, const char* name, bool_t value);
- 参数说明:
hmi_set_prop_float 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop_float (hmi_t* hmi, const char* name, float value);
- 参数说明:
hmi_set_prop_int 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop_int (hmi_t* hmi, const char* name, int32_t value);
- 参数说明:
hmi_set_prop_int64 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop_int64 (hmi_t* hmi, const char* name, int64_t value);
- 参数说明:
hmi_set_prop_str 函数
- 函数功能:
- 函数原型:
ret_t hmi_set_prop_str (hmi_t* hmi, const char* name, const char* value);
- 参数说明:
remote_ui 属性
- 类型:remote_ui_t*