package com.sandu.ximon.admin.entity; import com.sandu.ximon.admin.entity.main.FunctionCode; import com.sandu.ximon.admin.entity.main.InnerFrame; import com.sandu.ximon.admin.entity.main.MainFrame; import com.sandu.ximon.admin.manager.iot.rrpc.util.CRC32Utils; import com.sandu.ximon.admin.manager.iot.rrpc.util.SupplementUtils; import com.sandu.ximon.admin.utils.HexStrConvertUtil; /** * 数据传输接口命令(外设数据)(功能码A5) */ public class DataTransportMainFrame implements MainFrame { private MQTTConnectType mqttConnectType; // 功能码(1) private FunctionCode functionCode; // 命令类型(1) private DataTransportOrderType orderType; // 负荷长度(2) private String payloadLength; // 负荷数据(hex) private InnerFrame payload; DataTransportMainFrame(DataTransportOrderType orderType, InnerFrame payload){ this.mqttConnectType = MQTTConnectType.SYNCHRONIZATION; this.functionCode = FunctionCode.DataTransportData; this.orderType = orderType; this.payloadLength = SupplementUtils.suppleZero(HexStrConvertUtil.tenToHex((payload.getCommand().length()/2)),4); this.payload = payload; } /** * 生成实体 * @param orderType 数据传输命令类型 * @param payload 负荷数据 * @return */ public static DataTransportMainFrame generateInstance(DataTransportOrderType orderType,InnerFrame payload) { return new DataTransportMainFrame(orderType, payload); } @Override public String getFrame() { String frame = this.functionCode.getCode() + this.orderType.getCode() + this.payloadLength + this.payload.getCommand(); return this.mqttConnectType.getCode() + frame.toUpperCase() + CRC32Utils.getCRC32(frame.toUpperCase()); } }