diff --git a/nx/include/switch/services/hidsys.h b/nx/include/switch/services/hidsys.h index f6a6ee81..960139f6 100644 --- a/nx/include/switch/services/hidsys.h +++ b/nx/include/switch/services/hidsys.h @@ -7,6 +7,7 @@ #include "../types.h" #include "../kernel/event.h" #include "../services/hid.h" +#include "../services/btdrv_types.h" #include "../sf/service.h" /// Selects what button to map to. @@ -180,6 +181,11 @@ typedef struct { HidcfgAnalogStickAssignment hardware_stick_r; ///< HardwareStickR } HidcfgButtonConfigRight; +/// StorageName +typedef struct { + u8 name[0x81]; ///< UTF-8 NUL-terminated name string. +} HidcfgStorageName; + /// Initialize hidsys. Result hidsysInitialize(void); @@ -362,99 +368,219 @@ Result hidsysIsUsbConnected(HidsysUniquePadId unique_pad_id, bool *out); Result hidsysIsFirmwareUpdateNeededForNotification(HidsysUniquePadId unique_pad_id, bool *out); /** - * @brief IsButtonConfigSupported - * @note Only available on [10.0.0+]. + * @brief Legacy IsButtonConfigSupported. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysIsButtonConfigSupported instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out); +Result hidsysLegacyIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out); + +/** + * @brief IsButtonConfigSupported + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigSupported instead. + * @param[in] addr \ref BtdrvAddress + * @param[out] out Output bool flag. + */ +Result hidsysIsButtonConfigSupported(BtdrvAddress addr, bool *out); + +/** + * @brief IsButtonConfigEmbeddedSupported + * @note Only available on [11.0.0+]. + * @param[out] out Output bool flag. + */ +Result hidsysIsButtonConfigEmbeddedSupported(bool *out); + +/** + * @brief Legacy DeleteButtonConfig. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysDeleteButtonConfig instead. + * @param[in] unique_pad_id \ref HidsysUniquePadId + */ +Result hidsysLegacyDeleteButtonConfig(HidsysUniquePadId unique_pad_id); /** * @brief DeleteButtonConfig - * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id \ref HidsysUniquePadId + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyDeleteButtonConfig instead. + * @param[in] addr \ref BtdrvAddress */ -Result hidsysDeleteButtonConfig(HidsysUniquePadId unique_pad_id); +Result hidsysDeleteButtonConfig(BtdrvAddress addr); /** - * @brief SetButtonConfigEnabled - * @note Only available on [10.0.0+]. + * @brief DeleteButtonConfigEmbedded + * @note Only available on [11.0.0+]. + */ +Result hidsysDeleteButtonConfigEmbedded(void); + +/** + * @brief Legacy SetButtonConfigEnabled. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigEnabled instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] flag Input flag. */ -Result hidsysSetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag); +Result hidsysLegacySetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag); /** - * @brief IsButtonConfigEnabled - * @note Only available on [10.0.0+]. + * @brief SetButtonConfigEnabled + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEnabled instead. + * @param[in] addr \ref BtdrvAddress + * @param[in] flag Input flag. + */ +Result hidsysSetButtonConfigEnabled(BtdrvAddress addr, bool flag); + +/** + * @brief SetButtonConfigEmbeddedEnabled + * @note Only available on [11.0.0+]. + * @param[in] flag Input flag. + */ +Result hidsysSetButtonConfigEmbeddedEnabled(bool flag); + +/** + * @brief Legacy IsButtonConfigEnabled. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysIsButtonConfigEnabled instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out); +Result hidsysLegacyIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out); /** - * @brief SetButtonConfigEmbedded - * @note Only available on [10.0.0+]. + * @brief IsButtonConfigEnabled + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyIsButtonConfigEnabled instead. + * @param[in] addr \ref BtdrvAddress + * @param[in] out Output bool flag. + */ +Result hidsysIsButtonConfigEnabled(BtdrvAddress addr, bool *out); + +/** + * @brief IsButtonConfigEmbeddedEnabled + * @note Only available on [11.0.0+]. + * @param[out] out Output bool flag. + */ +Result hidsysIsButtonConfigEmbeddedEnabled(bool *out); + +/** + * @brief Legacy SetButtonConfigEmbedded. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigEmbedded instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigEmbedded */ -Result hidsysSetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config); +Result hidsysLegacySetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config); /** - * @brief SetButtonConfigFull - * @note Only available on [10.0.0+]. + * @brief SetButtonConfigEmbedded + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigEmbedded instead. + * @param[in] config \ref HidsysButtonConfigEmbedded + */ +Result hidsysSetButtonConfigEmbedded(const HidsysButtonConfigEmbedded *config); + +/** + * @brief Legacy SetButtonConfigFull. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigFull instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigFull */ -Result hidsysSetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config); +Result hidsysLegacySetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config); /** - * @brief SetButtonConfigLeft - * @note Only available on [10.0.0+]. + * @brief SetButtonConfigFull + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigFull instead. + * @param[in] addr \ref BtdrvAddress + * @param[in] config \ref HidsysButtonConfigFull + */ +Result hidsysSetButtonConfigFull(BtdrvAddress addr, const HidsysButtonConfigFull *config); + +/** + * @brief Legacy SetButtonConfigLeft. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigLeft instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigLeft */ -Result hidsysSetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config); +Result hidsysLegacySetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config); /** - * @brief SetButtonConfigRight - * @note Only available on [10.0.0+]. + * @brief SetButtonConfigLeft + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigLeft instead. + * @param[in] addr \ref BtdrvAddress + * @param[in] config \ref HidsysButtonConfigLeft + */ +Result hidsysSetButtonConfigLeft(BtdrvAddress addr, const HidsysButtonConfigLeft *config); + +/** + * @brief Legacy SetButtonConfigRight. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysSetButtonConfigRight instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[in] config \ref HidsysButtonConfigRight */ -Result hidsysSetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config); +Result hidsysLegacySetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config); /** - * @brief GetButtonConfigEmbedded - * @note Only available on [10.0.0+]. + * @brief SetButtonConfigRight + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacySetButtonConfigRight instead. + * @param[in] addr \ref BtdrvAddress + * @param[in] config \ref HidsysButtonConfigRight + */ +Result hidsysSetButtonConfigRight(BtdrvAddress addr, const HidsysButtonConfigRight *config); + +/** + * @brief Legacy GetButtonConfigEmbedded. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigEmbedded instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigEmbedded */ -Result hidsysGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config); +Result hidsysLegacyGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config); /** - * @brief GetButtonConfigFull - * @note Only available on [10.0.0+]. + * @brief GetButtonConfigEmbedded + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigEmbedded instead. + * @param[out] config \ref HidsysButtonConfigEmbedded + */ +Result hidsysGetButtonConfigEmbedded(HidsysButtonConfigEmbedded *config); + +/** + * @brief Legacy GetButtonConfigFull. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigFull instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigFull */ -Result hidsysGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config); +Result hidsysLegacyGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config); /** - * @brief GetButtonConfigLeft - * @note Only available on [10.0.0+]. + * @brief GetButtonConfigFull + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigFull instead. + * @param[in] addr \ref BtdrvAddress + * @param[out] config \ref HidsysButtonConfigFull + */ +Result hidsysGetButtonConfigFull(BtdrvAddress addr, HidsysButtonConfigFull *config); + +/** + * @brief Legacy GetButtonConfigLeft. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigLeft instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigLeft */ -Result hidsysGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config); +Result hidsysLegacyGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config); /** - * @brief GetButtonConfigRight - * @note Only available on [10.0.0+]. + * @brief GetButtonConfigLeft + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigLeft instead. + * @param[in] addr \ref BtdrvAddress + * @param[out] config \ref HidsysButtonConfigLeft + */ +Result hidsysGetButtonConfigLeft(BtdrvAddress addr, HidsysButtonConfigLeft *config); + +/** + * @brief Legacy GetButtonConfigRight. + * @note Only available on [10.0.0-10.2.0]. On [11.0.0+], use \ref hidsysGetButtonConfigRight instead. * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] config \ref HidsysButtonConfigRight */ -Result hidsysGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config); +Result hidsysLegacyGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config); + +/** + * @brief GetButtonConfigRight + * @note Only available on [11.0.0+]. On [10.0.0-10.2.0], use \ref hidsysLegacyGetButtonConfigRight instead. + * @param[in] addr \ref BtdrvAddress + * @param[out] config \ref HidsysButtonConfigRight + */ +Result hidsysGetButtonConfigRight(BtdrvAddress addr, HidsysButtonConfigRight *config); /** * @brief IsCustomButtonConfigSupported @@ -499,7 +625,7 @@ Result hidsysIsDefaultButtonConfigRight(const HidcfgButtonConfigRight *config, b /** * @brief IsButtonConfigStorageEmbeddedEmpty * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] out Output bool flag. */ Result hidsysIsButtonConfigStorageEmbeddedEmpty(s32 index, bool *out); @@ -507,7 +633,7 @@ Result hidsysIsButtonConfigStorageEmbeddedEmpty(s32 index, bool *out); /** * @brief IsButtonConfigStorageFullEmpty * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] out Output bool flag. */ Result hidsysIsButtonConfigStorageFullEmpty(s32 index, bool *out); @@ -515,7 +641,7 @@ Result hidsysIsButtonConfigStorageFullEmpty(s32 index, bool *out); /** * @brief IsButtonConfigStorageLeftEmpty * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] out Output bool flag. */ Result hidsysIsButtonConfigStorageLeftEmpty(s32 index, bool *out); @@ -523,100 +649,100 @@ Result hidsysIsButtonConfigStorageLeftEmpty(s32 index, bool *out); /** * @brief IsButtonConfigStorageRightEmpty * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] out Output bool flag. */ Result hidsysIsButtonConfigStorageRightEmpty(s32 index, bool *out); /** - * @brief GetButtonConfigStorageEmbedded + * @brief GetButtonConfigStorageEmbeddedDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] config \ref HidcfgButtonConfigEmbedded */ -Result hidsysGetButtonConfigStorageEmbedded(s32 index, HidcfgButtonConfigEmbedded *config); +Result hidsysGetButtonConfigStorageEmbeddedDeprecated(s32 index, HidcfgButtonConfigEmbedded *config); /** - * @brief GetButtonConfigStorageFull + * @brief GetButtonConfigStorageFullDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] config \ref HidcfgButtonConfigFull */ -Result hidsysGetButtonConfigStorageFull(s32 index, HidcfgButtonConfigFull *config); +Result hidsysGetButtonConfigStorageFullDeprecated(s32 index, HidcfgButtonConfigFull *config); /** - * @brief GetButtonConfigStorageLeft + * @brief GetButtonConfigStorageLeftDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] config \ref HidcfgButtonConfigLeft */ -Result hidsysGetButtonConfigStorageLeft(s32 index, HidcfgButtonConfigLeft *config); +Result hidsysGetButtonConfigStorageLeftDeprecated(s32 index, HidcfgButtonConfigLeft *config); /** - * @brief GetButtonConfigStorageRight + * @brief GetButtonConfigStorageRightDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[out] config \ref HidcfgButtonConfigRight */ -Result hidsysGetButtonConfigStorageRight(s32 index, HidcfgButtonConfigRight *config); +Result hidsysGetButtonConfigStorageRightDeprecated(s32 index, HidcfgButtonConfigRight *config); /** - * @brief SetButtonConfigStorageEmbedded + * @brief SetButtonConfigStorageEmbeddedDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[in] config \ref HidcfgButtonConfigEmbedded */ -Result hidsysSetButtonConfigStorageEmbedded(s32 index, const HidcfgButtonConfigEmbedded *config); +Result hidsysSetButtonConfigStorageEmbeddedDeprecated(s32 index, const HidcfgButtonConfigEmbedded *config); /** - * @brief SetButtonConfigStorageFull + * @brief SetButtonConfigStorageFullDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[in] config \ref HidcfgButtonConfigFull */ -Result hidsysSetButtonConfigStorageFull(s32 index, const HidcfgButtonConfigFull *config); +Result hidsysSetButtonConfigStorageFullDeprecated(s32 index, const HidcfgButtonConfigFull *config); /** - * @brief SetButtonConfigStorageLeft + * @brief SetButtonConfigStorageLeftDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[in] config \ref HidcfgButtonConfigLeft */ -Result hidsysSetButtonConfigStorageLeft(s32 index, const HidcfgButtonConfigLeft *config); +Result hidsysSetButtonConfigStorageLeftDeprecated(s32 index, const HidcfgButtonConfigLeft *config); /** - * @brief SetButtonConfigStorageRight + * @brief SetButtonConfigStorageRightDeprecated * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. * @param[in] config \ref HidcfgButtonConfigRight */ -Result hidsysSetButtonConfigStorageRight(s32 index, const HidcfgButtonConfigRight *config); +Result hidsysSetButtonConfigStorageRightDeprecated(s32 index, const HidcfgButtonConfigRight *config); /** * @brief DeleteButtonConfigStorageEmbedded * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. */ Result hidsysDeleteButtonConfigStorageEmbedded(s32 index); /** * @brief DeleteButtonConfigStorageFull * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. */ Result hidsysDeleteButtonConfigStorageFull(s32 index); /** * @brief DeleteButtonConfigStorageLeft * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. */ Result hidsysDeleteButtonConfigStorageLeft(s32 index); /** * @brief DeleteButtonConfigStorageRight * @note Only available on [10.0.0+]. - * @param[in] index Array index for an array which contains a total of 5 entries. + * @param[in] index Array index, should be 0-4. */ Result hidsysDeleteButtonConfigStorageRight(s32 index); @@ -631,10 +757,9 @@ Result hidsysIsUsingCustomButtonConfig(HidsysUniquePadId unique_pad_id, bool *ou /** * @brief IsAnyCustomButtonConfigEnabled * @note Only available on [10.0.0+]. - * @param[in] unique_pad_id \ref HidsysUniquePadId * @param[out] out Output bool flag. */ -Result hidsysIsAnyCustomButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out); +Result hidsysIsAnyCustomButtonConfigEnabled(bool *out); /** * @brief SetAllCustomButtonConfigEnabled @@ -714,3 +839,75 @@ Result hidsysGetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidcfgButto */ Result hidsysGetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigRight *config); +/** + * @brief GetButtonConfigStorageEmbedded + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[out] config \ref HidcfgButtonConfigEmbedded + * @param[out] name \ref HidcfgStorageName + */ +Result hidsysGetButtonConfigStorageEmbedded(s32 index, HidcfgButtonConfigEmbedded *config, HidcfgStorageName *name); + +/** + * @brief GetButtonConfigStorageFull + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[out] config \ref HidcfgButtonConfigFull + * @param[out] name \ref HidcfgStorageName + */ +Result hidsysGetButtonConfigStorageFull(s32 index, HidcfgButtonConfigFull *config, HidcfgStorageName *name); + +/** + * @brief GetButtonConfigStorageLeft + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[out] config \ref HidcfgButtonConfigLeft + * @param[out] name \ref HidcfgStorageName + */ +Result hidsysGetButtonConfigStorageLeft(s32 index, HidcfgButtonConfigLeft *config, HidcfgStorageName *name); + +/** + * @brief GetButtonConfigStorageRight + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[out] config \ref HidcfgButtonConfigRight + * @param[out] name \ref HidcfgStorageName + */ +Result hidsysGetButtonConfigStorageRight(s32 index, HidcfgButtonConfigRight *config, HidcfgStorageName *name); + +/** + * @brief SetButtonConfigStorageEmbedded + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[in] config \ref HidcfgButtonConfigEmbedded + * @param[in] name \ref HidcfgStorageName + */ +Result hidsysSetButtonConfigStorageEmbedded(s32 index, const HidcfgButtonConfigEmbedded *config, const HidcfgStorageName *name); + +/** + * @brief SetButtonConfigStorageFull + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[in] config \ref HidcfgButtonConfigFull + * @param[in] name \ref HidcfgStorageName + */ +Result hidsysSetButtonConfigStorageFull(s32 index, const HidcfgButtonConfigFull *config, const HidcfgStorageName *name); + +/** + * @brief SetButtonConfigStorageLeft + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[in] config \ref HidcfgButtonConfigLeft + * @param[in] name \ref HidcfgStorageName + */ +Result hidsysSetButtonConfigStorageLeft(s32 index, const HidcfgButtonConfigLeft *config, const HidcfgStorageName *name); + +/** + * @brief SetButtonConfigStorageRight + * @note Only available on [11.0.0+]. + * @param[in] index Array index, should be 0-4. + * @param[in] config \ref HidcfgButtonConfigRight + * @param[in] name \ref HidcfgStorageName + */ +Result hidsysSetButtonConfigStorageRight(s32 index, const HidcfgButtonConfigRight *config, const HidcfgStorageName *name); + diff --git a/nx/source/services/hidsys.c b/nx/source/services/hidsys.c index 31ffbb81..1df38a81 100644 --- a/nx/source/services/hidsys.c +++ b/nx/source/services/hidsys.c @@ -54,6 +54,10 @@ static Result _hidsysCmdInU64NoOut(u64 inval, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval); } +static Result _hidsysCmdInAddrNoOut(BtdrvAddress addr, u32 cmd_id) { + return serviceDispatchIn(&g_hidsysSrv, cmd_id, addr); +} + static Result _hidsysCmdInU64InBoolNoOut(u64 inval, bool flag, u32 cmd_id) { const struct { u8 flag; @@ -64,6 +68,15 @@ static Result _hidsysCmdInU64InBoolNoOut(u64 inval, bool flag, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, in); } +static Result _hidsysCmdInAddrInBoolNoOut(BtdrvAddress addr, bool flag, u32 cmd_id) { + const struct { + u8 flag; + BtdrvAddress addr; + } in = { flag!=0, addr }; + + return serviceDispatchIn(&g_hidsysSrv, cmd_id, in); +} + static Result _hidsysCmdNoInOutU8(u8 *out, u32 cmd_id) { return serviceDispatchOut(&g_hidsysSrv, cmd_id, *out); } @@ -108,6 +121,13 @@ static Result _hidsysCmdInU64OutBool(u64 inval, bool *out, u32 cmd_id) { return rc; } +static Result _hidsysCmdInAddrOutBool(BtdrvAddress addr, bool *out, u32 cmd_id) { + u8 tmp=0; + Result rc = serviceDispatchInOut(&g_hidsysSrv, cmd_id, addr, tmp); + if (R_SUCCEEDED(rc) && out) *out = tmp & 1; + return rc; +} + static Result _hidsysCmdInPidAruidOutHandle(Handle* handle_out, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, g_hidsysAppletResourceUserId, .in_send_pid = true, @@ -125,9 +145,16 @@ static Result _hidsysCmdInPidAruidOutEvent(Event* out_event, bool autoclear, u32 return rc; } -static Result _hidsysCmdInU64InBufNoOut(u64 inval, const void* buf, size_t size, u32 cmd_id) { +static Result _hidsysCmdInU64InBufFixedNoOut(u64 inval, const void* buf, size_t size, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, + .buffers = { { buf, size } }, + ); +} + +static Result _hidsysCmdInAddrInBufFixedNoOut(BtdrvAddress addr, const void* buf, size_t size, u32 cmd_id) { + return serviceDispatchIn(&g_hidsysSrv, cmd_id, addr, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .buffers = { { buf, size } }, ); } @@ -142,23 +169,56 @@ static Result _hidsysCmdInBufOutBool(const void* buf, size_t size, bool *out, u3 return rc; } -static Result _hidsysCmdInU32InBufNoOut(u32 inval, const void* buf, size_t size, u32 cmd_id) { +static Result _hidsysCmdInU32InBufFixedNoOut(u32 inval, const void* buf, size_t size, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .buffers = { { buf, size } }, ); } -static Result _hidsysCmdInU32OutBuf(u32 inval, void* buf, size_t size, u32 cmd_id) { +static Result _hidsysCmdInU32InBufFixedInPtrFixedNoOut(u32 inval, const void* buf0, size_t size0, const void* buf1, size_t size1, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffer_attrs = { + SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_In, + SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_In, + }, + .buffers = { + { buf0, size0 }, + { buf1, size1 }, + }, + ); +} + +static Result _hidsysCmdInU32OutBufFixed(u32 inval, void* buf, size_t size, u32 cmd_id) { + return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, .buffers = { { buf, size } }, ); } -static Result _hidsysCmdInU64OutBuf(u64 inval, void* buf, size_t size, u32 cmd_id) { +static Result _hidsysCmdInU32OutBufFixedOutPtrFixed(u32 inval, void* buf0, size_t size0, void* buf1, size_t size1, u32 cmd_id) { return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, - .buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffer_attrs = { + SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out, + SfBufferAttr_FixedSize | SfBufferAttr_HipcPointer | SfBufferAttr_Out, + }, + .buffers = { + { buf0, size0 }, + { buf1, size1 }, + }, + ); +} + +static Result _hidsysCmdInU64OutBufFixed(u64 inval, void* buf, size_t size, u32 cmd_id) { + return serviceDispatchIn(&g_hidsysSrv, cmd_id, inval, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { buf, size } }, + ); +} + +static Result _hidsysCmdInAddrOutBufFixedNoOut(BtdrvAddress addr, const void* buf, size_t size, u32 cmd_id) { + return serviceDispatchIn(&g_hidsysSrv, cmd_id, addr, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, .buffers = { { buf, size } }, ); } @@ -352,88 +412,206 @@ Result hidsysIsFirmwareUpdateNeededForNotification(HidsysUniquePadId unique_pad_ return rc; } -Result hidsysIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out) { - if (hosversionBefore(10,0,0)) +Result hidsysLegacyIsButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1200); } -Result hidsysDeleteButtonConfig(HidsysUniquePadId unique_pad_id) { - if (hosversionBefore(10,0,0)) +Result hidsysIsButtonConfigSupported(BtdrvAddress addr, bool *out) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrOutBool(addr, out, 1200); +} + +Result hidsysIsButtonConfigEmbeddedSupported(bool *out) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdNoInOutBool(out, 1201); +} + +Result hidsysLegacyDeleteButtonConfig(HidsysUniquePadId unique_pad_id) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return _hidsysCmdInU64NoOut(unique_pad_id.id, 1201); } -Result hidsysSetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag) { - if (hosversionBefore(10,0,0)) +Result hidsysDeleteButtonConfig(BtdrvAddress addr) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrNoOut(addr, 1202); +} + +Result hidsysDeleteButtonConfigEmbedded(void) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdNoIO(1203); +} + +Result hidsysLegacySetButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool flag) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return _hidsysCmdInU64InBoolNoOut(unique_pad_id.id, flag, 1202); } -Result hidsysIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out) { - if (hosversionBefore(10,0,0)) +Result hidsysSetButtonConfigEnabled(BtdrvAddress addr, bool flag) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrInBoolNoOut(addr, flag, 1204); +} + +Result hidsysSetButtonConfigEmbeddedEnabled(bool flag) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInBoolNoOut(flag, 1205); +} + +Result hidsysLegacyIsButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1203); } -Result hidsysSetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config) { - if (hosversionBefore(10,0,0)) +Result hidsysIsButtonConfigEnabled(BtdrvAddress addr, bool *out) { + if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1204); + return _hidsysCmdInAddrInBoolNoOut(addr, out, 1206); } -Result hidsysSetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config) { - if (hosversionBefore(10,0,0)) +Result hidsysIsButtonConfigEmbeddedEnabled(bool *out) { + if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1205); + return _hidsysCmdNoInOutBool(out, 1207); } -Result hidsysSetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config) { - if (hosversionBefore(10,0,0)) +Result hidsysLegacySetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigEmbedded *config) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1206); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1204); } -Result hidsysSetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config) { - if (hosversionBefore(10,0,0)) +Result hidsysSetButtonConfigEmbedded(const HidsysButtonConfigEmbedded *config) { + if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1207); + return serviceDispatch(&g_hidsysSrv, 1208, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, + .buffers = { { config, sizeof(*config) } }, + ); } -Result hidsysGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config) { - if (hosversionBefore(10,0,0)) +Result hidsysLegacySetButtonConfigFull(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigFull *config) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1208); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1205); } -Result hidsysGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config) { - if (hosversionBefore(10,0,0)) +Result hidsysSetButtonConfigFull(BtdrvAddress addr, const HidsysButtonConfigFull *config) { + if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1209); + return _hidsysCmdInAddrInBufFixedNoOut(addr, config, sizeof(*config), 1209); } -Result hidsysGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config) { - if (hosversionBefore(10,0,0)) +Result hidsysLegacySetButtonConfigLeft(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigLeft *config) { + if (!hosversionBetween(10,11)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1210); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1206); } -Result hidsysGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config) { - if (hosversionBefore(10,0,0)) +Result hidsysSetButtonConfigLeft(BtdrvAddress addr, const HidsysButtonConfigLeft *config) { + if (hosversionBefore(11,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1211); + return _hidsysCmdInAddrInBufFixedNoOut(addr, config, sizeof(*config), 12010); +} + +Result hidsysLegacySetButtonConfigRight(HidsysUniquePadId unique_pad_id, const HidsysButtonConfigRight *config) { + if (!hosversionBetween(10,11)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1207); +} + +Result hidsysSetButtonConfigRight(BtdrvAddress addr, const HidsysButtonConfigRight *config) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrInBufFixedNoOut(addr, config, sizeof(*config), 1211); +} + +Result hidsysLegacyGetButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidsysButtonConfigEmbedded *config) { + if (!hosversionBetween(10,11)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1208); +} + +Result hidsysGetButtonConfigEmbedded(HidsysButtonConfigEmbedded *config) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return serviceDispatch(&g_hidsysSrv, 1212, + .buffer_attrs = { SfBufferAttr_FixedSize | SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, + .buffers = { { config, sizeof(*config) } }, + ); +} + +Result hidsysLegacyGetButtonConfigFull(HidsysUniquePadId unique_pad_id, HidsysButtonConfigFull *config) { + if (!hosversionBetween(10,11)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1209); +} + +Result hidsysGetButtonConfigFull(BtdrvAddress addr, HidsysButtonConfigFull *config) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrOutBufFixedNoOut(addr, config, sizeof(*config), 1213); +} + +Result hidsysLegacyGetButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidsysButtonConfigLeft *config) { + if (!hosversionBetween(10,11)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1210); +} + +Result hidsysGetButtonConfigLeft(BtdrvAddress addr, HidsysButtonConfigLeft *config) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrOutBufFixedNoOut(addr, config, sizeof(*config), 1214); +} + +Result hidsysLegacyGetButtonConfigRight(HidsysUniquePadId unique_pad_id, HidsysButtonConfigRight *config) { + if (!hosversionBetween(10,11)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1211); +} + +Result hidsysGetButtonConfigRight(BtdrvAddress addr, HidsysButtonConfigRight *config) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInAddrOutBufFixedNoOut(addr, config, sizeof(*config), 1215); } Result hidsysIsCustomButtonConfigSupported(HidsysUniquePadId unique_pad_id, bool *out) { @@ -499,60 +677,60 @@ Result hidsysIsButtonConfigStorageRightEmpty(s32 index, bool *out) { return _hidsysCmdInU32OutBool((u32)index, out, 1258); } -Result hidsysGetButtonConfigStorageEmbedded(s32 index, HidcfgButtonConfigEmbedded *config) { +Result hidsysGetButtonConfigStorageEmbeddedDeprecated(s32 index, HidcfgButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32OutBuf((u32)index, config, sizeof(*config), 1259); + return _hidsysCmdInU32OutBufFixed((u32)index, config, sizeof(*config), 1259); } -Result hidsysGetButtonConfigStorageFull(s32 index, HidcfgButtonConfigFull *config) { +Result hidsysGetButtonConfigStorageFullDeprecated(s32 index, HidcfgButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32OutBuf((u32)index, config, sizeof(*config), 1260); + return _hidsysCmdInU32OutBufFixed((u32)index, config, sizeof(*config), 1260); } -Result hidsysGetButtonConfigStorageLeft(s32 index, HidcfgButtonConfigLeft *config) { +Result hidsysGetButtonConfigStorageLeftDeprecated(s32 index, HidcfgButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32OutBuf((u32)index, config, sizeof(*config), 1261); + return _hidsysCmdInU32OutBufFixed((u32)index, config, sizeof(*config), 1261); } -Result hidsysGetButtonConfigStorageRight(s32 index, HidcfgButtonConfigRight *config) { +Result hidsysGetButtonConfigStorageRightDeprecated(s32 index, HidcfgButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32OutBuf((u32)index, config, sizeof(*config), 1262); + return _hidsysCmdInU32OutBufFixed((u32)index, config, sizeof(*config), 1262); } -Result hidsysSetButtonConfigStorageEmbedded(s32 index, const HidcfgButtonConfigEmbedded *config) { +Result hidsysSetButtonConfigStorageEmbeddedDeprecated(s32 index, const HidcfgButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32InBufNoOut((u32)index, config, sizeof(*config), 1263); + return _hidsysCmdInU32InBufFixedNoOut((u32)index, config, sizeof(*config), 1263); } -Result hidsysSetButtonConfigStorageFull(s32 index, const HidcfgButtonConfigFull *config) { +Result hidsysSetButtonConfigStorageFullDeprecated(s32 index, const HidcfgButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32InBufNoOut((u32)index, config, sizeof(*config), 1264); + return _hidsysCmdInU32InBufFixedNoOut((u32)index, config, sizeof(*config), 1264); } -Result hidsysSetButtonConfigStorageLeft(s32 index, const HidcfgButtonConfigLeft *config) { +Result hidsysSetButtonConfigStorageLeftDeprecated(s32 index, const HidcfgButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32InBufNoOut((u32)index, config, sizeof(*config), 1265); + return _hidsysCmdInU32InBufFixedNoOut((u32)index, config, sizeof(*config), 1265); } -Result hidsysSetButtonConfigStorageRight(s32 index, const HidcfgButtonConfigRight *config) { +Result hidsysSetButtonConfigStorageRightDeprecated(s32 index, const HidcfgButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU32InBufNoOut((u32)index, config, sizeof(*config), 1266); + return _hidsysCmdInU32InBufFixedNoOut((u32)index, config, sizeof(*config), 1266); } Result hidsysDeleteButtonConfigStorageEmbedded(s32 index) { @@ -590,7 +768,7 @@ Result hidsysIsUsingCustomButtonConfig(HidsysUniquePadId unique_pad_id, bool *ou return _hidsysCmdInU64OutBool(unique_pad_id.id, out, 1271); } -Result hidsysIsAnyCustomButtonConfigEnabled(HidsysUniquePadId unique_pad_id, bool *out) { +Result hidsysIsAnyCustomButtonConfigEnabled(bool *out) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); @@ -622,55 +800,111 @@ Result hidsysSetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, const H if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64InBufNoOut(unique_pad_id.id, config, sizeof(*config), 1276); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1276); } 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.id, config, sizeof(*config), 1277); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1277); } 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.id, config, sizeof(*config), 1278); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1278); } 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.id, config, sizeof(*config), 1279); + return _hidsysCmdInU64InBufFixedNoOut(unique_pad_id.id, config, sizeof(*config), 1279); } Result hidsysGetHidButtonConfigEmbedded(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigEmbedded *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1280); + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1280); } Result hidsysGetHidButtonConfigFull(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigFull *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1281); + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1281); } Result hidsysGetHidButtonConfigLeft(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigLeft *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1282); + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1282); } Result hidsysGetHidButtonConfigRight(HidsysUniquePadId unique_pad_id, HidcfgButtonConfigRight *config) { if (hosversionBefore(10,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); - return _hidsysCmdInU64OutBuf(unique_pad_id.id, config, sizeof(*config), 1283); + return _hidsysCmdInU64OutBufFixed(unique_pad_id.id, config, sizeof(*config), 1283); +} + +Result hidsysGetButtonConfigStorageEmbedded(s32 index, HidcfgButtonConfigEmbedded *config, HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32OutBufFixedOutPtrFixed((u32)index, config, sizeof(*config), name, sizeof(*name), 1284); +} + +Result hidsysGetButtonConfigStorageFull(s32 index, HidcfgButtonConfigFull *config, HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32OutBufFixedOutPtrFixed((u32)index, config, sizeof(*config), name, sizeof(*name), 1285); +} + +Result hidsysGetButtonConfigStorageLeft(s32 index, HidcfgButtonConfigLeft *config, HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32OutBufFixedOutPtrFixed((u32)index, config, sizeof(*config), name, sizeof(*name), 1286); +} + +Result hidsysGetButtonConfigStorageRight(s32 index, HidcfgButtonConfigRight *config, HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32OutBufFixedOutPtrFixed((u32)index, config, sizeof(*config), name, sizeof(*name), 1287); +} + +Result hidsysSetButtonConfigStorageEmbedded(s32 index, const HidcfgButtonConfigEmbedded *config, const HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32InBufFixedInPtrFixedNoOut((u32)index, config, sizeof(*config), name, sizeof(*name), 1288); +} + +Result hidsysSetButtonConfigStorageFull(s32 index, const HidcfgButtonConfigFull *config, const HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32InBufFixedInPtrFixedNoOut((u32)index, config, sizeof(*config), name, sizeof(*name), 1289); +} + +Result hidsysSetButtonConfigStorageLeft(s32 index, const HidcfgButtonConfigLeft *config, const HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32InBufFixedInPtrFixedNoOut((u32)index, config, sizeof(*config), name, sizeof(*name), 1290); +} + +Result hidsysSetButtonConfigStorageRight(s32 index, const HidcfgButtonConfigRight *config, const HidcfgStorageName *name) { + if (hosversionBefore(11,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + + return _hidsysCmdInU32InBufFixedInPtrFixedNoOut((u32)index, config, sizeof(*config), name, sizeof(*name), 1291); }