Simplify appletGetAppletResourceUserId and related logic

This commit is contained in:
fincs 2020-01-16 19:16:44 +01:00
parent 9c4ab7f09d
commit 7e6ff7e486
No known key found for this signature in database
GPG Key ID: 62C7609ADA219C60
12 changed files with 80 additions and 309 deletions

View File

@ -368,7 +368,7 @@ Service* appletGetServiceSession_DisplayController(void);
Service* appletGetServiceSession_DebugFunctions(void);
/// Get the cached AppletResourceUserId.
Result appletGetAppletResourceUserId(u64 *out);
u64 appletGetAppletResourceUserId(void);
/// Get the \ref AppletType.
AppletType appletGetAppletType(void);

View File

@ -1169,12 +1169,8 @@ Result appletSetApplicationAlbumUserData(const void* buffer, size_t size) {
IPC_MAKE_CMD_IMPL(static Result _appletGetAppletResourceUserId(u64 *out), &g_appletIWindowController, 1, _appletCmdNoInOutU64, out)
Result appletGetAppletResourceUserId(u64 *out) {
if (!serviceIsActive(&g_appletSrv))
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
*out = g_appletResourceUserId;
return 0;
u64 appletGetAppletResourceUserId(void) {
return g_appletResourceUserId;
}
IPC_MAKE_CMD_IMPL_HOSVER(Result appletGetAppletResourceUserIdOfCallerApplet(u64 *out), &g_appletIWindowController, 2, _appletCmdNoInOutU64, (6,0,0), out)
@ -1432,11 +1428,7 @@ static Result _appletCreateLibraryApplet(Service* srv_out, AppletId id, LibApple
}
static Result _appletGetIndirectLayerConsumerHandle(Service* srv, u64 *out) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc)) return rc;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
serviceAssumeDomain(srv);
return serviceDispatchInOut(srv, 160, AppletResourceUserId, *out,

View File

@ -13,14 +13,10 @@ static Result _auddevGetAudioDeviceService(Service* srv, Service* srv_out, u64 a
NX_GENERATE_SERVICE_GUARD(auddev);
Result _auddevInitialize(void) {
Result rc=0;
u64 aruid = 0;
rc = appletGetAppletResourceUserId(&aruid);
Service audrenMgrSrv;
rc = smGetService(&audrenMgrSrv, "audren:u");
Result rc = smGetService(&audrenMgrSrv, "audren:u");
if (R_SUCCEEDED(rc)) {
rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, aruid);
rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, appletGetAppletResourceUserId());
serviceClose(&audrenMgrSrv);
}

View File

@ -29,7 +29,7 @@ typedef struct {
u32 revision;
} AudioRendererParameter;
static Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param, u64 aruid);
static Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param);
static Result _audrenGetWorkBufferSize(Service* srv, const AudioRendererParameter* param, u64* out_size);
static Result _audrenQuerySystemEvent(Event* out_event);
@ -76,11 +76,6 @@ Result _audrenInitialize(const AudioRendererConfig* config) {
param.effect_count = config->num_effects;
param.revision = g_audrenRevision;
// Get aruid
u64 aruid = 0;
rc = appletGetAppletResourceUserId(&aruid);
//if (R_FAILED(rc)) return rc; // apparently audren still inits fine with aruid = 0 so this isn't a fatal error condition
// Open IAudioRendererManager
Service audrenMgrSrv;
rc = smGetService(&audrenMgrSrv, "audren:u");
@ -94,7 +89,7 @@ Result _audrenInitialize(const AudioRendererConfig* config) {
rc = tmemCreate(&g_audrenWorkBuf, workBufSize, Perm_None);
if (R_SUCCEEDED(rc)) {
// Create the IAudioRenderer service
rc = _audrenOpenAudioRenderer(&audrenMgrSrv, &g_audrenIAudioRenderer, &param, aruid);
rc = _audrenOpenAudioRenderer(&audrenMgrSrv, &g_audrenIAudioRenderer, &param);
if (R_SUCCEEDED(rc)) {
// Finally, get the handle to the system event
rc = _audrenQuerySystemEvent(&g_audrenEvent);
@ -144,13 +139,13 @@ void audrenWaitFrame(void) {
eventWait(&g_audrenEvent, U64_MAX);
}
Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param, u64 aruid) {
Result _audrenOpenAudioRenderer(Service* srv, Service* srv_out, const AudioRendererParameter* param) {
const struct {
AudioRendererParameter param;
u32 pad;
u64 work_buffer_size;
u64 aruid;
} in = { *param, 0, g_audrenWorkBuf.size, aruid };
} in = { *param, 0, g_audrenWorkBuf.size, appletGetAppletResourceUserId() };
return serviceDispatchIn(srv, 0, in,
.in_send_pid = true,

View File

@ -36,13 +36,10 @@ static Result _capssuSetShimLibraryVersion(u64 version) {
if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u64 version;
u64 AppletResourceUserId;
} in = { version, AppletResourceUserId };
} in = { version, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capssuSrv, 32, in,
.in_send_pid = true,
@ -50,15 +47,12 @@ static Result _capssuSetShimLibraryVersion(u64 version) {
}
static Result _capssuSaveScreenShotEx0(const void* buffer, size_t size, const CapsScreenShotAttribute *attr, AlbumReportOption reportoption, CapsApplicationAlbumEntry *out) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsScreenShotAttribute attr;
u32 reportoption;
u32 pad;
u64 AppletResourceUserId;
} in = { *attr, reportoption, 0, AppletResourceUserId };
} in = { *attr, reportoption, 0, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capssuSrv, 203, in, *out,
.buffer_attrs = { SfBufferAttr_HipcMapTransferAllowsNonSecure | SfBufferAttr_HipcMapAlias | SfBufferAttr_In },
@ -68,15 +62,12 @@ static Result _capssuSaveScreenShotEx0(const void* buffer, size_t size, const Ca
}
static Result _capssuSaveScreenShotEx(u32 cmd_id, bool pid, const void* argbuf, size_t argbuf_size, const void* buffer, size_t size, const CapsScreenShotAttribute *attr, AlbumReportOption reportoption, CapsApplicationAlbumEntry *out) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsScreenShotAttribute attr;
u32 reportoption;
u32 pad;
u64 AppletResourceUserId;
} in = { *attr, reportoption, 0, AppletResourceUserId };
} in = { *attr, reportoption, 0, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capssuSrv, cmd_id, in, *out,
.buffer_attrs = {

View File

@ -47,13 +47,10 @@ static Result _capsuSetShimLibraryVersion(u64 version) {
if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u64 version;
u64 AppletResourceUserId;
} in = { version, AppletResourceUserId };
} in = { version, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 32, in,
.in_send_pid = true,
@ -61,16 +58,13 @@ static Result _capsuSetShimLibraryVersion(u64 version) {
}
static Result _capsuGetAlbumFileList0AafeAruidDeprecated(void* entries, size_t entrysize, s32 count, u8 type, u64 start_timestamp, u64 end_timestamp, s32 *total_entries) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u8 type;
u8 pad[7];
u64 start_timestamp;
u64 end_timestamp;
u64 AppletResourceUserId;
} in = { type, {0}, start_timestamp, end_timestamp, AppletResourceUserId };
} in = { type, {0}, start_timestamp, end_timestamp, appletGetAppletResourceUserId() };
u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, 102, in, total_out,
@ -83,15 +77,12 @@ static Result _capsuGetAlbumFileList0AafeAruidDeprecated(void* entries, size_t e
}
static Result _capsuDeleteAlbumFileByAruid(u32 cmd_id, u8 type, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u8 type;
u8 pad[7];
CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId;
} in = { type, {0}, *entry, AppletResourceUserId };
} in = { type, {0}, *entry, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 103, in,
.in_send_pid = true,
@ -99,13 +90,10 @@ static Result _capsuDeleteAlbumFileByAruid(u32 cmd_id, u8 type, const CapsApplic
}
static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry *entry, u64 *size) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId };
} in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capsuSrv, 104, in, *size,
.in_send_pid = true,
@ -113,15 +101,12 @@ static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry
}
static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u8 type;
u8 pad[7];
u64 unk;
u64 AppletResourceUserId;
} in = { type, {0}, unk, AppletResourceUserId };
} in = { type, {0}, unk, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 130, in,
.in_send_pid = true,
@ -129,14 +114,11 @@ static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) {
}
static Result _capsuLoadAlbumScreenShotImageByAruid(u32 cmd_id, CapsLoadAlbumScreenShotImageOutputForApplication *out, void* image, size_t image_size, void* workbuf, size_t workbuf_size, const CapsApplicationAlbumFileEntry *entry, const CapsScreenShotDecodeOption *option) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsApplicationAlbumFileEntry entry;
CapsScreenShotDecodeOption option;
u64 AppletResourceUserId;
} in = { *entry, *option, AppletResourceUserId };
} in = { *entry, *option, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, cmd_id, in,
.buffer_attrs = {
@ -154,9 +136,6 @@ static Result _capsuLoadAlbumScreenShotImageByAruid(u32 cmd_id, CapsLoadAlbumScr
}
static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t entrysize, s32 count, u8 type, const CapsAlbumFileDateTime *start_datetime, const CapsAlbumFileDateTime *end_datetime, s32 *total_entries) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u8 type;
u8 pad;
@ -164,7 +143,7 @@ static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t e
CapsAlbumFileDateTime end_datetime;
u8 pad2[6];
u64 AppletResourceUserId;
} in = { type, 0, *start_datetime, *end_datetime, {0}, AppletResourceUserId };
} in = { type, 0, *start_datetime, *end_datetime, {0}, appletGetAppletResourceUserId() };
u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out,
@ -177,9 +156,6 @@ static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t e
}
static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_t entrysize, s32 count, u8 type, const CapsAlbumFileDateTime *start_datetime, const CapsAlbumFileDateTime *end_datetime, AccountUid uid, s32 *total_entries) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
u8 type;
u8 pad;
@ -188,7 +164,7 @@ static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_
u8 pad2[6];
AccountUid uid;
u64 AppletResourceUserId;
} in = { type, 0, *start_datetime, *end_datetime, {0}, uid, AppletResourceUserId };
} in = { type, 0, *start_datetime, *end_datetime, {0}, uid, appletGetAppletResourceUserId() };
u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out,
@ -201,13 +177,10 @@ static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_
}
static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId };
} in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 60002, in,
.in_send_pid = true,
@ -217,13 +190,10 @@ static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const Ca
}
static Result _capsuOpenAlbumMovieReadStream(u64 *stream, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct {
CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId };
} in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capsuAccessor, 2001, in, *stream,
.in_send_pid = true,

View File

@ -40,7 +40,7 @@ static TransferMemory g_sevenSixAxisSensorTmem1;
static RwLock g_hidLock;
static Result _hidCreateAppletResource(Service* srv, Service* srv_out, u64 AppletResourceUserId);
static Result _hidCreateAppletResource(Service* srv, Service* srv_out);
static Result _hidGetSharedMemoryHandle(Service* srv, Handle* handle_out);
static Result _hidActivateNpad(void);
@ -65,15 +65,11 @@ Result _hidInitialize(void) {
Result rc=0;
Handle sharedmem_handle;
// If this failed (for example because we're a sysmodule) AppletResourceUserId stays zero
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
rc = smGetService(&g_hidSrv, "hid");
if (R_FAILED(rc))
return rc;
rc = _hidCreateAppletResource(&g_hidSrv, &g_hidIAppletResource, AppletResourceUserId);
rc = _hidCreateAppletResource(&g_hidSrv, &g_hidIAppletResource);
if (R_SUCCEEDED(rc))
rc = _hidGetSharedMemoryHandle(&g_hidIAppletResource, &sharedmem_handle);
@ -649,12 +645,7 @@ static Result _hidCmdGetSession(Service* srv_out, u32 cmd_id) {
}
static Result _hidCmdWithNoInput(u32 cmd_id) {
Result rc=0;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchIn(&g_hidSrv, cmd_id, AppletResourceUserId,
.in_send_pid = true,
@ -674,17 +665,10 @@ static Result _hidCmdInU32NoOut(Service* srv, u32 inval, u32 cmd_id) {
}
static Result _hidCmdWithInputU32(u32 inval, u32 cmd_id) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 inval;
u64 AppletResourceUserId;
} in = { inval, AppletResourceUserId };
} in = { inval, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, cmd_id, in,
.in_send_pid = true,
@ -692,17 +676,10 @@ static Result _hidCmdWithInputU32(u32 inval, u32 cmd_id) {
}
static Result _hidCmdWithInputU64(u64 inval, u32 cmd_id) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u64 AppletResourceUserId;
u64 inval;
} in = { AppletResourceUserId, inval };
} in = { appletGetAppletResourceUserId(), inval };
return serviceDispatchIn(&g_hidSrv, cmd_id, in,
.in_send_pid = true,
@ -710,12 +687,7 @@ static Result _hidCmdWithInputU64(u64 inval, u32 cmd_id) {
}
static Result _hidCmdOutU32(u32 *out, u32 cmd_id) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchInOut(&g_hidSrv, cmd_id, AppletResourceUserId, *out,
.in_send_pid = true,
@ -723,12 +695,7 @@ static Result _hidCmdOutU32(u32 *out, u32 cmd_id) {
}
static Result _hidCmdOutU64(u64 *out, u32 cmd_id) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchInOut(&g_hidSrv, cmd_id, AppletResourceUserId, *out,
.in_send_pid = true,
@ -746,7 +713,9 @@ static Result _hidCmdNoInOutBool(bool *out, u32 cmd_id) {
return rc;
}
static Result _hidCreateAppletResource(Service* srv, Service* srv_out, u64 AppletResourceUserId) {
static Result _hidCreateAppletResource(Service* srv, Service* srv_out) {
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchIn(srv, 0, AppletResourceUserId,
.in_send_pid = true,
.out_num_objects = 1,
@ -762,20 +731,13 @@ Result hidSetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float unk0,
if (unk0 < 0.0f || unk0 > 1.0f)
return MAKERESULT(Module_Libnx, LibnxError_BadInput);
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 SixAxisSensorHandle;
float unk0;
float unk1;
u32 pad;
u64 AppletResourceUserId;
} in = { SixAxisSensorHandle, unk0, unk1, 0, AppletResourceUserId };
} in = { SixAxisSensorHandle, unk0, unk1, 0, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, 70, in,
.in_send_pid = true,
@ -784,17 +746,12 @@ Result hidSetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float unk0,
Result hidGetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle, float *unk0, float *unk1) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 SixAxisSensorHandle;
u32 pad;
u64 AppletResourceUserId;
} in = { SixAxisSensorHandle, 0, AppletResourceUserId };
} in = { SixAxisSensorHandle, 0, appletGetAppletResourceUserId() };
struct {
float unk0;
@ -814,18 +771,11 @@ Result hidResetSixAxisSensorFusionParameters(u32 SixAxisSensorHandle) {
}
Result hidSetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDriftMode mode) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 SixAxisSensorHandle;
u32 mode;
u64 AppletResourceUserId;
} in = { SixAxisSensorHandle, mode, AppletResourceUserId };
} in = { SixAxisSensorHandle, mode, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, 79, in,
.in_send_pid = true,
@ -834,17 +784,12 @@ Result hidSetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDri
Result hidGetGyroscopeZeroDriftMode(u32 SixAxisSensorHandle, HidGyroscopeZeroDriftMode *mode) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 SixAxisSensorHandle;
u32 pad;
u64 AppletResourceUserId;
} in = { SixAxisSensorHandle, 0, AppletResourceUserId };
} in = { SixAxisSensorHandle, 0, appletGetAppletResourceUserId() };
u32 tmp=0;
rc = serviceDispatchInOut(&g_hidSrv, 80, in, tmp,
@ -870,16 +815,11 @@ Result hidGetSupportedNpadStyleSet(HidControllerType *type) {
}
Result hidSetSupportedNpadIdType(HidControllerID *buf, size_t count) {
Result rc;
u64 AppletResourceUserId;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
size_t i;
u32 tmpval=0;
u32 tmpbuf[10];
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
if (count > 10)
return MAKERESULT(Module_Libnx, LibnxError_OutOfMemory);
@ -925,18 +865,13 @@ static Result _hidDeactivateNpad(void) {
Result hidAcquireNpadStyleSetUpdateEventHandle(HidControllerID id, Event* out_event, bool autoclear) {
Result rc;
Handle tmp_handle = INVALID_HANDLE;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 id;
u32 pad;
u64 AppletResourceUserId;
u64 event_ptr; // Official sw sets this to a ptr, which the sysmodule doesn't seem to use.
} in = { hidControllerIDToOfficial(id), 0, AppletResourceUserId, 0 };
} in = { hidControllerIDToOfficial(id), 0, appletGetAppletResourceUserId(), 0 };
rc = serviceDispatchIn(&g_hidSrv, 106, in,
.in_send_pid = true,
@ -967,17 +902,10 @@ Result hidSetNpadJoyAssignmentModeDual(HidControllerID id) {
}
Result hidMergeSingleJoyAsDualJoy(HidControllerID id0, HidControllerID id1) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 id0, id1;
u64 AppletResourceUserId;
} in = { hidControllerIDToOfficial(id0), hidControllerIDToOfficial(id1), AppletResourceUserId };
} in = { hidControllerIDToOfficial(id0), hidControllerIDToOfficial(id1), appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, 125, in,
.in_send_pid = true,
@ -997,19 +925,12 @@ Result hidGetVibrationDeviceInfo(const u32 *VibrationDeviceHandle, HidVibrationD
}
Result hidSendVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue *VibrationValue) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 VibrationDeviceHandle;
HidVibrationValue VibrationValue;
u32 pad;
u64 AppletResourceUserId;
} in = { *VibrationDeviceHandle, *VibrationValue, 0, AppletResourceUserId };
} in = { *VibrationDeviceHandle, *VibrationValue, 0, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, 201, in,
.in_send_pid = true,
@ -1017,17 +938,10 @@ Result hidSendVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue
}
Result hidGetActualVibrationValue(const u32 *VibrationDeviceHandle, HidVibrationValue *VibrationValue) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 VibrationDeviceHandle;
u64 AppletResourceUserId;
} in = { *VibrationDeviceHandle, AppletResourceUserId };
} in = { *VibrationDeviceHandle, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_hidSrv, 202, in, *VibrationValue,
.in_send_pid = true,
@ -1043,12 +957,7 @@ Result hidIsVibrationPermitted(bool *flag) {
}
Result hidSendVibrationValues(const u32 *VibrationDeviceHandles, HidVibrationValue *VibrationValues, s32 count) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchIn(&g_hidSrv, 206, AppletResourceUserId,
.buffer_attrs = {
@ -1067,16 +976,11 @@ Result hidIsVibrationDeviceMounted(const u32 *VibrationDeviceHandle, bool *flag)
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u32 VibrationDeviceHandle;
u64 AppletResourceUserId;
} in = { *VibrationDeviceHandle, AppletResourceUserId };
} in = { *VibrationDeviceHandle, appletGetAppletResourceUserId() };
u8 tmp=0;
rc = serviceDispatchInOut(&g_hidSrv, 211, in, tmp,
@ -1224,18 +1128,11 @@ Result hidStopSevenSixAxisSensor(void) {
}
static Result _hidInitializeSevenSixAxisSensor(TransferMemory *tmem0, TransferMemory *tmem1) {
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
u64 AppletResourceUserId;
u64 size0;
u64 size1;
} in = { AppletResourceUserId, tmem0->size, tmem1->size };
} in = { appletGetAppletResourceUserId(), tmem0->size, tmem1->size };
return serviceDispatchIn(&g_hidSrv, 306, in,
.in_send_pid = true,
@ -1300,17 +1197,10 @@ Result hidSetSevenSixAxisSensorFusionStrength(float strength) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
const struct {
float strength;
u64 AppletResourceUserId;
} in = { strength, AppletResourceUserId };
} in = { strength, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_hidSrv, 308, in,
.in_send_pid = true,
@ -1321,12 +1211,7 @@ Result hidGetSevenSixAxisSensorFusionStrength(float *strength) {
if (hosversionBefore(5,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
Result rc;
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
AppletResourceUserId = 0;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchInOut(&g_hidSrv, 309, AppletResourceUserId, *strength,
.in_send_pid = true,

View File

@ -15,12 +15,9 @@ Result _hidsysInitialize(void) {
Result rc = smGetService(&g_hidsysSrv, "hid:sys");
if (R_FAILED(rc))
return rc;
rc = appletGetAppletResourceUserId(&g_hidsysAppletResourceUserId);
if (R_FAILED(rc))
g_hidsysAppletResourceUserId = 0;
return 0;
g_hidsysAppletResourceUserId = appletGetAppletResourceUserId();
return 0;
}
void _hidsysCleanup(void) {

View File

@ -18,7 +18,7 @@ static bool g_irsSensorActivated;
static IrsCameraEntry g_irsCameras[8];
static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletResourceUserId);
static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out);
NX_GENERATE_SERVICE_GUARD(irs);
@ -29,15 +29,11 @@ Result _irsInitialize(void) {
g_irsSensorActivated = 0;
memset(g_irsCameras, 0, sizeof(g_irsCameras));
// If this failed (for example because we're a sysmodule) AppletResourceUserId stays zero
u64 AppletResourceUserId=0;
appletGetAppletResourceUserId(&AppletResourceUserId);
rc = smGetService(&g_irsSrv, "irs");
if (R_FAILED(rc))
return rc;
rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle, AppletResourceUserId);
rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle);
if (R_SUCCEEDED(rc)) {
shmemLoadRemote(&g_irsSharedmem, sharedmem_handle, 0x8000, Perm_R);
@ -131,11 +127,7 @@ Result irsActivateIrsensor(bool activate) {
if (g_irsSensorActivated==activate) return 0;
Result rc=0;
u64 AppletResourceUserId=0;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
u64 AppletResourceUserId = appletGetAppletResourceUserId();
rc = serviceDispatchIn(&g_irsSrv, activate ? 302 : 303, AppletResourceUserId,
.in_send_pid = true,
@ -144,7 +136,9 @@ Result irsActivateIrsensor(bool activate) {
return rc;
}
static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletResourceUserId) {
static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out) {
u64 AppletResourceUserId = appletGetAppletResourceUserId();
return serviceDispatchIn(&g_irsSrv, 304, AppletResourceUserId,
.in_send_pid = true,
.out_handle_attrs = { SfOutHandleAttr_HipcCopy },
@ -152,11 +146,11 @@ static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletRe
);
}
static Result _irsStopImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserId) {
static Result _irsStopImageProcessor(u32 IrCameraHandle) {
const struct {
u32 IrCameraHandle;
u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId };
} in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_irsSrv, 305, in,
.in_send_pid = true,
@ -165,16 +159,11 @@ static Result _irsStopImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserI
Result irsStopImageProcessor(u32 IrCameraHandle) {
Result rc=0;
u64 AppletResourceUserId=0;
IrsCameraEntry *entry = NULL;
if (!serviceIsActive(&g_irsSrv))
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _IrsCameraEntryGet(IrCameraHandle, &entry);
if (R_FAILED(rc))
return rc;
@ -182,19 +171,19 @@ Result irsStopImageProcessor(u32 IrCameraHandle) {
if (entry->transfermem.handle == INVALID_HANDLE)
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
rc = _irsStopImageProcessor(IrCameraHandle, AppletResourceUserId);
rc = _irsStopImageProcessor(IrCameraHandle);
_IrsCameraEntryFree(entry);
return rc;
}
static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, u64 AppletResourceUserId, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) {
static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) {
const struct {
u32 IrCameraHandle;
u32 pad;
u64 AppletResourceUserId;
IrsPackedImageTransferProcessorConfig config;
u64 TransferMemory_size;
} in = { IrCameraHandle, 0, AppletResourceUserId, *config, tmem->size };
} in = { IrCameraHandle, 0, appletGetAppletResourceUserId(), *config, tmem->size };
return serviceDispatchIn(&g_irsSrv, 308, in,
.in_send_pid = true,
@ -205,7 +194,6 @@ static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, u64 AppletResour
Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcessorConfig *config, size_t size) {
Result rc=0;
u64 AppletResourceUserId=0;
IrsCameraEntry *entry = NULL;
IrsPackedImageTransferProcessorConfig packed_config;
@ -218,10 +206,6 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso
packed_config.unk_constant = 0xa0003;
packed_config.sensor_res = config->sensor_res;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _IrsCameraEntryAlloc(IrCameraHandle, &entry);
if (R_FAILED(rc))
return rc;
@ -229,18 +213,18 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso
rc = tmemCreate(&entry->transfermem, size, Perm_None);
if (R_FAILED(rc)) return rc;
rc = _irsRunImageTransferProcessor(IrCameraHandle, AppletResourceUserId, &packed_config, &entry->transfermem);
rc = _irsRunImageTransferProcessor(IrCameraHandle, &packed_config, &entry->transfermem);
if (R_FAILED(rc)) _IrsCameraEntryFree(entry);
return rc;
}
static Result _irsGetImageTransferProcessorState(u32 IrCameraHandle, u64 AppletResourceUserId, void* buffer, size_t size, IrsImageTransferProcessorState *state) {
Result irsGetImageTransferProcessorState(u32 IrCameraHandle, void* buffer, size_t size, IrsImageTransferProcessorState *state) {
const struct {
u32 IrCameraHandle;
u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId };
} in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_irsSrv, 309, in, *state,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out },
@ -249,18 +233,6 @@ static Result _irsGetImageTransferProcessorState(u32 IrCameraHandle, u64 AppletR
);
}
Result irsGetImageTransferProcessorState(u32 IrCameraHandle, void* buffer, size_t size, IrsImageTransferProcessorState *state) {
Result rc=0;
u64 AppletResourceUserId=0;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _irsGetImageTransferProcessorState(IrCameraHandle, AppletResourceUserId, buffer, size, state);
return rc;
}
void irsGetDefaultImageTransferProcessorConfig(IrsImageTransferProcessorConfig *config) {
memset(config, 0, sizeof(IrsImageTransferProcessorConfig));
@ -276,26 +248,13 @@ Result irsGetIrCameraHandle(u32 *IrCameraHandle, HidControllerID id) {
return serviceDispatchInOut(&g_irsSrv, 311, tmp, *IrCameraHandle);
}
static Result _irsSuspendImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserId) {
Result irsSuspendImageProcessor(u32 IrCameraHandle) {
const struct {
u32 IrCameraHandle;
u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId };
} in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_irsSrv, 313, in,
.in_send_pid = true,
);
}
Result irsSuspendImageProcessor(u32 IrCameraHandle) {
Result rc=0;
u64 AppletResourceUserId=0;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _irsSuspendImageProcessor(IrCameraHandle, AppletResourceUserId);
return rc;
}

View File

@ -23,7 +23,7 @@ static const NfcRequiredMcuVersionData g_nfcVersionData[2] = {
};
static Result _nfcCreateInterface(Service* srv, Service* srv_out);
static Result _nfcInterfaceInitialize(Service* srv, u64 aruid, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id);
static Result _nfcInterfaceInitialize(Service* srv, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id);
static Result _nfcCmdNoIO(Service* srv, u32 cmd_id);
static Result _nfcCmdInDevhandleNoOut(Service* srv, const NfcDeviceHandle *handle, u32 cmd_id);
@ -34,10 +34,6 @@ NX_GENERATE_SERVICE_GUARD_PARAMS(nfp, (NfpServiceType service_type), (service_ty
Result _nfpInitialize(NfpServiceType service_type) {
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
u64 aruid = 0;
// If this fails (for example because we're a sysmodule) aruid stays zero
appletGetAppletResourceUserId(&aruid);
g_nfpServiceType = service_type;
switch (g_nfpServiceType) {
@ -59,7 +55,7 @@ Result _nfpInitialize(NfpServiceType service_type) {
rc = _nfcCreateInterface(&g_nfpSrv, &g_nfpInterface);
if (R_SUCCEEDED(rc))
rc = _nfcInterfaceInitialize(&g_nfpInterface, aruid, g_nfcVersionData, 2, 0);
rc = _nfcInterfaceInitialize(&g_nfpInterface, g_nfcVersionData, 2, 0);
return rc;
}
@ -74,10 +70,6 @@ NX_GENERATE_SERVICE_GUARD_PARAMS(nfc, (NfcServiceType service_type), (service_ty
Result _nfcInitialize(NfcServiceType service_type) {
Result rc=0;
u64 aruid = 0;
// If this fails (for example because we're a sysmodule) aruid stays zero
appletGetAppletResourceUserId(&aruid);
g_nfcServiceType = service_type;
switch (g_nfcServiceType) {
@ -96,7 +88,7 @@ Result _nfcInitialize(NfcServiceType service_type) {
rc = _nfcCreateInterface(&g_nfcSrv, &g_nfcInterface);
if (R_SUCCEEDED(rc))
rc = _nfcInterfaceInitialize(&g_nfcInterface, aruid, g_nfcVersionData, 2, hosversionBefore(4,0,0) ? 0 : 400);
rc = _nfcInterfaceInitialize(&g_nfcInterface, g_nfcVersionData, 2, hosversionBefore(4,0,0) ? 0 : 400);
return rc;
}
@ -199,11 +191,11 @@ static Result _nfcCmdInDevhandleOutBuffer(Service* srv, const NfcDeviceHandle *h
);
}
static Result _nfcInterfaceInitialize(Service* srv, u64 aruid, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id) {
static Result _nfcInterfaceInitialize(Service* srv, const NfcRequiredMcuVersionData *version, s32 count, u32 cmd_id) {
const struct {
u64 aruid;
u64 zero;
} in = { aruid, 0 };
} in = { appletGetAppletResourceUserId(), 0 };
serviceAssumeDomain(srv);
return serviceDispatchIn(srv, cmd_id, in,

View File

@ -21,7 +21,6 @@ NX_GENERATE_SERVICE_GUARD(nv);
Result _nvInitialize(void) {
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput);
u64 AppletResourceUserId = 0;
switch (appletGetAppletType()) {
case AppletType_None:
@ -56,10 +55,10 @@ Result _nvInitialize(void) {
rc = serviceCloneEx(&g_nvSrv, 1, &g_nvSrvClone);
if (R_SUCCEEDED(rc)) {
// Send aruid if available (non-fatal condition if get-aruid fails)
Result aruid_rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_SUCCEEDED(aruid_rc))
rc = _nvSetClientPID(AppletResourceUserId);
// Send aruid if available
u64 aruid = appletGetAppletResourceUserId();
if (aruid)
rc = _nvSetClientPID(aruid);
}
}

View File

@ -285,7 +285,7 @@ Result viSetContentVisibility(bool v) {
return serviceDispatchIn(&g_viIManagerDisplayService, 7000, tmp);
}
static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u64 aruid, u8 native_window[0x100], u64 *native_window_size) {
static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u8 native_window[0x100], u64 *native_window_size) {
if (!display->initialized) {
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
}
@ -294,7 +294,7 @@ static Result _viOpenLayer(const ViDisplay *display, u64 layer_id, u64 aruid, u8
ViDisplayName display_name;
u64 layer_id;
u64 aruid;
} in = { display->display_name, layer_id, aruid };
} in = { display->display_name, layer_id, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_viIApplicationDisplayService, 2020, in, *native_window_size,
.in_send_pid = true,
.buffer_attrs = { SfBufferAttr_Out | SfBufferAttr_HipcMapAlias },
@ -359,20 +359,17 @@ Result viCreateLayer(const ViDisplay *display, ViLayer *layer) {
alignas(8) u8 native_window_raw[0x100];
u64 native_window_size = 0;
u64 aruid = 0;
appletGetAppletResourceUserId(&aruid); // failure is not fatal
memset(layer, 0, sizeof(ViLayer));
layer->layer_id = __nx_vi_layer_id;
Result rc = 0;
if (!layer->layer_id && aruid) {
if (!layer->layer_id && appletGetAppletResourceUserId()) {
rc = appletCreateManagedDisplayLayer(&layer->layer_id);
if (R_FAILED(rc)) return rc;
}
if (layer->layer_id) {
rc = _viOpenLayer(display, layer->layer_id, aruid, native_window_raw, &native_window_size);
rc = _viOpenLayer(display, layer->layer_id, native_window_raw, &native_window_size);
} else {
layer->stray_layer = true;
rc = _viCreateStrayLayer(display, __nx_vi_stray_layer_flags, &layer->layer_id, native_window_raw, &native_window_size);
@ -468,16 +465,14 @@ Result viSetLayerScalingMode(ViLayer *layer, ViScalingMode scaling_mode) {
}
Result viGetIndirectLayerImageMap(void* buffer, size_t size, s32 width, s32 height, u64 IndirectLayerConsumerHandle, u64 *out_size, u64 *out_stride) {
u64 aruid = 0;
Result rc = appletGetAppletResourceUserId(&aruid);
if (R_FAILED(rc)) return rc;
Result rc = 0;
const struct {
s64 width;
s64 height;
u64 IndirectLayerConsumerHandle;
u64 aruid;
} in = { width, height, IndirectLayerConsumerHandle, aruid };
} in = { width, height, IndirectLayerConsumerHandle, appletGetAppletResourceUserId() };
struct {
s64 size;