@@ -338,23 +338,28 @@ class SwitchProGamepadInputReport : public hid::report::base<hid::report::type::
338
338
// / Set the battery level
339
339
// / @param level battery level, in the range [0, 100]
340
340
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.
346
349
battery_level = battery_level & 0x1 ;
347
350
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 ) {
351
353
// set full bit
352
354
battery_level |= 8 ;
355
+ } else if (level > 50 ) {
356
+ // set medium bits
357
+ battery_level |= 6 ;
353
358
} else if (level > 10 ) {
354
- // set medium bit
359
+ // set low bit
355
360
battery_level |= 4 ;
356
361
} else if (level > 0 ) {
357
- // set low bit
362
+ // set critical bit
358
363
battery_level |= 2 ;
359
364
}
360
365
}
0 commit comments