Skip to content

Commit 40b0c5c

Browse files
committed
fix: joypad battery values
1 parent dcb906a commit 40b0c5c

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

src/moonlight-protocol/moonlight/control.hpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ enum CONTROLLER_CAPABILITIES : uint8_t {
6868
RGB_LED = 0x80
6969
};
7070

71-
constexpr uint8_t BATTERY_PERCENTAGE_UNKNOWN = 0xFF;
72-
7371
enum CONTROLLER_BTN : unsigned int {
7472
DPAD_UP = 0x0001,
7573
DPAD_DOWN = 0x0002,
@@ -250,13 +248,15 @@ enum MOTION_TYPE : uint8_t {
250248
GYROSCOPE = 0x02
251249
};
252250

251+
constexpr uint8_t BATTERY_PERCENTAGE_UNKNOWN = 0xFF;
252+
253253
enum BATTERY_STATE : unsigned short {
254-
BATTERY_DISCHARGING = 0x0,
255-
BATTERY_CHARGHING = 0x1,
256-
BATTERY_FULL = 0x2,
257-
VOLTAGE_OR_TEMPERATURE_OUT_OF_RANGE = 0xA,
258-
TEMPERATURE_ERROR = 0xB,
259-
CHARGHING_ERROR = 0xF
254+
BATTERY_STATE_UNKNOWN = 0x0,
255+
BATTERY_NOT_PRESENT = 0x1,
256+
BATTERY_DISCHARGHING = 0x2,
257+
BATTERY_CHARGING = 0x3,
258+
BATTERY_NOT_CHARGING = 0x4,
259+
BATTERY_FULL = 0x05
260260
};
261261

262262
struct CONTROLLER_MOTION_PACKET : INPUT_PKT {

src/moonlight-server/control/input_handler.cpp

+21-4
Original file line numberDiff line numberDiff line change
@@ -516,10 +516,27 @@ void controller_battery(const CONTROLLER_BATTERY_PACKET &pkt, state::StreamSessi
516516
if (auto joypad = joypads->find(pkt.controller_number)) {
517517
selected_pad = std::move(*joypad);
518518
if (std::holds_alternative<PS5Joypad>(*selected_pad)) {
519-
// Battery values in Moonlight are in the range [0, 0xFF (255)]
520-
// Inputtino expects them as a percentage [0, 100]
521-
std::get<PS5Joypad>(*selected_pad)
522-
.set_battery(inputtino::PS5Joypad::BATTERY_STATE(pkt.battery_state), pkt.battery_percentage / 2.55);
519+
inputtino::PS5Joypad::BATTERY_STATE state;
520+
switch (pkt.battery_state) {
521+
case BATTERY_STATE_UNKNOWN:
522+
case BATTERY_NOT_PRESENT:
523+
return; // We can't set it, let's return
524+
case BATTERY_DISCHARGHING:
525+
state = inputtino::PS5Joypad::BATTERY_DISCHARGING;
526+
break;
527+
case BATTERY_CHARGING:
528+
state = inputtino::PS5Joypad::BATTERY_CHARGHING;
529+
break;
530+
case BATTERY_NOT_CHARGING:
531+
state = inputtino::PS5Joypad::CHARGHING_ERROR;
532+
break;
533+
case BATTERY_FULL:
534+
state = inputtino::PS5Joypad::BATTERY_FULL;
535+
break;
536+
}
537+
if (pkt.battery_percentage != BATTERY_PERCENTAGE_UNKNOWN) {
538+
std::get<PS5Joypad>(*selected_pad).set_battery(state, pkt.battery_percentage);
539+
}
523540
}
524541
}
525542
}

0 commit comments

Comments
 (0)