diff --git a/nx/include/switch/services/hid.h b/nx/include/switch/services/hid.h index 5b95ad83..7bb847bf 100644 --- a/nx/include/switch/services/hid.h +++ b/nx/include/switch/services/hid.h @@ -31,6 +31,13 @@ typedef enum { HidDebugPadButton_Down = BIT(13), ///< D-Pad Down button } HidDebugPadButton; +/// HidTouchScreenModeForNx +typedef enum { + HidTouchScreenModeForNx_UseSystemSetting = 0, ///< UseSystemSetting + HidTouchScreenModeForNx_Finger = 1, ///< Finger + HidTouchScreenModeForNx_Heat2 = 2, ///< Heat2 +} HidTouchScreenModeForNx; + /// HidMouseButton typedef enum { HidMouseButton_Left = BIT(0), @@ -232,6 +239,19 @@ typedef enum { KBD_MEDIA_CALC = 0xfb } HidKeyboardScancode; +/// KeyboardLockKeyEvent +typedef enum { + HidKeyboardLockKeyEvent_NumLockOn = BIT(0), ///< NumLockOn + HidKeyboardLockKeyEvent_NumLockOff = BIT(1), ///< NumLockOff + HidKeyboardLockKeyEvent_NumLockToggle = BIT(2), ///< NumLockToggle + HidKeyboardLockKeyEvent_CapsLockOn = BIT(3), ///< CapsLockOn + HidKeyboardLockKeyEvent_CapsLockOff = BIT(4), ///< CapsLockOff + HidKeyboardLockKeyEvent_CapsLockToggle = BIT(5), ///< CapsLockToggle + HidKeyboardLockKeyEvent_ScrollLockOn = BIT(6), ///< ScrollLockOn + HidKeyboardLockKeyEvent_ScrollLockOff = BIT(7), ///< ScrollLockOff + HidKeyboardLockKeyEvent_ScrollLockToggle = BIT(8), ///< ScrollLockToggle +} HidKeyboardLockKeyEvent; + /// HID controller IDs typedef enum { HidNpadIdType_No1 = 0, ///< Player 1 controller @@ -483,10 +503,10 @@ typedef enum { /// NpadCommunicationMode typedef enum { - HidNpadCommunicationMode_Unknown0 = 0, ///< Unknown - HidNpadCommunicationMode_Unknown1 = 1, ///< Unknown - HidNpadCommunicationMode_Unknown2 = 2, ///< Unknown - HidNpadCommunicationMode_Unknown3 = 3, ///< Unknown + HidNpadCommunicationMode_5ms = 0, ///< 5ms + HidNpadCommunicationMode_10ms = 1, ///< 10ms + HidNpadCommunicationMode_15ms = 2, ///< 15ms + HidNpadCommunicationMode_Default = 3, ///< Default } HidNpadCommunicationMode; /// DeviceType (system) @@ -744,7 +764,8 @@ typedef struct HidTouchScreenSharedMemoryFormat { /// HidTouchScreenConfigurationForNx typedef struct { - u8 config[0x10]; ///< Unknown + u8 mode; ///< \ref HidTouchScreenModeForNx + u8 reserved[0xF]; ///< Reserved } HidTouchScreenConfigurationForNx; // End HidTouchScreen @@ -1175,8 +1196,8 @@ typedef union HidSixAxisSensorHandle { u32 type_value; ///< TypeValue struct { u32 npad_style_index : 8; ///< NpadStyleIndex - u32 npad_id_type : 8; ///< PlayerNumber / NpadIdType - u32 idx : 8; ///< Idx + u32 player_number : 8; ///< PlayerNumber + u32 device_idx : 8; ///< DeviceIdx u32 pad : 8; ///< Padding }; } HidSixAxisSensorHandle; @@ -1553,7 +1574,7 @@ bool hidGetHandheldMode(void); * @brief SendKeyboardLockKeyEvent * @note Same as \ref hidsysSendKeyboardLockKeyEvent. * @note Only available on [6.0.0+]. - * @param[in] events Bitfield of KeyboardLockKeyEvent. + * @param[in] events Bitfield of \ref HidKeyboardLockKeyEvent. */ Result hidSendKeyboardLockKeyEvent(u32 events); diff --git a/nx/include/switch/services/hidsys.h b/nx/include/switch/services/hidsys.h index ae287257..f6a6ee81 100644 --- a/nx/include/switch/services/hidsys.h +++ b/nx/include/switch/services/hidsys.h @@ -191,7 +191,7 @@ Service* hidsysGetServiceSession(void); /** * @brief SendKeyboardLockKeyEvent - * @param[in] events Bitfield of KeyboardLockKeyEvent. + * @param[in] events Bitfield of \ref HidKeyboardLockKeyEvent. */ Result hidsysSendKeyboardLockKeyEvent(u32 events); diff --git a/nx/source/services/hid.c b/nx/source/services/hid.c index f7aff2d5..9527d2e2 100644 --- a/nx/source/services/hid.c +++ b/nx/source/services/hid.c @@ -668,7 +668,7 @@ size_t hidGetNpadStatesSystem(HidNpadIdType id, HidNpadSystemState *states, size size_t hidGetSixAxisSensorStates(HidSixAxisSensorHandle handle, HidSixAxisSensorState *states, size_t count) { HidNpadSixAxisSensorLifo *lifo = NULL; - HidNpadInternalState *npad = _hidGetNpadInternalState(handle.npad_id_type); + HidNpadInternalState *npad = _hidGetNpadInternalState(handle.player_number); switch(_hidGetSixAxisSensorHandleNpadStyleIndex(handle)) { default: diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen)); @@ -683,8 +683,8 @@ size_t hidGetSixAxisSensorStates(HidSixAxisSensorHandle handle, HidSixAxisSensor break; case 2: // NpadJoyDual - if (handle.idx==0) lifo = &npad->joy_dual_left_six_axis_sensor_lifo; - else if (handle.idx==1) lifo = &npad->joy_dual_right_six_axis_sensor_lifo; + if (handle.device_idx==0) lifo = &npad->joy_dual_left_six_axis_sensor_lifo; + else if (handle.device_idx==1) lifo = &npad->joy_dual_right_six_axis_sensor_lifo; else diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_ShouldNotHappen)); break; @@ -1648,12 +1648,12 @@ Result hidIsVibrationDeviceMounted(HidVibrationDeviceHandle handle, bool *flag) return rc; } -static HidVibrationDeviceHandle _hidMakeVibrationDeviceHandle(u8 npad_style_index, u8 npad_id_type, u8 device_idx) { - return (HidVibrationDeviceHandle){.npad_style_index = npad_style_index, .player_number = npad_id_type, .device_idx = device_idx, .pad = 0}; +static HidVibrationDeviceHandle _hidMakeVibrationDeviceHandle(u8 npad_style_index, u8 player_number, u8 device_idx) { + return (HidVibrationDeviceHandle){.npad_style_index = npad_style_index, .player_number = player_number, .device_idx = device_idx, .pad = 0}; } -static HidSixAxisSensorHandle _hidMakeSixAxisSensorHandle(u8 npad_style_index, u8 npad_id_type, u8 idx) { - return (HidSixAxisSensorHandle){.npad_style_index = npad_style_index, .npad_id_type = npad_id_type, .idx = idx, .pad = 0}; +static HidSixAxisSensorHandle _hidMakeSixAxisSensorHandle(u8 npad_style_index, u8 player_number, u8 device_idx) { + return (HidSixAxisSensorHandle){.npad_style_index = npad_style_index, .player_number = player_number, .device_idx = device_idx, .pad = 0}; } static u8 _hidGetSixAxisSensorHandleNpadStyleIndex(HidSixAxisSensorHandle handle) { @@ -1664,7 +1664,7 @@ static Result _hidGetVibrationDeviceHandles(HidVibrationDeviceHandle *handles, s Result rc=0; s32 max_handles=1; u32 style_index=0; - u8 idx=0; + u8 device_idx=0; if (total_handles <= 0 || total_handles > 2) return MAKERESULT(Module_Libnx, LibnxError_BadInput); @@ -1686,7 +1686,7 @@ static Result _hidGetVibrationDeviceHandles(HidVibrationDeviceHandle *handles, s } else if (style & HidNpadStyleTag_NpadJoyRight) { style_index = 7; - idx = 0x1; + device_idx = 0x1; } else if (style & HidNpadStyleTag_NpadGc) { style_index = 8; @@ -1716,7 +1716,7 @@ static Result _hidGetVibrationDeviceHandles(HidVibrationDeviceHandle *handles, s return MAKERESULT(Module_Libnx, LibnxError_BadInput); } - handles[0] = _hidMakeVibrationDeviceHandle(style_index, id, idx); + handles[0] = _hidMakeVibrationDeviceHandle(style_index, id, device_idx); if (total_handles > 1) { if (max_handles > 1) { @@ -1734,18 +1734,18 @@ static Result _hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 t Result rc=0; s32 max_handles=1; u32 style_index=0; - u8 idx=0; + u8 device_idx=0; if (total_handles <= 0 || total_handles > 2) return MAKERESULT(Module_Libnx, LibnxError_BadInput); if (style & HidNpadStyleTag_NpadFullKey) { style_index = 3; - idx = 0x2; + device_idx = 0x2; } else if (style & HidNpadStyleTag_NpadHandheld) { style_index = 4; - idx = 0x2; + device_idx = 0x2; } else if (style & HidNpadStyleTag_NpadJoyDual) { style_index = 5; @@ -1756,11 +1756,11 @@ static Result _hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 t } else if (style & HidNpadStyleTag_NpadJoyRight) { style_index = 7; - idx = 0x1; + device_idx = 0x1; } else if (style & HidNpadStyleTag_NpadGc) { style_index = 3; - idx = 0x2; + device_idx = 0x2; } else if (style & HidNpadStyleTag_Npad10) { return MAKERESULT(Module_Libnx, LibnxError_BadInput); // sdknso would return 0, and return no handles. @@ -1770,7 +1770,7 @@ static Result _hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 t } else if (style & HidNpadStyleTag_NpadHandheldLark) { style_index = 4; - idx = 0x2; + device_idx = 0x2; } else if (style & HidNpadStyleTag_NpadSystem) { return MAKERESULT(Module_Libnx, LibnxError_BadInput); // sdknso would return 0, and return no handles. @@ -1780,13 +1780,13 @@ static Result _hidGetSixAxisSensorHandles(HidSixAxisSensorHandle *handles, s32 t } else if (style & HidNpadStyleTag_NpadPalma) { style_index = 3; - idx = 0x2; + device_idx = 0x2; } else { return MAKERESULT(Module_Libnx, LibnxError_BadInput); // sdknso would return 0, and return no handles. } - handles[0] = _hidMakeSixAxisSensorHandle(style_index, id, idx); + handles[0] = _hidMakeSixAxisSensorHandle(style_index, id, device_idx); if (total_handles > 1) { if (max_handles > 1) {