Difference between revisions of "News Services"

From 3dbrew
Jump to navigation Jump to search
(17 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
This system module handles the system notifications.
 
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 <nowiki>"news:u"</nowiki>=
 
=News service <nowiki>"news:u"</nowiki>=
Line 8: Line 10:
 
|-
 
|-
 
| 0x000100C8
 
| 0x000100C8
|  
+
| [[NEWSU:AddNotification|AddNotification]]
 
|}
 
|}
  
Line 21: Line 23:
 
| 0x000100C6
 
| 0x000100C6
 
| [[NEWSS:AddNotification|AddNotification]]
 
| [[NEWSS:AddNotification|AddNotification]]
 +
|-
 +
| 0x0002....
 +
| Stubbed, only returns 0.
 +
|-
 +
| 0x0003....
 +
| Stubbed, only returns 0.
 +
|-
 +
| 0x00040000
 +
| ?
 
|-
 
|-
 
| 0x00050000
 
| 0x00050000
 
| [[NEWSS:GetTotalNotifications|GetTotalNotifications]]
 
| [[NEWSS:GetTotalNotifications|GetTotalNotifications]]
 +
|-
 +
| 0x00060042
 +
| [[NEWSS:SetNewsDBHeader|SetNewsDBHeader]]
 
|-
 
|-
 
| 0x00070082
 
| 0x00070082
 
| [[NEWSS:SetNotificationHeader|SetNotificationHeader]]
 
| [[NEWSS:SetNotificationHeader|SetNotificationHeader]]
 +
|-
 +
| 0x00080082
 +
| [[NEWSS:SetNotificationMessage|SetNotificationMessage]]
 +
|-
 +
| 0x00090082
 +
| [[NEWSS:SetNotificationImage|SetNotificationImage]]
 +
|-
 +
| 0x000A0042
 +
| [[NEWSS:GetNewsDBHeader|GetNewsDBHeader]]
 
|-
 
|-
 
| 0x000B0082
 
| 0x000B0082
Line 36: Line 59:
 
| 0x000D0082
 
| 0x000D0082
 
| [[NEWSS:GetNotificationImage|GetNotificationImage]]
 
| [[NEWSS:GetNotificationImage|GetNotificationImage]]
 +
|-
 +
| 0x000E0040
 +
| [[NEWSS:SetInfoLEDPattern|SetInfoLEDPattern]]
 +
|-
 +
| 0x000F0000
 +
| SpotPass notifications related?
 +
|-
 +
| 0x00100040
 +
| (u8 flag) ?
 +
|-
 +
| 0x00110000
 +
| This writes the input u8 to a state field.
 +
|-
 +
| 0x00120082
 +
| [[NEWSS:GetNotificationHeaderOther|GetNotificationHeaderOther]]
 +
|-
 +
| 0x00130000
 +
| [[NEWSS:WriteNewsDBSavedata|WriteNewsDBSavedata]]
 +
|-
 +
| 0x00140000
 +
| This writes an unknown u32 value to cmdreply[2].
 
|}
 
|}
  
=News module savedata=
+
=News module NAND [[System_SaveData|savedata]]=
 
* "news.db": This is the main save-file, the filesize is fixed to 0x2BD0-bytes.
 
* "news.db": This is the main save-file, the filesize is fixed to 0x2BD0-bytes.
* "newsXXX.txt" This is the [[NEWSS:AddNotification|message]] data for this notification, where XXX is the decimal notification-index in the below headers-array.
+
* "newsXXX.txt" This is the [[NEWSS:AddNotification|message]] data for this notification, where XXX is the decimal notification-index in the below headers-array. The filesize should be <= <size listed [[NEWSS:GetNotificationMessage|here]]>, since that's the max size read by the notifications applet.
* "newsXXX.mpo" This is the [[NEWSS:AddNotification|MPO]] data for this notification if any, where XXX is the decimal notification-index in the below headers-array.
+
* "newsXXX.mpo" This is the [[NEWSS:AddNotification|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 [[NEWSS:GetNotificationImage|here]]>, since that's the max size read by the notifications applet.
  
 
==news.db==
 
==news.db==
Line 52: Line 96:
 
| 0x0
 
| 0x0
 
| 0x10
 
| 0x10
| Header, normally first byte is value 0x1 and the rest all-zero.
+
| Header, see below.
 
|-
 
|-
 
| 0x10
 
| 0x10
 
| 0x2BC0 (100 * 0x70)
 
| 0x2BC0 (100 * 0x70)
 
| Array of [[NEWSS:AddNotification|headers]] for each notification.
 
| Array of [[NEWSS:AddNotification|headers]] for each notification.
 +
|}
 +
 +
===Header===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  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=
 +
The actual main function called by main() does the following:
 +
* srv_init()
 +
* Registers services <nowiki>"news:u" and "news:s"</nowiki>.
 +
* 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=
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Error code
 +
!  Description
 +
|-
 +
| 0xC8A12805
 +
| The notification header data for the specified notificationID is not set(the specified notification doesn't exist).
 +
|}
 +
 +
=Title Versions=
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Title version
 +
!  System version
 +
!  Changes
 +
|-
 +
| v7168
 +
| [[9.7.0-25|9.7.0-X]]
 +
| All of the changes are the following:
 +
* See [[9.7.0-25|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.
 
|}
 
|}

Revision as of 21:47, 19 October 2015

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 ?
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

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

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