hid: Add sharedmem structs
This commit is contained in:
		| @@ -9,6 +9,318 @@ | ||||
| namespace Service { | ||||
| namespace HID { | ||||
|  | ||||
| // Begin enums and output structs | ||||
|  | ||||
| enum HIDControllerType : u32 { | ||||
|     ControllerType_ProController = 1 << 0, | ||||
|     ControllerType_Handheld = 1 << 1, | ||||
|     ControllerType_JoyconPair = 1 << 2, | ||||
|     ControllerType_JoyconLeft = 1 << 3, | ||||
|     ControllerType_JoyconRight = 1 << 4, | ||||
| }; | ||||
|  | ||||
| enum HIDControllerLayoutType : u32 { | ||||
|     Layout_ProController = 0, // Pro Controller or HID gamepad | ||||
|     Layout_Handheld = 1,      // Two Joy-Con docked to rails | ||||
|     Layout_Single = 2, // Horizontal single Joy-Con or pair of Joy-Con, adjusted for orientation | ||||
|     Layout_Left = 3,   // Only raw left Joy-Con state, no orientation adjustment | ||||
|     Layout_Right = 4,  // Only raw right Joy-Con state, no orientation adjustment | ||||
|     Layout_DefaultDigital = 5, // Same as next, but sticks have 8-direction values only | ||||
|     Layout_Default = 6, // Safe default, single Joy-Con have buttons/sticks rotated for orientation | ||||
| }; | ||||
|  | ||||
| enum HIDControllerColorDescription { | ||||
|     ColorDesc_ColorsNonexistent = 1 << 1, | ||||
| }; | ||||
|  | ||||
| enum HIDControllerConnectionState { | ||||
|     ConnectionState_Connected = 1 << 0, | ||||
|     ConnectionState_Wired = 1 << 1, | ||||
| }; | ||||
|  | ||||
| enum HIDControllerID { | ||||
|     Controller_Player1 = 0, | ||||
|     Controller_Player2 = 1, | ||||
|     Controller_Player3 = 2, | ||||
|     Controller_Player4 = 3, | ||||
|     Controller_Player5 = 4, | ||||
|     Controller_Player6 = 5, | ||||
|     Controller_Player7 = 6, | ||||
|     Controller_Player8 = 7, | ||||
|     Controller_Handheld = 8, | ||||
|     Controller_Unknown = 9, | ||||
| }; | ||||
|  | ||||
| // End enums and output structs | ||||
|  | ||||
| // Begin HIDTouchScreen | ||||
|  | ||||
| struct HIDTouchScreenHeader { | ||||
|     u64 timestampTicks; | ||||
|     u64 numEntries; | ||||
|     u64 latestEntry; | ||||
|     u64 maxEntryIndex; | ||||
|     u64 timestamp; | ||||
| }; | ||||
| static_assert(sizeof(HIDTouchScreenHeader) == 0x28, | ||||
|               "HID touch screen header structure has incorrect size"); | ||||
|  | ||||
| struct HIDTouchScreenEntryHeader { | ||||
|     u64 timestamp; | ||||
|     u64 numTouches; | ||||
| }; | ||||
| static_assert(sizeof(HIDTouchScreenEntryHeader) == 0x10, | ||||
|               "HID touch screen entry header structure has incorrect size"); | ||||
|  | ||||
| struct HIDTouchScreenEntryTouch { | ||||
|     u64 timestamp; | ||||
|     u32 padding; | ||||
|     u32 touchIndex; | ||||
|     u32 x; | ||||
|     u32 y; | ||||
|     u32 diameterX; | ||||
|     u32 diameterY; | ||||
|     u32 angle; | ||||
|     u32 padding_2; | ||||
| }; | ||||
| static_assert(sizeof(HIDTouchScreenEntryTouch) == 0x28, | ||||
|               "HID touch screen touch structure has incorrect size"); | ||||
|  | ||||
| struct HIDTouchScreenEntry { | ||||
|     HIDTouchScreenEntryHeader header; | ||||
|     std::array<HIDTouchScreenEntryTouch, 16> touches; | ||||
|     u64 unk; | ||||
| }; | ||||
| static_assert(sizeof(HIDTouchScreenEntry) == 0x298, | ||||
|               "HID touch screen entry structure has incorrect size"); | ||||
|  | ||||
| struct HIDTouchScreen { | ||||
|     HIDTouchScreenHeader header; | ||||
|     std::array<HIDTouchScreenEntry, 17> entries; | ||||
|     std::array<u8, 0x3c0> padding; | ||||
| }; | ||||
| static_assert(sizeof(HIDTouchScreen) == 0x3000, "HID touch screen structure has incorrect size"); | ||||
|  | ||||
| // End HIDTouchScreen | ||||
|  | ||||
| // Begin HIDMouse | ||||
|  | ||||
| struct HIDMouseHeader { | ||||
|     u64 timestampTicks; | ||||
|     u64 numEntries; | ||||
|     u64 latestEntry; | ||||
|     u64 maxEntryIndex; | ||||
| }; | ||||
| static_assert(sizeof(HIDMouseHeader) == 0x20, "HID mouse header structure has incorrect size"); | ||||
|  | ||||
| struct HIDMouseButtonState { | ||||
|     union { | ||||
|         u64 hex{}; | ||||
|  | ||||
|         // Buttons | ||||
|         BitField<0, 1, u64> left; | ||||
|         BitField<1, 1, u64> right; | ||||
|         BitField<2, 1, u64> middle; | ||||
|         BitField<3, 1, u64> forward; | ||||
|         BitField<4, 1, u64> back; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| struct HIDMouseEntry { | ||||
|     u64 timestamp; | ||||
|     u64 timestamp_2; | ||||
|     u32 x; | ||||
|     u32 y; | ||||
|     u32 velocityX; | ||||
|     u32 velocityY; | ||||
|     u32 scrollVelocityX; | ||||
|     u32 scrollVelocityY; | ||||
|     HIDMouseButtonState buttons; | ||||
| }; | ||||
| static_assert(sizeof(HIDMouseEntry) == 0x30, "HID mouse entry structure has incorrect size"); | ||||
|  | ||||
| struct HIDMouse { | ||||
|     HIDMouseHeader header; | ||||
|     std::array<HIDMouseEntry, 17> entries; | ||||
|     std::array<u8, 0xB0> padding; | ||||
| }; | ||||
| static_assert(sizeof(HIDMouse) == 0x400, "HID mouse structure has incorrect size"); | ||||
|  | ||||
| // End HIDMouse | ||||
|  | ||||
| // Begin HIDKeyboard | ||||
|  | ||||
| struct HIDKeyboardHeader { | ||||
|     u64 timestampTicks; | ||||
|     u64 numEntries; | ||||
|     u64 latestEntry; | ||||
|     u64 maxEntryIndex; | ||||
| }; | ||||
| static_assert(sizeof(HIDKeyboardHeader) == 0x20, | ||||
|               "HID keyboard header structure has incorrect size"); | ||||
|  | ||||
| struct HIDKeyboardModifierKeyState { | ||||
|     union { | ||||
|         u64 hex{}; | ||||
|  | ||||
|         // Buttons | ||||
|         BitField<0, 1, u64> lctrl; | ||||
|         BitField<1, 1, u64> lshift; | ||||
|         BitField<2, 1, u64> lalt; | ||||
|         BitField<3, 1, u64> lmeta; | ||||
|         BitField<4, 1, u64> rctrl; | ||||
|         BitField<5, 1, u64> rshift; | ||||
|         BitField<6, 1, u64> ralt; | ||||
|         BitField<7, 1, u64> rmeta; | ||||
|         BitField<8, 1, u64> capslock; | ||||
|         BitField<9, 1, u64> scrolllock; | ||||
|         BitField<10, 1, u64> numlock; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| struct HIDKeyboardEntry { | ||||
|     u64 timestamp; | ||||
|     u64 timestamp_2; | ||||
|     HIDKeyboardModifierKeyState modifier; | ||||
|     u32 keys[8]; | ||||
| }; | ||||
| static_assert(sizeof(HIDKeyboardEntry) == 0x38, "HID keyboard entry structure has incorrect size"); | ||||
|  | ||||
| struct HIDKeyboard { | ||||
|     HIDKeyboardHeader header; | ||||
|     std::array<HIDKeyboardEntry, 17> entries; | ||||
|     std::array<u8, 0x28> padding; | ||||
| }; | ||||
| static_assert(sizeof(HIDKeyboard) == 0x400, "HID keyboard structure has incorrect size"); | ||||
|  | ||||
| // End HIDKeyboard | ||||
|  | ||||
| // Begin HIDController | ||||
|  | ||||
| struct HIDControllerMAC { | ||||
|     u64 timestamp; | ||||
|     std::array<u8, 0x8> mac; | ||||
|     u64 unk; | ||||
|     u64 timestamp_2; | ||||
| }; | ||||
| static_assert(sizeof(HIDControllerMAC) == 0x20, "HID controller MAC structure has incorrect size"); | ||||
|  | ||||
| struct HIDControllerHeader { | ||||
|     u32 type; | ||||
|     u32 isHalf; | ||||
|     u32 singleColorsDescriptor; | ||||
|     u32 singleColorBody; | ||||
|     u32 singleColorButtons; | ||||
|     u32 splitColorsDescriptor; | ||||
|     u32 leftColorBody; | ||||
|     u32 leftColorButtons; | ||||
|     u32 rightColorBody; | ||||
|     u32 rightColorbuttons; | ||||
| }; | ||||
| static_assert(sizeof(HIDControllerHeader) == 0x28, | ||||
|               "HID controller header structure has incorrect size"); | ||||
|  | ||||
| struct HIDControllerLayoutHeader { | ||||
|     u64 timestampTicks; | ||||
|     u64 numEntries; | ||||
|     u64 latestEntry; | ||||
|     u64 maxEntryIndex; | ||||
| }; | ||||
| static_assert(sizeof(HIDControllerLayoutHeader) == 0x20, | ||||
|               "HID controller layout header structure has incorrect size"); | ||||
|  | ||||
| struct HIDControllerPadState { | ||||
|     union { | ||||
|         u64 hex{}; | ||||
|  | ||||
|         // Buttons | ||||
|         BitField<0, 1, u64> a; | ||||
|         BitField<1, 1, u64> b; | ||||
|         BitField<2, 1, u64> x; | ||||
|         BitField<3, 1, u64> y; | ||||
|         BitField<4, 1, u64> lstick; | ||||
|         BitField<5, 1, u64> rstick; | ||||
|         BitField<6, 1, u64> l; | ||||
|         BitField<7, 1, u64> r; | ||||
|         BitField<8, 1, u64> zl; | ||||
|         BitField<9, 1, u64> zr; | ||||
|         BitField<10, 1, u64> plus; | ||||
|         BitField<11, 1, u64> minus; | ||||
|  | ||||
|         // D-pad buttons | ||||
|         BitField<12, 1, u64> dleft; | ||||
|         BitField<13, 1, u64> dup; | ||||
|         BitField<14, 1, u64> dright; | ||||
|         BitField<15, 1, u64> ddown; | ||||
|  | ||||
|         // Left stick directions | ||||
|         BitField<16, 1, u64> lstick_left; | ||||
|         BitField<17, 1, u64> lstick_up; | ||||
|         BitField<18, 1, u64> lstick_right; | ||||
|         BitField<19, 1, u64> lstick_down; | ||||
|  | ||||
|         // Right stick directions | ||||
|         BitField<20, 1, u64> rstick_left; | ||||
|         BitField<21, 1, u64> rstick_up; | ||||
|         BitField<22, 1, u64> rstick_right; | ||||
|         BitField<23, 1, u64> rstick_down; | ||||
|  | ||||
|         BitField<24, 1, u64> sl; | ||||
|         BitField<25, 1, u64> sr; | ||||
|     }; | ||||
| }; | ||||
|  | ||||
| struct HIDControllerInputEntry { | ||||
|     u64 timestamp; | ||||
|     u64 timestamp_2; | ||||
|     HIDControllerPadState buttons; | ||||
|     u32 joystickLeftX; | ||||
|     u32 joystickLeftY; | ||||
|     u32 joystickRightX; | ||||
|     u32 joystickRightY; | ||||
|     u64 connectionState; | ||||
| }; | ||||
| static_assert(sizeof(HIDControllerInputEntry) == 0x30, | ||||
|               "HID controller input entry structure has incorrect size"); | ||||
|  | ||||
| struct HIDControllerLayout { | ||||
|     HIDControllerLayoutHeader header; | ||||
|     std::array<HIDControllerInputEntry, 17> entries; | ||||
| }; | ||||
| static_assert(sizeof(HIDControllerLayout) == 0x350, | ||||
|               "HID controller layout structure has incorrect size"); | ||||
|  | ||||
| struct HIDController { | ||||
|     HIDControllerHeader header; | ||||
|     std::array<HIDControllerLayout, 7> layouts; | ||||
|     std::array<u8, 0x2a70> unk_1; | ||||
|     HIDControllerMAC macLeft; | ||||
|     HIDControllerMAC macRight; | ||||
|     std::array<u8, 0xdf8> unk_2; | ||||
| }; | ||||
| static_assert(sizeof(HIDController) == 0x5000, "HID controller structure has incorrect size"); | ||||
|  | ||||
| // End HIDController | ||||
|  | ||||
| struct HIDSharedMemory { | ||||
|     std::array<u8, 0x400> header; | ||||
|     HIDTouchScreen touchscreen; | ||||
|     HIDMouse mouse; | ||||
|     HIDKeyboard keyboard; | ||||
|     std::array<u8, 0x400> unkSection1; | ||||
|     std::array<u8, 0x400> unkSection2; | ||||
|     std::array<u8, 0x400> unkSection3; | ||||
|     std::array<u8, 0x400> unkSection4; | ||||
|     std::array<u8, 0x200> unkSection5; | ||||
|     std::array<u8, 0x200> unkSection6; | ||||
|     std::array<u8, 0x200> unkSection7; | ||||
|     std::array<u8, 0x800> unkSection8; | ||||
|     std::array<u8, 0x4000> controllerSerials; | ||||
|     std::array<HIDController, 10> controllers; | ||||
|     std::array<u8, 0x4600> unkSection9; | ||||
| }; | ||||
| static_assert(sizeof(HIDSharedMemory) == 0x40000, "HID Shared Memory structure has incorrect size"); | ||||
|  | ||||
| /// Reload input devices. Used when input configuration changed | ||||
| void ReloadInputDevices(); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shinyquagsire23
					shinyquagsire23