Переглянути джерело

core/hid: Fix keyboard alignment

german77 4 роки тому
батько
коміт
7fcfe24a3e

+ 13 - 12
src/core/hid/hid_types.h

@@ -423,20 +423,21 @@ static_assert(sizeof(VibrationDeviceInfo) == 0x8, "VibrationDeviceInfo has incor
 // This is nn::hid::KeyboardModifier
 struct KeyboardModifier {
     union {
-        u32 raw{};
-        BitField<0, 1, u32> control;
-        BitField<1, 1, u32> shift;
-        BitField<2, 1, u32> left_alt;
-        BitField<3, 1, u32> right_alt;
-        BitField<4, 1, u32> gui;
-        BitField<8, 1, u32> caps_lock;
-        BitField<9, 1, u32> scroll_lock;
-        BitField<10, 1, u32> num_lock;
-        BitField<11, 1, u32> katakana;
-        BitField<12, 1, u32> hiragana;
+        u64 raw{};
+        BitField<0, 1, u64> control;
+        BitField<1, 1, u64> shift;
+        BitField<2, 1, u64> left_alt;
+        BitField<3, 1, u64> right_alt;
+        BitField<4, 1, u64> gui;
+        BitField<8, 1, u64> caps_lock;
+        BitField<9, 1, u64> scroll_lock;
+        BitField<10, 1, u64> num_lock;
+        BitField<11, 1, u64> katakana;
+        BitField<12, 1, u64> hiragana;
+        BitField<32, 1, u64> unknown;
     };
 };
-static_assert(sizeof(KeyboardModifier) == 0x4, "KeyboardModifier is an invalid size");
+static_assert(sizeof(KeyboardModifier) == 0x8, "KeyboardModifier is an invalid size");
 
 // This is nn::hid::KeyboardKey
 struct KeyboardKey {

+ 1 - 0
src/core/hle/service/hid/controllers/keyboard.cpp

@@ -42,6 +42,7 @@ void Controller_Keyboard::OnUpdate(const Core::Timing::CoreTiming& core_timing,
 
         next_state.key = keyboard_state;
         next_state.modifier = keyboard_modifier_state;
+        next_state.modifier.unknown.Assign(1);
     }
 
     keyboard_lifo.WriteNextEntry(next_state);