Changes

Jump to navigation Jump to search
no edit summary
Line 1: Line 1: −
= pl:u =
+
= pl:u, pl:s =
This is "nn::pl::detail::IPlatformServiceManager".
+
These are "nn::pl::detail::IPlatformServiceManager".
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 23: Line 23:  
|-
 
|-
 
| 101 || [8.0.0+] RequestApplicationFunctionAuthorizationForSystem
 
| 101 || [8.0.0+] RequestApplicationFunctionAuthorizationForSystem
 +
|-
 +
| 1000 || [9.0.0+] LoadNgWordDataForPlatformRegionChina
 +
|-
 +
| 1001 || [9.0.0+] GetNgWordDataSizeForPlatformRegionChina
 
|}
 
|}
   Line 196: Line 200:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || NotifyAppletEvent
+
| 0 || [[#NotifyAppletEvent]]
 
|-
 
|-
| 2 || NotifyOperationModeChangeEvent
+
| 2 || [[#NotifyOperationModeChangeEvent]]
 
|-
 
|-
| 3 || NotifyPowerStateChangeEvent
+
| 3 || [[#NotifyPowerStateChangeEvent]]
 
|-
 
|-
| 4 || NotifyClearAllEvent
+
| 4 || [[#NotifyClearAllEvent]]
 
|-
 
|-
 
| 5 || [[#NotifyEventForDebug]]
 
| 5 || [[#NotifyEventForDebug]]
Line 214: Line 218:  
| 9 || [8.0.0+]
 
| 9 || [8.0.0+]
 
|}
 
|}
 +
 +
== NotifyAppletEvent ==
 +
Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], an u32 '''event_x8''', and an u64 '''titleID'''. Returns no output.
 +
 +
When [[#PlayLogPolicy]] is 2 ("None") this will immediately return 0.
 +
 +
Logs a new [[#PlayEvent]] with the following data:
 +
* Clears the 0x10-bytes at +0x10.
 +
* u8 +0xF = [[#AppletEventType]].
 +
* Sets the 3 timestamps.
 +
* Converts '''titleID''' and writes it to +0x0.
 +
* u32 +0x8 = '''event_x8'''.
 +
* u8 +0xC = [[Applet_Manager_services#AppletId|AppletId]], u8 +0xD = [[Filesystem_services#StorageId|StorageId]], and u8 +0xE = [[#PlayLogPolicy]].
 +
 +
After the initial logging, additional code runs with some of the above input params.
 +
 +
== NotifyOperationModeChangeEvent ==
 +
Takes an input u8 '''inval''', no output.
 +
 +
Logs a new [[#PlayEvent]] with the following data: clears the 0x20-bytes at +0x0, u8 +0x1C = 0x3, u8 +0x0 = '''inval''', and sets the 3 timestamps.
 +
 +
== NotifyPowerStateChangeEvent ==
 +
Takes an input u8 '''inval''', no output.
 +
 +
Logs a new [[#PlayEvent]] with the following data: clears the 0x20-bytes at +0x0, u8 +0x1C = 0x2, u8 +0x0 = '''inval''', and sets the 3 timestamps.
 +
 +
After the initial logging, additional code runs which uses '''inval'''.
 +
 +
== NotifyClearAllEvent ==
 +
No input/output.
    
== NotifyEventForDebug ==
 
== NotifyEventForDebug ==
Line 221: Line 255:     
Each [[#PlayEvent]] entry is validated, throwing an error on failure. After an entry is successfully validated, it is written to the log.
 
Each [[#PlayEvent]] entry is validated, throwing an error on failure. After an entry is successfully validated, it is written to the log.
 +
 +
== Cmd8 ==
 +
Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an u8 [[#PlayLogPolicy]], and an u64 '''titleID'''. Returns no output.
 +
 +
This is similar to [[#NotifyAppletEvent]].
 +
 +
When [[#PlayLogPolicy]] is 2 ("None") this will immediately return 0.
 +
 +
Logs a new [[#PlayEvent]] with the following data:
 +
* Clears the 0x20-bytes at +0x0.
 +
* u8 +0xF = [[#AppletEventType]].
 +
* Sets the 3 timestamps.
 +
* Converts '''titleID''' and writes it to +0x0.
 +
* u8 +0x9 = [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]].
 +
* u8 +0x8 = 1.
 +
* u8 +0xC = [[Applet_Manager_services#AppletId|AppletId]], u8 +0xD = [[Filesystem_services#StorageId|StorageId]], and u8 +0xE = [[#PlayLogPolicy]].
 +
 +
After the initial logging, additional code runs with some of the above input params. This is handled the same as [[#NotifyAppletEvent]], except that the value passed for '''event_x8''' is value 0 here.
 +
 +
== Cmd9 ==
 +
Takes an input u8 [[#AppletEventType]], an u8 [[Applet_Manager_services#AppletId|AppletId]], an u8 [[Filesystem_services#StorageId|StorageId]], an 0x20-byte struct, an u8 bool flag, an u8 [[#PlayLogPolicy]], an u32 '''event_x8''', and an u64 '''titleID'''. Returns no output.
 +
 +
This is identical to [[#NotifyAppletEvent]] except for the additional struct/flag params.
 +
 +
After the initial logging, additional code runs with some of the above input params. This is handled the same as [[#NotifyAppletEvent]], except that when the u8 bool flag is set the input struct is used with this.
    
= pdm:qry =
 
= pdm:qry =
Line 229: Line 288:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || [[#QueryApplicationEvent]]
+
| 0 || [[#QueryAppletEvent]] ([1.0.0-7.0.1] QueryApplicationEvent)
 
|-
 
|-
| [1.0.0-6.2.0] 1 || QueryPlayStatistics
+
| [1.0.0-6.2.0] 1 || [[#QueryPlayStatistics]]
 
|-
 
|-
| [1.0.0-6.2.0] 2 || QueryPlayStatisticsByUserAccountId
+
| [1.0.0-6.2.0] 2 || [[#QueryPlayStatisticsByUserAccountId]]
 
|-
 
|-
| [1.0.0-6.2.0] 3 || QueryPlayStatisticsByNetworkServiceAccountId
+
| [1.0.0-6.2.0] 3 || [[#QueryPlayStatisticsByNetworkServiceAccountId]]
 
|-
 
|-
 
| 4 || [[#QueryPlayStatisticsByApplicationId]]
 
| 4 || [[#QueryPlayStatisticsByApplicationId]]
Line 241: Line 300:  
| 5 || [[#QueryPlayStatisticsByApplicationIdAndUserAccountId]]
 
| 5 || [[#QueryPlayStatisticsByApplicationIdAndUserAccountId]]
 
|-
 
|-
| [1.0.0-6.2.0] 6 || QueryPlayStatisticsByApplicationIdAndNetworkServiceAccountId
+
| [1.0.0-6.2.0] 6 || [[#QueryPlayStatisticsByApplicationIdAndNetworkServiceAccountId]]
 
|-
 
|-
 
| 7 || [[#QueryLastPlayTime]]
 
| 7 || [[#QueryLastPlayTime]]
Line 257: Line 316:  
| 13 || [5.0.0+] [[#QueryApplicationPlayStatisticsForSystem]]
 
| 13 || [5.0.0+] [[#QueryApplicationPlayStatisticsForSystem]]
 
|-
 
|-
| 14 || [6.0.0+]
+
| 14 || [6.0.0+] [[#QueryRecentlyPlayedApplication]]
 
|-
 
|-
| 15 || [6.0.0+]
+
| 15 || [6.0.0+] [[#GetRecentlyPlayedApplicationUpdateEvent]]
 
|-
 
|-
| 16 || [6.0.0+]
+
| 16 || [6.0.0+] [[#QueryApplicationPlayStatisticsByUserAccountIdForSystem]]
 
|}
 
|}
   −
== QueryApplicationEvent ==
+
== QueryAppletEvent ==
Takes an input u32 entryindex, a type-0x6 output buffer containing an array of [[#ApplicationEvent]], and returns an output s32 for actual total output entries.
+
Takes an input s32 entry_index, a type-0x6 output buffer containing an array of [[#AppletEvent]], and returns an output s32 for actual total output entries.
 +
 
 +
== QueryPlayStatistics ==
 +
Takes a type-0x6 output buffer containing an array of [[#PlayStatistics]] and returns an output s32 for actual total output entries.
 +
 
 +
[6.2.0+] This command was removed.
 +
 
 +
== QueryPlayStatisticsByUserAccountId ==
 +
Takes an input u128 '''Uid''', a type-0x6 output buffer containing an array of [[#PlayStatistics]] and returns an output s32 for actual total output entries.
 +
 
 +
[6.2.0+] This command was removed.
 +
 
 +
== QueryPlayStatisticsByNetworkServiceAccountId ==
 +
Takes an input u64 '''NetworkServiceAccountId''', a type-0x6 output buffer containing an array of [[#PlayStatistics]] and returns an output s32 for actual total output entries.
 +
 
 +
[6.2.0+] This command was removed.
    
== QueryPlayStatisticsByApplicationId ==
 
== QueryPlayStatisticsByApplicationId ==
Takes an input u64 titleID and returns an output [[#PlayStatistics]].
+
Takes an input u64 '''ApplicationId''' and returns an output [[#PlayStatistics]].
    
== QueryPlayStatisticsByApplicationIdAndUserAccountId ==
 
== QueryPlayStatisticsByApplicationIdAndUserAccountId ==
Takes an input u64 titleID, an input u128 userID, and returns an output [[#PlayStatistics]].
+
Takes an input u64 '''ApplicationId''', an input u128 '''Uid''' and returns an output [[#PlayStatistics]].
 +
 
 +
== QueryPlayStatisticsByApplicationIdAndNetworkServiceAccountId ==
 +
Takes an input u64 '''ApplicationId''', an input u64 '''NetworkServiceAccountId''' and returns an output [[#PlayStatistics]].
 +
 
 +
[6.2.0+] This command was removed.
    
== QueryLastPlayTime ==
 
== QueryLastPlayTime ==
Takes a type-0x6 output buffer containing an array of [[#LastPlayTime]], and a type-0x5 input buffer containing an array of u64 titleIDs. Returns an output s32 for actual total output entries.
+
Takes a type-0x6 output buffer containing an array of [[#LastPlayTime]], and a type-0x5 input buffer containing an array of u64 '''ApplicationId'''. Returns an output s32 for actual total output entries.
    
== QueryPlayEvent ==
 
== QueryPlayEvent ==
Takes an input u32 entryindex, a type-0x6 output buffer containing an array of [[#PlayEvent]], and returns an output u32 for actual total output entries.
+
Takes an input s32 entry_index, a type-0x6 output buffer containing an array of [[#PlayEvent]], and returns an output s32 for actual total output entries.
    
== GetAvailablePlayEventRange ==
 
== GetAvailablePlayEventRange ==
No input, returns 3 output u32s: total_entries, start_entryindex, and end_entryindex.
+
No input, returns 3 output s32s: total_entries, start_entry_index, and end_entry_index.
    
== QueryAccountEvent ==
 
== QueryAccountEvent ==
Takes an input u32 entryindex, a type-0x6 output buffer containing an array of [[#AccountEvent]], and returns an output s32 for actual total output entries.
+
Takes an input s32 entry_index, a type-0x6 output buffer containing an array of [[#AccountEvent]], and returns an output s32 for actual total output entries.
    
== QueryAccountPlayEvent ==
 
== QueryAccountPlayEvent ==
Takes an input u32 entryoffset, an input u128 userID, a type-0x6 output buffer containing an array of [[#AccountPlayEvent]], and returns an output u32 for actual total output entries.
+
Takes an input s32 entry_offset, an input u128 '''Uid''', a type-0x6 output buffer containing an array of [[#AccountPlayEvent]], and returns an output s32 for actual total output entries.
    
== GetAvailableAccountPlayEventRange ==
 
== GetAvailableAccountPlayEventRange ==
Takes an input u128 userID and returns 3 output u32s: total_entries, start_entryindex, and end_entryindex.
+
Takes an input u128 '''Uid''' and returns 3 output s32s: total_entries, start_entry_index, and end_entry_index.
    
== QueryApplicationPlayStatisticsForSystem ==
 
== QueryApplicationPlayStatisticsForSystem ==
Takes a type-0x6 output buffer containing an array of [[#ApplicationPlayStatistics]] and a type-0x5 input buffer containing an array of u64 titleIDs. Returns an output s32 for actual total output entries.
+
Takes a type-0x6 output buffer containing an array of [[#ApplicationPlayStatistics]] and a type-0x5 input buffer containing an array of u64 '''ApplicationId'''. Returns an output s32 for actual total output entries.
    
The number of entries in each array is the same.
 
The number of entries in each array is the same.
   −
== Cmd14 ==
+
== QueryRecentlyPlayedApplication ==
Takes an input u128 userID, a type-0x6 output buffer containing an array of u64 titleIDs, and returns an output u32 for actual total output entries.
+
Takes an input u128 '''Uid''', a type-0x6 output buffer containing an array of u64 '''ApplicationId''', and returns an output s32 for actual total output entries.
    
Returns a list of titles played by the specified user.
 
Returns a list of titles played by the specified user.
   −
== Cmd15 ==
+
== GetRecentlyPlayedApplicationUpdateEvent ==
 
No input, returns an output Event handle with autoclear=false.
 
No input, returns an output Event handle with autoclear=false.
    
This is signaled when logging a new [[#PlayEvent]] which would be available via [[#QueryAccountEvent]], where [[#PlayEvent]] +0x18 is 0.
 
This is signaled when logging a new [[#PlayEvent]] which would be available via [[#QueryAccountEvent]], where [[#PlayEvent]] +0x18 is 0.
   −
== Cmd16 ==
+
== QueryApplicationPlayStatisticsByUserAccountIdForSystem ==
Takes a u128 userID, a type-0x6 output buffer containing an array of [[#ApplicationPlayStatistics]] and a type-0x5 input buffer containing an array of u64 titleIDs. Returns an output s32 for actual total output entries.
+
Takes a u128 '''Uid''', a type-0x6 output buffer containing an array of [[#ApplicationPlayStatistics]] and a type-0x5 input buffer containing an array of u64 '''ApplicationId'''. Returns an output s32 for actual total output entries.
   −
Same as [[#QueryApplicationPlayStatisticsForSystem]] except this gets playstats specific to userIDs.
+
Same as [[#QueryApplicationPlayStatisticsForSystem]] except this gets playstats specific to '''Uid'''.
    
= avm =
 
= avm =
Line 355: Line 434:  
|}
 
|}
   −
= ApplicationEvent =
+
= AppletEvent =
 +
This is "nn::pdm::AppletEvent" ([1.0.0-7.0.1] "nn::pdm::ApplicationEvent").
 +
 
 +
This is a 0x18-byte struct.
 +
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 374: Line 457:  
| 0x15 || 0x3 || Padding
 
| 0x15 || 0x3 || Padding
 
|}
 
|}
  −
This is a 0x18-byte struct.
      
Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00.
 
Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00.
    
= PlayStatistics =
 
= PlayStatistics =
 +
This is "nn::pdm::PlayStatistics".
 +
 +
This is a 0x28-byte struct.
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 390: Line 475:  
| 0x8 || 0x4 || First entryindex
 
| 0x8 || 0x4 || First entryindex
 
|-
 
|-
| 0xC || 0x4 || First timestamp0. Same as the first [[#ApplicationEvent]] timestamp.
+
| 0xC || 0x4 || First timestamp0. Same as the first [[#AppletEvent]] timestamp.
 
|-
 
|-
| 0x10 || 0x4 || First timestamp1. Same as the second [[#ApplicationEvent]] timestamp.
+
| 0x10 || 0x4 || First timestamp1. Same as the second [[#AppletEvent]] timestamp.
 
|-
 
|-
 
| 0x14 || 0x4 || Last entryindex
 
| 0x14 || 0x4 || Last entryindex
 
|-
 
|-
| 0x18 || 0x4 || Last timestamp0. Same as the first [[#ApplicationEvent]] timestamp.
+
| 0x18 || 0x4 || Last timestamp0. Same as the first [[#AppletEvent]] timestamp.
 
|-
 
|-
| 0x1C || 0x4 || Last timestamp1. Same as the second [[#ApplicationEvent]] timestamp.
+
| 0x1C || 0x4 || Last timestamp1. Same as the second [[#AppletEvent]] timestamp.
 
|-
 
|-
 
| 0x20 || 0x4 || Total play-time in minutes.
 
| 0x20 || 0x4 || Total play-time in minutes.
Line 405: Line 490:  
|}
 
|}
   −
This is a 0x28-byte struct.
+
= LastPlayTime =
 +
This is "nn::pdm::LastPlayTime".
 +
 
 +
This is a 0x18-byte struct and contains data from the last time the title was played.
   −
= LastPlayTime =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 416: Line 503:  
| 0x0 || 0x8 || titleID
 
| 0x0 || 0x8 || titleID
 
|-
 
|-
| 0x8 || 0x4 || Same as the first [[#ApplicationEvent]] timestamp.
+
| 0x8 || 0x4 || Same as the first [[#AppletEvent]] timestamp.
 
|-
 
|-
| 0xC || 0x4 || Same as the second [[#ApplicationEvent]] timestamp.
+
| 0xC || 0x4 || Same as the second [[#AppletEvent]] timestamp.
 
|-
 
|-
 
| 0x10 || 0x4 || Total minutes since the title was last played.
 
| 0x10 || 0x4 || Total minutes since the title was last played.
Line 427: Line 514:  
|}
 
|}
   −
This is a 0x18-byte struct. This contains data from the last time the title was played.
+
= PlayEventType =
 +
This is an enum for [[#PlayEvent]] +0x1C, which indicates the type of [[#PlayEvent]].
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value
 +
! Description
 +
|-
 +
| 0 || Applet
 +
|-
 +
| 1 || Account
 +
|-
 +
| 2 || PowerStateChange
 +
|-
 +
| 3 || OperationModeChange
 +
|-
 +
| 4 || Initialize. Used for the very first [[#PlayEvent]] entry in the log.
 +
|}
 +
 
 +
= AppletEventType =
 +
This is an enum for [[#PlayEvent]] +0xF with [[#PlayEventType]] = Applet, this indicates the type of the Applet event.
   −
= PlayEvent =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Offset
+
! Value
! Size
   
! Description
 
! Description
 
|-
 
|-
| 0x0 || 0x0x10 || titleID or userID, with the u32 low/high words swapped in each u64.
+
| 0 || "launch"
 
|-
 
|-
| 0xC || 0x1 || ?
+
| 1 || "exit"
 
|-
 
|-
| 0xD || 0x1 || ?
+
| 2 || "in_focus"
 
|-
 
|-
| 0xE || 0x1 || ?
+
| 3 || "out_of_focus"
 
|-
 
|-
| 0xF || 0x1 || ?
+
| 4 || "out_of_focus"
 
|-
 
|-
| 0x18 || 0x1 || ?
+
| 5 || "exit"
 
|-
 
|-
| 0x1C || 0x1 || ?
+
| 6 || "exit"
 +
|}
 +
 
 +
= PlayLogPolicy =
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 0x1D || 0x3 || ?
+
! Value
 +
! Meaning
 +
! Description
 
|-
 
|-
| 0x20 || 0x8 || PosixTime timestamp0
+
| 0 || All || All pdm:qry cmds which require [[#PlayEventType]] = Applet and AppletId = Application will only return the entry when PlayLogPolicy matches this value.
 
|-
 
|-
| 0x28 || 0x8 || PosixTime timestamp1
+
| 1 || LogOnly || The above commands will filter out the entry with this.
 
|-
 
|-
| 0x30 || 0x8 || Timestamp in seconds derived from [[PCV_services|StandardSteadyClock]].
+
| 2 || None || pdm:ntfy [[#NotifyAppletEvent]], [[#Cmd8]], and [[#Cmd9]] will immediately return 0 when the input param matches this value.
 
|}
 
|}
   −
This is a 0x38-byte struct.
+
This is an enum for [[#PlayEvent]] +0xE with [[#PlayEventType]] = Applet. This is set via the above commands, which uses this as an input param.
 +
 
 +
= PlayEvent =
 +
This is "nn::pdm::PlayEvent".
 +
 
 +
This is a 0x38-byte struct and is the raw entry struct directly read from FS, without any entry filtering. The other structs are extracted+converted from this one, with filtering.
   −
This is the raw entry struct directly read from FS, without any entry filtering. The other structs are extracted+converted from this one, with filtering.
+
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x1C || 0x1 || [[#PlayEventType]]
 +
|-
 +
| 0x1D || 0x3 || Padding
 +
|-
 +
| 0x20 || 0x8 || PosixTime timestamp from [[PCV_services|StandardUserSystemClock]].
 +
|-
 +
| 0x28 || 0x8 || PosixTime timestamp from [[PCV_services|StandardNetworkSystemClock]].
 +
|-
 +
| 0x30 || 0x8 || Timestamp in seconds derived from [[PCV_services|StandardSteadyClock]].
 +
|}
    
Filtering:
 
Filtering:
* [[#QueryApplicationEvent]] and [[#QueryLastPlayTime]]: PlayEvent +0x1C must be 0, +0xC must be 1, and +0xE must be 0.
+
* [[#QueryAppletEvent]], [[#QueryLastPlayTime]], and [[#QueryApplicationPlayStatisticsForSystem]]: PlayEvent +0x1C must be 0, +0xC must be 1, and +0xE must be 0.
 
* [[#QueryPlayStatisticsByApplicationId]]: PlayEvent +0x1C must be 0, +0xC must be 1, and the titleID must match.
 
* [[#QueryPlayStatisticsByApplicationId]]: PlayEvent +0x1C must be 0, +0xC must be 1, and the titleID must match.
 
* [[#QueryAccountEvent]]: PlayEvent +0x1C must be 1 and PlayEvent +0x18 must be <=1.
 
* [[#QueryAccountEvent]]: PlayEvent +0x1C must be 1 and PlayEvent +0x18 must be <=1.
 +
* [[#QueryApplicationPlayStatisticsForSystem]]: In addition to the above, this also handles [[#PlayEventType]] PowerStateChange, where PlayEvent +0x0 is value 0 or 1.
 +
 +
The structure of the first 0x1C-bytes are determined by [[#PlayEventType]]. For titleIDs/userIDs, the low/high u32 in each u64 is swapped.
 +
 +
Applet:
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x8 || titleID
 +
|-
 +
| 0x8 || 0x4 || Title version, set by pdm:ntfy [[#NotifyAppletEvent]] and [[#Cmd9]].
 +
|-
 +
| 0x8 || 0x1 || When set to u8 0x1 by pdm:ntfy [[#Cmd8]], this indicates that +0x9 is set. Only used for non-applications.
 +
|-
 +
| 0x9 || 0x1 || See above. [[Applet_Manager_services#LibraryAppletMode|LibraryAppletMode]]
 +
|-
 +
| 0xC || 0x1 || [[Applet_Manager_services#AppletId|AppletId]]
 +
|-
 +
| 0xD || 0x1 || [[Filesystem_services#StorageId|StorageId]]
 +
|-
 +
| 0xE || 0x1 || [[#PlayLogPolicy]]
 +
|-
 +
| 0xF || 0x1 || [[#AppletEventType]]
 +
|-
 +
| 0x10 || 0xC || Unused
 +
|}
 +
 +
Account:
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0 || 0x10 || userID
 +
|-
 +
| 0x10 || 0x8 || titleID, when u8 +0x18 = 2.
 +
|-
 +
| 0x18 || 0x1 || Type. 0-1 to be listed by [[#QueryAccountEvent]], or 2 to include the above titleID.
 +
|-
 +
| 0x19 || 0x3 || Padding
 +
|}
 +
 +
PlayEventType PowerStateChange/OperationModeChange: u8 +0x0 is the input value from [[#NotifyOperationModeChangeEvent]]/[[#NotifyPowerStateChangeEvent]], the rest is unused.
    
= AccountEvent =
 
= AccountEvent =
 +
This is "nn::pdm::AccountEvent".
 +
 +
This is a 0x38-byte struct.
 +
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 492: Line 674:  
|}
 
|}
   −
This is a 0x38-byte struct.
+
= AccountPlayEvent =
 +
This is "nn::pdm::AccountPlayEvent".
 +
 
 +
This is a 0x28-byte struct and is the raw entry struct directly read from FS, without any entry filtering. This is separate from [[#PlayEvent]].
   −
= AccountPlayEvent =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 512: Line 696:  
|}
 
|}
   −
This is a 0x28-byte struct.
+
= ApplicationPlayStatistics =
 +
This is "nn::pdm::ApplicationPlayStatistics".
   −
This is the raw entry struct directly read from FS, without any entry filtering. This is separate from [[#PlayEvent]].
+
This is a 0x18-byte struct.
   −
= ApplicationPlayStatistics =
   
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 529: Line 713:  
| 0x10 || 0x8 || Total times the application title was launched.
 
| 0x10 || 0x8 || Total times the application title was launched.
 
|}
 
|}
  −
This is "nn::pdm::ApplicationPlayStatistics".
  −
  −
This is a 0x18-byte struct.
      
[[Category:Services]]
 
[[Category:Services]]

Navigation menu