liusuyi
2024-10-26 f2236478e434b9d1b714b51d3586fb11a59e6f14
增加 控制权和起飞
10 files added
4 files modified
1 files deleted
747 ■■■■■ changed files
ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java 83 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java 100 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavController.java 181 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java 69 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java 42 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java 63 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java 22 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java 28 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java 35 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java 35 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java 32 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java 12 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/ITyService.java 12 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java 31 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java 2 ●●●●● patch | view | raw | blame | history
ard-work/src/main/java/com/ard/tianyu/controller/UavBaseController.java
New file
@@ -0,0 +1,83 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.github.xiaoymin.knife4j.annotations.ApiSort;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavBaseController
 *
 * @author liusuyi
 * @date 2024年10月21日13:52
 **/
@Api(tags = "无人机基础接口")
@ApiSort(value = 2)
@RequestMapping("/uav/base")
@RestController
public class UavBaseController {
    @Resource
    private ITyService tyService;
    @ApiOperation("获取天宇token信息")
    @ApiOperationSupport(order = 1)
    @GetMapping("/getToken")
    public AjaxResult getToken() {
        return AjaxResult.success(tyService.getAccessToken());
    }
    @ApiOperation("获取天宇盒子列表")
    @ApiOperationSupport(order = 2)
    @GetMapping("/getBoxList")
    public AjaxResult getBoxList() {
        List<BoxInfoReceiver> BoxList = tyService.getBoxList();
        return AjaxResult.success(BoxList);
    }
    @ApiOperation("获取飞行历史")
    @ApiOperationSupport(order = 3)
    @PostMapping("/getBoxHistory")
    public AjaxResult getBoxHistory(@RequestBody BoxHistoryDTO boxHistoryDTO) {
        List<BoxHistoryReceiver> boxHistory = tyService.getBoxHistory(boxHistoryDTO);
        return AjaxResult.success(boxHistory);
    }
    @ApiOperation("获取任务照片")
    @ApiOperationSupport(order = 4)
    @PostMapping("/getBoxPhotos")
    public AjaxResult getBoxPhotos(@RequestBody BoxPhotosDTO boxPhotosDTO) {
        List<BoxPhotosReceiver> boxPhotos = tyService.getBoxPhotos(boxPhotosDTO);
        return AjaxResult.success(boxPhotos);
    }
    @ApiOperation("获取直播地址")
    @ApiOperationSupport(order = 5)
    @GetMapping("/getBoxList/{boxSn}")
    public AjaxResult getBoxLiveUrl(@PathVariable("boxSn") String boxSn) {
        BoxStreamUrlReceiver boxLiveUrl = tyService.getBoxLiveUrl(boxSn);
        return AjaxResult.success(boxLiveUrl);
    }
    @ApiOperation("修改云盒设置")
    @PostMapping("/updateBoxSettings")
    public AjaxResult updateBoxSettings(@RequestBody BoxSettingsDTO boxSettingsDTO) {
        Boolean state = tyService.updateBoxSettings(boxSettingsDTO);
        return AjaxResult.success(state);
    }
}
ard-work/src/main/java/com/ard/tianyu/controller/UavCameraController.java
New file
@@ -0,0 +1,100 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
import com.ard.tianyu.model.dto.camera.*;
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavCameraController
 *
 * @author liusuyi
 * @date 2024年10月21日13:52
 **/
@Api(tags = "无人机相机接口")
@RequestMapping("/uav/camera")
@RestController
public class UavCameraController {
    @Resource
    private ITyService tyService;
    @ApiOperation("拍照")
    @ApiOperationSupport(order = 1)
    @PostMapping("/capturePicDto")
    public AjaxResult capturePic(@RequestBody CapturePicDTO capturePicDto) {
        tyService.capturePic(capturePicDto);
        return AjaxResult.success();
    }
    @ApiOperation("录像")
    @ApiOperationSupport(order = 2)
    @PostMapping("/record")
    public AjaxResult record(@RequestBody RecordDTO recordDto) {
        tyService.record(recordDto);
        return AjaxResult.success();
    }
    @ApiOperation(value = "变倍", notes = "actionCode值:10变倍加 | 11变倍减 | 15复位 | 255停止")
    @ApiOperationSupport(order = 3)
    @PostMapping("/zoom")
    public AjaxResult zoom(@RequestBody ZoomDTO zoomDTO) {
        tyService.zoom(zoomDTO);
        return AjaxResult.success();
    }
    @ApiOperation("变倍指定倍数")
    @ApiOperationSupport(order = 4)
    @PostMapping("/zoomToLevel")
    public AjaxResult zoomToLevel(@RequestBody ZoomToLevelDTO zoomToLevelDTO) {
        tyService.zoomToLevel(zoomToLevelDTO);
        return AjaxResult.success();
    }
    @ApiOperation(value = "切换摄像头", notes = "actionParam值:0切换到FPV摄像头  | 1切换到载荷摄像头")
    @ApiOperationSupport(order = 5)
    @PostMapping("/switchCamera")
    public AjaxResult switchCamera(@RequestBody SwitchCameraDTO switchCameraDTO) {
        tyService.switchCamera(switchCameraDTO);
        return AjaxResult.success();
    }
    @ApiOperation(value = "切换视频源", notes = "相机在主相机镜头时有效,FPV镜头时无效 actionParam值:0-可见 1-变焦 2-红外")
    @ApiOperationSupport(order = 6)
    @PostMapping("/switchSource")
    public AjaxResult switchSource(@RequestBody SwitchSourceDTO switchSourceDTO) {
        tyService.switchSource(switchSourceDTO);
        return AjaxResult.success();
    }
    @ApiOperation(value = "打开或关闭照片回传", notes = "actionParam值:0-关闭,1-打开")
    @ApiOperationSupport(order = 10)
    @PostMapping("/photoReturnToggle")
    public AjaxResult photoReturnToggle(@RequestBody PhotoReturnToggleDTO photoReturnToggleDTO) {
        tyService.photoReturnToggle(photoReturnToggleDTO);
        return AjaxResult.success();
    }
}
ard-work/src/main/java/com/ard/tianyu/controller/UavController.java
File was deleted
ard-work/src/main/java/com/ard/tianyu/controller/UavGimbalController.java
New file
@@ -0,0 +1,69 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
import com.ard.tianyu.model.dto.camera.*;
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavGimbalController
 *
 * @author liusuyi
 * @date 2024年10月21日13:52
 **/
@Api(tags = "无人机云台控制接口")
@RequestMapping("/uav/gimbal")
@RestController
public class UavGimbalController {
    @Resource
    private ITyService tyService;
    @ApiOperation(value = "云台转动(基于角度)", notes = "actionCode值:0-回中,1-上,2-右上,3-右,4-右下,5-下,6-左下,7-左,8-左上,254-停止")
    @ApiOperationSupport(order = 1)
    @PostMapping("/angleControl")
    public AjaxResult angleControl(@RequestBody AngleControlDTO angleControlDto) {
        tyService.angleControl(angleControlDto);
        return AjaxResult.success();
    }
    @ApiOperation(value = "云台绝对值控制(基于角度)", notes = "俯仰pitch范围:[-120°至+30°] 平移yaw范围:[-180°至+180°] 横滚roll范围:[-90°至+60°]")
    @ApiOperationSupport(order = 2)
    @PostMapping("/absAngleControl")
    public AjaxResult absAngleControl(@RequestBody @Validated AbsAngleControlDTO angleControlDto) {
        tyService.absAngleControl(angleControlDto);
        return AjaxResult.success();
    }
    @ApiOperation(value = "云台转动(基于速度)", notes = "俯仰转动速度:上正下负 平移转动速度:右正左负 横滚转动速度:顺时针正,逆时针负")
    @ApiOperationSupport(order = 3)
    @PostMapping("/speedControl")
    public AjaxResult speedControl(@RequestBody @Validated SpeedControlDTO speedControlDto) {
        tyService.speedControl(speedControlDto);
        return AjaxResult.success();
    }
}
ard-work/src/main/java/com/ard/tianyu/controller/UavManualFlyController.java
New file
@@ -0,0 +1,42 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
 * UavManualFlyController
 *
 * @author liusuyi
 * @date 2024年10月21日13:52
 **/
@Api(tags = "无人机手动飞行接口")
@RequestMapping("/uav/manualFly")
@RestController
public class UavManualFlyController {
    @Resource
    private ITyService tyService;
    @ApiOperation(value = "切换无人机控制权", notes = "actionParam值:0-云盒获取控制权, 1-云盒释放控制权")
    @ApiOperationSupport(order = 1)
    @PostMapping("/switchUavControl")
    public AjaxResult switchUavControl(@RequestBody SwitchUavControlDTO switchUavControlDTO) {
        tyService.switchUavControl(switchUavControlDTO);
        return AjaxResult.success();
    }
    @ApiOperation(value = "起飞", notes = "起飞高度height取值范围:1.2~100,误差:+-0.4米")
    @ApiOperationSupport(order = 2)
    @PostMapping("/takeOff")
    public AjaxResult takeOff(@RequestBody TakeOffDTO takeOffDTO) {
        tyService.takeOff(takeOffDTO);
        return AjaxResult.success();
    }
}
ard-work/src/main/java/com/ard/tianyu/controller/UavRealDataController.java
New file
@@ -0,0 +1,63 @@
package com.ard.tianyu.controller;
import com.ard.common.core.domain.AjaxResult;
import com.ard.tianyu.model.dto.BoxHistoryDTO;
import com.ard.tianyu.model.dto.BoxPhotosDTO;
import com.ard.tianyu.model.dto.BoxSettingsDTO;
import com.ard.tianyu.model.dto.camera.*;
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
import com.ard.tianyu.model.receiver.BoxHistoryReceiver;
import com.ard.tianyu.model.receiver.BoxInfoReceiver;
import com.ard.tianyu.model.receiver.BoxPhotosReceiver;
import com.ard.tianyu.model.receiver.BoxStreamUrlReceiver;
import com.ard.tianyu.service.ITyService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
 * UavRealDataController
 *
 * @author liusuyi
 * @date 2024年10月21日13:52
 **/
@Api(tags = "无人机实时数据接口")
@RequestMapping("/uav/realData")
@RestController
public class UavRealDataController {
    @Resource
    private ITyService tyService;
    @ApiOperation("获取无人机状态")
    @GetMapping("/getUavState")
    public AjaxResult getUavState(String boxSn) {
        UavState uavState = tyService.getUavState(boxSn);
        return AjaxResult.success(uavState);
    }
    @ApiOperation("获取无人机遥测数据")
    @GetMapping("/getUavTelemetryData")
    public AjaxResult getUavTelemetryData(String boxSn) {
        TelemetryData telemetryData = tyService.getUavTelemetryData(boxSn);
        return AjaxResult.success(telemetryData);
    }
    @ApiOperation("获取无人机信道质量数据")
    @GetMapping("/getSignalInfo")
    public AjaxResult getSignalInfo(String boxSn) {
        SignalInfo signalInfo = tyService.getSignalInfo(boxSn);
        return AjaxResult.success(signalInfo);
    }
}
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/SwitchUavControlDTO.java
New file
@@ -0,0 +1,22 @@
package com.ard.tianyu.model.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * 切换视频源实体对象
 *
 * @author liusuyi
 * @date 2024年10月26日9:02
 **/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class SwitchUavControlDTO {
    private String boxSn;
    //    0x00 云盒获取控制权, 0x01云盒释放控制权
    private byte actionParam;
}
ard-work/src/main/java/com/ard/tianyu/model/dto/manual/TakeOffDTO.java
New file
@@ -0,0 +1,28 @@
package com.ard.tianyu.model.dto.manual;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
/**
 * 起飞实体对象
 *
 * @author liusuyi
 * @date 2024年10月26日9:02
 **/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Validated
public class TakeOffDTO {
    private String boxSn;
    @DecimalMin(value = "1.2", message = "起飞高度范围height最小值为 1.2")
    @DecimalMax(value = "100", message = "起飞高度范围height最大值为 100")
    private Float height;
}
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/SwitchUavControlCmd.java
New file
@@ -0,0 +1,35 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.camera.SwitchSourceDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
/**
 * 切换无人机控制权指令
 *
 * @author liusuyi
 * @date 2024年10月26日11:18
 **/
public class SwitchUavControlCmd extends BaseCmd {
    private final byte actionParam;        // 动作参数
    public SwitchUavControlCmd(SwitchUavControlDTO switchUavControlDTO) {
        setDataHeader((short) 0x7479);
        setDataLength((short) 19);
        setBoxSn(switchUavControlDTO.getBoxSn().getBytes());
        setCmdCode((byte) 0xD1);
        this.actionParam = switchUavControlDTO.getActionParam();
    }
    public void encode(ByteBuf out) {
        out.writeShort(getDataHeader());    // 写入数据头
        out.writeShort(getDataLength());    // 写入数据长度
        out.writeBytes(getBoxSn());         // 写入盒子SN
        out.writeByte(getCmdCode());        // 写入命令码
        out.writeByte(0x00);          // 写入加密标志
        out.writeByte(0x30);          // 写入动作编号
        out.writeByte(actionParam);         // 写入动作参数
    }
}
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffCmd.java
New file
@@ -0,0 +1,35 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
/**
 * 起飞
 *
 * @author liusuyi
 * @date 2024年10月26日15:43
 **/
public class TakeOffCmd extends BaseCmd {
    private final Float height;
    public TakeOffCmd(TakeOffDTO takeOffDTO) {
        setDataHeader((short) 0x7479);
        setDataLength((short) 22);
        setBoxSn(takeOffDTO.getBoxSn().getBytes());
        setCmdCode((byte) 0xD1);
        this.height = takeOffDTO.getHeight();
    }
    public void encode(ByteBuf out) {
        out.writeShort(getDataHeader());    // 写入数据头
        out.writeShort(getDataLength());    // 写入数据长度
        out.writeBytes(getBoxSn());         // 写入盒子SN
        out.writeByte(getCmdCode());        // 写入命令码
        out.writeByte(0x00);          // 写入加密标志
        out.writeByte(0x11);          // 写入动作编号
        out.writeFloat(height);             // 写入飞起高度
    }
}
ard-work/src/main/java/com/ard/tianyu/netty/command/manual/TakeOffReplyCmd.java
New file
@@ -0,0 +1,32 @@
package com.ard.tianyu.netty.command.manual;
import com.ard.tianyu.netty.command.BaseCmd;
import io.netty.buffer.ByteBuf;
import lombok.Data;
/**
 * 起飞
 *
 * @author liusuyi
 * @date 2024年10月26日15:43
 **/
@Data
public class TakeOffReplyCmd extends BaseCmd {
    private final byte encryptFlag = 0x00; // 加密标志
    private final byte actionCode = 0x11;  // 动作编号
    private final byte result;             // 执行结果
    private final Integer errorCode;       // 错误码
    public TakeOffReplyCmd(String boxSn, Byte result, Integer errorCode) {
        setDataHeader((short) 0x6A77);
        setDataLength((short) 22);
        setBoxSn(boxSn.getBytes());
        setCmdCode((byte) 0xD1);
        this.result = result;
        this.errorCode = errorCode;
    }
    public void encode(ByteBuf out) {
    }
}
ard-work/src/main/java/com/ard/tianyu/netty/handler/MessageProtocolDecoder.java
@@ -5,6 +5,7 @@
import com.ard.tianyu.netty.command.camera.CapturePicReplyCmd;
import com.ard.tianyu.netty.command.camera.RecordStartReplyCmd;
import com.ard.tianyu.netty.command.camera.RecordStopReplyCmd;
import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd;
import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd;
import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
@@ -92,12 +93,21 @@
                byte encryptionFlag = in.readByte();
                byte actionCode = in.readByte();
                switch (actionCode) {
                    case 0x22:
                    case 0x11:
                        byte result = in.readByte();
                        int errorCode = in.readInt();
                        uavData = new byte[15];
                        in.readBytes(uavData);
                        String boxSn = new String(uavData);
                        baseCmd = new TakeOffReplyCmd(boxSn, result, errorCode);
                        log.debug("起飞回复: {}", boxSn);
                        break;
                    case 0x22:
                        result = in.readByte();
                        errorCode = in.readInt();
                        uavData = new byte[15];
                        in.readBytes(uavData);
                        boxSn = new String(uavData);
                        baseCmd = new CameraModeReplyCmd(boxSn, result, errorCode);
                        log.debug("设置相机模式回复: {}", boxSn);
                        break;
ard-work/src/main/java/com/ard/tianyu/service/ITyService.java
@@ -7,6 +7,8 @@
import com.ard.tianyu.model.dto.control.AbsAngleControlDTO;
import com.ard.tianyu.model.dto.control.AngleControlDTO;
import com.ard.tianyu.model.dto.control.SpeedControlDTO;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -122,6 +124,16 @@
    void photoReturnToggle(PhotoReturnToggleDTO photoReturnToggleDTO);
    /**
     * 切换无人机控制权
     */
    void switchUavControl(SwitchUavControlDTO switchUavControlDTO);
    /**
     * 起飞
     */
    void takeOff(TakeOffDTO takeOffDTO);
    /**
     * 获取无人机状态
     */
    UavState getUavState(String boxSn);
ard-work/src/main/java/com/ard/tianyu/service/impl/TyServiceImpl.java
@@ -15,6 +15,8 @@
import com.ard.tianyu.model.dto.converter.UavSignalInfoConverter;
import com.ard.tianyu.model.dto.converter.UavStateConverter;
import com.ard.tianyu.model.dto.converter.UavTelemetryDataConverter;
import com.ard.tianyu.model.dto.manual.SwitchUavControlDTO;
import com.ard.tianyu.model.dto.manual.TakeOffDTO;
import com.ard.tianyu.model.dto.signal.SignalInfo;
import com.ard.tianyu.model.dto.state.UavState;
import com.ard.tianyu.model.dto.telemetry.TelemetryData;
@@ -25,6 +27,9 @@
import com.ard.tianyu.netty.command.control.AbsAngleControlCmd;
import com.ard.tianyu.netty.command.control.AngleControlCmd;
import com.ard.tianyu.netty.command.control.SpeedControlCmd;
import com.ard.tianyu.netty.command.manual.SwitchUavControlCmd;
import com.ard.tianyu.netty.command.manual.TakeOffCmd;
import com.ard.tianyu.netty.command.manual.TakeOffReplyCmd;
import com.ard.tianyu.netty.command.notice.BoxPowerStatusReplyCmd;
import com.ard.tianyu.netty.command.notice.FlyWayEndReplyCmd;
import com.ard.tianyu.netty.command.notice.UavReadyReplyCmd;
@@ -268,6 +273,24 @@
    }
    /**
     * 切换无人机控制权
     */
    @Override
    public void switchUavControl(SwitchUavControlDTO switchUavControlDTO) {
        SwitchUavControlCmd switchUavControlCmd = new SwitchUavControlCmd(switchUavControlDTO);
        this.sendMessage(tyConfiguration.getIpPort(), switchUavControlCmd);
    }
    /**
     * 起飞
     */
    @Override
    public void takeOff(TakeOffDTO takeOffDTO) {
        TakeOffCmd takeOffCmd = new TakeOffCmd(takeOffDTO);
        this.sendMessage(tyConfiguration.getIpPort(), takeOffCmd);
    }
    /**
     * 获取无人机状态
     */
    @Override
@@ -377,6 +400,11 @@
                    RecordStopReplyCmd recordStopReplyCommand = (RecordStopReplyCmd) tyCommand;
                    log.info("收到无人机停止录像回复:{} 错误码:{}", String.format("0x%02X", recordStopReplyCommand.getResult() & 0xFF), recordStopReplyCommand.getErrorCode());
                }
                //起飞回复
                if (tyCommand instanceof TakeOffReplyCmd) {
                    TakeOffReplyCmd takeOffReplyCommand = (TakeOffReplyCmd) tyCommand;
                    log.info("收到无人机起飞回复:{} 错误码:{}", String.format("0x%02X", takeOffReplyCommand.getResult() & 0xFF), takeOffReplyCommand.getErrorCode());
                }
                break;
            default:
                // 处理其他消息
@@ -384,6 +412,9 @@
        }
    }
    /**
     * 定时3秒发送心跳指令
     */
    @Scheduled(fixedRate = 3000)
    public void sendHeartBeat() {
        long timestamp = System.currentTimeMillis();
ard-work/src/main/java/com/ard/vtdu/controller/MediaController.java
@@ -22,7 +22,7 @@
 * @Version: 1.0
 **/
@RestController
@Api(tags = "mediaMTX接口")
@Api(tags = "流媒体接口")
@RequestMapping("/mediamtx/media")
public class MediaController extends BaseController {