From 215d62966e6a01be0f7a7e9adc6fc2174e99d4af Mon Sep 17 00:00:00 2001 From: yellows8 Date: Mon, 23 Nov 2020 21:18:13 -0500 Subject: [PATCH] hidsys: Added HidsysUniquePadId/HidsysUniquePadSerialNumber. These are now used where needed. Various adjustments. --- nx/include/switch/services/hiddbg.h | 29 +++--- nx/include/switch/services/hidsys.h | 138 +++++++++++++++------------- nx/source/services/hiddbg.c | 52 +++++------ nx/source/services/hidsys.c | 126 ++++++++++++------------- 4 files changed, 176 insertions(+), 169 deletions(-) diff --git a/nx/include/switch/services/hiddbg.h b/nx/include/switch/services/hiddbg.h index 8177c97e..11093ae4 100644 --- a/nx/include/switch/services/hiddbg.h +++ b/nx/include/switch/services/hiddbg.h @@ -6,6 +6,7 @@ #pragma once #include "../types.h" #include "../services/hid.h" +#include "../services/hidsys.h" #include "../sf/service.h" /// HdlsDeviceInfo, for [7.0.0-8.1.0]. @@ -124,36 +125,36 @@ Service* hiddbgGetServiceSession(void); /// Ignores subsequent home button presses. Result hiddbgDeactivateHomeButton(void); -/// Writes the input RGB colors to the spi-flash for the specified controller (offset 0x6050 size 0x6). See hidsys.h for UniquePadId. Only available with [3.0.0+]. -Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, u64 UniquePadId); +/// Writes the input RGB colors to the spi-flash for the specified controller (offset 0x6050 size 0x6). Only available with [3.0.0+]. +Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, HidsysUniquePadId unique_pad_id); -/// Writes the input RGB colors followed by inval to the spi-flash for the specified controller (offset 0x6050 size 0xD). See hidsys.h for UniquePadId. Only available with [5.0.0+]. -Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, u64 UniquePadId); +/// Writes the input RGB colors followed by inval to the spi-flash for the specified controller (offset 0x6050 size 0xD). Only available with [5.0.0+]. +Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, HidsysUniquePadId unique_pad_id); -/// Get the OperationEvent for the specified controller. See hidsys.h for UniquePadId. +/// Get the OperationEvent for the specified controller. /// The Event must be closed by the user once finished with it. /// Only available with [6.0.0+]. -Result hiddbgAcquireOperationEventHandle(Event* out_event, bool autoclear, u64 UniquePadId); +Result hiddbgAcquireOperationEventHandle(Event* out_event, bool autoclear, HidsysUniquePadId unique_pad_id); -/// Reads spi-flash for the specified controller. See hidsys.h for UniquePadId. +/// Reads spi-flash for the specified controller. /// This also uses \ref hiddbgAcquireOperationEventHandle to wait for the operation to finish, then \ref hiddbgGetOperationResult is used. /// Only available with [6.0.0+]. -Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, u64 UniquePadId); +Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, HidsysUniquePadId unique_pad_id); -/// Writes spi-flash for the specified controller. See hidsys.h for UniquePadId. +/// Writes spi-flash for the specified controller. /// buffer and tmem_size must be page-aligned. size is the actual transfer size. /// This also uses \ref hiddbgAcquireOperationEventHandle to wait for the operation to finish, then \ref hiddbgGetOperationResult is used. /// Only available with [6.0.0+]. -Result hiddbgWriteSerialFlash(u32 offset, void* buffer, size_t tmem_size, size_t size, u64 UniquePadId); +Result hiddbgWriteSerialFlash(u32 offset, void* buffer, size_t tmem_size, size_t size, HidsysUniquePadId unique_pad_id); -/// Get the Result for the Operation and handles cleanup, for the specified controller. See hidsys.h for UniquePadId. +/// Get the Result for the Operation and handles cleanup, for the specified controller. /// Only available with [6.0.0+]. -Result hiddbgGetOperationResult(u64 UniquePadId); +Result hiddbgGetOperationResult(HidsysUniquePadId unique_pad_id); -/// Gets the internal DeviceType for the specified controller. See hidsys.h for UniquePadId. +/// Gets the internal DeviceType for the specified controller. /// Only available with [6.0.0+]. /// Pre-9.0.0 the output is an u32, with [9.0.0+] it's an u8. -Result hiddbgGetUniquePadDeviceTypeSetInternal(u64 UniquePadId, u32 *out); +Result hiddbgGetUniquePadDeviceTypeSetInternal(HidsysUniquePadId unique_pad_id, u32 *out); /// Gets a list of AbstractedPadHandles, where AbstractedPadHandles is the output array with max entries = count. total_entries is total entries written to the output array. /// Only available with [5.0.0-8.1.0]. diff --git a/nx/include/switch/services/hidsys.h b/nx/include/switch/services/hidsys.h index 83795e30..de571460 100644 --- a/nx/include/switch/services/hidsys.h +++ b/nx/include/switch/services/hidsys.h @@ -36,6 +36,16 @@ typedef enum { HidcfgButtonConfig_Disabled = 22, ///< Disabled } HidcfgButtonConfig; +/// UniquePadId for a controller. +typedef struct { + u64 id; ///< UniquePadId +} HidsysUniquePadId; + +/// UniquePadSerialNumber +typedef struct { + char serial_number[0x10]; ///< SerialNumber +} HidsysUniquePadSerialNumber; + /// Mini Cycle struct for \ref HidsysNotificationLedPattern. typedef struct { u8 ledIntensity; ///< Mini Cycle X LED Intensity. @@ -165,12 +175,12 @@ Result hidsysGetSupportedNpadStyleSetOfCallerApplet(u32 *out); /** * @brief Gets the UniquePadIds for the specified controller. * @note Only available on [3.0.0+]. - * @param id Controller ID. Must not be CONTROLLER_P1_AUTO. - * @param UniquePadIds Output array of UniquePadIds. - * @param Max number of entries for the UniquePadIds array. - * @param total_entries Total output array entries. Optional, can be NULL. + * @param[in] id \ref HidNpadIdType + * @param[out] unique_pad_ids Output array of \ref HidsysUniquePadId. + * @param[in] count Max number of entries for the unique_pad_ids array. + * @param[out] total_out Total output array entries. Optional, can be NULL. */ -Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, u64 *UniquePadIds, s32 count, s32 *total_entries); +Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, HidsysUniquePadId *unique_pad_ids, s32 count, s32 *total_out); /** * @brief EnableAppletToGetInput @@ -180,140 +190,140 @@ Result hidsysEnableAppletToGetInput(bool enable); /** * @brief Gets a list of all UniquePadIds. - * @param UniquePadIds Output array of UniquePadIds. - * @param Max number of entries for the UniquePadIds array. - * @param total_entries Total output array entries. Optional, can be NULL. + * @param[out] unique_pad_ids Output array of \ref HidsysUniquePadId. + * @param[in] count Max number of entries for the unique_pad_ids array. + * @param[out] total_out Total output array entries. Optional, can be NULL. */ -Result hidsysGetUniquePadIds(u64 *UniquePadIds, s32 count, s32 *total_entries); +Result hidsysGetUniquePadIds(HidsysUniquePadId *unique_pad_ids, s32 count, s32 *total_out); /** - * @brief Gets the unique pad's serial number. + * @brief Gets the \ref HidsysUniquePadSerialNumber. * @note Only available on [5.0.0+]. - * @param UniquePadId UniquePadId for the controller. - * @param serial Pointer to output the serial to. (The buffer size needs to be at least 0x11 bytes) + * @param[in] unique_pad_id \ref HidsysUniquePadId + * @param[out] serial \ref HidsysUniquePadSerialNumber */ -Result hidsysGetUniquePadSerialNumber(u64 UniquePadId, char *serial); +Result hidsysGetUniquePadSerialNumber(HidsysUniquePadId unique_pad_id, HidsysUniquePadSerialNumber *serial); /** * @brief Sets the HOME-button notification LED pattern, for the specified controller. * @note Generally this should only be used if \ref hidsysSetNotificationLedPatternWithTimeout is not usable. * @note Only available on [7.0.0+]. - * @param pattern \ref HidsysNotificationLedPattern - * @param UniquePadId UniquePadId for the controller. + * @param[in] pattern \ref HidsysNotificationLedPattern + * @param[in] unique_pad_id \ref HidsysUniquePadId */ -Result hidsysSetNotificationLedPattern(const HidsysNotificationLedPattern *pattern, u64 UniquePadId); +Result hidsysSetNotificationLedPattern(const HidsysNotificationLedPattern *pattern, HidsysUniquePadId unique_pad_id); /** * @brief Sets the HOME-button notification LED pattern, for the specified controller. The LED will automatically be disabled once the specified timeout occurs. * @note Only available on [9.0.0+], and with controllers which have the [9.0.0+] firmware installed. * @param[in] pattern \ref HidsysNotificationLedPattern - * @param[in] UniquePadId UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] timeout Timeout in nanoseconds. */ -Result hidsysSetNotificationLedPatternWithTimeout(const HidsysNotificationLedPattern *pattern, u64 UniquePadId, u64 timeout); +Result hidsysSetNotificationLedPatternWithTimeout(const HidsysNotificationLedPattern *pattern, HidsysUniquePadId unique_pad_id, u64 timeout); /** * @brief IsButtonConfigSupported * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsButtonConfigSupported(u64 unique_pad_id, bool *out); +Result hidsysIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out); /** * @brief DeleteButtonConfig * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId */ -Result hidsysDeleteButtonConfig(u64 unique_pad_id); +Result hidsysDeleteButtonConfig(HidsysUniquePadId unique_pad_id); /** * @brief SetButtonConfigEnabled * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] flag Input flag. */ -Result hidsysSetButtonConfigEnabled(u64 unique_pad_id, bool flag); +Result hidsysSetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag); /** * @brief IsButtonConfigEnabled * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsButtonConfigEnabled(u64 unique_pad_id, bool *out); +Result hidsysIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out); /** * @brief SetButtonConfigEmbedded * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigEmbedded */ -Result hidsysSetButtonConfigEmbedded(u64 unique_pad_id, const HidsysButtonConfigEmbedded *config); +Result hidsysSetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config); /** * @brief SetButtonConfigFull * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigFull */ -Result hidsysSetButtonConfigFull(u64 unique_pad_id, const HidsysButtonConfigFull *config); +Result hidsysSetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config); /** * @brief SetButtonConfigLeft * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigLeft */ -Result hidsysSetButtonConfigLeft(u64 unique_pad_id, const HidsysButtonConfigLeft *config); +Result hidsysSetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config); /** * @brief SetButtonConfigRight * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigRight */ -Result hidsysSetButtonConfigRight(u64 unique_pad_id, const HidsysButtonConfigRight *config); +Result hidsysSetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config); /** * @brief GetButtonConfigEmbedded * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigEmbedded */ -Result hidsysGetButtonConfigEmbedded(u64 unique_pad_id, HidsysButtonConfigEmbedded *config); +Result hidsysGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config); /** * @brief GetButtonConfigFull * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigFull */ -Result hidsysGetButtonConfigFull(u64 unique_pad_id, HidsysButtonConfigFull *config); +Result hidsysGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config); /** * @brief GetButtonConfigLeft * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigLeft */ -Result hidsysGetButtonConfigLeft(u64 unique_pad_id, HidsysButtonConfigLeft *config); +Result hidsysGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config); /** * @brief GetButtonConfigRight * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigRight */ -Result hidsysGetButtonConfigRight(u64 unique_pad_id, HidsysButtonConfigRight *config); +Result hidsysGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config); /** * @brief IsCustomButtonConfigSupported * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsCustomButtonConfigSupported(u64 unique_pad_id, bool *out); +Result hidsysIsCustomButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out); /** * @brief IsDefaultButtonConfigEmbedded @@ -474,18 +484,18 @@ Result hidsysDeleteButtonConfigStorageRight(s32 index); /** * @brief IsUsingCustomButtonConfig * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsUsingCustomButtonConfig(u64 unique_pad_id, bool *out); +Result hidsysIsUsingCustomButtonConfig(HidsysUniquePadId unique_pad_id, bool *out); /** * @brief IsAnyCustomButtonConfigEnabled * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsAnyCustomButtonConfigEnabled(u64 unique_pad_id, bool *out); +Result hidsysIsAnyCustomButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out); /** * @brief SetAllCustomButtonConfigEnabled @@ -504,64 +514,64 @@ Result hidsysSetAllDefaultButtonConfig(void); /** * @brief SetHidButtonConfigEmbedded * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidcfgButtonConfigEmbedded */ -Result hidsysSetHidButtonConfigEmbedded(u64 unique_pad_id, const HidcfgButtonConfigEmbedded *config); +Result hidsysSetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigEmbedded *config); /** * @brief SetHidButtonConfigFull * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidcfgButtonConfigFull */ -Result hidsysSetHidButtonConfigFull(u64 unique_pad_id, const HidcfgButtonConfigFull *config); +Result hidsysSetHidButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigFull *config); /** * @brief SetHidButtonConfigLeft * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidcfgButtonConfigLeft */ -Result hidsysSetHidButtonConfigLeft(u64 unique_pad_id, const HidcfgButtonConfigLeft *config); +Result hidsysSetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigLeft *config); /** * @brief SetHidButtonConfigRight * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidcfgButtonConfigRight */ -Result hidsysSetHidButtonConfigRight(u64 unique_pad_id, const HidcfgButtonConfigRight *config); +Result hidsysSetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigRight *config); /** * @brief GetHidButtonConfigEmbedded * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidcfgButtonConfigEmbedded */ -Result hidsysGetHidButtonConfigEmbedded(u64 unique_pad_id, HidcfgButtonConfigEmbedded *config); +Result hidsysGetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigEmbedded *config); /** * @brief GetHidButtonConfigFull * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidcfgButtonConfigFull */ -Result hidsysGetHidButtonConfigFull(u64 unique_pad_id, HidcfgButtonConfigFull *config); +Result hidsysGetHidButtonConfigFull(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigFull *config); /** * @brief GetHidButtonConfigLeft * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidcfgButtonConfigLeft */ -Result hidsysGetHidButtonConfigLeft(u64 unique_pad_id, HidcfgButtonConfigLeft *config); +Result hidsysGetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigLeft *config); /** * @brief GetHidButtonConfigRight * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id UniquePadId for the controller. + * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidcfgButtonConfigRight */ -Result hidsysGetHidButtonConfigRight(u64 unique_pad_id, HidcfgButtonConfigRight *config); +Result hidsysGetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigRight *config); diff --git a/nx/source/services/hiddbg.c b/nx/source/services/hiddbg.c index 91e4d21b..c5b05b22 100644 --- a/nx/source/services/hiddbg.c +++ b/nx/source/services/hiddbg.c @@ -80,20 +80,20 @@ Result hiddbgDeactivateHomeButton(void) { return _hiddbgCmdNoIO(110); } -Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, u64 UniquePadId) { +Result hiddbgUpdateControllerColor(u32 colorBody, u32 colorButtons, HidsysUniquePadId unique_pad_id) { if (hosversionBefore(3,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); const struct { u32 colorBody; u32 colorButtons; - u64 UniquePadId; - } in = { colorBody, colorButtons, UniquePadId }; + HidsysUniquePadId unique_pad_id; + } in = { colorBody, colorButtons, unique_pad_id }; return serviceDispatchIn(&g_hiddbgSrv, 221, in); } -Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, u64 UniquePadId) { +Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip, u32 colorRightGrip, u8 inval, HidsysUniquePadId unique_pad_id) { if (hosversionBefore(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -104,20 +104,20 @@ Result hiddbgUpdateDesignInfo(u32 colorBody, u32 colorButtons, u32 colorLeftGrip u32 colorRightGrip; u8 inval; u8 pad[7]; - u64 UniquePadId; - } in = { colorBody, colorButtons, colorLeftGrip, colorRightGrip, inval, {0}, UniquePadId }; + HidsysUniquePadId unique_pad_id; + } in = { colorBody, colorButtons, colorLeftGrip, colorRightGrip, inval, {0}, unique_pad_id }; return serviceDispatchIn(&g_hiddbgSrv, 224, in); } -Result hiddbgAcquireOperationEventHandle(Event* out_event, bool autoclear, u64 UniquePadId) { +Result hiddbgAcquireOperationEventHandle(Event* out_event, bool autoclear, HidsysUniquePadId unique_pad_id) { if (hosversionBefore(6,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); Handle tmp_handle = INVALID_HANDLE; Result rc = 0; - rc = serviceDispatchIn(&g_hiddbgSrv, 228, UniquePadId, + rc = serviceDispatchIn(&g_hiddbgSrv, 228, unique_pad_id, .out_handle_attrs = { SfOutHandleAttr_HipcCopy }, .out_handles = &tmp_handle, ); @@ -125,13 +125,13 @@ Result hiddbgAcquireOperationEventHandle(Event* out_event, bool autoclear, u64 U return rc; } -static Result _hiddbgReadSerialFlash(TransferMemory *tmem, u32 offset, u64 size, u64 UniquePadId) { +static Result _hiddbgReadSerialFlash(TransferMemory *tmem, u32 offset, u64 size, HidsysUniquePadId unique_pad_id) { const struct { u32 offset; u32 pad; u64 size; - u64 UniquePadId; - } in = { offset, 0, size, UniquePadId }; + HidsysUniquePadId unique_pad_id; + } in = { offset, 0, size, unique_pad_id }; return serviceDispatchIn(&g_hiddbgSrv, 229, in, .in_num_handles = 1, @@ -139,14 +139,14 @@ static Result _hiddbgReadSerialFlash(TransferMemory *tmem, u32 offset, u64 size, ); } -static Result _hiddbgWriteSerialFlash(TransferMemory *tmem, u32 offset, u64 tmem_size, u64 size, u64 UniquePadId) { +static Result _hiddbgWriteSerialFlash(TransferMemory *tmem, u32 offset, u64 tmem_size, u64 size, HidsysUniquePadId unique_pad_id) { const struct { u32 offset; u32 pad; u64 tmem_size; u64 size; - u64 UniquePadId; - } in = { offset, 0, tmem_size, size, UniquePadId }; + HidsysUniquePadId unique_pad_id; + } in = { offset, 0, tmem_size, size, unique_pad_id }; return serviceDispatchIn(&g_hiddbgSrv, 230, in, .in_num_handles = 1, @@ -155,7 +155,7 @@ static Result _hiddbgWriteSerialFlash(TransferMemory *tmem, u32 offset, u64 tmem } // sdk-nso doesn't use hiddbgAcquireOperationEventHandle/hiddbgGetOperationResult in the *SerialFlash impl, those are used seperately by the user. [9.0.0+] sdk-nso no longer exposes *SerialFlash and related functionality. -Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, u64 UniquePadId) { +Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, HidsysUniquePadId unique_pad_id) { Result rc=0; Event tmpevent={0}; TransferMemory tmem; @@ -167,17 +167,17 @@ Result hiddbgReadSerialFlash(u32 offset, void* buffer, size_t size, u64 UniquePa rc = tmemCreate(&tmem, sizealign, Perm_Rw); if (R_FAILED(rc)) return rc; - rc = hiddbgAcquireOperationEventHandle(&tmpevent, true, UniquePadId); // *Must* be used before _hiddbgReadSerialFlash. - if (R_SUCCEEDED(rc)) rc = _hiddbgReadSerialFlash(&tmem, offset, size, UniquePadId); + rc = hiddbgAcquireOperationEventHandle(&tmpevent, true, unique_pad_id); // *Must* be used before _hiddbgReadSerialFlash. + if (R_SUCCEEDED(rc)) rc = _hiddbgReadSerialFlash(&tmem, offset, size, unique_pad_id); if (R_SUCCEEDED(rc)) rc = eventWait(&tmpevent, UINT64_MAX); - if (R_SUCCEEDED(rc)) rc = hiddbgGetOperationResult(UniquePadId); + if (R_SUCCEEDED(rc)) rc = hiddbgGetOperationResult(unique_pad_id); if (R_SUCCEEDED(rc)) memcpy(buffer, tmem.src_addr, size); eventClose(&tmpevent); tmemClose(&tmem); return rc; } -Result hiddbgWriteSerialFlash(u32 offset, void* buffer, size_t tmem_size, size_t size, u64 UniquePadId) { +Result hiddbgWriteSerialFlash(u32 offset, void* buffer, size_t tmem_size, size_t size, HidsysUniquePadId unique_pad_id) { Result rc=0; Event tmpevent={0}; TransferMemory tmem; @@ -188,27 +188,27 @@ Result hiddbgWriteSerialFlash(u32 offset, void* buffer, size_t tmem_size, size_t rc = tmemCreateFromMemory(&tmem, buffer, tmem_size, Perm_R); if (R_FAILED(rc)) return rc; - rc = hiddbgAcquireOperationEventHandle(&tmpevent, true, UniquePadId); // *Must* be used before _hiddbgWriteSerialFlash. - if (R_SUCCEEDED(rc)) rc = _hiddbgWriteSerialFlash(&tmem, offset, tmem_size, size, UniquePadId); + rc = hiddbgAcquireOperationEventHandle(&tmpevent, true, unique_pad_id); // *Must* be used before _hiddbgWriteSerialFlash. + if (R_SUCCEEDED(rc)) rc = _hiddbgWriteSerialFlash(&tmem, offset, tmem_size, size, unique_pad_id); if (R_SUCCEEDED(rc)) rc = eventWait(&tmpevent, UINT64_MAX); - if (R_SUCCEEDED(rc)) rc = hiddbgGetOperationResult(UniquePadId); + if (R_SUCCEEDED(rc)) rc = hiddbgGetOperationResult(unique_pad_id); eventClose(&tmpevent); tmemClose(&tmem); return rc; } -Result hiddbgGetOperationResult(u64 UniquePadId) { +Result hiddbgGetOperationResult(HidsysUniquePadId unique_pad_id) { if (hosversionBefore(6,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hiddbgCmdInU64NoOut(UniquePadId, 231); + return _hiddbgCmdInU64NoOut(unique_pad_id.id, 231); } -Result hiddbgGetUniquePadDeviceTypeSetInternal(u64 UniquePadId, u32 *out) { +Result hiddbgGetUniquePadDeviceTypeSetInternal(HidsysUniquePadId unique_pad_id, u32 *out) { if (hosversionBefore(6,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); u32 tmp=0; - Result rc = serviceDispatchInOut(&g_hiddbgSrv, 234, UniquePadId, tmp); + Result rc = serviceDispatchInOut(&g_hiddbgSrv, 234, unique_pad_id, tmp); if (R_SUCCEEDED(rc) && out) { // Pre-9.0.0 output is an u32, with [9.0.0+] it's an u8. if (hosversionBefore(9,0,0)) *out = tmp; diff --git a/nx/source/services/hidsys.c b/nx/source/services/hidsys.c index ff9c90e7..8cf9caf8 100644 --- a/nx/source/services/hidsys.c +++ b/nx/source/services/hidsys.c @@ -181,7 +181,7 @@ Result hidsysGetSupportedNpadStyleSetOfCallerApplet(u32 *out) { return _hidsysGetMaskedSupportedNpadStyleSet(AppletResourceUserId, out); } -Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, u64 *UniquePadIds, s32 count, s32 *total_entries) { +Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, HidsysUniquePadId *unique_pad_ids, s32 count, s32 *total_out) { if (hosversionBefore(3,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -189,9 +189,9 @@ Result hidsysGetUniquePadsFromNpad(HidNpadIdType id, u64 *UniquePadIds, s32 coun s64 out=0; Result rc = serviceDispatchInOut(&g_hidsysSrv, 321, tmp, out, .buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_Out }, - .buffers = { { UniquePadIds, count*sizeof(u64) } }, + .buffers = { { unique_pad_ids, count*sizeof(HidsysUniquePadId) } }, ); - if (R_SUCCEEDED(rc) && total_entries) *total_entries = out; + if (R_SUCCEEDED(rc) && total_out) *total_out = out; return rc; } @@ -204,141 +204,137 @@ Result hidsysEnableAppletToGetInput(bool enable) { return serviceDispatchIn(&g_hidsysSrv, 503, in); } -Result hidsysGetUniquePadIds(u64 *UniquePadIds, s32 count, s32 *total_entries) { +Result hidsysGetUniquePadIds(HidsysUniquePadId *unique_pad_ids, s32 count, s32 *total_out) { s64 out=0; Result rc = serviceDispatchOut(&g_hidsysSrv, 703, out, .buffer_attrs = { SfBufferAttr_HipcPointer | SfBufferAttr_Out }, - .buffers = { { UniquePadIds, count*sizeof(u64) } }, + .buffers = { { unique_pad_ids, count*sizeof(HidsysUniquePadId) } }, ); - if (R_SUCCEEDED(rc) && total_entries) *total_entries = out; + if (R_SUCCEEDED(rc) && total_out) *total_out = out; return rc; } -Result hidsysGetUniquePadSerialNumber(u64 UniquePadId, char *serial) { +Result hidsysGetUniquePadSerialNumber(HidsysUniquePadId unique_pad_id, HidsysUniquePadSerialNumber *serial) { if (hosversionBefore(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - char out[0x10]={0}; - if (serial) memset(serial, 0, 0x11); - Result rc = serviceDispatchInOut(&g_hidsysSrv, 809, UniquePadId, out); - if (R_SUCCEEDED(rc) && serial) memcpy(serial, out, 0x10); - return rc; + return serviceDispatchInOut(&g_hidsysSrv, 809, unique_pad_id, *serial); } -Result hidsysSetNotificationLedPattern(const HidsysNotificationLedPattern *pattern, u64 UniquePadId) { +Result hidsysSetNotificationLedPattern(const HidsysNotificationLedPattern *pattern, HidsysUniquePadId unique_pad_id) { if (hosversionBefore(7,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); const struct { HidsysNotificationLedPattern pattern; - u64 UniquePadId; - } in = { *pattern, UniquePadId }; + HidsysUniquePadId unique_pad_id; + } in = { *pattern, unique_pad_id }; return serviceDispatchIn(&g_hidsysSrv, 830, in); } -Result hidsysSetNotificationLedPatternWithTimeout(const HidsysNotificationLedPattern *pattern, u64 UniquePadId, u64 timeout) { +Result hidsysSetNotificationLedPatternWithTimeout(const HidsysNotificationLedPattern *pattern, HidsysUniquePadId unique_pad_id, u64 timeout) { if (hosversionBefore(9,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); const struct { HidsysNotificationLedPattern pattern; - u64 UniquePadId; + HidsysUniquePadId unique_pad_id; u64 timeout; - } in = { *pattern, UniquePadId, timeout }; + } in = { *pattern, unique_pad_id, timeout }; return serviceDispatchIn(&g_hidsysSrv, 831, in); } -Result hidsysIsButtonConfigSupported(u64 unique_pad_id, bool *out) { +Result hidsysIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBool(unique_pad_id, out, 1200); + return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1200); } -Result hidsysDeleteButtonConfig(u64 unique_pad_id) { +Result hidsysDeleteButtonConfig(HidsysUniquePadId unique_pad_id) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64NoOut(unique_pad_id, 1201); + return _hidsysCmdInU64NoOut(unique_pad_id.id, 1201); } -Result hidsysSetButtonConfigEnabled(u64 unique_pad_id, bool flag) { +Result hidsysSetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBoolNoOut(unique_pad_id, flag, 1202); + return _hidsysCmdInU64InBoolNoOut(unique_pad_id.id, flag, 1202); } -Result hidsysIsButtonConfigEnabled(u64 unique_pad_id, bool *out) { +Result hidsysIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBool(unique_pad_id, out, 1203); + return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1203); } -Result hidsysSetButtonConfigEmbedded(u64 unique_pad_id, const HidsysButtonConfigEmbedded *config) { +Result hidsysSetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1204); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1204); } -Result hidsysSetButtonConfigFull(u64 unique_pad_id, const HidsysButtonConfigFull *config) { +Result hidsysSetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1205); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1205); } -Result hidsysSetButtonConfigLeft(u64 unique_pad_id, const HidsysButtonConfigLeft *config) { +Result hidsysSetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1206); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1206); } -Result hidsysSetButtonConfigRight(u64 unique_pad_id, const HidsysButtonConfigRight *config) { +Result hidsysSetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1207); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1207); } -Result hidsysGetButtonConfigEmbedded(u64 unique_pad_id, HidsysButtonConfigEmbedded *config) { +Result hidsysGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1208); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1208); } -Result hidsysGetButtonConfigFull(u64 unique_pad_id, HidsysButtonConfigFull *config) { +Result hidsysGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1209); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1209); } -Result hidsysGetButtonConfigLeft(u64 unique_pad_id, HidsysButtonConfigLeft *config) { +Result hidsysGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1210); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1210); } -Result hidsysGetButtonConfigRight(u64 unique_pad_id, HidsysButtonConfigRight *config) { +Result hidsysGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1211); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1211); } -Result hidsysIsCustomButtonConfigSupported(u64 unique_pad_id, bool *out) { +Result hidsysIsCustomButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBool(unique_pad_id, out, 1250); + return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1250); } Result hidsysIsDefaultButtonConfigEmbedded(const HidcfgButtonConfigEmbedded *config, bool *out) { @@ -481,14 +477,14 @@ Result hidsysDeleteButtonConfigStorageRight(s32 index) { return _hidsysCmdInU32NoOut((u32)index, 1270); } -Result hidsysIsUsingCustomButtonConfig(u64 unique_pad_id, bool *out) { +Result hidsysIsUsingCustomButtonConfig(HidsysUniquePadId unique_pad_id, bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBool(unique_pad_id, out, 1271); + return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1271); } -Result hidsysIsAnyCustomButtonConfigEnabled(u64 unique_pad_id, bool *out) { +Result hidsysIsAnyCustomButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -502,11 +498,11 @@ Result hidsysSetAllCustomButtonConfigEnabled(u64 AppletResourceUserId, bool flag return _hidsysCmdInU64InBoolNoOut(AppletResourceUserId, flag, 1273); } -Result hidsysSetDefaultButtonConfig(u64 unique_pad_id) { +Result hidsysSetDefaultButtonConfig(HidsysUniquePadId unique_pad_id) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64NoOut(unique_pad_id, 1274); + return _hidsysCmdInU64NoOut(unique_pad_id.id, 1274); } Result hidsysSetAllDefaultButtonConfig(void) { @@ -516,59 +512,59 @@ Result hidsysSetAllDefaultButtonConfig(void) { return _hidsysCmdNoIO(1275); } -Result hidsysSetHidButtonConfigEmbedded(u64 unique_pad_id, const HidcfgButtonConfigEmbedded *config) { +Result hidsysSetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1276); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1276); } -Result hidsysSetHidButtonConfigFull(u64 unique_pad_id, const HidcfgButtonConfigFull *config) { +Result hidsysSetHidButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1277); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1277); } -Result hidsysSetHidButtonConfigLeft(u64 unique_pad_id, const HidcfgButtonConfigLeft *config) { +Result hidsysSetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1278); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1278); } -Result hidsysSetHidButtonConfigRight(u64 unique_pad_id, const HidcfgButtonConfigRight *config) { +Result hidsysSetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidcfgButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id, config, sizeof(*config), 1279); + return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1279); } -Result hidsysGetHidButtonConfigEmbedded(u64 unique_pad_id, HidcfgButtonConfigEmbedded *config) { +Result hidsysGetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1280); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1280); } -Result hidsysGetHidButtonConfigFull(u64 unique_pad_id, HidcfgButtonConfigFull *config) { +Result hidsysGetHidButtonConfigFull(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1281); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1281); } -Result hidsysGetHidButtonConfigLeft(u64 unique_pad_id, HidcfgButtonConfigLeft *config) { +Result hidsysGetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1282); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1282); } -Result hidsysGetHidButtonConfigRight(u64 unique_pad_id, HidcfgButtonConfigRight *config) { +Result hidsysGetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id, config, sizeof(*config), 1283); + return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1283); }