The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

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::ipc::IServiceCreator".

These were added with [2.0.0+].

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 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 nn::ApplicationId. Returns an #IDeliveryCacheStorageService.

CreateDeliveryCacheProgressService

Takes an input u64 ProcessId. Returns an #IDeliveryCacheProgressService.

CreateDeliveryCacheProgressServiceWithApplicationId

Takes an input u64 nn::ApplicationId. returns an #IDeliveryCacheProgressService.

IBcatService

This is "nn::bcat::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
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 nn::ApplicationId. No output.

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

GetDeliveryCacheStorageUpdateNotifier

Takes an input u64 nn::ApplicationId. Returns an #INotifierService.

RequestSuspendDeliveryTask

Takes an input u64 nn::ApplicationId. Returns an #IDeliveryTaskSuspensionService.

RegisterSystemApplicationDeliveryTask

Takes an input u64 nn::ApplicationId. No output.

UnregisterSystemApplicationDeliveryTask

Takes an input u64 nn::ApplicationId. No output.

SetPassphrase

Takes an input u64 nn::ApplicationId 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+].

Cmd Name
0 GetEvent
1 GetImpl

IDeliveryCacheStorageService

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

This was added with [2.0.0+].

Cmd Name
0 CreateFileService
1 CreateDirectoryService
10 EnumerateDeliveryCacheDirectory

IDeliveryCacheFileService

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

This was added with [2.0.0+].

Cmd Name
0 Open
1 Read
2 GetSize
3 GetDigest

IDeliveryCacheDirectoryService

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

This was added with [2.0.0+].

Cmd Name
0 Open
1 Read
2 GetCount

INotifierService

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

Added with [8.0.0+].

Cmd Name Notes
0 GetEvent

IDeliveryTaskSuspensionService

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

Added with [8.0.0+].

Cmd Name
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.

News entries are fetched from CDN[1]. Metadata for each entry is stored and queried from an internal SQLite database. Official software uses sqlite[2] for processing.

All sessions have 32 sessions. Permission masks are:

Name Mask
news:a 0xffffffff
news:p 0x1
news:c 0x2
news:v 0x4
news:m 0xd
Cmd Name
0 CreateNewsService
1 CreateNewlyArrivedEventHolder
2 CreateNewsDataService
3 CreateNewsDatabaseService
4 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 "nn::news::detail::ipc::INewsService".

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 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 "nn::news::detail::ipc::INewlyArrivedEventHolder".

[19.0.0+] This is now "nn::news::detail::ipc::INewArrivalEventHolder".

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 "nn::news::detail::ipc::INewsDataService".

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 "news:/data/%s" with input.

OpenWithNewsRecordV1

Takes an input #NewsRecordV1. Opens file with the output of snprintf of "news:/data/D00000000000000000000_%s.msgpack" with news_id if user_id is empty or else of "news:/data/U%s_%s.msgpack" 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 "nn::news::detail::ipc::INewsDatabaseService".

[19.0.0+] This is now "nn::news::detail::ipc::IDeviceNewsDatabaseService".

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

Get

Returns readable event. Event is signaled on fetch from CDN if the file already exists.

IDownloadContext

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

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).

Cmd Name
0 #Get
1 #Cancel
2 #GetResult
3 #GetSize
4 [20.0.0+]

Get

Unofficial name.

Return event handle. Signaled on download finish.

Cancel

Unofficial name.

Cancels Download.

GetResult

Unofficial name.

Returns last result.

GetSize

Unofficial name.

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.

Name Type Exists
news_id TEXT All
user_id TEXT All
topic_id TEXT All
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

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

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".

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+].

Cmd Name
0 #Initialize
1 #SubmitEvent

Initialize

Unofficial name.

Takes a PID-descriptor and a reserved input u64. No output.

Uses arp:r commands GetApplicationInstanceId and GetApplicationLaunchProperty to get and store the application's ProgramId.

SubmitEvent

Unofficial name.

Takes an input Uid and a type-0x5 input buffer. No output.

Uses the input buffer's contents to create a "mission event" which is later uploaded to "fw-api.%.nso.nintendo.net/v1/events".

mnpp:sys

This is "nn::mnpp::detail::ipc::IServiceForSystem".

This was added with [13.0.0+].

Cmd Name
0
100
200 [13.1.0-13.2.1]
300 [13.1.0-14.1.2]
400 [14.0.0-14.1.2]

mnpp:web

This is "nn::mnpp::detail::ipc::IServiceForWebBrowser".

This was added with [13.0.0+].

Cmd Name
0
1 [14.0.0+]
10 [14.0.0+]
20 [14.0.0+]
100 [16.1.0+]

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