简体中文
简体中文
English
联系我们
注册
登录

复杂协议说明

更新时间:2022-10-09 09:43:58下载pdf

针对 Raw 和 String 类型复杂功能点,提供标准化的解析说明,便于快速了解 DP 协议解析规则。同时,标准化的 DP 协议规则能在跨品类选功能点、面板开发、云开发、大数据解析时被复用。请按照标准协议规则进行设备端开发,以未来兼容更多的开发方式。

协议预览

复杂协议说明

协议预览说明:

  • 每个字段展示一个 F,用于表示一个字节长度。
  • 每个字段下面展示对应的数字,每个数字代表具体协议字段。同时每个数字会有长度范围,对应字段长度。
  • 协议会存在循环情况,循环分为三种类型循环:无固定次数循环、固定次数循环、依赖循环,基于 1 个以上字段组成循环,并结合其他普通字段实现完整的复杂协议内容。
    • 无固定次数循环:根据接收到的总字段长度,动态计算循环次数,其存在位置为固定,但是长度为不固定的。
    • 固定次数循环:指定次数循环,其存在位置及长度均为固定。
    • 依赖字段循环:基于某一个字段的数值作为其循环次数,其存在位置及长度均为固定。
  • 循环解析规则:由于循环存在循环套循环的情况,解析循环时,应先解析内循环,待内循环解析完成,再解析上一级循环。
  • 关于不同数据类型的协议解析说明:由于 Raw 格式为 16 进制组成,String 格式为字符串形式,故协议解析时,默认以 Raw 格式字节长度定义,String 格式解析时,按照协议字段定义长度 × 2进行逐位裁剪。

字段说明

复杂协议说明

  • 序号:协议字段序号,关系到协议字段的顺序。

  • 字段名称:协议字段的名称解释。

  • 长度:协议字段长度。

  • 数据类型:协议字段类型。目前,包括布尔、数值、枚举、String、周数据、比特位类型。不同类型对应属性值不一致。

  • 字段属性:具体字段属性值。

  • 字段说明:字段的补充解释说明。

    复杂协议说明

协议解析内容

解析 demo

{
    "bs2":[
        {
            "bs22":{
                "langKey":"30d7e1f1",
                "type":"string",
                "value":[
                    17
                ]
            }
        },
        {
            "bs22":{
                "langKey":"30d7e1f1",
                "type":"string",
                "value":[
                    34
                ]
            }
        }
    ],
    "bs1":{
        "langKey":"5165502",
        "type":"enum",
        "value":{
            "value":[
                2
            ]
        }
    },
    "bs4":[
        {
            "bs44":{
                "langKey":"731d3b7e",
                "type":"string",
                "value":[
                    85
                ]
            }
        },
        {
            "bs44":{
                "langKey":"731d3b7e",
                "type":"string",
                "value":[
                    17
                ]
            }
        },
        {
            "bs44":{
                "langKey":"731d3b7e",
                "type":"string",
                "value":[
                    17
                ]
            }
        },
        {
            "bs44":{
                "langKey":"731d3b7e",
                "type":"string",
                "value":[
                    17
                ]
            }
        }
    ],
    "bs3":[
        {
            "bs33":{
                "langKey":"d372e06a",
                "type":"string",
                "value":[
                    51
                ]
            }
        },
        {
            "bs33":{
                "langKey":"d372e06a",
                "type":"string",
                "value":[
                    68
                ]
            }
        }
    ]
}

解析内容概述

  • 解析内容为一个 JSON 对象。

  • JSON 对象的 key 为字段、组的标识符。

  • 字段的值为 JSON 对象、组的值为数组。

  • 多语言标识符需要通过 Dubbo 接口解析具体中英文。

字段内容

简单字段类型(字符串、数值型)

{
    "langKey":"d372e06a",
    "type":"string",
    "value":[
        51
    ]
}

  • langKey:字段多语言标识符。
  • type:字段类型,取值 string、number。
  • value:int 数组。

周字段类型

{
    "langKey":"d372e06a",
    "type":"week",
    "value":[
        1,0,0,0,0,0,0
    ]
}

  • langkey:字段多语言标识符。
  • type:字段类型取值 week
  • value:int 数组,固定 7 位,从 0 到 6 位,数据坐标依次为周一至周末的取值。以上述案例举例表示周一启动。

多语言值字段类型(枚举、布尔型字段)

{
    "langKey":"5165502",
    "type":"enum",
    "value":{
        "langKey":"d372e06a",
        "value":[
            2
        ]
    }
}

  • langKey:字段多语言标识符。
  • type:字段类型取值 enum、boolean。
  • value:JSON 对象。
  • langKey:值多语言标识符。若 value 未匹配到预定义的值,则会缺失。
  • value:int 数组。

比特字段类型

{
    "langKey":"2ecbe5e2",
    "type":"bit",
    "value":{
        "bit7":{
            "langKey":"8ebb4416",
            "index":7,
            "type":"boolean",
            "value":{
                "langKey":"2d3975fd",
                "value":[
                    0
                ]
            }
        },
        "bit5":{
            "langKey":"d0cc3145",
            "index":5,
            "type":"boolean",
            "value":{
                "langKey":"2d3975fd",
                "value":[
                    0
                ]
            }
        },
        "bit6":{
            "langKey":"fc9a8919",
            "index":6,
            "type":"boolean",
            "value":{
                "langKey":"2d3975fd",
                "value":[
                    0
                ]
            }
        },
        "bit3":{
            "langKey":"c978dd00",
            "index":3,
            "type":"boolean",
            "value":{
                "langKey":"7f18c924",
                "value":[
                    1
                ]
            }
        },
        "bit4":{
            "langKey":"15d5ee1e",
            "index":4,
            "type":"boolean",
            "value":{
                "langKey":"7f18c924",
                "value":[
                    1
                ]
            }
        },
        "bit1":{
            "langKey":"50b1a328",
            "index":1,
            "type":"boolean",
            "value":{
                "langKey":"7f18c924",
                "value":[
                    1
                ]
            }
        },
        "bit2":{
            "langKey":"18d3937b",
            "index":2,
            "type":"boolean",
            "value":{
                "langKey":"2d3975fd",
                "value":[
                    0
                ]
            }
        },
        "bit0":{
            "langKey":"801acde4",
            "index":0,
            "type":"boolean",
            "value":{
                "langKey":"2d3975fd",
                "value":[
                    0
                ]
            }
        }
    }
}

- langKey:字段多语言标识符。
- type:字段类型取值 bit。
- value: 字段值,JSON 类型。比特字段属于“复合类型字段”,包含 8 个子字段。JSON 的 key 为子字段的标识符。

子字段:

  • langKey: 子字段多语言标识符。
  • index:顺序号。
  • type: 子字段类型,取值为 boolean。
  • value:子字段取值(多语言类型)。
  • langKey:子字段取值多语言标识符。
  • value:子字段取值,int 数组。取值范围 0 或者 1

[
    {
        "a":{
            "langKey":"266edefb",
            "type":"string",
            "value":[
                12
            ]
        },
        "d":{
            "langKey":"01f1e022",
            "type":"string",
            "value":[
                18
            ]
        }
    },
    {
        "a":{
            "langKey":"266edefb",
            "type":"string",
            "value":[
                12
            ]
        },
        "d":{
            "langKey":"01f1e022",
            "type":"string",
            "value":[
                18
            ]
        }
    }
]

  • JSON 数组,相同的字段定义重复多次。
  • 不循环的组,是长度为 1 的数组。