石墨消解仪后端服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.8 KiB

package com.iflytop.gd.hardware.controller;
import com.iflytop.gd.hardware.drivers.MiniServoDriver.DeviceServoId;
import com.iflytop.gd.hardware.drivers.MiniServoDriver.MiniServoRegIndex;
import com.iflytop.gd.hardware.exception.HardwareException;
import com.iflytop.gd.hardware.service.ServoService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Tag(name = "伺服电机控制")
@RestController
@RequestMapping("/api/servo")
@RequiredArgsConstructor
@Slf4j
public class ServoController {
private final ServoService servoService;
// 获取设备列表
@PostMapping("get-device-list")
@Operation(summary = "获取设备列表")
public Map<String, String> getDeviceList() {
Map<String, String> map = new HashMap<>();
for(DeviceServoId id : DeviceServoId.values()) {
map.put(id.name(), id.getDescription());
}
return map;
}
// 获取寄存器列表
@PostMapping("get-reg-list")
@Operation(summary = "获取寄存器列表")
public List<String> getRegList() {
List<String> list = new ArrayList<>();
for(MiniServoRegIndex reg : MiniServoRegIndex.values()) {
list.add(reg.name());
}
return list;
}
// 基础操作
@PostMapping("/enable")
@Operation(summary = "电源开启")
public void enable(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.enable(deviceId, true);
}
@PostMapping("/disable")
@Operation(summary = "电源关闭")
public void disable(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.enable(deviceId, false);
}
@PostMapping("/stop")
@Operation(summary = "停止")
public void stop(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.stop(deviceId);
}
@PostMapping("/move-to")
@Operation(summary = "移动(绝对)")
public void moveTo(@RequestParam DeviceServoId deviceId, @RequestParam Integer pos) throws HardwareException {
servoService.moveTo(deviceId, pos);
}
@PostMapping("/rotate-forward")
@Operation(summary = "正转")
public void rotateForward(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.rotate(deviceId, 1);
}
@PostMapping("/rotate-backward")
@Operation(summary = "反转")
public void rotateBackward(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.rotate(deviceId, 0);
}
@PostMapping("/rotate-with-torque")
@Operation(summary = "旋转(力矩)")
public void rotateWithTorque(@RequestParam DeviceServoId deviceId, @RequestParam Integer pos) throws HardwareException {
servoService.rotateWithTorque(deviceId, pos);
}
@PostMapping("/move-to-zero")
@Operation(summary = "回Home")
public void moveToZero(@RequestParam DeviceServoId deviceId) throws HardwareException {
servoService.moveToZero(deviceId);
}
// 寄存器操作
@PostMapping("/limit-velocity")
@Operation(summary = "设置限速")
public void setLimitVelocity(
@RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException {
servoService.setLimitVelocity(deviceId, val);
}
@PostMapping("/limit-torque")
@Operation(summary = "设置限力矩")
public void setLimitTorque(
@RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException {
servoService.setLimitTorque(deviceId, val);
}
@PostMapping("/protective-torque")
@Operation(summary = "设置保护力矩")
public void setProtectiveTorque(
@RequestParam DeviceServoId deviceId,
@RequestParam Integer val) throws HardwareException {
servoService.setProtectiveTorque(deviceId, val);
}
@PostMapping("/reg")
@Operation(summary = "设置寄存器")
public void setReg(
@RequestParam DeviceServoId deviceId,
@RequestParam MiniServoRegIndex reg,
@RequestParam Integer val) throws HardwareException {
servoService.setReg(deviceId, reg, val);
}
// 状态查询
@GetMapping("/position")
@Operation(summary = "读取位置")
public Integer readPos(@RequestParam DeviceServoId deviceId) throws HardwareException {
return servoService.readPos(deviceId);
}
@GetMapping("/regs")
@Operation(summary = "获取所有寄存器")
public Map<String, Integer> getAllReg(@RequestParam DeviceServoId deviceId) {
return servoService.getAllReg(deviceId);
}
}