Skip to content

Commit eebd90d

Browse files
authored
fix battery bits in switch pro report (#386)
1 parent ae75cab commit eebd90d

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

components/hid-rp/include/hid-rp-switch-pro.hpp

+15-10
Original file line numberDiff line numberDiff line change
@@ -338,23 +338,28 @@ class SwitchProGamepadInputReport : public hid::report::base<hid::report::type::
338338
/// Set the battery level
339339
/// @param level battery level, in the range [0, 100]
340340
constexpr void set_battery_level(float level) {
341-
// battery_level = (low << 3) | (medium << 2) | (full << 1) | charging,
342-
// where only one of the low, medium, full bits can be set at a time, and
343-
// charging is the least significant bit.
344-
345-
// unset all level bits
341+
// BATT_EMPTY = 0, // 0000
342+
// BATT_CHARGING = 1, // 0001
343+
// BATT_CRITICAL = 2, // 0010
344+
// BATT_LOW = 4, // 0100
345+
// BATT_MEDIUM = 6, // 0110
346+
// BATT_FULL = 8, // 1000
347+
348+
// unset all level bits, leaving only the charging bit unchanged.
346349
battery_level = battery_level & 0x1;
347350

348-
// battery level are just bits for full, medium, low, and empty, and they
349-
// are the upper 3 bits of the nibble
350-
if (level > 50) {
351+
// now set the level bits
352+
if (level > 75) {
351353
// set full bit
352354
battery_level |= 8;
355+
} else if (level > 50) {
356+
// set medium bits
357+
battery_level |= 6;
353358
} else if (level > 10) {
354-
// set medium bit
359+
// set low bit
355360
battery_level |= 4;
356361
} else if (level > 0) {
357-
// set low bit
362+
// set critical bit
358363
battery_level |= 2;
359364
}
360365
}

0 commit comments

Comments
 (0)