package com.sandu.ximon.admin.manager.iot.frame.inner.report; import cn.hutool.core.util.StrUtil; 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/3/14 16:36 */ @Data @ToString(callSuper = true) public class A5LightPoleHeelingOperationReportInnerFrame extends BaseResponseInnerFrame { //MAC地址 private String mac; //响应状态 // 0x00 成功 // 0x01 校验码错误 // 0x02 长度错误 // 0x03 写Flash失败错误 // 0xFF 其他错误 private String state; @Override public A5LightPoleHeelingOperationReportInnerFrame transformFrame(String hex) { // 长度不一致时,返回null if (StrUtil.isBlank(hex)) { return null; } // MQTT通信方式(1) setConnectType(hex.substring(0, 2)); // 功能码(1) setFunctionCode(hex.substring(2, 4)); // 负荷长度(2) setPayloadLength(hex.substring(4, 8)); //MAC地址 setMac(hex.substring(8, 12)); //硬件交互响应结果 setState(returnState(hex.substring(12, 14))); setCrc32(hex.substring(hex.length() - 8)); // 校验CRC32 String frame = hex.substring(2, hex.length() - 8); this.setValidate(CRC32Utils.validateFrame(frame, getCrc32())); return this; } public String returnState(String stateCode) { String State = ""; switch (stateCode) { case "00": State = "操作成功"; break; case "01": State = "校验码错误"; break; case "02": State = "长度错误"; break; case "03": State = "写Flash失败错误"; break; case "FF": State = "其他错误"; break; default: } return State; } }