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 { // 前导码 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; } }