@@ -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