News Services

From 3dbrew
Jump to: navigation, search

This system module handles the system notifications.

The maximum number of notifications that can be stored/handled is 100, hence the intended range for notificationIDs is 0-99.

News service "news:u"[edit]

Command Header Description
0x000100C8 AddNotification

This service only has one command.

News service "news:s"[edit]

Command Header Description
0x000100C6 AddNotification
0x0002.... Stubbed, only returns 0.
0x0003.... Stubbed, only returns 0.
0x00040000  ?
0x00050000 GetTotalNotifications
0x00060042 SetNewsDBHeader
0x00070082 SetNotificationHeader
0x00080082 SetNotificationMessage
0x00090082 SetNotificationImage
0x000A0042 GetNewsDBHeader
0x000B0082 GetNotificationHeader
0x000C0082 GetNotificationMessage
0x000D0082 GetNotificationImage
0x000E0040 SetInfoLEDPattern
0x000F0000 SpotPass notifications related?
0x00100040 (u8 flag) ?
0x00110000 This writes the input u8 to a state field.
0x00120082 GetNotificationHeaderOther
0x00130000 WriteNewsDBSavedata
0x00140000 This writes an unknown u32 value to cmdreply[2].

News module NAND savedata[edit]

  • "news.db": This is the main save-file, the filesize is fixed to 0x2BD0-bytes.
  • "newsXXX.txt" This is the message data for this notification, where XXX is the decimal notification-index in the below headers-array. The filesize should be <= <size listed here>, since that's the max size read by the notifications applet.
  • "newsXXX.mpo" This is the MPO data for this notification if any, where XXX is the decimal notification-index in the below headers-array. The filesize should be <= <size listed here>, since that's the max size read by the notifications applet.

news.db[edit]

Offset Size Description
0x0 0x10 Header, see below.
0x10 0x2BC0 (100 * 0x70) Array of headers for each notification.

Header[edit]

Offset Size Description
0x0 0x1 Must be 0x1.
0x1 0x1 Flags: bit0 is set by news-module when handling the AddNotification commands. This indicates that there's "unread" notifications, the notifications applet clears this once all notifications have been "read".
0x2 0xE Normally zero?

News module startup[edit]

The actual main function called by main() does the following:

  • srv_init()
  • Registers services "news:u" and "news:s".
  • Initializes the service session handle for "ptm:sysm".
  • Loads 4 handles from somewhere, which gets used with svcReplyAndReceive later.
  • Does notificationID state init, uses SRV:GetNotificationSemaphore, then subscribes to srv notifications 0x104 and 0x106.
  • <Some func calls>
  • Here PTMSYSM:SetInfoLEDPattern is used.
  • Some state init is done, then the usual svcReplyAndReceive loop begins.

Errors[edit]

Error code Description
0xC8A12805 The notification header data for the specified notificationID is not set(the specified notification doesn't exist).

Title Versions[edit]

Title version System version Changes
v7168 9.7.0-X All of the changes are the following:
  • See here regarding the updated CTRSDK function code.
  • This function is eventually called by newss_cmdf, newss_cmd10, and <certain function>. When calling a certain function fails in here, this code now calls <another certain function> before returning.
  • Mutex enter/leave function calls were added to a certain function.
  • More state init was added to the start of an initialization function called during news module startup(crt0?).
  • 0x14 new bytes were added to .rodata.