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 { //硬件版本 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); } }