Difference between revisions of "News Services"

From 3dbrew
Jump to navigation Jump to search
m (Add more docs for NEWS commands. the names are made up)
Line 31: Line 31:
 
|-
 
|-
 
| 0x00040000
 
| 0x00040000
| ?
+
| [[NEWSS:ResetNotifications|ResetNotifications]]
 
|-
 
|-
 
| 0x00050000
 
| 0x00050000
Line 64: Line 64:
 
|-
 
|-
 
| 0x000F0000
 
| 0x000F0000
| SpotPass notifications related?
+
| [[NEWSS:SyncArrivedNotifications|SyncArrivedNotifications]]
 
|-
 
|-
 
| 0x00100040
 
| 0x00100040
| (u8 flag) ?
+
| [[NEWSS:SyncOneArrivedNotification|SyncOneArrivedNotification]]
 
|-
 
|-
 
| 0x00110000
 
| 0x00110000
| This writes the input u8 to a state field.
+
| [[NEWSS:SetAutomaticSyncFlag|SetAutomaticSyncFlag]]
 
|-
 
|-
 
| 0x00120082
 
| 0x00120082
Line 79: Line 79:
 
|-
 
|-
 
| 0x00140000
 
| 0x00140000
| This writes an unknown u32 value to cmdreply[2].
+
| [[NEWSS:GetTotalArrivedNotifications|GetTotalArrivedNotifications]]
 
|}
 
|}
  
Line 112: Line 112:
 
| 0x0
 
| 0x0
 
| 0x1
 
| 0x1
| Must be 0x1.
+
| Must be 0x1 "is valid".
 
|-
 
|-
 
| 0x1
 
| 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".
+
| Flags
 
|-
 
|-
 
| 0x2
 
| 0x2
 
| 0xE
 
| 0xE
 
| Normally zero?
 
| Normally zero?
 +
|}
 +
 +
===Flags===
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Bit
 +
!  Description
 +
|-
 +
| 0
 +
| Set by news module when handling BOSS notifications and the AddNotification commands. This indicates that there's "unread" notifications, the notifications applet clears this once all notifications have been "read".
 +
|-
 +
| 1
 +
| Set by news module when handling CECD notifications.
 
|}
 
|}
  
Line 141: Line 155:
 
|-
 
|-
 
| 0xC8A12805
 
| 0xC8A12805
| The notification header data for the specified notificationID is not set(the specified notification doesn't exist).
+
| The news.db or notification header data for the specified notificationID is not set(the specified notification doesn't exist).
 
|}
 
|}
  

Revision as of 17:55, 14 January 2024

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"

Command Header Description
0x000100C8 AddNotification

This service only has one command.

News service "news:s"

Command Header Description
0x000100C6 AddNotification
0x0002.... Stubbed, only returns 0.
0x0003.... Stubbed, only returns 0.
0x00040000 ResetNotifications
0x00050000 GetTotalNotifications
0x00060042 SetNewsDBHeader
0x00070082 SetNotificationHeader
0x00080082 SetNotificationMessage
0x00090082 SetNotificationImage
0x000A0042 GetNewsDBHeader
0x000B0082 GetNotificationHeader
0x000C0082 GetNotificationMessage
0x000D0082 GetNotificationImage
0x000E0040 SetInfoLEDPattern
0x000F0000 SyncArrivedNotifications
0x00100040 SyncOneArrivedNotification
0x00110000 SetAutomaticSyncFlag
0x00120082 GetNotificationHeaderOther
0x00130000 WriteNewsDBSavedata
0x00140000 GetTotalArrivedNotifications

News module NAND savedata

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

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

Header

Offset Size Description
0x0 0x1 Must be 0x1 "is valid".
0x1 0x1 Flags
0x2 0xE Normally zero?

Flags

Bit Description
0 Set by news module when handling BOSS notifications and the AddNotification commands. This indicates that there's "unread" notifications, the notifications applet clears this once all notifications have been "read".
1 Set by news module when handling CECD notifications.

News module startup

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

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

Title Versions

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.