Line 1: |
Line 1: |
| BCAT (Background Content Asymmetric synchronized delivery and Transmission) encompasses a set of content download/upload related services. | | BCAT (Background Content Asymmetric synchronized delivery and Transmission) encompasses a set of content download/upload related services. |
| | | |
− | = BCAT services = | + | = bcat:a, bcat:m, bcat:u, bcat:s = |
− | == bcat:u ==
| + | These are "nn::bcat::ipc::IServiceCreator". |
| | | |
− | == bcat:s ==
| + | These were added with [2.0.0+]. |
| | | |
− | == bcat:m == | + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#CreateBcatService]] |
| + | |- |
| + | | 1 || [[#CreateDeliveryCacheStorageService]] |
| + | |- |
| + | | 2 || [[#CreateDeliveryCacheStorageServiceWithApplicationId]] |
| + | |- |
| + | | 3 || [2.0.0-2.3.0] [[#CreateDeliveryCacheProgressService]] |
| + | |- |
| + | | 4 || [2.0.0-2.3.0] [[#CreateDeliveryCacheProgressServiceWithApplicationId]] |
| + | |} |
| + | |
| + | Equivalent to 3DS BOSS(SpotPass). See [[BCAT_Content_Container|here]] for BCAT-content-container. |
| + | |
| + | == CreateBcatService == |
| + | Takes an input u64 ProcessId. Returns an [[#IBcatService]]. |
| + | |
| + | == CreateDeliveryCacheStorageService == |
| + | Takes an input u64 ProcessId. Returns an [[#IDeliveryCacheStorageService]]. |
| + | |
| + | == CreateDeliveryCacheStorageServiceWithApplicationId == |
| + | Takes an input u64 <code>nn::ApplicationId</code>. Returns an [[#IDeliveryCacheStorageService]]. |
| + | |
| + | == CreateDeliveryCacheProgressService == |
| + | Takes an input u64 ProcessId. Returns an [[#IDeliveryCacheProgressService]]. |
| + | |
| + | == CreateDeliveryCacheProgressServiceWithApplicationId == |
| + | Takes an input u64 <code>nn::ApplicationId</code>. returns an [[#IDeliveryCacheProgressService]]. |
| + | |
| + | == IBcatService == |
| + | This is "nn::bcat::ipc::IBcatService". |
| + | |
| + | This was added with [2.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 10100 || [[#RequestSyncDeliveryCache]] |
| + | |- |
| + | | 10101 || [5.0.0+] RequestSyncDeliveryCacheWithDirectoryName |
| + | |- |
| + | | 10200 || [5.0.0+] CancelSyncDeliveryCacheRequest |
| + | |- |
| + | | 20100 || [[#RequestSyncDeliveryCacheWithApplicationId]] |
| + | |- |
| + | | 20101 || [5.0.0+] RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName |
| + | |- |
| + | | 20300 || [8.0.0+] [[#GetDeliveryCacheStorageUpdateNotifier]] |
| + | |- |
| + | | 20301 || [8.0.0+] [[#RequestSuspendDeliveryTask]] |
| + | |- |
| + | | 20400 || [9.0.0+] [[#RegisterSystemApplicationDeliveryTask]] |
| + | |- |
| + | | 20401 || [9.0.0+] [[#UnregisterSystemApplicationDeliveryTask]] |
| + | |- |
| + | | 20410 || [9.1.0+] SetSystemApplicationDeliveryTaskTimer |
| + | |- |
| + | | 30100 || [[#SetPassphrase]] |
| + | |- |
| + | | 30101 || [2.0.0-2.3.0] |
| + | |- |
| + | | 30102 || [2.0.0-2.3.0] |
| + | |- |
| + | | 30200 || [3.0.0+] RegisterDeliveryTask |
| + | |- |
| + | | 30201 || [3.0.0+] UnregisterDeliveryTask |
| + | |- |
| + | | 30202 || [3.0.0+] BlockDeliveryTask |
| + | |- |
| + | | 30203 || [3.0.0+] UnblockDeliveryTask |
| + | |- |
| + | | 30210 || [9.1.0+] SetDeliveryTaskTimer |
| + | |- |
| + | | 30300 || [8.0.0+] RegisterSystemApplicationDeliveryTasks |
| + | |- |
| + | | 90100 || GetDeliveryTaskList |
| + | |- |
| + | | 90101 || [11.0.0+] GetDeliveryTaskListForSystem |
| + | |- |
| + | | 90200 || [[#GetDeliveryList]] |
| + | |- |
| + | | 90201 || [3.0.0+] ClearDeliveryCacheStorage |
| + | |- |
| + | | 90202 || [8.0.0+] ClearDeliveryTaskSubscriptionStatus |
| + | |- |
| + | | 90300 || [3.0.0+] GetPushNotificationLog |
| + | |- |
| + | | 90301 || [11.0.0+] GetDeliveryCacheStorageUsage |
| + | |} |
| + | |
| + | === RequestSyncDeliveryCache === |
| + | No input/output. |
| + | |
| + | [3.0.0+] Now returns an [[#IDeliveryCacheProgressService]]. |
| + | |
| + | === RequestSyncDeliveryCacheWithApplicationId === |
| + | Takes an input u64 <code>nn::ApplicationId</code>. No output. |
| + | |
| + | [3.0.0+] Now takes an additional 8-bytes of input, and returns an [[#IDeliveryCacheProgressService]]. |
| + | |
| + | === GetDeliveryCacheStorageUpdateNotifier === |
| + | Takes an input u64 <code>nn::ApplicationId</code>. Returns an [[#INotifierService]]. |
| + | |
| + | === RequestSuspendDeliveryTask === |
| + | Takes an input u64 <code>nn::ApplicationId</code>. Returns an [[#IDeliveryTaskSuspensionService]]. |
| + | |
| + | === RegisterSystemApplicationDeliveryTask === |
| + | Takes an input u64 <code>nn::ApplicationId</code>. No output. |
| + | |
| + | === UnregisterSystemApplicationDeliveryTask === |
| + | Takes an input u64 <code>nn::ApplicationId</code>. No output. |
| + | |
| + | === SetPassphrase === |
| + | Takes an input u64 <code>nn::ApplicationId</code> and a type-0x9 input buffer. No output. |
| + | |
| + | === GetDeliveryList === |
| + | Takes a type-0x6 output buffer. Returns a total of 4-bytes of output. |
| + | |
| + | [3.0.0+] Now takes a total of 8-bytes of input, and returns an additional 4-bytes of output. |
| + | |
| + | === IDeliveryCacheProgressService === |
| + | This is "nn::bcat::ipc::IDeliveryCacheProgressService". |
| + | |
| + | This was added with [2.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || GetEvent |
| + | |- |
| + | | 1 || GetImpl |
| + | |} |
| + | |
| + | == IDeliveryCacheStorageService == |
| + | This is "nn::bcat::ipc::IDeliveryCacheStorageService". |
| + | |
| + | This was added with [2.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || CreateFileService |
| + | |- |
| + | | 1 || CreateDirectoryService |
| + | |- |
| + | | 10 || EnumerateDeliveryCacheDirectory |
| + | |} |
| + | |
| + | === IDeliveryCacheFileService === |
| + | This is "nn::bcat::ipc::IDeliveryCacheFileService". |
| + | |
| + | This was added with [2.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || Open |
| + | |- |
| + | | 1 || Read |
| + | |- |
| + | | 2 || GetSize |
| + | |- |
| + | | 3 || GetDigest |
| + | |} |
| + | |
| + | === IDeliveryCacheDirectoryService === |
| + | This is "nn::bcat::ipc::IDeliveryCacheDirectoryService". |
| + | |
| + | This was added with [2.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || Open |
| + | |- |
| + | | 1 || Read |
| + | |- |
| + | | 2 || GetCount |
| + | |} |
| + | |
| + | === INotifierService === |
| + | This is "nn::bcat::ipc::INotifierService". |
| + | |
| + | Added with [8.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name || Notes |
| + | |- |
| + | | 0 || GetEvent || |
| + | |} |
| + | |
| + | === IDeliveryTaskSuspensionService === |
| + | This is "nn::bcat::ipc::IDeliveryTaskSuspensionService". |
| + | |
| + | Added with [8.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || GetEvent |
| + | |} |
| + | |
| + | = <nowiki>news:a, news:c, news:m, news:p, news:v</nowiki> = |
| + | These are <nowiki>"nn::news::detail::ipc::IServiceCreator"</nowiki>. |
| + | |
| + | On [1.0.0] these are <nowiki>"nn::news::detail::ipc::INewsService"</nowiki>, see [[#INewsService]]. |
| + | |
| + | News entries are fetched from CDN[https://switchbrew.org/wiki/Network#Others]. |
| + | Metadata for each entry is stored and queried from an internal SQLite database. |
| + | Official software uses sqlite[https://www.sqlite.org/download.html] for processing. |
| + | |
| + | All sessions have 32 sessions. |
| + | Permission masks are: |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Name || Mask |
| + | |- |
| + | | <nowiki>news:a</nowiki> || 0xffffffff |
| + | |- |
| + | | <nowiki>news:p</nowiki> || 0x1 |
| + | |- |
| + | | <nowiki>news:c</nowiki> || 0x2 |
| + | |- |
| + | | <nowiki>news:v</nowiki> || 0x4 |
| + | |- |
| + | | <nowiki>news:m</nowiki> || 0xd |
| + | |} |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#CreateNewsService|CreateNewsService]] |
| + | |- |
| + | | 1 || [[#CreateNewlyArrivedEventHolder|CreateNewlyArrivedEventHolder]] |
| + | |- |
| + | | 2 || [[#CreateNewsDataService|CreateNewsDataService]] |
| + | |- |
| + | | 3 || [[#CreateNewsDatabaseService|CreateNewsDatabaseService]] |
| + | |- |
| + | | 4 || [[#CreateOverwriteEventHolder|CreateOverwriteEventHolder]] |
| + | |} |
| + | |
| + | == CreateNewsService == |
| + | No input. Returns an [[#INewsService]]. |
| + | |
| + | == CreateNewlyArrivedEventHolder == |
| + | No input. Returns an [[#INewlyArrivedEventHolder]]. |
| + | |
| + | == CreateNewsDataService == |
| + | No input. Returns an [[#INewsDataService]]. |
| + | |
| + | Requires permission bit 2. |
| + | |
| + | == CreateNewsDatabaseService == |
| + | No input. Returns an [[#INewsDatabaseService]]. |
| + | |
| + | Requires permission bit 2. |
| + | |
| + | == CreateOverwriteEventHolder == |
| + | No input. Returns an [[#IOverwriteEventHolder]]. |
| + | |
| + | == INewsService == |
| + | This is <nowiki>"nn::news::detail::ipc::INewsService"</nowiki>. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name || Required Permission Bits |
| + | |- |
| + | | 10100 || [[#PostLocalNews]] || 0 |
| + | |- |
| + | | 20100 || SetPassphrase || 1 |
| + | |- |
| + | | 30100 || GetSubscriptionStatus || 1 or 2 |
| + | |- |
| + | | 30101 || [3.0.0+] GetTopicList || 2 |
| + | |- |
| + | | 30110 || [6.0.0+] || 2 |
| + | |- |
| + | | 30200 || [[#IsSystemUpdateRequired]] || 2 |
| + | |- |
| + | | 30201 || [8.0.0+] || 2 |
| + | |- |
| + | | 30210 || [10.0.0+] || 2 |
| + | |- |
| + | | 30300 || RequestImmediateReception || 2 |
| + | |- |
| + | | 30400 || [3.0.0-18.1.0] DecodeArchiveFile || 2 |
| + | |- |
| + | | 30500 || [8.0.0+] ? || 2 |
| + | |- |
| + | | 30900 || [1.0.0] (No input, returns an [[#INewlyArrivedEventHolder]]) || 2 |
| + | |- |
| + | | 30901 || [1.0.0] (No input, returns an [[#INewsDataService]]) || 2 |
| + | |- |
| + | | 30902 || [1.0.0] (No input, returns an [[#INewsDatabaseService]]) || 2 |
| + | |- |
| + | | 40100 || SetSubscriptionStatus || 1 or 3 |
| + | |- |
| + | | 40101 || [3.0.0+] RequestAutoSubscription || 3 |
| + | |- |
| + | | 40200 || ClearStorage || 3 |
| + | |- |
| + | | 40201 || ClearSubscriptionStatusAll || 1 or 3 |
| + | |- |
| + | | 90100 || [[#GetNewsDatabaseDump]] || 4 |
| + | |} |
| + | |
| + | === PostLocalNews === |
| + | Takes an input buffer msgpack. |
| + | |
| + | === 30110 === |
| + | Returns two u64s. Current usage and total size of the news-mounted savedata 0x8000000000000090. |
| + | |
| + | === IsSystemUpdateRequired === |
| + | Matches the version in news-sys:/sup.version against the result from system setting news!system_version. |
| + | |
| + | === 30210 === |
| + | Returns the Database version retrieved from system setting news!db_version |
| + | |
| + | === 30500 === |
| + | Takes a type-0x9 input buffer URL, the size of the transfer memory and a handle for the latter, returns an [[#IDownloadContext]]. |
| + | Downloaded files need to be encrypted [https://switchbrew.org/wiki/BCAT_Content_Container BCAT Content Container] (Crypto type 1-3). |
| + | Files will be decrypted before being stored in the transfer memory. |
| + | |
| + | === GetNewsDatabaseDump === |
| + | Dumps internal SQLite file. |
| + | |
| + | == INewlyArrivedEventHolder == |
| + | This is <nowiki>"nn::news::detail::ipc::INewlyArrivedEventHolder"</nowiki>. |
| + | |
| + | [19.0.0+] This is now <nowiki>"nn::news::detail::ipc::INewArrivalEventHolder"</nowiki>. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Get]] |
| + | |} |
| + | |
| + | === Get === |
| + | Returns readable event. |
| + | Event is signaled on PostLocalNews or on fetch from CDN if the file doesn't exist. |
| + | |
| + | == INewsDataService == |
| + | This is <nowiki>"nn::news::detail::ipc::INewsDataService"</nowiki>. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Open]] |
| + | |- |
| + | | 1 || [[#OpenWithNewsRecordV1]] |
| + | |- |
| + | | 2 || [[#Read]] |
| + | |- |
| + | | 3 || [[#GetSize]] |
| + | |- |
| + | | 1001 || [6.0.0+] [[#OpenWithNewsRecord]] |
| + | |- |
| + | | 1100 || [19.0.0+] |
| + | |} |
| + | |
| + | === Open === |
| + | Takes an input string. Opens file with the output of snprintf from <nowiki>"news:/data/%s"</nowiki> with input. |
| + | |
| + | === OpenWithNewsRecordV1 === |
| + | Takes an input [[#NewsRecordV1]]. Opens file with the output of snprintf of <nowiki>"news:/data/D00000000000000000000_%s.msgpack"</nowiki> with news_id if user_id is empty or else of <nowiki>"news:/data/U%s_%s.msgpack"</nowiki> with user_id and news_id of input. |
| + | |
| + | === Read === |
| + | Read from file opened with [[#Open]], [[#OpenWithNewsRecordV1]] or [[#OpenWithNewsRecord]]. |
| + | |
| + | === GetSize === |
| + | Get size of file opened with [[#Open]], [[#OpenWithNewsRecordV1]] or [[#OpenWithNewsRecord]]. |
| + | |
| + | === OpenWithNewsRecord=== |
| + | Takes an input [[#NewsRecord]]. Same behavior as [[#OpenWithNewsRecordV1]]. |
| + | |
| + | == INewsDatabaseService == |
| + | This is <nowiki>"nn::news::detail::ipc::INewsDatabaseService"</nowiki>. |
| + | |
| + | [19.0.0+] This is now <nowiki>"nn::news::detail::ipc::IDeviceNewsDatabaseService"</nowiki>. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || GetListV1 |
| + | |- |
| + | | 1 || Count |
| + | |- |
| + | | 2 || CountWithKey |
| + | |- |
| + | | 3 || UpdateIntegerValue |
| + | |- |
| + | | 4 || UpdateIntegerValueWithAddition |
| + | |- |
| + | | 5 || UpdateStringValue |
| + | |- |
| + | | 1000 || [6.0.0+] GetList |
| + | |} |
| + | |
| + | == IOverwriteEventHolder == |
| + | This is <nowiki>"nn::news::detail::ipc::IOverwriteEventHolder"</nowiki>. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Get]] |
| + | |} |
| + | |
| + | === Get === |
| + | Returns readable event. |
| + | Event is signaled on fetch from CDN if the file already exists. |
| + | |
| + | == IDownloadContext == |
| + | This is <nowiki>"nn::news::detail::ipc::IDownloadContext"</nowiki>. |
| + | |
| + | This was added with [8.0.0+]. |
| + | |
| + | On creation this object is enqueued and an event is signaled prompting a download from another thread (nn.news.Downloader). |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Get]] |
| + | |- |
| + | | 1 || [[#Cancel]] |
| + | |- |
| + | | 2 || [[#GetResult]] |
| + | |- |
| + | | 3 || [[#GetSize]] |
| + | |} |
| | | |
− | == bcat:a == | + | === Get === |
| + | Unofficial name. |
| | | |
| + | Return event handle. Signaled on download finish. |
| | | |
− | = News services = | + | === Cancel === |
| + | Unofficial name. |
| | | |
− | == <nowiki>news:p</nowiki> ==
| + | Cancels Download. |
| | | |
− | == <nowiki>news:v</nowiki> == | + | === GetResult === |
| + | Unofficial name. |
| | | |
− | == <nowiki>news:m</nowiki> ==
| + | Returns last result. |
| | | |
− | == <nowiki>news:c</nowiki> == | + | === GetSize === |
| + | Unofficial name. |
| | | |
− | == <nowiki>news:a</nowiki> ==
| + | Returns final decoded size. 0 if the result of [[#GetResult]] is not 0 or Download isn't finished/was canceled. |
| | | |
| + | == NewsDatabase == |
| + | Internal SQLite database. Has a second version since 6.0.0. |
| | | |
− | = Play Report services = | + | {| class="wikitable" border="1" |
− | The "Play Report" (prepo) service uploads system and user information to a cloud server.
| + | |- |
− | This includes the following fields:
| + | ! Name |
− | sys_info
| + | ! Type |
− | data
| + | ! Exists |
− | application_id
| + | |- |
− | event_id
| + | | news_id || TEXT || All |
− | operation_mode
| + | |- |
− | lc_recorded_at (followed by a timestamp)
| + | | user_id || TEXT || All |
− | nc_recorded_at (followed by a timestamp)
| + | |- |
− | nsa_id
| + | | topic_id || TEXT || All |
− | os_version
| + | |- |
| + | | application_ids || TEXT || All |
| + | |- |
| + | | received_at || INTEGER || All |
| + | |- |
| + | | published_at || INTEGER || All |
| + | |- |
| + | | expire_at || INTEGER || All |
| + | |- |
| + | | pickup_limit || INTEGER || All |
| + | |- |
| + | | essential_pickup_limit || INTEGER || Only V2 |
| + | |- |
| + | | priority || INTEGER || All |
| + | |- |
| + | | deletion_priority || INTEGER || All |
| + | |- |
| + | | age_limit || INTEGER || All |
| + | |- |
| + | | surprise || INTEGER || All |
| + | |- |
| + | | bashotorya || INTEGER || Only V1 |
| + | |- |
| + | | decoration_type || INTEGER || Only V2 |
| + | |- |
| + | | point || INTEGER || All |
| + | |- |
| + | | read || INTEGER || All |
| + | |- |
| + | | newly || INTEGER || All |
| + | |- |
| + | | displayed || INTEGER || All |
| + | |- |
| + | | opted_in || INTEGER || All |
| + | |- |
| + | | point_status || INTEGER || All |
| + | |- |
| + | | feedback || INTEGER || Only V2 |
| + | |- |
| + | | extra_1 || INTEGER || All |
| + | |- |
| + | | extra_2 || INTEGER || All |
| + | |- |
| + | |} |
| + | |
| + | == NewsRecordV1 == |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! SQLite association |
| + | |- |
| + | | 0x0 || 0x18 || TEXT news_id |
| + | |- |
| + | | 0x18 || 0x18 || TEXT user_id |
| + | |- |
| + | | 0x30 || 0x8 || INTEGER received_id |
| + | |- |
| + | | 0x38 || 0x4 || INTEGER news |
| + | |- |
| + | | 0x3c || 0x4 || INTEGER newly |
| + | |- |
| + | | 0x40 || 0x4 || INTEGER displayed |
| + | |- |
| + | | 0x44 || 0x4 || none |
| + | |- |
| + | |} |
| + | |
| + | == NewsRecord == |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! SQLite association |
| + | |- |
| + | | 0x0 || 0x18 || TEXT news_id |
| + | |- |
| + | | 0x18 || 0x18 || TEXT user_id |
| + | |- |
| + | | 0x30 || 0x20 || TEXT topic_id |
| + | |- |
| + | | 0x50 || 0x8 || INTEGER received_id |
| + | |- |
| + | | 0x58 || 0x8 || none |
| + | |- |
| + | | 0x60 || 0x4 || INTEGER decoration_type |
| + | |- |
| + | | 0x64 || 0x4 || INTEGER read |
| + | |- |
| + | | 0x68 || 0x4 || INTEGER newly |
| + | |- |
| + | | 0x6c || 0x4 || INTEGER displayed |
| + | |- |
| + | | 0x70 || 0x4 || INTEGER feedback |
| + | |- |
| + | | 0x74 || 0x4 || none |
| + | |- |
| + | | 0x78 || 0x4 || INTEGER extra_1 |
| + | |- |
| + | | 0x7c || 0x4 || INTEGER extra_2 |
| + | |- |
| + | |} |
| + | |
| + | = prepo:a, prepo:a2, prepo:m, prepo:u, prepo:s = |
| + | These are "nn::prepo::detail::ipc::IPrepoService". |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 10100 || SaveReportOld ([1.0.0-5.1.0] SaveReport) |
| + | |- |
| + | | 10101 || SaveReportWithUserOld ([1.0.0-5.1.0] SaveReportWithUser) |
| + | |- |
| + | | 10102 || [6.0.0+] SaveReportOld2 ([1.0.0-9.2.0] SaveReport) |
| + | |- |
| + | | 10103 || [6.0.0+] SaveReportWithUserOld2 ([1.0.0-9.2.0] SaveReportWithUser) |
| + | |- |
| + | | 10104 || [10.0.0+] SaveReport |
| + | |- |
| + | | 10105 || [10.0.0+] SaveReportWithUser |
| + | |- |
| + | | 10200 || RequestImmediateTransmission |
| + | |- |
| + | | 10300 || GetTransmissionStatus |
| + | |- |
| + | | 10400 || [9.0.0+] GetSystemSessionId |
| + | |- |
| + | | 10500 || [15.0.0+] SendReportWithUser |
| + | |- |
| + | | 20100 || SaveSystemReport |
| + | |- |
| + | | 20101 || SaveSystemReportWithUser |
| + | |- |
| + | | 20200 || [4.0.0+] SetOperationMode |
| + | |- |
| + | | 30100 || ClearStorage |
| + | |- |
| + | | 30200 || [6.0.0+] ClearStatistics |
| + | |- |
| + | | 30300 || [6.0.0+] GetStorageUsage |
| + | |- |
| + | | 30400 || [6.0.0+] GetStatistics |
| + | |- |
| + | | 30401 || [6.0.0+] GetThroughputHistory |
| + | |- |
| + | | 30500 || [6.0.0+] GetLastUploadError |
| + | |- |
| + | | 30600 || [10.0.0+] GetApplicationUploadSummary |
| + | |- |
| + | | 40100 || [2.0.0+] IsUserAgreementCheckEnabled |
| + | |- |
| + | | 40101 || [2.0.0+] SetUserAgreementCheckEnabled |
| + | |- |
| + | | 50100 || [10.0.0+] ReadAllApplicationReportFiles |
| + | |- |
| + | | 90100 || [6.0.0+] ReadAllReportFiles ([1.0.0-5.1.0] GetStorageUsage) |
| + | |- |
| + | | 90101 || [1.0.0] |
| + | |- |
| + | | 90102 || [1.0.0] |
| + | |- |
| + | | 90200 || [5.0.0-5.1.0] GetStatistics |
| + | |- |
| + | | 90201 || [5.0.0-5.1.0] GetThroughputHistory |
| + | |- |
| + | | 90300 || [5.0.0-5.1.0] GetLastUploadError |
| + | |} |
| + | |
| + | = mnpp:app = |
| + | This is "nn::mnpp::detail::ipc::IServiceForApplication". |
| + | |
| + | This was added with [13.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Initialize]] |
| + | |- |
| + | | 1 || [[#SubmitEvent]] |
| + | |} |
| + | |
| + | == Initialize == |
| + | Unofficial name. |
| + | |
| + | Takes a PID-descriptor and a reserved input u64. No output. |
| + | |
| + | Uses [[Glue_services#arp:r|arp:r]] commands [[Glue_services#GetApplicationInstanceId|GetApplicationInstanceId]] and [[Glue_services#GetApplicationLaunchProperty|GetApplicationLaunchProperty]] to get and store the application's [[NCM_services#ProgramId|ProgramId]]. |
| + | |
| + | == SubmitEvent == |
| + | Unofficial name. |
| | | |
− | And the contents of the following file:
| + | Takes an input [[Account_services#Uid|Uid]] and a type-0x5 input buffer. No output. |
− | is_user_agreement_check_enabled.bin
| |
| | | |
− | All the information is periodically uploaded to the following URL:<br>
| + | Uses the input buffer's contents to create a "mission event" which is later uploaded to "fw-api.%.nso.nintendo.net/v1/events". |
− | https: //receive-%.dg.srv.nintendo.net/post
| |
| | | |
− | It also checks the validity of the device's authentication token using the following URL:<br>
| + | = mnpp:sys = |
− | https: //dauth-%.ndas.srv.nintendo.net/v1/device_auth_token
| + | This is "nn::mnpp::detail::ipc::IServiceForSystem". |
| | | |
− | == prepo:u ==
| + | This was added with [13.0.0+]. |
| | | |
− | == prepo:s ==
| |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 10100 || | + | | 0 || |
| |- | | |- |
− | | 10101 || | + | | 100 || |
| |- | | |- |
− | | 10200 || | + | | 200 || [13.1.0-13.2.1] |
| |- | | |- |
− | | 10300 || | + | | 300 || [13.1.0-14.1.2] |
| |- | | |- |
− | | 20100 || | + | | 400 || [14.0.0-14.1.2] |
| + | |} |
| + | |
| + | = mnpp:web = |
| + | This is "nn::mnpp::detail::ipc::IServiceForWebBrowser". |
| + | |
| + | This was added with [13.0.0+]. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| |- | | |- |
− | | 20101 || | + | | 0 || |
| |- | | |- |
− | | 30100 || | + | | 1 || [14.0.0+] |
| |- | | |- |
− | | 40100 || | + | | 10 || [14.0.0+] |
| |- | | |- |
− | | 40101 || | + | | 20 || [14.0.0+] |
| |- | | |- |
− | | 90100 || | + | | 100 || [16.1.0+] |
| |} | | |} |
| | | |
− | == prepo:m == | + | = Data reporting = |
| + | The "Play Report" (prepo) service uploads system and user information to a cloud server. |
| + | This includes the following fields: |
| + | sys_info |
| + | data |
| + | application_id |
| + | event_id |
| + | operation_mode |
| + | lc_recorded_at (followed by a timestamp) |
| + | nc_recorded_at (followed by a timestamp) |
| + | nsa_id |
| + | os_version |
| | | |
− | == prepo:a ==
| + | And the contents of the following file: |
| + | is_user_agreement_check_enabled.bin |
| + | |
| + | All the information is periodically uploaded to the following URL:<br> |
| + | * <nowiki>https://receive-%.dg.srv.nintendo.net/post</nowiki> |
| + | |
| + | It also checks the validity of the device's authentication token using the following URL:<br> |
| + | * <nowiki>https://dauth-%.ndas.srv.nintendo.net/v1/device_auth_token</nowiki> |
| | | |
| [[Category:Services]] | | [[Category:Services]] |