Browse Source

1. 增加蓝牙名字获取

2. 增加板卡版本号获取
master
HSZ_HeSongZhen 2 days ago
parent
commit
543b1e673f
  1. 1
      src/main/java/com/iflytop/handacid/common/enums/Device.java
  2. 5
      src/main/java/com/iflytop/handacid/common/enums/HardwareType.java
  3. 2
      src/main/java/com/iflytop/handacid/hardware/command/handlers/BleGamepadHandler.java
  4. 77
      src/main/java/com/iflytop/handacid/hardware/command/handlers/HardwareBoardHandler.java
  5. 14
      src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java
  6. 1
      src/main/java/com/iflytop/handacid/hardware/type/CmdId.java

1
src/main/java/com/iflytop/handacid/common/enums/Device.java

@ -12,6 +12,7 @@ public enum Device {
VALVE_3(HardwareType.IO_DEVICE, "阀 3"),
VALVE_4(HardwareType.IO_DEVICE, "阀 4"),
BLE_GAMEPAD(HardwareType.IO_DEVICE, "蓝牙手柄"),
HARDWARE_BOARD(HardwareType.HARDWARE_BOARD, "硬件主板"),
;
/**

5
src/main/java/com/iflytop/handacid/common/enums/HardwareType.java

@ -17,6 +17,11 @@ public enum HardwareType {
* IO 控制阀门风扇加热器等
*/
IO_DEVICE,
/**
* 硬件板卡 获取板卡信息
*/
HARDWARE_BOARD,
/**
* 相机
*/

2
src/main/java/com/iflytop/handacid/hardware/command/handlers/BleGamepadHandler.java

@ -57,9 +57,11 @@ public class BleGamepadHandler extends CommandHandler {
if (command.getAction() == Action.GET) {
Double power = driver_.get_power_state(bleGamepadMid);
Boolean is_connected = driver_.is_connected(bleGamepadMid);
String name = driver_.get_ble_name(bleGamepadMid);
result = new HashMap<String, Object>() {{
put("power", power);
put("is_connected", is_connected);
put("name", name);
}};
}
return result;

77
src/main/java/com/iflytop/handacid/hardware/command/handlers/HardwareBoardHandler.java

@ -0,0 +1,77 @@
package com.iflytop.handacid.hardware.command.handlers;
import com.iflytop.handacid.app.core.command.DeviceCommand;
import com.iflytop.handacid.common.enums.Action;
import com.iflytop.handacid.common.enums.Device;
import com.iflytop.handacid.hardware.comm.can.A8kCanBusService;
import com.iflytop.handacid.hardware.command.CommandHandler;
import com.iflytop.handacid.hardware.drivers.BleGamepadDriver;
import com.iflytop.handacid.hardware.exception.HardwareException;
import com.iflytop.handacid.hardware.type.BleGamepadMid;
import com.iflytop.handacid.hardware.type.MId;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
//
@Slf4j
@Component
@RequiredArgsConstructor
public class HardwareBoardHandler extends CommandHandler {
private final A8kCanBusService canBus;
private final Map<Device, MId> supportCmdDeviceMIdMap = Map.ofEntries(
Map.entry(Device.HARDWARE_BOARD, MId.IO1Board)
);
private final Set<Action> supportActions = Set.of(Action.GET);
@Override
protected Map<Device, MId> getSupportCmdDeviceMIdMap()
{
return supportCmdDeviceMIdMap;
}
@Override
protected Set<Action> getSupportActions() {
return supportActions;
}
@Override
public Object handleCommand(DeviceCommand command) throws Exception {
// 发送命令
Object result = null;
Device device = command.getDevice();
if (!getSupportCmdDeviceMIdMap().containsKey(device)) {
throw new IllegalArgumentException("Device " + device + " not supported by BleGamepadHandler");
}
if (command.getAction() == Action.GET)
{
String io_board_version = get_version(MId.IO1Board);
String acid_board_version = get_version(MId.HandAcidBoard);
result = new HashMap<String, Object>()
{{
put("io_board", io_board_version);
put("acid_board", acid_board_version);
}};
}
return result;
}
public String get_version(MId id) throws HardwareException {
Integer verNum = canBus.moduleReadVersion(id);
// 版本号格式为主版本号.次版本号.修订号 eg.1.0.0
String version = String.format("%d.%d.%d", (verNum / 100000) % 1000, (verNum / 100) % 1000, verNum % 100);
log.info("mid: {}, version: {}",id.getDescription(), version);
return version;
}
}

14
src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java

@ -29,4 +29,18 @@ public class BleGamepadDriver {
Double powerPercent = (double) power;
return powerPercent;
}
public String get_ble_name(BleGamepadMid id) throws HardwareException {
A8kPacket packet = canBus.callcmd(id.mid, CmdId.ble_gamepad_name);
byte[] content = packet.getCmdContent();
// content to String
String name = new String(content).trim();
if (name.isEmpty()) {
name = "Unknown Gamepad";
} else if (name.length() > 20) {
name = name.substring(0, 20); // 截断到20个字符
}
log.info("ble name: {}", name);
return name;
}
}

1
src/main/java/com/iflytop/handacid/hardware/type/CmdId.java

@ -124,6 +124,7 @@ public enum CmdId {
event_ble_gamepad_disconnected(0x5904, "EVENT_BLE_GAMEPAD_DISCONNECTED"),
ble_gamepad_is_connected(0x5905, "BLE_GAMEPAD_IS_CONNECTED"),
ble_gamepad_power_info(0x5906, "BLE_GAMEPAD_POWER_INFO"),
ble_gamepad_name(0x5907, "BLE_GAMEPAD_NAME"),
;
public final static int ATTACH_IS_BYTES = 1;

Loading…
Cancel
Save