2021与蓝度共同重构项目,服务端
Van333
2022-12-29 727a69f859060093e685582fa10e5de82dcc138a
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
53
54
55
56
57
58
59
60
61
62
63
package com.sandu.ximon.admin.manager.iot.frame.inner.report;
 
import com.sandu.common.execption.BusinessException;
import com.sandu.ximon.admin.manager.iot.frame.inner.BaseResponseInnerFrame;
import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils;
import lombok.Data;
import lombok.ToString;
 
/**
 * 启动远程升级命令响应内帧
 *
 * @author ZZQ
 * @date 2022/5/6 14:13
 */
@Data
@ToString(callSuper = true)
public class RemoteStartUpdateReportInnerFrame extends BaseResponseInnerFrame<RemoteStartUpdateReportInnerFrame> {
    //硬件版本
    private String hardwareVersion;
    //软件版本
    private String softwareVersion;
    //厂家标志
    private String factoryFlag;
    //指令标志
    private String orderFlag;
    //升级标志
    private String updateFlag;
 
    //FE  B0  0007  0108  0109  786D  01  90431921
    @Override
    public RemoteStartUpdateReportInnerFrame transformFrame(String hex) {
        if (hex.length() != 30) {
            throw new BusinessException("响应帧出错,请重新发送指令!");
        }
 
        // MQTT通信方式(1)
        setConnectType(hex.substring(0, 2));
        //  功能码(1)
        setFunctionCode(hex.substring(2, 4));
        //  负荷长度(2)
        setPayloadLength(hex.substring(4, 8));
        //硬件版本
        setHardwareVersion(parseVal(hex, 8, 10) + "." + parseVal(hex, 10, 12));
        //软件版本
        setSoftwareVersion(parseVal(hex, 12, 14) + "." + parseVal(hex, 14, 16));
        //厂家标志
        setFactoryFlag(hex.substring(16, 20));
        //指令标志
        setOrderFlag(hex.substring(20, 21));
        //升级标志
        setUpdateFlag(hex.substring(21, 22));
 
        setCrc32(hex.substring(hex.length() - 8));
        //  校验CRC32
        String frame = hex.substring(2, hex.length() - 8);
        this.setValidate(CRC32Utils.validateFrame(frame, getCrc32()));
        return this;
    }
 
    private Integer parseVal(String frame, int start, int end) {
        return Integer.parseInt(frame.substring(start, end), 16);
    }
}