描述
- 总体协议说明
接口版本
版本号 | 制定人 | 制定日期 | 版本描述 |
---|---|---|---|
3.0 | 舒克 | 2021-12-23 | 初始版本 |
协议说明
采用JSON字符串进行UI控制。
主机发送如下字符串:
{
"wid": "screen_name/widget_name", # 控件名字
"cmd": "set_status", # 参考API列表中的字段
"attr": { # 控件属性,参考各控件的属性字段
}
}
返回如下字符串:
{
"code":0, # 错误码,其他get返回属性字段,请参考各控件属性字段
}
API列表
名字 | 对应协议文本 | 描述 |
---|---|---|
QMSD_CTRL_SET_STATUS | set_status | 配置控件特性 |
QMSD_CTRL_SET_STYLE | set_style | 配置控件样式 |
QMSD_CTRL_SEND_EVENT | send_event | 触发控件事件 |
QMSD_CTRL_GET | get | 获取属性 |
1、配置控件样式
参数说明
element | 数字参数 | 字符串参数 | 说明 |
---|---|---|---|
bg_color | r g b | NULL | 设置控件长宽为w、h |
bg_opa | opa | NULL | 设置控件坐标为x、y |
line_color | r g b | NULL | 设置控件可见度0为不可见 |
line_opa | opa | NULL | 设置控件可见度0为不可见 |
line_width | width | NULL | 设置控件可见度0为不可见 |
text_color | r g b | NULL | 设置控件可见度0为不可见 |
text_opa | opa | NULL | 设置控件可见度0为不可见 |
text_font | NULL | font | 设置控件可见度0为不可见 |
border_color | r g b | NULL | 设置控件可见度0为不可见 |
border_opa | opa | NULL | 设置控件可见度0为不可见 |
border_width | width | NULL | 设置控件可见度0为不可见 |
outline_color | r g b | NULL | 设置控件可见度0为不可见 |
outline_opa | opa | NULL | 设置控件可见度0为不可见 |
outline_width | width | NULL | 设置控件可见度0为不可见 |
image_recolor | r g b | NULL | 设置控件可见度0为不可见 |
recolor_opa | opa | NULL | 设置控件可见度0为不可见 |
image_opa | opa | NULL | 设置控件可见度0为不可见 |
调用API
/*
* call from other task
*/
int qmsd_ctrl_str(const char *json_str);
/*
* call from gui task, no need lock
*/
char *qmsd_ctrl_str_sync(const char *json_str);
/*
* call from other task, sync be false
* if sync to true, will wait for gui task
*/
int qmsd_ctrl_cjson(const char *wid, qmsd_ctrl_type type, const cJSON *attr, bool sync);
/*
* call from gui task, no need lock
*/
int qmsd_ctrl_cjson_gui(const char *wid, qmsd_ctrl_type type, const cJSON *attr);
详见github qmsd_ctrl.h
调用示例
cJSON *attr;
attr = cJSON_CreateObject();
cJSON_AddStringToObject(attr, "element", "text_font");
cJSON_AddNumberToObject(attr, "state", LV_STATE_DEFAULT);
cJSON_AddNumberToObject(attr, "part", LV_LABEL_PART_MAIN);
cJSON_AddStringToObject(attr, "font", "ali_font_58");
qmsd_ctrl_cjson_gui("screen_main_label_1", QMSD_CTRL_SET_STYLE, attr);
cJSON_Delete(attr);
注:设置控件字体;
返回示例
{
"code": 0
}
返回参数说明
参数名 | 类型 | 说明 |
---|---|---|
result | string | 结果信息 |
result.code | int | 错误码 |
错误码
错误码 | 说明 |
---|
2、发送事件
请求参数说明
功能 | 数字参数 | 字符串参数 | 说明 |
---|---|---|---|
发送事件 | event | NULL | 设置需发送的事件 |
调用示例
cJSON *attr;
attr = cJSON_CreateObject();
cJSON_AddNumberToObject(attr, "event", LV_EVENT_CLICKED);
qmsd_ctrl_cjson_gui("screen_main_button_1", QMSD_CTRL_SEND_EVENT, attr);
cJSON_Delete(attr);
注:触发按钮 screen_main_button_1 的点击事件;
3、配置控件参数
参数说明
element | 数字参数 | 说明 |
---|---|---|
set_size | w , h | 设置控件长宽为w、h |
set_pos | x , y | 设置控件坐标为x、y |
set_hidden | hidden | 设置控件可见度0为不可见 |
调用示例
cJSON *attr;
attr = cJSON_CreateObject();
cJSON_AddStringToObject(attr, "action", "set_pos");
cJSON_AddNumberToObject(attr, "x", 240);
cJSON_AddNumberToObject(attr, "y", 180);
qmsd_ctrl_cjson_gui("screen_main_button_1", QMSD_CTRL_SET_STATUS, attr);
cJSON_Delete(attr);
注:设置按钮 screen_main_button_1 的位置;
4、get
请求参数说明
参数名 | 类型 | 说明 |
---|
调用示例
{
"wid": "s1",
"cmd" : "get"
}
返回示例
{
"start_angle": 0,
"end_angle": 200,
"cur_angle": 100,
"code": 0
}
预设控制方式
除开通过调用控制api实现对UI的操作外,8ms平台通过blockly预设了控制接口,只需要填入符合协议格式的字符串即可
返回示例
协议格式
{
"wid": "${screen_id}/${widget_id}",
"cmd": "${cmd}",
"attr": {
}
}
WID填写屏幕及其上的控件ID,屏幕ID提供更精确的检索方式可省略。
cmd包括:”set_statue” “set_style” “send_event” “get” 具体参数见各指令详情
attr为操作所需参数,详见各指令条目
示例
修改控件位置
{
"wid": "screen_main/screen_main_label_1",
"cmd": "set_status",
"attr": {
"action": "set_pos",
"x": 200,
"y": 80
}
}
修改控件大小
{
"wid": "screen_main/screen_main_button_1",
"cmd": "set_status",
"attr": {
"action": "set_size",
"w": 180,
"h": 120
}
}
修改控件显示/隐藏
1隐藏 0显示
{
"wid": "screen_main/screen_main_button_1",
"cmd": "set_status",
"attr": {
"action": "set_hidden",
"hidden": 1
}
}
修改图片源
{
"wid": "screen_main/screen_main_img_1",
"cmd": "set_status",
"attr": {
"action": "set_src",
"src": "img_icon_0"
}
}