diff --git a/src/main/java/iflytop/app/hardware/driver/LeisaiServoDriver.java b/src/main/java/iflytop/app/hardware/driver/LeisaiServoDriver.java index 31d6156..8c5b1a0 100644 --- a/src/main/java/iflytop/app/hardware/driver/LeisaiServoDriver.java +++ b/src/main/java/iflytop/app/hardware/driver/LeisaiServoDriver.java @@ -1,9 +1,11 @@ package iflytop.app.hardware.driver; +import com.fasterxml.jackson.databind.node.ObjectNode; import iflytop.app.hardware.channel.A8kCanBusConnection; import iflytop.app.hardware.channel.A8kCanBusService; import iflytop.app.hardware.type.*; import iflytop.app.type.exception.HardwareException; +import iflytop.app.utils.ZJsonHelper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -56,4 +58,26 @@ public class LeisaiServoDriver { log.info("moveToZero called with id: {}", id); canBus.callcmd(id.mid, CmdId.leisai_servo_move_to_zero); } + + public void setReg(LeisaiServoMId id, LeisaiRegIndex regindex, int val) throws HardwareException { + log.info("setReg called with id: {}, regindex: {}, val: {}", id, regindex, val); + canBus.moduleSetReg(id.mid, regindex.regIndex, val); + } + + + public Integer getReg(LeisaiServoMId id, LeisaiRegIndex regindex) throws HardwareException { + log.info("getReg called with id: {}, regindex: {}", id, regindex); + return canBus.moduleGetReg(id.mid, regindex.regIndex); + } + + public Object getAllReg(LeisaiServoMId id) throws HardwareException { + log.info("getAllReg called with id: {}", id); + ObjectNode node = ZJsonHelper.createObjectNode(); + for (LeisaiRegIndex regIndex : LeisaiRegIndex.values()) { + Integer regVal = getReg(id, regIndex); + log.info("read reg {} -> {}", regIndex, regVal); + node.put(regIndex.name(), getReg(id, regIndex)); + } + return node; + } } diff --git a/src/main/java/iflytop/app/hardware/type/LeisaiRegIndex.java b/src/main/java/iflytop/app/hardware/type/LeisaiRegIndex.java index 836895c..35467f1 100644 --- a/src/main/java/iflytop/app/hardware/type/LeisaiRegIndex.java +++ b/src/main/java/iflytop/app/hardware/type/LeisaiRegIndex.java @@ -1,7 +1,12 @@ package iflytop.app.hardware.type; public enum LeisaiRegIndex { - kreg_mini_servo_firmware_main_version(RegIndex.kreg_mini_servo_firmware_main_version), + kreg_leisai_servo_is_enable(RegIndex.kreg_leisai_servo_is_enable), + kreg_leisai_servo_has_move_zero(RegIndex.kreg_leisai_servo_has_move_zero), + kreg_leisai_servo_default_velocity(RegIndex.kreg_leisai_servo_default_velocity), + kreg_leisai_servo_low_velocity(RegIndex.kreg_leisai_servo_low_velocity), + kreg_leisai_servo_mid_velocity(RegIndex.kreg_leisai_servo_mid_velocity), + kreg_leisai_servo_high_velocity(RegIndex.kreg_leisai_servo_high_velocity), ; public final RegIndex regIndex; diff --git a/src/main/java/iflytop/app/hardware/type/RegIndex.java b/src/main/java/iflytop/app/hardware/type/RegIndex.java index c8d9c30..3ac5ad5 100644 --- a/src/main/java/iflytop/app/hardware/type/RegIndex.java +++ b/src/main/java/iflytop/app/hardware/type/RegIndex.java @@ -110,6 +110,16 @@ public enum RegIndex { kreg_mini_servo_servo_current_current(10569), // 当前电流 反馈当前工作电流值,单位为6.26.5mA,最大可反馈电流为500*6.5mA=3250mA /*********************************************************************************************************************** + * leisai_servo * + ***********************************************************************************************************************/ + kreg_leisai_servo_is_enable(10702), // 是否使能 + kreg_leisai_servo_has_move_zero(10703), // 是否回零 + kreg_leisai_servo_default_velocity(10704), // 默认速度 + kreg_leisai_servo_low_velocity(10705), // 低速 + kreg_leisai_servo_mid_velocity(10706), // 中速 + kreg_leisai_servo_high_velocity(10707), // 高速 + + /*********************************************************************************************************************** * liquid_distribution_arm * ***********************************************************************************************************************/ @@ -172,3 +182,4 @@ public enum RegIndex { return null; } } + diff --git a/src/main/java/iflytop/app/page/LeisaiServoPage.java b/src/main/java/iflytop/app/page/LeisaiServoPage.java index 884af15..1a1612e 100644 --- a/src/main/java/iflytop/app/page/LeisaiServoPage.java +++ b/src/main/java/iflytop/app/page/LeisaiServoPage.java @@ -1,8 +1,11 @@ package iflytop.app.page; +import com.fasterxml.jackson.databind.JsonNode; import iflytop.app.hardware.driver.LeisaiServoDriver; +import iflytop.app.hardware.type.LeisaiRegIndex; import iflytop.app.hardware.type.LeisaiServoMId; import iflytop.app.hardware.type.LeisaiServoSpeedLevel; +import iflytop.app.hardware.type.MiniServoRegIndex; import iflytop.app.type.exception.HardwareException; import iflytop.app.utils.ZJsonNode; import iflytop.extui.mgr.ExtApiPageMgr; @@ -93,6 +96,22 @@ public class LeisaiServoPage { return node.get(); } + public void setReg(LeisaiRegIndex reg, Integer val) throws HardwareException { + driver.setReg(id, reg, val); + } + + public JsonNode getAllReg() { + ZJsonNode jsonNode = new ZJsonNode(); + for (LeisaiRegIndex reg : LeisaiRegIndex.values()) { + try { + jsonNode.get(reg.name()).set(driver.getReg(id, reg)); + } catch (HardwareException e) { + jsonNode.get(reg.name()).set("error"); + } + } //enable + return jsonNode.get(); + } + @PostConstruct void init() { var page = extApiPageMgr.newPage(this); @@ -118,6 +137,10 @@ public class LeisaiServoPage { page.addFunction("顺时针旋转", this::rotateForward); page.addFunction("逆时针旋转", this::rotateBackward); + page.newGroup("寄存器"); + page.addFunction("设置寄存器", this::setReg); + page.addFunction("读取所有寄存器", this::getAllReg); + page.newGroup("状态"); page.addFunction("读取位置", this::readPosition); page.addFunction("读取IO", this::readIOState); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 2e95725..700e558 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -4,7 +4,7 @@ server: device.enableCanBus: true iflytophald: - ip: 192.168.1.140 + ip: 192.168.8.168 cmdch.port: 19004 datach.port: 19005