|
|
@@ -330,10 +330,43 @@ private:
|
|
|
BitField<13, 1, s32> handheld_lark_nes_left;
|
|
|
BitField<14, 1, s32> handheld_lark_nes_right;
|
|
|
BitField<15, 1, s32> lucia;
|
|
|
+ BitField<16, 1, s32> lagon;
|
|
|
+ BitField<17, 1, s32> lager;
|
|
|
BitField<31, 1, s32> system;
|
|
|
};
|
|
|
};
|
|
|
|
|
|
+ // This is nn::hid::detail::NfcXcdDeviceHandleStateImpl
|
|
|
+ struct NfcXcdDeviceHandleStateImpl {
|
|
|
+ u64 handle;
|
|
|
+ bool is_available;
|
|
|
+ bool is_activated;
|
|
|
+ INSERT_PADDING_BYTES(0x6); // Reserved
|
|
|
+ u64 sampling_number;
|
|
|
+ };
|
|
|
+ static_assert(sizeof(NfcXcdDeviceHandleStateImpl) == 0x18,
|
|
|
+ "NfcXcdDeviceHandleStateImpl is an invalid size");
|
|
|
+
|
|
|
+ // nn::hid::detail::NfcXcdDeviceHandleStateImplAtomicStorage
|
|
|
+ struct NfcXcdDeviceHandleStateImplAtomicStorage {
|
|
|
+ u64 sampling_number;
|
|
|
+ NfcXcdDeviceHandleStateImpl nfc_xcd_device_handle_state;
|
|
|
+ };
|
|
|
+ static_assert(sizeof(NfcXcdDeviceHandleStateImplAtomicStorage) == 0x20,
|
|
|
+ "NfcXcdDeviceHandleStateImplAtomicStorage is an invalid size");
|
|
|
+
|
|
|
+ // This is nn::hid::detail::NfcXcdDeviceHandleState
|
|
|
+ struct NfcXcdDeviceHandleState {
|
|
|
+ // TODO(german77): Make this struct a ring lifo object
|
|
|
+ INSERT_PADDING_BYTES(0x8); // Unused
|
|
|
+ s64 total_buffer_count = max_buffer_size;
|
|
|
+ s64 buffer_tail{};
|
|
|
+ s64 buffer_count{};
|
|
|
+ std::array<NfcXcdDeviceHandleStateImplAtomicStorage, 2> nfc_xcd_device_handle_storage;
|
|
|
+ };
|
|
|
+ static_assert(sizeof(NfcXcdDeviceHandleState) == 0x60,
|
|
|
+ "NfcXcdDeviceHandleState is an invalid size");
|
|
|
+
|
|
|
// This is nn::hid::system::AppletFooterUiAttributesSet
|
|
|
struct AppletFooterUiAttributes {
|
|
|
INSERT_PADDING_BYTES(0x4);
|
|
|
@@ -365,6 +398,14 @@ private:
|
|
|
Lagon = 21,
|
|
|
};
|
|
|
|
|
|
+ struct AppletFooterUi {
|
|
|
+ AppletFooterUiAttributes attributes;
|
|
|
+ AppletFooterUiType type;
|
|
|
+ INSERT_PADDING_BYTES(0x5B); // Reserved
|
|
|
+ };
|
|
|
+ static_assert(sizeof(AppletFooterUi) == 0x60,
|
|
|
+ "AppletFooterUi is an invalid size");
|
|
|
+
|
|
|
// This is nn::hid::NpadLarkType
|
|
|
enum class NpadLarkType : u32 {
|
|
|
Invalid,
|
|
|
@@ -382,6 +423,11 @@ private:
|
|
|
U,
|
|
|
};
|
|
|
|
|
|
+ // This is nn::hid::NpadLagonType
|
|
|
+ enum class NpadLagonType : u32 {
|
|
|
+ Invalid,
|
|
|
+ };
|
|
|
+
|
|
|
// This is nn::hid::NpadLagerType
|
|
|
enum class NpadLagerType : u32 {
|
|
|
Invalid,
|
|
|
@@ -416,17 +462,19 @@ private:
|
|
|
Core::HID::BatteryLevel battery_level_dual;
|
|
|
Core::HID::BatteryLevel battery_level_left;
|
|
|
Core::HID::BatteryLevel battery_level_right;
|
|
|
- AppletFooterUiAttributes footer_attributes;
|
|
|
- AppletFooterUiType footer_type;
|
|
|
- // GetXcdHandleForNpadWithNfc needs to be checked switchbrew doesn't match with HW
|
|
|
- INSERT_PADDING_BYTES(0x78); // Unknown
|
|
|
+ union {
|
|
|
+ NfcXcdDeviceHandleState nfc_xcd_device_handle;
|
|
|
+ AppletFooterUi applet_footer;
|
|
|
+ };
|
|
|
+ INSERT_PADDING_BYTES(0x20); // Unknown
|
|
|
Lifo<NpadGcTriggerState> gc_trigger_lifo;
|
|
|
- NpadLarkType lark_type_l;
|
|
|
+ NpadLarkType lark_type_l_and_main;
|
|
|
NpadLarkType lark_type_r;
|
|
|
NpadLuciaType lucia_type;
|
|
|
+ NpadLagonType lagon_type;
|
|
|
NpadLagerType lager_type;
|
|
|
INSERT_PADDING_BYTES(
|
|
|
- 0x8); // FW 13.x Investigate there is some sort of bitflag related to joycons
|
|
|
+ 0x4); // FW 13.x Investigate there is some sort of bitflag related to joycons
|
|
|
INSERT_PADDING_BYTES(0xc08); // Unknown
|
|
|
};
|
|
|
static_assert(sizeof(NpadInternalState) == 0x5000, "NpadInternalState is an invalid size");
|