Browse Source

增加蓝牙电量获取schedule

蓝牙手柄点击事件的获取和处理
master
王梦远 4 days ago
parent
commit
b8bcc25d4d
  1. 4
      src/main/java/com/iflytop/handacid/app/command/control/SolutionAddStopCommand.java
  2. 1
      src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java
  3. 39
      src/main/java/com/iflytop/handacid/app/scheduled/BleGamepadStateScheduledTask.java
  4. 1
      src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java
  5. 3
      src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java
  6. 19
      src/main/java/com/iflytop/handacid/hardware/comm/can/A8kCanBusConnection.java
  7. 7
      src/main/java/com/iflytop/handacid/hardware/drivers/BleGamepadDriver.java
  8. 1
      src/main/java/com/iflytop/handacid/hardware/service/AppEventBusService.java

4
src/main/java/com/iflytop/handacid/app/command/control/SolutionAddStopCommand.java

@ -32,9 +32,7 @@ public class SolutionAddStopCommand extends BaseCommandHandler {
@Override
public CompletableFuture<Void> handle(CommandDTO commandDTO) {
return runAsync(() -> {
channelCtrlService.solutionAddStop();
});
return runAsync(channelCtrlService::solutionAddStop);
}
}

1
src/main/java/com/iflytop/handacid/app/core/listener/BleGamepadEventListener.java

@ -14,6 +14,7 @@ import org.springframework.stereotype.Component;
/**
* 蓝牙手柄按钮事件监听
*
*/
@Component

39
src/main/java/com/iflytop/handacid/app/scheduled/BleGamepadStateScheduledTask.java

@ -0,0 +1,39 @@
package com.iflytop.handacid.app.scheduled;
import com.iflytop.handacid.app.core.state.DeviceState;
import com.iflytop.handacid.hardware.drivers.BleGamepadDriver;
import com.iflytop.handacid.hardware.type.BleGamepadMid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
* 定时采集蓝牙的连接状态和电量
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class BleGamepadStateScheduledTask {
private final BleGamepadDriver bleGamepadDriver;
private final DeviceState deviceState;
@Scheduled(fixedRate = 30 * 1000)
public void fetchTrayState() {
try {
if (!deviceState.isVirtual()) {
boolean is_connect = bleGamepadDriver.is_connected(BleGamepadMid.BleGamePad);
deviceState.getRemoteControlState().setConnected(is_connect);
if (is_connect) {
Integer[] power_state = bleGamepadDriver.get_power_state(BleGamepadMid.BleGamePad);
deviceState.getRemoteControlState().setBatteryLevel(power_state[0]);
deviceState.getRemoteControlState().setCharging(power_state[1] != 0);
}
}
} catch (Exception e) {
log.error("定时采集蓝牙的连接状态和电量错误", e);
}
}
}

1
src/main/java/com/iflytop/handacid/app/service/ChannelCtrlService.java

@ -1,6 +1,5 @@
package com.iflytop.handacid.app.service;
import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.iflytop.handacid.app.common.enums.ChannelCode;
import com.iflytop.handacid.app.common.enums.ChannelStateCode;

3
src/main/java/com/iflytop/handacid/app/service/DeviceInitService.java

@ -54,10 +54,9 @@ public class DeviceInitService {
new Thread(() -> {
try {
log.info("初始化开始");
initDeviceState();
initDeviceSetData();//初始化设备参数
initEnable();//使能
// initDeviceState();//初始化设备状态
initDeviceState();
log.info("初始化完毕");
} catch (Exception e) {
throw new RuntimeException(e);

19
src/main/java/com/iflytop/handacid/hardware/comm/can/A8kCanBusConnection.java

@ -9,6 +9,7 @@ import com.iflytop.handacid.hardware.type.CmdId;
import com.iflytop.handacid.hardware.type.MId;
import com.iflytop.handacid.hardware.type.ModuleStatus;
import com.iflytop.handacid.hardware.type.appevent.A8kCanBusOnConnectEvent;
import com.iflytop.handacid.hardware.type.appevent.A8kHardwareReport;
import com.iflytop.handacid.hardware.type.error.A8kEcode;
import com.iflytop.handacid.hardware.type.error.AEHardwareError;
import com.iflytop.handacid.hardware.utils.OS;
@ -122,21 +123,25 @@ public class A8kCanBusConnection extends WebSocketClient {
}
@Override public void onOpen(ServerHandshake serverHandshake) {
@Override
public void onOpen(ServerHandshake serverHandshake) {
log.info("a8k canbus connect sucess");
eventBus.pushEvent(new A8kCanBusOnConnectEvent());
}
@Override public void onMessage(String s) {
@Override
public void onMessage(String s) {
log.trace("RX-RAW: {}", s);
processCanRxMessage(s);
}
@Override public void onClose(int i, String s, boolean b) {
@Override
public void onClose(int i, String s, boolean b) {
log.warn("a8k canbus lost connection...");
}
@Override public void onError(Exception e) {
@Override
public void onError(Exception e) {
log.info("a8k can-websocket-channel on error");
}
@ -321,11 +326,11 @@ public class A8kCanBusConnection extends WebSocketClient {
if (packet.getPacketType() == A8kPacket.PACKET_TYPE_ACK || packet.getPacketType() == A8kPacket.PACKET_TYPE_ERROR_ACK) {
log.trace("RX-ACK |RAW:{}| {}", s, packet);
log.debug("RX-ACK |RAW:{}| {}", s, packet);
context.pushReceipt(packet);
} else if (packet.getPacketType() == A8kPacket.PACKET_TYPE_EVENT) {
log.trace("RX-REPORT |RAW:{}| {}", s, packet);
// eventBus.pushEvent(new A8kHardwareReport(packet));
log.debug("RX-REPORT |RAW:{}| {}", s, packet);
eventBus.pushEvent(new A8kHardwareReport(packet));
} else {
log.warn("RX-UNPROCESSABLE: |RAW:{}| {}", s, packet);
}

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

@ -21,10 +21,11 @@ public class BleGamepadDriver {
}
public void get_power_state(BleGamepadMid id, Integer power, Integer charge_state) throws HardwareException {
public Integer[] get_power_state(BleGamepadMid id) throws HardwareException {
A8kPacket packet = canBus.callcmd(id.mid, CmdId.ble_gamepad_power_info);
power = packet.getContentI32(0);
charge_state = packet.getContentI32(1);
Integer power = packet.getContentI32(0);
Integer charge_state = packet.getContentI32(1);
log.info("power: {}, charge_state: {}", power, charge_state);
return new Integer[]{power, charge_state};
}
}

1
src/main/java/com/iflytop/handacid/hardware/service/AppEventBusService.java

@ -15,7 +15,6 @@ import java.util.concurrent.LinkedBlockingQueue;
/**
* 事件总线
*
*/
@Component
public class AppEventBusService implements ApplicationListener<ContextRefreshedEvent> {

Loading…
Cancel
Save