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); Service* appletGetServiceSession_DebugFunctions(void);
/// Get the cached AppletResourceUserId. /// Get the cached AppletResourceUserId.
Result appletGetAppletResourceUserId(u64 *out); u64 appletGetAppletResourceUserId(void);
/// Get the \ref AppletType. /// Get the \ref AppletType.
AppletType appletGetAppletType(void); 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) IPC_MAKE_CMD_IMPL(static Result _appletGetAppletResourceUserId(u64 *out), &g_appletIWindowController, 1, _appletCmdNoInOutU64, out)
Result appletGetAppletResourceUserId(u64 *out) { u64 appletGetAppletResourceUserId(void) {
if (!serviceIsActive(&g_appletSrv)) return g_appletResourceUserId;
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
*out = g_appletResourceUserId;
return 0;
} }
IPC_MAKE_CMD_IMPL_HOSVER(Result appletGetAppletResourceUserIdOfCallerApplet(u64 *out), &g_appletIWindowController, 2, _appletCmdNoInOutU64, (6,0,0), out) 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) { static Result _appletGetIndirectLayerConsumerHandle(Service* srv, u64 *out) {
Result rc; u64 AppletResourceUserId = appletGetAppletResourceUserId();
u64 AppletResourceUserId;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc)) return rc;
serviceAssumeDomain(srv); serviceAssumeDomain(srv);
return serviceDispatchInOut(srv, 160, AppletResourceUserId, *out, 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); NX_GENERATE_SERVICE_GUARD(auddev);
Result _auddevInitialize(void) { Result _auddevInitialize(void) {
Result rc=0;
u64 aruid = 0;
rc = appletGetAppletResourceUserId(&aruid);
Service audrenMgrSrv; Service audrenMgrSrv;
rc = smGetService(&audrenMgrSrv, "audren:u"); Result rc = smGetService(&audrenMgrSrv, "audren:u");
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, aruid); rc = _auddevGetAudioDeviceService(&audrenMgrSrv, &g_auddevIAudioDevice, appletGetAppletResourceUserId());
serviceClose(&audrenMgrSrv); serviceClose(&audrenMgrSrv);
} }

View File

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

View File

@ -36,13 +36,10 @@ static Result _capssuSetShimLibraryVersion(u64 version) {
if (hosversionBefore(7,0,0)) if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
u64 version; u64 version;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { version, AppletResourceUserId }; } in = { version, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capssuSrv, 32, in, return serviceDispatchIn(&g_capssuSrv, 32, in,
.in_send_pid = true, .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) { static Result _capssuSaveScreenShotEx0(const void* buffer, size_t size, const CapsScreenShotAttribute *attr, AlbumReportOption reportoption, CapsApplicationAlbumEntry *out) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
CapsScreenShotAttribute attr; CapsScreenShotAttribute attr;
u32 reportoption; u32 reportoption;
u32 pad; u32 pad;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *attr, reportoption, 0, AppletResourceUserId }; } in = { *attr, reportoption, 0, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capssuSrv, 203, in, *out, return serviceDispatchInOut(&g_capssuSrv, 203, in, *out,
.buffer_attrs = { SfBufferAttr_HipcMapTransferAllowsNonSecure | SfBufferAttr_HipcMapAlias | SfBufferAttr_In }, .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) { 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 { const struct {
CapsScreenShotAttribute attr; CapsScreenShotAttribute attr;
u32 reportoption; u32 reportoption;
u32 pad; u32 pad;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *attr, reportoption, 0, AppletResourceUserId }; } in = { *attr, reportoption, 0, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capssuSrv, cmd_id, in, *out, return serviceDispatchInOut(&g_capssuSrv, cmd_id, in, *out,
.buffer_attrs = { .buffer_attrs = {

View File

@ -47,13 +47,10 @@ static Result _capsuSetShimLibraryVersion(u64 version) {
if (hosversionBefore(7,0,0)) if (hosversionBefore(7,0,0))
return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer); return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
u64 version; u64 version;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { version, AppletResourceUserId }; } in = { version, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 32, in, return serviceDispatchIn(&g_capsuSrv, 32, in,
.in_send_pid = true, .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) { 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 { const struct {
u8 type; u8 type;
u8 pad[7]; u8 pad[7];
u64 start_timestamp; u64 start_timestamp;
u64 end_timestamp; u64 end_timestamp;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { type, {0}, start_timestamp, end_timestamp, AppletResourceUserId }; } in = { type, {0}, start_timestamp, end_timestamp, appletGetAppletResourceUserId() };
u64 total_out=0; u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, 102, in, total_out, 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) { static Result _capsuDeleteAlbumFileByAruid(u32 cmd_id, u8 type, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
u8 type; u8 type;
u8 pad[7]; u8 pad[7];
CapsApplicationAlbumFileEntry entry; CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { type, {0}, *entry, AppletResourceUserId }; } in = { type, {0}, *entry, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 103, in, return serviceDispatchIn(&g_capsuSrv, 103, in,
.in_send_pid = true, .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) { static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry *entry, u64 *size) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
CapsApplicationAlbumFileEntry entry; CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId }; } in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capsuSrv, 104, in, *size, return serviceDispatchInOut(&g_capsuSrv, 104, in, *size,
.in_send_pid = true, .in_send_pid = true,
@ -113,15 +101,12 @@ static Result _capsuGetAlbumFileSizeByAruid(const CapsApplicationAlbumFileEntry
} }
static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) { static Result _capsuPrecheckToCreateContentsByAruid(u8 type, u64 unk) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
u8 type; u8 type;
u8 pad[7]; u8 pad[7];
u64 unk; u64 unk;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { type, {0}, unk, AppletResourceUserId }; } in = { type, {0}, unk, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 130, in, return serviceDispatchIn(&g_capsuSrv, 130, in,
.in_send_pid = true, .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) { 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 { const struct {
CapsApplicationAlbumFileEntry entry; CapsApplicationAlbumFileEntry entry;
CapsScreenShotDecodeOption option; CapsScreenShotDecodeOption option;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *entry, *option, AppletResourceUserId }; } in = { *entry, *option, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, cmd_id, in, return serviceDispatchIn(&g_capsuSrv, cmd_id, in,
.buffer_attrs = { .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) { 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 { const struct {
u8 type; u8 type;
u8 pad; u8 pad;
@ -164,7 +143,7 @@ static Result _capsuGetAlbumFileListAaeAruid(u32 cmd_id, void* entries, size_t e
CapsAlbumFileDateTime end_datetime; CapsAlbumFileDateTime end_datetime;
u8 pad2[6]; u8 pad2[6];
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { type, 0, *start_datetime, *end_datetime, {0}, AppletResourceUserId }; } in = { type, 0, *start_datetime, *end_datetime, {0}, appletGetAppletResourceUserId() };
u64 total_out=0; u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out, 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) { 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 { const struct {
u8 type; u8 type;
u8 pad; u8 pad;
@ -188,7 +164,7 @@ static Result _capsuGetAlbumFileListAaeUidAruid(u32 cmd_id, void* entries, size_
u8 pad2[6]; u8 pad2[6];
AccountUid uid; AccountUid uid;
u64 AppletResourceUserId; 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; u64 total_out=0;
Result rc = serviceDispatchInOut(&g_capsuSrv, cmd_id, in, total_out, 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) { static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
CapsApplicationAlbumFileEntry entry; CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId }; } in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_capsuSrv, 60002, in, return serviceDispatchIn(&g_capsuSrv, 60002, in,
.in_send_pid = true, .in_send_pid = true,
@ -217,13 +190,10 @@ static Result _capsuOpenAccessorSessionForApplication(Service* srv_out, const Ca
} }
static Result _capsuOpenAlbumMovieReadStream(u64 *stream, const CapsApplicationAlbumFileEntry *entry) { static Result _capsuOpenAlbumMovieReadStream(u64 *stream, const CapsApplicationAlbumFileEntry *entry) {
u64 AppletResourceUserId = 0;
appletGetAppletResourceUserId(&AppletResourceUserId);
const struct { const struct {
CapsApplicationAlbumFileEntry entry; CapsApplicationAlbumFileEntry entry;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { *entry, AppletResourceUserId }; } in = { *entry, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_capsuAccessor, 2001, in, *stream, return serviceDispatchInOut(&g_capsuAccessor, 2001, in, *stream,
.in_send_pid = true, .in_send_pid = true,

View File

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

View File

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

View File

@ -18,7 +18,7 @@ static bool g_irsSensorActivated;
static IrsCameraEntry g_irsCameras[8]; static IrsCameraEntry g_irsCameras[8];
static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out, u64 AppletResourceUserId); static Result _irsGetIrsensorSharedMemoryHandle(Handle* handle_out);
NX_GENERATE_SERVICE_GUARD(irs); NX_GENERATE_SERVICE_GUARD(irs);
@ -29,15 +29,11 @@ Result _irsInitialize(void) {
g_irsSensorActivated = 0; g_irsSensorActivated = 0;
memset(g_irsCameras, 0, sizeof(g_irsCameras)); 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"); rc = smGetService(&g_irsSrv, "irs");
if (R_FAILED(rc)) if (R_FAILED(rc))
return rc; return rc;
rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle, AppletResourceUserId); rc = _irsGetIrsensorSharedMemoryHandle(&sharedmem_handle);
if (R_SUCCEEDED(rc)) { if (R_SUCCEEDED(rc)) {
shmemLoadRemote(&g_irsSharedmem, sharedmem_handle, 0x8000, Perm_R); shmemLoadRemote(&g_irsSharedmem, sharedmem_handle, 0x8000, Perm_R);
@ -131,11 +127,7 @@ Result irsActivateIrsensor(bool activate) {
if (g_irsSensorActivated==activate) return 0; if (g_irsSensorActivated==activate) return 0;
Result rc=0; Result rc=0;
u64 AppletResourceUserId=0; u64 AppletResourceUserId = appletGetAppletResourceUserId();
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = serviceDispatchIn(&g_irsSrv, activate ? 302 : 303, AppletResourceUserId, rc = serviceDispatchIn(&g_irsSrv, activate ? 302 : 303, AppletResourceUserId,
.in_send_pid = true, .in_send_pid = true,
@ -144,7 +136,9 @@ Result irsActivateIrsensor(bool activate) {
return rc; 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, return serviceDispatchIn(&g_irsSrv, 304, AppletResourceUserId,
.in_send_pid = true, .in_send_pid = true,
.out_handle_attrs = { SfOutHandleAttr_HipcCopy }, .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 { const struct {
u32 IrCameraHandle; u32 IrCameraHandle;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId }; } in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_irsSrv, 305, in, return serviceDispatchIn(&g_irsSrv, 305, in,
.in_send_pid = true, .in_send_pid = true,
@ -165,16 +159,11 @@ static Result _irsStopImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserI
Result irsStopImageProcessor(u32 IrCameraHandle) { Result irsStopImageProcessor(u32 IrCameraHandle) {
Result rc=0; Result rc=0;
u64 AppletResourceUserId=0;
IrsCameraEntry *entry = NULL; IrsCameraEntry *entry = NULL;
if (!serviceIsActive(&g_irsSrv)) if (!serviceIsActive(&g_irsSrv))
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _IrsCameraEntryGet(IrCameraHandle, &entry); rc = _IrsCameraEntryGet(IrCameraHandle, &entry);
if (R_FAILED(rc)) if (R_FAILED(rc))
return rc; return rc;
@ -182,19 +171,19 @@ Result irsStopImageProcessor(u32 IrCameraHandle) {
if (entry->transfermem.handle == INVALID_HANDLE) if (entry->transfermem.handle == INVALID_HANDLE)
return MAKERESULT(Module_Libnx, LibnxError_NotInitialized); return MAKERESULT(Module_Libnx, LibnxError_NotInitialized);
rc = _irsStopImageProcessor(IrCameraHandle, AppletResourceUserId); rc = _irsStopImageProcessor(IrCameraHandle);
_IrsCameraEntryFree(entry); _IrsCameraEntryFree(entry);
return rc; return rc;
} }
static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, u64 AppletResourceUserId, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) { static Result _irsRunImageTransferProcessor(u32 IrCameraHandle, IrsPackedImageTransferProcessorConfig *config, TransferMemory *tmem) {
const struct { const struct {
u32 IrCameraHandle; u32 IrCameraHandle;
u32 pad; u32 pad;
u64 AppletResourceUserId; u64 AppletResourceUserId;
IrsPackedImageTransferProcessorConfig config; IrsPackedImageTransferProcessorConfig config;
u64 TransferMemory_size; u64 TransferMemory_size;
} in = { IrCameraHandle, 0, AppletResourceUserId, *config, tmem->size }; } in = { IrCameraHandle, 0, appletGetAppletResourceUserId(), *config, tmem->size };
return serviceDispatchIn(&g_irsSrv, 308, in, return serviceDispatchIn(&g_irsSrv, 308, in,
.in_send_pid = true, .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 irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcessorConfig *config, size_t size) {
Result rc=0; Result rc=0;
u64 AppletResourceUserId=0;
IrsCameraEntry *entry = NULL; IrsCameraEntry *entry = NULL;
IrsPackedImageTransferProcessorConfig packed_config; IrsPackedImageTransferProcessorConfig packed_config;
@ -218,10 +206,6 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso
packed_config.unk_constant = 0xa0003; packed_config.unk_constant = 0xa0003;
packed_config.sensor_res = config->sensor_res; packed_config.sensor_res = config->sensor_res;
rc = appletGetAppletResourceUserId(&AppletResourceUserId);
if (R_FAILED(rc))
return rc;
rc = _IrsCameraEntryAlloc(IrCameraHandle, &entry); rc = _IrsCameraEntryAlloc(IrCameraHandle, &entry);
if (R_FAILED(rc)) if (R_FAILED(rc))
return rc; return rc;
@ -229,18 +213,18 @@ Result irsRunImageTransferProcessor(u32 IrCameraHandle, IrsImageTransferProcesso
rc = tmemCreate(&entry->transfermem, size, Perm_None); rc = tmemCreate(&entry->transfermem, size, Perm_None);
if (R_FAILED(rc)) return rc; 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); if (R_FAILED(rc)) _IrsCameraEntryFree(entry);
return rc; 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 { const struct {
u32 IrCameraHandle; u32 IrCameraHandle;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId }; } in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchInOut(&g_irsSrv, 309, in, *state, return serviceDispatchInOut(&g_irsSrv, 309, in, *state,
.buffer_attrs = { SfBufferAttr_HipcMapAlias | SfBufferAttr_Out }, .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) { void irsGetDefaultImageTransferProcessorConfig(IrsImageTransferProcessorConfig *config) {
memset(config, 0, sizeof(IrsImageTransferProcessorConfig)); memset(config, 0, sizeof(IrsImageTransferProcessorConfig));
@ -276,26 +248,13 @@ Result irsGetIrCameraHandle(u32 *IrCameraHandle, HidControllerID id) {
return serviceDispatchInOut(&g_irsSrv, 311, tmp, *IrCameraHandle); return serviceDispatchInOut(&g_irsSrv, 311, tmp, *IrCameraHandle);
} }
static Result _irsSuspendImageProcessor(u32 IrCameraHandle, u64 AppletResourceUserId) { Result irsSuspendImageProcessor(u32 IrCameraHandle) {
const struct { const struct {
u32 IrCameraHandle; u32 IrCameraHandle;
u64 AppletResourceUserId; u64 AppletResourceUserId;
} in = { IrCameraHandle, AppletResourceUserId }; } in = { IrCameraHandle, appletGetAppletResourceUserId() };
return serviceDispatchIn(&g_irsSrv, 313, in, return serviceDispatchIn(&g_irsSrv, 313, in,
.in_send_pid = true, .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 _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 _nfcCmdNoIO(Service* srv, u32 cmd_id);
static Result _nfcCmdInDevhandleNoOut(Service* srv, const NfcDeviceHandle *handle, 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 _nfpInitialize(NfpServiceType service_type) {
Result rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); 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; g_nfpServiceType = service_type;
switch (g_nfpServiceType) { switch (g_nfpServiceType) {
@ -59,7 +55,7 @@ Result _nfpInitialize(NfpServiceType service_type) {
rc = _nfcCreateInterface(&g_nfpSrv, &g_nfpInterface); rc = _nfcCreateInterface(&g_nfpSrv, &g_nfpInterface);
if (R_SUCCEEDED(rc)) if (R_SUCCEEDED(rc))
rc = _nfcInterfaceInitialize(&g_nfpInterface, aruid, g_nfcVersionData, 2, 0); rc = _nfcInterfaceInitialize(&g_nfpInterface, g_nfcVersionData, 2, 0);
return rc; return rc;
} }
@ -74,10 +70,6 @@ NX_GENERATE_SERVICE_GUARD_PARAMS(nfc, (NfcServiceType service_type), (service_ty
Result _nfcInitialize(NfcServiceType service_type) { Result _nfcInitialize(NfcServiceType service_type) {
Result rc=0; 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; g_nfcServiceType = service_type;
switch (g_nfcServiceType) { switch (g_nfcServiceType) {
@ -96,7 +88,7 @@ Result _nfcInitialize(NfcServiceType service_type) {
rc = _nfcCreateInterface(&g_nfcSrv, &g_nfcInterface); rc = _nfcCreateInterface(&g_nfcSrv, &g_nfcInterface);
if (R_SUCCEEDED(rc)) 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; 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 { const struct {
u64 aruid; u64 aruid;
u64 zero; u64 zero;
} in = { aruid, 0 }; } in = { appletGetAppletResourceUserId(), 0 };
serviceAssumeDomain(srv); serviceAssumeDomain(srv);
return serviceDispatchIn(srv, cmd_id, in, return serviceDispatchIn(srv, cmd_id, in,

View File

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

View File

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