package com.sandu.ximon.admin.manager.iot.frame.inner.request; import com.sandu.ximon.admin.manager.iot.frame.inner.IRequestInnerFrame; import com.sandu.ximon.admin.manager.iot.rrpc.enums.MQTTConnectTypeEnum; import com.sandu.ximon.admin.manager.iot.rrpc.enums.RemoteUpdateEnum; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils; import java.math.BigDecimal; /** * 启动远程升级 * * @author ZZQ * @date 2022/5/5 10:55 */ public class RemoteStartUpdateReqInnerFrame implements IRequestInnerFrame { //厂家标志(待定) private String factoryFlag = "0001"; private String payload; /** * @param hardwareVersion 硬件本版 * @param softwareVersion 软件版本 * @param updateFlag 升级标志 */ public RemoteStartUpdateReqInnerFrame(String hardwareVersion, String softwareVersion, String updateFlag) { String[] split = new BigDecimal(hardwareVersion).setScale(2, BigDecimal.ROUND_DOWN).toString().split("\\."); hardwareVersion = SupplementUtils.suppleZero(Integer.toHexString(Integer.valueOf(split[0])).toUpperCase(), 2) + SupplementUtils.suppleZero(Integer.toHexString(Integer.valueOf(split[1])).toUpperCase(), 2); String[] split1 = new BigDecimal(softwareVersion).setScale(2, BigDecimal.ROUND_DOWN).toString().split("\\."); softwareVersion = SupplementUtils.suppleZero(Integer.toHexString(Integer.valueOf(split1[0])).toUpperCase(), 2) + SupplementUtils.suppleZero(Integer.toHexString(Integer.valueOf(split1[1])).toUpperCase(), 2); payload = hardwareVersion + softwareVersion + factoryFlag + updateFlag; } @Override public String getEncodeFrame() { String functionCode = RemoteUpdateEnum.StartRemoteUpdate.getCode(); //计算长度 String payloadLength = SupplementUtils.suppleZero(Integer.toHexString((payload.length() / 2)).toUpperCase(), 4); String frame = functionCode + payloadLength + payload; return MQTTConnectTypeEnum.SYNCHRONIZATION.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } }