描述
- 总体协议说明
 
接口版本
| 版本号 | 制定人 | 制定日期 | 版本描述 | 
|---|---|---|---|
| 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"
    }
}