Difference between revisions of "NFC services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 60: Line 60:
 
| 9 || GetDeactivateEventHandle
 
| 9 || GetDeactivateEventHandle
 
|-
 
|-
| 10 || GetState
+
| 10 || [[#GetState]]
 
|-
 
|-
 
| 11 || GetDeviceState
 
| 11 || GetDeviceState
Line 90: Line 90:
 
| 1 || [[#Finalize|FinalizeOld]]
 
| 1 || [[#Finalize|FinalizeOld]]
 
|-
 
|-
| 2 || GetStateOld
+
| 2 || [[#GetStateOld]]
 
|-
 
|-
 
| 3 || IsNfcEnabledOld
 
| 3 || IsNfcEnabledOld
Line 98: Line 98:
 
| 401 || [4.0.0+] [[#Finalize]]
 
| 401 || [4.0.0+] [[#Finalize]]
 
|-
 
|-
| 402 || [4.0.0+] GetState
+
| 402 || [4.0.0+] [[#GetState]]
 
|-
 
|-
 
| 403 || [4.0.0+] IsNfcEnabled
 
| 403 || [4.0.0+] IsNfcEnabled
Line 130: Line 130:
 
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]
 
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]
 
|}
 
|}
 +
 +
== GetStateOld ==
 +
No input, returns an output u32.
 +
 +
== GetState ==
 +
No input, returns an output u32.
 +
 +
This replaces [[#GetStateOld]].
  
 
= nfc:sys =
 
= nfc:sys =
Line 152: Line 160:
 
| 1 || [[#Finalize]]
 
| 1 || [[#Finalize]]
 
|-
 
|-
| 2 || GetStateOld
+
| 2 || [[#GetStateOld]]
 
|-
 
|-
 
| 3 || IsNfcEnabledOld
 
| 3 || IsNfcEnabledOld
Line 162: Line 170:
 
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]
 
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]
 
|-
 
|-
| 402 || [4.0.0+] GetState
+
| 402 || [4.0.0+] [[#GetState]]
 
|-
 
|-
 
| 403 || [4.0.0+] IsNfcEnabled
 
| 403 || [4.0.0+] IsNfcEnabled
Line 281: Line 289:
 
| 18 || AttachDeactivateEvent
 
| 18 || AttachDeactivateEvent
 
|-
 
|-
| 19 || GetState
+
| 19 || [[#GetState]]
 
|-
 
|-
 
| 20 || GetDeviceState
 
| 20 || GetDeviceState
Line 361: Line 369:
 
| 18 || AttachDeactivateEvent
 
| 18 || AttachDeactivateEvent
 
|-
 
|-
| 19 || GetState
+
| 19 || [[#GetState]]
 
|-
 
|-
 
| 20 || GetDeviceState
 
| 20 || GetDeviceState
Line 486: Line 494:
 
| 18 || AttachDeactivateEvent
 
| 18 || AttachDeactivateEvent
 
|-
 
|-
| 19 || GetState
+
| 19 || [[#GetState]]
 
|-
 
|-
 
| 20 || GetDeviceState
 
| 20 || GetDeviceState

Revision as of 03:09, 30 November 2021

nfc:am

This is "nn::nfc::am::detail::IAmManager".

Cmd Name
0 CreateAmInterface

IAm

This is "nn::nfc::am::detail::IAm".

Cmd Name
0 Initialize
1 Finalize
2 NotifyForegroundApplet

nfc:mf:u

This is "nn::nfc::mifare::detail::IUserManager".

Cmd Name
0 CreateUserInterface

IUser

This is "nn::nfc::mifare::detail::IUser".

Cmd Name
0 #Initialize
1 #Finalize
2 ListDevices
3 StartDetection
4 StopDetection
5 Read
6 Write
7 GetTagInfo
8 GetActivateEventHandle
9 GetDeactivateEventHandle
10 #GetState
11 GetDeviceState
12 GetNpadId
13 [3.0.0+] GetAvailabilityChangeEventHandle

nfc:user

This is "nn::nfc::detail::IUserManager".

Cmd Name
0 CreateUserInterface

IUser

This is "nn::nfc::detail::IUser".

Cmd Name
0 InitializeOld
1 FinalizeOld
2 #GetStateOld
3 IsNfcEnabledOld
400 [4.0.0+] #Initialize
401 [4.0.0+] #Finalize
402 [4.0.0+] #GetState
403 [4.0.0+] IsNfcEnabled
404 [4.0.0+] ListDevices
405 [4.0.0+] GetDeviceState
406 [4.0.0+] GetNpadId
407 [4.0.0+] AttachAvailabilityChangeEvent
408 [4.0.0+] StartDetection
409 [4.0.0+] StopDetection
410 [4.0.0+] GetTagInfo
411 [4.0.0+] AttachActivateEvent
412 [4.0.0+] AttachDeactivateEvent
1000 [4.0.0+] #ReadMifare
1001 [4.0.0+] #WriteMifare
1300 [4.0.0+] #SendCommandByPassThrough
1301 [4.0.0+] #KeepPassThroughSession
1302 [4.0.0+] #ReleasePassThroughSession

GetStateOld

No input, returns an output u32.

GetState

No input, returns an output u32.

This replaces #GetStateOld.

nfc:sys

This is "nn::nfc::detail::ISystemManager".

Cmd Name
0 CreateSystemInterface

ISystem

This is "nn::nfc::detail::ISystem".

Cmd Name
0 #Initialize
1 #Finalize
2 #GetStateOld
3 IsNfcEnabledOld
100 SetNfcEnabledOld
400 [4.0.0+] InitializeSystem
401 [4.0.0+] FinalizeSystem
402 [4.0.0+] #GetState
403 [4.0.0+] IsNfcEnabled
404 [4.0.0+] ListDevices
405 [4.0.0+] GetDeviceState
406 [4.0.0+] GetNpadId
407 [4.0.0+] AttachAvailabilityChangeEvent
408 [4.0.0+] StartDetection
409 [4.0.0+] StopDetection
410 [4.0.0+] GetTagInfo
411 [4.0.0+] AttachActivateEvent
412 [4.0.0+] AttachDeactivateEvent
500 [4.0.0+] #SetNfcEnabled
510 [7.0.0+] #OutputTestWave
1000 [4.0.0+] #ReadMifare
1001 [4.0.0+] #WriteMifare
1300 [4.0.0+] #SendCommandByPassThrough
1301 [4.0.0+] #KeepPassThroughSession
1302 [4.0.0+] #ReleasePassThroughSession

SetNfcEnabled

Takes an input bool, no output.

OutputTestWave

Takes an input bool and a #TestWaveType, no output.

ReadMifare

Takes an input #DeviceHandle, a type-0x6 output buffer containing an array of #MifareReadBlockData, a type-0x5 input buffer containing an array of #MifareReadBlockParameter, no output.

sdknso passes the same user-specified array-count for both buffers.

WriteMifare

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

SendCommandByPassThrough

Takes an input #DeviceHandle, a nn::TimeSpan, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.

sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.

This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.

KeepPassThroughSession

Takes an input #DeviceHandle, no output.

ReleasePassThroughSession

Takes an input #DeviceHandle, no output.

nfp:user

This is "nn::nfp::detail::IUserManager".

Cmd Name
0 CreateUserInterface

IUser

This is "nn::nfp::detail::IUser".

Cmd Name
0 #Initialize
1 #Finalize
2 ListDevices
3 StartDetection
4 StopDetection
5 Mount
6 Unmount
7 OpenApplicationArea
8 GetApplicationArea
9 SetApplicationArea
10 Flush
11 Restore
12 CreateApplicationArea
13 GetTagInfo
14 GetRegisterInfo
15 GetCommonInfo
16 GetModelInfo
17 AttachActivateEvent
18 AttachDeactivateEvent
19 #GetState
20 GetDeviceState
21 GetNpadId
22 GetApplicationAreaSize
23 [3.0.0+] AttachAvailabilityChangeEvent
24 [3.0.0+] RecreateApplicationArea

Initialize

Takes a PID, an AppletResourceUserId, an u64, a type-0x5 input buffer containing an array of #RequiredMcuVersionData, no output.

sdknso passes value 0 for the u64.

Internally this is mostly the same for each service, this differs depending on the service/cmd however.

Finalize

No input/output.

Internally this is mostly the same for each service, this differs depending on the service/cmd however.

nfp:dbg

This is "nn::nfp::detail::IDebugManager".

Cmd Name
0 CreateDebugInterface

IDebug

This is "nn::nfp::detail::IDebug".

Cmd Name
0 InitializeDebug
1 FinalizeDebug
2 ListDevices
3 StartDetection
4 StopDetection
5 Mount
6 Unmount
7 OpenApplicationArea
8 GetApplicationArea
9 SetApplicationArea
10 Flush
11 Restore
12 CreateApplicationArea
13 GetTagInfo
14 GetRegisterInfo
15 GetCommonInfo
16 GetModelInfo
17 AttachActivateEvent
18 AttachDeactivateEvent
19 #GetState
20 GetDeviceState
21 GetNpadId
22 GetApplicationArea2
23 [3.0.0+] AttachAvailabilityChangeEvent
24 [3.0.0+] RecreateApplicationArea
100 Format
101 GetAdminInfo
102 GetRegisterInfo
103 SetRegisterInfo
104 DeleteRegisterInfo
105 DeleteApplicationArea
106 ExistsApplicationArea
200 GetAll
201 SetAll
202 FlushDebug
203 BreakTag
204 ReadBackupData
205 WriteBackupData
206 #WriteNtf
300 [3.0.0-3.0.2]
301 [3.0.0-3.0.2]
302 [3.0.0-3.0.2]
303 [3.0.0-3.0.2]
304 [3.0.0-3.0.2]
305 [3.0.0-3.0.2]
306 [3.0.0-3.0.2]
307 [3.0.0-3.0.2]
308 [3.0.0-3.0.2]
309 [3.0.0-3.0.2]
310 [3.0.0-3.0.2]
311 [3.0.0-3.0.2]
312 [3.0.0-3.0.2]
313 [3.0.0-3.0.2]
314 [3.0.0-3.0.2]

WriteNtf

Takes an input #DeviceHandle, an u32, a type-0x5 input buffer, no output.

The input buffer size must match 0x2A0.

This handles Amiibo crypto etc.

nfp:sys

This is "nn::nfp::detail::ISystemManager".

Cmd Name
0 CreateSystemInterface

ISystem

This is "nn::nfp::detail::ISystem".

Cmd Name
0 InitializeSystem
1 FinalizeSystem
2 ListDevices
3 StartDetection
4 StopDetection
5 Mount
6 Unmount
10 Flush
11 Restore
13 GetTagInfo
14 GetRegisterInfo
15 GetCommonInfo
16 GetModelInfo
17 AttachActivateEvent
18 AttachDeactivateEvent
19 #GetState
20 GetDeviceState
21 GetNpadId
23 [3.0.0+] AttachAvailabilityChangeEvent
100 Format
101 GetAdminInfo
102 GetRegisterInfo
103 SetRegisterInfo
104 DeleteRegisterInfo
105 DeleteApplicationArea
106 ExistsApplicationArea

RequiredMcuVersionData

In sdknso, the global data containing the array data for this is "nn::nfc::client::RequiredMcuVersionData". The array entry is 0x20-bytes.

DeviceHandle

This is "nn::nfc::DeviceHandle". This is a 8-byte struct with 4-byte alignment.

TestWaveType

This is u32 enum "nn::nfc::TestWaveType".

MifareReadBlockData

This is "nn::nfc::MifareReadBlockData". This is a 0x18-byte struct.

MifareReadBlockParameter

This is "nn::nfc::MifareReadBlockParameter". This is a 0x18-byte struct.

MifareWriteBlockParameter

This is "nn::nfc::MifareWriteBlockParameter". This is a 0x28-byte struct.

RomFS

[9.0.0+] The nfc-sysmodule RomFS contains:

 ST21NFCD_01_05_6811.bin

These are firmware files for the NFC IC inside Switch Lite units.

Application IDs

Application IDs (also referenced as "access_id" in official software) are game-unique u32s used to access the amiibo 0xd8-big application area.

Game AppID
Super Smash Bros. Ultimate 0x34f80200