Glue services: Difference between revisions
No edit summary |
|||
(25 intermediate revisions by 4 users not shown) | |||
Line 4: | Line 4: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#GetApplicationLaunchProperty|GetApplicationLaunchProperty]] | |||
|- | |||
| 1 || [10.0.0+] [[#GetApplicationControlProperty|GetApplicationControlProperty]] ([1.0.0-9.2.0] [[#GetApplicationLaunchPropertyWithApplicationId|GetApplicationLaunchPropertyWithApplicationId]]) | |||
|- | |||
| 2 || [10.0.0+] [[#GetApplicationProcessProperty|GetApplicationProcessProperty]] ([1.0.0-9.2.0] [[#GetApplicationControlProperty|GetApplicationControlProperty]]) | |||
|- | |||
| 3 || [10.0.0+] [[#GetApplicationInstanceId|GetApplicationInstanceId]] ([1.0.0-9.2.0] [[#GetApplicationControlPropertyWithApplicationId|GetApplicationControlPropertyWithApplicationId]]) | |||
|- | |- | ||
| | | 4 || [10.0.0+] [[#GetApplicationInstanceUnregistrationNotifier|GetApplicationInstanceUnregistrationNotifier]] | ||
|- | |- | ||
| | | 5 || [10.0.0+] [[#ListApplicationInstanceId|ListApplicationInstanceId]] | ||
|- | |- | ||
| | | 6 || [10.0.0+] [[#GetMicroApplicationInstanceId|GetMicroApplicationInstanceId]] | ||
|- | |- | ||
| | | 7 || [10.0.0+] [[#GetApplicationCertificate|GetApplicationCertificate]] | ||
|- | |- | ||
| 9998 || [9.0.0 | | 9998 || [9.0.0-9.2.0] [[#GetPreomiaApplicationLaunchProperty|GetPreomiaApplicationLaunchProperty]] | ||
|- | |- | ||
| 9999 || [9.0.0 | | 9999 || [9.0.0-9.2.0] [[#GetPreomiaApplicationControlProperty|GetPreomiaApplicationControlProperty]] | ||
|} | |} | ||
== GetApplicationLaunchProperty == | |||
Takes an input u64 ProcessId. Returns an [[#ApplicationLaunchProperty]]. | |||
[10.0.0+] Now takes an input [[#ApplicationInstanceId]] instead of ProcessId. | |||
== GetApplicationLaunchPropertyWithApplicationId == | |||
Takes an input u64 ApplicationId. Returns an [[#ApplicationLaunchProperty]]. | |||
== GetApplicationControlProperty == | |||
Takes an input u64 ProcessId and a type-0x16 output buffer containing an [[NACP|ApplicationControlProperty]]. No output. | |||
[10.0.0+] Now takes an input [[#ApplicationInstanceId]] instead of ProcessId. | |||
== GetApplicationControlPropertyWithApplicationId == | |||
Takes an input u64 ApplicationId and a type-0x16 output buffer containing an [[NACP|ApplicationControlProperty]]. No output. | |||
== GetApplicationProcessProperty == | |||
Takes an input [[#ApplicationInstanceId]]. Returns an [[#ApplicationProcessProperty]]. | |||
== GetApplicationInstanceId == | |||
Takes an input u64 ProcessId. Returns an [[#ApplicationInstanceId]]. | |||
== GetApplicationInstanceUnregistrationNotifier == | |||
No input. Returns an [[#IUnregistrationNotifier]]. | |||
== ListApplicationInstanceId == | |||
Takes a type-0x6 output buffer containing an array of [[#ApplicationInstanceId]]. Returns an s32 '''Count'''. | |||
== GetMicroApplicationInstanceId == | |||
Same as [[#GetApplicationInstanceId]]. | |||
== GetApplicationCertificate == | |||
Takes an input [[#ApplicationInstanceId]] and a type-0x16 output buffer containing an [[#ApplicationCertificate]]. No output. | |||
== GetPreomiaApplicationLaunchProperty == | |||
Same as [[#GetApplicationLaunchProperty]]. | |||
== GetPreomiaApplicationControlProperty == | |||
Same as [[#GetApplicationControlProperty]]. | |||
== IUnregistrationNotifier == | |||
This is "nn::arp::detail::IUnregistrationNotifier". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#GetReadableHandle|GetReadableHandle]] | |||
|} | |||
=== GetReadableHandle === | |||
No input. Returns an output readable Event handle. | |||
= arp:w = | = arp:w = | ||
Line 24: | Line 85: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#AcquireRegistrar|AcquireRegistrar]] | |||
|- | |||
| 1 || [10.0.0+] [[#UnregisterApplicationInstance|UnregisterApplicationInstance]] ([1.0.0-9.2.0] DeleteProperties) | |||
|- | |||
| 2 || [15.0.0+] [[#AcquireApplicationProcessPropertyUpdater|AcquireApplicationProcessPropertyUpdater]] ([10.0.0-14.1.2] [[#AcquireUpdater|AcquireUpdater]]) | |||
|- | |- | ||
| | | 3 || [15.0.0+] [[#AcquireApplicationCertificateUpdater|AcquireApplicationCertificateUpdater]] | ||
|- | |- | ||
| | | 4 || [19.0.0+] [[#RegisterApplicationControlProperty|RegisterApplicationControlProperty]] | ||
|} | |} | ||
== AcquireRegistrar == | |||
No input. Returns an [[#IRegistrar]]. | |||
== UnregisterApplicationInstance == | |||
Takes an input [[#ApplicationInstanceId]]. No output. | |||
== AcquireUpdater == | |||
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]]. | |||
== AcquireApplicationProcessPropertyUpdater == | |||
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]]. | |||
== AcquireApplicationCertificateUpdater == | |||
Takes an input [[#ApplicationInstanceId]]. Returns an [[#IUpdater]]. | |||
== RegisterApplicationControlProperty == | |||
Takes a type-0x15 input buffer containing an [[NACP|ApplicationControlProperty]] and an input [[#ApplicationInstanceId]]. No output. | |||
== IRegistrar == | == IRegistrar == | ||
Line 36: | Line 121: | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name || | ! Cmd || Name | ||
|- | |||
| 0 || [[#Issue|Issue]] | |||
|- | |||
| 1 || [[#SetApplicationLaunchProperty|SetApplicationLaunchProperty]] | |||
|- | |||
| 2 || [1.0.0-18.1.0] [[#SetApplicationControlProperty|SetApplicationControlProperty]] | |||
|} | |||
=== Issue === | |||
No input. Returns an output [[#ApplicationInstanceId]]. | |||
=== SetApplicationLaunchProperty === | |||
Takes an input [[#ApplicationLaunchProperty]]. No output. | |||
=== SetApplicationControlProperty === | |||
Takes a type-0x15 input buffer containing an [[NACP|ApplicationControlProperty]]. No output. | |||
== IUpdater == | |||
This is "nn::arp::detail::IUpdater". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#Issue_2|Issue]] | |||
|- | |- | ||
| | | 1 || [[#SetApplicationProcessProperty|SetApplicationProcessProperty]] | ||
|- | |- | ||
| | | 2 || [[#DeleteApplicationProcessProperty|DeleteApplicationProcessProperty]] | ||
|- | |- | ||
| | | 3 || [[#SetApplicationCertificate|SetApplicationCertificate]] | ||
|} | |} | ||
=== Issue === | |||
No input/output. | |||
=== SetApplicationProcessProperty === | |||
Takes an input u64 ProcessId and an input [[#ApplicationProcessProperty]]. No output. | |||
=== DeleteApplicationProcessProperty === | |||
No input/output. | |||
=== SetApplicationCertificate === | |||
Takes a type-0x15 input buffer containing an [[#ApplicationCertificate]]. No output. | |||
= bgtc:t = | = bgtc:t = | ||
This is "nn::bgtc::ITaskService". | |||
[11.0.0+] This is "nn::bgtc::ITaskServiceRoot". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 100 || [[#CreateTaskService]] | |||
|} | |||
== CreateTaskService == | |||
No input. Returns an [[#ITaskService]]. | |||
== ITaskService == | |||
This is "nn::bgtc::ITaskService". | This is "nn::bgtc::ITaskService". | ||
Line 74: | Line 211: | ||
| 15 || SchedulePeriodicTask | | 15 || SchedulePeriodicTask | ||
|- | |- | ||
| 16 || [9.0.0+] | | 16 || [9.0.0+] ScheduleStrictTask | ||
|- | |- | ||
| 101 || [3.0.0+] GetOperationMode | | 101 || [3.0.0+] GetOperationMode | ||
Line 81: | Line 218: | ||
|- | |- | ||
| 103 || [3.0.0+] WillStayHalfAwakeInsteadSleep | | 103 || [3.0.0+] WillStayHalfAwakeInsteadSleep | ||
|- | |||
| 200 || [12.0.0+] EnableStayHalfAwake | |||
|} | |} | ||
Line 100: | Line 239: | ||
| 5 || [3.0.0+] SetIsUsingSleepUnsupportedDevices | | 5 || [3.0.0+] SetIsUsingSleepUnsupportedDevices | ||
|} | |} | ||
[10.0.0+] NotifyEnteringHalfAwake now takes 1-byte of input. | |||
= time:a, time:r, time:u = | = time:a, time:r, time:u = | ||
Line 153: | Line 294: | ||
|- | |- | ||
| 501 || [4.0.0+] CalculateSpanBetween || | | 501 || [4.0.0+] CalculateSpanBetween || | ||
|- | |||
| 600 || [19.0.0+] GetInitialLaunchEndTime || | |||
|} | |} | ||
Line 398: | Line 541: | ||
Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. Returns an [[#AlarmSettingId]]. | Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. Returns an [[#AlarmSettingId]]. | ||
The second buffer can be empty (addr=0/size=0). This is the ApplicationParameter. | The second buffer can be empty (addr=0/size=0). Size must be <=0x400. This is the ApplicationParameter. | ||
A maximum of 8 Alarms can be registered by an Application at the same time. | A maximum of 8 Alarms can be registered by an Application at the same time. | ||
Line 409: | Line 552: | ||
Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. No output. | Takes a type-0x15 input buffer [[#AlarmSetting]] and a type-0x5 input buffer. No output. | ||
The second buffer can be empty (addr=0/size=0). This is the ApplicationParameter. | The second buffer can be empty (addr=0/size=0). Size must be <=0x400. This is the ApplicationParameter. | ||
== ListAlarmSettings == | == ListAlarmSettings == | ||
Line 424: | Line 567: | ||
= notif:s = | = notif:s = | ||
This is "nn::notification::server:: | This is "nn::notification::server::INotificationServices". | ||
This was added with [9.0.0+]. | This was added with [9.0.0+]. | ||
Line 442: | Line 585: | ||
| 540 || [[#DeleteAlarmSetting]] | | 540 || [[#DeleteAlarmSetting]] | ||
|- | |- | ||
| 1000 || | | 1000 || [[#GetNotificationCount]] | ||
|- | |- | ||
| 1010 || | | 1010 || ListNotifications | ||
|- | |- | ||
| 1020 || | | 1020 || DeleteNotification | ||
|- | |- | ||
| 1030 || | | 1030 || ClearNotifications | ||
|- | |- | ||
| 1040 || | | 1040 || [[#GetNotificationSendingNotifier]] | ||
|- | |- | ||
| 1500 || | | 1500 || SetNotificationPresentationSetting | ||
|- | |- | ||
| 1510 || | | 1510 || GetNotificationPresentationSetting | ||
|- | |- | ||
| 2000 || [[#GetAlarmSetting]] | | 2000 || [[#GetAlarmSetting]] | ||
|- | |- | ||
| 2001 || | | 2001 || GetAlarmSettingWithApplicationParameter | ||
|- | |||
| 2010 || [[#SetAlarmSettingIsMuted]] | |||
|- | |||
| 2020 || [[#IsAlarmSettingDeletable]] | |||
|- | |- | ||
| | | 3000 || [20.0.0+] | ||
|- | |- | ||
| | | 3010 || [20.0.0+] | ||
|- | |- | ||
| 8000 || | | 8000 || RegisterAppletResourceUserId | ||
|- | |- | ||
| 8010 || | | 8010 || UnregisterAppletResourceUserId | ||
|- | |- | ||
| 9000 || [[# | | 8999 || [10.0.0+] GetCurrentTime | ||
|- | |||
| 9000 || [[#GetAlarmSettingNextNotificationTime]] | |||
|} | |} | ||
== | == GetNotificationCount == | ||
No input | No input. Returns a total of 4-bytes of output. | ||
== GetNotificationSendingNotifier == | |||
No input. Returns an output [[#INotificationSystemEventAccessor]]. | |||
== | == INotificationSystemEventAccessor == | ||
This is "nn::notification::server::INotificationSystemEventAccessor". | |||
This was added with [9.0.0+]. | |||
== | {| class="wikitable" border="1" | ||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || GetSystemEvent | |||
|} | |||
No input | == GetAlarmSetting == | ||
Takes an input [[#AlarmSettingId]]. Returns an [[#AlarmSetting]]. | |||
== SetAlarmSettingIsMuted == | |||
Takes an input [[#AlarmSettingId]] and a bool. No output. | |||
== IsAlarmSettingDeletable == | |||
Takes an input [[#AlarmSettingId]]. Returns a bool. | |||
== GetAlarmSettingNextNotificationTime == | |||
Takes an input [[#AlarmSettingId]]. Returns an u8 '''IsAlarmScheduled''' and a [[Glue_services#PosixTime|PosixTime]] for the next scheduled alarm. | |||
= ectx:w = | |||
This is "nn::err::context::IWriterForSystem". | |||
This was added with [11.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#CreateContextRegistrar]] | |||
|- | |||
| 1 || CommitContext | |||
|- | |||
| 2 || RemoveContext | |||
|} | |||
== CreateContextRegistrar == | |||
No input. Returns an [[#IContextRegistrar]]. | |||
== IContextRegistrar == | |||
This is "nn::err::context::IContextRegistrar". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || Complete | |||
|} | |||
= ectx:r = | |||
This is "nn::err::context::IReaderForSystem". | |||
This was added with [11.0.0+]. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || GetContextInfo | |||
|- | |||
| 1 || PullContext | |||
|- | |||
| 2 || ListContextDescriptorWithResultForDebug | |||
|} | |||
= ectx:aw = | |||
This is "nn::err::context::IWriterForApplication". | |||
This was added with [11.0.0+]. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
| 0 || | | 0 || [[#CreateContextRegistrar]] | ||
|- | |||
| 1 || CommitContext | |||
|} | |} | ||
This was added with [ | = pl:u = | ||
This is "nn::pl::sharedresource::detail::IPlatformSharedResourceManager". | |||
This was added with [16.0.0+]. | |||
This has max_sessions 5. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Cmd || Name | |||
|- | |||
| 0 || [[#RequestLoad]] | |||
|- | |||
| 1 || [[#GetLoadState]] | |||
|- | |||
| 2 || [[#GetSize]] | |||
|- | |||
| 3 || [[#GetSharedMemoryAddressOffset]] | |||
|- | |||
| 4 || [[#GetSharedMemoryNativeHandle]] | |||
|- | |||
| 5 || [[#GetSharedFontInOrderOfPriority]] | |||
|- | |||
| 6 || GetSharedFontInOrderOfPriorityForSystem | |||
|} | |||
== RequestLoad == | |||
Takes a [[#SharedFontType]] (uint32), no output. | |||
== GetLoadState == | |||
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32). | |||
=== LoadState === | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0x00 || Loading | |||
|- | |||
| 0x01 || Loaded | |||
|} | |||
== GetSize == | |||
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32). | |||
== | == GetSharedMemoryAddressOffset == | ||
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address. | |||
== | == GetSharedMemoryNativeHandle == | ||
No input, returns an output SharedMemory handle. | |||
== | User-processes map this SharedMemory with size=0x1100000 and permissions=R--. | ||
Font data is TTF, located at the offset returned by [[#GetSharedMemoryAddressOffset]]. | |||
== | == GetSharedFontInOrderOfPriority == | ||
Takes an input u64 [[Settings_services#LanguageCode|LanguageCode]] and 3 type-0x6 output buffers, returns an output u8 and u32. The u8 is a bool to specify if the fonts are loaded or not and the u32 is the font count. | |||
The first buffer contains a list of [[#SharedFontType|Shared font types]], the second buffer contains the font offsets and the final buffer contains the font sizes. | |||
The buffers are an array of u32s which specify information about a specific font. Buffer1[n] is related to Buffer2[n] and Buffer3[n]. | |||
Example: Font index 0s offset is at Buffer2[0], size is at Buffer3[0]. | |||
The fonts are relative to the shared memory created by [[#GetSharedFontSharedMemoryHandle]] | |||
== SharedFontType == | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0x00 || Japan, US and Europe (Standard) | |||
|- | |||
| 0x01 || Chinese Simplified | |||
|- | |||
| 0x02 || Extended Chinese Simplified | |||
|- | |||
| 0x03 || Chinese Traditional | |||
|- | |||
| 0x04 || Korean (Hangul) | |||
|- | |||
| 0x05 || Nintendo Extended | |||
|} | |||
* Nintendo Extended: Contains Nintendo-specific characters, including HID buttons, HID controller styles, applet icons, Wii(U) icons, etc. | |||
= | = ApplicationInstanceId = | ||
This is "nn::arp::ApplicationInstanceId". | |||
This is an u64 ID bound to an application instance. | |||
= | = ApplicationKind = | ||
This is "nn::arp::ApplicationKind". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value | |||
! Description | |||
|- | |||
| 0 || Application | |||
|- | |||
| 1 || MicroApplication | |||
|} | |||
= ApplicationLaunchProperty = | = ApplicationLaunchProperty = | ||
This is "nn::arp::ApplicationLaunchProperty". | |||
This is a 0x10-byte struct. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 537: | Line 822: | ||
| 0x00 | | 0x00 | ||
| 0x08 | | 0x08 | ||
| | | [[NCM_services#ProgramId|Id]] | ||
|- | |- | ||
| 0x08 | | 0x08 | ||
Line 545: | Line 830: | ||
| 0x0C | | 0x0C | ||
| 0x01 | | 0x01 | ||
| | | [[Filesystem_services#StorageId|Storage]] | ||
|- | |- | ||
| 0x0D | | 0x0D | ||
| 0x01 | | 0x01 | ||
| | | [[Filesystem_services#StorageId|PatchStorage]] | ||
|- | |- | ||
| 0x0E | | 0x0E | ||
| | | 0x01 | ||
| | | [[#ApplicationKind|Kind]] | ||
|- | |||
| 0x0F | |||
| 0x01 | |||
| Reserved | |||
|} | |||
= ApplicationProcessProperty = | |||
This is "nn::arp::ApplicationProcessProperty". | |||
This is a 0x1-byte struct. | |||
[17.0.0+] This is a 0x10-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x01 | |||
| ProgramIndex | |||
|- | |||
| 0x01 | |||
| 0x0F | |||
| | |||
|} | |} | ||
= ApplicationCertificate = | |||
This is "nn::arp::ApplicationCertificate". | |||
This is a 0x528-byte struct. | |||
= AlarmSettingId = | = AlarmSettingId = | ||
Line 578: | Line 894: | ||
| 0x03 | | 0x03 | ||
| 0x01 | | 0x01 | ||
| Muted | | u8 bool Muted (non-zero/true = AlarmSetting turned off, zero/false = on). | ||
|- | |- | ||
| 0x04 | | 0x04 | ||
Line 586: | Line 902: | ||
| 0x08 | | 0x08 | ||
| 0x10 | | 0x10 | ||
| UID | | UID. User account associated with this AlarmSetting. Used for the PreselectedUser when launching the Application when the system was previously in sleep-mode, instead of launching the applet for selecting the user. | ||
|- | |- | ||
| 0x18 | | 0x18 |