Bläddra i källkod

Merge pull request #11947 from german77/battery

core: hid: Fix wrong battery values
liamwhite 2 år sedan
förälder
incheckning
3032980478

+ 7 - 7
src/core/hid/emulated_controller.cpp

@@ -1091,30 +1091,30 @@ void EmulatedController::SetBattery(const Common::Input::CallbackStatus& callbac
 
 
     bool is_charging = false;
     bool is_charging = false;
     bool is_powered = false;
     bool is_powered = false;
-    NpadBatteryLevel battery_level = 0;
+    NpadBatteryLevel battery_level = NpadBatteryLevel::Empty;
     switch (controller.battery_values[index]) {
     switch (controller.battery_values[index]) {
     case Common::Input::BatteryLevel::Charging:
     case Common::Input::BatteryLevel::Charging:
         is_charging = true;
         is_charging = true;
         is_powered = true;
         is_powered = true;
-        battery_level = 6;
+        battery_level = NpadBatteryLevel::Full;
         break;
         break;
     case Common::Input::BatteryLevel::Medium:
     case Common::Input::BatteryLevel::Medium:
-        battery_level = 6;
+        battery_level = NpadBatteryLevel::High;
         break;
         break;
     case Common::Input::BatteryLevel::Low:
     case Common::Input::BatteryLevel::Low:
-        battery_level = 4;
+        battery_level = NpadBatteryLevel::Low;
         break;
         break;
     case Common::Input::BatteryLevel::Critical:
     case Common::Input::BatteryLevel::Critical:
-        battery_level = 2;
+        battery_level = NpadBatteryLevel::Critical;
         break;
         break;
     case Common::Input::BatteryLevel::Empty:
     case Common::Input::BatteryLevel::Empty:
-        battery_level = 0;
+        battery_level = NpadBatteryLevel::Empty;
         break;
         break;
     case Common::Input::BatteryLevel::None:
     case Common::Input::BatteryLevel::None:
     case Common::Input::BatteryLevel::Full:
     case Common::Input::BatteryLevel::Full:
     default:
     default:
         is_powered = true;
         is_powered = true;
-        battery_level = 8;
+        battery_level = NpadBatteryLevel::Full;
         break;
         break;
     }
     }
 
 

+ 10 - 5
src/core/hid/hid_types.h

@@ -302,6 +302,15 @@ enum class TouchScreenModeForNx : u8 {
     Heat2,
     Heat2,
 };
 };
 
 
+// This is nn::hid::system::NpadBatteryLevel
+enum class NpadBatteryLevel : u32 {
+    Empty,
+    Critical,
+    Low,
+    High,
+    Full,
+};
+
 // This is nn::hid::NpadStyleTag
 // This is nn::hid::NpadStyleTag
 struct NpadStyleTag {
 struct NpadStyleTag {
     union {
     union {
@@ -385,16 +394,12 @@ struct NpadGcTriggerState {
 };
 };
 static_assert(sizeof(NpadGcTriggerState) == 0x10, "NpadGcTriggerState is an invalid size");
 static_assert(sizeof(NpadGcTriggerState) == 0x10, "NpadGcTriggerState is an invalid size");
 
 
-// This is nn::hid::system::NpadBatteryLevel
-using NpadBatteryLevel = u32;
-static_assert(sizeof(NpadBatteryLevel) == 0x4, "NpadBatteryLevel is an invalid size");
-
 // This is nn::hid::system::NpadPowerInfo
 // This is nn::hid::system::NpadPowerInfo
 struct NpadPowerInfo {
 struct NpadPowerInfo {
     bool is_powered{};
     bool is_powered{};
     bool is_charging{};
     bool is_charging{};
     INSERT_PADDING_BYTES(0x6);
     INSERT_PADDING_BYTES(0x6);
-    NpadBatteryLevel battery_level{8};
+    NpadBatteryLevel battery_level{NpadBatteryLevel::Full};
 };
 };
 static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size");
 static_assert(sizeof(NpadPowerInfo) == 0xC, "NpadPowerInfo is an invalid size");
 
 

+ 3 - 3
src/core/hle/service/hid/controllers/npad.cpp

@@ -1108,9 +1108,9 @@ Result Controller_NPad::DisconnectNpad(Core::HID::NpadIdType npad_id) {
     shared_memory->sixaxis_dual_right_properties.raw = 0;
     shared_memory->sixaxis_dual_right_properties.raw = 0;
     shared_memory->sixaxis_left_properties.raw = 0;
     shared_memory->sixaxis_left_properties.raw = 0;
     shared_memory->sixaxis_right_properties.raw = 0;
     shared_memory->sixaxis_right_properties.raw = 0;
-    shared_memory->battery_level_dual = 0;
-    shared_memory->battery_level_left = 0;
-    shared_memory->battery_level_right = 0;
+    shared_memory->battery_level_dual = Core::HID::NpadBatteryLevel::Empty;
+    shared_memory->battery_level_left = Core::HID::NpadBatteryLevel::Empty;
+    shared_memory->battery_level_right = Core::HID::NpadBatteryLevel::Empty;
     shared_memory->fullkey_color = {
     shared_memory->fullkey_color = {
         .attribute = ColorAttribute::NoController,
         .attribute = ColorAttribute::NoController,
         .fullkey = {},
         .fullkey = {},