Skip to content

Commit

Permalink
Fixes #25 - applied recent fixes of DualShock 4 power status reportin…
Browse files Browse the repository at this point in the history
…g in Linux driver
  • Loading branch information
bwRavencl committed May 17, 2022
1 parent fcf315b commit d7c87a1
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 24 deletions.
4 changes: 2 additions & 2 deletions src/main/java/de/bwravencl/controllerbuddy/gui/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

Expand Down Expand Up @@ -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;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ void handleBattery(final byte[] reportData) {
}
};
setCharging(charging);
setBatteryState(batteryCapacity);
setBatteryCapacity(batteryCapacity);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -325,8 +325,8 @@ public void deInit(final boolean disconnected) {
}
}

public int getBatteryState() {
return batteryState;
public int getBatteryCapacity() {
return batteryCapacity;
}

abstract int getButtonsOffset();
Expand Down Expand Up @@ -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();

Expand All @@ -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);
});
}
}
Expand All @@ -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();
Expand Down

0 comments on commit d7c87a1

Please sign in to comment.