diff --git a/src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java b/src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java new file mode 100644 index 0000000..60ff803 --- /dev/null +++ b/src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java @@ -0,0 +1,30 @@ +package com.iflytop.handacid.hardware.drivers; + + +import com.iflytop.handacid.hardware.comm.can.A8kCanBusService; +import com.iflytop.handacid.hardware.exception.HardwareException; +import com.iflytop.handacid.hardware.type.A8kPacket; +import com.iflytop.handacid.hardware.type.BleGamepadMid; +import com.iflytop.handacid.hardware.type.CmdId; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +@Slf4j +public class BleGamepadDriver { + private final A8kCanBusService canBus; + + public Boolean is_connected(BleGamepadMid id) throws HardwareException { + return canBus.callcmd(id.mid, CmdId.ble_gamepad_is_connected).getContentI32(0) != 0; + } + + + public void get_power_state(BleGamepadMid id, Integer power, Integer charge_state) throws HardwareException { + A8kPacket packet = canBus.callcmd(id.mid, CmdId.ble_gamepad_power_info); + power = packet.getContentI32(0); + charge_state = packet.getContentI32(1); + log.info("power: {}, charge_state: {}", power, charge_state); + } +} \ No newline at end of file diff --git a/src/main/java/com/iflytop/handacid/hardware/type/CmdId.java b/src/main/java/com/iflytop/handacid/hardware/type/CmdId.java index e3ae72c..e74c411 100644 --- a/src/main/java/com/iflytop/handacid/hardware/type/CmdId.java +++ b/src/main/java/com/iflytop/handacid/hardware/type/CmdId.java @@ -123,6 +123,7 @@ public enum CmdId { event_ble_gamepad_connected(0x5903, "EVENT_BLE_GAMEPAD_CONNECTED"), 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"), ; public final static int ATTACH_IS_BYTES = 1;