[3001] Unknown3001(unknown<0x28>, buffer<unknown, 5>) -> buffer<unknown, 0x46>
[0] GetUserCount() -> u32
[1] GetUserExistence(nn::account::Uid) -> b8
[2] ListAllUsers() -> buffer<nn::account::Uid, 0xa>
[3] ListOpenUsers() -> buffer<nn::account::Uid, 0xa>
[4] GetLastOpenedUser() -> nn::account::Uid
[5] GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
[6] GetProfileDigest(nn::account::Uid) -> nn::account::ProfileDigest
[50] IsUserRegistrationRequestPermitted(u64, pid) -> b8
[51] TrySelectUserWithoutInteraction(b8) -> nn::account::Uid
[60, 5.0.0+] ListOpenContextStoredUsers(unknown) -> unknown
[100] GetUserRegistrationNotifier() -> object<nn::account::detail::INotifier>
[101] GetUserStateChangeNotifier() -> object<nn::account::detail::INotifier>
[102] GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForSystemService>
[103] GetBaasUserAvailabilityChangeNotifier() -> object<nn::account::detail::INotifier>
[104] GetProfileUpdateNotifier() -> object<nn::account::detail::INotifier>
[105, 4.0.0+] CheckNetworkServiceAvailabilityAsync(u64, pid, buffer<nn::account::SystemProgramIdentification, 0x19>) -> object<nn::account::detail::IAsyncContext>
[110] StoreSaveDataThumbnail(nn::account::Uid, nn::ApplicationId, buffer<bytes, 5>)
[111] ClearSaveDataThumbnail(nn::account::Uid, nn::ApplicationId)
[112] LoadSaveDataThumbnail(nn::account::Uid, nn::ApplicationId) -> (u32, buffer<bytes, 6>)
[113] GetSaveDataThumbnailExistence(unknown) -> unknown
[190] GetUserLastOpenedApplication(nn::account::Uid) -> (u32, nn::ApplicationId)
[191, 5.0.0+] ActivateOpenContextHolder(unknown) -> unknown
[200] BeginUserRegistration() -> nn::account::Uid
[201] CompleteUserRegistration(nn::account::Uid)
[202] CancelUserRegistration(nn::account::Uid)
[203] DeleteUser(nn::account::Uid)
[204] SetUserPosition(u32, nn::account::Uid)
[205] GetProfileEditor(nn::account::Uid) -> object<nn::account::profile::IProfileEditor>
[206] CompleteUserRegistrationForcibly(nn::account::Uid)
[210] CreateFloatingRegistrationRequest(u32, handle<copy>) -> object<nn::account::baas::IFloatingRegistrationRequest>
[230] AuthenticateServiceAsync() -> object<nn::account::detail::IAsyncContext>
[250] GetBaasAccountAdministrator(nn::account::Uid) -> object<nn::account::baas::IAdministrator>
[290] ProxyProcedureForGuestLoginWithNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::nas::IOAuthProcedureForExternalNsa>
[291] ProxyProcedureForFloatingRegistrationWithNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::nas::IOAuthProcedureForExternalNsa>
[299] SuspendBackgroundDaemon() -> object<nn::account::detail::ISessionObject>
[997] DebugInvalidateTokenCacheForUser(nn::account::Uid)
[998] DebugSetUserStateClose(nn::account::Uid)
[999] DebugSetUserStateOpen(nn::account::Uid)
[0] GetUserCount() -> u32
[1] GetUserExistence(nn::account::Uid) -> b8
[2] ListAllUsers() -> buffer<nn::account::Uid, 0xa>
[3] ListOpenUsers() -> buffer<nn::account::Uid, 0xa>
[4] GetLastOpenedUser() -> nn::account::Uid
[5] GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
[6] GetProfileDigest(nn::account::Uid) -> nn::account::ProfileDigest
[50] IsUserRegistrationRequestPermitted(u64, pid) -> b8
[51] TrySelectUserWithoutInteraction(b8) -> nn::account::Uid
[60, 5.0.0+] ListOpenContextStoredUsers(unknown) -> unknown
[100] InitializeApplicationInfo(u64, pid)
[101] GetBaasAccountManagerForApplication(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
[102] AuthenticateApplicationAsync() -> object<nn::account::detail::IAsyncContext>
[103, 4.0.0+] CheckNetworkServiceAvailabilityAsync() -> object<nn::account::detail::IAsyncContext>
[110] StoreSaveDataThumbnail(nn::account::Uid, buffer<bytes, 5>)
[111] ClearSaveDataThumbnail(nn::account::Uid)
[120] CreateGuestLoginRequest(u32, handle<copy>) -> object<nn::account::baas::IGuestLoginRequest>
[130, 5.0.0+] LoadOpenContext(unknown) -> unknown
[0] GetUserCount() -> u32
[1] GetUserExistence(nn::account::Uid) -> b8
[2] ListAllUsers() -> buffer<nn::account::Uid, 0xa>
[3] ListOpenUsers() -> buffer<nn::account::Uid, 0xa>
[4] GetLastOpenedUser() -> nn::account::Uid
[5] GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
[6] GetProfileDigest(nn::account::Uid) -> nn::account::ProfileDigest
[50] IsUserRegistrationRequestPermitted(u64, pid) -> b8
[51] TrySelectUserWithoutInteraction(b8) -> nn::account::Uid
[60, 5.0.0+] ListOpenContextStoredUsers(unknown) -> unknown
[100] GetUserRegistrationNotifier() -> object<nn::account::detail::INotifier>
[101] GetUserStateChangeNotifier() -> object<nn::account::detail::INotifier>
[102] GetBaasAccountManagerForSystemService(nn::account::Uid) -> object<nn::account::baas::IManagerForSystemService>
[103] GetBaasUserAvailabilityChangeNotifier() -> object<nn::account::detail::INotifier>
[104] GetProfileUpdateNotifier() -> object<nn::account::detail::INotifier>
[105, 4.0.0+] CheckNetworkServiceAvailabilityAsync(u64, pid, buffer<nn::account::SystemProgramIdentification, 0x19>) -> object<nn::account::detail::IAsyncContext>
[110] StoreSaveDataThumbnail(nn::account::Uid, nn::ApplicationId, buffer<bytes, 5>)
[111] ClearSaveDataThumbnail(nn::account::Uid, nn::ApplicationId)
[112] LoadSaveDataThumbnail(nn::account::Uid, nn::ApplicationId) -> (u32, buffer<bytes, 6>)
[113, 5.0.0+] GetSaveDataThumbnailExistence(unknown) -> unknown
[190] GetUserLastOpenedApplication(nn::account::Uid) -> (u32, nn::ApplicationId)
[191, 5.0.0+] ActivateOpenContextHolder(unknown) -> unknown
[997] DebugInvalidateTokenCacheForUser(nn::account::Uid)
[998] DebugSetUserStateClose(nn::account::Uid)
[999] DebugSetUserStateOpen(nn::account::Uid)
[0] EnsureCacheAsync(nn::account::Uid) -> object<nn::account::detail::IAsyncContext>
[1] LoadCache(nn::account::Uid) -> (u32, buffer<bytes, 6>)
[2] GetDeviceAccountId(nn::account::Uid) -> u64
[50] RegisterNotificationTokenAsync(nn::npns::NotificationToken, nn::account::Uid) -> object<nn::account::detail::IAsyncContext>
[51] UnregisterNotificationTokenAsync(nn::account::Uid) -> object<nn::account::detail::IAsyncContext>
[0] CheckAvailability()
[1] GetAccountId() -> nn::account::NetworkServiceAccountId
[2] EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
[3] LoadIdTokenCache() -> (u32, buffer<bytes, 6>)
[100] SetSystemProgramIdentification(u64, pid, buffer<nn::account::SystemProgramIdentification, 0x19>)
[110, 4.0.0+] GetServiceEntryRequirementCache(nn::ApplicationId) -> u32
[111, 4.0.0+] InvalidateServiceEntryRequirementCache(nn::ApplicationId)
[112, 4.0.0+] InvalidateTokenCache(nn::ApplicationId)
[120] GetNintendoAccountId() -> nn::account::NintendoAccountId
[130] GetNintendoAccountUserResourceCache() -> (nn::account::NintendoAccountId, buffer<nn::account::nas::NasUserBase, 0x1a>, buffer<bytes, 6>)
[131] RefreshNintendoAccountUserResourceCacheAsync() -> object<nn::account::detail::IAsyncContext>
[132] RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed(u32) -> (b8, object<nn::account::detail::IAsyncContext>)
[140, 5.0.0+] GetNetworkServiceLicenseCache(unknown) -> unknown
[141, 5.0.0+] RefreshNetworkServiceLicenseCacheAsync(unknown) -> unknown
[142, 5.0.0+] RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed(unknown) -> unknown
[150] CreateAuthorizationRequest(u32, handle<copy>, buffer<nn::account::nas::NasClientInfo, 0x19>, buffer<nn::account::NintendoAccountAuthorizationRequestParameters, 0x19>) -> object<nn::account::nas::IAuthorizationRequest>
[200] IsRegistered() -> b8
[201] RegisterAsync() -> object<nn::account::detail::IAsyncContext>
[202] UnregisterAsync() -> object<nn::account::detail::IAsyncContext>
[203] DeleteRegistrationInfoLocally()
[220] SynchronizeProfileAsync() -> object<nn::account::detail::IAsyncContext>
[221] UploadProfileAsync() -> object<nn::account::detail::IAsyncContext>
[222] SynchronizeProfileAsyncIfSecondsElapsed(u32) -> (b8, object<nn::account::detail::IAsyncContext>)
[250] IsLinkedWithNintendoAccount() -> b8
[251] CreateProcedureToLinkWithNintendoAccount() -> object<nn::account::nas::IOAuthProcedureForNintendoAccountLinkage>
[252] ResumeProcedureToLinkWithNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::nas::IOAuthProcedureForNintendoAccountLinkage>
[255] CreateProcedureToUpdateLinkageStateOfNintendoAccount() -> object<nn::account::http::IOAuthProcedure>
[256] ResumeProcedureToUpdateLinkageStateOfNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::http::IOAuthProcedure>
[260] CreateProcedureToLinkNnidWithNintendoAccount() -> object<nn::account::http::IOAuthProcedure>
[261] ResumeProcedureToLinkNnidWithNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::http::IOAuthProcedure>
[280] ProxyProcedureToAcquireApplicationAuthorizationForNintendoAccount(nn::account::detail::Uuid) -> object<nn::account::http::IOAuthProcedure>
[997] DebugUnlinkNintendoAccountAsync() -> object<nn::account::detail::IAsyncContext>
[998] DebugSetAvailabilityErrorDetail(u32)
[0] GetSessionId() -> nn::account::detail::Uuid
[12] GetAccountId() -> nn::account::NetworkServiceAccountId
[13] GetLinkedNintendoAccountId() -> nn::account::NintendoAccountId
[14] GetNickname() -> buffer<u8, 0xa>
[15] GetProfileImage() -> (u32, buffer<bytes, 6>)
[21] LoadIdTokenCache() -> (u32, buffer<bytes, 6>)
[100, 1.0.0-3.0.2] RegisterAsync() -> nn::account::Uid
[100, 4.0.0+] RegisterUser() -> nn::account::Uid
[101, 1.0.0-3.0.2] RegisterWithUidAsync(nn::account::Uid)
[101, 4.0.0+] RegisterUserWithUid(nn::account::Uid)
[102, 4.0.0+] RegisterNetworkServiceAccountAsync() -> object<nn::account::detail::IAsyncContext>
[103, 4.0.0+] RegisterNetworkServiceAccountWithUidAsync(nn::account::Uid) -> object<nn::account::detail::IAsyncContext>
[110] SetSystemProgramIdentification(u64, pid, buffer<nn::account::SystemProgramIdentification, 0x19>)
[111] EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
[0] GetSessionId() -> nn::account::detail::Uuid
[12] GetAccountId() -> nn::account::NetworkServiceAccountId
[13] GetLinkedNintendoAccountId() -> nn::account::NintendoAccountId
[14] GetNickname() -> buffer<u8, 0xa>
[15] GetProfileImage() -> (u32, buffer<bytes, 6>)
[21] LoadIdTokenCache() -> (u32, buffer<bytes, 6>)
[0] CheckAvailability()
[1] GetAccountId() -> nn::account::NetworkServiceAccountId
[2] EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
[3] LoadIdTokenCache() -> (u32, buffer<bytes, 6>)
[130] GetNintendoAccountUserResourceCacheForApplication() -> (nn::account::NintendoAccountId, buffer<nn::account::nas::NasUserBaseForApplication, 0x1a>, buffer<bytes, 6>)
[150] CreateAuthorizationRequest(u32, handle<copy>, buffer<nn::account::NintendoAccountAuthorizationRequestParameters, 0x19>) -> object<nn::account::nas::IAuthorizationRequest>
[160, 5.0.0+] StoreOpenContext(unknown) -> unknown
[0] CheckAvailability()
[1] GetAccountId() -> nn::account::NetworkServiceAccountId
[2] EnsureIdTokenCacheAsync() -> object<nn::account::detail::IAsyncContext>
[3] LoadIdTokenCache() -> (u32, buffer<bytes, 6>)
[100] SetSystemProgramIdentification(u64, pid, buffer<nn::account::SystemProgramIdentification, 0x19>)
[110, 4.0.0+] GetServiceEntryRequirementCache(nn::ApplicationId) -> u32
[111, 4.0.0+] InvalidateServiceEntryRequirementCache(nn::ApplicationId)
[112, 4.0.0+] InvalidateTokenCache(nn::ApplicationId)
[120] GetNintendoAccountId() -> nn::account::NintendoAccountId
[130] GetNintendoAccountUserResourceCache() -> (nn::account::NintendoAccountId, buffer<nn::account::nas::NasUserBase, 0x1a>, buffer<bytes, 6>)
[131] RefreshNintendoAccountUserResourceCacheAsync() -> object<nn::account::detail::IAsyncContext>
[132] RefreshNintendoAccountUserResourceCacheAsyncIfSecondsElapsed(u32) -> (b8, object<nn::account::detail::IAsyncContext>)
[140, 5.0.0+] GetNetworkServiceLicenseCache(unknown) -> unknown
[141, 5.0.0+] RefreshNetworkServiceLicenseCacheAsync(unknown) -> unknown
[142, 5.0.0+] RefreshNetworkServiceLicenseCacheAsyncIfSecondsElapsed(unknown) -> unknown
[150] CreateAuthorizationRequest(u32, handle<copy>, buffer<nn::account::nas::NasClientInfo, 0x19>, buffer<nn::account::NintendoAccountAuthorizationRequestParameters, 0x19>) -> object<nn::account::nas::IAuthorizationRequest>
[0] GetSystemEvent() -> handle<copy>
[1] Cancel()
[2] HasDone() -> b8
[3] GetResult()
[0] GetSystemEvent() -> handle<copy>
[999] Dummy()
[0] PrepareAsync() -> object<nn::account::detail::IAsyncContext>
[1] GetRequest() -> (buffer<nn::account::RequestUrl, 0x1a>, buffer<nn::account::CallbackUri, 0x1a>)
[2] ApplyResponse(buffer<u8, 9>)
[3] ApplyResponseAsync(buffer<u8, 9>) -> object<nn::account::detail::IAsyncContext>
[10] Suspend() -> nn::account::detail::Uuid
[0] GetSessionId() -> nn::account::detail::Uuid
[10] InvokeWithoutInteractionAsync() -> object<nn::account::detail::IAsyncContext>
[19] IsAuthorized() -> b8
[20] GetAuthorizationCode() -> (u32, buffer<bytes, 6>)
[21] GetIdToken() -> (u32, buffer<bytes, 6>)
[22] GetState() -> buffer<nn::account::nas::State, 0x1a>
[0] PrepareAsync() -> object<nn::account::detail::IAsyncContext>
[1] GetRequest() -> (buffer<nn::account::RequestUrl, 0x1a>, buffer<nn::account::CallbackUri, 0x1a>)
[2] ApplyResponse(buffer<u8, 9>)
[3] ApplyResponseAsync(buffer<u8, 9>) -> object<nn::account::detail::IAsyncContext>
[10] Suspend() -> nn::account::detail::Uuid
[100] GetAccountId() -> nn::account::NetworkServiceAccountId
[101] GetLinkedNintendoAccountId() -> nn::account::NintendoAccountId
[102] GetNickname() -> buffer<u8, 0xa>
[103] GetProfileImage() -> (u32, buffer<bytes, 6>)
[0] PrepareAsync() -> object<nn::account::detail::IAsyncContext>
[1] GetRequest() -> (buffer<nn::account::RequestUrl, 0x1a>, buffer<nn::account::CallbackUri, 0x1a>)
[2] ApplyResponse(buffer<u8, 9>)
[3] ApplyResponseAsync(buffer<u8, 9>) -> object<nn::account::detail::IAsyncContext>
[10] Suspend() -> nn::account::detail::Uuid
[100] GetAccountId() -> nn::account::NetworkServiceAccountId
[101] GetLinkedNintendoAccountId() -> nn::account::NintendoAccountId
[102] GetNickname() -> buffer<u8, 0xa>
[103] GetProfileImage() -> (u32, buffer<bytes, 6>)
[0] PrepareAsync() -> object<nn::account::detail::IAsyncContext>
[1] GetRequest() -> (buffer<nn::account::RequestUrl, 0x1a>, buffer<nn::account::CallbackUri, 0x1a>)
[2] ApplyResponse(buffer<u8, 9>)
[3] ApplyResponseAsync(buffer<u8, 9>) -> object<nn::account::detail::IAsyncContext>
[10] Suspend() -> nn::account::detail::Uuid
[100] GetRequestWithTheme(u32) -> (buffer<nn::account::RequestUrl, 0x1a>, buffer<nn::account::CallbackUri, 0x1a>)
[101] IsNetworkServiceAccountReplaced() -> b8
[199] GetUrlForIntroductionOfExtraMembership() -> buffer<nn::account::RequestUrl, 0x1a>
[0] Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
Takes an output type-0x1A buffer for #UserData, returns an output #ProfileBase.
[1] GetBase() -> nn::account::profile::ProfileBase
No input, returns an output #ProfileBase.
[10] GetImageSize() -> u32
No input, returns an output u32 for the size of the image buffer.
[11] LoadImage() -> (u32, buffer<bytes, 6>)
Takes an output type-0x6 buffer, returns the same output u32 as #GetImageSize.
The output buffer contains the JPEG profile image icon. This is valid for both Miis and character icons.
[0] Get() -> (nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x1a>)
Takes an output type-0x1A buffer for #UserData, returns an output #ProfileBase.
[1] GetBase() -> nn::account::profile::ProfileBase
No input, returns an output #ProfileBase.
[10] GetImageSize() -> u32
No input, returns an output u32 for the size of the image buffer.
[11] LoadImage() -> (u32, buffer<bytes, 6>)
Takes an output type-0x6 buffer, returns the same output u32 as #GetImageSize.
The output buffer contains the JPEG profile image icon. This is valid for both Miis and character icons.
[100] Store(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>)
Takes a #ProfileBase and an input type-0x19 buffer for #UserData.
[101] StoreWithImage(nn::account::profile::ProfileBase, buffer<nn::account::profile::UserData, 0x19>, buffer<bytes, 5>)
Takes a #ProfileBase, an input type-0x19 buffer for #UserData, and an input type-0x5 buffer.
[0] Unknown0(unknown<1>) -> buffer<unknown, 6>
[1] Unknown1() -> buffer<unknown, 6>
[2] Unknown2(unknown<2>) -> buffer<unknown, 6>
[3] Unknown3(unknown<2>, buffer<unknown, 5>)
[4] Unknown4(unknown<1>) -> buffer<unknown, 6>
[5] Unknown5(unknown<2>)
[6] Unknown6() -> buffer<unknown, 6>
[7] Unknown7(unknown<1>)
[8] Unknown8(unknown<6>) -> buffer<unknown, 6>
[9] Unknown9(unknown<6>, buffer<unknown, 5>)
[10] Unknown10() -> handle<copy>
[11] Unknown11()
[12, 3.0.0+] Unknown12(unknown<8>, buffer<unknown, 5>) -> unknown<4>
[0] Unknown0(unknown<4>)
[1] Unknown1(unknown<4>)
[2] Unknown2(unknown<4>) -> object<nn::ahid::ICtrlSession>
[3] Unknown3(unknown<4>) -> object<nn::ahid::IReadSession>
[0] Unknown0(buffer<unknown, 5>) -> unknown<4>
[100] OpenSystemAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ISystemAppletProxy>
[200, 1.0.0-2.3.0] OpenLibraryAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::ILibraryAppletProxy>
[200, 3.0.0+] OpenLibraryAppletProxyOld(u64, pid, handle<copy>) -> object<nn::am::service::ILibraryAppletProxy>
[201, 3.0.0+] OpenLibraryAppletProxy(u64, pid, handle<copy>, buffer<nn::am::AppletAttribute, 0x15>) -> object<nn::am::service::ILibraryAppletProxy>
Returns an #ILibraryAppletProxy.
Takes a reserved input u64(official user-processes use hard-coded value 0), a PID,a process copy-handle(cur-proc handle alias), and an 0x80-byte type-0x15 input buffer AppletAttribute.
Official user-processes use the same retry loop with this as the other Open*Proxy commands.
[300] OpenOverlayAppletProxy(u64, pid, handle<copy>) -> object<nn::am::service::IOverlayAppletProxy>
[350] OpenSystemApplicationProxy(u64, pid, handle<copy>) -> object<nn::am::service::IApplicationProxy>
[400] CreateSelfLibraryAppletCreatorForDevelop(u64, pid) -> object<nn::am::service::ILibraryAppletCreator>
[0] GetAppletStateChangedEvent() -> handle<copy>
[1] IsCompleted() -> b8
[10] Start()
[20] RequestExit()
[25] Terminate()
[30] GetResult()
[0] GetAppletStateChangedEvent() -> handle<copy>
[1] IsCompleted() -> b8
[10] Start()
[20] RequestExit()
[25] Terminate()
[30] GetResult()
[101] RequestForApplicationToGetForeground()
[110] TerminateAllLibraryApplets()
[111] AreAnyLibraryAppletsLeft() -> b8
[112] GetCurrentLibraryApplet() -> object<nn::am::service::IAppletAccessor>
[120] GetApplicationId() -> nn::ncm::ApplicationId
[121] PushLaunchParameter(u32, object<nn::am::service::IStorage>)
[122] GetApplicationControlProperty() -> buffer<bytes, 6>
[123, 2.0.0+] GetApplicationLaunchProperty() -> buffer<bytes, 6>
[0] CreateApplication(nn::ncm::ApplicationId) -> object<nn::am::service::IApplicationAccessor>
[1] PopLaunchRequestedApplication() -> object<nn::am::service::IApplicationAccessor>
[10] CreateSystemApplication(nn::ncm::SystemApplicationId) -> object<nn::am::service::IApplicationAccessor>
[100] PopFloatingApplicationForDevelopment() -> object<nn::am::service::IApplicationAccessor>
[1] PopLaunchParameter(u32) -> object<nn::am::service::IStorage>
[10] CreateApplicationAndPushAndRequestToStart(nn::ncm::ApplicationId, object<nn::am::service::IStorage>)
[11, 3.0.0+] CreateApplicationAndPushAndRequestToStartForQuest(u32, u32, nn::ncm::ApplicationId, object<nn::am::service::IStorage>)
[12, 4.0.0+] CreateApplicationAndRequestToStart(nn::ncm::ApplicationId)
[13, 4.0.0+] CreateApplicationAndRequestToStartForQuest(u32, u32, nn::ncm::ApplicationId)
[20] EnsureSaveData(nn::account::Uid) -> u64
[21] GetDesiredLanguage() -> nn::settings::LanguageCode
[22] SetTerminateResult(u32)
[23] GetDisplayVersion() -> nn::oe::DisplayVersion
[24, 2.0.0+] GetLaunchStorageInfoForDebug() -> (nn::ncm::StorageId, nn::ncm::StorageId)
[25, 3.0.0+] ExtendSaveData(u8, nn::account::Uid, u64, u64) -> u64
[26, 3.0.0+] GetSaveDataSize(u8, nn::account::Uid) -> (u64, u64)
[30, 1.0.0] BeginBlockingHomeButton(unknown<8>)
[30, 2.0.0+] BeginBlockingHomeButtonShortAndLongPressed(u64)
[31, 1.0.0] EndBlockingHomeButton()
[31, 2.0.0+] EndBlockingHomeButtonShortAndLongPressed()
[32, 2.0.0+] BeginBlockingHomeButton(u64)
[33, 2.0.0+] EndBlockingHomeButton()
[40] NotifyRunning() -> b8
[50, 2.0.0+] GetPseudoDeviceId() -> nn::util::Uuid
[60, 2.0.0+] SetMediaPlaybackStateForApplication(b8)
[65, 3.0.0+] IsGamePlayRecordingSupported() -> b8
[66, 3.0.0+] InitializeGamePlayRecording(u64, handle<copy>)
[67, 3.0.0+] SetGamePlayRecordingState(u32)
[68, 4.0.0+] RequestFlushGamePlayingMovieForDebug()
[70, 3.0.0+] RequestToShutdown()
[71, 3.0.0+] RequestToReboot()
[80, 4.0.0+] ExitAndRequestToShowThanksMessage()
[90, 4.0.0+] EnableApplicationCrashReport(b8)
[0] GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
[1] GetSelfController() -> object<nn::am::service::ISelfController>
[2] GetWindowController() -> object<nn::am::service::IWindowController>
[3] GetAudioController() -> object<nn::am::service::IAudioController>
[4] GetDisplayController() -> object<nn::am::service::IDisplayController>
[10] GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
[11] GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
[20] GetApplicationFunctions() -> object<nn::am::service::IApplicationFunctions>
[1000] GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
[0] OpenApplicationProxy(u64, pid, handle<copy>) -> object<nn::am::service::IApplicationProxy>
Returns an #IApplicationProxy. See #appletAE.
Takes a reserved input u64(official user-processes use hard-coded value 0), a PID, and a process copy-handle(cur-proc handle alias).
On failure, official user-processes will retry using this command in a loop while the retval is 0x19280, with svcSleepThread(10000000) being called first.
[0] SetExpectedMasterVolume(f32, f32)
[1] GetMainAppletExpectedMasterVolume() -> f32
[2] GetLibraryAppletExpectedMasterVolume() -> f32
[3] ChangeMainAppletMasterVolume(f32, u64)
[4] SetTransparentVolumeRate(f32)
[0] GetEventHandle() -> handle<copy>
[1] ReceiveMessage() -> nn::am::AppletMessage
[2] GetThisAppletKind() -> nn::am::service::AppletKind
[3] AllowToEnterSleep()
[4] DisallowToEnterSleep()
[5] GetOperationMode() -> u8
[6] GetPerformanceMode() -> u32
[7] GetCradleStatus() -> u8
[8] GetBootMode() -> u8
[9] GetCurrentFocusState() -> u8
[10] RequestToAcquireSleepLock()
[11] ReleaseSleepLock()
[12] ReleaseSleepLockTransiently()
[13] GetAcquiredSleepLockEvent() -> handle<copy>
[20] PushToGeneralChannel(object<nn::am::service::IStorage>)
[30] GetHomeButtonReaderLockAccessor() -> object<nn::am::service::ILockAccessor>
[31, 2.0.0+] GetReaderLockAccessorEx(u32) -> object<nn::am::service::ILockAccessor>
[40, 2.0.0+] GetCradleFwVersion() -> (u32, u32, u32, u32)
[50, 3.0.0+] IsVrModeEnabled() -> b8
[51, 3.0.0+] SetVrModeEnabled(b8)
[52, 4.0.0+] SetLcdBacklighOffEnabled(b8)
[55, 3.0.0+] IsInControllerFirmwareUpdateSection() -> b8
[60, 3.0.0+] GetDefaultDisplayResolution() -> (u32, u32)
[61, 3.0.0+] GetDefaultDisplayResolutionChangeEvent() -> handle<copy>
[62, 4.0.0+] GetHdcpAuthenticationState() -> u32
[63, 4.0.0+] GetHdcpAuthenticationStateChangeEvent() -> handle<copy>
[0] GetLastForegroundCaptureImage() -> buffer<bytes, 6>
[1] UpdateLastForegroundCaptureImage()
[2] GetLastApplicationCaptureImage() -> buffer<bytes, 6>
[3] GetCallerAppletCaptureImage() -> buffer<bytes, 6>
[4] UpdateCallerAppletCaptureImage()
[5] GetLastForegroundCaptureImageEx() -> (b8, buffer<bytes, 6>)
[6] GetLastApplicationCaptureImageEx() -> (b8, buffer<bytes, 6>)
[7] GetCallerAppletCaptureImageEx() -> (b8, buffer<bytes, 6>)
[8, 2.0.0+] TakeScreenShotOfOwnLayer(b8, u32)
[10] AcquireLastApplicationCaptureBuffer() -> handle<copy>
[11] ReleaseLastApplicationCaptureBuffer()
[12] AcquireLastForegroundCaptureBuffer() -> handle<copy>
[13] ReleaseLastForegroundCaptureBuffer()
[14] AcquireCallerAppletCaptureBuffer() -> handle<copy>
[15] ReleaseCallerAppletCaptureBuffer()
[16] AcquireLastApplicationCaptureBufferEx() -> (b8, handle<copy>)
[17] AcquireLastForegroundCaptureBufferEx() -> (b8, handle<copy>)
[18] AcquireCallerAppletCaptureBufferEx() -> (b8, handle<copy>)
[20, 3.0.0+] ClearCaptureBuffer(b8, u32, u32)
[21, 3.0.0+] ClearAppletTransitionBuffer(u32)
[22, 4.0.0+] AcquireLastApplicationCaptureSharedBuffer() -> (b8, u32)
[23, 4.0.0+] ReleaseLastApplicationCaptureSharedBuffer()
[24, 4.0.0+] AcquireLastForegroundCaptureSharedBuffer() -> (b8, u32)
[25, 4.0.0+] ReleaseLastForegroundCaptureSharedBuffer()
[26, 4.0.0+] AcquireCallerAppletCaptureSharedBuffer() -> (b8, u32)
[27, 4.0.0+] ReleaseCallerAppletCaptureSharedBuffer()
[0] RequestToEnterSleep()
[1] EnterSleep()
[2] StartSleepSequence(b8)
[3] StartShutdownSequence()
[4] StartRebootSequence()
[10] LoadAndApplyIdlePolicySettings()
[11, 2.0.0+] NotifyCecSettingsChanged()
[12, 3.0.0+] SetDefaultHomeButtonLongPressTime(u64)
[13, 3.0.0+] UpdateDefaultDisplayResolution()
[14, 3.0.0+] ShouldSleepOnBoot() -> b8
[15, 4.0.0+] GetHdcpAuthenticationFailedEvent() -> handle<copy>
[10] RequestToGetForeground()
[11] LockForeground()
[12] UnlockForeground()
[20] PopFromGeneralChannel() -> object<nn::am::service::IStorage>
[21] GetPopFromGeneralChannelEvent() -> handle<copy>
[30] GetHomeButtonWriterLockAccessor() -> object<nn::am::service::ILockAccessor>
[31, 2.0.0+] GetWriterLockAccessorEx(u32) -> object<nn::am::service::ILockAccessor>
[0] GetAppletStateChangedEvent() -> handle<copy>
[1] IsCompleted() -> b8
[10] Start()
[20] RequestExit()
[25] Terminate()
[30] GetResult()
[50, 2.0.0+] SetOutOfFocusApplicationSuspendingEnabled(b8)
[100] PushInData(object<nn::am::service::IStorage>)
[101] PopOutData() -> object<nn::am::service::IStorage>
[102] PushExtraStorage(object<nn::am::service::IStorage>)
[103] PushInteractiveInData(object<nn::am::service::IStorage>)
[104] PopInteractiveOutData() -> object<nn::am::service::IStorage>
[105] GetPopOutDataEvent() -> handle<copy>
[106] GetPopInteractiveOutDataEvent() -> handle<copy>
[110] NeedsToExitProcess() -> b8
[120] GetLibraryAppletInfo() -> nn::am::service::LibraryAppletInfo
[150] RequestForAppletToGetForeground()
[160, 2.0.0+] GetIndirectLayerConsumerHandle(nn::applet::AppletResourceUserId, pid) -> u64
[0] CreateLibraryApplet(u32, u32) -> object<nn::am::service::ILibraryAppletAccessor>
[1] TerminateAllLibraryApplets()
[2] AreAnyLibraryAppletsLeft() -> b8
[10] CreateStorage(u64) -> object<nn::am::service::IStorage>
[11] CreateTransferMemoryStorage(b8, u64, handle<copy>) -> object<nn::am::service::IStorage>
[12, 2.0.0+] CreateHandleStorage(u64, handle<copy>) -> object<nn::am::service::IStorage>
[0] GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
[1] GetSelfController() -> object<nn::am::service::ISelfController>
[2] GetWindowController() -> object<nn::am::service::IWindowController>
[3] GetAudioController() -> object<nn::am::service::IAudioController>
[4] GetDisplayController() -> object<nn::am::service::IDisplayController>
[10] GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
[11] GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
[20] OpenLibraryAppletSelfAccessor() -> object<nn::am::service::ILibraryAppletSelfAccessor>
[1000] GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
[0] PopInData() -> object<nn::am::service::IStorage>
[1] PushOutData(object<nn::am::service::IStorage>)
[2] PopInteractiveInData() -> object<nn::am::service::IStorage>
[3] PushInteractiveOutData(object<nn::am::service::IStorage>)
[5] GetPopInDataEvent() -> handle<copy>
[6] GetPopInteractiveInDataEvent() -> handle<copy>
[10] ExitProcessAndReturn()
[11] GetLibraryAppletInfo() -> nn::am::service::LibraryAppletInfo
[12] GetMainAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
[13] CanUseApplicationCore() -> b8
[14] GetCallerAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
[15, 2.0.0+] GetMainAppletApplicationControlProperty() -> buffer<nn::ns::ApplicationControlProperty, 0x16>
[16, 2.0.0+] GetMainAppletStorageId() -> nn::ncm::StorageId
[17, 3.0.0+] GetCallerAppletIdentityInfoStack() -> (u32, buffer<nn::am::service::AppletIdentityInfo, 6>)
[18, 4.0.0+] GetNextReturnDestinationAppletIdentityInfo() -> nn::am::service::AppletIdentityInfo
[19, 4.0.0+] GetDesirableKeyboardLayout() -> u32
[20] PopExtraStorage() -> object<nn::am::service::IStorage>
[25] GetPopExtraStorageEvent() -> handle<copy>
[30] UnpopInData(object<nn::am::service::IStorage>)
[31] UnpopExtraStorage(object<nn::am::service::IStorage>)
[40, 2.0.0+] GetIndirectLayerProducerHandle() -> u64
[50, 3.0.0+] ReportVisibleError(nn::err::ErrorCode)
[51, 4.0.0+] ReportVisibleErrorWithErrorContext(nn::err::ErrorCode, buffer<nn::err::ErrorContext, 0x15>)
[60, 4.0.0+] GetMainAppletApplicationDesiredLanguage() -> nn::settings::LanguageCode
[100, 4.0.0+] CreateGameMovieTrimmer(u64, handle<copy>) -> object<nn::grcsrv::IGameMovieTrimmer>
[0] GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
[1] GetSelfController() -> object<nn::am::service::ISelfController>
[2] GetWindowController() -> object<nn::am::service::IWindowController>
[3] GetAudioController() -> object<nn::am::service::IAudioController>
[4] GetDisplayController() -> object<nn::am::service::IDisplayController>
[10] GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
[11] GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
[20] GetOverlayFunctions() -> object<nn::am::service::IOverlayFunctions>
[1000] GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
[0] BeginToWatchShortHomeButtonMessage()
[1] EndToWatchShortHomeButtonMessage()
[2] GetApplicationIdForLogo() -> nn::ncm::ApplicationId
[3] SetGpuTimeSliceBoost(u64)
[4, 2.0.0+] SetAutoSleepTimeAndDimmingTimeEnabled(b8)
[5, 2.0.0+] TerminateApplicationAndSetReason(u32)
[6, 3.0.0+] SetScreenShotPermissionGlobally(b8)
[0] GetLaunchReason() -> nn::am::service::AppletProcessLaunchReason
[11] OpenCallingLibraryApplet() -> object<nn::am::service::ILibraryAppletAccessor>
[21] PushContext(object<nn::am::service::IStorage>)
[22] PopContext() -> object<nn::am::service::IStorage>
[23] CancelWindingReservation()
[30] WindAndDoReserved()
[40] ReserveToStartAndWaitAndUnwindThis(object<nn::am::service::ILibraryAppletAccessor>)
[41, 4.0.0+] ReserveToStartAndWait(object<nn::am::service::ILibraryAppletAccessor>)
[0] Exit()
[1] LockExit()
[2] UnlockExit()
[3, 2.0.0+] EnterFatalSection()
[4, 2.0.0+] LeaveFatalSection()
[9] GetLibraryAppletLaunchableEvent() -> handle<copy>
[10] SetScreenShotPermission(u32)
[11] SetOperationModeChangedNotification(b8)
[12] SetPerformanceModeChangedNotification(b8)
[13] SetFocusHandlingMode(b8, b8, b8)
[14] SetRestartMessageEnabled(b8)
[15, 2.0.0+] SetScreenShotAppletIdentityInfo(nn::am::service::AppletIdentityInfo)
[16, 2.0.0+] SetOutOfFocusSuspendingEnabled(b8)
[17, 3.0.0+] SetControllerFirmwareUpdateSection(b8)
[18, 3.0.0+] SetRequiresCaptureButtonShortPressedMessage(b8)
[19, 3.0.0+] SetScreenShotImageOrientation(u32)
[20, 4.0.0+] SetDesirableKeyboardLayout(u32)
[40] CreateManagedDisplayLayer() -> u64
[41, 4.0.0+] IsSystemBufferSharingEnabled()
[42, 4.0.0+] GetSystemSharedLayerHandle() -> (nn::vi::fbshare::SharedBufferHandle, nn::vi::fbshare::SharedLayerHandle)
[50] SetHandlesRequestToDisplay(b8)
[51] ApproveToDisplay()
[60] OverrideAutoSleepTimeAndDimmingTime(u32, u32, u32, u32)
[61] SetMediaPlaybackState(b8)
[62] SetIdleTimeDetectionExtension(u32)
[63] GetIdleTimeDetectionExtension() -> u32
[64] SetInputDetectionSourceSet(u32)
[65, 2.0.0+] ReportUserIsActive()
[66, 3.0.0+] GetCurrentIlluminance() -> f32
[67, 3.0.0+] IsIlluminanceAvailable() -> b8
[70, 4.0.0+] ReportMultimediaError(u32, buffer<bytes, 5>)
[80, 4.0.0+] SetWirelessPriorityMode(u32)
[0] Unknown0() -> object<nn::am::service::IStorageAccessor>
[1, 2.0.0+] Unknown1() -> object<nn::am::service::ITransferStorageAccessor>
[0] GetCommonStateGetter() -> object<nn::am::service::ICommonStateGetter>
[1] GetSelfController() -> object<nn::am::service::ISelfController>
[2] GetWindowController() -> object<nn::am::service::IWindowController>
[3] GetAudioController() -> object<nn::am::service::IAudioController>
[4] GetDisplayController() -> object<nn::am::service::IDisplayController>
[10] GetProcessWindingController() -> object<nn::am::service::IProcessWindingController>
[11] GetLibraryAppletCreator() -> object<nn::am::service::ILibraryAppletCreator>
[20] GetHomeMenuFunctions() -> object<nn::am::service::IHomeMenuFunctions>
[21] GetGlobalStateController() -> object<nn::am::service::IGlobalStateController>
[22] GetApplicationCreator() -> object<nn::am::service::IApplicationCreator>
[1000] GetDebugFunctions() -> object<nn::am::service::IDebugFunctions>
[0] CreateWindow(nn::am::service::WindowCreationOption) -> object<nn::am::service::IWindow>
[1] GetAppletResourceUserId() -> nn::applet::AppletResourceUserId
[10] AcquireForegroundRights()
[11] ReleaseForegroundRights()
[12] RejectToChangeIntoBackground()
[0] CountAddOnContentByApplicationId(nn::ncm::ApplicationId) -> u32
[1] ListAddOnContentByApplicationId(u32, u32, nn::ncm::ApplicationId) -> (u32, buffer<u32, 6>)
[2] CountAddOnContent(u64, pid) -> u32
[3] ListAddOnContent(u32, u32, u64, pid) -> (u32, buffer<u32, 6>)
[4] GetAddOnContentBaseIdByApplicationId(nn::ncm::ApplicationId) -> u64
[5] GetAddOnContentBaseId(u64, pid) -> u64
[6] PrepareAddOnContentByApplicationId(u32, nn::ncm::ApplicationId)
[7] PrepareAddOnContent(u32, u64, pid)
[8, 4.0.0+] GetAddOnContentListChangedEvent() -> handle<copy>
[0] GetThrottlingState() -> unknown<0x28>
[1] GetLastThrottlingState() -> unknown<0x28>
[2] ClearLastThrottlingState()
[0] OpenSession() -> object<nn::apm::ISession>
[1] GetPerformanceMode() -> nn::apm::PerformanceMode
[0] OpenSession() -> object<nn::apm::ISession>
[0] RequestPerformanceMode(nn::apm::PerformanceMode)
[1] GetPerformanceEvent(nn::apm::EventTarget) -> handle<copy>
[2] GetThrottlingState() -> nn::apm::ThrottlingState
[3] GetLastThrottlingState() -> nn::apm::ThrottlingState
[4] ClearLastThrottlingState()
[5, 5.0.0+] LoadAndApplySettings(unknown) -> unknown
[0] GetApplicationLaunchProperty(unknown<8>) -> unknown<0x10>
[1] GetApplicationLaunchPropertyWithApplicationId(unknown<8>) -> unknown<0x10>
[2] GetApplicationControlProperty(unknown<8>) -> buffer<unknown, 0x16>
[3] GetApplicationControlPropertyWithApplicationId(unknown<8>) -> buffer<unknown, 0x16>
[0] Issue(unknown<8>)
[1] SetApplicationLaunchProperty(unknown<0x10>)
[2] SetApplicationControlProperty(buffer<unknown, 0x15>)
[0] AcquireRegistrar() -> object<nn::arp::detail::IRegistrar>
[1] DeleteProperties(unknown<8>)
[0] Unknown0() -> (u32, buffer<bytes, 6>)
[1] Unknown1(u32, buffer<bytes, 5>)
[2] Unknown2(buffer<bytes, 5>) -> u32
[3] Unknown3() -> buffer<bytes, 6>
[4] Unknown4() -> handle<copy, event>
[5] Unknown5() -> u32
[6] Unknown6() -> (u32, buffer<bytes, 0x22>)
[7] Unknown7(u32, buffer<bytes, 0x21>)
[8] Unknown8(buffer<bytes, 0x21>) -> u32
[10] Unknown10() -> buffer<bytes, 0x22>
[11] Unknown11() -> handle<copy, event>
[12] Unknown12() -> handle<copy, event>
[0] GetAudioInState() -> u32
[1] StartAudioIn()
[2] StopAudioIn()
[3] AppendAudioInBuffer(u64 tag, buffer<nn::audio::AudioInBuffer, 5>)
[4] RegisterBufferEvent() -> handle<copy, event>
[5] GetReleasedAudioInBuffer() -> (u32 count, buffer<nn::audio::AudioInBuffer, 6>)
[6] ContainsAudioInBuffer(u64 tag) -> b8
[7, 3.0.0+] AppendAudioInBufferWithUserEvent(u64 tag, handle<copy, event>, buffer<nn::audio::AudioInBuffer, 5>)
[8, 3.0.0+] AppendAudioInBufferAuto(u64 tag, buffer<nn::audio::AudioInBuffer, 0x21>)
[9, 3.0.0+] GetReleasedAudioInBufferAuto() -> (u32 count, buffer<nn::audio::AudioInBuffer, 0x22>)
[10, 3.0.0+] AppendAudioInBufferWithUserEventAuto(u64 tag, handle<copy, event>, buffer<nn::audio::AudioInBuffer, 0x21>)
[11, 4.0.0+] GetAudioInBufferCount() -> u32 count
[12, 4.0.0+] SetAudioInDeviceGain(u32 gain)
[13, 4.0.0+] GetAudioInDeviceGain() -> u32 gain
[0] ListAudioIns() -> (u32 count, buffer<bytes, 6> names)
[1] OpenAudioIn(u64, u64 pid_copy, pid, handle<copy, process>, buffer<bytes, 5> name) -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 6> name)
[2, 3.0.0+] Unknown2() -> (u32, buffer<unknown, 0x22>)
[3, 3.0.0+] OpenAudioInAuto(u64, u64 pid_copy, pid, handle<copy, process>, buffer<bytes, 0x21>) -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioIn>, buffer<bytes, 0x22> name)
[4, 3.0.0+] ListAudioInsAuto() -> (u32 count, buffer<bytes, 0x22> names)
[0, 1.0.0-3.0.0] RequestSuspendAudioIns(u64, u64) -> handle<copy>
[0, 4.0.0+] RequestSuspendAudioIns(u64, u64)
[1, 1.0.0-3.0.0] RequestResumeAudioIns(u64, u64) -> handle<copy>
[1, 4.0.0+] RequestResumeAudioIns(u64, u64)
[2] GetAudioInsProcessMasterVolume(u64) -> u32
[3] SetAudioInsProcessMasterVolume(u32, u64, u64)
[0] RequestSuspendAudioInsForDebug(u64)
[1] RequestResumeAudioInsForDebug(u64)
[0] GetAudioOutState() -> u32 state
[1] StartAudioOut()
[2] StopAudioOut()
[3] AppendAudioOutBuffer(u64 tag, buffer<nn::audio::AudioOutBuffer, 5>)
[4] RegisterBufferEvent() -> handle<copy>
[5] GetReleasedAudioOutBuffer() -> (u32 count, buffer<nn::audio::AudioOutBuffer, 6>)
[6] ContainsAudioOutBuffer(u64 tag) -> b8
[7, 3.0.0+] AppendAudioOutBufferAuto(u64 tag, buffer<nn::audio::AudioOutBuffer, 0x21>)
[8, 3.0.0+] GetReleasedAudioOutBufferAuto() -> (u32 count, buffer<nn::audio::AudioOutBuffer, 0x22>)
[9, 4.0.0+] GetAudioOutBufferCount() -> u32 count
[10, 4.0.0+] GetAudioOutPlayedSampleCount() -> u64 count
[11, 4.0.0+] FlushAudioOutBuffers() -> u8
[0] ListAudioOuts() -> (u32 count, buffer<bytes, 6>)
[1] OpenAudioOut(u32 sample_rate, u16 unused, u16 channel_count, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 5> name_in) -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioOut>, buffer<bytes, 6> name_out)
[2, 3.0.0+] ListAudioOutsAuto() -> (u32 count, buffer<bytes, 0x22>)
[3, 3.0.0+] OpenAudioOutAuto(u32 sample_rate, u16 unused, u16 channel_count, nn::applet::AppletResourceUserId, pid, handle<copy, process>, buffer<bytes, 0x21>) -> (u32 sample_rate, u32 channel_count, u32 pcm_format, u32, object<nn::audio::detail::IAudioOut>, buffer<bytes, 0x22> name_out)
[0, 1.0.0-3.0.0] RequestSuspendAudioOuts(u64, u64) -> handle<copy>
[0, 4.0.0+] RequestSuspendAudioOuts(u64, u64)
[1, 1.0.0-3.0.0] RequestResumeAudioOuts(u64, u64) -> handle<copy>
[1, 4.0.0+] RequestResumeAudioOuts(u64, u64)
[2] GetAudioOutsProcessMasterVolume(u64) -> u32
[3] SetAudioOutsProcessMasterVolume(u32, u64, u64)
[4, 4.0.0+] GetAudioOutsProcessRecordVolume(u64) -> u32
[5, 4.0.0+] SetAudioOutsProcessRecordVolume(u32, u64, u64)
[0] RequestSuspendAudioOutsForDebug(u64)
[1] RequestResumeAudioOutsForDebug(u64)
[0] GetSampleRate() -> u32 sample_rate
[1] GetSampleCount() -> u32 sample_count
[2] GetMixBufferCount() -> u32 mix_buffer_count
[3] GetState() -> u32 state
[4] RequestUpdateAudioRenderer(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 5>) -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6>, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 6>)
[5] Start()
[6] Stop()
[7] QuerySystemEvent() -> handle<copy, event>
[8] SetAudioRendererRenderingTimeLimit(u32 limit)
[9] GetAudioRendererRenderingTimeLimit() -> u32 limit
[10, 3.0.0+] RequestUpdateAudioRendererAuto(buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x21>) -> (buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22>, buffer<nn::audio::detail::AudioRendererUpdateDataHeader, 0x22>)
guessed to be the same as RequestUpdateAudioRenderer, just with different buffer types
[11, 3.0.0+] ExecuteAudioRendererRendering()
[0] OpenAudioRenderer(nn::audio::detail::AudioRendererParameterInternal, u64, nn::applet::AppletResourceUserId, pid, handle<copy>, handle<copy>) -> object<nn::audio::detail::IAudioRenderer>
[1] GetWorkBufferSize(nn::audio::detail::AudioRendererParameterInternal) -> u64
[2] GetAudioDeviceService(nn::applet::AppletResourceUserId) -> object<nn::audio::detail::IAudioDevice>
[3, 3.0.0+] OpenAudioRendererAuto(nn::audio::detail::AudioRendererParameterInternal, u64, u64, u64, pid, handle<copy>) -> object<nn::audio::detail::IAudioRenderer>
[4, 4.0.0+] GetAudioDeviceServiceWithRevisionInfo(nn::applet::AppletResourceUserId, u32) -> object<nn::audio::detail::IAudioDevice>
[0, 1.0.0-3.0.0] RequestSuspendAudioRenderers(u64, u64) -> handle<copy>
[0, 4.0.0+] RequestSuspendAudioRenderers(u64, u64)
[1, 1.0.0-3.0.0] RequestResumeAudioRenderers(u64, u64) -> handle<copy>
[1, 4.0.0+] RequestResumeAudioRenderers(u64, u64)
[2] GetAudioRenderersProcessMasterVolume(u64) -> u32
[3] SetAudioRenderersProcessMasterVolume(u32, u64, u64)
[4] RegisterAppletResourceUserId(u64)
[5] UnregisterAppletResourceUserId(u64)
[6, 4.0.0+] GetAudioRenderersProcessRecordVolume(u64) -> u32
[7, 4.0.0+] SetAudioRenderersProcessRecordVolume(u32, u64, u64)
[0] RequestSuspendForDebug(u64)
[1] RequestResumeForDebug(u64)
[0] InitializeCodecController()
[1] FinalizeCodecController()
[2] SleepCodecController()
[3] WakeCodecController()
[4] SetCodecVolume(u32)
[5] GetCodecVolumeMax() -> u32
[6] GetCodecVolumeMin() -> u32
[7] SetCodecActiveTarget(u32)
[8] GetCodecActiveTarget() -> u32
[9] BindCodecHeadphoneMicJackInterrupt() -> handle<copy>
[10] IsCodecHeadphoneMicJackInserted() -> b8
[11] ClearCodecHeadphoneMicJackInterrupt()
[12] IsCodecDeviceRequested() -> b8
[0] GetFinalOutputRecorderState() -> u32
[1] StartFinalOutputRecorder()
[2] StopFinalOutputRecorder()
[3] AppendFinalOutputRecorderBuffer(u64, buffer<nn::audio::AudioInBuffer, 5>)
[4] RegisterBufferEvent() -> handle<copy>
[5, 1.0.0] GetReleasedFinalOutputRecorderBuffer() -> (u32, buffer<nn::audio::AudoInBuffer, 6>)
[5, 2.0.0+] GetReleasedFinalOutputRecorderBuffer() -> (u32, u64, buffer<nn::audio::AudioInBuffer, 6>)
[6] ContainsFinalOutputRecorderBuffer(u64) -> b8
[7, 2.0.0+] Unknown7(u64) -> u64
[8, 3.0.0+] AppendFinalOutputRecorderBufferAuto(u64, buffer<nn::audio::AudioInBuffer, 0x21>)
[9, 3.0.0+] GetReleasedFinalOutputRecorderBufferAuto() -> (u32, u64, buffer<nn::audio::AudioInBuffer, 0x22>)
[0, 1.0.0-2.0.0] OpenFinalOutputRecorder(u64, u64, handle<copy>) -> (bytes<0x10, 4>, object<nn::audio::detail::IFinalOutputRecorder>)
[0, 3.0.0+] OpenFinalOutputRecorder(bytes<8, 4>, u64, handle<copy>) -> (bytes<0x10, 4>, object<nn::audio::detail::IFinalOutputRecorder>)
[0, 1.0.0-3.0.0] RequestSuspendFinalOutputRecorders(u64, u64) -> handle<copy>
[0, 4.0.0+] RequestSuspendFinalOutputRecorders(u64, u64)
[1, 1.0.0-3.0.0] RequestResumeFinalOutputRecorders(u64, u64) -> handle<copy>
[1, 4.0.0+] RequestResumeFinalOutputRecorders(u64, u64)
[0] RequestSuspendForDebug(u64)
[1] RequestResumeForDebug(u64)
[0] GetTargetVolume(u32) -> u32
[1] SetTargetVolume(u32, u32)
[2] GetTargetVolumeMin() -> u32
[3] GetTargetVolumeMax() -> u32
[4] IsTargetMute(u32) -> b8
[5] SetTargetMute(u64)
[6] IsTargetConnected(u32) -> b8
[7] SetDefaultTarget(unknown<0x18>)
[8] GetDefaultTarget() -> u32
[9] GetAudioOutputMode(u32) -> u32
[10] SetAudioOutputMode(u32, u32)
[11] SetForceMutePolicy(u32)
[12] GetForceMutePolicy() -> u32
[13] GetOutputModeSetting(u32) -> u32
[14] SetOutputModeSetting(u32, u32)
[15] SetOutputTarget(u32)
[16] SetInputTargetForceEnabled(u8)
[17, 3.0.0+] SetHeadphoneOutputLevelMode(u32)
[18, 3.0.0+] GetHeadphoneOutputLevelMode() -> u32
[19, 3.0.0+] AcquireAudioVolumeUpdateEventForPlayReport() -> handle<copy, event>
[20, 3.0.0+] AcquireAudioOutputDeviceUpdateEventForPlayReport() -> handle<copy, event>
[21, 3.0.0+] GetAudioOutputTargetForPlayReport() -> u32
[22, 3.0.0+] NotifyHeadphoneVolumeWarningDisplayedEvent()
[23, 4.0.0+] SetSystemOutputMasterVolume(u32)
[24, 4.0.0+] GetSystemOutputMasterVolume() -> u32
[25, 4.0.0+] GetAudioVolumeDataForPlayReport() -> unknown<7>
[26, 4.0.0+] UpdateHeadphoneSettings(unknown<1>)
[10100] RequestSyncDeliveryCache() -> object<nn::bcat::detail::ipc::IDeliveryCacheProgressService>
[10101, 5.0.0+] RequestSyncDeliveryCacheWithDirectoryName(unknown) -> unknown
[10200, 5.0.0+] CancelSyncDeliveryCacheRequest(unknown) -> unknown
[20100] RequestSyncDeliveryCacheWithApplicationId(u32, nn::ApplicationId) -> object<nn::bcat::detail::ipc::IDeliveryCacheProgressService>
[20101, 5.0.0+] RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName(unknown) -> unknown
[30100] SetPassphrase(nn::ApplicationId, buffer<u8, 9>)
[30200] RegisterBackgroundDeliveryTask(u32, nn::ApplicationId)
[30201] UnregisterBackgroundDeliveryTask(nn::ApplicationId)
[30202] BlockDeliveryTask(nn::ApplicationId)
[30203] UnblockDeliveryTask(nn::ApplicationId)
[90100] EnumerateBackgroundDeliveryTask() -> (u32, buffer<nn::bcat::TaskInfo, 6>)
[90200] GetDeliveryList(nn::ApplicationId) -> (u64, buffer<bytes, 6>)
[90201] ClearDeliveryCacheStorage(nn::ApplicationId)
[90300] GetPushNotificationLog() -> (u32, buffer<nn::bcat::PushNotificationLog, 6>)
[0] Open(nn::bcat::DirectoryName)
[1] Read() -> (u32, buffer<nn::bcat::DeliveryCacheDirectoryEntry, 6>)
[2] GetCount() -> u32
[0] Open(nn::bcat::DirectoryName, nn::bcat::FileName)
[1] Read(u64) -> (u64, buffer<bytes, 6>)
[2] GetSize() -> u64
[3] GetDigest() -> nn::bcat::Digest
[0] GetEvent() -> handle<copy>
[1] GetImpl() -> buffer<nn::bcat::detail::DeliveryCacheProgressImpl, 0x1a>
[0] CreateFileService() -> object<nn::bcat::detail::ipc::IDeliveryCacheFileService>
[1] CreateDirectoryService() -> object<nn::bcat::detail::ipc::IDeliveryCacheDirectoryService>
[10] EnumerateDeliveryCacheDirectory() -> (u32, buffer<nn::bcat::DirectoryName, 6>)
[0] CreateBcatService(u64, pid) -> object<nn::bcat::detail::ipc::IBcatService>
[1] CreateDeliveryCacheStorageService(u64, pid) -> object<nn::bcat::detail::ipc::IDeliveryCacheStorageService>
[2] CreateDeliveryCacheStorageServiceWithApplicationId(nn::ApplicationId) -> object<nn::bcat::detail::ipc::IDeliveryCacheStorageService>
[1] Unknown1()
[2] Unknown2()
[3] Unknown3() -> handle<copy>
[4] Unknown4() -> unknown<1>
[5] Unknown5(buffer<unknown, 9>)
[6, 3.0.0+] Unknown6() -> unknown<1>
[11] Unknown11(unknown<4>)
[12] Unknown12() -> unknown<4>
[13] Unknown13()
[14] Unknown14() -> handle<copy>
[15] Unknown15(unknown<8>)
[101, 3.0.0+] Unknown101() -> unknown<4>
[102, 3.0.0+] Unknown102() -> unknown<1>
[103, 3.0.0+] Unknown103() -> unknown<1>
[0] Unknown0()
[1] Init() -> handle<copy>
[2] Enable()
[3] Disable()
[4] CleanupAndShutdown()
[5] GetAdapterProperties() -> buffer<unknown, 0x1a>
[6] GetAdapterProperty(unknown<4>) -> buffer<unknown, 0xa>
[7] SetAdapterProperty(unknown<4>, buffer<unknown, 9>)
[8] StartDiscovery()
[9] CancelDiscovery()
[10] CreateBond(unknown<6>, buffer<unknown, 0x19>)
[11] RemoveBond(unknown<6>)
[12] CancelBond(unknown<6>)
[13] PinReply(unknown<0x18>)
[14] SspReply(unknown<0xc>)
[15] Unknown15() -> (unknown<4>, buffer<unknown, 0xa>)
[16] InitInterfaces(unknown<2>) -> handle<copy>
[17] HidHostInterface_Connect(unknown<6>)
[18] HidHostInterface_Disconnect(unknown<6>)
[19] HidHostInterface_SendData(unknown<6>, buffer<unknown, 0x19>)
[20] HidHostInterface_SendData2(unknown<6>, buffer<unknown, 9>)
[21] HidHostInterface_SetReport(unknown<0xc>, buffer<unknown, 0x19>)
[22] HidHostInterface_GetReport(unknown<0xc>)
[23] HidHostInterface_WakeController(unknown<6>)
[24] HidHostInterface_AddPairedDevice(buffer<unknown, 0x19>)
[25] HidHostInterface_GetPairedDevice(unknown<6>) -> buffer<unknown, 0x1a>
[26] HidHostInterface_CleanupAndShutdown()
[27] Unknown27() -> (unknown<4>, buffer<unknown, 0xa>)
[28] ExtInterface_SetTSI(unknown<7>)
[29] ExtInterface_SetBurstMode(unknown<7>)
[30] ExtInterface_SetZeroRetran(unknown<6>, buffer<unknown, 9>)
[31] ExtInterface_SetMcMode(unknown<1>)
[32] ExtInterface_StartLlrMode()
[33] ExtInterface_ExitLlrMode()
[34] ExtInterface_SetRadio(unknown<1>)
[35] ExtInterface_SetVisibility(unknown<2>)
[36] Unknown36(unknown<1>)
[37] Unknown37() -> handle<copy>
[38] HidHostInterface_GetLatestPlr() -> (unknown<4>, buffer<unknown, 0xa>)
[39] ExtInterface_GetPendingConnections() -> buffer<unknown, 0x16>
[40] HidHostInterface_GetChannelMap()
[41] SetIsBluetoothBoostEnabled() -> buffer<unknown, 0x16>
[42] GetIsBluetoothBoostEnabled(unknown<1>)
[43] SetIsBluetoothAfhEnabled() -> unknown<1>
[44] GetIsBluetoothAfhEnabled(unknown<1>)
[0] ShutdownSystem()
[1] RebootSystem()
[2] GetWakeupReason() -> unknown<4>
[3] GetShutdownReason() -> unknown<4>
[4] GetAcOk() -> unknown<1>
[5] GetBoardPowerControlEvent(unknown<4>) -> handle<copy>
[6] GetSleepButtonState() -> unknown<4>
[7] GetPowerEvent(unknown<4>) -> handle<copy>
[8] Unknown8(unknown<8>) -> unknown<4>
[9] Unknown9(unknown<4>)
[10] Unknown10() -> unknown<0xc>
[0] GetExternalRtcValue() -> unknown<8>
[1] SetExternalRtcValue(unknown<8>)
[2] ReadExternalRtcResetFlag() -> unknown<1>
[3] ClearExternalRtcResetFlag()
[0] SetIfUp(unknown<0x2c>, buffer<unknown, 5>)
[1] SetIfUpWithEvent(unknown<0x2c>, buffer<unknown, 5>) -> handle<copy>
[2] CancelIf(buffer<unknown, 5>)
[3] SetIfDown(unknown<4>, buffer<unknown, 5>)
[4] GetIfState(buffer<unknown, 5>) -> buffer<unknown, 6>
[5] DhcpRenew(buffer<unknown, 5>)
[6] AddStaticArpEntry(unknown<4>, buffer<unknown, 5>)
[7] RemoveArpEntry(unknown<4>)
[8] LookupArpEntry(unknown<4>) -> buffer<unknown, 6>
[9] LookupArpEntry2(buffer<unknown, 5>) -> buffer<unknown, 6>
[10] ClearArpEntries()
[11] ClearArpEntries2(buffer<unknown, 5>)
[12] PrintArpEntries()
[0] Unknown0() -> unknown<4>
[1] Unknown1() -> unknown<0x2a>
[2] RegisterSystemEventForConnectedDeviceConditionImpl() -> (unknown<1>, handle<copy>)
[3] Unknown3() -> buffer<unknown, 0x1a>
[4] Unknown4(unknown<7>)
[5] Unknown5(buffer<unknown, 0x19>)
[6] Unknown6(unknown<4>)
[7] Unknown7(unknown<4>)
[8] RegisterSystemEventForRegisteredDeviceInfoImpl() -> (unknown<1>, handle<copy>)
[9] Unknown9() -> buffer<unknown, 0x1a>
[10] Unknown10(unknown<0x60>)
[11] Unknown11(unknown<6>)
[12] Unknown12(unknown<6>)
[13] Unknown13(unknown<6>)
[14] EnableRadioImpl()
[15] DisableRadioImpl()
[16] Unknown16(unknown<6>)
[17] Unknown17(unknown<6>, buffer<unknown, 0x19>)
[18, 2.0.0+] Unknown18() -> (unknown<1>, handle<copy>)
[19, 4.0.0+] Unknown19() -> (unknown<1>, handle<copy>)
[20, 4.0.0+] Unknown20() -> unknown<1>
[21, 4.0.0+] Unknown21(unknown<1>)
[0] GetCoreImpl() -> object<nn::btm::IBtmSystemCore>
[0] StartGamepadPairingImpl()
[1] CancelGamepadPairingImpl()
[2] ClearGamepadPairingDatabaseImpl()
[3] GetPairedGamepadCountImpl() -> unknown<1>
[4] EnableRadioImpl()
[5] DisableRadioImpl()
[6] GetRadioOnOffImpl() -> unknown<1>
[7, 2.0.0+] AcquireRadioEventImpl() -> (unknown<1>, handle<copy>)
[8, 2.0.0+] AcquireGamepadPairingEventImpl() -> (unknown<1>, handle<copy>)
[9, 2.0.0+] IsGamepadPairingStartedImpl() -> unknown<1>
[2001] OpenAlbumMovieReadStream(unknown) -> unknown
[2002] CloseAlbumMovieReadStream(unknown) -> unknown
[2003] GetAlbumMovieReadStreamMovieDataSize(unknown) -> unknown
[2004] ReadMovieDataFromAlbumMovieReadStream(unknown) -> unknown
[2005] GetAlbumMovieReadStreamBrokenReason(unknown) -> unknown
[0] Unknown0(unknown<1>) -> unknown<8>
[1] Unknown1(unknown<1>) -> (unknown<8>, buffer<unknown, 6>)
[2] Unknown2(unknown<0x18>) -> (unknown<8>, buffer<unknown, 6>)
[3] Unknown3(unknown<0x18>)
[4] Unknown4(unknown<0x20>)
[5] Unknown5(unknown<1>) -> unknown<1>
[6] Unknown6(unknown<1>) -> unknown<0x30>
[7] Unknown7(unknown<0x18>) -> unknown<8>
[8] Unknown8(unknown<0x18>) -> (unknown<8>, buffer<unknown, 6>)
[9] Unknown9(unknown<0x18>) -> (unknown<0x10>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[10] Unknown10(unknown<0x18>) -> (unknown<0x10>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[11] Unknown11(unknown<0x28>) -> unknown<0x20>
[12] Unknown12(unknown<0x38>) -> (unknown<0x10>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[13] Unknown13(unknown<0x38>) -> (unknown<0x10>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[14] Unknown14(unknown<0x38>) -> (unknown<0x50>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[301] Unknown301() -> (unknown<0x20>, buffer<unknown, 6>)
[401] Unknown401() -> unknown<1>
[501] Unknown501(unknown<2>) -> unknown<8>
[1001] Unknown1001(unknown<0x38>) -> (unknown<0x50>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[1002] Unknown1002(unknown<0x38>) -> (buffer<unknown, 0x16>, buffer<unknown, 0x46>, buffer<unknown, 6>)
[8001] Unknown8001(unknown<1>)
[8002] Unknown8002(unknown<1>)
[8011] Unknown8011(unknown<1>)
[8012] Unknown8012(unknown<1>) -> unknown<0x10>
[8021] Unknown8021(unknown<0x28>, pid) -> unknown<0x20>
[10011] Unknown10011(unknown<1>)
[2001] Unknown2001(unknown<0x18>) -> unknown<8>
[2002] Unknown2002(unknown<8>)
[2003] Unknown2003(unknown<8>) -> unknown<8>
[2004] Unknown2004(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2005] Unknown2005(unknown<8>)
[2006] Unknown2006(unknown<8>) -> unknown<8>
[2007] Unknown2007(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2008] Unknown2008(unknown<8>) -> unknown<0x40>
[102] GetAlbumFileListByAruid(unknown) -> unknown
[103] DeleteAlbumFileByAruid(unknown) -> unknown
[104] GetAlbumFileSizeByAruid(unknown) -> unknown
[110] LoadAlbumScreenShotImageByAruid(unknown) -> unknown
[120] LoadAlbumScreenShotThumbnailImageByAruid(unknown) -> unknown
[60002] OpenAccessorSessionForApplication(unknown) -> unknown
[2001] Unknown2001(unknown<1>)
[2002] Unknown2002(unknown<1>)
[2011] Unknown2011(unknown<0x10>)
[2012] Unknown2012(unknown<0x10>)
[2013] Unknown2013(unknown<8>) -> unknown<8>
[2014] Unknown2014(unknown<8>)
[2101] Unknown2101(unknown<0x10>) -> unknown<0x18>
[2102] Unknown2102(unknown<0x28>) -> unknown<0x20>
[2201] Unknown2201(unknown<0x18>, buffer<unknown, 0x45>)
[2301] Unknown2301(unknown<0x18>, buffer<unknown, 0x45>)
[2001] Unknown2001(unknown<0x18>) -> unknown<8>
[2002] Unknown2002(unknown<8>)
[2003] Unknown2003(unknown<8>) -> unknown<8>
[2004] Unknown2004(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2005] Unknown2005(unknown<8>)
[2006] Unknown2006(unknown<8>) -> unknown<8>
[2007] Unknown2007(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2008] Unknown2008(unknown<8>) -> unknown<0x40>
[2401] Unknown2401(unknown<0x18>) -> unknown<8>
[2402] Unknown2402(unknown<8>)
[2403] Unknown2403(unknown<8>)
[2404] Unknown2404(unknown<8>)
[2405] Unknown2405(unknown<8>)
[2411] Unknown2411(unknown<8>)
[2412] Unknown2412(unknown<8>)
[2413] Unknown2413(unknown<8>)
[2414] Unknown2414(unknown<8>)
[2421] Unknown2421(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2422] Unknown2422(unknown<0x10>, buffer<unknown, 5>)
[2424] Unknown2424(unknown<0x20>, buffer<unknown, 5>)
[2431] Unknown2431(unknown<8>)
[2433] Unknown2433(unknown<8>) -> unknown<8>
[2434] Unknown2434(unknown<0x10>)
[1] Unknown1(unknown<0x20>) -> buffer<unknown, 0x46>
[2] Unknown2(unknown<0x28>) -> buffer<unknown, 0x46>
[1001] Unknown1001(unknown<0x10>)
[1002] Unknown1002(unknown<0x18>)
[1011] Unknown1011(unknown<8>)
[2001] Unknown2001(unknown<1>)
[2002] Unknown2002(unknown<1>)
[201] SaveScreenShot(u32, u32, nn::applet::AppletResourceUserId, pid, buffer<bytes, 0x45>) -> nn::capsrv::ApplicationAlbumEntry
[203] SaveScreenShotEx0(nn::capsrv::detail::ScreenShotAttributeEx0, u32, nn::applet::AppletResourceUserId, pid, buffer<bytes, 0x45>) -> nn::capsrv::ApplicationAlbumEntry
[1] Unknown1(unknown<0x28>) -> buffer<unknown, 0x46>
[2] Unknown2(unknown<0x30>) -> buffer<unknown, 0x46>
[1001] Unknown1001(unknown<0x10>)
[1002] Unknown1002(unknown<0x18>)
[1003] Unknown1003(unknown<0x58>)
[1011] Unknown1011(unknown<8>)
[1012] Unknown1012(unknown<8>)
[1201] Unknown1201(unknown<0x10>) -> unknown<0x18>
[1202] Unknown1202()
[1203] Unknown1203(unknown<8>) -> (unknown<8>, buffer<unknown, 6>)
[201] Unknown201(unknown<0x10>, pid, buffer<unknown, 0x45>) -> unknown<0x20>
[202] Unknown202(unknown<0x38>, buffer<unknown, 0x45>, buffer<unknown, 0x45>) -> unknown<0x20>
[203] Unknown203(unknown<0x50>, pid, buffer<unknown, 0x45>) -> unknown<0x20>
[204] Unknown204(unknown<0x78>, buffer<unknown, 0x45>, buffer<unknown, 0x45>) -> unknown<0x20>
[0] DecodeInterleaved(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
Takes a type-5 input buffer (OpusDataIn) and a type-6 output buffer (PcmDataOut). Decodes the Opus source data to PCM and returns two u32s DecodedSampleCount and DecodedDataSize.
[1] SetContext(buffer<unknown, 5>)
Takes a type-5 input buffer (DecoderContextIn). Sends the unknown context data to the hardware decoder.
[2, 3.0.0+] Unknown2(buffer<unknown, 5>) -> (u32, u32, buffer<unknown, 6>)
[3, 3.0.0+] Unknown3(buffer<unknown, 5>)
[4, 4.0.0+] Unknown4(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
[5, 4.0.0+] Unknown5(buffer<unknown, 5>) -> (u32, u32, u64, buffer<unknown, 0x46>)
[0] Initialize(bytes<8, 4>, u32, handle<copy>) -> object<nn::codec::detail::IHardwareOpusDecoder>
Takes two u32s SampleRate and ChannelCount packed as an u64, an u32 WorkBufferSize and a TransferMemory handle for WorkBuffer. Returns an #IHardwareOpusDecoder object. The TransferMemory is created by the user-process with permissions=0.
[1] GetWorkBufferSize(bytes<8, 4>) -> u32
Takes two u32s SampleRate and ChannelCount packed as an u64. Returns the required size for the decoder's work buffer.
[2, 3.0.0+] InitializeMultiStream(u32, handle<copy>, buffer<unknown<0x110>, 0x19>) -> object<nn::codec::detail::IHardwareOpusDecoder>
[3, 3.0.0+] GetWorkBufferSizeMultiStream(buffer<unknown<0x110>, 0x19>) -> u32
[0] BreakDebugProcess(unknown) -> unknown
[1] TerminateDebugProcess(unknown) -> unknown
[2] CloseHandle(unknown) -> unknown
[3] LoadImage(unknown) -> unknown
[4] GetProcessId(unknown) -> unknown
[5] GetProcessHandle(unknown) -> unknown
[6] WaitSynchronization(unknown) -> unknown
[7] GetDebugEvent(unknown) -> unknown
[8] GetProcessModuleInfo(unknown) -> unknown
[9] GetProcessList(unknown) -> unknown
[10] GetThreadList(unknown) -> unknown
[11] GetDebugThreadContext(unknown) -> unknown
[12] ContinueDebugEvent(unknown) -> unknown
[13] ReadDebugProcessMemory(unknown) -> unknown
[14] WriteDebugProcessMemory(unknown) -> unknown
[15] SetDebugThreadContext(unknown) -> unknown
[16] GetDebugThreadParam(unknown) -> unknown
[17] InitializeThreadInfo(unknown) -> unknown
[18] SetHardwareBreakPoint(unknown) -> unknown
[19] QueryDebugProcessMemory(unknown) -> unknown
[20] GetProcessMemoryDetails(unknown) -> unknown
[21] AttachByProgramId(unknown) -> unknown
[22] AttachOnLaunch(unknown) -> unknown
[23] GetDebugMonitorProcessId(unknown) -> unknown
[25] GetJitDebugProcessList(unknown) -> unknown
[26] CreateCoreDump(unknown) -> unknown
[27] GetAllDebugThreadInfo(unknown) -> unknown
[29] TargetIO_FileOpen(unknown) -> unknown
[30] TargetIO_FileClose(unknown) -> unknown
[31] TargetIO_FileRead(unknown) -> unknown
[32] TargetIO_FileWrite(unknown) -> unknown
[33] TargetIO_FileSetAttributes(unknown) -> unknown
[34] TargetIO_FileGetInformation(unknown) -> unknown
[35] TargetIO_FileSetTime(unknown) -> unknown
[36] TargetIO_FileSetSize(unknown) -> unknown
[37] TargetIO_FileDelete(unknown) -> unknown
[38] TargetIO_FileMove(unknown) -> unknown
[39] TargetIO_DirectoryCreate(unknown) -> unknown
[40] TargetIO_DirectoryDelete(unknown) -> unknown
[41] TargetIO_DirectoryRename(unknown) -> unknown
[42] TargetIO_DirectoryGetCount(unknown) -> unknown
[43] TargetIO_DirectoryOpen(unknown) -> unknown
[44] TargetIO_DirectoryGetNext(unknown) -> unknown
[45] TargetIO_DirectoryClose(unknown) -> unknown
[46] TargetIO_GetFreeSpace(unknown) -> unknown
[47] TargetIO_GetVolumeInformation(unknown) -> unknown
[48] InitiateCoreDump(unknown) -> unknown
[49] ContinueCoreDump(unknown) -> unknown
[50] AddTTYToCoreDump(unknown) -> unknown
[51] AddImageToCoreDump(unknown) -> unknown
[52] CloseCoreDump(unknown) -> unknown
[0] SubmitContext(buffer<unknown, 5>, buffer<unknown, 5>)
[1] CreateReport(unknown<4>, buffer<unknown, 5>, buffer<unknown, 5>, buffer<unknown, 5>)
[2, 3.0.0+] Unknown2(unknown<0x18>)
[3, 3.0.0+] Unknown3()
[4, 3.0.0+] Unknown4()
[5, 3.0.0+] Unknown5()
[6, 5.0.0+] Unknown6(unknown) -> unknown
[0] GetReportList(unknown<4>) -> buffer<unknown, 6>
[1] GetEvent() -> handle<copy>
[2, 4.0.0+] Unknown2()
[3, 5.0.0+] Unknown3(unknown) -> unknown
[4, 5.0.0+] Unknown4(unknown) -> unknown
[0] OpenReport() -> object<nn::erpt::sf::IReport>
[1] OpenManager() -> object<nn::erpt::sf::IManager>
[1] ImportTicket(buffer<unknown, 5>, buffer<unknown, 5>)
[2] ImportTicketCertificateSet(buffer<unknown, 5>)
[3] DeleteTicket(buffer<unknown, 5>)
[4] DeletePersonalizedTicket(unknown<4>)
[5] DeleteAllCommonTicket()
[6] DeleteAllPersonalizedTicket()
[7] DeleteAllPersonalizedTicketEx(buffer<unknown, 5>)
[8, 2.0.0-5.1.0] GetTitleKey(unknown<0x14>) -> buffer<unknown, 0x16>
[9] CountCommonTicket() -> unknown<4>
[10] CountPersonalizedTicket() -> unknown<4>
[11] ListCommonTicket() -> (unknown<4>, buffer<unknown, 6>)
[12] ListPersonalizedTicket() -> (unknown<4>, buffer<unknown, 6>)
[13] ListMissingPersonalizedTicket(buffer<unknown, 5>) -> (unknown<4>, buffer<unknown, 6>)
[14] GetCommonTicketSize(unknown<0x10>) -> unknown<8>
[15, 2.0.0-5.1.0] GetPersonalizedTicketSize(unknown<0x10>) -> unknown<8>
[16] GetCommonTicketData(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[17, 2.0.0-5.1.0] GetPersonalizedTicketData(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[18] OwnTicket(buffer<unknown, 5>) -> buffer<unknown, 6>
[19] GetTicketInfo(buffer<unknown, 5>) -> (unknown<4>, buffer<unknown, 6>)
[20] ListLightTicketInfo(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[21, 2.0.0+] SignData(buffer<unknown, 5>) -> (buffer<unknown, 0x16>, buffer<unknown, 0x16>)
[22, 4.0.0+] GetCommonTicketAndCertificateSize(unknown<0x10>) -> unknown<0x10>
[23, 4.0.0+] GetCommonTicketAndCertificateData(unknown<0x10>) -> (unknown<0x10>, buffer<unknown, 6>, buffer<unknown, 6>)
[24, 4.0.0+] ImportPrepurchaseRecord(buffer<unknown, 0x15>)
[25, 4.0.0+] DeletePrepurchaseRecord(buffer<unknown, 0x15>)
[26, 4.0.0+] DeleteAllPrepurchaseRecord()
[27, 4.0.0+] CountPrepurchaseRecord() -> unknown<4>
[28, 4.0.0+] ListPrepurchaseRecord() -> (unknown<4>, buffer<unknown, 6>)
[29, 4.0.0+] ListPrepurchaseRecordInfo(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[30, 5.0.0+] Unknown30(unknown) -> unknown
[31, 5.0.0+] Unknown31(unknown) -> unknown
[32, 5.0.0+] Unknown32(unknown) -> unknown
[33, 5.0.0+] Unknown33(unknown) -> unknown
[34, 5.0.0+] Unknown34(unknown) -> unknown
[35, 5.0.0+] Unknown35(unknown) -> unknown
[36, 6.0.0+] Unknown36(unknown) -> unknown
[501, 6.0.0+] Unknown501(unknown) -> unknown
[502, 6.0.0+] Unknown502(unknown) -> unknown
[503, 6.0.0+] GetTitleKey(unknown) -> unknown
[504, 6.0.0+] Unknown504(unknown) -> unknown
[508, 6.0.0+] Unknown508(unknown) -> unknown
[509, 6.0.0+] Unknown509(unknown) -> unknown
[510, 6.0.0+] Unknown510(unknown) -> unknown
[1001, 6.0.0+] Unknown1001(unknown) -> unknown
[1002, 6.0.0+] Unknown1002(unknown) -> unknown
[1003, 6.0.0+] Unknown1003(unknown) -> unknown
[1004, 6.0.0+] Unknown1004(unknown) -> unknown
[1005, 6.0.0+] Unknown1005(unknown) -> unknown
[1006, 6.0.0+] Unknown1006(unknown) -> unknown
[1007, 6.0.0+] Unknown1007(unknown) -> unknown
[1009, 6.0.0+] Unknown1009(unknown) -> unknown
[1010, 6.0.0+] Unknown1010(unknown) -> unknown
[1011, 6.0.0+] Unknown1011(unknown) -> unknown
[1012, 6.0.0+] Unknown1012(unknown) -> unknown
[1013, 6.0.0+] Unknown1013(unknown) -> unknown
[1014, 6.0.0+] Unknown1014(unknown) -> unknown
[1015, 6.0.0+] Unknown1015(unknown) -> unknown
[1016, 6.0.0+] Unknown1016(unknown) -> unknown
[1501, 6.0.0+] Unknown1501(unknown) -> unknown
[1502, 6.0.0+] Unknown1502(unknown) -> unknown
[1503, 6.0.0+] Unknown1503(unknown) -> unknown
[1504, 6.0.0+] Unknown1504(unknown) -> unknown
[1505, 6.0.0+] Unknown1505(unknown) -> unknown
[2000, 6.0.0+] Unknown2000(unknown) -> unknown
[2501, 6.0.0+] Unknown2501(unknown) -> unknown
[2502, 6.0.0+] Unknown2502(unknown) -> unknown
[0] Initialize(buffer<unknown, 5>) -> handle<copy>
[1] Cancel()
[2] GetResult()
[3] GetMediaList() -> buffer<unknown, 6>
[4] SetMediaType(unknown<4>)
[5] GetMediaType() -> unknown<0xc>
[0] GetReadableHandle() -> handle<copy>
[1] Cancel()
[2] GetResult()
[3] GetInterfaceList() -> buffer<unknown, 6>
[4] GetInterfaceCount() -> unknown<4>
[0] SetUrl(buffer<unknown, 5>)
[1] ImportCrt(buffer<unknown, 5>)
[2] ImportPki(buffer<unknown, 5>, buffer<unknown, 5>)
[3] SetAutoUpload(unknown<8>)
[0] Initialize() -> handle<copy>
[1] UploadAll()
[2] UploadSelected(buffer<unknown, 5>)
[3] GetUploadStatus() -> buffer<unknown, 6>
[4] CancelUpload()
[5] GetResult()
[0] GetFatalEvent() -> handle<copy>
[0] ThrowFatal(u64, u64, pid)
[1] ThrowFatalWithPolicy(u64, u64, pid)
[2] ThrowFatalWithCpuContext(u64 errorCode, u64, buffer<unknown, 0x15, 0x110> errorBuf, pid)
[0] Initialize(u64, handle<copy>) -> handle<copy>
[1] Read() -> (u32, u32, u32, buffer<bytes, 6>)
[2] Cancel()
[0] Initialize(nn::fgm::Module, u64, pid) -> handle<copy>
[1] Set(u32, u32)
[2] Get() -> u32
[3] Cancel()
[0] Initialize() -> object<nn::fgm::sf::IRequest>
[0] GetCompletionEvent() -> handle<copy>
[1] Cancel()
[10100] GetFriendListIds(u32, nn::account::Uid, nn::friends::detail::ipc::SizedFriendFilter, u64, pid) -> (u32, buffer<nn::account::NetworkServiceAccountId, 0xa>)
[10101] GetFriendList(u32, nn::account::Uid, nn::friends::detail::ipc::SizedFriendFilter, u64, pid) -> (u32, buffer<nn::friends::detail::FriendImpl, 6>)
[10102] UpdateFriendInfo(nn::account::Uid, u64, pid, buffer<nn::account::NetworkServiceAccountId, 9>) -> buffer<nn::friends::detail::FriendImpl, 6>
[10110] GetFriendProfileImage(nn::account::Uid, nn::account::NetworkServiceAccountId) -> (u32, buffer<bytes, 6>)
[10200] SendFriendRequestForApplication(nn::account::Uid, nn::account::NetworkServiceAccountId, u64, pid, buffer<nn::friends::InAppScreenName, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>)
[10211] AddFacedFriendRequestForApplication(nn::friends::FacedFriendRequestRegistrationKey, nn::account::Nickname, nn::account::Uid, u64, pid, buffer<nn::friends::InAppScreenName, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>, buffer<bytes, 5>)
[10400] GetBlockedUserListIds(u32, nn::account::Uid) -> (u32, buffer<nn::account::NetworkServiceAccountId, 0xa>)
[10500] GetProfileList(nn::account::Uid, buffer<nn::account::NetworkServiceAccountId, 9>) -> buffer<nn::friends::detail::ProfileImpl, 6>
[10600] DeclareOpenOnlinePlaySession(nn::account::Uid)
[10601] DeclareCloseOnlinePlaySession(nn::account::Uid)
[10610] UpdateUserPresence(nn::account::Uid, u64, pid, buffer<nn::friends::detail::UserPresenceImpl, 0x19>)
[10700] GetPlayHistoryRegistrationKey(b8, nn::account::Uid) -> buffer<nn::friends::PlayHistoryRegistrationKey, 0x1a>
[10701] GetPlayHistoryRegistrationKeyWithNetworkServiceAccountId(b8, nn::account::NetworkServiceAccountId) -> buffer<nn::friends::PlayHistoryRegistrationKey, 0x1a>
[10702] AddPlayHistory(nn::account::Uid, u64, pid, buffer<nn::friends::PlayHistoryRegistrationKey, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>)
[11000] GetProfileImageUrl(nn::friends::Url, u32) -> nn::friends::Url
[20100] GetFriendCount(nn::account::Uid, nn::friends::detail::ipc::SizedFriendFilter, u64, pid) -> u32
[20101] GetNewlyFriendCount(nn::account::Uid) -> u32
[20102] GetFriendDetailedInfo(nn::account::Uid, nn::account::NetworkServiceAccountId) -> buffer<nn::friends::detail::FriendDetailedInfoImpl, 0x1a>
[20103] SyncFriendList(nn::account::Uid)
[20104] RequestSyncFriendList(nn::account::Uid)
[20110] LoadFriendSetting(nn::account::Uid, nn::account::NetworkServiceAccountId) -> buffer<nn::friends::detail::FriendSettingImpl, 0x1a>
[20200] GetReceivedFriendRequestCount(nn::account::Uid) -> (u32, u32)
[20201] GetFriendRequestList(u32, u32, nn::account::Uid) -> (u32, buffer<nn::friends::detail::FriendRequestImpl, 6>)
[20300] GetFriendCandidateList(u32, nn::account::Uid) -> (u32, buffer<nn::friends::detail::FriendCandidateImpl, 6>)
[20301] GetNintendoNetworkIdInfo(u32, nn::account::Uid) -> (u32, buffer<nn::friends::NintendoNetworkIdUserInfo, 0x1a>, buffer<nn::friends::detail::NintendoNetworkIdFriendImpl, 6>)
[20302, 5.0.0+] GetSnsAccountLinkage(unknown) -> unknown
[20303, 5.0.0+] GetSnsAccountProfile(unknown) -> unknown
[20304, 5.0.0+] GetSnsAccountFriendList(unknown) -> unknown
[20400] GetBlockedUserList(u32, nn::account::Uid) -> (u32, buffer<nn::friends::detail::BlockedUserImpl, 6>)
[20401] SyncBlockedUserList(nn::account::Uid)
[20500] GetProfileExtraList(nn::account::Uid, buffer<nn::account::NetworkServiceAccountId, 9>) -> buffer<nn::friends::detail::ProfileExtraImpl, 6>
[20501] GetRelationship(nn::account::Uid, nn::account::NetworkServiceAccountId) -> nn::friends::Relationship
[20600] GetUserPresenceView(nn::account::Uid) -> buffer<nn::friends::detail::UserPresenceViewImpl, 0x1a>
[20700] GetPlayHistoryList(u32, nn::account::Uid) -> (u32, buffer<nn::friends::detail::PlayHistoryImpl, 6>)
[20701] GetPlayHistoryStatistics(nn::account::Uid) -> nn::friends::PlayHistoryStatistics
[20800] LoadUserSetting(nn::account::Uid) -> buffer<nn::friends::detail::UserSettingImpl, 0x1a>
[20801] SyncUserSetting(nn::account::Uid)
[20900] RequestListSummaryOverlayNotification()
[21000] GetExternalApplicationCatalog(nn::settings::LanguageCode, nn::friends::ExternalApplicationCatalogId) -> buffer<nn::friends::ExternalApplicationCatalog, 0x1a>
[30100] DropFriendNewlyFlags(nn::account::Uid)
[30101] DeleteFriend(nn::account::Uid, nn::account::NetworkServiceAccountId)
[30110] DropFriendNewlyFlag(nn::account::Uid, nn::account::NetworkServiceAccountId)
[30120] ChangeFriendFavoriteFlag(b8, nn::account::Uid, nn::account::NetworkServiceAccountId)
[30121] ChangeFriendOnlineNotificationFlag(b8, nn::account::Uid, nn::account::NetworkServiceAccountId)
[30200] SendFriendRequest(u32, nn::account::Uid, nn::account::NetworkServiceAccountId)
[30201] SendFriendRequestWithApplicationInfo(u32, nn::account::Uid, nn::account::NetworkServiceAccountId, nn::friends::ApplicationInfo, buffer<nn::friends::InAppScreenName, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>)
[30202] CancelFriendRequest(nn::account::Uid, nn::friends::RequestId)
[30203] AcceptFriendRequest(nn::account::Uid, nn::friends::RequestId)
[30204] RejectFriendRequest(nn::account::Uid, nn::friends::RequestId)
[30205] ReadFriendRequest(nn::account::Uid, nn::friends::RequestId)
[30210] GetFacedFriendRequestRegistrationKey(nn::account::Uid) -> nn::friends::FacedFriendRequestRegistrationKey
[30211] AddFacedFriendRequest(nn::friends::FacedFriendRequestRegistrationKey, nn::account::Nickname, nn::account::Uid, buffer<bytes, 5>)
[30212] CancelFacedFriendRequest(nn::account::Uid, nn::account::NetworkServiceAccountId)
[30213] GetFacedFriendRequestProfileImage(nn::account::Uid, nn::account::NetworkServiceAccountId) -> (u32, buffer<bytes, 6>)
[30214] GetFacedFriendRequestProfileImageFromPath(buffer<u8, 9>) -> (u32, buffer<bytes, 6>)
[30215] SendFriendRequestWithExternalApplicationCatalogId(u32, nn::account::Uid, nn::account::NetworkServiceAccountId, nn::friends::ExternalApplicationCatalogId, buffer<nn::friends::InAppScreenName, 0x19>, buffer<nn::friends::InAppScreenName, 0x19>)
[30216] ResendFacedFriendRequest(nn::account::Uid, nn::account::NetworkServiceAccountId)
[30217] SendFriendRequestWithNintendoNetworkIdInfo(nn::friends::MiiName, nn::friends::MiiImageUrlParam, nn::friends::MiiName, nn::friends::MiiImageUrlParam, u32, nn::account::Uid, nn::account::NetworkServiceAccountId)
[30300, 5.0.0+] GetSnsAccountLinkPageUrl(unknown) -> unknown
[30301, 5.0.0+] UnlinkSnsAccount(unknown) -> unknown
[30400] BlockUser(u32, nn::account::Uid, nn::account::NetworkServiceAccountId)
[30401] BlockUserWithApplicationInfo(u32, nn::account::Uid, nn::account::NetworkServiceAccountId, nn::friends::ApplicationInfo, buffer<nn::friends::InAppScreenName, 0x19>)
[30402] UnblockUser(nn::account::Uid, nn::account::NetworkServiceAccountId)
[30500] GetProfileExtraFromFriendCode(nn::friends::FriendCode, nn::account::Uid) -> buffer<nn::friends::detail::ProfileExtraImpl, 0x1a>
[30700] DeletePlayHistory(nn::account::Uid)
[30810] ChangePresencePermission(u32, nn::account::Uid)
[30811] ChangeFriendRequestReception(b8, nn::account::Uid)
[30812] ChangePlayLogPermission(u32, nn::account::Uid)
[30820] IssueFriendCode(nn::account::Uid)
[30830] ClearPlayLog(nn::account::Uid)
[49900] DeleteNetworkServiceAccountCache(nn::account::Uid)
[0] Create() -> object<nn::friends::detail::ipc::IFriendService>
[0] GetEvent() -> handle<copy>
[1] Clear()
[2] Pop() -> nn::friends::detail::ipc::SizedNotificationInfo
[0] CreateFriendService() -> object<nn::friends::detail::ipc::IFriendService>
[1] CreateNotificationService(nn::account::Uid) -> object<nn::friends::detail::ipc::INotificationService>
[2, 4.0.0+] CreateDaemonSuspendSessionService() -> object<nn::friends::detail::ipc::IDaemonSuspendSessionService>
[0] IsSdCardInserted() -> b8 is_inserted
[1] GetSdCardSpeedMode() -> u64 speed_mode
[2, 2.0.0+] GetSdCardCid(u64) -> buffer<unknown, 6> cid
[3, 2.0.0+] GetSdCardUserAreaSize() -> u64 size
[4, 2.0.0+] GetSdCardProtectedAreaSize() -> u64 protected_size
[5, 2.0.0+] GetAndClearSdCardErrorInfo(u64) -> (bytes<0x10, 4>, u64, buffer<unknown, 6>)
[100] GetMmcCid(u64) -> buffer<unknown, 6> cid
[101] GetMmcSpeedMode() -> u64 speed_mode
[110] EraseMmc(u32)
[111] GetMmcPartitionSize(u32) -> u64 partition_size
[112, 2.0.0+] GetMmcPatrolCount() -> u32 patrol_count
[113, 2.0.0+] GetAndClearMmcErrorInfo(u64) -> (bytes<0x10, 4>, u64, buffer<unknown, 6>)
[114, 2.0.0+] GetMmcExtendedCsd(u64) -> buffer<unknown, 6>
[115, 4.0.0+] SuspendMmcPatrol()
[116, 4.0.0+] ResumeMmcPatrol()
[200] IsGameCardInserted() -> b8 is_inserted
[201] EraseGameCard(u32, u64)
[202] GetGameCardHandle() -> u32 gamecard_handle
[203] GetGameCardUpdatePartitionInfo(u32) -> (u32 version, nn::ApplicationId tid)
Returns a titleID and the title-version for it.
NS appears to only use this with Content_Manager_services#GetTitleIdInfo and Content_Manager_services#GetUpdateTitleList with storageid=nandsys, for checking whether a sysupdate is required.
[204] FinalizeGameCardDriver()
[205] GetGameCardAttribute(u32) -> u8
[206] GetGameCardDeviceCertificate(u32, u64) -> buffer<unknown, 6> certificate
[207] GetGameCardAsicInfo(u64, u64, buffer<unknown, 5>) -> buffer<unknown, 6>
[208] GetGameCardIdSet(u64) -> buffer<unknown, 6>
[209] WriteToGameCard(u64, u64) -> buffer<unknown, 6>
[210] SetVerifyWriteEnalbleFlag(u8 flag)
[211] GetGameCardImageHash(u32, u64) -> buffer<unknown, 6> image_hash
[212, 2.0.0+] GetGameCardErrorInfo(u64, u64, buffer<unknown, 5>) -> buffer<unknown, 6> error_info
[213, 2.0.0+] EraseAndWriteParamDirectly(u64, buffer<unknown, 5>)
[214, 2.0.0+] ReadParamDirectly(u64) -> buffer<unknown, 6>
[215, 2.0.0+] ForceEraseGameCard()
[216, 2.0.0+] GetGameCardErrorInfo2() -> bytes<0x10, 2> error_info
[217, 2.1.0+] GetGameCardErrorReportInfo() -> bytes<0x40, 4> error_report_info
[218, 3.0.0+] GetGameCardDeviceId(u64) -> buffer<unknown, 6> device_id
[300] SetSpeedEmulationMode(u32 emu_mode)
[301] GetSpeedEmulationMode() -> u32 emu_mode
[400, 5.0.0+] SuspendSdmmcControl(unknown) -> unknown
[401, 5.0.0+] ResumeSdmmcControl(unknown) -> unknown
[0] Read() -> (u64, buffer<unknown, 6>)
Takes a type-0x6 output buffer. Returns an output u64(?) for the total number of read entries, this is 0 when no more entries are available.
The output buffer contains the read array of #DirectoryEntry. This doesn't include entries for "." and "..".
[1] GetEntryCount() -> u64
Returns an u64 for the total number of readable entries.
[0] GetEventHandle() -> handle<copy, event>
[0] CreateFile(u32 mode, u64 size, buffer<bytes<0x301>, 0x19, 0x301> path)
[1] DeleteFile(buffer<bytes<0x301>, 0x19, 0x301> path)
[2] CreateDirectory(buffer<bytes<0x301>, 0x19, 0x301> path)
[3] DeleteDirectory(buffer<bytes<0x301>, 0x19, 0x301> path)
[4] DeleteDirectoryRecursively(buffer<bytes<0x301>, 0x19, 0x301> path)
[5] RenameFile(buffer<bytes<0x301>, 0x19, 0x301> old_path, buffer<bytes<0x301>, 0x19, 0x301> new_path)
[6] RenameDirectory(buffer<bytes<0x301>, 0x19, 0x301> old_path, buffer<bytes<0x301>, 0x19, 0x301> new_path)
[7] GetEntryType(buffer<bytes<0x301>, 0x19, 0x301> path) -> nn::fssrv::sf::DirectoryEntryType
Takes a type-0x9 input buffer for the path and returns #DirectoryEntryType as an output u32.
[8] OpenFile(u32 mode, buffer<bytes<0x301>, 0x19, 0x301> path) -> object<nn::fssrv::sf::IFile> file
Takes a type-0x19 input buffer for the path, and an u32 mode. mode controls how the file is opened, based on which bits are set:
[9] OpenDirectory(u32 filter_flags, buffer<bytes<0x301>, 0x19, 0x301> path) -> object<nn::fssrv::sf::IDirectory> directory
Takes a type-0x9 input buffer for the path and an u64 filter_flags. filter_flags controls what type of entries are read by the #IDirectory: bitmask 0x1 = directories, bitmask 0x2 = files.
[10] Commit()
Like 3DS, this has to be used after writing to savedata for the changes to take affect.
[11] GetFreeSpaceSize(buffer<bytes<0x301>, 0x19, 0x301> path) -> u64 total_free_space
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total free space with this FS.
[12] GetTotalSpaceSize(buffer<bytes<0x301>, 0x19, 0x301> path) -> u64 total_size
Takes a type-0x9 input buffer for the path and returns an output byte-size u64 for the total space available with this FS(free+used).
[13, 3.0.0+] CleanDirectoryRecursively(buffer<bytes<0x301>, 0x19, 0x301> path)
Takes a type-0x9 input buffer for the path and clears the contents of the directory specified in the path.
[14, 3.0.0+] GetFileTimeStampRaw(buffer<bytes<0x301>, 0x19, 0x301> path) -> bytes<0x20, 8> timestamp
[15, 4.0.0+] QueryEntry(u32, buffer<bytes<0x301>, 0x19, 0x301> path, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
[0, 1.0.0] OpenFileSystem(nn::fssrv::sf::FileSystemType filesystem_type, buffer<bytes<0x301>, 0x19, 0x301>) -> object<nn::fssrv::sf::IFileSystem>
Takes an input #FileSystemType and an u64 title-id. Returns an #IFileSystem.
[2.0.0+] This function was removed.
[1] SetCurrentProcess(u64, pid)
Takes a pid-descriptor.
[2] OpenDataFileSystemByCurrentProcess() -> object<nn::fssrv::sf::IFileSystem>
[7, 2.0.0+] OpenFileSystemWithPatch(nn::fssrv::sf::FileSystemType filesystem_type, nn:ApplicationId id) -> object<nn::fssrv::sf::IFileSystem>
Takes an input #FileSystemType and an u64 title-id. Returns an #IFileSystem.
Web-applet loads the #FileSystemType (which must be ContentManual) from u32_table[inparam].
Note: web-applet strings refer to both this cmd and #OpenFileSystemWithId as "MountContent", but official nn_sf_sync symbols use "OpenXX" names.
[8, 2.0.0+] OpenFileSystemWithId(nn::fssrv::sf::FileSystemType filesystem_type, nn::ApplicationId tid, buffer<bytes<0x301>, 0x19, 0x301>) -> object<nn::fssrv::sf::IFileSystem> contentFs
Takes a type-0x19 input buffer, an #FileSystemType and an u64 title-id. Returns an #IFileSystem.
The #IFileSystem must be ContentMeta if the NCA type is 0 (control).
The input buffer is the output string path from GetApplicationContentPath.
May return errors when attempting to access NCA-paths for an update-title with a gamecard, when the gamecard isn't inserted. May return error 0x7D402 in some cases with update-titles. Non-val2 in32 values with NCA-type1 are unusable, even for normal titles.
The official "MountApplicationPackage" func uses this with in64=0 and #FileSystemType ApplicationPackage.
After the #FileSystemType specific permissions are checked, it then gets the func retval for permissions-type 0x25 and func0.
When #FileSystemType is ContentMeta, it uses in64=0xffffffffffffffff internally, otherwise it checks if in64 is set to 0xffffffffffffffff then throws an error if so. When the in64 used internally is not 0xffffffffffffffff, it's compared with the NCA titleID, then an error is thrown on mismatch.
[9, 3.0.0+] OpenDataFileSystemByApplicationId(nn::ApplicationId u64) -> object<nn::fssrv::sf::IFileSystem>
[11] OpenBisFileSystem(nn::fssrv::sf::Partition partitionId, buffer<bytes<0x301>, 0x19, 0x301>) -> object<nn::fssrv::sf::IFileSystem> bis
Takes a type-0x19 input buffer string and a u32 Bis partitionID. Official user-process code sets instr[0] = 0 normally. Returns an #IFileSystem.
Only partitionIDs for FAT partitions are usable with this, otherwise error 0x2EE202 is returned. Seems to be about the same as #OpenBisStorage except this mounts the partition filesystem instead of allowing direct access to the partition sectors.
[12] OpenBisStorage(nn::fs::sf::Partition partitionId) -> object<nn::fssrv::sf::IStorage> bisPartition
Takes a u32 partition ID, returns 0x2EE202 for partitions which do not exist, 0x320002 for partitions which cannot be opened and a valid #IStorage handle otherwise.
[13] InvalidateBisCache()
[17] OpenHostFileSystem(buffer<bytes<0x301>, 0x19, 0x301>) -> object<nn::fssrv::sf::IFileSystem>
[18] OpenSdCardFileSystem() -> object<nn::fssrv::sf::IFileSystem>
[19, 2.0.0+] FormatSdCardFileSystem()
[21] DeleteSaveDataFileSystem(nn::ApplicationId tid)
Takes an input u64.
[22] CreateSaveDataFileSystem(nn::fssrv::sf::SaveStruct save_struct, nn::fssrv::sf::SaveCreateStruct ave_create_struct, bytes<0x10, 4>)
Takes a 0x40-byte Save-struct entry, a 0x40-byte SaveCreate-struct entry, and a 0x10-byte input struct.
Only the first 0x5-bytes in the 0x10-byte struct are initialized: all-zero when automatically creating savedata during savecommon mount by official user-processes. In the dedicated save-creation code in official user-processes: +0 u32 = 0x40060, +4 u8 = 1.
Creates regular savedata.
[23] CreateSaveDataFileSystemBySystemSaveDataId(nn::fssrv::sf::SaveStruct, nn::fssrv::sf::SaveCreateStruct)
Takes a 0x40-byte Save-struct entry and a 0x40-byte SaveCreate-struct entry.
Creates savedata in the SYSTEM NAND partition.
[24] RegisterSaveDataFileSystemAtomicDeletion(buffer<unknown, 5>)
[25, 2.0.0+] DeleteSaveDataFileSystemBySaveDataSpaceId(u8, u64)
[26, 2.0.0+] FormatSdCardDryRun()
[27, 2.0.0+] IsExFatSupported() -> b8
[28, 4.0.0+] DeleteSaveDataFileSystemBySaveDataAttribute(u8, bytes<0x40, 8>)
[30] OpenGameCardStorage(u32, u32) -> object<nn::fssrv::sf::IStorage>
[31] OpenGameCardFileSystem(u32, u32) -> object<nn::fssrv::sf::IFileSystem>
Takes two input u32s, with the second u32 located at +4 in rawdata after the first u32. Returns an #IFileSystem.
Mounts a gamecard partition.
[32, 3.0.0+] ExtendSaveDataFileSystem(u8, u64, u64, u64)
[33, 5.0.0+] DeleteCacheStorage(unknown) -> unknown
[34, 5.0.0+] GetCacheStorageSize(unknown) -> unknown
[51] OpenSaveDataFileSystem(u8 save_data_space_id, nn::fssrv::sf::SaveStruct save_struct) -> object<nn::fssrv::sf::IFileSystem>
Takes an input u8 #SaveDataSpaceId and a 0x40-byte Save-struct entry. Official user-process code is only known to use value 1 for the u8.
Returns an #IFileSystem.
Permissions aren't checked until the specified save is successfully found.
Only one process (specifically only one #IFileSystem session) can mount a given savedata at any given time (this includes SystemSaveData).
[52] OpenSaveDataFileSystemBySystemSaveDataId(u8 save_data_space_id, nn::fssrv::sf::SaveStruct save_struct) -> object<nn::fssrv::sf::IFileSystem>
Takes an input u8 #SaveDataSpaceId and a 0x40-byte Save-struct entry. Web-applet only uses value0 for the input u8.
Returns an #IFileSystem.
Mounts savedata in the SYSTEM NAND partition.
[53, 2.0.0+] OpenReadOnlySaveDataFileSystem(u8 save_data_space_id, nn::fssrv::sf::SaveStruct save_struct) -> object<nn::fssrv::sf::IFileSystem>
[57, 3.0.0+] ReadSaveDataFileSystemExtraDataBySaveDataSpaceId(u8, u64) -> buffer<unknown, 6>
[58] ReadSaveDataFileSystemExtraData(u64) -> buffer<unknown, 6>
[59, 2.0.0+] WriteSaveDataFileSystemExtraData(u8, u64, buffer<unknown, 5>)
[60] OpenSaveDataInfoReader() -> object<nn::fssrv::sf::ISaveDataInfoReader>
No input, returns an output #ISaveDataInfoReader.
[61] OpenSaveDataInfoReaderBySaveDataSpaceId(u8) -> object<nn::fssrv::sf::ISaveDataInfoReader>
Takes an input u8 #SaveDataSpaceId, returns an output #ISaveDataInfoReader.
[62, 5.0.0+] OpenCacheStorageList(unknown) -> unknown
[64, 5.0.0+] OpenSaveDataInternalStorageFileSystem(unknown) -> unknown
[65, 5.0.0+] UpdateSaveDataMacForDebug(unknown) -> unknown
[66, 5.0.0+] WriteSaveDataFileSystemExtraData2(unknown) -> unknown
[80] OpenSaveDataMetaFile(u8, u32, bytes<0x40, 8>) -> object<nn::fssrv::sf::IFile>
[81, 4.0.0+] OpenSaveDataTransferManager() -> object<nn::fssrv::sf::ISaveDataTransferManager>
[82, 5.0.0+] OpenSaveDataTransferManagerVersion2(unknown) -> unknown
[100] OpenImageDirectoryFileSystem(u32) -> object<nn::fssrv::sf::IFileSystem>
[110] OpenContentStorageFileSystem(u32 content_storage_id) -> object<nn::fssrv::sf::IFileSystem> content_fs
Takes a #ContentStorageId. Invalid values return 0x2EE202.
Returns an #IFileSystem with NCA files. The read data from these files is identical to the data read by Content_Manager_services#ReadEntryRaw.
[200] OpenDataStorageByCurrentProcess() -> object<nn::fssrv::sf::IStorage> data_storage
[201, 3.0.0+] OpenDataStorageByProgramId(nn::ApplicationId tid) -> object<nn::fssrv::sf::IStorage> data_storage
[202] OpenDataStorageByDataId(u8 storage_id, nn::ApplicationId tid) -> object<nn::fssrv::sf::IStorage> data_storage
Takes a #StorageId and a TitleID.
Returns a domain object ID implementing the #IStorage interface for data archives.
[203] OpenPatchDataStorageByCurrentProcess() -> object<nn::fssrv::sf::IStorage>
[400] OpenDeviceOperator() -> object<nn::fssrv::sf::IDeviceOperator>
This command returns a session to a port implementing the #IDeviceOperator interface.
[500] OpenSdCardDetectionEventNotifier() -> object<nn::fssrv::sf::IEventNotifier> sd_event_notify
This command returns a session to a port implementing the #IEventNotifier interface.
[501] OpenGameCardDetectionEventNotifier() -> object<nn::fssrv::sf::IEventNotifier> game_card_event_notify
This command returns a session to a port implementing the #IEventNotifier interface.
[510, 5.0.0+] OpenSystemDataUpdateEventNotifier(unknown) -> unknown
[511, 5.0.0+] NotifySystemDataUpdateEvent(unknown) -> unknown
[600, 1.0.0-3.0.2] SetCurrentPosixTime(u64 time)
[601] QuerySaveDataTotalSize(u64, u64) -> u64 save_data_size
[602] VerifySaveDataFileSystem(u64) -> buffer<unknown, 6>
Takes an unknown input u64 and a type-0x6 output buffer.
The input u64 high-byte must be non-zero, otherwise an error is returned(0xE02).
[603] CorruptSaveDataFileSystem(u64)
[604] CreatePaddingFile(u64)
[605] DeleteAllPaddingFiles()
[606, 2.0.0+] GetRightsId(u8, u64) -> bytes<0x10, 8> rights
[607, 2.0.0+] RegisterExternalKey(bytes<0x10, 8>, bytes<0x10, 1>)
[608, 2.0.0+] UnregisterAllExternalKey()
[609, 2.0.0+] GetRightsIdByPath(buffer<bytes<0x301>, 0x19, 0x301>) -> bytes<0x10, 8> rights
[610, 3.0.0+] GetRightsIdAndKeyGenerationByPath(buffer<bytes<0x301>, 0x19, 0x301>) -> (u8, bytes<0x10, 8> rights)
[611, 4.0.0+] SetCurrentPosixTimeWithTimeDifference(u32, u64)
[612, 4.0.0+] GetFreeSpaceSizeForSaveData(u8) -> u64
[613, 4.0.0+] VerifySaveDataFileSystemBySaveDataSpaceId(u8, u64) -> buffer<unknown, 6>
[614, 4.0.0+] CorruptSaveDataFileSystemBySaveDataSpaceId(u8, u64)
[615, 5.0.0+] QuerySaveDataInternalStorageTotalSize(unknown) -> unknown
[620, 2.0.0+] SetSdCardEncryptionSeed(bytes<0x10, 1>)
Takes in the 0x10 byte SD card encryption seed, and loads it into FS-module state.
NS-module reads the 0x10 bytes from SdCard:/Nintendo/Contents/private, and compares them to the first 0x10 bytes of the ns_appman:/private (in system savedata 0x8000000000000043). If they match, NS calls this command using bytes 0x10-0x20 from ns_appman:/private. The rest of this file (0x1F0 bytes total) is (usually/always?) all-zero.
[630, 4.0.0+] SetSdCardAccessibility(u8)
[631, 4.0.0+] IsSdCardAccessible() -> u8
[640, 4.0.0+] IsSignedSystemPartitionOnSdCardValid() -> u8
[700, 5.0.0+] OpenAccessFailureResolver(unknown) -> unknown
[701, 5.0.0+] GetAccessFailureDetectionEvent(unknown) -> unknown
[702, 5.0.0+] IsAccessFailureDetected(unknown) -> unknown
[710, 5.0.0+] ResolveAccessFailure(unknown) -> unknown
[720, 5.0.0+] AbandonAccessFailure(unknown) -> unknown
[800, 2.0.0+] GetAndClearFileSystemProxyErrorInfo() -> bytes<0x80, 4> error_info
[1000] SetBisRootForHost(u32, buffer<bytes<0x301>, 0x19, 0x301>)
[1001] SetSaveDataSize(u64, u64)
[1002] SetSaveDataRootPath(buffer<bytes<0x301>, 0x19, 0x301>)
[1003] DisableAutoSaveDataCreation()
[1004] SetGlobalAccessLogMode(u32 mode)
Takes an input u32.
[1005] GetGlobalAccessLogMode() -> u32 mode
Returns an output u32.
GlobalAccessLogMode is normally 0.
[1006] OutputAccessLogToSdCard(buffer<bytes, 5> log_text)
Takes a type-0x5 input buffer.
The input buffer is the string to output to the log. User-processes normally include a newline at the end.
User-processes only use this when the value previously loaded from #GetGlobalAccessLogMode has bit1 set.
When bit1 in GlobalAccessLogMode is clear, FS-module will just return 0 for OutputAccessLogToSdCard. However even with that set the log doesn't show up SD, unknown why.
The input buffer is written to the "$FsAccessLog:/FsAccessLog.txt" file, where "$FsAccessLog" is the SD-card mount-name. It's written to the current end of the file(appended).
[1007, 4.0.0+] RegisterUpdatePartition()
[1008, 4.0.0+] OpenRegisteredUpdatePartition() -> object<nn::fssrv::sf::IFileSystem>
[1009, 4.0.0+] GetAndClearMemoryReportInfo() -> bytes<0x80, 8>
[1010, 5.1.0+] Unknown1010(unknown) -> unknown
[1100, 4.0.0+] OverrideSaveDataTransferTokenSignVerificationKey(buffer<unknown, 5>)
[0] OpenCodeFileSystem(nn::Applicationid Tid, buffer<bytes<0x301>, 0x19, 0x301> content_path) -> object<nn::fssrv::sf::IFileSystem> content_fs
[1] IsArchivedProgram(u64) -> u8
[2, 4.0.0+] SetCurrentProcess(u64, pid)
[0] RegisterProgram(u8, u64, u64, u64, u64, buffer<unknown, 5>, buffer<unknown, 5>)
Takes a storageID, a pid, a titleID, a 0x1C type-A buffer for the FS Access Header, and a 0x2C type-A buffer for the FS Access Control
Final FS permissions are stored as (ACI0_perms & ACID_perms). Will panic(svcBreak) when buffer sizes from ipc-rawdata are invalid.
[1] UnregisterProgram(u64)
Takes a pid. Removes registered FS permissions for that PID.
[2, 4.0.0+] SetCurrentProcess(u64, pid)
[256] SetEnabledProgramVerification(u8)
Seems to sets a global flag to inputval & 1.
When the flag is zero, it will set ret=0 instead of ret={error} when verifying the fixed-key NPDM ACID signature fails. This also skips verifying the NCA Header signature using the ACID key. Note that if verifying the fixed-key ACID signature is successful, and verifying the ACID-key NCA header signature fails, it will throw an error and abort.
[0] ReadSaveDataInfo() -> (u64, buffer<unknown, 6>)
Takes a type-0x6 output buffer. Returns an output u64 for total output entries. This buffer contains an array of #SaveDataInfo.
This is used to get #SaveDataInfo for all savedata on the system (or all savedata for the current #SaveDataSpaceId). When used multiple times, it will resume reading where it left off, until no more entries are available (in that case the out u64 is value 0).
[0] Unknown0() -> buffer<unknown, 6>
[16] Unknown16(buffer<unknown, 5>)
[32] Unknown32(u8, u64) -> object<nn::fssrv::sf::ISaveDataExporter>
[64] Unknown64(u8, bytes<0x10, 8>, buffer<unknown, 5>) -> (u64, object<nn::fssrv::sf::ISaveDataImporter>)
[0] Unknown0(u32) -> object<nn::gpio::IPadSession>
[1] GetPadSession(u32) -> object<nn::gpio::IPadSession>
[2] Unknown2(u32) -> object<nn::gpio::IPadSession>
[3] Unknown3(u32) -> u8
[4] Unknown4() -> bytes<0x10, 8>
[5] Unknown5(u8, u32)
[6, 2.0.0-3.0.0] Unknown6(u8)
[6, 4.0.0+] Unknown6(u32)
[0] SetDirection(u32)
[1] GetDirection() -> u32
[2] SetInterruptMode(u32)
[3] GetInterruptMode() -> u32
[4] SetInterruptEnable(u8)
[5] GetInterruptEnable() -> u8
[6] GetInterruptStatus() -> u32
[7] ClearInterruptStatus()
[8] SetValue(u32)
[9] GetValue() -> u32
[10] BindInterrupt() -> handle<copy>
[11] UnbindInterrupt()
[12] SetDebounceEnabled(u8)
[13] GetDebounceEnabled() -> u8
[14] SetDebounceTime(u32)
[15] GetDebounceTime() -> u32
[16, 4.0.0+] SetValueForSleepState(u32)
[1] BeginTrim(u32, u32, nn::grcsrv::GameMovieId)
[2] EndTrim() -> nn::grcsrv::GameMovieId
[10] GetNotTrimmingEvent() -> handle<copy>
[20] SetThumbnailRgba(u32, u32, buffer<bytes, 0x45>)
[1] OpenContinuousRecorder(unknown<0x28>, handle<copy>) -> object<nn::grcsrv::IContinuousRecorder>
[2] OpenGameMovieTrimmer(unknown<8>, handle<copy>) -> object<nn::grcsrv::IGameMovieTrimmer>
[0] ActivateVibrationDevice(nn::hid::VibrationDeviceHandle)
Takes an input #VibrationDeviceHandle. No output.
[0] GetSharedMemoryHandle() -> handle<copy>
[0] DeactivateDebugPad()
[1] SetDebugPadAutoPilotState(nn::hid::debug::DebugPadAutoPilotState)
[2] UnsetDebugPadAutoPilotState()
[10] DeactivateTouchScreen()
[11] SetTouchScreenAutoPilotState(buffer<nn::hid::TouchState, 5>)
[12] UnsetTouchScreenAutoPilotState()
[20] DeactivateMouse()
[21] SetMouseAutoPilotState(nn::hid::debug::MouseAutoPilotState)
[22] UnsetMouseAutoPilotState()
[30] DeactivateKeyboard()
[31] SetKeyboardAutoPilotState(nn::hid::debug::KeyboardAutoPilotState)
[32] UnsetKeyboardAutoPilotState()
[50] DeactivateXpad(nn::hid::BasicXpadId)
[51] SetXpadAutoPilotState(nn::hid::BasicXpadId, nn::hid::debug::BasicXpadAutoPilotState)
[52] UnsetXpadAutoPilotState(nn::hid::BasicXpadId)
[60] DeactivateJoyXpad(nn::hid::JoyXpadId)
[91] DeactivateGesture()
[110] DeactivateHomeButton()
[111] SetHomeButtonAutoPilotState(nn::hid::debug::HomeButtonAutoPilotState)
[112] UnsetHomeButtonAutoPilotState()
[120] DeactivateSleepButton()
[121] SetSleepButtonAutoPilotState(nn::hid::debug::SleepButtonAutoPilotState)
[122] UnsetSleepButtonAutoPilotState()
[123] DeactivateInputDetector()
[130] DeactivateCaptureButton()
[131] SetCaptureButtonAutoPilotState(nn::hid::debug::CaptureButtonAutoPilotState)
[132] UnsetCaptureButtonAutoPilotState()
[133] SetShiftAccelerometerCalibrationValue(nn::hid::SixAxisSensorHandle, f32, f32, nn::applet::AppletResourceUserId, pid)
[134] GetShiftAccelerometerCalibrationValue(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> (f32, f32)
[135] SetShiftGyroscopeCalibrationValue(nn::hid::SixAxisSensorHandle, f32, f32, nn::applet::AppletResourceUserId, pid)
[136] GetShiftGyroscopeCalibrationValue(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> (f32, f32)
[140] DeactivateConsoleSixAxisSensor()
[141, 5.0.0+] GetConsoleSixAxisSensorSamplingFrequency(unknown) -> unknown
[142, 5.0.0+] DeactivateSevenSixAxisSensor(unknown) -> unknown
[201] ActivateFirmwareUpdate()
[202] DeactivateFirmwareUpdate()
[203] StartFirmwareUpdate(nn::hid::system::UniquePadId)
[204] GetFirmwareUpdateStage() -> (u64, u64)
[205] GetFirmwareVersion(u32, nn::util::BitFlagSet<32, nn::hid::system::DeviceType>) -> nn::hid::system::FirmwareVersion
[206] GetDestinationFirmwareVersion(u32, nn::util::BitFlagSet<32, nn::hid::system::DeviceType>) -> nn::hid::system::FirmwareVersion
[207] DiscardFirmwareInfoCacheForRevert()
[208] StartFirmwareUpdateForRevert(nn::hid::system::UniquePadId)
[209] GetAvailableFirmwareVersionForRevert(nn::hid::system::UniquePadId) -> nn::hid::system::FirmwareVersion
[210, 4.0.0+] IsFirmwareUpdatingDevice(nn::hid::system::UniquePadId) -> b8
[221] UpdateControllerColor(nn::util::Unorm8x4, nn::util::Unorm8x4, nn::hid::system::UniquePadId)
[222, 4.0.0+] ConnectUsbPadsAsync()
[223, 4.0.0+] DisconnectUsbPadsAsync()
[224, 5.0.0+] UpdateDesignInfo(unknown) -> unknown
[225, 5.0.0+] GetUniquePadDriverState(unknown) -> unknown
[226, 5.0.0+] GetSixAxisSensorDriverStates(unknown) -> unknown
[301, 5.0.0+] GetAbstractedPadHandles(unknown) -> unknown
[302, 5.0.0+] GetAbstractedPadState(unknown) -> unknown
[303, 5.0.0+] GetAbstractedPadsState(unknown) -> unknown
[321, 5.0.0+] SetAutoPilotVirtualPadState(unknown) -> unknown
[322, 5.0.0+] UnsetAutoPilotVirtualPadState(unknown) -> unknown
[323, 5.0.0+] UnsetAllAutoPilotVirtualPadState(unknown) -> unknown
[350, 5.0.0+] AddRegisteredDevice(unknown) -> unknown
[0] CreateAppletResource(nn::applet::AppletResourceUserId, pid) -> object<nn::hid::IAppletResource>
Takes a PID and an u64 AppletResourceUserId. Returns an [#IAppletResource](http://switchbrew.org/index.php?title=HID services#IAppletResource "wikilink").
[1] ActivateDebugPad(nn::applet::AppletResourceUserId, pid)
[11] ActivateTouchScreen(nn::applet::AppletResourceUserId, pid)
[21] ActivateMouse(nn::applet::AppletResourceUserId, pid)
[31] ActivateKeyboard(nn::applet::AppletResourceUserId, pid)
[32, 6.0.0+] Unknown32(u64, nn::applet::AppletResourceUserId, pid)
[40] AcquireXpadIdEventHandle(u64) -> KObject
[41] ReleaseXpadIdEventHandle(u64)
[51] ActivateXpad(nn::hid::BasicXpadId, nn::applet::AppletResourceUserId, pid)
[55] GetXpadIds() -> (i64, array<nn::hid::BasicXpadId, 0xa>)
[56] ActivateJoyXpad(nn::hid::JoyXpadId)
[58] GetJoyXpadLifoHandle(nn::hid::JoyXpadId) -> KObject
[59] GetJoyXpadIds() -> (i64, array<nn::hid::JoyXpadId, 0xa>)
[60] ActivateSixAxisSensor(nn::hid::BasicXpadId)
[61] DeactivateSixAxisSensor(nn::hid::BasicXpadId)
[62] GetSixAxisSensorLifoHandle(nn::hid::BasicXpadId) -> KObject
[63] ActivateJoySixAxisSensor(nn::hid::JoyXpadId)
[64] DeactivateJoySixAxisSensor(nn::hid::JoyXpadId)
[65] GetJoySixAxisSensorLifoHandle(nn::hid::JoyXpadId) -> KObject
[66] StartSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[67] StopSixAxisSensor(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[68] IsSixAxisSensorFusionEnabled(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> bool
[69] EnableSixAxisSensorFusion(bool, nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[70] SetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, f32, f32, nn::applet::AppletResourceUserId, pid)
[71] GetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> (f32, f32)
[72] ResetSixAxisSensorFusionParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[73] SetAccelerometerParameters(nn::hid::SixAxisSensorHandle, f32, f32, nn::applet::AppletResourceUserId, pid)
[74] GetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> (f32, f32)
[75] ResetAccelerometerParameters(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[76] SetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, u32, nn::applet::AppletResourceUserId, pid)
[77] GetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> u32
[78] ResetAccelerometerPlayMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[79] SetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, u32, nn::applet::AppletResourceUserId, pid)
[80] GetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> u32
[81] ResetGyroscopeZeroDriftMode(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[82] IsSixAxisSensorAtRest(nn::hid::SixAxisSensorHandle, nn::applet::AppletResourceUserId, pid) -> bool
[83, 6.0.0+] Unknown83(u64, nn::applet::AppletResourceUserId, pid) -> bool
[91] ActivateGesture(i32, nn::applet::AppletResourceUserId, pid)
[100] SetSupportedNpadStyleSet(nn::hid::NpadStyleTag, nn::applet::AppletResourceUserId, pid)
[101] GetSupportedNpadStyleSet(nn::applet::AppletResourceUserId, pid) -> nn::hid::NpadStyleTag
[102] SetSupportedNpadIdType(nn::applet::AppletResourceUserId, pid, array<u32, 9>)
[103] ActivateNpad(nn::applet::AppletResourceUserId, pid)
[104] DeactivateNpad(nn::applet::AppletResourceUserId, pid)
[106] AcquireNpadStyleSetUpdateEventHandle(u32, nn::applet::AppletResourceUserId, u64, pid) -> KObject
[107] DisconnectNpad(u32, nn::applet::AppletResourceUserId, pid)
[108] GetPlayerLedPattern(u32) -> u64
[108, 5.0.0+] ActivateNpadWithRevision(u32, nn::applet::AppletResourceUserId, pid)
[120] SetNpadJoyHoldType(nn::applet::AppletResourceUserId, i64, pid)
[121] GetNpadJoyHoldType(nn::applet::AppletResourceUserId, pid) -> i64
[122] SetNpadJoyAssignmentModeSingleByDefault(u32, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an u32, and an AppletResourceUserId. No output.
[123] SetNpadJoyAssignmentModeSingle(u32, nn::applet::AppletResourceUserId, i64, pid)
Takes a PID-descriptor, an u32, AppletResourceUserId, and s64 NpadJoyDeviceType. No output.
[124] SetNpadJoyAssignmentModeDual(u32, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an u32, and an AppletResourceUserId. No output.
[125] MergeSingleJoyAsDualJoy(u32, u32, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, two u32s, and an AppletResourceUserId. No output.
[126] StartLrAssignmentMode(nn::applet::AppletResourceUserId, pid)
[127] StopLrAssignmentMode(nn::applet::AppletResourceUserId, pid)
[128] SetNpadHandheldActivationMode(nn::applet::AppletResourceUserId, i64, pid)
[129] GetNpadHandheldActivationMode(nn::applet::AppletResourceUserId, pid) -> i64
Takes a PID and an u64 AppletResourceUserId. Returns an output u64. Official user-processes panic if the output u64 is not 0-2.
[130] SwapNpadAssignment(u32, u32, nn::applet::AppletResourceUserId, pid)
[131] IsUnintendedHomeButtonInputProtectionEnabled(u32, nn::applet::AppletResourceUserId, pid) -> bool
[132] EnableUnintendedHomeButtonInputProtection(bool, u32, nn::applet::AppletResourceUserId, pid)
[133, 5.0.0+] SetNpadJoyAssignmentModeSingleWithDestination(u32, u64, nn::applet::AppletResourceUserId, pid) -> (bool, u32)
[200] GetVibrationDeviceInfo(nn::hid::VibrationDeviceHandle) -> nn::hid::VibrationDeviceInfoForIpc
Takes a [#VibrationDeviceHandle](http://switchbrew.org/index.php?title=HID services#VibrationDeviceHandle "wikilink"). Returns an output [#VibrationDeviceInfo](http://switchbrew.org/index.php?title=HID services#VibrationDeviceInfo "wikilink").
[201] SendVibrationValue(nn::hid::VibrationDeviceHandle, align<4, nn::hid::VibrationValue>, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, a [#VibrationDeviceHandle](http://switchbrew.org/index.php?title=HID services#VibrationDeviceHandle "wikilink"), a [#VibrationValue](http://switchbrew.org/index.php?title=HID services#VibrationValue "wikilink") immediately after that, and an u64 AppletResourceUserId. No output.
[202] GetActualVibrationValue(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId, pid) -> nn::hid::VibrationValue
Takes a PID-descriptor, a [#VibrationDeviceHandle](http://switchbrew.org/index.php?title=HID services#VibrationDeviceHandle "wikilink"), and an u64 AppletResourceUserId. Returns an output [#VibrationValue](http://switchbrew.org/index.php?title=HID services#VibrationValue "wikilink").
[203] CreateActiveVibrationDeviceList() -> object<nn::hid::IActiveVibrationDeviceList>
No input. Returns an #IActiveVibrationDeviceList.
[204] PermitVibration(bool)
Takes an input u8 bool. No output.
This affects the config displayed by System Settings.
[205] IsVibrationPermitted() -> bool
No input. Returns an output u8 bool.
[206] SendVibrationValues(nn::applet::AppletResourceUserId, array<nn::hid::VibrationDeviceHandle, 9>, array<nn::hid::VibrationValue, 9>)
Takes an u64 AppletResourceUserId, and two type-0x9 input buffers containing an array of: [#VibrationDeviceHandle](http://switchbrew.org/index.php?title=HID services#VibrationDeviceHandle "wikilink") for first buffer, and [#VibrationValue](http://switchbrew.org/index.php?title=HID services#VibrationValue "wikilink") for the second buffer.
Official sw uses the same entry-count for each array.
[207, 4.0.0+] SendVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::hid::VibrationGcErmCommand, nn::applet::AppletResourceUserId, pid)
[208, 4.0.0+] GetActualVibrationGcErmCommand(nn::hid::VibrationDeviceHandle, nn::applet::AppletResourceUserId, pid) -> nn::hid::VibrationGcErmCommand
[209, 4.0.0+] BeginPermitVibrationSession(nn::applet::AppletResourceUserId)
[210, 4.0.0+] EndPermitVibrationSession()
[300] ActivateConsoleSixAxisSensor(nn::applet::AppletResourceUserId, pid)
[301] StartConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[302] StopConsoleSixAxisSensor(nn::hid::ConsoleSixAxisSensorHandle, nn::applet::AppletResourceUserId, pid)
[303, 5.0.0+] ActivateSevenSixAxisSensor(nn::applet::AppletResourceUserId, pid)
[304, 5.0.0+] StartSevenSixAxisSensor(nn::applet::AppletResourceUserId, pid)
[305, 5.0.0+] StopSevenSixAxisSensor(nn::applet::AppletResourceUserId, pid)
[306, 5.0.0+] InitializeSevenSixAxisSensor(u32, u64, u32, u64, nn::applet::AppletResourceUserId, pid)
[307, 5.0.0+] FinalizeSevenSixAxisSensor(nn::applet::AppletResourceUserId, pid)
[308, 5.0.0+] SetSevenSixAxisSensorFusionStrength(f32, nn::applet::AppletResourceUserId, pid)
[309, 5.0.0+] GetSevenSixAxisSensorFusionStrength(nn::applet::AppletResourceUserId, pid) -> f32
[310, 6.0.0+] Unknown310(nn::applet::AppletResourceUserId, pid)
[400] IsUsbFullKeyControllerEnabled() -> bool
[401] EnableUsbFullKeyController(bool)
[402] IsUsbFullKeyControllerConnected(u32) -> bool
[403, 4.0.0+] HasBattery(u32) -> bool
[404, 4.0.0+] HasLeftRightBattery(u32) -> (bool, bool)
[405, 4.0.0+] GetNpadInterfaceType(u32) -> u8
[406, 4.0.0+] GetNpadLeftRightInterfaceType(u32) -> (u8, u8)
[500, 5.0.0+] GetPalmaConnectionHandle(u32, nn::applet::AppletResourceUserId, pid) -> nn::hid::PalmaConnectionHandle
[501, 5.0.0+] InitializePalma(nn::hid::PalmaConnectionHandle)
[502, 5.0.0+] AcquirePalmaOperationCompleteEvent(nn::hid::PalmaConnectionHandle) -> KObject
[503, 5.0.0+] GetPalmaOperationInfo(nn::hid::PalmaConnectionHandle) -> (u64, buffer<unknown, 6, 0>)
[504, 5.0.0+] PlayPalmaActivity(u64, nn::hid::PalmaConnectionHandle)
[505, 5.0.0+] SetPalmaFrModeType(u64, nn::hid::PalmaConnectionHandle)
[506, 5.0.0+] ReadPalmaStep(nn::hid::PalmaConnectionHandle)
[507, 5.0.0+] EnablePalmaStep(bool, nn::hid::PalmaConnectionHandle)
[508, 5.0.0+] ResetPalmaStep(nn::hid::PalmaConnectionHandle)
[509, 5.0.0+] ReadPalmaApplicationSection(u64, u64, nn::hid::PalmaConnectionHandle)
[510, 5.0.0+] WritePalmaApplicationSection(u64, u64, buffer<nn::hid::PalmaApplicationSectionAccessBuffer, 0x19, 0>, nn::hid::PalmaConnectionHandle)
[511, 5.0.0+] ReadPalmaUniqueCode(nn::hid::PalmaConnectionHandle)
[512, 5.0.0+] SetPalmaUniqueCodeInvalid(nn::hid::PalmaConnectionHandle)
[513, 5.0.0+] WritePalmaActivityEntry(u64, u64, u64, u64, nn::hid::PalmaConnectionHandle)
[514, 5.0.0+] WritePalmaRgbLedPatternEntry(u64, buffer<unknown, 5, 0>, nn::hid::PalmaConnectionHandle)
[515, 5.0.0+] WritePalmaWaveEntry(u64, u64, KObject, u64, u64, nn::hid::PalmaConnectionHandle)
[516, 5.0.0+] SetPalmaDataBaseIdentificationVersion(u32, nn::hid::PalmaConnectionHandle, int)
[517, 5.0.0+] GetPalmaDataBaseIdentificationVersion(nn::hid::PalmaConnectionHandle)
[518, 5.0.0+] SuspendPalmaFeature(nn::hid::PalmaConnectionHandle, nn::hid::PalmaFeature)
[519, 5.1.0+] GetPalmaOperationResult(nn::hid::PalmaConnectionHandle)
[520, 5.1.0+] ReadPalmaPlayLog(nn::hid::PalmaConnectionHandle, u16)
[521, 5.1.0+] ResetPalmaPlayLog(nn::hid::PalmaConnectionHandle, u16)
[522, 5.1.0+] SetIsPalmaAllConnectable(nn::applet::AppletResourceUserId, bool, pid)
[523, 5.1.0+] SetIsPalmaPairedConnectable(nn::applet::AppletResourceUserId, bool, pid)
[524, 5.1.0+] PairPalma(nn::hid::PalmaConnectionHandle)
[525, 5.1.0+] SetPalmaBoostMode(bool)
[1000] SetNpadCommunicationMode(nn::applet::AppletResourceUserId, i64, pid)
[1001] GetNpadCommunicationMode() -> i64
[31] SendKeyboardLockKeyEvent(nn::util::BitFlagSet<32, nn::hid::system::KeyboardLockKeyEvent>)
[101] AcquireHomeButtonEventHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy>
[111] ActivateHomeButton(nn::applet::AppletResourceUserId, pid)
[121] AcquireSleepButtonEventHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy>
[131] ActivateSleepButton(nn::applet::AppletResourceUserId, pid)
[141] AcquireCaptureButtonEventHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy>
[151] ActivateCaptureButton(nn::applet::AppletResourceUserId, pid)
[210] AcquireNfcDeviceUpdateEventHandle() -> handle<copy>
[211] GetNpadsWithNfc() -> (u64, buffer<u32, 0xa>)
[212] AcquireNfcActivateEventHandle(u32) -> handle<copy>
[213] ActivateNfc(b8, u32, nn::applet::AppletResourceUserId, pid)
[214, 4.0.0+] GetXcdHandleForNpadWithNfc(u32, nn::applet::AppletResourceUserId) -> u64
[215, 4.0.0+] IsNfcActivated(u32) -> b8
[230] AcquireIrSensorEventHandle(u32) -> handle<copy>
[231] ActivateIrSensor(b8, u32, nn::applet::AppletResourceUserId, pid)
[301] ActivateNpadSystem(u32)
[303] ApplyNpadSystemCommonPolicy(nn::applet::AppletResourceUserId, pid)
[304] EnableAssigningSingleOnSlSrPress(nn::applet::AppletResourceUserId, pid)
[305] DisableAssigningSingleOnSlSrPress(nn::applet::AppletResourceUserId, pid)
[306] GetLastActiveNpad() -> u32
[307] GetNpadSystemExtStyle(u32) -> (u64, u64)
[308, 5.0.0+] ApplyNpadSystemCommonPolicyFull(unknown) -> unknown
[309, 5.0.0+] GetNpadFullKeyGripColor(unknown) -> unknown
[311] SetNpadPlayerLedBlinkingDevice(u32, nn::util::BitFlagSet<32, nn::hid::system::DeviceType>, nn::applet::AppletResourceUserId, pid)
[321] GetUniquePadsFromNpad(u32) -> (u64, buffer<nn::hid::system::UniquePadId, 0xa>)
[322] GetIrSensorState(u32, nn::applet::AppletResourceUserId, pid) -> u64
[323] GetXcdHandleForNpadWithIrSensor(u32, nn::applet::AppletResourceUserId, pid) -> u64
[500] SetAppletResourceUserId(nn::applet::AppletResourceUserId)
[501] RegisterAppletResourceUserId(b8, nn::applet::AppletResourceUserId)
[502] UnregisterAppletResourceUserId(nn::applet::AppletResourceUserId)
[503] EnableAppletToGetInput(b8, nn::applet::AppletResourceUserId)
[504] SetAruidValidForVibration(b8, nn::applet::AppletResourceUserId)
[505] EnableAppletToGetSixAxisSensor(b8, nn::applet::AppletResourceUserId)
[510] SetVibrationMasterVolume(f32)
Takes an input 32bit float.
[511] GetVibrationMasterVolume() -> f32
[512] BeginPermitVibrationSession(nn::applet::AppletResourceUserId)
[513] EndPermitVibrationSession()
[520] EnableHandheldHids()
[521] DisableHandheldHids()
[540] AcquirePlayReportControllerUsageUpdateEvent() -> handle<copy>
[541] GetPlayReportControllerUsages() -> (u64, buffer<nn::hid::system::PlayReportControllerUsage, 0xa>)
[542] AcquirePlayReportRegisteredDeviceUpdateEvent() -> handle<copy>
[543, 1.0.0-4.1.0] GetRegisteredDevices() -> (u64, buffer<nn::hid::system::RegisteredDevice, 0xa>)
[543, 5.0.0+] GetRegisteredDevicesOld() -> (u64, buffer<nn::hid::system::RegisteredDevice, 0xa>)
[544] AcquireConnectionTriggerTimeoutEvent() -> handle<copy>
[545] SendConnectionTrigger(nn::bluetooth::Address)
[546] AcquireDeviceRegisteredEventForControllerSupport() -> handle<copy>
[547] GetAllowedBluetoothLinksCount() -> u64
[548, 5.0.0+] GetRegisteredDevices(unknown) -> unknown
[700] ActivateUniquePad(nn::applet::AppletResourceUserId, nn::hid::system::UniquePadId, pid)
[702] AcquireUniquePadConnectionEventHandle() -> handle<copy>
[703] GetUniquePadIds() -> (u64, buffer<nn::hid::system::UniquePadId, 0xa>)
[751] AcquireJoyDetachOnBluetoothOffEventHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy>
[800] ListSixAxisSensorHandles(nn::hid::system::UniquePadId) -> (u64, buffer<nn::hid::system::UniqueSixAxisSensorHandle, 0xa>)
[801] IsSixAxisSensorUserCalibrationSupported(nn::hid::system::UniqueSixAxisSensorHandle) -> b8
[802] ResetSixAxisSensorCalibrationValues(nn::hid::system::UniqueSixAxisSensorHandle)
[803] StartSixAxisSensorUserCalibration(nn::hid::system::UniqueSixAxisSensorHandle)
[804] CancelSixAxisSensorUserCalibration(nn::hid::system::UniqueSixAxisSensorHandle)
[805] GetUniquePadBluetoothAddress(nn::hid::system::UniquePadId) -> nn::bluetooth::Address
[806] DisconnectUniquePad(nn::hid::system::UniquePadId)
[807, 5.0.0+] GetUniquePadType(unknown) -> unknown
[808, 5.0.0+] GetUniquePadInterface(unknown) -> unknown
[809, 5.0.0+] GetUniquePadSerialNumber(unknown) -> unknown
[810, 5.0.0+] GetUniquePadControllerNumber(unknown) -> unknown
[811, 5.0.0+] GetSixAxisSensorUserCalibrationStage(unknown) -> unknown
[821] StartAnalogStickManualCalibration(nn::hid::system::UniquePadId, u64)
[822] RetryCurrentAnalogStickManualCalibrationStage(nn::hid::system::UniquePadId, u64)
[823] CancelAnalogStickManualCalibration(nn::hid::system::UniquePadId, u64)
[824] ResetAnalogStickManualCalibration(nn::hid::system::UniquePadId, u64)
[825, 5.0.0+] GetAnalogStickState(unknown) -> unknown
[826, 5.0.0+] GetAnalogStickManualCalibrationStage(unknown) -> unknown
[827, 5.0.0+] IsAnalogStickButtonPressed(unknown) -> unknown
[828, 5.0.0+] IsAnalogStickInReleasePosition(unknown) -> unknown
[829, 5.0.0+] IsAnalogStickInCircumference(unknown) -> unknown
[850] IsUsbFullKeyControllerEnabled() -> b8
[851] EnableUsbFullKeyController(b8)
[852] IsUsbConnected(nn::hid::system::UniquePadId) -> b8
[900] ActivateInputDetector(nn::applet::AppletResourceUserId, pid)
[901] NotifyInputDetector(nn::util::BitFlagSet<32, nn::hid::system::InputSourceId>)
[1000] InitializeFirmwareUpdate()
[1001] GetFirmwareVersion(nn::hid::system::UniquePadId) -> nn::hid::system::FirmwareVersion
[1002] GetAvailableFirmwareVersion(nn::hid::system::UniquePadId) -> nn::hid::system::FirmwareVersion
[1003] IsFirmwareUpdateAvailable(nn::hid::system::UniquePadId) -> b8
[1004] CheckFirmwareUpdateRequired(nn::hid::system::UniquePadId) -> u64
[1005] StartFirmwareUpdate(nn::hid::system::UniquePadId) -> nn::hid::system::FirmwareUpdateDeviceHandle
[1006] AbortFirmwareUpdate()
[1007] GetFirmwareUpdateState(nn::hid::system::FirmwareUpdateDeviceHandle) -> nn::hid::system::FirmwareUpdateState
[1008, 4.0.0+] ActivateAudioControl()
[1009, 4.0.0+] AcquireAudioControlEventHandle() -> handle<copy>
[1010, 4.0.0+] GetAudioControlStates() -> (u64, buffer<nn::hid::system::AudioControlState, 0xa>)
[1011, 4.0.0+] DeactivateAudioControl()
[1050, 5.0.0+] IsSixAxisSensorAccurateUserCalibrationSupported(unknown) -> unknown
[1051, 5.0.0+] StartSixAxisSensorAccurateUserCalibration(unknown) -> unknown
[1052, 5.0.0+] CancelSixAxisSensorAccurateUserCalibration(unknown) -> unknown
[1053, 5.0.0+] GetSixAxisSensorAccurateUserCalibrationState(unknown) -> unknown
[1100, 5.0.0+] GetHidbusSystemServiceObject(unknown) -> unknown
[1] GetBusHandle(unknown) -> unknown
[2] IsExternalDeviceConnected(unknown) -> unknown
[3] Initialize(unknown) -> unknown
[4] Finalize(unknown) -> unknown
[5] EnableExternalDevice(unknown) -> unknown
[6] GetExternalDeviceId(unknown) -> unknown
[7] SendCommandAsync(unknown) -> unknown
[8] GetSendCommandAsynceResult(unknown) -> unknown
[9] SetEventForSendCommandAsycResult(unknown) -> unknown
[10] GetSharedMemoryHandle(unknown) -> unknown
[11] EnableJoyPollingReceiveMode(unknown) -> unknown
[12] DisableJoyPollingReceiveMode(unknown) -> unknown
[13] GetPollingData(unknown) -> unknown
[0] GetVariable(bytes<0x40, 1>) -> (u64, buffer<unknown, 6>)
[1] GetVariableLength(bytes<0x40, 1>) -> u64
[2] WaitUntilVariableAvailable(u64)
[0] GetServiceInterface(u64, pid) -> unknown
[0] OpenSessionForDev(u16, u32, u32, u32) -> object<nn::i2c::ISession>
Takes a raw #GpioPadDescriptor and returns a #IPadSession session for it.
[1] OpenSession(u32) -> object<nn::i2c::ISession>
Same thing as #OpenSessionForDev except it takes a GpioPadName which is then converted to a #GpioPadDescriptor. Returns an #IPadSession session.
[2] HasDevice(u32) -> u8
Takes an I2cDevice and returns true if the device exists or false otherwise.
[3] HasDeviceForDev(u16, u32, u32, u32) -> u8
Takes an u32 port, an u16 addr, an AddressingMode (1 for 10-bit, 0 otherwise) and a SpeedMode (400000 or 100000). Returns true if the device exists or false otherwise.
[0] Send(u32, buffer<unknown, 5>)
[1] Receive(u32) -> buffer<unknown, 6>
[2] ExecuteCommandList(buffer<unknown, 9>) -> buffer<unknown, 6>
[10] SendAuto(u32, buffer<unknown, 0x21>)
[11] ReceiveAuto(u32) -> buffer<unknown, 0x22>
[12] ExecuteCommandListAuto(buffer<unknown, 9>) -> buffer<unknown, 0x22>
[302] ActivateIrsensor(nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor and an AppletResourceUserId. No output.
[303] DeactivateIrsensor(nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor and an AppletResourceUserId. No output.
[304] GetIrsensorSharedMemoryHandle(nn::applet::AppletResourceUserId, pid) -> handle<copy>
Takes a PID-descriptor and an AppletResourceUserId. Returns a SharedMemory handle.
The SharedMemory is mapped with permissions=read-only and size=0x8000.
[305] StopImageProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an #IrCameraHandle, and an AppletResourceUserId. No output.
[306] RunMomentProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, nn::irsensor::PackedMomentProcessorConfig, pid)
Takes a PID-descriptor, an #IrCameraHandle, an AppletResourceUserId, and a #PackedMomentProcessorConfig. No output.
[307] RunClusteringProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, nn::irsensor::PackedClusteringProcessorConfig, pid)
Takes a PID-descriptor, an #IrCameraHandle, an AppletResourceUserId, and a #PackedClusteringProcessorConfig. No output.
[308] RunImageTransferProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, nn::irsensor::PackedImageTransferProcessorConfig, u64, pid, handle<copy>)
Takes a PID-descriptor, an #IrCameraHandle, an AppletResourceUserId, a #PackedImageTransferProcessorConfig, an u64 for the TransferMemory_size, and a TransferMemory handle. No output.
Official sw creates the TransferMemory with an user-specified buffer and permissions=0.
[309] GetImageTransferProcessorState(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid) -> (nn::irsensor::ImageTransferProcessorState, buffer<bytes, 6>)
Takes a PID-descriptor, a type-0x6 output buffer, an #IrCameraHandle, and an AppletResourceUserId. Returns an #ImageTransferProcessorState. No output.
[310] RunTeraPluginProcessor(nn::irsensor::IrCameraHandle, nn::irsensor::PackedTeraPluginProcessorConfig, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an #IrCameraHandle, a #PackedTeraPluginProcessorConfig (immediately after the previous word), and an AppletResourceUserId. No output.
[311] GetNpadIrCameraHandle(u32) -> nn::irsensor::IrCameraHandle
Takes an input u32. Returns an output #IrCameraHandle.
[312] RunPointingProcessor(nn::irsensor::IrCameraHandle, nn::irsensor::PackedPointingProcessorConfig, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an #IrCameraHandle, a #PackedDpdProcessorConfig (immediately after the previous word), and an AppletResourceUserId. No output.
[313] SuspendImageProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an #IrCameraHandle, and an AppletResourceUserId. No output.
[314, 3.0.0+] CheckFirmwareVersion(nn::irsensor::IrCameraHandle, nn::irsensor::PackedMcuVersion, nn::applet::AppletResourceUserId, pid)
Takes a PID-descriptor, an #IrCameraHandle, a #PackedMcuVersion, and an AppletResourceUserId. No output.
[315, 5.0.0+] SetFunctionLevel(nn::irsensor::IrCameraHandle, nn::irsensor::PackedFunctionLevel, nn::applet::AppletResourceUserId, pid)
[316, 5.0.0+] RunImageTransferExProcessor(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, nn::irsensor::PackedImageTransferProcessorExConfig, u64, pid, handle<copy>)
[317, 5.0.0+] RunIrLedProcessor(nn::irsensor::IrCameraHandle, nn::irsensor::PackedIrLedProcessorConfig, nn::applet::AppletResourceUserId, pid)
[318, 5.0.0+] StopImageProcessorAsync(nn::irsensor::IrCameraHandle, nn::applet::AppletResourceUserId, pid)
[319, 5.0.0+] ActivateIrsensorWithFunctionLevel(nn::irsensor::PackedFunctionLevel, nn::applet::AppletResourceUserId, pid)
[0] Control(unknown) -> unknown
[1] GenerateCode(unknown) -> unknown
[1000] LoadPlugin(unknown) -> unknown
[1001] GetCodeAddress(unknown) -> unknown
[0] CreateJitEnvironment(unknown) -> unknown
[0] Unknown0()
[1] Unknown1()
[2] Unknown2(unknown<4>)
[3] Unknown3() -> unknown<4>
[4] Unknown4()
[5] Unknown5() -> unknown<4>
[6] TurnOnBacklight(unknown<8>)
[7] TurnOffBacklight(unknown<8>)
[8] GetBacklightStatus() -> unknown<4>
[9] Unknown9()
[10] Unknown10()
[11] Unknown11() -> unknown<1>
[12] Unknown12()
[13] Unknown13()
[14] Unknown14() -> unknown<1>
[15] Unknown15(unknown<4>)
[16] ReadRawLightSensor() -> unknown<4>
[17] Unknown17(unknown<8>)
[18] Unknown18(unknown<4>) -> unknown<4>
[19] Unknown19(unknown<0xc>)
[20] Unknown20() -> unknown<0xc>
[21] Unknown21(unknown<0xc>)
[22] Unknown22() -> unknown<0xc>
[23, 3.0.0+] Unknown23() -> unknown<1>
[24, 3.0.0+] Unknown24(unknown<4>)
[25, 3.0.0+] Unknown25() -> unknown<4>
[26, 3.0.0+] EnableVrMode()
No input/output. Used by AM_services#SetVrModeEnabled.
Sets a global state field to 0x1.
[27, 3.0.0+] DisableVrMode()
No input/output. Used by AM_services#SetVrModeEnabled.
Sets the global state field used by #EnableVrMode to 0x0.
[28, 3.0.0+] GetVrMode() -> unknown<1>
No input. Returns an output u8 bool set by the above commands.
[0] GetStateForMonitor() -> u32
[1] GetNetworkInfoForMonitor() -> buffer<unknown<0x480>, 0x1a>
[2] GetIpv4AddressForMonitor() -> (u32, u32)
[3] GetDisconnectReasonForMonitor() -> u16
[4] GetSecurityParameterForMonitor() -> bytes<0x20, 1>
[5] GetNetworkConfigForMonitor() -> bytes<0x20, 8>
[100] InitializeMonitor()
[101] FinalizeMonitor()
[0] CreateMonitorService() -> object<nn::ldn::detail::IMonitorService>
Returns an #IMonitorService.
[0] GetState() -> u32
[1] GetNetworkInfo() -> buffer<unknown<0x480>, 0x1a>
[2] GetIpv4Address() -> (u32, u32)
[3] GetDisconnectReason() -> u16
[4] GetSecurityParameter() -> bytes<0x20, 1>
[5] GetNetworkConfig() -> bytes<0x20, 8>
[100] AttachStateChangeEvent() -> handle<copy>
[101] GetNetworkInfoLatestUpdate() -> (buffer<unknown<0x480>, 0x1a>, buffer<unknown, 0xa>)
[102] Scan(u16, bytes<0x60, 8>) -> (u16, buffer<unknown, 0x22>)
[103] ScanPrivate(u16, bytes<0x60, 8>) -> (u16, buffer<unknown, 0x22>)
[200] OpenAccessPoint()
[201] CloseAccessPoint()
[202] CreateNetwork(bytes<0x44, 2>, bytes<0x30, 1>, bytes<0x20, 8>)
[203] CreateNetworkPrivate(bytes<0x44, 2>, bytes<0x20, 1>, bytes<0x30, 1>, bytes<0x20, 8>, buffer<unknown, 9>)
[204] DestroyNetwork()
[205] Reject(u32)
[206] SetAdvertiseData(buffer<unknown, 0x21>)
[207] SetStationAcceptPolicy(u8)
[208] AddAcceptFilterEntry(bytes<6, 1>)
[209] ClearAcceptFilter()
[300] OpenStation()
[301] CloseStation()
[302] Connect(bytes<0x44, 2>, bytes<0x30, 1>, u32, u32, buffer<unknown<0x480>, 0x19>)
[303] ConnectPrivate(bytes<0x44, 2>, bytes<0x20, 1>, bytes<0x30, 1>, u32, u32, bytes<0x20, 8>)
[304] Disconnect()
[400] InitializeSystem(u64, pid)
[401] FinalizeSystem()
[0] CreateSystemLocalCommunicationService() -> object<nn::ldn::detail::ISystemLocalCommunicationService>
Returns an #ISystemLocalCommunicationService.
[0] GetState() -> u32
[1] GetNetworkInfo() -> buffer<unknown<0x480>, 0x1a>
[2] GetIpv4Address() -> (u32, u32)
[3] GetDisconnectReason() -> u16
[4] GetSecurityParameter() -> bytes<0x20, 1>
[5] GetNetworkConfig() -> bytes<0x20, 8>
[100] AttachStateChangeEvent() -> handle<copy>
[101] GetNetworkInfoLatestUpdate() -> (buffer<unknown<0x480>, 0x1a>, buffer<unknown, 0xa>)
[102] Scan(u16, bytes<0x60, 8>) -> (u16, buffer<unknown, 0x22>)
[103] ScanPrivate(u16, bytes<0x60, 8>) -> (u16, buffer<unknown, 0x22>)
[200] OpenAccessPoint()
[201] CloseAccessPoint()
[202] CreateNetwork(bytes<0x44, 2>, bytes<0x30, 1>, bytes<0x20, 8>)
[203] CreateNetworkPrivate(bytes<0x44, 2>, bytes<0x20, 1>, bytes<0x30, 1>, bytes<0x20, 8>, buffer<unknown, 9>)
[204] DestroyNetwork()
[205] Reject(u32)
[206] SetAdvertiseData(buffer<unknown, 0x21>)
[207] SetStationAcceptPolicy(u8)
[208] AddAcceptFilterEntry(bytes<6, 1>)
[209] ClearAcceptFilter()
[300] OpenStation()
[301] CloseStation()
[302] Connect(bytes<0x44, 2>, bytes<0x30, 1>, u32, u32, buffer<unknown<0x480>, 0x19>)
[303] ConnectPrivate(bytes<0x44, 2>, bytes<0x20, 1>, bytes<0x30, 1>, u32, u32, bytes<0x20, 8>)
[304] Disconnect()
[400] Initialize(u64, pid)
[401] Finalize()
[0] CreateUserLocalCommunicationService() -> object<nn::ldn::detail::IUserLocalCommunicationService>
Returns an #IUserLocalCommunicationService.
[0] AddProcessToDebugLaunchQueue(unknown<0x10>, buffer<unknown, 9>)
Same as AddProcessToLaunchQueue but for processes marked as debug.
[1] ClearDebugLaunchQueue()
Same as ClearLaunchQueue.
[2] GetNsoInfos(unknown<8>) -> (unknown<4>, buffer<unknown, 0xa>)
Takes in a u64 ProcessID, and a C descriptor. Returns the number of NsoInfos copied to output.
NsoInfo has the following layout:
| Offset | Size | Description | | ------ | ---- | --------------------------------- | | 0x0 | 0x20 | "Build ID", from NSO header+0x40. | | 0x20 | 0x8 | Mapped address for this NSO | | 0x28 | 0x8 | Mapped size for this NSO | | | | |
[0] CreateProcess(unknown<0x10>, handle<copy>) -> handle<move>
[1] GetProgramInfo(unknown<0x10>) -> buffer<unknown, 0x1a>
Takes a TitleId + StorageId, parses the NPDM, and writes output to a C descriptor buffer as follows:
| Offset | Size | Description |
| -------- | -------- | --------------------------------------------------------------------------------------------------------------------- |
| 0x0 | 0x1 | MainThreadPrio. Arg1 to svcStartProcess |
| 0x1 | 0x1 | DefaultCpuId. Arg2 to svcStartProcess |
| 0x2 | 0x1 | ApplicationType, see here. |
| 0x3 | 0x1 | Padding |
| 0x4 | 0x4 | MainThreadStackSize. Arg3 to svcStartProcess |
| 0x8 | 0x8 | TitleIdRange_Min |
| 0x10 | 0x4 | ACID Service Access Control list size |
| 0x14 | 0x4 | ACI0 Service Access Control list size |
| 0x18 | 0x4 | ACID FS Access Control buffer size |
| 0x1C | 0x4 | ACI0 FS Access Control buffer size |
| 0x20 |
[2] RegisterTitle(unknown<0x10>) -> unknown<8>
Takes a TitleId + StorageId, returns an index.
[3] UnregisterTitle(unknown<8>)
Takes the index from #RegisterTitle.
[0] LoadNro(u64, u64, u64, u64, u64, pid) -> u64
| Word | Value | | ---- | ------------------------ | | 0 | 0x00000004 | | 1 | 0x80000012 | | 2 | 0x00000001 | | 0-1 | Pid | | 0 | "SCFI" | | 1 | 0x00000000 | | 2 | Always 0. | | 3 | Nro heap address | | 4 | Nro size | | 5 | Bss backing heap address | | 6 | Bss size |
[1] UnloadNro(u64, u64, pid)
[2] LoadNrr(u64, u64, u64, pid)
| Word | Value | | ---- | ----------- | | 0 | 0x00000004 | | 1 | 0x8000000E | | 2 | 0x00000001 | | | | | 0-1 | Pid | | 0 | "SFCI" | | 1 | 0x00000002 | | 2 | Always 0. | | 3 | Nrr address | | 4 | Nrr size |
[3] UnloadNrr(u64, u64, pid)
[4] Initialize(u64, pid, handle<copy>)
| Word | Value | | ---- | --------------------------- | | 0 | 0x00000004 | | 1 | 0x8000000A | | 2 | 0x00000003 | | 0-1 | Pid | | 2 | Process handle (0xFFFF8001) | | 0 | "SFCI" | | 1 | 0x00000004 | | 2 | Always 0. |
[0] AddProcessToLaunchQueue(buffer<unknown, 9, 0x200>, u32 size, nn::ncm::ApplicationId appID)
[1] ClearLaunchQueue()
[0] StartLogging(unknown) -> unknown
[1] StopLogging(unknown) -> unknown
[2] GetLog(unknown) -> unknown
[0] Initialize(u64, pid) -> object<nn::lm::ILogger> Log
[0] Initialize(buffer<unknown, 0x21>)
[1, 3.0.0+] SetDestination(u32)
[0] ResolveAddOnContentPath(unknown<8>) -> buffer<unknown, 0x1a>
[1] RegisterAddOnContentStorage(unknown<0x10>)
[2] UnregisterAllAddOnContentPath()
[0] ResolveProgramPath(unknown<8>) -> buffer<unknown, 0x1a>
Takes an u64 TitleID and a C descriptor. Used for NCA-type1.
[1] RedirectProgramPath(unknown<8>, buffer<unknown, 0x19>)
Takes an u64 TitleID and a X descriptor with a ContentPath. Used for NCA-type1.
Inserts a new entry with flag set to 0.
[2] ResolveApplicationControlPath(unknown<8>) -> buffer<unknown, 0x1a>
Takes an u64 TitleID and a C descriptor. Used for NCA-type3.
[3] ResolveApplicationHtmlDocumentPath(unknown<8>) -> buffer<unknown, 0x1a>
Takes an u64 TitleID and a C descriptor. Used for NCA-type4.
[4] ResolveDataPath(unknown<8>) -> buffer<unknown, 0x1a>
Takes an u64 TitleID and a C descriptor. Used for NCA-type3.
[5] RedirectApplicationControlPath(unknown<8>, buffer<unknown, 0x19>)
Takes an u64 TitleID and a X descriptor with a ContentPath. Used for NCA-type3.
Inserts a new entry with flag set to 1.
[6] RedirectApplicationHtmlDocumentPath(unknown<8>, buffer<unknown, 0x19>)
Takes an u64 TitleID and a X descriptor with a ContentPath. Used for NCA-type4.
Inserts a new entry with flag set to 1.
[7] ResolveApplicationLegalInformationPath(unknown<8>) -> buffer<unknown, 0x1a>
Takes an u64 TitleID and a C descriptor. Used for NCA-type5.
[8] RedirectApplicationLegalInformationPath(unknown<8>, buffer<unknown, 0x19>)
Takes an u64 TitleID and a X descriptor with a ContentPath. Used for NCA-type5.
Inserts a new entry with flag set to 1.
[9] Refresh()
Takes no input. Frees all linked-lists' entries that have flag set to 0.
[10, 5.0.0+] SetProgramNcaPath2(unknown) -> unknown
Same as SetProgramNcaPath, but inserts a new entry with flag set to 1.
[11, 5.0.0+] ClearLocationResolver2(unknown) -> unknown
Takes no input. Frees all linked-lists' entries that have flag set to 1.
[12, 5.0.0+] DeleteProgramNcaPath(unknown) -> unknown
[13, 5.0.0+] DeleteControlNcaPath(unknown) -> unknown
[14, 5.0.0+] DeleteDocHtmlNcaPath(unknown) -> unknown
[15, 5.0.0+] DeleteInfoHtmlNcaPath(unknown) -> unknown
[0] OpenLocationResolver(unknown<1>) -> object<nn::lr::ILocationResolver>
[1] OpenRegisteredLocationResolver() -> object<nn::lr::IRegisteredLocationResolver>
[2] RefreshLocationResolver(unknown<1>)
[3, 2.0.0+] OpenAddOnContentLocationResolver() -> object<nn::lr::IAddOnContentLocationResolver>
[0] ResolveProgramPath(unknown<8>) -> buffer<unknown, 0x1a>
[1] RegisterProgramPath(unknown<8>, buffer<unknown, 0x19>)
[2] UnregisterProgramPath(unknown<8>)
[3] RedirectProgramPath(unknown<8>, buffer<unknown, 0x19>)
[4, 2.0.0+] ResolveHtmlDocumentPath(unknown<8>) -> buffer<unknown, 0x1a>
[5, 2.0.0+] RegisterHtmlDocumentPath(unknown<8>, buffer<unknown, 0x19>)
[6, 2.0.0+] UnregisterHtmlDocumentPath(unknown<8>)
[7, 2.0.0+] RedirectHtmlDocumentPath(unknown<8>, buffer<unknown, 0x19>)
[0] GetSystemEvent(unknown) -> unknown
[1] Cancel(unknown) -> unknown
[2] HasDone(unknown) -> unknown
[3] GetResult(unknown) -> unknown
[0] GetClientProfile() -> buffer<unknown, 0x1a>
[10] CreateLoginSession() -> unknown<0x10>
[11] GetNetworkServiceAccountId() -> unknown<8>
[12] GetUserNickname() -> unknown<0x21>
[13] GetUserProfileImage() -> (unknown<4>, buffer<unknown, 6>)
[100] PrepareAsync() -> object<nn::migration::detail::IAsyncContext>
[101] GetConnectionRequirement() -> unknown<1>
[200] ScanServersAsync() -> object<nn::migration::detail::IAsyncContext>
[201] ListServers() -> (unknown<4>, buffer<unknown, 6>)
[210] ConnectByServerIdAsync(unknown<0x10>) -> object<nn::migration::detail::IAsyncContext>
[300] GetStorageShortfall() -> unknown<8>
[301] GetTotalTransferInfo() -> unknown<0x10>
[302] GetImmigrantUid() -> unknown<0x10>
[310] GetCurrentTransferInfo() -> unknown<0x10>
[311] GetCurrentRelatedApplications() -> (unknown<4>, buffer<unknown, 6>)
[320] TransferNextAsync() -> object<nn::migration::detail::IAsyncContext>
[350] SuspendAsync() -> object<nn::migration::detail::IAsyncContext>
[400] CompleteAsync() -> object<nn::migration::detail::IAsyncContext>
[500] Abort()
[999] DebugSynchronizeStateInFinalizationAsync() -> object<nn::migration::detail::IAsyncContext>
[0] GetUid() -> unknown<0x10>
[1] GetServerProfile() -> buffer<unknown, 0x1a>
[100] PrepareAsync() -> object<nn::migration::detail::IAsyncContext>
[101] GetConnectionRequirement() -> unknown<1>
[200] WaitConnectionAsync() -> object<nn::migration::detail::IAsyncContext>
[201] GetClientProfile() -> buffer<unknown, 0x1a>
[202] AcceptConnectionAsync() -> object<nn::migration::detail::IAsyncContext>
[203] DeclineConnectionAsync() -> object<nn::migration::detail::IAsyncContext>
[300] ProcessTransferAsync() -> object<nn::migration::detail::IAsyncContext>
[400] CompleteAsync() -> object<nn::migration::detail::IAsyncContext>
[500] Abort()
[10] TryGetLastMigrationInfo() -> unknown<0xc>
[100] CreateServer(unknown<0x18>, handle<copy>, buffer<unknown, 0x19>) -> object<nn::migration::user::IServer>
[101] ResumeServer(unknown<4>, handle<copy>) -> object<nn::migration::user::IServer>
[200] CreateClient(unknown<4>, handle<copy>, buffer<unknown, 0x19>) -> object<nn::migration::user::IClient>
[201] ResumeClient(unknown<4>, handle<copy>) -> object<nn::migration::user::IClient>
[0] IsUpdated(u32) -> b8
[1] IsFullDatabase() -> b8
[2] GetCount(u32) -> u32
[3] Get(u32) -> (u32, buffer<nn::mii::CharInfoElement, 6>)
[4] Get1(u32) -> (u32, buffer<nn::mii::CharInfo, 6>)
[5] UpdateLatest(nn::mii::CharInfo, u32) -> nn::mii::CharInfo
[6] BuildRandom(u32, u32, u32) -> nn::mii::CharInfo
[7] BuildDefault(u32) -> nn::mii::CharInfo
[8] Get2(u32) -> (u32, buffer<nn::mii::StoreDataElement, 6>)
[9] Get3(u32) -> (u32, buffer<nn::mii::StoreData, 6>)
[10] UpdateLatest1(nn::mii::StoreData, u32) -> nn::mii::StoreData
[11] FindIndex(nn::mii::CreateId, b8) -> u32
[12] Move(nn::mii::CreateId, u32)
[13] AddOrReplace(nn::mii::StoreData)
[14] Delete(nn::mii::CreateId)
[15] DestroyFile()
[16] DeleteFile()
[17] Format()
[18] Import(buffer<bytes, 5>)
[19] Export() -> buffer<bytes, 6>
[20] IsBrokenDatabaseWithClearFlag() -> b8
[21] GetIndex(nn::mii::CharInfo) -> u32
[22, 5.0.0+] SetInterfaceVersion(unknown) -> unknown
[23, 5.0.0+] Convert(unknown) -> unknown
[0] Initialize(unknown) -> unknown
[10] Reload(unknown) -> unknown
[11] GetCount(unknown) -> unknown
[12] IsEmpty(unknown) -> unknown
[13] IsFull(unknown) -> unknown
[14] GetAttribute(unknown) -> unknown
[15] LoadImage(unknown) -> unknown
[16] AddOrUpdateImage(unknown) -> unknown
[17] DeleteImages(unknown) -> unknown
[100] DeleteFile(unknown) -> unknown
[101] DestroyFile(unknown) -> unknown
[102] ImportFile(unknown) -> unknown
[103] ExportFile(unknown) -> unknown
[104] ForceInitialize(unknown) -> unknown
[0] GetDatabaseService(u32) -> object<nn::mii::detail::IDatabaseService>
[0] InitializeOld(u32, u32, u32)
[1] FinalizeOld(u32)
[2] SetAndWaitOld(u32, u32, u32)
[3] GetOld(u32) -> u32
[4] Initialize(u32, u32, u32) -> u32
[5] Finalize(u32)
[6] SetAndWait(u32, u32, u32)
[7] Get(u32) -> u32
[0] CreateContentStorage(unknown<1>)
[1] CreateContentMetaDatabase(unknown<1>)
[2] VerifyContentStorage(unknown<1>)
[3] VerifyContentMetaDatabase(unknown<1>)
[4] OpenContentStorage(unknown<1>) -> object<nn::ncm::IContentStorage>
[5] OpenContentMetaDatabase(unknown<1>) -> object<nn::ncm::IContentMetaDatabase>
[6, 1.0.0] CloseContentStorageForcibly(unknown<1>)
[7, 1.0.0] CloseContentMetaDatabaseForcibly(unknown<1>)
[8] CleanupContentMetaDatabase(unknown<1>)
[9, 2.0.0+] OpenContentStorage2(unknown<1>)
[10, 2.0.0+] CloseContentStorage(unknown<1>)
[11, 2.0.0+] OpenContentMetaDatabase2(unknown<1>)
[12, 2.0.0+] CloseContentMetaDatabase(unknown<1>)
[0] Set(unknown<0x10>, buffer<unknown, 5>)
[1] Get(unknown<0x10>) -> (unknown<8>, buffer<unknown, 6>)
[2] Remove(unknown<0x10>)
[3] GetContentIdByType(unknown<0x18>) -> unknown<0x10>
[4] ListContentInfo(unknown<0x18>) -> (unknown<4>, buffer<unknown, 6>)
[5] List(unknown<0x20>) -> (unknown<8>, buffer<unknown, 6>)
[6] GetLatestContentMetaKey(unknown<8>) -> unknown<0x10>
[7] ListApplication(unknown<1>) -> (unknown<8>, buffer<unknown, 6>)
Each 24-byte entry (officially "ApplicationContentMetaKey") is as follows:
meta_record
meta_record;
u64Â Â Â Â base_title_id;
This function takes in a type 6 buffer to write entries to, and a u8 "filter" type. If filter is zero, all update records will be copied to to the output buffer (space permitting). Otherwise, only titles with type == filter_type will be copied to the output buffer.
This func returns a u32 num_entries_total, and a u32 num_entries_written.
[8] Has(unknown<0x10>) -> unknown<1>
[9] HasAll(buffer<unknown, 5>) -> unknown<1>
[10] GetSize(unknown<0x10>) -> unknown<8>
[11] GetRequiredSystemVersion(unknown<0x10>) -> unknown<4>
[12] GetPatchId(unknown<0x10>) -> unknown<8>
[13] DisableForcibly()
[14] LookupOrphanContent(buffer<unknown, 5>) -> buffer<unknown, 6>
Takes a type-6 byte buffer, and a type-5 buffer containing #NcaIDs.
This function was stubbed to return 0xDC05 in 2.0.0.
On 1.0.0: Initialized the output buffer to all 1s. Then, for each #NcaID in the input buffer, it checks if that NcaID is present anywhere in the database, and if so writes 0 to the corresponding output byte.
In pseudocode, the function basically does the following:
for i in range(len(out_buf)):
out_buf[i]Â =Â 1
for i, NcaID in NcaIDs:
if is_present_in_database(NcaID):
out_buf[i]Â =Â 0
[15] Commit()
[16] HasContent(unknown<0x20>) -> unknown<1>
[17] ListContentMetaInfo(unknown<0x18>) -> (unknown<4>, buffer<unknown, 6>)
[18] GetAttributes(unknown<0x10>) -> unknown<1>
[19, 2.0.0+] GetRequiredApplicationVersion(unknown<0x10>) -> unknown<4>
[20, 5.0.0+] Unknown20(unknown) -> unknown
[0] GeneratePlaceHolderId() -> unknown<0x10>
Generates a random #NcaID for use as a placeholder.
Calls nn::util::GenerateUuid(), which internally calls nn::os::GenerateRandomBytes(16);
[1] CreatePlaceHolder(unknown<0x28>)
[2] DeletePlaceHolder(unknown<0x10>)
[3] HasPlaceHolder(unknown<0x10>) -> unknown<1>
[4] WritePlaceHolder(unknown<0x18>, buffer<unknown, 5>)
[5] Register(unknown<0x20>)
[6] Delete(unknown<0x10>)
[7] Has(unknown<0x10>) -> unknown<1>
[8] GetPath(unknown<0x10>) -> buffer<unknown, 0x1a>
[9] GetPlaceHolderPath(unknown<0x10>) -> buffer<unknown, 0x1a>
[10] CleanupAllPlaceHolder()
[11] ListPlaceHolder() -> (unknown<4>, buffer<unknown, 6>)
[12] GetContentCount() -> unknown<4>
Writes the total number of entries which can be read by GetEntries, to cmdreply <SFCO_offset>+0x10.
[13] ListContentId(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
Takes an output buffer, u32 offset and gets all entries starting at that offset. Returns number of entries read.
Each entry is a #NcaID.
The total read entries is exactly the same as the number of "
[14] GetSize(unknown<0x10>) -> unknown<8>
[15] DisableForcibly()
[16, 2.0.0+] RevertToPlaceHolder(unknown<0x30>)
[17, 2.0.0+] SetPlaceHolderSize(unknown<0x18>)
[18, 2.0.0+] ReadContentIdFile(unknown<0x18>) -> buffer<unknown, 6>
Takes an output buffer, a #NcaID as input, and a u64 file offset.
Reads plaintext NCA file contents from the Registered path for the NcaID.
[19, 2.0.0+] GetRightsIdFromPlaceHolderId(unknown<0x10>) -> unknown<0x18>
[20, 2.0.0+] GetRightsIdFromContentId(unknown<0x10>) -> unknown<0x18>
[21, 2.0.0+] WriteContentForDebug(unknown<0x18>, buffer<unknown, 5>)
[22, 2.0.0+] GetFreeSpaceSize() -> unknown<8>
[23, 2.0.0+] GetTotalSpaceSize() -> unknown<8>
[24, 3.0.0+] FlushStorage()
[25, 4.0.0+] Unknown25(unknown<0x10>) -> unknown<8>
[26, 4.0.0+] Unknown26()
[0] Unknown0() -> handle<copy>
[0] Unknown0(unknown<4>, buffer<unknown, 9>, buffer<unknown, 9>) -> (unknown<4>, buffer<unknown, 6>)
[1] Unknown1(buffer<unknown, 9>) -> unknown<4>
[2] Unknown2(unknown<1>, buffer<unknown, 9>, buffer<unknown, 9>) -> unknown<4>
[3] Unknown3(unknown<4>, buffer<unknown, 9>, buffer<unknown, 9>)
[4] Unknown4(unknown<4>, buffer<unknown, 9>, buffer<unknown, 9>)
[5] Unknown5(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>)
[10100] Unknown10100(buffer<unknown, 5>)
[20100] Unknown20100(unknown<8>, buffer<unknown, 9>)
[30100] Unknown30100(buffer<unknown, 9>) -> unknown<4>
[30101, 3.0.0+] Unknown30101(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[30200] Unknown30200() -> unknown<1>
[30300] Unknown30300(buffer<unknown, 9>)
[30400, 3.0.0+] Unknown30400(buffer<unknown, 5>) -> (unknown<8>, buffer<unknown, 6>)
[30900, 1.0.0] Unknown30900() -> object<nn::news::detail::ipc::INewlyArrivedEventHolder>
[30901, 1.0.0] Unknown30901() -> object<nn::news::detail::ipc::INewsDataService>
[30902, 1.0.0] Unknown30902() -> object<nn::news::detail::ipc::INewsDatabaseService>
[40100] Unknown40100(unknown<4>, buffer<unknown, 9>)
[40101, 3.0.0+] Unknown40101(unknown<8>)
[40200] Unknown40200()
[40201] Unknown40201()
[90100] Unknown90100() -> (unknown<8>, buffer<unknown, 6>)
[0] Unknown0() -> handle<copy>
[0] Unknown0() -> object<nn::news::detail::ipc::INewsService>
[1] Unknown1() -> object<nn::news::detail::ipc::INewlyArrivedEventHolder>
[2] Unknown2() -> object<nn::news::detail::ipc::INewsDataService>
[3] Unknown3() -> object<nn::news::detail::ipc::INewsDatabaseService>
[4] Unknown4() -> object<nn::news::detail::ipc::IOverwriteEventHolder>
[0] Initialize()
[1] Finalize()
[2] NotifyForegroundApplet(unknown<8>)
[0] CreateAmInterface() -> object<nn::nfc::am::detail::IAm>
[0] Initialize(u64, u64, pid, buffer<unknown, 5>)
[1] Finalize()
[2] GetStateOld() -> u32
[3] IsNfcEnabledOld() -> u8
[100] SetNfcEnabledOld(u8)
[400, 4.0.0+] InitializeSystem(u64, u64, pid, buffer<unknown, 5>)
[401, 4.0.0+] FinalizeSystem()
[402, 4.0.0+] GetState() -> u32
[403, 4.0.0+] IsNfcEnabled() -> u8
[404, 4.0.0+] ListDevices() -> (u32, buffer<unknown, 0xa>)
[405, 4.0.0+] GetDeviceState(bytes<8, 4>) -> u32
[406, 4.0.0+] GetNpadId(bytes<8, 4>) -> u32
[407, 4.0.0+] AttachAvailabilityChangeEvent() -> handle<copy>
[408, 4.0.0+] StartDetection(bytes<8, 4>, u32)
[409, 4.0.0+] StopDetection(bytes<8, 4>)
[410, 4.0.0+] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[411, 4.0.0+] AttachActivateEvent(bytes<8, 4>) -> handle<copy>
[412, 4.0.0+] AttachDeactivateEvent(bytes<8, 4>) -> handle<copy>
[500, 4.0.0+] SetNfcEnabled(u8)
[1000, 4.0.0+] ReadMifare(bytes<8, 4>, buffer<unknown, 5>) -> buffer<unknown, 6>
[1001, 4.0.0+] WriteMifare(bytes<8, 4>, buffer<unknown, 5>)
[1300, 4.0.0+] SendCommandByPassThrough(bytes<8, 4>, u64, buffer<unknown, 5>) -> (u32, buffer<unknown, 6>)
[1301, 4.0.0+] KeepPassThroughSession(bytes<8, 4>)
[1302, 4.0.0+] ReleasePassThroughSession(bytes<8, 4>)
[0] CreateSystemInterface() -> object<nn::nfc::detail::ISystem>
[0] InitializeOld(u64, u64, pid, buffer<unknown, 5>)
[1] FinalizeOld()
[2] GetStateOld() -> u32
[3] IsNfcEnabledOld() -> u8
[400, 4.0.0+] Initialize(u64, u64, pid, buffer<unknown, 5>)
[401, 4.0.0+] Finalize()
[402, 4.0.0+] GetState() -> u32
[403, 4.0.0+] IsNfcEnabled() -> u8
[404, 4.0.0+] ListDevices() -> (u32, buffer<unknown, 0xa>)
[405, 4.0.0+] GetDeviceState(bytes<8, 4>) -> u32
[406, 4.0.0+] GetNpadId(bytes<8, 4>) -> u32
[407, 4.0.0+] AttachAvailabilityChangeEvent() -> handle<copy>
[408, 4.0.0+] StartDetection(bytes<8, 4>, u32)
[409, 4.0.0+] StopDetection(bytes<8, 4>)
[410, 4.0.0+] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[411, 4.0.0+] AttachActivateEvent(bytes<8, 4>) -> handle<copy>
[412, 4.0.0+] AttachDeactivateEvent(bytes<8, 4>) -> handle<copy>
[1000, 4.0.0+] ReadMifare(bytes<8, 4>, buffer<unknown, 5>) -> buffer<unknown, 6>
[1001, 4.0.0+] WriteMifare(bytes<8, 4>, buffer<unknown, 5>)
[1300, 4.0.0+] SendCommandByPassThrough(bytes<8, 4>, u64, buffer<unknown, 5>) -> (u32, buffer<unknown, 6>)
[1301, 4.0.0+] KeepPassThroughSession(bytes<8, 4>)
[1302, 4.0.0+] ReleasePassThroughSession(bytes<8, 4>)
[0] CreateUserInterface() -> object<nn::nfc::mifare::detail::IUser>
[0] Initialize(u64, u64, pid, buffer<unknown, 5>)
[1] Finalize()
[2] ListDevices() -> (u32, buffer<unknown, 0xa>)
[3] StartDetection(bytes<8, 4>)
[4] StopDetection(bytes<8, 4>)
[5] Read(bytes<8, 4>, buffer<unknown, 5>) -> buffer<unknown, 6>
[6] Write(bytes<8, 4>, buffer<unknown, 5>)
[7] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[8] GetActivateEventHandle(bytes<8, 4>) -> handle<copy>
[9] GetDeactivateEventHandle(bytes<8, 4>) -> handle<copy>
[10] GetState() -> u32
[11] GetDeviceState(bytes<8, 4>) -> u32
[12] GetNpadId(bytes<8, 4>) -> u32
[13] GetAvailabilityChangeEventHandle() -> handle<copy>
[0] CreateUserInterface() -> object<nn::nfc::detail::IUser>
[0] InitializeDebug(u64, u64, pid, buffer<unknown, 5>)
[1] FinalizeDebug()
[2] ListDevices() -> (u32, buffer<unknown, 0xa>)
[3] StartDetection(bytes<8, 4>)
[4] StopDetection(bytes<8, 4>)
[5] Mount(bytes<8, 4>, u32, u32)
[6] Unmount(bytes<8, 4>)
[7] OpenApplicationArea(bytes<8, 4>, u32)
[8] GetApplicationArea(bytes<8, 4>) -> (u32, buffer<unknown, 6>)
[9] SetApplicationArea(bytes<8, 4>, buffer<unknown, 5>)
[10] Flush(bytes<8, 4>)
[11] Restore(bytes<8, 4>)
[12] CreateApplicationArea(bytes<8, 4>, u32, buffer<unknown, 5>)
[13] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[14] GetRegisterInfo(bytes<8, 4>) -> buffer<unknown<0x100>, 0x1a>
[15] GetCommonInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[16] GetModelInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[17] AttachActivateEvent(bytes<8, 4>) -> handle<copy>
[18] AttachDeactivateEvent(bytes<8, 4>) -> handle<copy>
[19] GetState() -> u32
[20] GetDeviceState(bytes<8, 4>) -> u32
[21] GetNpadId(bytes<8, 4>) -> u32
[22] GetApplicationArea2(bytes<8, 4>) -> u32
[23] AttachAvailabilityChangeEvent() -> handle<copy>
[24] RecreateApplicationArea(bytes<8, 4>, u32, buffer<unknown, 5>)
[100] Format(bytes<8, 4>)
[101] GetAdminInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[102] GetRegisterInfo2(bytes<8, 4>) -> buffer<unknown<0x100>, 0x1a>
[103] SetRegisterInfo(bytes<8, 4>, buffer<unknown<0x100>, 0x19>)
[104] DeleteRegisterInfo(bytes<8, 4>)
[105] DeleteApplicationArea(bytes<8, 4>)
[106] ExistsApplicationArea(bytes<8, 4>) -> u8
[200] GetAll(bytes<8, 4>) -> buffer<unknown<0x298>, 0x1a>
[201] SetAll(bytes<8, 4>, buffer<unknown<0x298>, 0x19>)
[202] FlushDebug(bytes<8, 4>)
[203] BreakTag(bytes<8, 4>, u32)
[204] ReadBackupData() -> (u32, buffer<unknown, 6>)
[205] WriteBackupData(buffer<unknown, 5>)
[206] WriteNtf(bytes<8, 4>, u32, buffer<unknown, 5>)
[300, 1.0.0-3.0.2] Unknown300(u64, u64, pid, buffer<unknown, 5>)
[301, 1.0.0-3.0.2] Unknown301()
[302, 1.0.0-3.0.2] Unknown302() -> (u32, buffer<unknown, 0xa>)
[303, 1.0.0-3.0.2] Unknown303(bytes<8, 4>, u32)
[304, 1.0.0-3.0.2] Unknown304(bytes<8, 4>)
[305, 1.0.0-3.0.2] Unknown305(bytes<8, 4>, u64, buffer<unknown, 5>) -> (u32, buffer<unknown, 6>)
[306, 1.0.0-3.0.2] Unknown306(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[307, 1.0.0-3.0.2] Unknown307(bytes<8, 4>) -> handle<copy>
[308, 1.0.0-3.0.2] Unknown308(bytes<8, 4>) -> handle<copy>
[309, 1.0.0-3.0.2] Unknown309() -> u32
[310, 1.0.0-3.0.2] Unknown310(bytes<8, 4>) -> u32
[311, 1.0.0-3.0.2] Unknown311(bytes<8, 4>) -> u32
[312, 1.0.0-3.0.2] Unknown312(bytes<8, 4>)
[313, 1.0.0-3.0.2] Unknown313(bytes<8, 4>)
[314, 1.0.0-3.0.2] Unknown314() -> handle<copy>
[0] CreateDebugInterface() -> object<nn::nfp::detail::IDebug>
[0] InitializeSystem(u64, u64, pid, buffer<unknown, 5>)
[1] FinalizeSystem()
[2] ListDevices() -> (u32, buffer<unknown, 0xa>)
[3] StartDetection(bytes<8, 4>)
[4] StopDetection(bytes<8, 4>)
[5] Mount(bytes<8, 4>, u32, u32)
[6] Unmount(bytes<8, 4>)
[10] Flush(bytes<8, 4>)
[11] Restore(bytes<8, 4>)
[13] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[14] GetRegisterInfo(bytes<8, 4>) -> buffer<unknown<0x100>, 0x1a>
[15] GetCommonInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[16] GetModelInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[17] AttachActivateEvent(bytes<8, 4>) -> handle<copy>
[18] AttachDeactivateEvent(bytes<8, 4>) -> handle<copy>
[19] GetState() -> u32
[20] GetDeviceState(bytes<8, 4>) -> u32
[21] GetNpadId(bytes<8, 4>) -> u32
[23] AttachAvailabilityChangeEvent() -> handle<copy>
[100] Format(bytes<8, 4>)
[101] GetAdminInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[102] GetRegisterInfo2(bytes<8, 4>) -> buffer<unknown<0x100>, 0x1a>
[103] SetRegisterInfo(bytes<8, 4>, buffer<unknown<0x100>, 0x19>)
[104] DeleteRegisterInfo(bytes<8, 4>)
[105] DeleteApplicationArea(bytes<8, 4>)
[106] ExistsApplicationArea(bytes<8, 4>) -> u8
[0] CreateSystemInterface() -> object<nn::nfp::detail::ISystem>
[0] Initialize(u64, u64, pid, buffer<unknown, 5>)
[1] Finalize()
[2] ListDevices() -> (u32, buffer<unknown, 0xa>)
[3] StartDetection(bytes<8, 4>)
[4] StopDetection(bytes<8, 4>)
[5] Mount(bytes<8, 4>, u32, u32)
[6] Unmount(bytes<8, 4>)
[7] OpenApplicationArea(bytes<8, 4>, u32)
[8] GetApplicationArea(bytes<8, 4>) -> (u32, buffer<unknown, 6>)
[9] SetApplicationArea(bytes<8, 4>, buffer<unknown, 5>)
[10] Flush(bytes<8, 4>)
[11] Restore(bytes<8, 4>)
[12] CreateApplicationArea(bytes<8, 4>, u32, buffer<unknown, 5>)
[13] GetTagInfo(bytes<8, 4>) -> buffer<unknown<0x58>, 0x1a>
[14] GetRegisterInfo(bytes<8, 4>) -> buffer<unknown<0x100>, 0x1a>
[15] GetCommonInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[16] GetModelInfo(bytes<8, 4>) -> buffer<unknown<0x40>, 0x1a>
[17] AttachActivateEvent(bytes<8, 4>) -> handle<copy>
[18] AttachDeactivateEvent(bytes<8, 4>) -> handle<copy>
[19] GetState() -> u32
[20] GetDeviceState(bytes<8, 4>) -> u32
[21] GetNpadId(bytes<8, 4>) -> u32
[22] GetApplicationArea2(bytes<8, 4>) -> u32
[23] AttachAvailabilityChangeEvent() -> handle<copy>
[24] RecreateApplicationArea(bytes<8, 4>, u32, buffer<unknown, 5>)
[0] CreateUserInterface() -> object<nn::nfp::detail::IUser>
[1] GetClientId() -> buffer<nn::nifm::ClientId, 0x1a>
[2] CreateScanRequest() -> object<nn::nifm::detail::IScanRequest>
[4] CreateRequest(u32) -> object<nn::nifm::detail::IRequest>
[5] GetCurrentNetworkProfile() -> buffer<nn::nifm::detail::sf::NetworkProfileData, 0x1a>
[6] EnumerateNetworkInterfaces(u32) -> (u32, buffer<nn::nifm::detail::sf::NetworkInterfaceInfo, 0xa>)
[7] EnumerateNetworkProfiles(u8) -> (u32, buffer<nn::nifm::detail::sf::NetworkProfileBasicInfo, 6>)
[8] GetNetworkProfile(nn::util::Uuid) -> buffer<nn::nifm::detail::sf::NetworkProfileData, 0x1a>
[9] SetNetworkProfile(buffer<nn::nifm::detail::sf::NetworkProfileData, 0x19>) -> nn::util::Uuid
[10] RemoveNetworkProfile(nn::util::Uuid)
[11, 4.0.0+] GetScanDataOld() -> (u32, buffer<nn::nifm::detail::sf::AccessPointDataOld, 6>)
[11, 1.0.0-3.0.2] GetScanData() -> (u32, buffer<nn::nifm::detail::sf::AccessPointDataOld, 6>)
[12] GetCurrentIpAddress() -> nn::nifm::IpV4Address
[13, 1.0.0-3.0.2] GetCurrentAccessPoint() -> buffer<nn::nifm::detail::sf::AccessPointDataOld, 0x1a>
[13, 4.0.0+] GetCurrentAccessPointOld() -> buffer<nn::nifm::detail::sf::AccessPointDataOld, 0x1a>
[14] CreateTemporaryNetworkProfile(buffer<nn::nifm::detail::sf::NetworkProfileData, 0x19>) -> (nn::util::Uuid, object<nn::nifm::detail::INetworkProfile>)
[15] GetCurrentIpConfigInfo() -> (nn::nifm::IpAddressSetting, nn::nifm::DnsSetting)
[16] SetWirelessCommunicationEnabled(b8)
[17] IsWirelessCommunicationEnabled() -> b8
[18] GetInternetConnectionStatus() -> nn::nifm::detail::sf::InternetConnectionStatus
[19] SetEthernetCommunicationEnabled(b8)
[20] IsEthernetCommunicationEnabled() -> b8
[21] IsAnyInternetRequestAccepted(buffer<nn::nifm::ClientId, 0x19>) -> b8
[22] IsAnyForegroundRequestAccepted() -> b8
[23] PutToSleep()
[24] WakeUp()
[25] GetSsidListVersion() -> nn::nifm::SsidListVersion
[26] SetExclusiveClient(buffer<nn::nifm::ClientId, 0x19>)
[27] GetDefaultIpSetting() -> buffer<nn::nifm::IpSettingData, 0x1a>
[28] SetDefaultIpSetting(buffer<nn::nifm::IpSettingData, 0x19>)
[29] SetWirelessCommunicationEnabledForTest(b8)
[30] SetEthernetCommunicationEnabledForTest(b8)
[31, 2.0.0+] GetTelemetorySystemEventReadableHandle() -> handle<copy>
[32, 2.0.0+] GetTelemetryInfo() -> buffer<nn::nifm::TelemetryInfo, 0x16>
[33, 2.0.0+] ConfirmSystemAvailability()
[34, 4.0.0+] SetBackgroundRequestEnabled(b8)
[35, 4.0.0+] GetScanData() -> (u32, buffer<nn::nifm::detail::sf::AccessPointData, 6>)
[36, 4.0.0+] GetCurrentAccessPoint() -> buffer<nn::nifm::detail::sf::AccessPointData, 0x1a>
[37, 4.0.0+] Shutdown()
[0] Update(buffer<nn::nifm::detail::sf::NetworkProfileData, 0x19>) -> nn::util::Uuid
[1, 1.0.0-2.3.0] Persist(nn::util::Uuid) -> nn::util::Uuid
[1, 3.0.0+] PersistOld(nn::util::Uuid) -> nn::util::Uuid
[2, 3.0.0+] Persist() -> nn::util::Uuid
[0] GetRequestState() -> u32
[1] GetResult()
[2] GetSystemEventReadableHandles() -> (handle<copy>, handle<copy>)
[3] Cancel()
[4] Submit()
[5] SetRequirement(nn::nifm::Requirement)
[6] SetRequirementPreset(u32)
[8] SetPriority(u8)
[9] SetNetworkProfileId(nn::util::Uuid)
[10] SetRejectable(b8)
[11] SetConnectionConfirmationOption(i8)
[12] SetPersistent(b8)
[13] SetInstant(b8)
[14] SetSustainable(b8, u8)
[15] SetRawPriority(u8)
[16] SetGreedy(b8)
[17] SetSharable(b8)
[18] SetRequirementByRevision(u32)
[19] GetRequirement() -> nn::nifm::Requirement
[20] GetRevision() -> u32
[21] GetAppletInfo(u32) -> (u32, u32, u32, buffer<bytes, 6>)
[22] GetAdditionalInfo() -> (u32, buffer<nn::nifm::AdditionalInfo, 0x16>)
[23] SetKeptInSleep(b8)
[24] RegisterSocketDescriptor(u32)
[25] UnregisterSocketDescriptor(u32)
[0] Submit()
[1] IsProcessing() -> b8
[2] GetResult()
[3] GetSystemEventReadableHandle() -> handle<copy>
[4, 1.0.0-2.3.0] CreateGeneralService() -> object<nn::nifm::detail::IGeneralService>
[4, 3.0.0+] CreateGeneralServiceOld() -> object<nn::nifm::detail::IGeneralService>
[5, 3.0.0+] CreateGeneralService(u64, pid) -> object<nn::nifm::detail::IGeneralService>
[0] CreateSystemUpdateTask(unknown<0x18>) -> unknown<0x10>
[1] DestroySystemUpdateTask(unknown<0x10>)
Takes a 0x10-byte input struct, from the output of ListSystemUpdateTask.
[2] ListSystemUpdateTask() -> (unknown<4>, buffer<unknown, 6>)
Takes a type-0x6 output buffer, for an array of 0x10-byte entries. Returns an u32 for total output entries.
Doesn't return anything on a v2.1 system where sysupdate domains are blocked.
[3] RequestSystemUpdateTaskRun(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[4] GetSystemUpdateTaskInfo(unknown<0x10>) -> unknown<0x38>
[5] CommitSystemUpdateTask(unknown<0x10>)
[6] CreateNetworkInstallTask(unknown<0x10>, buffer<unknown, 5>) -> unknown<0x10>
[7] DestroyNetworkInstallTask(unknown<0x10>)
[8] ListNetworkInstallTask() -> (unknown<4>, buffer<unknown, 6>)
[9] RequestNetworkInstallTaskRun(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[10] GetNetworkInstallTaskInfo(unknown<0x10>) -> unknown<0x40>
[11] CommitNetworkInstallTask(unknown<0x10>)
[12] RequestLatestSystemUpdateMeta() -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[14] ListApplicationNetworkInstallTask(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
[15] ListNetworkInstallTaskContentMeta(unknown<0x14>) -> (unknown<4>, buffer<unknown, 6>)
[16] RequestLatestVersion(unknown<8>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[17] SetNetworkInstallTaskAttribute(unknown<0x18>)
[18] AddNetworkInstallTaskContentMeta(unknown<0x10>, buffer<unknown, 5>)
[19] GetDownloadedSystemDataPath(unknown<0x18>) -> buffer<unknown, 0x16>
[20] CalculateNetworkInstallTaskRequiredSize(unknown<0x10>) -> unknown<8>
[21] IsExFatDriverIncluded(unknown<0x10>) -> unknown<1>
[22] GetBackgroundDownloadStressTaskInfo() -> unknown<0x10>
[23, 2.0.0+] RequestDeviceAuthenticationToken() -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[24, 2.0.0+] RequestGameCardRegistrationStatus(unknown<8>, buffer<unknown, 5>, buffer<unknown, 5>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[25, 2.0.0+] RequestRegisterGameCard(unknown<0x10>, buffer<unknown, 5>, buffer<unknown, 5>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[26, 2.0.0+] RequestRegisterNotificationToken(unknown<0x28>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[27, 2.0.0+] RequestDownloadTaskList(unknown<0x28>) -> (handle<copy>, object<nn::nim::detail::IAsyncData>)
[28, 2.0.0+] RequestApplicationControl(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[29, 2.0.0+] RequestLatestApplicationControl(unknown<8>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[30, 2.0.0+] RequestVersionList(unknown<0x28>) -> (handle<copy>, object<nn::nim::detail::IAsyncData>)
[31, 2.0.0+] CreateApplyDeltaTask(unknown<0x20>, buffer<unknown, 5>) -> unknown<0x10>
[32, 2.0.0+] DestroyApplyDeltaTask(unknown<0x10>)
[33, 2.0.0+] ListApplicationApplyDeltaTask(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
[34, 2.0.0+] RequestApplyDeltaTaskRun(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[35, 2.0.0+] GetApplyDeltaTaskInfo(unknown<0x10>) -> unknown<0x30>
[36, 2.0.0+] ListApplyDeltaTask(unknown<0x14>) -> (unknown<4>, buffer<unknown, 6>)
[37, 2.0.0+] CommitApplyDeltaTask(unknown<0x10>)
[38, 2.0.0+] CalculateApplyDeltaTaskRequiredSize(unknown<0x10>) -> unknown<8>
[39, 2.0.0+] PrepareShutdown()
[40, 2.0.0+] ListApplyDeltaTask2() -> (unknown<4>, buffer<unknown, 6>)
[41, 2.0.0+] ClearNotEnoughSpaceStateOfApplyDeltaTask(unknown<0x10>)
[42, 3.0.0+] Unknown42(unknown<0x10>) -> unknown<0x10>
[43, 3.0.0+] Unknown43() -> unknown<0x10>
[44, 3.0.0+] Unknown44(unknown<0x10>) -> unknown<1>
[45, 3.0.0+] Unknown45(unknown<0x28>) -> unknown<8>
[46, 3.0.0+] Unknown46()
[0] RequestDeviceAuthenticationToken() -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[1] RequestCachedDeviceAuthenticationToken(unknown<8>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[100] RequestRegisterDeviceAccount() -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[101] RequestUnregisterDeviceAccount() -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[102] RequestDeviceAccountStatus() -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[103] GetDeviceAccountInfo() -> unknown<0x20>
[104] RequestDeviceRegistrationInfo() -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[105] RequestTransferDeviceAccount() -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[106] RequestSyncRegistration() -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[107] IsOwnDeviceId(unknown<8>) -> unknown<1>
[200] RequestRegisterNotificationToken(unknown<0x28>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[300] RequestUnlinkDevice(unknown<8>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[301] RequestUnlinkDeviceIntegrated(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[302] RequestLinkDevice(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[303] HasDeviceLink(unknown<0x10>) -> unknown<1>
[304] RequestUnlinkDeviceAll() -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[305] RequestCreateVirtualAccount(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[306] RequestDeviceLinkStatus(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[400] GetAccountByVirtualAccount(unknown<4>) -> unknown<0x10>
[500] RequestSyncTicket() -> (handle<copy>, object<nn::nim::detail::IAsyncProgressResult>)
[501] RequestDownloadTicket(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncResult>)
[502, 4.0.0+] RequestDownloadTicketForPrepurchasedContents(unknown<0x10>) -> (handle<copy>, object<nn::nim::detail::IAsyncValue>)
[1] Unknown1()
[2] Unknown2(unknown<8>)
[3] Unknown3(unknown<2>) -> buffer<unknown, 6>
[4] Unknown4(unknown<2>) -> buffer<unknown, 6>
[5] Unknown5() -> handle<copy>
[6] Unknown6()
[7] Unknown7() -> handle<copy>
[11] Unknown11(buffer<unknown, 9>)
[12] Unknown12(buffer<unknown, 9>)
[13] Unknown13(buffer<unknown, 9>) -> unknown<1>
[21] Unknown21(unknown<0x10>) -> unknown<0x28>
[22] Unknown22(unknown<0x18>) -> unknown<0x28>
[23] Unknown23(unknown<0x10>)
[24] Unknown24(unknown<0x18>)
[25] Unknown25(unknown<0x28>) -> unknown<1>
[31] Unknown31(unknown<0x10>)
[32] Unknown32(unknown<0x10>)
[101] Unknown101()
[102] Unknown102()
[103] Unknown103() -> unknown<4>
[104] Unknown104() -> buffer<unknown, 6>
[105] Unknown105() -> handle<copy>
[111] Unknown111() -> buffer<unknown, 0xa>
[112] Unknown112()
[113] Unknown113()
[114] Unknown114(buffer<unknown, 9>, buffer<unknown, 9>)
[115] Unknown115() -> (buffer<unknown, 0xa>, buffer<unknown, 0xa>)
[201] Unknown201(unknown<0x10>)
[202] Unknown202(unknown<4>)
[1] Unknown1()
[2] Unknown2(unknown<8>)
[3] Unknown3(unknown<2>) -> buffer<unknown, 6>
[4] Unknown4(unknown<2>) -> buffer<unknown, 6>
[5] Unknown5() -> handle<copy>
[7] Unknown7() -> handle<copy>
[21] Unknown21(unknown<0x10>) -> unknown<0x28>
[23] Unknown23(unknown<0x10>)
[25] Unknown25(unknown<0x28>) -> unknown<1>
[101] Unknown101()
[102] Unknown102()
[103] Unknown103() -> unknown<4>
[104] Unknown104() -> buffer<unknown, 6>
[111] Unknown111() -> buffer<unknown, 0xa>
[0] CreateUserAccount(unknown<0x21>, buffer<unknown, 5>)
[0] ListApplicationRecord(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
Takes a type-6 output buffer and an u32 entry_offset.
Returns an array of title-info entries using the specified offset and size. No input titleID is passed to this.
[1] GenerateApplicationRecordCount() -> unknown<8>
[2] GetApplicationRecordUpdateSystemEvent() -> handle<copy>
[3] GetApplicationViewDeprecated(buffer<unknown, 5>) -> buffer<unknown, 6>
[4] DeleteApplicationEntity(unknown<8>)
[5] DeleteApplicationCompletely(unknown<8>)
[6] IsAnyApplicationEntityRedundant() -> unknown<1>
[7] DeleteRedundantApplicationEntity()
[8] IsApplicationEntityMovable(unknown<0x10>) -> unknown<1>
[9] MoveApplicationEntity(unknown<0x10>)
[11] CalculateApplicationOccupiedSize(unknown<8>) -> unknown<0x80>
[16] PushApplicationRecord(unknown<0x10>, buffer<unknown, 5>)
[17] ListApplicationRecordContentMeta(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[19, 1.0.0-5.1.0] LaunchApplication(unknown<8>) -> unknown<8>
Takes an input u64 titleID, returns an output u64 PID.
Launches an application title which is registered with NS.
[21] GetApplicationContentPath(unknown<0x10>) -> buffer<unknown, 0x16>
Takes a 0x16-type output buffer, an u8 type, and an u64 titleID.
The input titleID is used with the application-title table like various other cmds, anything not in that table can't be used with this.
Returns a string path for the specified type of patch content with this titleID, otherwise returns regular-application paths when update-title not installed. Returns an error when the specified type of content doesn't exist for this title. Starts with "@{SdCardContent,UserContent}://" and ends in ".nca".
For gamecard content, the output path is: "@GcSXXXXXXXX:/
The output string is then used by the user-process with FS to mount the content.
[22] TerminateApplication(unknown<8>)
[23] ResolveApplicationContentPath(unknown<0x10>)
[26] BeginInstallApplication(unknown<0x10>)
[27] DeleteApplicationRecord(unknown<8>)
[30] RequestApplicationUpdateInfo(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[32] CancelApplicationDownload(unknown<8>)
[33] ResumeApplicationDownload(unknown<8>)
[35] UpdateVersionList(buffer<unknown, 5>)
[36] PushLaunchVersion(unknown<0x10>)
[37] ListRequiredVersion() -> (unknown<4>, buffer<unknown, 6>)
[38] CheckApplicationLaunchVersion(unknown<8>)
[39] CheckApplicationLaunchRights(unknown<8>)
[40] GetApplicationLogoData(unknown<8>, buffer<unknown, 0x15>) -> (unknown<8>, buffer<unknown, 6>)
[41] CalculateApplicationDownloadRequiredSize(unknown<8>) -> unknown<0x10>
[42] CleanupSdCard()
[43] CheckSdCardMountStatus()
[44] GetSdCardMountStatusChangedEvent() -> handle<copy>
[45] GetGameCardAttachmentEvent() -> handle<copy>
[46] GetGameCardAttachmentInfo() -> unknown<0x10>
[47] GetTotalSpaceSize(unknown<1>) -> unknown<8>
Takes an input media-id that must be 5.
Returns the u64 from Content_Manager_services#IContentStorage cmd22.
[48] GetFreeSpaceSize(unknown<1>) -> unknown<8>
Takes an input media-id that must be 5.
Returns the u64 from Content_Manager_services#IContentStorage cmd23.
[49] GetSdCardRemovedEvent() -> handle<copy>
[52] GetGameCardUpdateDetectionEvent() -> handle<copy>
[53] DisableApplicationAutoDelete(unknown<8>)
[54] EnableApplicationAutoDelete(unknown<8>)
[55] GetApplicationDesiredLanguage(unknown<4>) -> unknown<1>
[56] SetApplicationTerminateResult(unknown<0x10>)
[57] ClearApplicationTerminateResult(unknown<8>)
[58] GetLastSdCardMountUnexpectedResult()
[59] ConvertApplicationLanguageToLanguageCode(unknown<1>) -> unknown<8>
[60] ConvertLanguageCodeToApplicationLanguage(unknown<8>) -> unknown<1>
Takes an input u8 pointer for the resulting Id to be written to and a string represented as a u64 (i.e 0x53552D6E65 for 'en-US').
Returns 0 if an ID was successfully found, otherwise returns 0x25810.
[61] GetBackgroundDownloadStressTaskInfo() -> unknown<0x10>
[62] GetGameCardStopper() -> object<nn::ns::detail::IGameCardStopper>
[63] IsSystemProgramInstalled(unknown<8>) -> unknown<1>
[64] StartApplyDeltaTask(unknown<8>)
[65] GetRequestServerStopper() -> object<nn::ns::detail::IRequestServerStopper>
[66] GetBackgroundApplyDeltaStressTaskInfo() -> unknown<0x10>
[67] CancelApplicationApplyDelta(unknown<8>)
[68] ResumeApplicationApplyDelta(unknown<8>)
[69] CalculateApplicationApplyDeltaRequiredSize(unknown<8>) -> unknown<0x10>
[70] ResumeAll()
[71] GetStorageSize(unknown<1>) -> unknown<0x10>
[80] RequestDownloadApplication(unknown<0x10>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[81] RequestDownloadAddOnContent(unknown<0x10>, buffer<unknown, 5>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[82] DownloadApplication(unknown<0x10>)
[83] CheckApplicationResumeRights(unknown<8>)
[84] GetDynamicCommitEvent() -> handle<copy>
[85] RequestUpdateApplication2(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[86] EnableApplicationCrashReport(unknown<1>)
[87] IsApplicationCrashReportEnabled() -> unknown<1>
[90] BoostSystemMemoryResourceLimit(unknown<8>)
[91, 5.0.0+] Unknown91(unknown) -> unknown
[92, 5.0.0+] Unknown92(unknown) -> unknown
[93, 5.0.0+] Unknown93(unknown) -> unknown
[94, 6.0.0+] LaunchApplication2(unknown) -> unknown
[95, 6.0.0+] Unknown95(unknown) -> unknown
[96, 6.0.0+] Unknown96(unknown) -> unknown
[97, 6.0.0+] Unknown97(unknown) -> unknown
[98, 6.0.0+] Unknown98(unknown) -> unknown
[100] ResetToFactorySettings()
[101] ResetToFactorySettingsWithoutUserSaveData()
[102] ResetToFactorySettingsForRefurbishment()
[200] CalculateUserSaveDataStatistics(unknown<0x10>) -> unknown<0x10>
[201] DeleteUserSaveDataAll(unknown<0x10>) -> object<nn::ns::detail::IProgressMonitorForDeleteUserSaveDataAll>
[210] DeleteUserSystemSaveData(unknown<0x18>)
[211, 6.0.0+] Unknown211(unknown) -> unknown
[220] UnregisterNetworkServiceAccount(unknown<0x10>)
[221, 6.0.0+] Unknown221(unknown) -> unknown
[300] GetApplicationShellEvent() -> handle<copy>
[301] PopApplicationShellEventInfo() -> (unknown<4>, buffer<unknown, 6>)
[302] LaunchLibraryApplet(unknown<8>) -> unknown<8>
[303] TerminateLibraryApplet(unknown<8>)
[304] LaunchSystemApplet() -> unknown<8>
[305] TerminateSystemApplet(unknown<8>)
[306] LaunchOverlayApplet() -> unknown<8>
[307] TerminateOverlayApplet(unknown<8>)
[400] GetApplicationControlData(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[401] InvalidateAllApplicationControlCache()
[402] RequestDownloadApplicationControlData(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[403] GetMaxApplicationControlCacheCount() -> unknown<4>
[404] InvalidateApplicationControlCache(unknown<8>)
[405] ListApplicationControlCacheEntryInfo() -> (unknown<4>, buffer<unknown, 6>)
[406, 6.0.0+] Unknown406(unknown) -> unknown
[502] RequestCheckGameCardRegistration(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[503] RequestGameCardRegistrationGoldPoint(unknown<0x18>) -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[504] RequestRegisterGameCard(unknown<0x20>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[505] GetGameCardMountFailureEvent() -> handle<copy>
[506] IsGameCardInserted() -> unknown<1>
[507] EnsureGameCardAccess()
[508] GetLastGameCardMountFailureResult()
[509] ListApplicationIdOnGameCard(unknown) -> unknown
[600] CountApplicationContentMeta(unknown<8>) -> unknown<4>
[601] ListApplicationContentMetaStatus(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
Returns 0x10-byte entries using the specified titleID starting at the specified u32 entryindex. Can only return game titles. The second entry if any is the update-title usually. When the input entryindex is >= totalentries, this will return 0 with out_entrycount=0.
Entry structure:
| Offset | Size | Description | | ------ | ---- | ------------------------------------------------------------------------------------------------------------------------------------- | | 0x0 | 0x1 | u8 "type". Title type (String is from web-applet) | | 0x1 | 0x1 | u8 "installedStorage" / StorageId (String is from web-applet) | | 0x2 | 0x1 | Unknown. Non-zero with output from cmd 605, differs for app/update titles. | | 0x3 | 0x1 | Padding | | 0x4 | 0x4 | u32 Title-version | | 0x8 | 0x8 | u64 titleID |
[602, 2.0.0-5.1.0] ListAvailableAddOnContent(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[603] GetOwnedApplicationContentMetaStatus(unknown<0x10>) -> unknown<0x10>
[604] RegisterContentsExternalKey(unknown<0x10>)
[605] ListApplicationContentMetaStatusWithRightsCheck(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[606] GetContentMetaStorage(unknown<0x10>) -> unknown<1>
[607, 6.0.0+] Unknown607(unknown) -> unknown
[700] PushDownloadTaskList(buffer<unknown, 5>)
[701] ClearTaskStatusList()
[702] RequestDownloadTaskList()
[703] RequestEnsureDownloadTask() -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[704] ListDownloadTaskStatus() -> (unknown<4>, buffer<unknown, 6>)
[705] RequestDownloadTaskListData() -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[800] RequestVersionList()
[801] ListVersionList() -> (unknown<4>, buffer<unknown, 6>)
[802] RequestVersionListData() -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[900] GetApplicationRecord(unknown<8>) -> unknown<0x18>
[901] GetApplicationRecordProperty(unknown<8>) -> buffer<unknown, 0x16>
[902] EnableApplicationAutoUpdate(unknown<8>)
[903] DisableApplicationAutoUpdate(unknown<8>)
[904] TouchApplication(unknown<8>)
[905] RequestApplicationUpdate(unknown<0x10>)
[906] IsApplicationUpdateRequested(unknown<8>) -> unknown<8>
[907] WithdrawApplicationUpdateRequest(unknown<8>)
[908] ListApplicationRecordInstalledContentMeta(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[909] WithdrawCleanupAddOnContentsWithNoRightsRecommendation(unknown<8>)
[910, 6.0.0+] Unknown910(unknown) -> unknown
[911, 6.0.0+] Unknown911(unknown) -> unknown
[912, 6.0.0+] Unknown912(unknown) -> unknown
[1000] RequestVerifyApplicationDeprecated(unknown<0x10>, handle<copy>) -> (handle<copy>, object<nn::ns::detail::IProgressAsyncResult>)
[1001] CorruptApplicationForDebug(unknown<0x10>)
[1002] RequestVerifyAddOnContentsRights(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IProgressAsyncResult>)
[1003] RequestVerifyApplication(unknown) -> unknown
[1004] CorruptContentForDebug(unknown) -> unknown
[1200] NeedsUpdateVulnerability() -> unknown<1>
[1300] IsAnyApplicationEntityInstalled(unknown<8>) -> unknown<1>
[1301] DeleteApplicationContentEntities(unknown<0x10>)
[1302] CleanupUnrecordedApplicationEntity(unknown<8>)
[1303] CleanupAddOnContentsWithNoRights(unknown<8>)
[1304] DeleteApplicationContentEntity(unknown<0x10>)
[1308, 6.0.0+] Unknown1308(unknown) -> unknown
[1309, 6.0.0+] Unknown1309(unknown) -> unknown
[1400] PrepareShutdown()
[1500] FormatSdCard()
[1501] NeedsSystemUpdateToFormatSdCard() -> unknown<1>
[1502] GetLastSdCardFormatUnexpectedResult()
[1504] InsertSdCard()
[1505] RemoveSdCard()
[1600] GetSystemSeedForPseudoDeviceId() -> unknown<0x20>
[1601] ResetSystemSeedForPseudoDeviceId()
[1700] ListApplicationDownloadingContentMeta(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[1701] GetApplicationView(buffer<unknown, 5>) -> buffer<unknown, 6>
[1702] GetApplicationDownloadTaskStatus(unknown<8>) -> unknown<1>
[1703] GetApplicationViewDownloadErrorContext(unknown<8>) -> buffer<unknown, 0x16>
[1800] IsNotificationSetupCompleted() -> unknown<1>
[1801] GetLastNotificationInfoCount() -> unknown<8>
[1802] ListLastNotificationInfo() -> (unknown<4>, buffer<unknown, 6>)
[1803] ListNotificationTask() -> (unknown<4>, buffer<unknown, 6>)
[1900] IsActiveAccount(unknown<4>) -> unknown<1>
[1901] RequestDownloadApplicationPrepurchasedRights(unknown<8>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[1902] GetApplicationTicketInfo(unknown) -> unknown
[2000] GetSystemDeliveryInfo() -> buffer<unknown, 0x16>
[2001] SelectLatestSystemDeliveryInfo(buffer<unknown, 0x15>, buffer<unknown, 5>, buffer<unknown, 5>) -> unknown<4>
[2002] VerifyDeliveryProtocolVersion(buffer<unknown, 0x15>)
[2003] GetApplicationDeliveryInfo(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[2004] HasAllContentsToDeliver(buffer<unknown, 5>) -> unknown<1>
[2005] CompareApplicationDeliveryInfo(buffer<unknown, 5>, buffer<unknown, 5>) -> unknown<4>
[2006] CanDeliverApplication(buffer<unknown, 5>, buffer<unknown, 5>) -> unknown<1>
[2007] ListContentMetaKeyToDeliverApplication(unknown<4>, buffer<unknown, 5>) -> (unknown<4>, buffer<unknown, 6>)
[2008] NeedsSystemUpdateToDeliverApplication(buffer<unknown, 0x15>, buffer<unknown, 5>) -> unknown<1>
[2009] EstimateRequiredSize(buffer<unknown, 5>) -> unknown<8>
[2010] RequestReceiveApplication(unknown<0x10>, buffer<unknown, 5>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[2011] CommitReceiveApplication(unknown<8>)
[2012] GetReceiveApplicationProgress(unknown<8>) -> unknown<0x10>
[2013] RequestSendApplication(unknown<0x10>, buffer<unknown, 5>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[2014] GetSendApplicationProgress(unknown<8>) -> unknown<0x10>
[2015] CompareSystemDeliveryInfo(buffer<unknown, 0x15>, buffer<unknown, 0x15>) -> unknown<4>
[2016] ListNotCommittedContentMeta(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[2017] CreateDownloadTask(unknown<8>, buffer<unknown, 5>)
[2018, 6.0.0+] Unknown2018(unknown) -> unknown
[2050, 6.0.0+] Unknown2050(unknown) -> unknown
[2100, 6.0.0+] Unknown2100(unknown) -> unknown
[2101, 6.0.0+] Unknown2101(unknown) -> unknown
[2150, 6.0.0+] Unknown2150(unknown) -> unknown
[2151, 6.0.0+] Unknown2151(unknown) -> unknown
[2152, 6.0.0+] Unknown2152(unknown) -> unknown
[2153, 6.0.0+] Unknown2153(unknown) -> unknown
[2154, 6.0.0+] Unknown2154(unknown) -> unknown
[2160, 6.0.0+] Unknown2160(unknown) -> unknown
[2161, 6.0.0+] Unknown2161(unknown) -> unknown
[2170, 6.0.0+] Unknown2170(unknown) -> unknown
[2171, 6.0.0+] Unknown2171(unknown) -> unknown
[2180, 6.0.0+] Unknown2180(unknown) -> unknown
[2181, 6.0.0+] Unknown2181(unknown) -> unknown
[2182, 6.0.0+] Unknown2182(unknown) -> unknown
[2190, 6.0.0+] Unknown2190(unknown) -> unknown
[2199, 6.0.0+] Unknown2199(unknown) -> unknown
[2200, 6.0.0+] Unknown2200(unknown) -> unknown
[2201, 6.0.0+] Unknown2201(unknown) -> unknown
[2250, 6.0.0+] Unknown2250(unknown) -> unknown
[2300, 6.0.0+] Unknown2300(unknown) -> unknown
[0] Unknown0(unknown<8>) -> unknown<4>
[1] Unknown1(unknown<0x10>)
[35] Unknown35(buffer<unknown, 5>)
[36] Unknown36(unknown<0x10>)
[37] Unknown37() -> (unknown<4>, buffer<unknown, 6>)
[800] Unknown800()
[801] Unknown801() -> (unknown<4>, buffer<unknown, 6>)
[802] Unknown802() -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[1000] Unknown1000()
[11] CalculateApplicationOccupiedSize(unknown<8>) -> unknown<0x80>
[43] CheckSdCardMountStatus()
[47] GetTotalSpaceSize(unknown<1>) -> unknown<8>
[48] GetFreeSpaceSize(unknown<1>) -> unknown<8>
[600] CountApplicationContentMeta(unknown<8>) -> unknown<4>
[601] ListApplicationContentMetaStatus(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[605] ListApplicationContentMetaStatusWithRightsCheck(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[607] IsAnyApplicationRunning() -> unknown<1>
[0] LaunchProgram(unknown<0x18>) -> unknown<8>
Wrapper for "pm:shell" LaunchProcess.
[1] TerminateProcess(unknown<8>)
Wrapper for "pm:shell" TerminateTitleByPid.
[2] TerminateProgram(unknown<8>)
Wrapper for "pm:shell" TerminateTitleByTitleId.
[4] GetShellEventHandle() -> handle<copy>
Wrapper for "pm:shell" GetProcessEventWaiter.
[5] GetShellEventInfo() -> unknown<0x10>
Wrapper for "pm:shell" GetProcessEventType.
[6] TerminateApplication()
Calls "pm:shell" GetCrashingProcessPid and sends PID to TerminateTitleByPid.
[7] PrepareLaunchProgramFromHost(buffer<unknown, 5>) -> unknown<0x10>
Takes a type-0x5 input buffer containing the ContentPath, returns an output 0x10-byte struct.
Calls IPathResolverForStorage Set...NcaPath functions.
[8] LaunchApplication(unknown<0x10>) -> unknown<8>
Takes an input u64 titleID, returns an output u64 PID.
Launches an application title which is registered with NS.
[9] LaunchApplicationWithStorageId(unknown<0x10>) -> unknown<8>
Takes 2 input u8s, an u32 launch_flags, and an u64 titleID. Returns an output u64 PID.
Launches an application title which is registered with NS.
[21] GetApplicationContentPath(unknown<0x10>) -> buffer<unknown, 0x16>
[23] ResolveApplicationContentPath(unknown<0x10>)
[701] ClearTaskStatusList()
[702] RequestDownloadTaskList()
[703] RequestEnsureDownloadTask() -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[704] ListDownloadTaskStatus() -> (unknown<4>, buffer<unknown, 6>)
[705] RequestDownloadTaskListData() -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[706] TryCommitCurrentApplicationDownloadTask()
[707] EnableAutoCommit()
[708] DisableAutoCommit()
[709] TriggerDynamicCommitEvent()
[0] Unknown0(unknown<0x10>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[100] ResetToFactorySettings()
[101] ResetToFactorySettingsWithoutUserSaveData()
[102] ResetToFactorySettingsForRefurbishment()
[7992] GetECommerceInterface() -> object<nn::ns::detail::IECommerceInterface>
[7993] GetApplicationVersionInterface() -> object<nn::ns::detail::IApplicationVersionInterface>
[7994] GetFactoryResetInterface() -> object<nn::ns::detail::IFactoryResetInterface>
[7995] GetAccountProxyInterface() -> object<nn::ns::detail::IAccountProxyInterface>
[7996] GetApplicationManagerInterface() -> object<nn::ns::detail::IApplicationManagerInterface>
[7997] GetDownloadTaskInterface() -> object<nn::ns::detail::IDownloadTaskInterface>
[7998] GetContentManagementInterface() -> object<nn::ns::detail::IContentManagementInterface>
[7999] GetDocumentInterface() -> object<nn::ns::detail::IDocumentInterface>
[0] Unknown0() -> unknown<1>
[1] Unknown1() -> (handle<copy>, object<nn::ns::detail::IAsyncValue>)
[2] Unknown2() -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[3] Unknown3() -> unknown<0x10>
[4] Unknown4()
[5] Unknown5() -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[6] Unknown6() -> unknown<0x10>
[7] Unknown7() -> unknown<1>
[8] Unknown8()
[9] Unknown9(buffer<unknown, 0x15>) -> unknown<8>
[10] Unknown10(buffer<unknown, 0x15>) -> (unknown<8>, buffer<unknown, 6>)
[11] Unknown11(unknown<8>, handle<copy>)
[12] Unknown12(buffer<unknown, 0x15>) -> unknown<8>
[13] Unknown13(buffer<unknown, 0x15>) -> (unknown<8>, buffer<unknown, 6>)
[14, 4.0.0+] Unknown14(unknown<8>, handle<copy>)
[15, 4.0.0+] Unknown15() -> unknown<1>
[16, 4.0.0+] Unknown16(unknown<8>, buffer<unknown, 0x15>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[17, 4.0.0+] Unknown17() -> unknown<0x10>
[18, 4.0.0+] Unknown18()
[19, 4.0.0+] Unknown19(buffer<unknown, 0x15>) -> unknown<8>
[20, 4.0.0+] Unknown20(buffer<unknown, 0x15>) -> (unknown<8>, buffer<unknown, 6>)
[21, 4.0.0+] Unknown21()
[0] GetBackgroundNetworkUpdateState() -> unknown<1>
[1] OpenSystemUpdateControl() -> object<nn::ns::detail::ISystemUpdateControl>
[2] NotifyExFatDriverRequired()
[3] ClearExFatDriverStatusForDebug()
[4] RequestBackgroundNetworkUpdate()
[5] NotifyBackgroundNetworkUpdate(unknown<0x10>)
[6] NotifyExFatDriverDownloadedForDebug()
[9] GetSystemUpdateNotificationEventForContentDelivery() -> handle<copy>
[10] NotifySystemUpdateForContentDelivery()
[11] PrepareShutdown()
[16] DestroySystemUpdateTask()
[17] RequestSendSystemUpdate(unknown<8>, buffer<unknown, 0x15>) -> (handle<copy>, object<nn::ns::detail::IAsyncResult>)
[18] GetSendSystemUpdateProgress() -> unknown<0x10>
[1200, 3.0.0+] NeedsUpdateVulnerability() -> unknown<1>
[1201, 4.0.0+] UpdateSafeSystemVersionForDebug(unknown<0x10>)
[1202, 4.0.0+] GetSafeSystemVersion() -> unknown<0x10>
[10] GetSettingName() -> buffer<unknown<0x100>, 0x16>
[11] GetEnvironmentIdentifier() -> buffer<unknown<8>, 0x16>
Takes a type-0x16 buffer with size 8. Returns a string.
The output string is used by NIM for the "eid:%s" in the User-Agent strings.
This is the "lp1" string also used in domains.
[12] GetDeviceId() -> bytes<0x10, 1>
[13] DeleteSettings(u32)
[14] ImportSettings(u32, buffer<unknown, 5>) -> buffer<unknown, 6>
[20] Resolve(buffer<unknown<0x100>, 0x15>) -> buffer<unknown<0x100>, 0x16>
[21] ResolveEx(buffer<unknown<0x100>, 0x15>) -> (u32, buffer<unknown<0x100>, 0x16>)
[30] GetNasServiceSetting(buffer<unknown<0x10>, 0x15>) -> buffer<unknown<0x108>, 0x16>
[31] GetNasServiceSettingEx(buffer<unknown<0x10>, 0x15>) -> (u32, buffer<unknown<0x108>, 0x16>)
[40] GetNasRequestFqdn() -> buffer<unknown<0x100>, 0x16>
[41] GetNasRequestFqdnEx() -> (u32, buffer<unknown<0x100>, 0x16>)
[42] GetNasApiFqdn() -> buffer<unknown<0x100>, 0x16>
[43] GetNasApiFqdnEx() -> (u32, buffer<unknown<0x100>, 0x16>)
[50] GetCurrentSetting() -> buffer<unknown<0x12bf0>, 0x16>
[60] ReadSaveDataFromFsForTest() -> buffer<unknown<0x12bf0>, 0x16>
Requires the nsd!test_mode
setting to be equal to 1.
Mounts the system save data for bsdsockets as nsdsave
and reads from
nsd:/file
to the specified buffer, at the specified size and offset
with no checks whatsoever. nsdsave
is then unmounted.
[61] WriteSaveDataToFsForTest(buffer<unknown<0x12bf0>, 0x15>)
Requires the nsd!test_mode
setting to be equal to 1.
Mounts the system save data for bsdsockets as nsdsave
and writes to
nsd:/file
(appending is allowed) using the specified buffer, at the
specified size and offset, with no checks whatsoever. nsdsave
is then
commited and unmounted.
[62] DeleteSaveDataOfFsForTest()
Requires the nsd!test_mode
setting to be equal to 1.
Deletes the system save data for bsdsockets.
[0] StartTask()
[1] GetFinishNotificationEvent() -> handle<copy>
[2] GetResult()
[3] Cancel()
[4] IsProcessing() -> u8
[5] GetServerTime() -> u64
[0] OpenEnsureNetworkClockAvailabilityService(u32, u32) -> object<nn::ntc::detail::service::IEnsureNetworkClockAvailabilityService>
[100] SuspendAutonomicTimeCorrection()
[101] ResumeAutonomicTimeCorrection()
[0] GetOperationMode() -> unknown<1>
[1] GetOperationModeChangeEvent() -> handle<copy>
[2] EnableAudioVisual()
[3] DisableAudioVisual()
[4] EnterSleepAndWait(handle<copy>)
[5] GetCradleStatus() -> unknown<1>
[6] FadeInDisplay()
[7] FadeOutDisplay()
[8, 2.0.0+] Unknown8() -> unknown<0x10>
[9, 2.0.0+] Unknown9()
[10, 3.0.0+] Unknown10(unknown<1>)
[11, 3.0.0+] Unknown11() -> unknown<8>
[12, 3.0.0+] Unknown12() -> handle<copy>
[13, 3.0.0+] Unknown13()
[14, 3.0.0+] Unknown14() -> unknown<1>
[15, 4.0.0+] Unknown15()
[16, 4.0.0+] Unknown16()
[17, 4.0.0+] Unknown17()
[18, 4.0.0+] Unknown18()
[19, 4.0.0+] Unknown19() -> handle<copy>
[20, 4.0.0+] Unknown20() -> unknown<1>
[21, 4.0.0+] Unknown21(unknown<1>)
[22, 4.0.0+] Unknown22() -> handle<copy>
[23, 4.0.0+] Unknown23() -> unknown<1>
[0] Unknown0() -> object<nn::ovln::IReceiver>
[0] Unknown0(unknown<0x18>) -> object<nn::ovln::ISender>
[0] RegisterClassDriver(unknown<0x18>, handle<copy>) -> (handle<copy>, object<nn::pcie::detail::ISession>)
Takes the current process handle (0xFFFF8001).
Returns an event handle and session handle to a #ISession.
[1] QueryFunctionsUnregistered() -> (unknown<4>, buffer<unknown, 6>)
Takes a type-6 buffer.
Returns a list of connected PCIe endpoint devices.
[0] QueryFunctions() -> (unknown<4>, buffer<unknown, 6>)
[1] AcquireFunction(unknown<4>) -> handle<copy>
[2] ReleaseFunction(unknown<4>)
[3] GetFunctionState(unknown<4>) -> buffer<unknown, 6>
[4] GetBarProfile(unknown<8>) -> unknown<0x18>
[5] ReadConfig(unknown<0xc>) -> unknown<4>
[6] WriteConfig(unknown<0x10>)
[7] ReadBarRegion(unknown<0x10>) -> buffer<unknown, 6>
[8] WriteBarRegion(unknown<0x10>, buffer<unknown, 5>)
[9] FindCapability(unknown<8>) -> unknown<4>
[10] FindExtendedCapability(unknown<8>) -> unknown<4>
[11] MapDma(unknown<0x18>) -> unknown<8>
[12] UnmapDma(unknown<0x10>)
[13] UnmapDmaBusAddress(unknown<0x10>)
[14] GetDmaBusAddress(unknown<0x10>) -> unknown<8>
[15] GetDmaBusAddressRange(unknown<4>) -> unknown<0x10>
[16] SetDmaEnable(unknown<8>)
[17] AcquireIrq(unknown<8>) -> handle<copy>
[18] ReleaseIrq(unknown<4>)
[19] SetIrqEnable(unknown<0xc>)
[20] SetAspmEnable(unknown<8>)
[1, 4.0.0+] Initialize()
[1001] CheckFreeCommunicationPermission()
[1002] ConfirmLaunchApplicationPermission(b8, nn::ncm::ApplicationId, buffer<i8, 9>)
[1003] ConfirmResumeApplicationPermission(b8, nn::ncm::ApplicationId, buffer<i8, 9>)
[1004] ConfirmSnsPostPermission()
[1005] ConfirmSystemSettingsPermission()
[1006] IsRestrictionTemporaryUnlocked() -> b8
[1007] RevertRestrictionTemporaryUnlocked()
[1008] EnterRestrictedSystemSettings()
[1009] LeaveRestrictedSystemSettings()
[1010] IsRestrictedSystemSettingsEntered() -> b8
[1011] RevertRestrictedSystemSettingsEntered()
[1012] GetRestrictedFeatures() -> u32
[1013, 4.0.0+] ConfirmStereoVisionPermission()
[1014, 5.0.0+] ConfirmPlayableApplicationVideoOld(unknown) -> unknown
[1015, 5.0.0+] ConfirmPlayableApplicationVideo(unknown) -> unknown
[1031] IsRestrictionEnabled() -> b8
[1032] GetSafetyLevel() -> u32
[1033] SetSafetyLevel(u32)
[1034] GetSafetyLevelSettings(u32) -> nn::pctl::RestrictionSettings
[1035] GetCurrentSettings() -> nn::pctl::RestrictionSettings
[1036] SetCustomSafetyLevelSettings(nn::pctl::RestrictionSettings)
[1037] GetDefaultRatingOrganization() -> u32
[1038] SetDefaultRatingOrganization(u32)
[1039] GetFreeCommunicationApplicationListCount() -> u32
[1042] AddToFreeCommunicationApplicationList(nn::ncm::ApplicationId)
[1043] DeleteSettings()
[1044] GetFreeCommunicationApplicationList(u32) -> (u32, buffer<nn::pctl::FreeCommunicationApplicationInfo, 6>)
[1045] UpdateFreeCommunicationApplicationList(buffer<nn::pctl::FreeCommunicationApplicationInfo, 5>)
[1046] DisableFeaturesForReset()
[1047] NotifyApplicationDownloadStarted(nn::ncm::ApplicationId)
[1061, 4.0.0+] ConfirmStereoVisionRestrictionConfigurable()
[1062, 4.0.0+] GetStereoVisionRestriction() -> b8
[1063, 4.0.0+] SetStereoVisionRestriction(b8)
[1064, 5.0.0+] ResetConfirmedStereoVisionPermission(unknown) -> unknown
[1065, 5.0.0+] IsStereoVisionPermitted(unknown) -> unknown
[1201] UnlockRestrictionTemporarily(buffer<u8, 9>)
[1202] UnlockSystemSettingsRestriction(buffer<u8, 9>)
[1203] SetPinCode(buffer<u8, 9>)
[1204] GenerateInquiryCode() -> nn::pctl::InquiryCode
[1205] CheckMasterKey(nn::pctl::InquiryCode, buffer<u8, 9>) -> b8
This cmd takes the 0x20 bytes produced by GenerateInquiryCode, and an 0x20 byte X descriptor containing snprintf("%08llu", master_key), and returns a bool 00 if the master key is not valid, and 01 if it is.
Master Keys are validated as follows on <= 3.0.0: first, svcSleepThread(1000000000LL) is called to introduce a delay to prevent brute force attacks. Then, strlen(master_key) is called -- if this is not 8, 0 is returned. Next, the inquiry code is regenerated and snprintf("%02d%08llu", 10, generated_inquiry_rnd) is compared to the inquiry data passed in as an argument. If this doesn't match, 0 is returned. Then, hmac-sha256(snprintf("%02d%08llu", 10, generated_inquiry_rnd)) is called using hardcoded keydata, and the master key argument is compared to snprintf("%08llu", (hmac_result & 0xFFFFFFFFFFFF) % 100000000). If this matches, 1 is returned, otherwise 0 is returned.
On 3.0.1 this was changed to use different hardcoded keydata, and to pass 11 as the snprintf argument instead of 10.
[1206] GetPinCodeLength() -> u32
[1207] GetPinCodeChangedEvent() -> handle<copy>
[1208, 4.0.0+] GetPinCode() -> (u32, buffer<u8, 0xa>)
[1403] IsPairingActive() -> b8
[1406] GetSettingsLastUpdated() -> nn::time::PosixTime
[1411] GetPairingAccountInfo(nn::pctl::detail::PairingInfoBase) -> nn::pctl::detail::PairingAccountInfoBase
[1421] GetAccountNickname(nn::pctl::detail::PairingAccountInfoBase) -> (u32, buffer<u8, 0xa>)
[1424] GetAccountState(nn::pctl::detail::PairingAccountInfoBase) -> u32
[1432] GetSynchronizationEvent() -> handle<copy>
[1451] StartPlayTimer()
[1452] StopPlayTimer()
[1453] IsPlayTimerEnabled() -> b8
[1454] GetPlayTimerRemainingTime() -> nn::TimeSpanType
[1455] IsRestrictedByPlayTimer() -> b8
[1456] GetPlayTimerSettings() -> nn::pctl::PlayTimerSettings
[1457] GetPlayTimerEventToRequestSuspension() -> handle<copy>
[1458, 4.0.0+] IsPlayTimerAlarmDisabled() -> b8
[1471] NotifyWrongPinCodeInputManyTimes()
[1472] CancelNetworkRequest()
[1473] GetUnlinkedEvent() -> handle<copy>
[1474] ClearUnlinkedEvent()
[1601] DisableAllFeatures() -> b8
[1602] PostEnableAllFeatures() -> b8
[1603] IsAllFeaturesDisabled() -> (b8, b8)
[1901] DeleteFromFreeCommunicationApplicationListForDebug(nn::ncm::ApplicationId)
[1902] ClearFreeCommunicationApplicationListForDebug()
[1903, 5.0.0+] GetExemptApplicationListCountForDebug(unknown) -> unknown
[1904, 5.0.0+] GetExemptApplicationListForDebug(unknown) -> unknown
[1905, 5.0.0+] UpdateExemptApplicationListForDebug(unknown) -> unknown
[1906, 5.0.0+] AddToExemptApplicationListForDebug(unknown) -> unknown
[1907, 5.0.0+] DeleteFromExemptApplicationListForDebug(unknown) -> unknown
[1908, 5.0.0+] ClearExemptApplicationListForDebug(unknown) -> unknown
[1941] DeletePairing()
[1951] SetPlayTimerSettingsForDebug(nn::pctl::PlayTimerSettings)
[1952] GetPlayTimerSpentTimeForTest() -> nn::TimeSpanType
[1953, 4.0.0+] SetPlayTimerAlarmDisabledForDebug(b8)
[2001] RequestPairingAsync(buffer<u8, 9>) -> (nn::pctl::detail::AsyncData, handle<copy>)
[2002] FinishRequestPairing(nn::pctl::detail::AsyncData) -> nn::pctl::detail::PairingInfoBase
[2003] AuthorizePairingAsync(nn::pctl::detail::PairingInfoBase) -> (nn::pctl::detail::AsyncData, handle<copy>)
[2004] FinishAuthorizePairing(nn::pctl::detail::AsyncData) -> nn::pctl::detail::PairingInfoBase
[2005] RetrievePairingInfoAsync() -> (nn::pctl::detail::AsyncData, handle<copy>)
[2006] FinishRetrievePairingInfo(nn::pctl::detail::AsyncData) -> nn::pctl::detail::PairingInfoBase
[2007] UnlinkPairingAsync(b8) -> (nn::pctl::detail::AsyncData, handle<copy>)
[2008] FinishUnlinkPairing(b8, nn::pctl::detail::AsyncData)
[2009] GetAccountMiiImageAsync(nn::pctl::detail::PairingAccountInfoBase) -> (nn::pctl::detail::AsyncData, u32, handle<copy>, buffer<bytes, 6>)
[2010] FinishGetAccountMiiImage(nn::pctl::detail::AsyncData) -> (u32, buffer<bytes, 6>)
[2011] GetAccountMiiImageContentTypeAsync(nn::pctl::detail::PairingAccountInfoBase) -> (nn::pctl::detail::AsyncData, u32, handle<copy>, buffer<u8, 0xa>)
[2012] FinishGetAccountMiiImageContentType(nn::pctl::detail::AsyncData) -> (u32, buffer<u8, 0xa>)
[2013] SynchronizeParentalControlSettingsAsync() -> (nn::pctl::detail::AsyncData, handle<copy>)
[2014] FinishSynchronizeParentalControlSettings(nn::pctl::detail::AsyncData)
[2015] FinishSynchronizeParentalControlSettingsWithLastUpdated(nn::pctl::detail::AsyncData) -> nn::time::PosixTime
[2016, 5.0.0+] RequestUpdateExemptionListAsync(unknown) -> unknown
[0] CreateService(u64, pid) -> object<nn::pctl::detail::ipc::IParentalControlService>
[1, 4.0.0+] CreateServiceWithoutInitialize(u64, pid) -> object<nn::pctl::detail::ipc::IParentalControlService>
[0] ReleaseControl(u32)
[0] SetClockRate(u32, u32)
[0] SetPowerEnabled(b8, u32)
[1] SetClockEnabled(b8, u32)
[2] SetClockRate(u32, u32)
[3] GetClockRate(u32) -> u32
[4] GetState(u32) -> nn::pcv::ModuleState
[5] GetPossibleClockRates(u32, u32) -> (u32, u32, buffer<u32, 0xa>)
[6] SetMinVClockRate(u32, u32)
[7] SetReset(b8, u32)
[8] SetVoltageEnabled(b8, u32)
[9] GetVoltageEnabled(u32) -> b8
[10] GetVoltageRange(u32) -> (u32, u32, u32)
[11] SetVoltageValue(u32, u32)
[12] GetVoltageValue(u32) -> u32
[13] GetTemperatureThresholds(u32) -> (u32, buffer<nn::pcv::TemperatureThreshold, 0xa>)
[14] SetTemperature(u32)
[15] Initialize()
[16] IsInitialized() -> b8
[17] Finalize()
[18] PowerOn(nn::pcv::PowerControlTarget, u32)
[19] PowerOff(nn::pcv::PowerControlTarget)
[20] ChangeVoltage(nn::pcv::PowerControlTarget, u32)
[21] GetPowerClockInfoEvent() -> handle<copy>
[22] GetOscillatorClock() -> u32
[23] GetDvfsTable(u32, u32) -> (u32, buffer<u32, 0xa>, buffer<u32, 0xa>)
[24] GetModuleStateTable(u32) -> (u32, buffer<nn::pcv::ModuleState, 0xa>)
[25] GetPowerDomainStateTable(u32) -> (u32, buffer<nn::pcv::PowerDomainState, 0xa>)
[26] GetFuseInfo(u32) -> (u32, buffer<u32, 0xa>)
[0] Unknown0(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[1] Unknown1() -> (unknown<4>, buffer<unknown, 6>)
[2] Unknown2(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[3] Unknown3(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
[4] Unknown4(unknown<8>) -> unknown<0x28>
[5] Unknown5(unknown<0x18>) -> unknown<0x28>
[6] Unknown6(unknown<0x10>) -> unknown<0x28>
[7] Unknown7(buffer<unknown, 5>) -> (unknown<4>, buffer<unknown, 6>)
[8] Unknown8(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[9] Unknown9() -> unknown<0xc>
[10, 3.0.0+] Unknown10(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[11, 4.0.0+] Unknown11(unknown<0x18>) -> (unknown<4>, buffer<unknown, 6>)
[12, 4.0.0+] Unknown12(unknown<0x10>) -> unknown<0xc>
[0] OpenSession(unknown<4>) -> object<nn::pinmux::ISession>
[0] SetPinAssignment(unknown<4>)
[1] GetPinAssignment() -> unknown<4>
[2] SetPinAssignmentForHardwareTest(unknown<4>)
[0] GetBootMode() -> unknown<4>
[1] SetMaintenanceBoot()
[0, 1.0.0-4.1.0] IsDebugMode(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
Always returns u32 0 on retail.
[2.0.0+] Additional check on input that can return 0xC0F. The meaning is probably useless because function is somewhat nopped on non-dev builds anyway.
[0, 5.0.0+] GetDebugProcesses(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
Returns an array of pids of all processes that have mask 4 set in process flags.
[2.0.0+] Additional check on input that can return 0xC0F. The meaning is probably useless because function is somewhat nopped on non-dev builds anyway.
[1, 5.0.0+] StartDebugProcess() -> (unknown<4>, buffer<unknown, 6>)
Takes a pid. Last process event must be ProcessEvent_Created or ProcessEvent_DebugAttached.
Then it uses svcStartProcess(process_handle, u8, u8, u32) with args coming from ldr:pm GetProgramInfo.
After that, it sets last process state to ProcessEvent_DebugDetached.
[1, 1.0.0-4.1.0] GetDebugProcesses() -> (unknown<4>, buffer<unknown, 6>)
Returns an array of pids of all processes that have mask 4 set in process flags.
[2.0.0+] Additional check on input that can return 0xC0F. The meaning is probably useless because function is somewhat nopped on non-dev builds anyway.
[2, 1.0.0-4.1.0] StartDebugProcess(unknown<8>)
Takes a pid. Last process event must be ProcessEvent_Created or ProcessEvent_DebugAttached.
Then it uses svcStartProcess(process_handle, u8, u8, u32) with args coming from ldr:pm GetProgramInfo.
After that, it sets last process state to ProcessEvent_DebugDetached.
[2, 5.0.0+] GetTitlePid(unknown<8>)
Takes a title-id and returns the pid.
[3, 1.0.0-4.1.0] GetTitlePid(unknown<8>) -> unknown<8>
Takes a title-id and returns the pid.
[3, 5.0.0+] EnableDebugForTitleId(unknown<8>) -> unknown<8>
Takes a title-id of the program to debug. Sets this to a global field.
Next time it gets launched it will be handled differently.
Returns an event handle that is signaled when the requested title is about to be launched.
[4, 1.0.0-4.1.0] EnableDebugForTitleId(unknown<8>) -> handle<copy>
Takes a title-id of the program to debug. Sets this to a global field.
Next time it gets launched it will be handled differently.
Returns an event handle that is signaled when the requested title is about to be launched.
[4, 5.0.0+] GetApplicationPid(unknown<8>) -> handle<copy>
Returns the pid of the application process.
[5, 1.0.0-4.1.0] GetApplicationPid() -> unknown<8>
Returns the pid of the application process.
[5, 5.0.0+] EnableDebugForApplication() -> unknown<8>
Does *not* take a specific title-id as input.
Returns an event handle that is triggered for application titles.
[6, 1.0.0-4.1.0] EnableDebugForApplication() -> handle<copy>
Does *not* take a specific title-id as input.
Returns an event handle that is triggered for application titles.
[6, 6.0.0+] DisableDebug() -> handle<copy>
Takes in a u32 of bitflags.
Disables debugging/clears the globally specified tid if bit 0 is set, disables debugging/clears the next application if bit 1 is set.
[0] GetTitleId(unknown<8>) -> unknown<8>
Takes a pid and returns the title-id associated with the process.
[0] LaunchProcess(unknown<0x18>) -> unknown<8>
Takes launch_flags, title-id, and storageID. See #Process launch.
Returns the u64 title PID.
[1] TerminateProcessByPid(unknown<8>)
[2] TerminateProcessByTitleId(unknown<8>)
[3] GetProcessEventWaiter() -> handle<copy>
[4] GetProcessEventType() -> unknown<0x10>
Returns 1 if flags has mask 2 set.
Returns 2 if flags has mask 1 set and state is 6.
Returns 3 if flags has mask 0x10 set and not 0x20.
Returns 4 if flags has mask 0x30 set.
[2.0.0+] returns 5 if state >= 2 and flags has mask 0x100 set.
Returns 0 if process is not found.
[5, 1.0.0-4.1.0] FinalizeDeadProcess(unknown<8>)
Takes a pid as input. If the process with pid has the state "dead", it unregisters the pid in fsp:pr, sm:m, and ldr:pm.
Then it removes the process from PMs internal linked-list of active processes.
[5.0.0+] This command was removed.
[5, 5.0.0+] NotifyBootFinished(unknown<8>)
This launches the boot2 title.
[4.0.0+] When booting from SafeMode Firmware, instead of boot2, this launches the following titles in order:
[6, 5.0.0+] GetApplicationPid(unknown<8>)
Returns the pid of the application process.
[6, 1.0.0-4.1.0] ClearProcessNotificationFlag(unknown<8>)
Takes a pid as input. Clears 0x10 from process flags.
[5.0.0+] This command was removed.
[7, 1.0.0-4.1.0] NotifyBootFinished()
This launches the boot2 title.
[4.0.0+] When booting from SafeMode Firmware, instead of boot2, this launches the following titles in order:
[7, 5.0.0+] BoostSystemMemoryResourceLimit()
Takes an u64 mem_size as input. If the desired memory size doesn't exceed an internal limit (imposed by PM by looking at the MemoryArrange ConfigItem), PM calls svcSetResourceLimitLimitValue to set the new LimitableResource_Memory value.
This is used directly by ns:am2 BoostSystemMemoryResourceLimit.
[8, 1.0.0-4.1.0] GetApplicationPid() -> unknown<8>
Returns the pid of the application process.
[9, 4.0.0-4.1.0] BoostSystemMemoryResourceLimit(unknown<8>)
Takes an u64 mem_size as input. If the desired memory size doesn't exceed an internal limit (imposed by PM by looking at the MemoryArrange ConfigItem), PM calls svcSetResourceLimitLimitValue to set the new LimitableResource_Memory value.
This is used directly by ns:am2 BoostSystemMemoryResourceLimit.
[10100] SaveReport(u64, pid, buffer<u8, 9>, buffer<bytes, 5>)
[10101] SaveReportWithUser(nn::account::Uid, u64, pid, buffer<u8, 9>, buffer<bytes, 5>)
[10200] RequestImmediateTransmission()
[10300] GetTransmissionStatus() -> u32
[20100] SaveSystemReport(nn::ApplicationId, buffer<u8, 9>, buffer<bytes, 5>)
[20101] SaveSystemReportWithUser(nn::account::Uid, nn::ApplicationId, buffer<u8, 9>, buffer<bytes, 5>)
[20200, 4.0.0+] SetOperationMode(u64)
[30100] ClearStorage()
[40100] IsUserAgreementCheckEnabled() -> b8
[40101] SetUserAgreementCheckEnabled(b8)
[90100] GetStorageUsage() -> (u64, u64)
[90200, 5.0.0+] GetStatistics(unknown) -> unknown
[90201, 5.0.0+] GetThroughputHistory(unknown) -> unknown
[90300, 5.0.0+] GetLastUploadError(unknown) -> unknown
[0] GetSystemEvent(unknown) -> unknown
[1] StartSignalingEvent(unknown) -> unknown
[2] StopSignalingEvent(unknown) -> unknown
[0] Initialize(unknown<4>, buffer<unknown, 5>) -> handle<copy>
[1] GetRequest() -> unknown<8>
[2] Acknowledge()
[3] Unknown3()
[0] GetPmModule() -> object<nn::psc::sf::IPmModule>
[0] GetBatteryChargePercentage() -> unknown<4>
[1] GetChargerType() -> unknown<4>
[2] EnableBatteryCharging()
[3] DisableBatteryCharging()
[4] IsBatteryChargingEnabled() -> unknown<1>
[5] AcquireControllerPowerSupply()
[6] ReleaseControllerPowerSupply()
[7] OpenSession() -> object<nn::psm::IPsmSession>
[8] EnableEnoughPowerChargeEmulation()
[9] DisableEnoughPowerChargeEmulation()
[10] EnableFastBatteryCharging()
[11] DisableFastBatteryCharging()
[12] GetBatteryVoltageState() -> unknown<4>
[13] GetRawBatteryChargePercentage() -> unknown<8>
[14] IsEnoughPowerSupplied() -> unknown<1>
[15] GetBatteryAgePercentage() -> unknown<8>
[16] GetBatteryChargeInfoEvent() -> handle<copy>
[17] GetBatteryChargeInfoFields() -> unknown<0x40>
[0] BindStateChangeEvent() -> handle<copy>
[1] UnbindStateChangeEvent()
[2] SetChargerTypeChangeEventEnabled(unknown<1>)
[3] SetPowerSupplyChangeEventEnabled(unknown<1>)
[4] SetBatteryVoltageStateChangeEventEnabled(unknown<1>)
[0] SetPeriod(u64)
[1] GetPeriod() -> u64
[2] SetDuty(u32)
[3] GetDuty() -> u32
[4] SetEnabled(u8)
[5] GetEnabled() -> u8
[0] OpenSessionForDev(u32) -> object<nn::pwm::IChannelSession>
[1] OpenSession(u32) -> object<nn::pwm::IChannelSession>
[0] Unknown0(unknown<8>) -> (unknown<4>, buffer<unknown, 6>)
[0] OpenSession(unknown<4>) -> object<nn::sasbus::ISession>
[0] GetBluetoothBdAddress() -> nn::settings::factory::BdAddress
[1] GetConfigurationId1() -> nn::settings::factory::ConfigurationId1
[2] GetAccelerometerOffset() -> nn::settings::factory::AccelerometerOffset
[3] GetAccelerometerScale() -> nn::settings::factory::AccelerometerScale
[4] GetGyroscopeOffset() -> nn::settings::factory::GyroscopeOffset
[5] GetGyroscopeScale() -> nn::settings::factory::GyroscopeScale
[6] GetWirelessLanMacAddress() -> nn::settings::factory::MacAddress
[7] GetWirelessLanCountryCodeCount() -> u32
[8] GetWirelessLanCountryCodes() -> (u32, buffer<nn::settings::factory::CountryCode, 0xa>)
[9] GetSerialNumber() -> nn::settings::factory::SerialNumber
[10] SetInitialSystemAppletProgramId(nn::ncm::ProgramId)
[11] SetOverlayDispProgramId(nn::ncm::ProgramId)
[12] GetBatteryLot() -> nn::settings::factory::BatteryLot
[14] GetEciDeviceCertificate() -> buffer<nn::settings::factory::EccB233DeviceCertificate, 0x16>
Takes a type-0x16 output buffer with fixed size 0x180.
Returns the device certificate (ECC signed). This is identical to 3DS DeviceCert/CTCert besides the strings. NIM loads the DeviceId from this.
[15] GetEticketDeviceCertificate() -> buffer<nn::settings::factory::Rsa2048DeviceCertificate, 0x16>
Takes a type-0x16 output buffer with fixed size 0x240.
Returns the ETicket certificate (RSA signed).
[16] GetSslKey() -> buffer<nn::settings::factory::SslKey, 0x16>
[17] GetSslCertificate() -> buffer<nn::settings::factory::SslCertificate, 0x16>
[18] GetGameCardKey() -> buffer<nn::settings::factory::GameCardKey, 0x16>
Takes a type-0x16 output buffer with fixed size 0x134.
Returns the extended GameCard key (0x130 bytes) from CAL0. If the extended key is not programmed then it falls back to the normal GameCard key (0x110 bytes).
[19] GetGameCardCertificate() -> buffer<nn::settings::factory::GameCardCertificate, 0x16>
Takes a type-0x16 output buffer with fixed size 0x404.
Returns a container with the GameCard certificate.
[20] GetEciDeviceKey() -> nn::settings::factory::EccB233DeviceKey
Returns the extended device ECC-B233 key (0x50 bytes) from CAL0. If the extended key is not programmed then it falls back to the normal device ECC-B233 key (0x30 bytes).
[21] GetEticketDeviceKey() -> buffer<nn::settings::factory::Rsa2048DeviceKey, 0x16>
Takes a type-0x16 output buffer with fixed size 0x244.
Returns the extended ETicket RSA-2048 key (0x240 bytes) from CAL0. If the extended key is not programmed then it falls back to the normal ETicket RSA-2048 key (0x220 bytes).
[22] GetSpeakerParameter() -> nn::settings::factory::SpeakerParameter
[23, 4.0.0+] GetLcdVendorId() -> u32
[24, 5.0.0+] GetEciDeviceCertificate2(unknown) -> unknown
[25, 5.0.0+] GetEciDeviceKey2(unknown) -> unknown
[26, 5.0.0+] GetAmiiboKey(unknown) -> unknown
[27, 5.0.0+] GetAmiiboEcqvCertificate(unknown) -> unknown
[28, 5.0.0+] GetAmiiboEcdsaCertificate(unknown) -> unknown
[29, 5.0.0+] GetAmiiboEcqvBlsKey(unknown) -> unknown
[30, 5.0.0+] GetAmiiboEcqvBlsCertificate(unknown) -> unknown
[31, 5.0.0+] GetAmiiboEcqvBlsRootCertificate(unknown) -> unknown
[32, 5.0.0+] GetUnknownId(unknown) -> unknown
[33, 6.0.0+] GetUnknownId2(unknown) -> unknown
[2] SetSettingsItemValue(buffer<nn::settings::SettingsName, 0x19>, buffer<nn::settings::SettingsItemKey, 0x19>, buffer<bytes, 5>)
[3] ResetSettingsItemValue(buffer<nn::settings::SettingsName, 0x19>, buffer<nn::settings::SettingsItemKey, 0x19>)
[4] CreateSettingsItemKeyIterator(buffer<nn::settings::SettingsName, 0x19>) -> object<nn::settings::ISettingsItemKeyIterator>
[10, 4.0.0+] ReadSettings(u32) -> (u64, buffer<bytes, 6>)
[11, 4.0.0+] ResetSettings(u32)
[20, 4.0.0+] SetWebInspectorFlag(b8)
[21, 4.0.0+] SetAllowedSslHosts(buffer<nn::settings::system::AllowedSslHost, 5>)
[22, 4.0.0+] SetHostFsMountPoint(buffer<nn::settings::system::HostFsMountPoint, 0x15>)
[0] GoNext()
[1] GetKeySize() -> u64
[2] GetKey() -> (u64, buffer<bytes, 6>)
[0] GetLanguageCode() -> nn::settings::LanguageCode
[1] GetAvailableLanguageCodes() -> (u32, buffer<nn::settings::LanguageCode, 0xa>)
[2, 4.0.0+] MakeLanguageCode(u32) -> nn::settings::LanguageCode
[3] GetAvailableLanguageCodeCount() -> u32
[4] GetRegionCode() -> u32
[5, 4.0.0+] GetAvailableLanguageCodes2() -> (u32, buffer<nn::settings::LanguageCode, 6>)
[6, 4.0.0+] GetAvailableLanguageCodeCount2() -> u32
[7, 4.0.0+] GetKeyCodeMap() -> buffer<nn::kpr::KeyCodeMap, 0x16>
[8, 5.0.0+] GetQuestFlag(unknown) -> unknown
[0] SetLanguageCode(nn::settings::LanguageCode)
[1] SetNetworkSettings(buffer<nn::settings::system::NetworkSettings, 5>)
[2] GetNetworkSettings() -> (u32, buffer<nn::settings::system::NetworkSettings, 6>)
[3] GetFirmwareVersion() -> buffer<nn::settings::system::FirmwareVersion, 0x1a>
Takes a type-0x1A output buffer. User-processes use hard-coded size 0x100.
If needed, reads the content of the System_Version_Title "/file" into state. This is only done once.
Then the above 0x100-byte data is copied to the output buffer.
[4, 3.0.0+] GetFirmwareVersion2() -> buffer<nn::settings::system::FirmwareVersion, 0x1a>
[5, 5.0.0+] GetFirmwareVersionDigest(unknown) -> unknown
[7] GetLockScreenFlag() -> b8
[8] SetLockScreenFlag(b8)
[9] GetBacklightSettings() -> nn::settings::system::BacklightSettings
[10] SetBacklightSettings(nn::settings::system::BacklightSettings)
[11] SetBluetoothDevicesSettings(buffer<nn::settings::system::BluetoothDevicesSettings, 5>)
[12] GetBluetoothDevicesSettings() -> (u32, buffer<nn::settings::system::BluetoothDevicesSettings, 6>)
[13] GetExternalSteadyClockSourceId() -> nn::util::Uuid
[14] SetExternalSteadyClockSourceId(nn::util::Uuid)
[15] GetUserSystemClockContext() -> nn::time::SystemClockContext
[16] SetUserSystemClockContext(nn::time::SystemClockContext)
[17] GetAccountSettings() -> nn::settings::system::AccountSettings
[18] SetAccountSettings(nn::settings::system::AccountSettings)
[19] GetAudioVolume(u32) -> nn::settings::system::AudioVolume
[20] SetAudioVolume(nn::settings::system::AudioVolume, u32)
[21] GetEulaVersions() -> (u32, buffer<nn::settings::system::EulaVersion, 6>)
[22] SetEulaVersions(buffer<nn::settings::system::EulaVersion, 5>)
[23] GetColorSetId() -> u32
No input, returns an output s32.
This is the current Theme set by System Settings.
[24] SetColorSetId(u32)
Takes an input s32, no output.
[25] GetConsoleInformationUploadFlag() -> b8
[26] SetConsoleInformationUploadFlag(b8)
[27] GetAutomaticApplicationDownloadFlag() -> b8
[28] SetAutomaticApplicationDownloadFlag(b8)
[29] GetNotificationSettings() -> nn::settings::system::NotificationSettings
[30] SetNotificationSettings(nn::settings::system::NotificationSettings)
[31] GetAccountNotificationSettings() -> (u32, buffer<nn::settings::system::AccountNotificationSettings, 6>)
[32] SetAccountNotificationSettings(buffer<nn::settings::system::AccountNotificationSettings, 5>)
[35] GetVibrationMasterVolume() -> f32
[36] SetVibrationMasterVolume(f32)
[37] GetSettingsItemValueSize(buffer<nn::settings::SettingsName, 0x19>, buffer<nn::settings::SettingsItemKey, 0x19>) -> u64
[38] GetSettingsItemValue(buffer<nn::settings::SettingsName, 0x19>, buffer<nn::settings::SettingsItemKey, 0x19>) -> (u64, buffer<bytes, 6>)
Takes two type-0x19 input buffers and a type-0x6 output buffer. Returns an output u64 for the actual size written to the outbuf.
The outbuf_size is compared with the config_size. When config_size is larger than outbuf_size, outbuf_size is used for the memcpy, otherwise config_size is used. Afterwards the size used for the memcpy is written to output(see above).
If loading from main config fails, it will also attempt to load config from various state if the input strings match hard-coded strings.
[39] GetTvSettings() -> nn::settings::system::TvSettings
[40] SetTvSettings(nn::settings::system::TvSettings)
[41] GetEdid() -> buffer<nn::settings::system::Edid, 0x1a>
[42] SetEdid(buffer<nn::settings::system::Edid, 0x19>)
[43] GetAudioOutputMode(u32) -> u32
[44] SetAudioOutputMode(u32, u32)
[45] IsForceMuteOnHeadphoneRemoved() -> b8
[46] SetForceMuteOnHeadphoneRemoved(b8)
[47] GetQuestFlag() -> b8
Gets a flag determining whether the console is a kiosk unit (codenamed "Quest"). Used by qlaunch to determine whether to launch Retail Interactive Display Menu.
[48] SetQuestFlag(b8)
[49] GetDataDeletionSettings() -> nn::settings::system::DataDeletionSettings
[50] SetDataDeletionSettings(nn::settings::system::DataDeletionSettings)
[51] GetInitialSystemAppletProgramId() -> nn::ncm::ProgramId
[52] GetOverlayDispProgramId() -> nn::ncm::ProgramId
[53] GetDeviceTimeZoneLocationName() -> nn::time::LocationName
[54] SetDeviceTimeZoneLocationName(nn::time::LocationName)
[55] GetWirelessCertificationFileSize() -> u64
[56] GetWirelessCertificationFile() -> (u64, buffer<bytes, 6>)
[57] SetRegionCode(u32)
[58] GetNetworkSystemClockContext() -> nn::time::SystemClockContext
[59] SetNetworkSystemClockContext(nn::time::SystemClockContext)
[60] IsUserSystemClockAutomaticCorrectionEnabled() -> b8
[61] SetUserSystemClockAutomaticCorrectionEnabled(b8)
[62] GetDebugModeFlag() -> b8
Returns an output u8.
Loads the 1-byte config for <"settings_debug", "is_debug_mode_enabled">. If that fails, value 0x1 is written to output. This uses the same func as ReadSetting internally.
Returned retval is always 0.
[63] GetPrimaryAlbumStorage() -> u32
[64] SetPrimaryAlbumStorage(u32)
[65] GetUsb30EnableFlag() -> b8
[66] SetUsb30EnableFlag(b8)
[67] GetBatteryLot() -> nn::settings::system::BatteryLot
[68] GetSerialNumber() -> nn::settings::system::SerialNumber
Returns the 0x18-byte SerialNumber string.
[69] GetNfcEnableFlag() -> b8
[70] SetNfcEnableFlag(b8)
[71] GetSleepSettings() -> nn::settings::system::SleepSettings
[72] SetSleepSettings(nn::settings::system::SleepSettings)
[73] GetWirelessLanEnableFlag() -> b8
[74] SetWirelessLanEnableFlag(b8)
[75] GetInitialLaunchSettings() -> nn::settings::system::InitialLaunchSettings
[76] SetInitialLaunchSettings(nn::settings::system::InitialLaunchSettings)
[77] GetDeviceNickName() -> buffer<nn::settings::system::DeviceNickName, 0x16>
[78] SetDeviceNickName(buffer<nn::settings::system::DeviceNickName, 0x15>)
[79] GetProductModel() -> u32
[80] GetLdnChannel() -> u32
[81] SetLdnChannel(u32)
[82] AcquireTelemetryDirtyFlagEventHandle() -> handle<copy>
[83] GetTelemetryDirtyFlags() -> nn::util::BitFlagSet<128, nn::settings::system::TelemetryDirtyFlag>
[84] GetPtmBatteryLot() -> nn::settings::factory::BatteryLot
[85] SetPtmBatteryLot(nn::settings::factory::BatteryLot)
[86] GetPtmFuelGaugeParameter() -> nn::settings::system::PtmFuelGaugeParameter
[87] SetPtmFuelGaugeParameter(nn::settings::system::PtmFuelGaugeParameter)
[88] GetBluetoothEnableFlag() -> b8
[89] SetBluetoothEnableFlag(b8)
[90] GetMiiAuthorId() -> nn::util::Uuid
[91] SetShutdownRtcValue(u64)
[92] GetShutdownRtcValue() -> u64
[93] AcquireFatalDirtyFlagEventHandle() -> handle<copy>
[94] GetFatalDirtyFlags() -> nn::util::BitFlagSet<128, nn::settings::system::FatalDirtyFlag>
[95, 2.0.0+] GetAutoUpdateEnableFlag() -> b8
[96, 2.0.0+] SetAutoUpdateEnableFlag(b8)
[97, 2.0.0+] GetNxControllerSettings() -> (u32, buffer<nn::settings::system::NxControllerSettings, 6>)
[98, 2.0.0+] SetNxControllerSettings(buffer<nn::settings::system::NxControllerSettings, 5>)
[99, 2.0.0+] GetBatteryPercentageFlag() -> b8
[100, 2.0.0+] SetBatteryPercentageFlag(b8)
[101, 2.0.0+] GetExternalRtcResetFlag() -> b8
[102, 2.0.0+] SetExternalRtcResetFlag(b8)
[103, 3.0.0+] GetUsbFullKeyEnableFlag() -> b8
[104, 3.0.0+] SetUsbFullKeyEnableFlag(b8)
[105, 3.0.0+] SetExternalSteadyClockInternalOffset(u64)
[106, 3.0.0+] GetExternalSteadyClockInternalOffset() -> u64
[107, 3.0.0+] GetBacklightSettingsEx() -> nn::settings::system::BacklightSettingsEx
[108, 3.0.0+] SetBacklightSettingsEx(nn::settings::system::BacklightSettingsEx)
[109, 3.0.0+] GetHeadphoneVolumeWarningCount() -> u32
[110, 3.0.0+] SetHeadphoneVolumeWarningCount(u32)
[111, 3.0.0+] GetBluetoothAfhEnableFlag() -> b8
[112, 3.0.0+] SetBluetoothAfhEnableFlag(b8)
[113, 3.0.0+] GetBluetoothBoostEnableFlag() -> b8
[114, 3.0.0+] SetBluetoothBoostEnableFlag(b8)
[115, 3.0.0+] GetInRepairProcessEnableFlag() -> b8
[116, 3.0.0+] SetInRepairProcessEnableFlag(b8)
[117, 3.0.0+] GetHeadphoneVolumeUpdateFlag() -> b8
[118, 3.0.0+] SetHeadphoneVolumeUpdateFlag(b8)
[119, 3.0.0+] NeedsToUpdateHeadphoneVolume(b8) -> (b8, b8, i8)
[120, 3.0.0+] GetPushNotificationActivityModeOnSleep() -> u32
[121, 3.0.0+] SetPushNotificationActivityModeOnSleep(u32)
[122, 4.0.0+] GetServiceDiscoveryControlSettings() -> nn::settings::system::ServiceDiscoveryControlSettings
Returns 0x01 if safemode needs to be launched.
[123, 4.0.0+] SetServiceDiscoveryControlSettings(nn::settings::system::ServiceDiscoveryControlSettings)
[124, 4.0.0+] GetErrorReportSharePermission() -> u32
[125, 4.0.0+] SetErrorReportSharePermission(u32)
[126, 4.0.0+] GetAppletLaunchFlags() -> nn::util::BitFlagSet<32, nn::settings::system::AppletLaunchFlag>
[127, 4.0.0+] SetAppletLaunchFlags(nn::util::BitFlagSet<32, nn::settings::system::AppletLaunchFlag>)
[128, 4.0.0+] GetConsoleSixAxisSensorAccelerationBias() -> nn::settings::system::ConsoleSixAxisSensorAccelerationBias
[129, 4.0.0+] SetConsoleSixAxisSensorAccelerationBias(nn::settings::system::ConsoleSixAxisSensorAccelerationBias)
[130, 4.0.0+] GetConsoleSixAxisSensorAngularVelocityBias() -> nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias
[131, 4.0.0+] SetConsoleSixAxisSensorAngularVelocityBias(nn::settings::system::ConsoleSixAxisSensorAngularVelocityBias)
[132, 4.0.0+] GetConsoleSixAxisSensorAccelerationGain() -> nn::settings::system::ConsoleSixAxisSensorAccelerationGain
[133, 4.0.0+] SetConsoleSixAxisSensorAccelerationGain(nn::settings::system::ConsoleSixAxisSensorAccelerationGain)
[134, 4.0.0+] GetConsoleSixAxisSensorAngularVelocityGain() -> nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain
[135, 4.0.0+] SetConsoleSixAxisSensorAngularVelocityGain(nn::settings::system::ConsoleSixAxisSensorAngularVelocityGain)
[136, 4.0.0+] GetKeyboardLayout() -> u32
[137, 4.0.0+] SetKeyboardLayout(u32)
[138, 4.0.0+] GetWebInspectorFlag() -> b8
[139, 4.0.0+] GetAllowedSslHosts() -> (u32, buffer<nn::settings::system::AllowedSslHost, 6>)
Takes a type-0x6 output buffer, returns an output s32. This buffer contains an array of 0x8-byte "nn::settings::system::AllowedSslHost" entries.
[140, 4.0.0+] GetHostFsMountPoint() -> buffer<nn::settings::system::HostFsMountPoint, 0x16>
[141, 5.0.0+] GetRequiresRunRepairTimeReviser(unknown) -> unknown
[142, 5.0.0+] SetRequiresRunRepairTimeReviser(unknown) -> unknown
[143, 5.0.0+] SetBlePairingSettings(unknown) -> unknown
[144, 5.0.0+] GetBlePairingSettings(unknown) -> unknown
[145, 5.0.0+] GetConsoleSixAxisSensorAngularVelocityTimeBias(unknown) -> unknown
[146, 5.0.0+] SetConsoleSixAxisSensorAngularVelocityTimeBias(unknown) -> unknown
[147, 5.0.0+] GetConsoleSixAxisSensorAngularAcceleration(unknown) -> unknown
[148, 5.0.0+] SetConsoleSixAxisSensorAngularAcceleration(unknown) -> unknown
[149, 5.0.0+] GetRebootlessSystemUpdateVersion(unknown) -> unknown
[0] RegisterProcess(u64, buffer<unknown, 5>, buffer<unknown, 5>)
Takes a pid and two A descriptors with the ACID and ACI0 service lists. That data originates from NPDM.
[1] UnregisterProcess(u64)
Takes a pid.
[0] Initialize(pid, u64 reserved)
Needs to be called before any other command may be used. On version 3.0.0
and lower, if this function is not called, GetService
, RegisterService
and UnregisterService
may be called without restriction, thanks to
sm:h
.
reserved
: Should be set to 0.[1] GetService(ServiceName name) -> handle<move, session>
Returns a handle to the given service. IPC messages may be sent to this
handle through svcSendSyncRequest
.
[2] RegisterService(ServiceName name, u8, u32 maxHandles) -> handle<move, port>
Registers a service with the given name. The user can use
svcAcceptSession
on the returned handle to get a new Session handle, and
use svcReplyAndReceive
on those handles to reply to IPC requests.
[3] UnregisterService(ServiceName name)
Unregisters the given service. Future GetService
call will not return
this service anymore, but existing handles will stay alive.
[0] SetDnsAddressesPrivate(u32, buffer<unknown, 5, 0>)
[1] GetDnsAddressPrivate(u32) -> buffer<unknown, 6, 0>
[2] GetHostByName(u8, u32, u64, pid, buffer<unknown, 5, 0>) -> (u32, u32, u32, buffer<unknown, 6, 0>)
[3] GetHostByAddr(u32, u32, u32, u64, pid, buffer<unknown, 5, 0>) -> (u32, u32, u32, buffer<unknown, 6, 0>)
[4] GetHostStringError(u32) -> buffer<unknown, 6, 0>
[5] GetGaiStringError(u32) -> buffer<unknown, 6, 0>
[6] GetAddrInfo(bool enable_nsd_resolve, u32, u64 pid_placeholder, pid, buffer<i8, 5, 0> host, buffer<i8, 5, 0> service, buffer<packed_addrinfo, 5, 0> hints) -> (i32 ret, u32 bsd_errno, u32 packed_addrinfo_size, buffer<packed_addrinfo, 6, 0> response)
[7] GetNameInfo(u32, u32, u64, pid, buffer<unknown, 5, 0>) -> (u32, u32, buffer<unknown, 6, 0>, buffer<unknown, 6, 0>)
[8] RequestCancelHandle(u64, pid) -> u32
[9] CancelSocketCall(u32, u64, pid)
[0] RegisterClient(nn::socket::BsdBufferConfig config, u64 pid, u64 transferMemorySize, handle<copy, transfer_memory>, pid) -> u32 bsd_errno
[1] StartMonitoring(u64 pid, pid)
[2] Socket(u32 domain, u32 type, u32 protocol) -> (i32 ret, u32 bsd_errno)
Create an endpoint for communication
[3] SocketExempt(u32, u32, u32) -> (i32 ret, u32 bsd_errno)
[4] Open(u32, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno)
[5] Select(u32 nfds, nn::socket::timeout timeout, buffer<nn::socket::fd_set, 0x21> readfds_in, buffer<nn::socket::fd_set, 0x21> writefds_in, buffer<nn::socket::fd_set, 0x21> errorfds_in) -> (i32 ret, u32 bsd_errno, buffer<nn::socket::fd_set, 0x22> readfds_out, buffer<nn::socket::fd_set, 0x22> writefds_out, buffer<nn::socket::fd_set, 0x22> errorfds_out)
Synchronous I/O multiplexing
The select()
function shall examine the file descriptor sets whose
addresses are passed in the readfds
, writefds
, and errorfds
parameters
to see whether some of their descriptors are ready for reading, are
ready for writing, or have an exceptional condition pending,
respectively.
Upon successful completion, the select()
function shall fill the
readfds_out
, writefds_out
and errorfds_out
to indicate which file
descriptors are ready for reading, ready for writing, or have an error
condition pending, respectively, and shall return the total number of
ready descriptors in all the output sets. For each file descriptors less
than nfds
, the corresponding bit shall be set on successful completion
if it was set on input and the associated condition is true for that
descriptor.
If none of the selected descriptors are ready for the requested
operation, the select()
function shall block until at least one of the
requested operations becomes ready or until the timeout occurs. The
timeout parameter controls how long the select()
function shall take
before timing out. It specifies a maximum interval to wait for the
selection to complete. If the specified time interval expires without
any requested operation becoming ready, the function shall return.
nfds
: Specifies the range of descriptors to be tested. The first
nfds
descriptors shall be checked in each set; that is, the
descriptors from zero through nfds-1
in the descriptor sets
shall be examined.readfds_in
: Specifies the file descriptors to be checked for
being ready to read.writefds_in
Specifies the file descriptors to be checked for
being ready to write.errorfds_in
Specifies the file descriptors to be checked for
error conditions pending.[6] Poll(u32, u32, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno, buffer<bytes, 0x22>)
[7] Sysctl(buffer<bytes, 0x21>, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno, u32, buffer<bytes, 0x22>)
[8] Recv(u32 socket, u32 flags) -> (i32 ret, u32 bsd_errno, buffer<bytes, 0x22> message)
[9] RecvFrom(u32 sock, u32 flags) -> (i32 ret, u32 bsd_errno, u32 addrlen, buffer<bytes, 0x22> message, buffer<nn::socket::sockaddr, 0x22>)
[10] Send(u32 socket, u32 flags, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno)
[11] SendTo(u32 socket, u32 flags, buffer<bytes, 0x21>, buffer<nn::socket::sockaddr, 0x21>) -> (i32 ret, u32 bsd_errno)
[12] Accept(u32 socket) -> (i32 ret, u32 bsd_errno, u32 addrlen, buffer<nn::socket::sockaddr, 0x22> addr)
[13] Bind(u32 socket, buffer<nn::socket::sockaddr, 0x21>) -> (i32 ret, u32 bsd_errno)
[14] Connect(u32 socket, buffer<nn::socket::sockaddr, 0x21>) -> (i32 ret, u32 bsd_errno)
[15] GetPeerName(u32 socket) -> (i32 ret, u32 bsd_errno, u32 addrlen, buffer<nn::socket::sockaddr, 0x22> addr)
[16] GetSockName(u32 socket) -> (i32 ret, u32 bsd_errno, u32 addrlen, buffer<nn::socket::sockaddr, 0x22> addr)
[17] GetSockOpt(u32, u32, u32) -> (i32 ret, u32 bsd_errno, u32, buffer<bytes, 0x22>)
[18] Listen(u32 socket, u32 backlog) -> (i32 ret, u32 bsd_errno)
[19] Ioctl(u32, u32, u32, buffer<bytes, 0x21>, buffer<bytes, 0x21>, buffer<bytes, 0x21>, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno, buffer<bytes, 0x22>, buffer<bytes, 0x22>, buffer<bytes, 0x22>, buffer<bytes, 0x22>)
[20] Fcntl(u32, u32, u32) -> (i32 ret, u32 bsd_errno)
[21] SetSockOpt(u32 socket, u32 level, u32 option_name, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno)
[22] Shutdown(u32 socket, u32 how) -> (i32 ret, u32 bsd_errno)
[23] ShutdownAllSockets(u32 how) -> (i32 ret, u32 bsd_errno)
[24] Write(u32 socket, buffer<bytes, 0x21> message) -> (i32 ret, u32 bsd_errno)
[25] Read(u32 socket) -> (i32 ret, u32 bsd_errno, buffer<i8, 0x22, 0> message)
[26] Close(u32 socket) -> (i32 ret, u32 bsd_errno)
[27] DuplicateSocket(u32, u64) -> (i32 ret, u32 bsd_errno)
[28, 1.0.0-3.0.0] GetResourceStatistics(u64, pid) -> (i32 ret, u32 bsd_errno, buffer<nn::socket::ResourceStatistics, 0x22>)
[28, 4.0.0+] GetResourceStatistics(u32, u32, u64, pid) -> (i32 ret, u32 bsd_errno, buffer<nn::socket::ResourceStatistics, 0x22>)
[29, 3.0.0+] RecvMMsg(u32, u32, u32, u128) -> (i32 ret, u32 bsd_errno, buffer<bytes, 0x22>)
[30, 3.0.0+] SendMMsg(u32, u32, u32, buffer<bytes, 0x21>, buffer<bytes, 0x21>) -> (i32 ret, u32 bsd_errno)
[0] Unknown0(unknown<4>) -> unknown<8>
[1] Unknown1(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[2] Unknown2(unknown<0x18>) -> unknown<0x10>
[3] Unknown3(unknown<0x24>)
[4] Unknown4(unknown<0x20>) -> unknown<0x10>
[5] Unknown5(unknown<0x10>)
[7] Unknown7() -> buffer<unknown, 0xa>
[11] Unknown11() -> unknown<1>
[14] Unknown14(unknown<0x18>) -> unknown<0x10>
[15] Unknown15(unknown<0x14>, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
[16] Unknown16(unknown<4>, buffer<unknown, 9>) -> unknown<0x10>
[21] Unknown21() -> unknown<4>
[22] Unknown22(unknown<4>)
[23] Unknown23() -> handle<copy>
[24] Unknown24(unknown<4>)
[25] Unknown25() -> unknown<4>
[0] Unknown0(unknown<4>) -> unknown<8>
[1] Unknown1(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[2] Unknown2(unknown<0x18>) -> unknown<0x10>
[3] Unknown3(unknown<0x24>)
[4] Unknown4(unknown<0x20>) -> unknown<0x10>
[5] Unknown5(unknown<0x10>)
[7] Unknown7() -> buffer<unknown, 0xa>
[11] Unknown11() -> unknown<1>
[13] Unknown13(unknown<0x24>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[14] Unknown14(unknown<0x18>) -> unknown<0x10>
[15] Unknown15(unknown<0x14>, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
[16] Unknown16(unknown<4>, buffer<unknown, 9>) -> unknown<0x10>
[17] Unknown17(unknown<0x24>, buffer<unknown, 9>)
[18] Unknown18(unknown<4>, buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> unknown<0x10>
[20] Unknown20(unknown<0x14>) -> unknown<0x10>
[21] Unknown21() -> unknown<4>
[22] Unknown22(unknown<4>)
[23] Unknown23() -> handle<copy>
[24] Unknown24(unknown<4>)
[25] Unknown25() -> unknown<4>
[0] Unknown0(unknown<4>) -> unknown<8>
[1] Unknown1(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[2] Unknown2(unknown<0x18>) -> unknown<0x10>
[3] Unknown3(unknown<0x24>)
[4] Unknown4(unknown<0x20>) -> unknown<0x10>
[5] Unknown5(unknown<0x10>)
[7] Unknown7() -> buffer<unknown, 0xa>
[9] Unknown9(unknown<0x24>, buffer<unknown, 9>)
[10] Unknown10(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> (unknown<4>, buffer<unknown, 0xa>)
[11] Unknown11() -> unknown<1>
[12] Unknown12(unknown<0x18>) -> unknown<0x10>
[14] Unknown14(unknown<0x18>) -> unknown<0x10>
[15] Unknown15(unknown<0x14>, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
[16] Unknown16(unknown<4>, buffer<unknown, 9>) -> unknown<0x10>
[19] Unknown19(unknown<0x14>)
[21] Unknown21() -> unknown<4>
[22] Unknown22(unknown<4>)
[23] Unknown23() -> handle<copy>
[24] Unknown24(unknown<4>)
[25] Unknown25() -> unknown<4>
[0] GetConfig(unknown<4>) -> unknown<8>
Wrapper for GetConfig SMC.
Takes a u32 (ConfigItem), and returns one or more u64s (ConfigVal).
[1] UserExpMod(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
Wrapper for ExpMod SMC.
Takes one type-10 (C descriptor) buffer (data_out_buf) and 3 type-9 (X descriptor) buffers (data_in_buf, exp_in_buf and mod_in_buf).
Performs asymmetric crypto with user supplied modulus and exponent.
[2] GenerateAesKek(unknown<0x18>) -> unknown<0x10>
Wrapper for GenerateAesKek SMC.
Takes a 16-byte EKS (Encryption Key Source) and two words (KeyGeneration and option) as input.
Returns a scrambled sealed KEK (Key Encryption Key used as key_x).
[3] LoadAesKey(unknown<0x24>)
Wrapper for LoadAesKey SMC.
Takes a u32 (keyslot) and two 16-byte keys (key_x and key_y).
Sets the specified keyslot with a key generated from key_x and key_y.
[2.0.0+] Now verifies that the engine in use (0..3) is locked/owned by the current spl session, otherwise errors with 0xD21A. Previously engine was hardcoded to 0.
[4] GenerateAesKey(unknown<0x20>) -> unknown<0x10>
Takes a 16-byte KEK (key_x) and a 16-byte encrypted key (enc_key).
Generates a new key by decrypting (AES-ECB) enc_key with a key generated from the supplied key_x and a fixed key_y set with LoadAesKey SMC.
[2.0.0+] Previously, it always used engine 0. Now it tries to allocate an engine to be used and returns 0xD01A if they're all busy. When the command is done, the engine is released.
[5] SetConfig(unknown<0x10>)
Wrapper for SetConfig SMC.
Takes a u32 (ConfigItem) and a u64 (ConfigVal).
| ConfigItem | Name | | ---------- | -------------- | | 13 | BatteryProfile |
Any other ConfigItem, besides 13, can't be set.
[7] GetRandomBytes() -> buffer<unknown, 0xa>
Takes a type-6 buffer and fills it with random data from GetRandomBytes SMC. Same command for "spl:" and "csrng" services.
[9] LoadSecureExpModKey(unknown<0x24>, buffer<unknown, 9>)
Wrapper for LoadSecureExpModKey SMC.
Takes one type-9 (X descriptor) buffer (enc_privk_in_buf), a 16-byte KEK (key_x), a 16-byte key (key_y) and a u32 (version). version is 0 for normal keys or 1 for extended keys.
Decrypts enc_privk_in_buf with a key generated from key_x and key_y and imports it for later usage.
[5.0.0+] This now calls EncryptRsaKeyForImport SMC instead.
[10] SecureExpMod(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> (unknown<4>, buffer<unknown, 0xa>)
Takes 3 type-9 (X descriptor) buffers (data_in_buf, mod_in_buf and param0_in_buf).
Uses SecureExpMod SMC to decrypt data_in_buf using the private key imported with #LoadSecureExpModKey and the supplied mod_in_buf and param0_in_buf.
Generates and returns a 16-byte sealed titlekey.
[11] IsDevelopment() -> unknown<1>
No input params.
Uses #GetConfig internally with id=6. Returns true if output from that is 0, or if the SMC returned error 2.
Returns an u8 flag for whether the system is devunit. Output flag is 0 on retail.
[12] GenerateSpecificAesKey(unknown<0x18>) -> unknown<0x10>
Wrapper for GenerateSpecificAesKey SMC.
Takes a 16-byte seed (key_seed) and two words (KeyGeneration and option) as input.
Returns a scrambled key (key_a).
[13] DecryptRsaPrivateKey(unknown<0x24>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
Wrapper for DecryptRsaPrivateKey SMC.
Takes one type-10 (C descriptor) buffer (dec_privk_out_buf), one type-9 (X descriptor) buffer (enc_privk_in_buf), a 16-byte KEK (key_x), a 16-byte key (key_y) and a u32 (version). version is 0 for normal keys or 1 for extended keys.
Decrypts enc_privk_in_buf into dec_privk_out_buf with a key generated from key_x and key_y.
Used by SSL-sysmodule for TLS client-privk.
[5.0.0+] This now calls DecryptOrImportRsaKey SMC instead.
[14] DecryptAesKey(unknown<0x18>) -> unknown<0x10>
Takes a 16-byte encrypted key (enc_key) and two words (KeyGeneration and option) as input.
Decrypts (AES-ECB) enc_key with a key generated from fixed key_x and key_y set with LoadAesKey SMC and returns a 16-byte decrypted key (dec_key).
[2.0.0+] Introduced same engine allocation code as for #GenerateAesKey.
[15] DecryptAesCtr(unknown<0x14>, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
Takes a type-0x46 (B descriptor) buffer (data_out_buf), a u32 (keyslot), a type-0x45 (A descriptor) buffer (data_in_buf) and a 16-byte CTR (aes_ctr).
Uses CryptAes SMC to decrypt data_in_buf into data_out_buf, using the key set in the specified keyslot.
[2.0.0+] Verifies the engine is locked by current session.
[16] ComputeCmac(unknown<4>, buffer<unknown, 9>) -> unknown<0x10>
Wrapper for ComputeCmac SMC.
Takes one type-9 (X descriptor) buffer (data_in_buf) and a u32 (type?).
Returns a 16-byte CMAC calculated over data_in_buf.
[2.0.0+] Verifies the engine is locked by current session.
[17] LoadRsaOaepKey(unknown<0x24>, buffer<unknown, 9>)
Wrapper for LoadRsaOaepKey SMC.
Takes one type-9 (X descriptor) buffer (enc_privk_in_buf), a 16-byte KEK (key_x), a 16-byte key (key_y) and a u32 (version). version is 0 for normal keys or 1 for extended keys.
Decrypts enc_privk_in_buf with a key generated from key_x and key_y and imports it for later usage.
[18] UnwrapRsaOaepWrappedTitleKey(unknown<4>, buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> unknown<0x10>
Wrapper for UnwrapRsaOaepWrappedTitleKey SMC.
Takes one type-10 (C descriptor) buffer (data_out_buf) and 3 type-9 (X descriptor) buffers (data_in_buf, mod_in_buf and label_hash_in_buf).
Decrypts data_in_buf into data_out_buf using the private key imported with #LoadRsaOaepKey and the supplied mod_in_buf. Afterwards, verifies RSA-OAEP encoding using label_hash_in_buf.
Returns an u32 (dec_data_size).
[19] LoadTitleKey(unknown<0x14>)
Wrapper for LoadTitleKey SMC.
Takes a u32 (keyslot) and a 16-byte sealed titlekey.
Sets the specified keyslot with the titlekey.
[2.0.0+] Verifies the engine is locked by current session.
[20, 2.0.0+] UnwrapAesWrappedTitleKey(unknown<0x14>) -> unknown<0x10>
Wrapper for UnwrapAesWrappedTitleKey SMC.
Takes a 16-byte EKS (Encryption Key Source).
Returns a sealed titlekey.
[21, 2.0.0+] LockAesEngine() -> unknown<4>
Returns the id of the engine that was locked, or 0xD01A if all engines are busy. You need to lock an engine before using AES functions.
[22, 2.0.0+] UnlockAesEngine(unknown<4>)
Takes a single u32 and unlocks the engine with that id. It must be owned by current session otherwise 0xD21A will be returned.
[23, 2.0.0+] GetSplWaitEvent() -> handle<copy>
Returns an event handle for synchronizing with the locked AES engine.
[24, 3.0.0+] SetSharedData(unknown<4>)
Sets a static dword in spl .bss to the user input u32.
[4.0.0+] returns 0xD41A if a value has been previously set without being gotten.
[25, 3.0.0+] GetSharedData() -> unknown<4>
Returns the static dword in spl .bss that can be set via #SetSharedData.
[4.0.0+] returns 0xD61A if a value has not previously been set, and unsets the value after getting it.
[26, 5.0.0+] ImportSslRsaKey(unknown) -> unknown
[27, 5.0.0+] SecureExpModWithSslKey(unknown) -> unknown
[28, 5.0.0+] ImportEsRsaKey(unknown) -> unknown
[29, 5.0.0+] SecureExpModWithEsKey(unknown) -> unknown
[30, 5.0.0+] EncryptManuRsaKeyForImport(unknown) -> unknown
[31, 5.0.0+] GetPackage2Hash(unknown) -> unknown
[0] GetRandomBytes() -> buffer<unknown, 6>
Takes a type-6 buffer and fills it with random data from GetRandomBytes SMC. Same command for "spl:" and "csrng" services.
[0] Unknown0(unknown<4>) -> unknown<8>
[1] Unknown1(buffer<unknown, 9>, buffer<unknown, 9>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[2] Unknown2(unknown<0x18>) -> unknown<0x10>
[3] Unknown3(unknown<0x24>)
[4] Unknown4(unknown<0x20>) -> unknown<0x10>
[5] Unknown5(unknown<0x10>)
[7] Unknown7() -> buffer<unknown, 0xa>
[11] Unknown11() -> unknown<1>
[13] Unknown13(unknown<0x24>, buffer<unknown, 9>) -> buffer<unknown, 0xa>
[14] Unknown14(unknown<0x18>) -> unknown<0x10>
[15] Unknown15(unknown<0x14>, buffer<unknown, 0x45>) -> buffer<unknown, 0x46>
[16] Unknown16(unknown<4>, buffer<unknown, 9>) -> unknown<0x10>
[21] Unknown21() -> unknown<4>
[22] Unknown22(unknown<4>)
[23] Unknown23() -> handle<copy>
[24] Unknown24(unknown<4>)
[25] Unknown25() -> unknown<4>
[0] GetState() -> unknown<4>
[1] SleepSystemAndWaitAwake() -> handle<copy>
[2] Unknown2() -> unknown<4>
[3] Unknown3(unknown<1>)
[4] GetNotificationMessageEventHandle() -> handle<copy>
[5] Unknown5() -> unknown<4>
[6] Unknown6() -> unknown<0x50>
[7] Unknown7()
[8] AnalyzePerformanceLogForLastSleepWakeSequence() -> buffer<unknown, 6>
[9] ChangeHomeButtonLongPressingTime(unknown<8>)
[10] Unknown10()
[11, 1.0.0-3.0.2] Unknown11(unknown<8>)
[0] SetSocketDescriptor(u32) -> u32
[1] SetHostName(buffer<bytes, 5>)
[2] SetVerifyOption(nn::ssl::sf::VerifyOption)
[3] SetIoMode(nn::ssl::sf::IoMode)
[4] GetSocketDescriptor() -> u32
[5] GetHostName() -> (u32, buffer<bytes, 6>)
[6] GetVerifyOption() -> nn::ssl::sf::VerifyOption
[7] GetIoMode() -> nn::ssl::sf::IoMode
[8] DoHandshake()
[9] DoHandshakeGetServerCert() -> (u32, u32, buffer<bytes, 6>)
[10] Read() -> (u32, buffer<bytes, 6>)
[11] Write(buffer<bytes, 5>) -> u32
[12] Pending() -> u32
[13] Peek() -> (u32, buffer<bytes, 6>)
[14] Poll(nn::ssl::sf::PollEvent, u32) -> nn::ssl::sf::PollEvent
[15] GetVerifyCertError()
[16] GetNeededServerCertBufferSize() -> u32
[17] SetSessionCacheMode(nn::ssl::sf::SessionCacheMode)
[18] GetSessionCacheMode() -> nn::ssl::sf::SessionCacheMode
[19] FlushSessionCache()
[20] SetRenegotiationMode(nn::ssl::sf::RenegotiationMode)
[21] GetRenegotiationMode() -> nn::ssl::sf::RenegotiationMode
[22] SetOption(b8, nn::ssl::sf::OptionType)
[23] GetOption(nn::ssl::sf::OptionType) -> b8
[24] GetVerifyCertErrors() -> (u32, u32, buffer<bytes, 6>)
[25, 4.0.0+] GetCipherInfo(u32) -> buffer<bytes, 6>
[0] SetOption(nn::ssl::sf::ContextOption, u32)
[1] GetOption(nn::ssl::sf::ContextOption) -> u32
[2] CreateConnection() -> object<nn::ssl::sf::ISslConnection>
[3] GetConnectionCount() -> u32
[4] ImportServerPki(nn::ssl::sf::CertificateFormat, buffer<bytes, 5>) -> u64
[5] ImportClientPki(buffer<bytes, 5>, buffer<bytes, 5>) -> u64
[6] RemoveServerPki(u64)
[7] RemoveClientPki(u64)
[8] RegisterInternalPki(nn::ssl::sf::InternalPki) -> u64
[9] AddPolicyOid(buffer<bytes, 5>)
[10] ImportCrl(buffer<bytes, 5>) -> u64
[11] RemoveCrl(u64)
[0] CreateContext(nn::ssl::sf::SslVersion, u64, pid) -> object<nn::ssl::sf::ISslContext>
[1] GetContextCount() -> u32
[2] GetCertificates(buffer<bytes, 5>) -> (u32, buffer<bytes, 6>)
[3] GetCertificateBufSize(buffer<bytes, 5>) -> u32
[4] DebugIoctl(u64, buffer<bytes, 5>) -> buffer<bytes, 6>
[5] SetInterfaceVersion(u32)
[6, 5.0.0+] FlushSessionCache(unknown) -> unknown
[0] SetOperatingMode(unknown<4>)
[1] GetThermalEvent(unknown<4>) -> handle<copy>
[2] Unknown2(unknown<4>) -> unknown<1>
[3] Unknown3(unknown<4>)
[4] Unknown4(unknown<4>)
[5] Unknown5(unknown<8>)
[6] Unknown6()
[7] Unknown7()
[8] Unknown8() -> unknown<1>
[0] GetStandardUserSystemClock() -> object<nn::timesrv::detail::service::ISystemClock>
[1] GetStandardNetworkSystemClock() -> object<nn::timesrv::detail::service::ISystemClock>
[2] GetStandardSteadyClock() -> object<nn::timesrv::detail::service::ISteadyClock>
[3] GetTimeZoneService() -> object<nn::timesrv::detail::service::ITimeZoneService>
[4] GetStandardLocalSystemClock() -> object<nn::timesrv::detail::service::ISystemClock>
[5, 4.0.0+] GetEphemeralNetworkSystemClock() -> object<nn::timesrv::detail::service::ISystemClock>
[50, 4.0.0+] SetStandardSteadyClockInternalOffset(nn::TimeSpanType)
[100] IsStandardUserSystemClockAutomaticCorrectionEnabled() -> b8
[101] SetStandardUserSystemClockAutomaticCorrectionEnabled(b8)
[102, 5.0.0+] GetStandardUserSystemClockInitialYear(unknown) -> unknown
[200, 3.0.0+] IsStandardNetworkSystemClockAccuracySufficient() -> b8
[300, 4.0.0+] CalculateMonotonicSystemClockBaseTimePoint(nn::time::SystemClockContext) -> u64
[400, 4.0.0+] GetClockSnapshot(u8) -> buffer<nn::time::sf::ClockSnapshot, 0x1a>
[401, 4.0.0+] GetClockSnapshotFromSystemClockContext(u8, nn::time::SystemClockContext, nn::time::SystemClockContext) -> buffer<nn::time::sf::ClockSnapshot, 0x1a>
[500, 4.0.0+] CalculateStandardUserSystemClockDifferenceByUser(buffer<nn::time::sf::ClockSnapshot, 0x19>, buffer<nn::time::sf::ClockSnapshot, 0x19>) -> nn::TimeSpanType
[501, 4.0.0+] CalculateSpanBetween(buffer<nn::time::sf::ClockSnapshot, 0x19>, buffer<nn::time::sf::ClockSnapshot, 0x19>) -> nn::TimeSpanType
[0] GetCurrentTimePoint() -> nn::time::SteadyClockTimePoint
[2] GetTestOffset() -> nn::TimeSpanType
[3] SetTestOffset(nn::TimeSpanType)
[100, 2.0.0+] GetRtcValue() -> u64
[101, 2.0.0+] IsRtcResetDetected() -> b8
[102, 2.0.0+] GetSetupResultValue() -> u32
[200, 3.0.0+] GetInternalOffset() -> nn::TimeSpanType
[201, 3.0.0-3.0.2] SetInternalOffset(nn::TimeSpanType)
[0] GetDeviceLocationName() -> nn::time::LocationName
[1] SetDeviceLocationName(nn::time::LocationName)
[2] GetTotalLocationNameCount() -> u32
[3] LoadLocationNameList(u32) -> (u32, buffer<nn::time::LocationName, 6>)
[4] LoadTimeZoneRule(nn::time::LocationName) -> buffer<nn::time::TimeZoneRule, 0x16>
[5, 2.0.0+] GetTimeZoneRuleVersion() -> nn::time::TimeZoneRuleVersion
[100] ToCalendarTime(nn::time::PosixTime, buffer<nn::time::TimeZoneRule, 0x15>) -> (nn::time::CalendarTime, nn::time::sf::CalendarAdditionalInfo)
[101] ToCalendarTimeWithMyRule(nn::time::PosixTime) -> (nn::time::CalendarTime, nn::time::sf::CalendarAdditionalInfo)
[201] ToPosixTime(nn::time::CalendarTime, buffer<nn::time::TimeZoneRule, 0x15>) -> (u32, buffer<nn::time::PosixTime, 0xa>)
[202] ToPosixTimeWithMyRule(nn::time::CalendarTime) -> (u32, buffer<nn::time::PosixTime, 0xa>)
[0] GetEnvironmentVariable(buffer<unknown, 5>) -> (u32, buffer<unknown, 6>)
[1] GetEnvironmentVariableLength(buffer<unknown, 5>) -> u32
[2] BindHostConnectionEvent() -> handle<copy>
[3] BindHostDisconnectionEvent() -> handle<copy>
[4] BindHostConnectionEventForSystem() -> handle<copy>
[5] BindHostDisconnectionEventForSystem() -> handle<copy>
[6, 3.0.0+] GetBridgeIpAddress() -> buffer<unknown, 6>
[7, 3.0.0+] GetBridgePort() -> buffer<unknown, 6>
[8, 3.0.0+] SetUsbDetachedForDebug(u8)
[9, 4.0.0+] GetBridgeSubnetMask() -> buffer<unknown, 6>
[10, 4.0.0+] GetBridgeMacAddress() -> buffer<unknown, 6>
[0] Unknown0() -> (u32, u32)
[1] Unknown1(u32) -> (u32, u32)
[2] Unknown2(bytes<0x42, 2>, u32) -> (u32, u32)
[3] Unknown3(bytes<0x42, 2>, u32) -> (u32, u32)
[4] Unknown4(u32, u32) -> (u32, u32)
[5] Unknown5(u32) -> (bytes<0x42, 2>, u32, u32)
[6] Unknown6(u32, u32) -> (u32, u64, buffer<unknown, 6>)
[7] Unknown7(u32, u32, buffer<unknown, 5>) -> (u32, u64)
[8] Unknown8(u32, u32) -> (u32, u32)
[9] Unknown9(u32, u32, u32) -> (u32, u32)
[10] GetPeerNameAny() -> bytes<0x20, 1>
[11] GetDefaultHostName() -> bytes<0x20, 1>
[12] CreateSocketOld() -> (u32, unknown)
[13] CreateSocket(u8) -> (u32, unknown)
[100] RegisterProcessId(u64, pid)
[101] MonitorManager(u64, pid)
[0] Close() -> (u32, u32)
[1] Connect(bytes<0x42, 2>) -> (u32, u32)
[2] Bind(bytes<0x42, 2>) -> (u32, u32)
[3] Listen(u32) -> (u32, u32)
[4] Accept() -> (bytes<0x42, 2>, u32, unknown)
[5] Recv(u32) -> (u32, u64, buffer<unknown, 0x22>)
[6] Send(u32, buffer<unknown, 0x21>) -> (u32, u64)
[7] Shutdown(u32) -> (u32, u32)
[8] Fcntl(u32, u32) -> (u32, u32)
[0] DoesUartExist(unknown<4>) -> unknown<1>
[1] DoesUartExistForTest(unknown<4>) -> unknown<1>
[2] SetUartBaudrate(unknown<8>) -> unknown<1>
[3] SetUartBaudrateForTest(unknown<8>) -> unknown<1>
[4] IsSomethingUartValid(unknown<8>) -> unknown<1>
[5] IsSomethingUartValidForTest(unknown<8>) -> unknown<1>
[6] GetSession() -> object<nn::uart::IPortSession>
[7] IsSomethingUartValid2(unknown<8>) -> unknown<1>
[8] IsSomethingUartValid2ForTest(unknown<8>) -> unknown<1>
[0] OpenSession(unknown<0x20>, handle<copy>, handle<copy>) -> unknown<1>
[1] OpenSessionForTest(unknown<0x20>, handle<copy>, handle<copy>) -> unknown<1>
[2] Unknown2() -> unknown<8>
[3] Unknown3(buffer<unknown, 0x21>) -> unknown<8>
[4] Unknown4() -> unknown<8>
[5] Unknown5() -> (unknown<8>, buffer<unknown, 0x22>)
[6] Unknown6(unknown<0x10>) -> (unknown<1>, handle<copy>)
[7] Unknown7(unknown<4>) -> unknown<1>
[0] PostBufferAsync(u32 size, u64 buffer) -> u32 urbId
The output urbId can be used while parsing the output of #GetReportData, after waiting for the CompletionEvent to be signaled.
The buffer address must be 0x10000-byte aligned. The input size doesn't matter.
Used for data-transfer with input/output endpoints.
The user-process must flush dcache for the buffer before using this command.
When sending data where size is larger than wMaxPacketSize
, it will
automatically send multiple USB packets where last_packet_size = remaining
size. Every wMaxPacketSize
-byte is a different packet. This only occurs
in some cases. When size
is ~0x1000000
(exact size unknown),
Switch-side silently hangs, while host-side will timeout (no traffic on
USB bus indicating failure).
For receiving data, if size
is less than {actual received USB packet
size}, the rest of the packet will be discarded. Later PostBufferAsync
cmd(s) will only return data from new packets, not the remainder of the
earlier packet(s).
[1] Cancel()
[2] GetCompletionEvent() -> handle<copy, event>
Returns an event handle for polling the completion of #PostBufferAsync, even when it finished via #Stall.
[3] GetReportData() -> (nn::usb::usb_report_entry entries, u32 report_count)
Returns report data from the endpoint. Seems to be eventually loaded from state, since this doesn't trigger any USB bus activity. All-zero before #PostBufferAsync was used at least once.
[4] Stall()
Calls the same function used by #StallCtrl, except this uses the endpoint associated with the current session.
Stops in-progress data-transfer done by #PostBufferAsync.
[5] SetZlt(bool)
zlt likely stands for zero-length termination
[0, 1.0.0-4.0.0] GetDsEndpoint(buffer<nn::usb::usb_endpoint_descriptor, 5>) -> (u8, object<nn::usb::ds::IDsEndpoint>)
Manu uses this twice for getting two endpoints, with the following 0x7-byte buffer data:
07 05 80 02 00 02 00
The structure matches libnn::usb::usb_endpoint_descriptor, with fields for audio devices bRefresh and bSynchAddress removed.
From the Tegra datasheet: "The maximum packet size supported on any endpoint is 1024 bytes in high-speed mode, for both device and host modes."
[0, 5.0.0+] RegisterEndpoint(u8 address) -> object<nn::usb::ds::IDsEndpoint>
[1] GetSetupEvent() -> handle<copy, event>
Returns an event handle. Unknown what triggers signalling, not signalled during interface-enable / device<>host USB-comms init.
[2] GetSetupPacket() -> buffer<unknown, 6>
[3] EnableInterface()
Enables the current interface.
Only one interface can be enabled at a time per bInterfaceNumber. When bInterfaceNumber is auto-allocated (0x4) for #GetDsEndpoint this isn't an issue since the final bInterfaceNumber will be unique.
Once enabled, the device/interface can then actually be used over USB.
[4] DisableInterface()
Disables the current interface
[5] CtrlInPostBufferAsync(u32 size, u64 buffer) -> u32 urbId
Same as #PostBufferAsync, except this uses control input endpoint 0x80.
[6] CtrlOutPostBufferAsync(u32 size, u64 buffer) -> u32 urbId
Same as #PostBufferAsync, except this uses control output endpoint 0x00.
[7] GetCtrlInCompletionEvent() -> handle<copy, event>
Returns an event handle for polling the completion of input control commands. Same as #GetCompletionEvent, except this uses control input endpoint 0x80.
[8] GetCtrlInReportData() -> (nn::usb::usb_report_entry entries, u32 report_count)
Same as #GetReportData, except this uses control input endpoint 0x80.
[9] GetCtrlOutCompletionEvent() -> handle<copy, event>
Returns an event handle for polling the completion of input control commands. Same as #GetCompletionEvent, except this uses control output endpoint 0x00.
[10] GetCtrlOutReportData() -> (nn::usb::usb_report_entry entries, u32 report_count)
Same as #GetReportData, except this uses control output endpoint 0x00.
[11] StallCtrl()
Calls a function with both control endpoints (0x80 and 0x00) with the same function. From strings: "m_pProtocol->Stall(0x80)" "m_pProtocol->Stall(0x00)"
[12, 5.0.0+] AppendConfigurationData(u8 interface_number, nn::usb::usb_device_speed speed_mode, buffer<unknown, 5> descriptor)
Used for Switch<>PC USB comms, aka Switch-as-device. This seems to only be usable in handheld-mode, with the Switch directly connected to a host via an USB cable, not(?) in docked-mode. This service is used during factory setup by manu.
This service session is used as an IPC domain by manu. All of these
{get-session} commands also return an output u8 and the u32
[0] BindDevice(u32 complexId)
Manu sends 0x02.
Binding more than once with the current session is not allowed. Once
this command is used, the USB device will not be listed with lsusb
until #EnableInterface is used.
[1] BindClientProcess(handle<copy, process>)
[2, 1.0.0-4.0.0] GetDsInterface(buffer<nn::usb::usb_interface_descriptor, 5, 9> interface_descriptor, buffer<bytes, 5>) -> (u8, object<nn::usb::ds::IDsInterface>)
Manu sends a 0x09-byte command (e.g.: 09 04 04 00 00 FF FF FF 00
) in
the first buffer and a string ("usb") in the second buffer.
When the strlen output for the second buffer is >=0x40, size 0x40 is used instead for copying the string. This is the interface name, it's not sent over USB.
Returns an error when #BindDevice wasn't used.
Up to 4 interfaces can be used+enabled.
[2, 5.0.0+] RegisterInterface(u8 address) -> object<nn::usb::ds::IDsInterface>
[3] GetStateChangeEvent() -> handle<copy, event>
Returns an event handle for when the state returned by #GetChange changes. Signalled when Switch<->host USB comms change between started/stopped. USB cable connected/disconnected while at least 1 interface was enabled, or interface enabled/disabled while the USB cable was connected which then caused USB-comms state to change.
[4] GetState() -> u32
Returns an error when #BindDevice wasn't used.
Returns the current state. Values:
[5, 2.0.0-4.0.0] SetVidPidBcd(buffer<nn::usb::usb_descriptor_data, 5> descriptor)
[5, 5.0.0+] ClearDeviceData()
[6, 5.0.0+] AddUsbStringDescriptor(buffer<bytes<0x82>, 5> string_descriptor) -> u8 index
[7, 5.0.0+] DeleteUsbStringDescriptor(u8 index)
[8, 5.0.0+] SetUsbDeviceDescriptor(nn::usb::usb_device_speed speed_mode, buffer<nn::usb::usb_device_descriptor, 5> descriptor)
[9, 5.0.0+] SetBinaryObjectStore(buffer<nn::usb::usb_bos_descriptor, 5, 0>)
[10, 5.0.0+] Enable()
[11, 5.0.0+] Disable()
[0] Unknown0()
[1] Unknown1()
[2] Unknown2() -> handle<copy>
[3] Unknown3()
[4] PostBufferAsync(unknown<0x18>) -> unknown<4>
[5] Unknown5(unknown<4>) -> (unknown<4>, buffer<unknown, 0x22>)
[6] Unknown6(unknown<0x20>, buffer<unknown, 0x21>) -> unknown<4>
[7, 4.0.0+] Unknown7(unknown<0x10>)
[8, 4.0.0+] Unknown8(unknown<4>, handle<copy>)
[0] Unknown0() -> handle<copy>
[1] Unknown1(unknown<1>) -> buffer<unknown, 6>
[2] Unknown2() -> buffer<unknown, 6>
[3] Unknown3(unknown<1>) -> buffer<unknown, 6>
[4] Unknown4() -> unknown<4>
[5] CtrlXferAsync(unknown<0x10>)
[6] Unknown6() -> handle<copy>
[7] GetCtrlXferReport() -> buffer<unknown, 6>
[8] Unknown8()
[9] GetClientEpSession(unknown<0x14>) -> (unknown<7>, object<nn::usb::hs::IClientEpSession>)
[0] BindClientProcess(handle<copy>)
[1] Unknown1(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[2] Unknown2(unknown<0x10>) -> (unknown<4>, buffer<unknown, 6>)
[3] Unknown3() -> (unknown<4>, buffer<unknown, 6>)
[4] Unknown4(unknown<0x12>) -> handle<copy>
[5] Unknown5(unknown<1>)
[6] GetInterfaceStateChangeEvent() -> handle<copy>
[7] GetClientIfSession(unknown<4>) -> (buffer<unknown, 6>, buffer<unknown, 6>, object<nn::usb::hs::IClientIfSession>)
[0] GetPdCradleSession() -> object<nn::usb::pd::detail::IPdCradleSession>
[0] VdmUserWrite(unknown<8>)
[1] VdmUserRead(unknown<4>) -> unknown<4>
[2] Vdm20Init()
[3] GetFwType() -> unknown<2>
[4] GetFwRevision() -> unknown<2>
[5] GetManufacturerId() -> unknown<2>
[6] GetDeviceId() -> unknown<2>
[7, 3.0.0+] Unknown7() -> unknown<1>
[8, 3.0.0+] Unknown8() -> unknown<1>
[0] GetPdSession() -> object<nn::usb::pd::detail::IPdSession>
[0] Unknown0() -> object<nn::usb::pd::detail::IPdManufactureSession>
[0] BindNoticeEvent() -> handle<copy>
[1] Unknown1()
[2] GetStatus() -> unknown<0x14>
[3] GetNotice() -> unknown<4>
[4] Unknown4()
[5] Unknown5()
[6] ReplyPowerRequest(unknown<1>)
[100] GetRelayService() -> object<nns::hosbinder::IHOSBinderDriver>
Returns an IHOSBinderDriver interface which abstracts "nn::visrv::service::RelayServiceImpl".
[101] GetSystemDisplayService() -> object<nn::visrv::sf::ISystemDisplayService>
Returns an #ISystemDisplayService.
[102] GetManagerDisplayService() -> object<nn::visrv::sf::IManagerDisplayService>
Returns an #IManagerDisplayService.
[103, 2.0.0+] GetIndirectDisplayTransactionService() -> object<nns::hosbinder::IHOSBinderDriver>
Returns an IHOSBinderDriver interface which abstracts "nn::visrv::service::IndirectDisplayTransactionServiceImpl".
[1000] ListDisplays() -> (u64, buffer<nn::vi::DisplayInfo, 6>)
Takes a type-0x6 output buffer containing the array of #DisplayInfo output entries. Returns an output u64: total number of output entries.
Normally(?) this only returns the "Default" display.
[1010] OpenDisplay(nn::vi::DisplayName) -> u64
Takes a #DisplayName as input. Returns an output u64, the DisplayId.
To open the default display, input string "Default" can be used.
[1011] OpenDefaultDisplay() -> u64
Returns an output u64.
Probably not (?) used by newer official user-processes, since those use OpenDisplay with the default string instead.
[1020] CloseDisplay(u64)
Takes an input u64, DisplayId.
[1101] SetDisplayEnabled(b8, u64)
Takes an input u32 boolean, and an u64(DisplayId?).
[1102] GetDisplayResolution(u64) -> (u64, u64)
Takes an input u64 DisplayId and returns two output u64s: width and height.
[2020] OpenLayer(nn::vi::DisplayName, u64, nn::applet::AppletResourceUserId, pid) -> (u64, buffer<bytes, 6>)
Takes a PID-descriptor, a type-0x6 buffer for the output #NativeWindow, a #DisplayName(which was previously used with #OpenDisplay), an u64 LayerId, and an u64 AppletResourceUserId. Returns an output u64 NativeWindow_Size.
Official user-processes use a LayerId stored in a global state field("...ExternalLayerId") if non-zero, otherwise:
This OpenLayer command returns error 0x272 when the AppletResourceUserId is invalid.
[2021] CloseLayer(u64)
Takes an input u64: LayerId which was used with #OpenLayer.
[2030] CreateStrayLayer(u32, u64) -> (u64, u64, buffer<bytes, 6>)
Takes a type-0x6 buffer for the output #NativeWindow, an u32(LayerFlags bitmask), and an u64 DisplayId. Returns two output u64s: LayerId and NativeWindow_Size.
[2031] DestroyStrayLayer(u64)
Takes an input u64: LayerId from #CreateStrayLayer.
[2101] SetLayerScalingMode(u32, u64)
Takes an input u64("ScalingMode") and u64 ("LayerId").
[2102, 5.0.0+] ConvertScalingMode(unknown) -> unknown
[2450] GetIndirectLayerImageMap(u64, u64, u64, nn::applet::AppletResourceUserId, pid) -> (u64, u64, buffer<bytes, 0x46>)
Takes a PID-descriptor, an type-0x46 buffer, and four u64s: width(s32), height(s32), <output from AM GetIndirectLayerConsumerHandle>, and AppletResourceUserId. Returns two output u64s.
[2451] GetIndirectLayerImageCropMap(f32, f32, f32, f32, u64, u64, u64, nn::applet::AppletResourceUserId, pid) -> (u64, u64, buffer<bytes, 0x46>)
Takes a PID-descriptor, an type-0x46 buffer, four floats, four u64s(last u64 is AppletResourceUserId). Returns two output u64s. The floats are stored immediately after each other(32bits).
[2460] GetIndirectLayerImageRequiredMemoryInfo(u64, u64) -> (u64, u64)
Takes two input u64s: with and height. Returns two output u64s. First u64 is the buffer size to use with the ImageMap cmds.
[5202] GetDisplayVsyncEvent(u64) -> handle<copy>
Takes an input u64 DisplayId and returns a handle.
[5203] GetDisplayVsyncEventForDebug(u64) -> handle<copy>
Takes an input u64 DisplayId and returns a handle.
[0] GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
Returns an #IApplicationDisplayService. Takes an input u32, user-processes use 0 or 1, with 0 for regular-applications normally. 0 = user-service(vi:u), 1 = non-user-service? Returns an error when using value 1 with vi:u(same error listed below for IApplicationDisplayService for unavailable commands).
[200, 4.0.0+] AllocateProcessHeapBlock(u64) -> u64
[201, 4.0.0+] FreeProcessHeapBlock(u64)
[1102] GetDisplayResolution(u64) -> (u64, u64)
[2010] CreateManagedLayer(u32, u64, nn::applet::AppletResourceUserId) -> u64
[2011] DestroyManagedLayer(u64)
[2050] CreateIndirectLayer() -> u64
[2051] DestroyIndirectLayer(u64)
[2052] CreateIndirectProducerEndPoint(u64, nn::applet::AppletResourceUserId) -> u64
[2053] DestroyIndirectProducerEndPoint(u64)
[2054] CreateIndirectConsumerEndPoint(u64, nn::applet::AppletResourceUserId) -> u64
[2055] DestroyIndirectConsumerEndPoint(u64)
[2300] AcquireLayerTexturePresentingEvent(u64) -> handle<copy>
[2301] ReleaseLayerTexturePresentingEvent(u64)
[2302] GetDisplayHotplugEvent(u64) -> handle<copy>
[2402] GetDisplayHotplugState(u64) -> u32
[2501, 4.0.0+] GetCompositorErrorInfo(u64, u64) -> (u32, buffer<nn::vi::CompositorError, 0x16>)
[2601, 4.0.0+] GetDisplayErrorEvent(u64) -> handle<copy>
[4201] SetDisplayAlpha(f32, u64)
[4203] SetDisplayLayerStack(u32, u64)
[4205] SetDisplayPowerState(u32, u64)
[4206, 4.0.0+] SetDefaultDisplay(u64)
[6000] AddToLayerStack(u32, u64)
[6001] RemoveFromLayerStack(u32, u64)
[6002] SetLayerVisibility(b8, u64)
[6003, 5.0.0+] SetLayerConfig(unknown) -> unknown
[6004, 5.0.0+] AttachLayerPresentationTracer(unknown) -> unknown
[6005, 5.0.0+] DetachLayerPresentationTracer(unknown) -> unknown
[6006, 5.0.0+] StartLayerPresentationRecording(unknown) -> unknown
[6007, 5.0.0+] StopLayerPresentationRecording(unknown) -> unknown
[6008, 5.0.0+] StartLayerPresentationFenceWait(unknown) -> unknown
[6009, 5.0.0+] StopLayerPresentationFenceWait(unknown) -> unknown
[6010, 5.0.0+] GetLayerPresentationAllFencesExpiredEvent(unknown) -> unknown
[7000] SetContentVisibility(b8)
[8000] SetConductorLayer(b8, u64)
[8100] SetIndirectProducerFlipOffset(u64, u64, nn::TimeSpan)
[8200, 4.0.0+] CreateSharedBufferStaticStorage(u64, buffer<nn::vi::fbshare::SharedMemoryPoolLayout, 0x15>) -> nn::vi::fbshare::SharedBufferHandle
[8201, 4.0.0+] CreateSharedBufferTransferMemory(u64, handle<copy>, buffer<nn::vi::fbshare::SharedMemoryPoolLayout, 0x15>) -> nn::vi::fbshare::SharedBufferHandle
[8202, 4.0.0+] DestroySharedBuffer(nn::vi::fbshare::SharedBufferHandle)
[8203, 4.0.0+] BindSharedLowLevelLayerToManagedLayer(nn::vi::DisplayName, u64, nn::applet::AppletResourceUserId, pid)
[8204, 4.0.0+] BindSharedLowLevelLayerToIndirectLayer(u64, nn::applet::AppletResourceUserId, pid)
[8207, 4.0.0+] UnbindSharedLowLevelLayer(u64)
[8208, 4.0.0+] ConnectSharedLowLevelLayerToSharedBuffer(u64, nn::vi::fbshare::SharedBufferHandle)
[8209, 4.0.0+] DisconnectSharedLowLevelLayerFromSharedBuffer(u64)
[8210, 4.0.0+] CreateSharedLayer(nn::applet::AppletResourceUserId) -> nn::vi::fbshare::SharedLayerHandle
[8211, 4.0.0+] DestroySharedLayer(nn::vi::fbshare::SharedLayerHandle)
[8216, 4.0.0+] AttachSharedLayerToLowLevelLayer(nn::vi::fbshare::SharedLayerTextureIndexList, nn::vi::fbshare::SharedLayerHandle, u64)
[8217, 4.0.0+] ForceDetachSharedLayerFromLowLevelLayer(nn::vi::fbshare::SharedLayerHandle)
[8218, 4.0.0+] StartDetachSharedLayerFromLowLevelLayer(nn::vi::fbshare::SharedLayerHandle)
[8219, 4.0.0+] FinishDetachSharedLayerFromLowLevelLayer(nn::vi::fbshare::SharedLayerHandle)
[8220, 4.0.0+] GetSharedLayerDetachReadyEvent(nn::vi::fbshare::SharedLayerHandle) -> handle<copy>
[8221, 4.0.0+] GetSharedLowLevelLayerSynchronizedEvent(u64) -> handle<copy>
[8222, 4.0.0+] CheckSharedLowLevelLayerSynchronized(u64) -> u64
[8223, 4.0.0+] RegisterSharedBufferImporterAruid(nn::vi::fbshare::SharedBufferHandle, nn::applet::AppletResourceUserId)
[8224, 4.0.0+] UnregisterSharedBufferImporterAruid(nn::vi::fbshare::SharedBufferHandle, nn::applet::AppletResourceUserId)
[8227, 4.0.0+] CreateSharedBufferProcessHeap(u64, buffer<nn::vi::fbshare::SharedMemoryPoolLayout, 0x15>) -> nn::vi::fbshare::SharedBufferHandle
[8228, 4.0.0+] GetSharedLayerLayerStacks(nn::vi::fbshare::SharedLayerHandle) -> u32
[8229, 4.0.0+] SetSharedLayerLayerStacks(u32, nn::vi::fbshare::SharedLayerHandle)
[8291, 4.0.0+] PresentDetachedSharedFrameBufferToLowLevelLayer(nn::vi::fbshare::SharedBufferHandle, u64, u64)
[8292, 4.0.0+] FillDetachedSharedFrameBufferColor(u32, u32, u32, u32, u32, nn::vi::fbshare::SharedBufferHandle, u64)
[8293, 4.0.0+] GetDetachedSharedFrameBufferImage(nn::vi::fbshare::SharedBufferHandle, u64) -> (u64, buffer<bytes, 6>)
[8294, 4.0.0+] SetDetachedSharedFrameBufferImage(u32, nn::vi::fbshare::SharedBufferHandle, u64, buffer<bytes, 5>)
[8295, 4.0.0+] CopyDetachedSharedFrameBufferImage(u32, u32, nn::vi::fbshare::SharedBufferHandle, u64, u64)
[8296, 4.0.0+] SetDetachedSharedFrameBufferSubImage(u32, u32, u32, u32, u32, u32, nn::vi::fbshare::SharedBufferHandle, u64, buffer<bytes, 5>)
[8297, 4.0.0+] GetSharedFrameBufferContentParameter(nn::vi::fbshare::SharedBufferHandle, u64) -> (u32, nn::vi::CropRegion, u32, u32, u32)
[8298, 5.0.0+] ExpandStartupLogoOnSharedFrameBuffer(unknown) -> unknown
[2] GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
Returns an #IApplicationDisplayService. Takes an input u32, user-processes use 0 or 1, with 0 for regular-applications normally. 0 = user-service(vi:u), 1 = non-user-service? Returns an error when using value 1 with vi:u(same error listed below for IApplicationDisplayService for unavailable commands).
[3] GetDisplayServiceWithProxyNameExchange(nn::vi::ProxyName, u32) -> object<nn::visrv::sf::IApplicationDisplayService>
Returns an #IApplicationDisplayService.
[1200] GetZOrderCountMin(u64) -> u64
[1202] GetZOrderCountMax(u64) -> u64
[1203] GetDisplayLogicalResolution(u64) -> (u32, u32)
[1204] SetDisplayMagnification(u32, u32, u32, u32, u64)
[2201] SetLayerPosition(f32, f32, u64)
[2203] SetLayerSize(u64, u64, u64)
[2204] GetLayerZ(u64) -> u64
[2205] SetLayerZ(u64, u64)
[2207] SetLayerVisibility(b8, u64)
[2209] SetLayerAlpha(f32, u64)
[2312] CreateStrayLayer(u32, u64) -> (u64, u64, buffer<bytes, 6>)
[2400] OpenIndirectLayer(u64, nn::applet::AppletResourceUserId, pid) -> (u64, buffer<bytes, 6>)
[2401] CloseIndirectLayer(u64)
[2402] FlipIndirectLayer(u64)
[3000] ListDisplayModes(u64) -> (u64, buffer<nn::vi::DisplayModeInfo, 6>)
[3001] ListDisplayRgbRanges(u64) -> (u64, buffer<u32, 6>)
[3002] ListDisplayContentTypes(u64) -> (u64, buffer<u32, 6>)
[3200] GetDisplayMode(u64) -> nn::vi::DisplayModeInfo
[3201] SetDisplayMode(u64, nn::vi::DisplayModeInfo)
[3202] GetDisplayUnderscan(u64) -> u64
[3203] SetDisplayUnderscan(u64, u64)
[3204] GetDisplayContentType(u64) -> u32
[3205] SetDisplayContentType(u32, u64)
[3206] GetDisplayRgbRange(u64) -> u32
[3207] SetDisplayRgbRange(u32, u64)
[3208] GetDisplayCmuMode(u64) -> u32
[3209] SetDisplayCmuMode(u32, u64)
[3210] GetDisplayContrastRatio(u64) -> f32
[3211] SetDisplayContrastRatio(f32, u64)
[3214] GetDisplayGamma(u64) -> f32
[3215] SetDisplayGamma(f32, u64)
[3216] GetDisplayCmuLuma(u64) -> f32
[3217] SetDisplayCmuLuma(f32, u64)
[8225, 4.0.0+] GetSharedBufferMemoryHandleId(nn::vi::fbshare::SharedBufferHandle, nn::applet::AppletResourceUserId, pid) -> (nn::vi::native::NativeMemoryHandleId, u64, buffer<nn::vi::fbshare::SharedMemoryPoolLayout, 0x16>)
[8250, 4.0.0+] OpenSharedLayer(nn::vi::fbshare::SharedLayerHandle, nn::applet::AppletResourceUserId, pid)
[8251, 4.0.0+] CloseSharedLayer(nn::vi::fbshare::SharedLayerHandle)
[8252, 4.0.0+] ConnectSharedLayer(nn::vi::fbshare::SharedLayerHandle)
[8253, 4.0.0+] DisconnectSharedLayer(nn::vi::fbshare::SharedLayerHandle)
[8254, 4.0.0+] AcquireSharedFrameBuffer(nn::vi::fbshare::SharedLayerHandle) -> (nn::vi::native::NativeSync, nn::vi::fbshare::SharedLayerTextureIndexList, u64)
[8255, 4.0.0+] PresentSharedFrameBuffer(nn::vi::native::NativeSync, nn::vi::CropRegion, u32, u32, nn::vi::fbshare::SharedLayerHandle, u64)
[8256, 4.0.0+] GetSharedFrameBufferAcquirableEvent(nn::vi::fbshare::SharedLayerHandle) -> handle<copy>
[8257, 4.0.0+] FillSharedFrameBufferColor(u32, u32, u32, u32, nn::vi::fbshare::SharedLayerHandle, u64)
[8258, 5.0.0+] CancelSharedFrameBuffer(unknown) -> unknown
[1] GetDisplayService(u32) -> object<nn::visrv::sf::IApplicationDisplayService>
Returns an #IApplicationDisplayService. Takes an input u32, user-processes use 0 or 1, with 0 for regular-applications normally. 0 = user-service(vi:u), 1 = non-user-service? Returns an error when using value 1 with vi:u(same error listed below for IApplicationDisplayService for unavailable commands).
[3] GetDisplayServiceWithProxyNameExchange(nn::vi::ProxyName, u32) -> object<nn::visrv::sf::IApplicationDisplayService>
Returns an #IApplicationDisplayService.
[0] Unknown0()
[1] Unknown1()
[2] GetMacAddress() -> unknown<6>
[3] StartScan(buffer<unknown, 0x15>)
[4] StopScan()
[5] Connect(unknown<0x80>)
[6] CancelConnect()
[7] Disconnect()
[8] Unknown8(unknown<4>) -> handle<copy>
[9] Unknown9() -> unknown<0x3c>
[10] GetState() -> unknown<4>
[11] GetScanResult() -> buffer<unknown, 6>
[12] GetRssi() -> unknown<4>
[13] ChangeRxAntenna(unknown<4>)
[14] Unknown14() -> buffer<unknown, 0xa>
[15] Unknown15()
[16] RequestWakeUp()
[17] RequestIfUpDown(unknown<8>, buffer<unknown, 9>)
[18, 2.0.0+] Unknown18() -> unknown<4>
[19, 2.0.0+] Unknown19(unknown<0x18>)
[20, 2.0.0+] Unknown20()
[21, 2.0.0+] Unknown21() -> unknown<4>
[22, 2.0.0+] Unknown22(unknown<4>)
[23, 2.0.0+] Unknown23(unknown<4>)
[24, 2.0.0+] Unknown24() -> unknown<0x5c>
[25, 2.0.0+] Unknown25(unknown<2>)
[26, 4.0.0+] Unknown26()
[27, 4.0.0+] Unknown27()
[0] Unknown0(unknown<4>) -> (unknown<0xc>, buffer<unknown, 6>)
[0] Unknown0(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[0] Unknown0()
[1] Unknown1()
[2] Unknown2()
[3] Unknown3()
[4] Unknown4()
[5] Unknown5()
[6] GetMacAddress() -> unknown<6>
[7] CreateBss(unknown<0x84>)
[8] DestroyBss()
[9] StartScan(buffer<unknown, 0x15>)
[10] StopScan()
[11] Connect(unknown<0x84>)
[12] CancelConnect()
[13] Join(unknown<0x84>)
[14] CancelJoin()
[15] Disconnect(unknown<0x10>)
[16] SetBeaconLostCount(unknown<4>)
[17] Unknown17(unknown<4>) -> handle<copy>
[18] Unknown18() -> unknown<0x3c>
[19] Unknown19() -> buffer<unknown, 0x16>
[20] GetBssIndicationEvent() -> handle<copy>
[21] GetBssIndicationInfo() -> buffer<unknown, 0x16>
[22] GetState() -> unknown<4>
[23] GetAllowedChannels() -> unknown<0x50>
[24] AddIe(unknown<4>, buffer<unknown, 5>) -> unknown<4>
[25] DeleteIe(unknown<4>)
[26] Unknown26(buffer<unknown, 5>)
[27] Unknown27(unknown<4>)
[28] CreateRxEntry(unknown<4>, buffer<unknown, 9>) -> unknown<4>
[29] DeleteRxEntry(unknown<4>)
[30] Unknown30(unknown<8>)
[31] Unknown31(unknown<2>) -> unknown<4>
[32] AddMatchingDataToRxEntry(unknown<4>, buffer<unknown, 0x19>)
[33] RemoveMatchingDataFromRxEntry(unknown<4>, buffer<unknown, 0x19>)
[34] GetScanResult(buffer<unknown, 0x19>) -> buffer<unknown, 6>
[35] Unknown35(unknown<0x10>, buffer<unknown, 5>)
[36] SetActionFrameWithBeacon(buffer<unknown, 5>)
[37] CancelActionFrameWithBeacon()
[38] CreateRxEntryForActionFrame(unknown<4>, buffer<unknown, 9>) -> unknown<4>
[39] DeleteRxEntryForActionFrame(unknown<4>)
[40] Unknown40(unknown<8>)
[41] Unknown41(unknown<4>) -> unknown<4>
[42] CancelGetActionFrame(unknown<4>)
[43] GetRssi() -> unknown<4>
[44] Unknown44(unknown<4>)
[45, 4.0.0+] Unknown45()
[46, 4.0.0+] Unknown46()
[47, 4.0.0+] Unknown47()
[48, 4.0.0+] Unknown48()
[0] Unknown0(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
[0] Unknown0(buffer<unknown, 5>)
[1] Unknown1(unknown<4>)
[2] Unknown2(unknown<4>, buffer<unknown, 9>) -> unknown<4>
[3] Unknown3(unknown<4>)
[4] Unknown4(unknown<8>)
[5] Unknown5(unknown<2>) -> unknown<4>
[6] GetMacAddress() -> unknown<6>
[7] SwitchTsfTimerFunction(unknown<1>)
[8] Unknown8() -> unknown<8>
[9] Unknown9(unknown<4>, handle<copy>, handle<copy>, handle<copy>, handle<copy>, handle<copy>)
[10] Unknown10()
[11] Unknown11()
[0] GetDataFormat(unknown<8>) -> unknown<1>
[1] SetDataFormat(unknown<0x10>)
[2] GetMcuState(unknown<8>) -> unknown<1>
[3] SetMcuState(unknown<0x10>)
[4] GetMcuVersionForNfc(unknown<8>) -> unknown<0x20>
[5] CheckNfcDevicePower(unknown<8>)
[10] SetNfcEvent(unknown<8>) -> (handle<copy>, handle<copy>)
[11] GetNfcInfo(unknown<8>) -> buffer<unknown, 0x1a>
[12] StartNfcDiscovery(unknown<0x10>)
[13] StopNfcDiscovery(unknown<8>)
[14] StartNtagRead(unknown<0x30>)
[15] StartNtagWrite(unknown<8>, buffer<unknown, 0x19>)
[16] SendNfcRawData(unknown<8>, buffer<unknown, 0x19>)
[17] RegisterMifareKey(unknown<8>, buffer<unknown, 0x19>)
[18] ClearMifareKey(unknown<0x10>)
[19] StartMifareRead(unknown<8>, buffer<unknown, 0x19>)
[20] StartMifareWrite(unknown<8>, buffer<unknown, 0x19>)
[101] GetAwakeTriggerReasonForLeftRail() -> unknown<8>
[102] GetAwakeTriggerReasonForRightRail() -> unknown<8>
[0] TransactParcel(unknown) -> unknown
Takes a s32 (ID), an u32 (code), a type-0x5 input buffer (parcel_data), a type-0x6 output buffer (parcel_reply) and an input u32 (flags). Each word is placed immediately after the previous word.
Analogous to "onTransact" from "android.os.IServiceManager".
[1] AdjustRefcount(unknown) -> unknown
Takes 3 input s32s: ID, addval, and type. Each word immediately follows the previous word. No additional output.
| Called by official function | addval | type | | ------------------------------------ | ------ | ---- | | "android::BpBinder::onFirstRef" | 1 | 1 | | "android::BpBinder::onLastStrongRef" | -1 | 1 | | ? | 1 | 0 | | ? | -1 | 0 |
During init, {addval=1, type=0} is used then {addval=1, type=1} is used.
[2] GetNativeHandle(unknown) -> unknown
Takes an input s32 (ID) and u32, with the latter immediately following the previous word. Returns an output event handle.
[3, 3.0.0+] TransactParcelAuto(unknown) -> unknown
Takes a s32 (ID), an u32 (code), a type-0x21 input buffer (parcel_data), a type-0x22 output buffer (parcel_reply) and an input u32 (flags). Each word is placed immediately after the previous word.
[0] OpenLog(handle<copy>) -> unknown<4>
Takes process handle. Returns an fd.
[1] CloseLog(unknown<4>)
Takes fd and closes it.
[2] ReadLog(unknown<4>) -> (unknown<4>, buffer<unknown, 6>)
Takes fd and reads log into a type-6 buffer.
[3] Unknown3(unknown<4>, buffer<unknown, 5>) -> (unknown<4>, buffer<unknown, 6>)
[4] Unknown4(unknown<4>, buffer<unknown, 5>, buffer<unknown, 5>) -> unknown<4>
[0] Open(buffer<bytes, 5> path) -> (u32 fd, u32 error_code)
Takes a type-0x5 input buffer for the device-path. Returns the output 32bit fd and the u32 error_code.
[1] Ioctl(u32 fd, u32 rq_id, buffer<bytes, 0x21>) -> (u32 error_code, buffer<bytes, 0x22>)
Takes a 32bit fd, an u32 ioctl_cmd, a type-0x21 input buffer, and a type-0x22 output buffer. Returns an output u32 (error_code).
The addr/size for send/recv buffers are only set when the associated direction bit is set in the ioctl cmd (addr/size = 0 otherwise).
[2] Close(u32 fd) -> u32 error_code
Takes a 32bit fd. Returns an output u32 (error_code).
[3] Initialize(u32 transfer_memory_size, handle<copy, process> current_process, handle<copy, transfer_memory> transfer_memory) -> u32 error_code
Takes two copy-handles (current_process and transfer_memory) and an input u32 (transfer_memory_size). Returns an output u32 (error_code).
Webkit applet creates the transfer-memory with perm = 0 and size 0x300000.
[4] QueryEvent(u32 fd, u32 event_id) -> (u32, handle<copy, event>)
Takes two input u32s (fd and event_id), with the second word immediately after the first one. Returns an output u32 (error_code) and a copy-handle (event_handle).
QueryEvent is only supported on (and implemented differently on):
[5] MapSharedMem(u32 fd, u32 nvmap_handle, handle<copy, transfer_memory>) -> u32
Takes a copy-handle (transfer_memory) and two input u32s (fd and nvmap_handle). Returns an output u32 (error_code).
[6] GetStatus() -> unknown<0x24>
Takes no input. Returns 0x10-bytes and an output u32 (error_code).
[7] ForceSetClientPID(u64 pid) -> u32 error_code
Takes an input u64 which must match the user-process PID (AppletResourceUserId). Returns an output u32 (error_code).
[8] SetClientPID(u64, pid) -> u32 error_code
Takes a PID-descriptor and an u64 which must match the user-process PID (AppletResourceUserId). Returns an output u32 (error_code).
[9] DumpGraphicsMemoryInfo()
No input or output. Does nothing.
[10, 3.0.0+] Unknown10(u32, handle<copy>) -> u32
[11, 3.0.0+] Ioctl2(u32, u32, buffer<bytes, 0x21>, buffer<bytes, 0x21>) -> (u32, buffer<bytes, 0x22>)
Takes a type-0x21 buffer, a type-0x22 buffer, a type-0x21 buffer, and two input u32s. Returns an output u32 (error_code).
[12, 3.0.0+] Ioctl3(u32, u32, buffer<bytes, 0x21>) -> (u32, buffer<bytes, 0x22>, buffer<bytes, 0x22>)
Same input/output as Ioctl2, except cmdhdr_word1 is 0x100B instead of 0xC0B.
[13, 3.0.0+] Unknown13(unknown<8>)