2021与蓝度共同重构项目,服务端
liuhaonan
2022-02-14 0d75b97f3dc35013f1b6dca1b639e16275bfc95d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.sandu.ximon.admin.manager.iot.frame.inner.response;
 
import com.sandu.ximon.admin.entity.AtmoHeartBeatDataPackage;
import com.sandu.ximon.admin.entity.MainBoardResponse;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import com.sandu.ximon.admin.utils.LogUtils;
import lombok.Data;
 
/**
 * 大气查询心跳包响应
 */
@Data
public class AtmoQueryHeartBeatResponse implements MainBoardResponse<AtmoQueryHeartBeatResponse> {
 
    //  前导码 1
    private String mqttConnectionType;
    //  功能码 1
    private String functionCode;
    //  负荷长度    2
    private String payloadLength;
    //  目标地址    2
    private String destinationAddress;
    //  心跳包数据   64
    private AtmoHeartBeatDataPackage atmoHeartBeatDataPackage;
    //  CRC校验   4
    private String crc32;
    //  是否通过CRC校验
    private boolean isValidate;
 
 
    @Override
    public AtmoQueryHeartBeatResponse convertInstance(String hex) {
 
        //  长度不一致时,返回null
        if(hex.length() != 84) {
            LogUtils.error("大气心跳包转换长度错误:"+hex.length()+", frame :" +hex);
            return null;
        }
        this.mqttConnectionType = hex.substring(0, 2);
        this.functionCode = hex.substring(2, 4);
        this.payloadLength = hex.substring(4, 8);
        this.destinationAddress = hex.substring(8, 12);
        //  64
        this.atmoHeartBeatDataPackage = new AtmoHeartBeatDataPackage().convertInstance(hex.substring(12, 76));
        this.crc32 = hex.substring(76, 84);
 
        //  校验CRC32
        String frame = hex.substring(0, 76);
        this.setValidate(CRC32Utils.validateFrame(frame, this.crc32));
        return this;
    }
}