Difference between revisions of "BCAT services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(12 intermediate revisions by 5 users not shown)
Line 3: Line 3:
 
= bcat:a, bcat:m, bcat:u, bcat:s =
 
= bcat:a, bcat:m, bcat:u, bcat:s =
 
These are "nn::bcat::detail::ipc::IServiceCreator".
 
These are "nn::bcat::detail::ipc::IServiceCreator".
 +
 +
These were added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Cmd || Name || Notes
 +
|-
 +
| 0 || CreateBcatService || Takes an input u64 ProcessId, returns an [[#IBcatService]]
 +
|-
 +
| 1 || CreateDeliveryCacheStorageService || Takes an input u64 ProcessId, returns an [[#IDeliveryCacheStorageService]]
 
|-
 
|-
| 0 || CreateBcatService
+
| 2 || CreateDeliveryCacheStorageServiceWithApplicationId || Takes an input u64 TitleId, returns an [[#IDeliveryCacheStorageService]]
 
|-
 
|-
| 1 || CreateDeliveryCacheStorageService
+
| [2.0.0-2.3.0] 3 || CreateDeliveryCacheProgressService || Takes an input u64 ProcessId, returns an [[#IDeliveryCacheProgressService]]
 
|-
 
|-
| 2 || CreateDeliveryCacheStorageServiceWithApplicationId
+
| [2.0.0-2.3.0] 4 || CreateDeliveryCacheProgressServiceWithApplicationId || Takes an input u64 TitleId, returns an [[#IDeliveryCacheProgressService]]
 
|}
 
|}
  
Line 19: Line 25:
 
== IBcatService ==
 
== IBcatService ==
 
This is "nn::bcat::detail::ipc::IBcatService".
 
This is "nn::bcat::detail::ipc::IBcatService".
 +
 +
This was added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 24: Line 32:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 10100 || RequestSyncDeliveryCache
+
| 10100 || [[#RequestSyncDeliveryCache]]
 
|-
 
|-
 
| 10101 || [5.0.0+] RequestSyncDeliveryCacheWithDirectoryName
 
| 10101 || [5.0.0+] RequestSyncDeliveryCacheWithDirectoryName
Line 30: Line 38:
 
| 10200 || [5.0.0+] CancelSyncDeliveryCacheRequest
 
| 10200 || [5.0.0+] CancelSyncDeliveryCacheRequest
 
|-
 
|-
| 20100 || RequestSyncDeliveryCacheWithApplicationId
+
| 20100 || [[#RequestSyncDeliveryCacheWithApplicationId]]
 
|-
 
|-
 
| 20101 || [5.0.0+] RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName
 
| 20101 || [5.0.0+] RequestSyncDeliveryCacheWithApplicationIdAndDirectoryName
Line 37: Line 45:
 
|-
 
|-
 
| 20301 || [8.0.0+] [[#RequestSuspendDeliveryTask]]
 
| 20301 || [8.0.0+] [[#RequestSuspendDeliveryTask]]
 +
|-
 +
| 20400 || [9.0.0+] [[#RegisterSystemApplicationDeliveryTask]]
 +
|-
 +
| 20401 || [9.0.0+] [[#UnregisterSystemApplicationDeliveryTask]]
 
|-
 
|-
 
| 30100 || SetPassphrase
 
| 30100 || SetPassphrase
 
|-
 
|-
| 30200 || RegisterDeliveryTask
+
| 30101 || [2.0.0-2.3.0]
 
|-
 
|-
| 30201 || UnregisterDeliveryTask
+
| 30102 || [2.0.0-2.3.0]
 
|-
 
|-
| 30202 || BlockDeliveryTask
+
| 30200 || [3.0.0+] RegisterDeliveryTask
 
|-
 
|-
| 30203 || UnblockDeliveryTask
+
| 30201 || [3.0.0+] UnregisterDeliveryTask
 +
|-
 +
| 30202 || [3.0.0+] BlockDeliveryTask
 +
|-
 +
| 30203 || [3.0.0+] UnblockDeliveryTask
 
|-
 
|-
 
| 30300 || [8.0.0+] RegisterSystemApplicationDeliveryTasks
 
| 30300 || [8.0.0+] RegisterSystemApplicationDeliveryTasks
Line 52: Line 68:
 
| 90100 || GetDeliveryTaskList
 
| 90100 || GetDeliveryTaskList
 
|-
 
|-
| 90200 || GetDeliveryList
+
| 90200 || [[#GetDeliveryList]]
 
|-
 
|-
| 90201 || ClearDeliveryCacheStorage
+
| 90201 || [3.0.0+] ClearDeliveryCacheStorage
 
|-
 
|-
 
| 90202 || [8.0.0+] ClearDeliveryTaskSubscriptionStatus
 
| 90202 || [8.0.0+] ClearDeliveryTaskSubscriptionStatus
 
|-
 
|-
| 90300 || GetPushNotificationLog
+
| 90300 || [3.0.0+] GetPushNotificationLog
 
|}
 
|}
 +
 +
=== RequestSyncDeliveryCache ===
 +
No input/output.
 +
 +
[3.0.0+] Now returns an [[#IDeliveryCacheProgressService]].
 +
 +
=== RequestSyncDeliveryCacheWithApplicationId ===
 +
Takes a total of 8-bytes of input, no output.
 +
 +
[3.0.0+] Now takes an additional 8-bytes of input, and returns an [[#IDeliveryCacheProgressService]].
  
 
=== GetDeliveryCacheStorageUpdateNotifier ===
 
=== GetDeliveryCacheStorageUpdateNotifier ===
Line 66: Line 92:
 
=== RequestSuspendDeliveryTask ===
 
=== RequestSuspendDeliveryTask ===
 
Takes a total of 8-bytes of input, returns an [[#IDeliveryTaskSuspensionService]].
 
Takes a total of 8-bytes of input, 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.
 +
 +
=== 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 ===
 
=== IDeliveryCacheProgressService ===
 
This is "nn::bcat::detail::ipc::IDeliveryCacheProgressService".
 
This is "nn::bcat::detail::ipc::IDeliveryCacheProgressService".
 +
 +
This was added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 81: Line 120:
 
== IDeliveryCacheStorageService ==
 
== IDeliveryCacheStorageService ==
 
This is "nn::bcat::detail::ipc::IDeliveryCacheStorageService".
 
This is "nn::bcat::detail::ipc::IDeliveryCacheStorageService".
 +
 +
This was added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 95: Line 136:
 
=== IDeliveryCacheFileService ===
 
=== IDeliveryCacheFileService ===
 
This is "nn::bcat::detail::ipc::IDeliveryCacheFileService".
 
This is "nn::bcat::detail::ipc::IDeliveryCacheFileService".
 +
 +
This was added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 111: Line 154:
 
=== IDeliveryCacheDirectoryService ===
 
=== IDeliveryCacheDirectoryService ===
 
This is "nn::bcat::detail::ipc::IDeliveryCacheDirectoryService".
 
This is "nn::bcat::detail::ipc::IDeliveryCacheDirectoryService".
 +
 +
This was added with [2.0.0+].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 132: Line 177:
 
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || ||  
+
| 0 || GetEvent ||  
|-
 
 
|}
 
|}
  
Line 150: Line 194:
 
= <nowiki>news:a, news:c, news:m, news:p, news:v</nowiki> =
 
= <nowiki>news:a, news:c, news:m, news:p, news:v</nowiki> =
 
These are <nowiki>"nn::news::detail::ipc::IServiceCreator"</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]].
  
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 155: Line 201:
 
! Cmd || Name || Notes
 
! Cmd || Name || Notes
 
|-
 
|-
| 0 || || No input, returns an [[#INewsService]].
+
| 0 || CreateNewsService || No input, returns an [[#INewsService]].
 
|-
 
|-
| 1 || || No input, returns an [[#INewlyArrivedEventHolder]].
+
| 1 || CreateNewlyArrivedEventHolder || No input, returns an [[#INewlyArrivedEventHolder]].
 
|-
 
|-
| 2 || || No input, returns an [[#INewsDataService]].
+
| 2 || CreateNewsDataService || No input, returns an [[#INewsDataService]].
 
|-
 
|-
| 3 || || No input, returns an [[#INewsDatabaseService]].
+
| 3 || CreateNewsDatabaseService || No input, returns an [[#INewsDatabaseService]].
 
|-
 
|-
| 4 || || No input, returns an [[#IOverwriteEventHolder]].
+
| 4 || CreateOverwriteEventHolder || No input, returns an [[#IOverwriteEventHolder]].
 
|}
 
|}
  
Line 173: Line 219:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 10100 ||  
+
| 10100 || PostLocalNews
 
|-
 
|-
| 20100 ||  
+
| 20100 || SetPassphrase
 
|-
 
|-
| 30100 ||  
+
| 30100 || GetSubscriptionStatus
 
|-
 
|-
| 30101 ||  
+
| 30101 || [3.0.0+] GetTopicList
 
|-
 
|-
 
| 30110 || [6.0.0+]
 
| 30110 || [6.0.0+]
 
|-
 
|-
| 30200 ||  
+
| 30200 || IsSystemUpdateRequired
 
|-
 
|-
 
| 30201 || [8.0.0+]
 
| 30201 || [8.0.0+]
 
|-
 
|-
| 30300 ||  
+
| 30300 || RequestImmediateReception
 
|-
 
|-
| 30400 ||  
+
| 30400 || [3.0.0+] DecodeArchiveFile
 
|-
 
|-
 
| 30500 || [8.0.0+] ? (Takes a total of 8-bytes of input, a handle, and a type-0x9 input buffer, returns an [[#IUnknown2]])
 
| 30500 || [8.0.0+] ? (Takes a total of 8-bytes of input, a handle, and a type-0x9 input buffer, returns an [[#IUnknown2]])
 
|-
 
|-
| 40100 ||  
+
| [1.0.0] 30900 || (No input, returns an [[#INewlyArrivedEventHolder]])
 
|-
 
|-
| 40101 ||  
+
| [1.0.0] 30901 || (No input, returns an [[#INewsDataService]])
 
|-
 
|-
| 40200 ||  
+
| [1.0.0] 30902 || (No input, returns an [[#INewsDatabaseService]])
 
|-
 
|-
| 40201 ||  
+
| 40100 || SetSubscriptionStatus
 
|-
 
|-
| 90100 ||  
+
| 40101 || [3.0.0+] RequestAutoSubscription
 +
|-
 +
| 40200 || ClearStorage
 +
|-
 +
| 40201 || ClearSubscriptionStatusAll
 +
|-
 +
| 90100 || GetNewsDatabaseDump
 
|}
 
|}
  
Line 211: Line 263:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || Get
 
|}
 
|}
  
Line 221: Line 273:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || Open
 
|-
 
|-
| 1 ||  
+
| 1 || OpenWithNewsRecordV1
 
|-
 
|-
| 2 ||  
+
| 2 || Read
 
|-
 
|-
| 3 ||  
+
| 3 || GetSize
 
|-
 
|-
| 1001 || [6.0.0+]
+
| 1001 || [6.0.0+] OpenWithNewsRecord
 
|}
 
|}
  
Line 239: Line 291:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || GetListV1
 
|-
 
|-
| 1 ||  
+
| 1 || Count
 
|-
 
|-
| 2 ||  
+
| 2 || CountWithKey
 
|-
 
|-
| 3 ||  
+
| 3 || UpdateIntegerValue
 
|-
 
|-
| 4 ||  
+
| 4 || UpdateIntegerValueWithAddition
 
|-
 
|-
| 5 ||  
+
| 5 || UpdateStringValue
 
|-
 
|-
| 1000 || [6.0.0+]
+
| 1000 || [6.0.0+] GetList
 
|}
 
|}
  
Line 261: Line 313:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || Get
 
|}
 
|}
  
Line 298: Line 350:
 
|-
 
|-
 
| 10300 || GetTransmissionStatus
 
| 10300 || GetTransmissionStatus
 +
|-
 +
| 10400 || [9.0.0+] GetSystemSessionId
 
|-
 
|-
 
| 20100 || SaveSystemReport
 
| 20100 || SaveSystemReport
Line 317: Line 371:
 
| 30500 || [6.0.0+] GetLastUploadError
 
| 30500 || [6.0.0+] GetLastUploadError
 
|-
 
|-
| 40100 || IsUserAgreementCheckEnabled
+
| 40100 || [2.0.0+] IsUserAgreementCheckEnabled
 
|-
 
|-
| 40101 || SetUserAgreementCheckEnabled
+
| 40101 || [2.0.0+] SetUserAgreementCheckEnabled
 
|-
 
|-
 
| 90100 || [6.0.0+] ReadAllReportFiles ([1.0.0-5.1.0] GetStorageUsage)
 
| 90100 || [6.0.0+] ReadAllReportFiles ([1.0.0-5.1.0] GetStorageUsage)
 
|-
 
|-
| [5.0.0-5.1.0] 90200 ||  
+
| 90101 || [1.0.0]
 +
|-
 +
| 90102 || [1.0.0]
 +
|-
 +
| [5.0.0-5.1.0] 90200 || GetStatistics
 
|-
 
|-
| [5.0.0-5.1.0] 90201 ||  
+
| [5.0.0-5.1.0] 90201 || GetThroughputHistory
 
|-
 
|-
| [5.0.0-5.1.0] 90300 ||  
+
| [5.0.0-5.1.0] 90300 || GetLastUploadError
 
|}
 
|}
  

Revision as of 01:18, 11 September 2019

BCAT (Background Content Asymmetric synchronized delivery and Transmission) encompasses a set of content download/upload related services.

bcat:a, bcat:m, bcat:u, bcat:s

These are "nn::bcat::detail::ipc::IServiceCreator".

These were added with [2.0.0+].

Cmd Name Notes
0 CreateBcatService Takes an input u64 ProcessId, returns an #IBcatService
1 CreateDeliveryCacheStorageService Takes an input u64 ProcessId, returns an #IDeliveryCacheStorageService
2 CreateDeliveryCacheStorageServiceWithApplicationId Takes an input u64 TitleId, returns an #IDeliveryCacheStorageService
[2.0.0-2.3.0] 3 CreateDeliveryCacheProgressService Takes an input u64 ProcessId, returns an #IDeliveryCacheProgressService
[2.0.0-2.3.0] 4 CreateDeliveryCacheProgressServiceWithApplicationId Takes an input u64 TitleId, returns an #IDeliveryCacheProgressService

Equivalent to 3DS BOSS(SpotPass). See here for BCAT-content-container.

IBcatService

This is "nn::bcat::detail::ipc::IBcatService".

This was added with [2.0.0+].

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
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
30300 [8.0.0+] RegisterSystemApplicationDeliveryTasks
90100 GetDeliveryTaskList
90200 #GetDeliveryList
90201 [3.0.0+] ClearDeliveryCacheStorage
90202 [8.0.0+] ClearDeliveryTaskSubscriptionStatus
90300 [3.0.0+] GetPushNotificationLog

RequestSyncDeliveryCache

No input/output.

[3.0.0+] Now returns an #IDeliveryCacheProgressService.

RequestSyncDeliveryCacheWithApplicationId

Takes a total of 8-bytes of input, no output.

[3.0.0+] Now takes an additional 8-bytes of input, and returns an #IDeliveryCacheProgressService.

GetDeliveryCacheStorageUpdateNotifier

Takes a total of 8-bytes of input, returns an #INotifierService.

RequestSuspendDeliveryTask

Takes a total of 8-bytes of input, returns an #IDeliveryTaskSuspensionService.

RegisterSystemApplicationDeliveryTask

Takes an input u64 nn::ApplicationId, no output.

UnregisterSystemApplicationDeliveryTask

Takes an input u64 nn::ApplicationId, 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::detail::ipc::IDeliveryCacheProgressService".

This was added with [2.0.0+].

Cmd Name
0 GetEvent
1 GetImpl

IDeliveryCacheStorageService

This is "nn::bcat::detail::ipc::IDeliveryCacheStorageService".

This was added with [2.0.0+].

Cmd Name
0 CreateFileService
1 CreateDirectoryService
10 EnumerateDeliveryCacheDirectory

IDeliveryCacheFileService

This is "nn::bcat::detail::ipc::IDeliveryCacheFileService".

This was added with [2.0.0+].

Cmd Name
0 Open
1 Read
2 GetSize
3 GetDigest

IDeliveryCacheDirectoryService

This is "nn::bcat::detail::ipc::IDeliveryCacheDirectoryService".

This was added with [2.0.0+].

Cmd Name
0 Open
1 Read
2 GetCount

INotifierService

This is "nn::bcat::detail::ipc::INotifierService".

Added with [8.0.0+].

Cmd Name Notes
0 GetEvent

IDeliveryTaskSuspensionService

This is "nn::bcat::detail::ipc::IDeliveryTaskSuspensionService".

Added with [8.0.0+].

Cmd Name Notes
0 GetEvent

news:a, news:c, news:m, news:p, news:v

These are "nn::news::detail::ipc::IServiceCreator".

On [1.0.0] these are "nn::news::detail::ipc::INewsService", see #INewsService.

Cmd Name Notes
0 CreateNewsService No input, returns an #INewsService.
1 CreateNewlyArrivedEventHolder No input, returns an #INewlyArrivedEventHolder.
2 CreateNewsDataService No input, returns an #INewsDataService.
3 CreateNewsDatabaseService No input, returns an #INewsDatabaseService.
4 CreateOverwriteEventHolder No input, returns an #IOverwriteEventHolder.

INewsService

This is "nn::news::detail::ipc::INewsService".

Cmd Name
10100 PostLocalNews
20100 SetPassphrase
30100 GetSubscriptionStatus
30101 [3.0.0+] GetTopicList
30110 [6.0.0+]
30200 IsSystemUpdateRequired
30201 [8.0.0+]
30300 RequestImmediateReception
30400 [3.0.0+] DecodeArchiveFile
30500 [8.0.0+] ? (Takes a total of 8-bytes of input, a handle, and a type-0x9 input buffer, returns an #IUnknown2)
[1.0.0] 30900 (No input, returns an #INewlyArrivedEventHolder)
[1.0.0] 30901 (No input, returns an #INewsDataService)
[1.0.0] 30902 (No input, returns an #INewsDatabaseService)
40100 SetSubscriptionStatus
40101 [3.0.0+] RequestAutoSubscription
40200 ClearStorage
40201 ClearSubscriptionStatusAll
90100 GetNewsDatabaseDump

INewlyArrivedEventHolder

This is "nn::news::detail::ipc::INewlyArrivedEventHolder".

Cmd Name
0 Get

INewsDataService

This is "nn::news::detail::ipc::INewsDataService".

Cmd Name
0 Open
1 OpenWithNewsRecordV1
2 Read
3 GetSize
1001 [6.0.0+] OpenWithNewsRecord

INewsDatabaseService

This is "nn::news::detail::ipc::INewsDatabaseService".

Cmd Name
0 GetListV1
1 Count
2 CountWithKey
3 UpdateIntegerValue
4 UpdateIntegerValueWithAddition
5 UpdateStringValue
1000 [6.0.0+] GetList

IOverwriteEventHolder

This is "nn::news::detail::ipc::IOverwriteEventHolder".

Cmd Name
0 Get

IUnknown2

This was added with [8.0.0+].

Cmd Name
0
1
2
3

prepo:a, prepo:a2, prepo:m, prepo:u, prepo:s

These are "nn::prepo::detail::ipc::IPrepoService".

Cmd Name
10100 SaveReportOld ([1.0.0-5.1.0] SaveReport)
10101 SaveReportWithUserOld ([1.0.0-5.1.0] SaveReportWithUser)
10102 [6.0.0+] SaveReport
10103 [6.0.0+] SaveReportWithUser
10200 RequestImmediateTransmission
10300 GetTransmissionStatus
10400 [9.0.0+] GetSystemSessionId
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
40100 [2.0.0+] IsUserAgreementCheckEnabled
40101 [2.0.0+] SetUserAgreementCheckEnabled
90100 [6.0.0+] ReadAllReportFiles ([1.0.0-5.1.0] GetStorageUsage)
90101 [1.0.0]
90102 [1.0.0]
[5.0.0-5.1.0] 90200 GetStatistics
[5.0.0-5.1.0] 90201 GetThroughputHistory
[5.0.0-5.1.0] 90300 GetLastUploadError

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

And the contents of the following file:

is_user_agreement_check_enabled.bin

All the information is periodically uploaded to the following URL:

  • https://receive-%.dg.srv.nintendo.net/post

It also checks the validity of the device's authentication token using the following URL:

  • https://dauth-%.ndas.srv.nintendo.net/v1/device_auth_token