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; /** * @author ZZQ * @date 2022/5/5 11:28 */ public class RemoteSendFileReqInnerFrame implements IRequestInnerFrame { private String payload; /** * @param fileTotalSize 升级文件总大小 * @param frameTotalSize 总帧数 * @param frameSize 单帧数据 */ public RemoteSendFileReqInnerFrame(int fileTotalSize, int frameTotalSize, int frameSize, String fileHexStr) { payload = SupplementUtils.suppleZero(Integer.toHexString(fileTotalSize).toUpperCase(), 8) + SupplementUtils.suppleZero(Integer.toHexString(frameTotalSize).toUpperCase(), 4) + SupplementUtils.suppleZero(Integer.toHexString(frameSize).toUpperCase(), 4) + CRC32Utils.getCRC32(fileHexStr.toUpperCase()); } @Override public String getEncodeFrame() { String functionCode = RemoteUpdateEnum.UpdateFileInfo.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()); } }