diff --git a/nx/include/switch/services/btm.h b/nx/include/switch/services/btm.h index bdb1c563..f8fc4757 100644 --- a/nx/include/switch/services/btm.h +++ b/nx/include/switch/services/btm.h @@ -515,3 +515,25 @@ Result btmRegisterBleGattDataPath(const BtmBleDataPath *path); */ Result btmUnregisterBleGattDataPath(const BtmBleDataPath *path); +/** + * @brief RegisterAppletResourceUserId + * @note Only available on [5.0.0+]. + * @param[in] AppletResourceUserId AppletResourceUserId + * @param[in] unk Unknown + */ +Result btmRegisterAppletResourceUserId(u64 AppletResourceUserId, u32 unk); + +/** + * @brief UnregisterAppletResourceUserId + * @note Only available on [5.0.0+]. + * @param[in] AppletResourceUserId AppletResourceUserId + */ +Result btmUnregisterAppletResourceUserId(u64 AppletResourceUserId); + +/** + * @brief SetAppletResourceUserId + * @note Only available on [5.0.0+]. + * @param[in] AppletResourceUserId AppletResourceUserId + */ +Result btmSetAppletResourceUserId(u64 AppletResourceUserId); + diff --git a/nx/source/services/btm.c b/nx/source/services/btm.c index db609593..0430eb96 100644 --- a/nx/source/services/btm.c +++ b/nx/source/services/btm.c @@ -58,6 +58,10 @@ static Result _btmCmdInU32NoOut(u32 inval, u32 cmd_id) { return serviceDispatchIn(&g_btmSrv, cmd_id, inval); } +static Result _btmCmdInU64NoOut(u64 inval, u32 cmd_id) { + return serviceDispatchIn(&g_btmSrv, cmd_id, inval); +} + static Result _btmCmdNoInOutU8(u8 *out, u32 cmd_id) { return serviceDispatchOut(&g_btmSrv, cmd_id, *out); } @@ -559,3 +563,32 @@ Result btmUnregisterBleGattDataPath(const BtmBleDataPath *path) { return _btmRegisterBleGattDataPath(path, cmd_id); } +Result btmRegisterAppletResourceUserId(u64 AppletResourceUserId, u32 unk) { + if (hosversionBefore(5,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + u32 cmd_id = hosversionBefore(5,1,0) ? 40 : 57; + + const struct { + u32 unk; + u64 AppletResourceUserId; + } in = { unk, AppletResourceUserId }; + + return serviceDispatchIn(&g_btmSrv, cmd_id, in); +} + +Result btmUnregisterAppletResourceUserId(u64 AppletResourceUserId) { + if (hosversionBefore(5,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + u32 cmd_id = hosversionBefore(5,1,0) ? 41 : 58; + + return _btmCmdInU64NoOut(AppletResourceUserId, cmd_id); +} + +Result btmSetAppletResourceUserId(u64 AppletResourceUserId) { + if (hosversionBefore(5,0,0)) + return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); + u32 cmd_id = hosversionBefore(5,1,0) ? 42 : 59; + + return _btmCmdInU64NoOut(AppletResourceUserId, cmd_id); +} +