设备接入 IOTDA-设备侧适配开发指导:查询设备版本号

时间:2024-07-03 16:53:31

查询设备版本号

从设备的软件升级流程(本流程只描述 物联网平台 与设备基于PCP协议交互的流程)可以看到,首先物联网平台向设备下发查询版本号信息,设备进行应答。

物联网平台发送消息

根据PCP消息结构的定义可以得出,物联网平台向设备下发查询版本号时,各消息字段的填写如下:

  • 起始标识:固定为消息流的前2个字节,固定为FFFE。
  • 版本号:数据类型为1个字节整数,且固定为1,即在消息流中为01。
  • 消息码:数据类型为1个字节整数,查询设备版本的消息码为19,转换为十六进制为13。
  • 校验码:数据类型为2个字节整数,先将校验码置为0000,然后将完整的消息码流进行CRC16的算法计算得到校验码,再将得到的校验码替换原消息中的0000。
  • 数据区长度:数据类型为2个字节整数,代表数据区的消息长度,根据数据区的数据结构可以得出该条消息无数据区,即数据区长度为0000。
  • 数据区:数据区代表要真正发送给设备的数据,根据查询版本信息的数据区定义,该条消息是没有实际要传送的数据的,即无需数据区字段。

    字段

    数据类型

    描述及要求

    无数据区

因此将查询版本消息的码流组合起来得到:FFFE 01 13 0000 0000。前面的校验码时讲了,需要将组合后的消息码流进行CRC16算法(物联网平台提供了基于JAVA和C语言的CRC16算法代码样例,您可以直接使用)得到校验码4C9A,然后将该校验码替换原码流中的0000后得到FFFE01134C9A0000,该消息码流即为物联网平台发送给设备的查询版本信息的消息码流。

设备返回的应答消息

设备收到物联网平台要查询设备的软件版本号消息,设备要向物联网平台反馈查询的结果,各消息字段的填写如下。

  • 起始标识固定为:FFFE。
  • 版本号固定为:01。
  • 消息码:与请求的消息码一致,为13。
  • 校验码:CRC16计算前先用0000替代。
  • 数据区长度:根据数据区的字段的数据类型得出数据区长度为17个字节,转换为十六进制为:0011。
  • 数据区:根据数据区的定义可知,处理成功的结果码为00,版本号信息假设为V0.9,将V0.9进行ASCII转码得到56302E39,由于版本号的数据类型为BYTE[16],即16个字节,当前只有4个字节,因此需要在版本号数据后面补0,得到56302E39000000000000000000000000。因此,数据区合并后为0056302E39000000000000000000000000。

    字段

    数据类型

    描述及要求

    结果码

    BYTE

    “0X00”处理成功

    当前版本号

    BYTE[16]

    当前版本号,由ASCII字符组成,位数不足时,后补“0X00”

将查询版本信息的消息流组合起来得到:FFFE 01 13 0000 0011 0056302E39000000000000000000000000。前面讲到,还要将消息流进行CRC16算法计算得到校验码为8DE3。因此,物联网平台向设备查询版本号信息,设备向平台返回的消息流为FFFE01138DE300110056302E39000000000000000000000000。

support.huaweicloud.com/devg-iothub/iot_01_0047_2.html