diff --git a/src/main/java/de/bwravencl/controllerbuddy/gui/Main.java b/src/main/java/de/bwravencl/controllerbuddy/gui/Main.java index 6f993ce3..ca6e4d85 100644 --- a/src/main/java/de/bwravencl/controllerbuddy/gui/Main.java +++ b/src/main/java/de/bwravencl/controllerbuddy/gui/Main.java @@ -1887,7 +1887,7 @@ public void displayChargingStateInfo(final boolean charging) { trayIcon.displayMessage(strings.getString("CHARGING_STATE_CAPTION"), MessageFormat.format( strings.getString(charging ? "CHARGING_STATE_CHARGING" : "CHARGING_STATE_DISCHARGING"), - input.getSonyExtension().getBatteryState() / 100f), + input.getSonyExtension().getBatteryCapacity() / 100f), MessageType.INFO); } @@ -3407,7 +3407,7 @@ public void updateTitleAndTooltip() { if (sonyExtension != null) toolTip = MessageFormat.format(strings.getString( sonyExtension.isCharging() ? "BATTERY_TOOLTIP_CHARGING" : "BATTERY_TOOLTIP_DISCHARGING"), title, - sonyExtension.getBatteryState() / 100f); + sonyExtension.getBatteryCapacity() / 100f); else toolTip = title; diff --git a/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualSenseExtension.java b/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualSenseExtension.java index f7fc732c..353aac1c 100644 --- a/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualSenseExtension.java +++ b/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualSenseExtension.java @@ -88,7 +88,7 @@ void handleBattery(final byte[] reportData) { } }; setCharging(charging); - setBatteryState(batteryCapacity); + setBatteryCapacity(batteryCapacity); } @Override diff --git a/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualShock4Extension.java b/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualShock4Extension.java index e38b1b1a..50c8cc07 100644 --- a/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualShock4Extension.java +++ b/src/main/java/de/bwravencl/controllerbuddy/input/sony/DualShock4Extension.java @@ -80,17 +80,36 @@ private DualShock4Extension(final Input input, final int jid, final HidDeviceInf void handleBattery(final byte[] reportData) { final var cableConnected = (reportData[30 + DualShock4Extension.this.connection.offset()] >> 4 & 0x1) != 0; - var battery = reportData[30 + DualShock4Extension.this.connection.offset()] & 0xF; - setCharging(cableConnected); - - if (!cableConnected) - battery++; - - battery = Math.min(battery, 10); - battery *= 10; - - setBatteryState(battery); + final var batteryData = reportData[30 + DualShock4Extension.this.connection.offset()] & 0xF; + final int batteryCapacity; + final boolean charging; + if (cableConnected) { + if (batteryData < 10) { + batteryCapacity = batteryData * 10 + 5; + charging = true; + } else if (batteryData == 10) { + batteryCapacity = 100; + charging = true; + } else { + if (batteryData == 11) + batteryCapacity = 100; + else + batteryCapacity = 0; + + charging = false; + } + } else { + if (batteryData < 10) + batteryCapacity = batteryData * 10 + 5; + else + batteryCapacity = 100; + + charging = false; + } + + setCharging(charging); + setBatteryCapacity(batteryCapacity); } @Override diff --git a/src/main/java/de/bwravencl/controllerbuddy/input/sony/SonyExtension.java b/src/main/java/de/bwravencl/controllerbuddy/input/sony/SonyExtension.java index a61a40cb..5804b1a1 100644 --- a/src/main/java/de/bwravencl/controllerbuddy/input/sony/SonyExtension.java +++ b/src/main/java/de/bwravencl/controllerbuddy/input/sony/SonyExtension.java @@ -280,7 +280,7 @@ private static float mapRawAxisToFloat(final byte value) { byte[] hidReport; Connection connection; volatile boolean charging = true; - volatile int batteryState; + volatile int batteryCapacity; volatile byte lx = Byte.MAX_VALUE; volatile byte ly = Byte.MAX_VALUE; volatile byte rx = Byte.MAX_VALUE; @@ -325,8 +325,8 @@ public void deInit(final boolean disconnected) { } } - public int getBatteryState() { - return batteryState; + public int getBatteryCapacity() { + return batteryCapacity; } abstract int getButtonsOffset(); @@ -488,9 +488,9 @@ void sendHidReport() { } } - void setBatteryState(final int batteryState) { - if (this.batteryState != batteryState) { - this.batteryState = batteryState; + void setBatteryCapacity(final int batteryCapacity) { + if (this.batteryCapacity != batteryCapacity) { + this.batteryCapacity = batteryCapacity; updateLightbarColor(); @@ -499,8 +499,8 @@ void setBatteryState(final int batteryState) { EventQueue.invokeLater(() -> { main.updateTitleAndTooltip(); - if (batteryState == LOW_BATTERY_WARNING) - main.displayLowBatteryWarning(batteryState / 100f); + if (batteryCapacity == LOW_BATTERY_WARNING) + main.displayLowBatteryWarning(batteryCapacity / 100f); }); } } @@ -527,15 +527,15 @@ void updateLightbarColor() { final var lightbarOffset = getLightbarOffset(); if (charging) { - hidReport[lightbarOffset + connection.offset] = (byte) (batteryState >= 100 ? 0x0 : 0x1C); + hidReport[lightbarOffset + connection.offset] = (byte) (batteryCapacity >= 100 ? 0x0 : 0x1C); hidReport[lightbarOffset + 1 + connection.offset] = (byte) 0x1C; hidReport[lightbarOffset + 2 + connection.offset] = 0x0; } else { hidReport[lightbarOffset - + connection.offset] = (byte) (batteryState <= LOW_BATTERY_WARNING ? 0x1C : 0x0); + + connection.offset] = (byte) (batteryCapacity <= LOW_BATTERY_WARNING ? 0x1C : 0x0); hidReport[lightbarOffset + 1 + connection.offset] = 0; hidReport[lightbarOffset + 2 - + connection.offset] = (byte) (batteryState <= LOW_BATTERY_WARNING ? 0x0 : 0x1C); + + connection.offset] = (byte) (batteryCapacity <= LOW_BATTERY_WARNING ? 0x0 : 0x1C); } sendHidReport();