Difference between revisions of "NFC services"

From Nintendo Switch Brew
Jump to navigation Jump to search
Line 217: Line 217:
  
 
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.
 
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 ==
 
== KeepPassThroughSession ==

Revision as of 21:53, 27 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

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

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

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