AWTK 開源智能串口屏,不但開放了串口屏端全部源碼,還提供了MCU 端 SDK,大大加快 MCU 軟件的開發(fā)。本介紹一下 MCU 端 SDK 在不同平臺上的用法。
完整示例可以參考下面的幾個例子:
mcu/stm32h743/USER/main.c
低端嵌入式系統(tǒng)
mcu/mini-sdk/hmi/examples/socket/main.c
MCU 模擬器
simulator/src/pages/home_page.c
基本用法
1. 創(chuàng)建 hmi 對象
創(chuàng)建 hmi 對象時,需要提供一個回調(diào)函數(shù),當(dāng)屬性變化時,會調(diào)用這個函數(shù)。示例:
static ret_t hmi_on_prop_change(hmi_t* hmi, const char* name, const value_t* v) {
?/*處理參數(shù)變化*/
?if (tk_str_eq(name, "溫度")) {
? ?int32_t temp = value_int(v);
? ?log_debug("temp=%dn", temp);
?}
?return RET_OK;
}
...
?io = tk_stream_factory_create_iostream(url);
?hmi = hmi_create(io, hmi_on_prop_change, NULL);
2. 設(shè)置屬性
示例:
hmi_set_prop_int(hmi, "溫度", 36);
3. 獲取屬性示例:
int32_t temp = hmi_get_prop_int(hmi, "溫度", 0);
4. 在主循環(huán)中分發(fā)事件
示例:
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 "溫度"
/*回調(diào)函數(shù)*/
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); ?//設(shè)置時鐘,400Mhz
?delay_init(400); ? ? ? ? ? ? ? ? //延時初始化
?LED_Init(); ? ? ? ? ? ? ? ? ? ? ?//初始化LED
?KEY_Init(); ? ? ? ? ? ? ? ? ? ? ?//初始化按鍵
}
int main(void) {
?u8 key = 0;
?hmi_t* hmi = NULL;
?system_init();
?/*初始化內(nèi)存*/
?tk_mem_init(s_heap_mem, sizeof(s_heap_mem));
?/*創(chuàng)建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;
? ? ? ?}
? ? ?}
? ? ?/*修改數(shù)據(jù)*/
? ? ?hmi_set_prop_int(hmi, HMI_PROP_TEMP, s_value);
? ?} else {
? ? ?delay_ms(10);
? ?}
? ?/*分發(fā)事件*/
? ?hmi_dispatch(hmi);
?}
}
API 參考
串口屏客戶端(供 MCU 使用)。
1. 函數(shù)
函數(shù)名稱 | 說明 |
hmi_create | 創(chuàng)建hmi對象。 |
hmi_create_with_serial | 創(chuàng)建hmi對象。 |
hmi_destroy | 銷毀hmi對象。 |
hmi_dispatch | 處理事件。 |
hmi_get_prop | 獲取屬性。 |
hmi_get_prop_bool | 獲取布爾屬性。 |
hmi_get_prop_float | 獲取浮點(diǎn)數(shù)屬性。 |
hmi_get_prop_int | 獲取整數(shù)屬性。 |
hmi_get_prop_int64 | 獲取64位整數(shù)屬性。 |
hmi_get_prop_str | 獲取字符串屬性。 |
hmi_set_prop | 設(shè)置屬性。 |
hmi_set_prop_bool | 設(shè)置布爾屬性。 |
hmi_set_prop_float | 設(shè)置浮點(diǎn)數(shù)屬性。 |
hmi_set_prop_int | 設(shè)置整數(shù)屬性。 |
hmi_set_prop_int64 | 設(shè)置64位整數(shù)屬性。 |
hmi_set_prop_str | 設(shè)置字符串屬性。 |
2.?屬性
屬性名稱 | 類型 | 說明 |
remote_ui | remote_ui_t* | emote ui 對象。 |
2.1 hmi_create 函數(shù)
- 函數(shù)功能:
創(chuàng)建hmi對象。
函數(shù)原型:
hmi_t* hmi_create (tk_iostream_t* io, hmi_on_prop_changed_t on_prop_changed, void* ctx);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | hmi_t* | 返回hmi對象。 |
io | tk_iostream_t* | 流對象。 |
on_prop_changed | hmi_on_prop_changed_t | 屬性變化回調(diào)函數(shù)。 |
ctx | void* | 上下文。 |
2.2 hmi_create_with_serial?函數(shù)
函數(shù)功能:
創(chuàng)建hmi對象。
函數(shù)原型:
hmi_t* hmi_create_with_serial (const char* device, hmi_on_prop_changed_t on_prop_changed, void* ctx);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | hmi_t* | 返回hmi對象。 |
device | const char* | 串口設(shè)備。 |
on_prop_changed | hmi_on_prop_changed_t | 屬性變化回調(diào)函數(shù)。 |
ctx | void* | 上下文。 |
2.3 hmi_destroy?函數(shù)
函數(shù)功能:
銷毀hmi對象。
函數(shù)原型:
ret_t hmi_destroy (hmi_t* hmi);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
2.4?hmi_dispatch?函數(shù)
函數(shù)功能:
處理事件。。
函數(shù)原型:
ret_t hmi_dispatch (hmi_t* hmi);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
2.5 hmi_get_prop?函數(shù)
函數(shù)功能:
獲取屬性。
函數(shù)原型:
ret_t hmi_get_prop (hmi_t* hmi, const char* target, const char* name, value_t* v);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
target | const char* | 目標(biāo)對象。 |
name | const char* | 屬性名稱。 |
v | value_t* | 屬性值。 |
2.6 hmi_get_prop_bool?函數(shù)
函數(shù)功能:
獲取布爾屬性。
函數(shù)原型:
bool_t hmi_get_prop_bool (hmi_t* hmi, const char* name, bool_t defvalue);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | bool_t | 返回屬性值。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
defvalue | bool_t | 默認(rèn)值。 |
2.7 hmi_get_prop_float?函數(shù)
函數(shù)功能:
獲取浮點(diǎn)數(shù)屬性。
函數(shù)原型:
float hmi_get_prop_float (hmi_t* hmi, const char* name, float defvalue);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | float | 返回屬性值。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
defvalue | float | 默認(rèn)值。 |
2.8?hmi_get_prop_int?函數(shù)
函數(shù)功能:
獲取整數(shù)屬性。
函數(shù)原型:
int32_t hmi_get_prop_int (hmi_t* hmi, const char* name, int32_t defvalue);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | int32_t | 返回屬性值。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
defvalue | int32_t | 默認(rèn)值。 |
2.9?hmi_get_prop_int64?函數(shù)
函數(shù)功能:
獲取64位整數(shù)屬性。
函數(shù)原型:
int64_t hmi_get_prop_int64 (hmi_t* hmi, const char* name, int64_t defvalue);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | int64_t | 返回屬性值。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
defvalue | int64_t | 默認(rèn)值。 |
2.10?hmi_get_prop_str?函數(shù)
函數(shù)功能:
獲取字符串屬性。
函數(shù)原型:
const char* hmi_get_prop_str (hmi_t* hmi, const char* name, const char* defvalue);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | const?char* | 返回屬性值。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
defvalue | const?char* | 默認(rèn)值。 |
2.11 hmi_set_prop?函數(shù)
函數(shù)功能:
設(shè)置屬性。
函數(shù)原型:
ret_t hmi_set_prop (hmi_t* hmi, const char* target, const char* name, const value_t* v);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
target | const char* | 目標(biāo)對象。 |
name | const char* | 屬性名稱。 |
v | const?value_t* | 屬性值。 |
2.12?hmi_set_prop_bool?函數(shù)
函數(shù)功能:
設(shè)置布爾屬性。
函數(shù)原型:
ret_t hmi_set_prop_bool (hmi_t* hmi, const char* name, bool_t value);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
value | bool_t | 默認(rèn)值。 |
2.13?hmi_set_prop_float?函數(shù)
函數(shù)功能:
設(shè)置浮點(diǎn)數(shù)屬性。
函數(shù)原型:
ret_t hmi_set_prop_float (hmi_t* hmi, const char* name, float value);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
value | float | 默認(rèn)值。 |
2.14?hmi_set_prop_int?函數(shù)
函數(shù)功能:
設(shè)置整數(shù)屬性。
函數(shù)原型:
ret_t hmi_set_prop_int (hmi_t* hmi, const char* name, int32_t value);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
value | int32_t | 默認(rèn)值。 |
2.15?hmi_set_prop_int64?函數(shù)
函數(shù)功能:
設(shè)置64位整數(shù)屬性。
函數(shù)原型:
ret_t hmi_set_prop_int64 (hmi_t* hmi, const char* name, int64_t value);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
value | int64_t | 默認(rèn)值。 |
2.16?hmi_set_prop_str?函數(shù)
函數(shù)功能:
設(shè)置字符串屬性。
函數(shù)原型:
ret_t hmi_set_prop_str (hmi_t* hmi, const char* name, const char* value);
- 參數(shù)說明:
參數(shù) | 類型 | 說明 |
返回值 | ret_t | 返回RET_OK表示成功,否則表示失敗。 |
hmi | hmi_t* | hmi對象。 |
name | const?char* | 屬性名稱。 |
value | const?char* | 默認(rèn)值。 |
2.17 remote_ui?屬性
remote ui 對象。 高級用戶可以使用此對象直接操作遠(yuǎn)程UI。
- 類型:remote_ui_t*
特性 | 是否支持 |
可直接讀取 | 是 |
可直接修改 | 否 |