Line 494: |
Line 494: |
| This is a 0x18-byte struct. This contains data from the last time the title was played. | | This is a 0x18-byte struct. This contains data from the last time the title was played. |
| | | |
− | = PlayEvent = | + | = PlayEventType = |
| {| 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 |
| + | | Applet |
| |- | | |- |
− | | 0xC || 0x1 || ? | + | | 1 |
| + | | Account |
| |- | | |- |
− | | 0xD || 0x1 || ? | + | | 2 |
| + | | PowerStateChange |
| |- | | |- |
− | | 0xE || 0x1 || ? | + | | 3 |
| + | | OperationModeChange |
| + | |} |
| + | |
| + | This is an enum for [[#PlayEvent]] +0x1C, which indicates the type of [[#PlayEvent]]. |
| + | |
| + | = PlayEvent = |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 0xF || 0x1 || ?
| + | ! Offset |
− | |-
| + | ! Size |
− | | 0x18 || 0x1 || ?
| + | ! Description |
| |- | | |- |
− | | 0x1C || 0x1 || ? | + | | 0x1C || 0x1 || [[#PlayEventType]] |
| |- | | |- |
− | | 0x1D || 0x3 || ? | + | | 0x1D || 0x3 || Padding |
| |- | | |- |
| | 0x20 || 0x8 || PosixTime timestamp from [[PCV_services|StandardUserSystemClock]]. | | | 0x20 || 0x8 || PosixTime timestamp from [[PCV_services|StandardUserSystemClock]]. |
Line 532: |
Line 541: |
| * [[#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. |
| + | |
| + | 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 || ? |
| + | |- |
| + | | 0x9 || 0x1 || ? |
| + | |- |
| + | | 0xC || 0x1 || ? |
| + | |- |
| + | | 0xD || 0x1 || ? |
| + | |- |
| + | | 0xE || 0x1 || ? |
| + | |- |
| + | | 0xF || 0x1 || ? |
| + | |- |
| + | | 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 = |