Difference between revisions of "Shared Database services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 204: Line 204:
 
| 4 || NotifyClearAllEvent
 
| 4 || NotifyClearAllEvent
 
|-
 
|-
| 5 || NotifyEventForDebug
+
| 5 || [[#NotifyEventForDebug]]
 
|-
 
|-
 
| 6 || [4.0.0+] SuspendUserAccountEventService
 
| 6 || [4.0.0+] SuspendUserAccountEventService
Line 214: Line 214:
 
| 9 || [8.0.0+]
 
| 9 || [8.0.0+]
 
|}
 
|}
 +
 +
== NotifyEventForDebug ==
 +
Takes an input type-0x5 buffer containing an array of [[#PlayEvent]], no output.
 +
 +
Gets the [[System_Settings|system-setting]] <code>pdm!is_production</code>, the size must be 1 and the value must be 0, otherwise an error is returned.
 +
 +
Each [[#PlayEvent]] entry is validated, throwing an error on failure. After an entry is successfully validated, it is written to the log.
  
 
= pdm:qry =
 
= pdm:qry =

Revision as of 16:49, 4 July 2019

pl:u

This is "nn::pl::detail::IPlatformServiceManager".

Cmd Name
0 #RequestSharedFontLoad
1 #GetSharedFontLoadState
2 #GetSharedFontSize
3 #GetSharedFontAddress
4 #GetSharedFontSharedMemoryHandle
5 #GetSharedFontInOrderOfPriority
6 [4.0.0+] GetSharedFontInOrderOfPriorityForSystem
100 [8.0.0+] RequestApplicationFunctionAuthorization
101 [8.0.0+] RequestApplicationFunctionAuthorizationForSystem

RequestSharedFontLoad

Takes a #SharedFontType (uint32), no output.

GetSharedFontLoadState

Takes a #SharedFontType (uint32), returns the #LoadState (uint32).

LoadState

Value Description
0x00 Loading
0x01 Loaded

GetSharedFontSize

Takes a #SharedFontType (uint32), returns the Font Size (uint32).

GetSharedFontAddress

Takes a #SharedFontType (uint32), returns the offset (uint32) to the Font Address.

GetSharedFontSharedMemoryHandle

No input, returns an output SharedMemory handle.

User-processes map this SharedMemory with size=0x1100000 and permissions=R--.

Font data is TTF, located at the offset returned by #GetSharedFontAddress.

GetSharedFontInOrderOfPriority

Takes an input u64 LanguageCode and 3 type-0x6 output buffers, returns an output u8 and u32. The u8 is a bool to specify if the fonts are loaded or not and the u32 is the font count. The first buffer contains a list of Shared font types, the second buffer contains the font offsets and the final buffer contains the font sizes. The buffers are an array of u32s which specify information about a specific font. Buffer1[n] is related to Buffer2[n] and Buffer3[n]. Example: Font index 0s offset is at Buffer2[0], size is at Buffer3[0]. The fonts are relative to the shared memory created by #GetSharedFontSharedMemoryHandle

SharedFontType

Value Description
0x00 Japan, US and Europe (Standard)
0x01 Chinese Simplified
0x02 Extended Chinese Simplified
0x03 Chinese Traditional
0x04 Korean (Hangul)
0x05 Nintendo Extended
  • Nintendo Extended: Contains Nintendo-specific characters, including HID buttons, HID controller styles, applet icons, Wii(U) icons, etc.

mii:u, mii:e

This is "nn::mii::detail::IStaticService".

Cmd Name
0 GetDatabaseService

IDatabaseService

This is "nn::mii::detail::IDatabaseService".

Cmd Name
0 IsUpdated
1 IsFullDatabase
2 GetCount
3 Get
4 Get1
5 UpdateLatest
6 BuildRandom
7 BuildDefault
8 Get2
9 Get3
10 UpdateLatest1
11 FindIndex
12 Move
13 AddOrReplace
14 Delete
15 DestroyFile
16 DeleteFile
17 Format
18 Import
19 Export
20 IsBrokenDatabaseWithClearFlag
21 GetIndex
22 [5.0.0+] SetInterfaceVersion
23 [5.0.0+] Convert
24 [7.0.0+] ConvertCoreDataToCharInfo
25 [7.0.0+] ConvertCharInfoToCoreData

miiimg

This is "nn::mii::detail::IImageDatabaseService".

This was added with [5.0.0+].

Cmd Name
0 Initialize
10 Reload
11 GetCount
12 IsEmpty
13 IsFull
14 GetAttribute
15 LoadImage
16 AddOrUpdateImage
17 DeleteImages
100 DeleteFile
101 DestroyFile
102 ImportFile
103 ExportFile
104 ForceInitialize

pdm:ntfy

This is "nn::pdm::detail::INotifyService".

Cmd Name
0 NotifyAppletEvent
2 NotifyOperationModeChangeEvent
3 NotifyPowerStateChangeEvent
4 NotifyClearAllEvent
5 #NotifyEventForDebug
6 [4.0.0+] SuspendUserAccountEventService
7 [4.0.0+] ResumeUserAccountEventService
8 [6.0.0+]
9 [8.0.0+]

NotifyEventForDebug

Takes an input type-0x5 buffer containing an array of #PlayEvent, no output.

Gets the system-setting pdm!is_production, the size must be 1 and the value must be 0, otherwise an error is returned.

Each #PlayEvent entry is validated, throwing an error on failure. After an entry is successfully validated, it is written to the log.

pdm:qry

This is "nn::pdm::detail::IQueryService".

Cmd Name
0 #QueryApplicationEvent
[1.0.0-6.2.0] 1 QueryPlayStatistics
[1.0.0-6.2.0] 2 QueryPlayStatisticsByUserAccountId
[1.0.0-6.2.0] 3 QueryPlayStatisticsByNetworkServiceAccountId
4 #QueryPlayStatisticsByApplicationId
5 #QueryPlayStatisticsByApplicationIdAndUserAccountId
[1.0.0-6.2.0] 6 QueryPlayStatisticsByApplicationIdAndNetworkServiceAccountId
7 #QueryLastPlayTime
8 #QueryPlayEvent
9 #GetAvailablePlayEventRange
10 #QueryAccountEvent
11 [4.0.0+] #QueryAccountPlayEvent
12 [4.0.0+] #GetAvailableAccountPlayEventRange
13 [5.0.0+] #QueryApplicationPlayStatisticsForSystem
14 [6.0.0+]
15 [6.0.0+]
16 [6.0.0+]

QueryApplicationEvent

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.

QueryPlayStatisticsByApplicationId

Takes an input u64 titleID and returns an output #PlayStatistics.

QueryPlayStatisticsByApplicationIdAndUserAccountId

Takes an input u64 titleID, an input u128 userID, and returns an output #PlayStatistics.

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.

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.

GetAvailablePlayEventRange

No input, returns 3 output u32s: total_entries, start_entryindex, and end_entryindex.

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.

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.

GetAvailableAccountPlayEventRange

Takes an input u128 userID and returns 3 output u32s: total_entries, start_entryindex, and end_entryindex.

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.

The number of entries in each array is the same.

Cmd14

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.

Returns a list of titles played by the specified user.

Cmd15

No input, returns an output handle.

Cmd16

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.

Same as #QueryApplicationPlayStatisticsForSystem except this gets playstats specific to userIDs.

avm

This is "nn::avm::srv::IAvmService".

This was added with [6.0.0+].

Cmd Name
100
101
102
103 No input, returns an #IVersionListImporter.
200
202
1000
1001
1002

IVersionListImporter

This is "nn::avm::srv::IVersionListImporter".

This was added with [6.0.0+].

Cmd Name
0
1
2

ApplicationEvent

Offset Size Description
0x0 0x8 titleID
0x8 0x4 entryindex
0xC 0x4 timestamp0
0x10 0x4 timestamp1
0x14 0x1 #PlayEvent +0xF
0x15 0x3 Padding

This is a 0x18-byte struct.

Timestamp format, converted from PosixTime: total minutes since epoch UTC 1999/12/31 00:00.

PlayStatistics

Offset Size Description
0x0 0x8 titleID
0x8 0x4 First entryindex
0xC 0x4 First timestamp0. Same as the first #ApplicationEvent timestamp.
0x10 0x4 First timestamp1. Same as the second #ApplicationEvent timestamp.
0x14 0x4 Last entryindex
0x18 0x4 Last timestamp0. Same as the first #ApplicationEvent timestamp.
0x1C 0x4 Last timestamp1. Same as the second #ApplicationEvent timestamp.
0x20 0x4 Total play-time in minutes.
0x24 0x4 Total times the application title was launched.

This is a 0x28-byte struct.

LastPlayTime

Offset Size Description
0x0 0x8 titleID
0x8 0x4 Same as the first #ApplicationEvent timestamp.
0xC 0x4 Same as the second #ApplicationEvent timestamp.
0x10 0x4 Total minutes since the title was last played.
0x14 0x1 Flag indicating whether the above field is set.
0x15 0x3 Padding

This is a 0x18-byte struct. This contains data from the last time the title was played.

PlayEvent

Offset Size Description
0x0 0x0x10 titleID or userID, with the u32 low/high words swapped in each u64.
0xC 0x1 ?
0xD 0x1 ?
0xE 0x1 ?
0xF 0x1 ?
0x18 0x1 ?
0x1C 0x1 ?
0x1D 0x3 ?
0x20 0x8 PosixTime timestamp0
0x28 0x8 PosixTime timestamp1
0x30 0x8 Timestamp in seconds derived from StandardSteadyClock.

This is a 0x38-byte struct.

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.

Filtering:

AccountEvent

Offset Size Description
0x0 0x10 userID
0x10 0x4 entryindex
0x14 0x4 Padding
0x18 0x8 #PlayEvent +0x20
0x20 0x8 #PlayEvent +0x28
0x28 0x8 #PlayEvent +0x30
0x30 0x1 #PlayEvent +0x18
0x31 0x7 Padding

This is a 0x38-byte struct.

AccountPlayEvent

Offset Size Description
0x0 0x4 ?
0x4 0x8 titleID, with the u32 low/high words swapped.
0xC 0xC ?
0x18 0x8 POSIX timestamp
0x20 0x8 POSIX timestamp

This is a 0x28-byte struct.

This is the raw entry struct directly read from FS, without any entry filtering. This is separate from #PlayEvent.

ApplicationPlayStatistics

Offset Size Description
0x0 0x8 titleID
0x8 0x8 Total play-time in nanoseconds.
0x10 0x8 Total times the application title was launched.

This is "nn::pdm::ApplicationPlayStatistics".

This is a 0x18-byte struct.