package com.ard.work.component.netty.command.manual; import com.ard.work.component.netty.command.BaseCmd; import com.ard.work.domain.dto.manual.FlyPointControlDTO; import com.ard.work.domain.dto.manual.FlyRoundControlDTO; import io.netty.buffer.ByteBuf; /** * 环绕飞行控制指令 * * @author liusuyi * @date 2024年10月26日15:43 **/ public class FlyRoundControlCmd extends BaseCmd { private final double longitude; // 兴趣点经度 private final double latitude; // 兴趣点纬度 private final float altitude; // 兴趣点高度 private final float height; // 飞行高度 private final float speed; // 环绕速度 private final float radius; // 环绕半径 private final byte flyMode; // 飞行模式 public FlyRoundControlCmd(FlyRoundControlDTO flyRoundControlDTO) { setDataHeader((short) 0x7479); setDataLength((short) 51); setBoxSn(flyRoundControlDTO.getBoxSn().getBytes()); setCmdCode((byte) 0xD1); this.longitude = flyRoundControlDTO.getLongitude(); this.latitude = flyRoundControlDTO.getLatitude(); this.altitude = flyRoundControlDTO.getAltitude(); this.height=flyRoundControlDTO.getHeight(); this.speed = flyRoundControlDTO.getSpeed(); this.radius= flyRoundControlDTO.getRadius(); this.flyMode = flyRoundControlDTO.getFlyMode(); } public void encode(ByteBuf out) { out.writeShort(getDataHeader()); // 写入数据头 out.writeShort(getDataLength()); // 写入数据长度 out.writeBytes(getBoxSn()); // 写入盒子SN out.writeByte(getCmdCode()); // 写入命令码 out.writeByte(0x00); // 写入加密标志 out.writeByte(0x3B); // 写入动作编号 out.writeDouble(longitude); // 写入兴趣点经度 out.writeDouble(latitude); // 写入兴趣点纬度 out.writeFloat(altitude); // 写入兴趣点高度 out.writeFloat(height); // 写入飞行高度 out.writeFloat(speed); // 写入环绕速度 out.writeFloat(radius); // 写入环绕半径 out.writeByte(flyMode); // 写入飞行模式 } }