Changes

Jump to navigation Jump to search
13,475 bytes added ,  18:07, 21 April 2022
Document some nfp IDebug commands and types
Line 40: Line 40:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Initialize
+
| 0 || [[#Initialize]]
 
|-
 
|-
| 1 || Finalize
+
| 1 || [[#Finalize]]
 
|-
 
|-
| 2 || ListDevices
+
| 2 || [[#ListDevices]]
 
|-
 
|-
| 3 || StartDetection
+
| 3 || [[#StartDetection_2|StartDetection]]
 
|-
 
|-
| 4 || StopDetection
+
| 4 || [[#StopDetection]]
 
|-
 
|-
| 5 || Read
+
| 5 || [[#ReadMifare|Read]]
 
|-
 
|-
| 6 || Write
+
| 6 || [[#WriteMifare|Write]]
 
|-
 
|-
| 7 || GetTagInfo
+
| 7 || [[#GetTagInfo]]
 
|-
 
|-
| 8 || GetActivateEventHandle
+
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]
 
|-
 
|-
| 9 || GetDeactivateEventHandle
+
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]
 
|-
 
|-
| 10 || GetState
+
| 10 || [[#GetState]]
 
|-
 
|-
| 11 || GetDeviceState
+
| 11 || [[#GetDeviceState]]
 
|-
 
|-
| 12 || GetNpadId
+
| 12 || [[#GetNpadId]]
 
|-
 
|-
| 13 || GetAvailabilityChangeEventHandle
+
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]
 
|}
 
|}
   Line 86: Line 86:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || InitializeOld
+
| 0 || [[#Initialize|InitializeOld]]
 
|-
 
|-
| 1 || FinalizeOld
+
| 1 || [[#Finalize|FinalizeOld]]
 
|-
 
|-
| 2 || GetStateOld
+
| 2 || [[#GetStateOld]]
 
|-
 
|-
| 3 || IsNfcEnabledOld
+
| 3 || [[#IsNfcEnabledOld]]
 
|-
 
|-
| 400 || [4.0.0+] Initialize
+
| 400 || [4.0.0+] [[#Initialize]]
 
|-
 
|-
| 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]]
 
|-
 
|-
| 404 || [4.0.0+] ListDevices
+
| 404 || [4.0.0+] [[#ListDevices]]
 
|-
 
|-
| 405 || [4.0.0+] GetDeviceState
+
| 405 || [4.0.0+] [[#GetDeviceState]]
 
|-
 
|-
| 406 || [4.0.0+] GetNpadId
+
| 406 || [4.0.0+] [[#GetNpadId]]
 
|-
 
|-
| 407 || [4.0.0+] AttachAvailabilityChangeEvent
+
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]
 
|-
 
|-
| 408 || [4.0.0+] StartDetection
+
| 408 || [4.0.0+] [[#StartDetection]]
 
|-
 
|-
| 409 || [4.0.0+] StopDetection
+
| 409 || [4.0.0+] [[#StopDetection]]
 
|-
 
|-
| 410 || [4.0.0+] GetTagInfo
+
| 410 || [4.0.0+] [[#GetTagInfo]]
 
|-
 
|-
| 411 || [4.0.0+] AttachActivateEvent
+
| 411 || [4.0.0+] [[#AttachActivateEvent]]
 
|-
 
|-
| 412 || [4.0.0+] AttachDeactivateEvent
+
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]
 
|-
 
|-
| 1000 || [4.0.0+] ReadMifare
+
| 1000 || [4.0.0+] [[#ReadMifare]]
 
|-
 
|-
| 1001 || [4.0.0+] WriteMifare
+
| 1001 || [4.0.0+] [[#WriteMifare]]
 
|-
 
|-
| 1300 || [4.0.0+] SendCommandByPassThrough
+
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]
 
|-
 
|-
| 1301 || [4.0.0+] KeepPassThroughSession
+
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]
 
|-
 
|-
| 1302 || [4.0.0+] ReleasePassThroughSession
+
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]
 
|}
 
|}
 +
 +
=== GetStateOld ===
 +
No input, returns an output u32.
 +
 +
=== IsNfcEnabledOld ===
 +
No input, returns an output bool.
 +
 +
This runs the same code as [[#IsNfcEnabled]].
 +
 +
=== GetState ===
 +
No input, returns an output u32.
 +
 +
This replaces [[#GetStateOld]].
 +
 +
=== IsNfcEnabled ===
 +
No input, returns an output bool.
 +
 +
This replaces [[#IsNfcEnabledOld]].
 +
 +
=== StartDetection ===
 +
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.
 +
 +
=== StopDetection ===
 +
Takes an input [[#DeviceHandle]], 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 timeout, 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.
    
= nfc:sys =
 
= nfc:sys =
Line 148: Line 193:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Initialize
+
| 0 || [[#Initialize]]
 
|-
 
|-
| 1 || Finalize
+
| 1 || [[#Finalize]]
 
|-
 
|-
| 2 || GetStateOld
+
| 2 || [[#GetStateOld]]
 
|-
 
|-
| 3 || IsNfcEnabledOld
+
| 3 || [[#IsNfcEnabledOld]]
 
|-
 
|-
| 100 || SetNfcEnabledOld
+
| 100 || [[#SetNfcEnabledOld]]
 
|-
 
|-
| 400 || [4.0.0+] InitializeSystem
+
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]
 
|-
 
|-
| 401 || [4.0.0+] 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]]
 
|-
 
|-
| 404 || [4.0.0+] ListDevices
+
| 404 || [4.0.0+] [[#ListDevices]]
 
|-
 
|-
| 405 || [4.0.0+] GetDeviceState
+
| 405 || [4.0.0+] [[#GetDeviceState]]
 
|-
 
|-
| 406 || [4.0.0+] GetNpadId
+
| 406 || [4.0.0+] [[#GetNpadId]]
 
|-
 
|-
| 407 || [4.0.0+] AttachAvailabilityChangeEvent
+
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]
 
|-
 
|-
| 408 || [4.0.0+] StartDetection
+
| 408 || [4.0.0+] [[#StartDetection]]
 
|-
 
|-
| 409 || [4.0.0+] StopDetection
+
| 409 || [4.0.0+] [[#StopDetection]]
 
|-
 
|-
| 410 || [4.0.0+] GetTagInfo
+
| 410 || [4.0.0+] [[#GetTagInfo]]
 
|-
 
|-
| 411 || [4.0.0+] AttachActivateEvent
+
| 411 || [4.0.0+] [[#AttachActivateEvent]]
 
|-
 
|-
| 412 || [4.0.0+] AttachDeactivateEvent
+
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]
 
|-
 
|-
| 500 || [4.0.0+] SetNfcEnabled
+
| 500 || [4.0.0+] [[#SetNfcEnabled]]
 
|-
 
|-
| 510 || [7.0.0+]
+
| 510 || [7.0.0+] [[#OutputTestWave]]
 
|-
 
|-
| 1000 || [4.0.0+] ReadMifare
+
| 1000 || [4.0.0+] [[#ReadMifare]]
 
|-
 
|-
| 1001 || [4.0.0+] WriteMifare
+
| 1001 || [4.0.0+] [[#WriteMifare]]
 
|-
 
|-
| 1300 || [4.0.0+] SendCommandByPassThrough
+
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]
 
|-
 
|-
| 1301 || [4.0.0+] KeepPassThroughSession
+
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]
 
|-
 
|-
| 1302 || [4.0.0+] ReleasePassThroughSession
+
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]
 
|}
 
|}
   −
= nfp:user =
+
=== SetNfcEnabledOld ===
 +
Takes an input bool, no output.
 +
 
 +
This runs the same code as [[#SetNfcEnabled]].
 +
 
 +
=== SetNfcEnabled ===
 +
Takes an input bool, no output.
 +
 
 +
This replaces [[#SetNfcEnabledOld]].
 +
 
 +
=== OutputTestWave ===
 +
Takes an input bool and a [[#TestWaveType]], no output.
 +
 
 +
= nfp services =
 +
 
 +
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol)
 +
 
 +
== nfp:user ==
 
This is "nn::nfp::detail::IUserManager".
 
This is "nn::nfp::detail::IUserManager".
   Line 206: Line 268:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || CreateUserInterface
+
| 0 || [[#Create*Interface|CreateUserInterface]]
 
|}
 
|}
   −
== IUser ==
+
=== IUser ===
 
This is "nn::nfp::detail::IUser".
 
This is "nn::nfp::detail::IUser".
   Line 216: Line 278:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || Initialize
+
| 0 || [[#Initialize*|Initialize]]
 +
|-
 +
| 1 || [[#Finalize*|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:sys ==
 +
This is "nn::nfp::detail::ISystemManager".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Create*Interface|CreateSystemInterface]]
 +
|}
 +
 
 +
=== ISystem ===
 +
This is "nn::nfp::detail::ISystem".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || [[#Initialize*|InitializeSystem]]
 
|-
 
|-
| 1 || Finalize
+
| 1 || [[#Finalize*|FinalizeSystem]]
 
|-
 
|-
| 2 || ListDevices
+
| 2 || [[#ListDevices]]
 
|-
 
|-
| 3 || StartDetection
+
| 3 || [[#StartDetection]]
 
|-
 
|-
| 4 || StopDetection
+
| 4 || [[#StopDetection]]
 
|-
 
|-
| 5 || Mount
+
| 5 || [[#Mount]]
 
|-
 
|-
| 6 || Unmount
+
| 6 || [[#Unmount]]
 
|-
 
|-
| 7 || OpenApplicationArea
+
| 10 || [[#Flush]]
 
|-
 
|-
| 8 || GetApplicationArea
+
| 11 || [[#Restore]]
 
|-
 
|-
| 9 || SetApplicationArea
+
| 13 || [[#GetTagInfo]]
 
|-
 
|-
| 10 || Flush
+
| 14 || [[#GetRegisterInfo]]
 
|-
 
|-
| 11 || Restore
+
| 15 || [[#GetCommonInfo]]
 
|-
 
|-
| 12 || CreateApplicationArea
+
| 16 || [[#GetModelInfo]]
 
|-
 
|-
| 13 || GetTagInfo
+
| 17 || [[#AttachActivateEvent]]
 
|-
 
|-
| 14 || GetRegisterInfo
+
| 18 || [[#AttachDeactivateEvent]]
 
|-
 
|-
| 15 || GetCommonInfo
+
| 19 || [[#GetState]]
 
|-
 
|-
| 16 || GetModelInfo
+
| 20 || [[#GetDeviceState]]
 
|-
 
|-
| 17 || AttachActivateEvent
+
| 21 || [[#GetNpadId]]
 
|-
 
|-
| 18 || AttachDeactivateEvent
+
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]
 
|-
 
|-
| 19 || GetState
+
| 100 || [[#Format]]
 
|-
 
|-
| 20 || GetDeviceState
+
| 101 || [[#GetAdminInfo]]
 
|-
 
|-
| 21 || GetNpadId
+
| 102 || [[#GetRegisterInfoPrivate]]
 
|-
 
|-
| 22 || GetApplicationArea2
+
| 103 || [[#SetRegisterInfoPrivate]]
 
|-
 
|-
| 23 || AttachAvailabilityChangeEvent
+
| 104 || [[#DeleteRegisterInfo]]
 
|-
 
|-
| 24 || RecreateApplicationArea
+
| 105 || [[#DeleteApplicationArea]]
 +
|-
 +
| 106 || [[#ExistsApplicationArea]]
 
|}
 
|}
   −
= nfp:dbg =
+
== nfp:dbg ==
 
This is "nn::nfp::detail::IDebugManager".
 
This is "nn::nfp::detail::IDebugManager".
   Line 274: Line 406:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || CreateDebugInterface
+
| 0 || [[#Create*Interface|CreateDebugInterface]]
 
|}
 
|}
   −
== IDebug ==
+
=== IDebug ===
 
This is "nn::nfp::detail::IDebug".
 
This is "nn::nfp::detail::IDebug".
   Line 284: Line 416:  
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 || InitializeDebug
+
| 0 || [[#Initialize*|InitializeDebug]]
 +
|-
 +
| 1 || [[#Finalize*|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]]
 
|-
 
|-
| 1 || FinalizeDebug
+
| 15 || [[#GetCommonInfo]]
 
|-
 
|-
| 2 || ListDevices
+
| 16 || [[#GetModelInfo]]
 
|-
 
|-
| 3 || StartDetection
+
| 17 || [[#AttachActivateEvent]]
 
|-
 
|-
| 4 || StopDetection
+
| 18 || [[#AttachDeactivateEvent]]
 
|-
 
|-
| 5 || Mount
+
| 19 || [[#GetState]]
 
|-
 
|-
| 6 || Unmount
+
| 20 || [[#GetDeviceState]]
 
|-
 
|-
| 7 || OpenApplicationArea
+
| 21 || [[#GetNpadId]]
 
|-
 
|-
| 8 || GetApplicationArea
+
| 22 || [[#GetApplicationAreaSize]]
 
|-
 
|-
| 9 || SetApplicationArea
+
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]
 
|-
 
|-
| 10 || Flush
+
| 24 || [3.0.0+] [[#RecreateApplicationArea]]
 
|-
 
|-
| 11 || Restore
+
| 100 || [[#Format]]
 
|-
 
|-
| 12 || CreateApplicationArea
+
| 101 || [[#GetAdminInfo]]
 
|-
 
|-
| 13 || GetTagInfo
+
| 102 || [[#GetRegisterInfoPrivate]]
 
|-
 
|-
| 14 || GetRegisterInfo
+
| 103 || [[#SetRegisterInfoPrivate]]
 
|-
 
|-
| 15 || GetCommonInfo
+
| 104 || [[#DeleteRegisterInfo]]
 
|-
 
|-
| 16 || GetModelInfo
+
| 105 || [[#DeleteApplicationArea]]
 
|-
 
|-
| 17 || AttachActivateEvent
+
| 106 || [[#ExistsApplicationArea]]
 
|-
 
|-
| 18 || AttachDeactivateEvent
+
| 200 || [[#GetAll]]
 
|-
 
|-
| 19 || GetState
+
| 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]
 +
|}
 +
 
 +
==== GetAll ====
 +
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.
 +
 
 +
==== SetAll ====
 +
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.
 +
 
 +
==== FlushDebug ====
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
==== BreakTag ====
 +
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.
 +
 
 +
==== ReadBackupData ====
 +
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).
 +
 
 +
==== WriteBackupData ====
 +
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.
 +
 
 +
The buffer size must be less or equal than 0x1FBD20.
 +
 
 +
==== WriteNtf ====
 +
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.
 +
 
 +
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.
 +
 
 +
== Common ==
 +
 
 +
=== Create*Interface ===
 +
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).
 +
 
 +
=== Initialize* ===
 +
Takes a PID, an [[AM_services|AppletResourceUserId]], an u64 placeholder for the PID, a type-0x5 input buffer containing an array of [[#RequiredMcuVersionData]], no output.
 +
 
 +
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.
 +
 
 +
=== ListDevices ===
 +
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.
 +
 
 +
This can return a maximum of 0xA entries.
 +
 
 +
=== StartDetection ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.
 +
 
 +
=== StopDetection ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== Mount ===
 +
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.
 +
 
 +
=== Unmount ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== OpenApplicationArea ===
 +
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.
 +
 
 +
The amiibo must be already using its application area with the input access ID (the game must have already created savedata there). Result 0x10073 will be returned if no application area exists, result 0x13073 will be returned if the application area is currently used with a different access ID.
 +
 
 +
=== GetApplicationArea ===
 +
Takes an input [[#DeviceHandle]] and a type-0x6 output buffer, returns an output u32 size.
 +
 
 +
Reads the buffer data in the application area and returns the size read from the application area.
 +
 
 +
 
 +
The application area needs to be opened first.
 +
 
 +
=== SetApplicationArea ===
 +
Takes an input [[#DeviceHandle]] and a type-0x5 input buffer, no output.
 +
 
 +
Writes the buffer data in the application area.
 +
 
 +
The application area needs to be opened first.
 +
 
 +
=== Flush ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== Restore ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== CreateApplicationArea ===
 +
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.
 +
 
 +
Creates the application area with the input access ID, and writes the buffer data there.
 +
 
 +
=== GetTagInfo ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].
 +
 
 +
=== GetRegisterInfo ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].
 +
 
 +
=== GetCommonInfo ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].
 +
 
 +
=== GetModelInfo ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].
 +
 
 +
=== AttachActivateEvent ===
 +
Takes an input [[#DeviceHandle]], returns an output Event handle.
 +
 
 +
sdknso uses EventClearMode=1.
 +
 
 +
=== AttachDeactivateEvent ===
 +
Takes an input [[#DeviceHandle]], returns an output Event handle.
 +
 
 +
sdknso uses EventClearMode=1.
 +
 
 +
=== GetState ===
 +
Returns an output u32 [[#State]].
 +
 
 +
=== GetDeviceState ===
 +
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].
 +
 
 +
The returned state is loaded from a lookup table. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.
 +
 
 +
=== GetNpadId ===
 +
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.
 +
 
 +
=== GetApplicationAreaSize ===
 +
Takes an input [[#DeviceHandle]], returns an output u32 size.
 +
 
 +
Actually returns a hardcoded value of 0xD8.
 +
 
 +
=== AttachAvailabilityChangeEvent ===
 +
No input, returns an output Event handle.
 +
 
 +
sdknso uses EventClearMode=1.
 +
 
 +
=== RecreateApplicationArea ===
 +
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.
 +
 
 +
Recreates the application area with the input access ID, and writes the buffer data there.
 +
 
 +
=== Format ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== GetAdminInfo ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].
 +
 
 +
=== GetRegisterInfoPrivate ===
 +
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].
 +
 
 +
=== SetRegisterInfoPrivate ===
 +
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].
 +
 
 +
=== DeleteRegisterInfo ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== DeleteApplicationArea ===
 +
Takes an input [[#DeviceHandle]], no output.
 +
 
 +
=== ExistsApplicationArea ===
 +
Takes an input [[#DeviceHandle]], returns an output u8/bool.
 +
 
 +
= 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.
 +
 
 +
= NfcProtocol =
 +
This is s32 enum "nn::nfc::NfcProtocol". Value -1 can be used as a default.
 +
 
 +
= 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.
 +
 
 +
= State =
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 20 || GetDeviceState
+
! Value || Description
 
|-
 
|-
| 21 || GetNpadId
+
| 0 || NonInitialized
 
|-
 
|-
| 22 || GetApplicationArea2
+
| 1 || Initialized
 +
|}
 +
 
 +
= DeviceState =
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 23 || AttachAvailabilityChangeEvent
+
! Value || Description
 
|-
 
|-
| 24 || RecreateApplicationArea
+
| 0 || Initialized
 
|-
 
|-
| 100 || Format
+
| 1 || Searching for tag
 
|-
 
|-
| 101 || GetAdminInfo
+
| 2 || Tag found
 
|-
 
|-
| 102 || GetRegisterInfo
+
| 3 || Tag removed
 
|-
 
|-
| 103 || SetRegisterInfo
+
| 4 || Tag mounted
 
|-
 
|-
| 104 || DeleteRegisterInfo
+
| 5 || Unavailable
 
|-
 
|-
| 105 || DeleteApplicationArea
+
| 6 || Finalized
 +
|}
 +
 
 +
= ModelType =
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 106 || ExistsApplicationArea
+
! Value || Description
 
|-
 
|-
| 200 || GetAll
+
| 0 || Amiibo
 +
|}
 +
 
 +
= MountTarget =
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 201 || SetAll
+
! Value || Description
 
|-
 
|-
| 202 || FlushDebug
+
| 1 || ROM
 
|-
 
|-
| 203 || BreakTag
+
| 2 || RAM
 
|-
 
|-
| 204 || ReadBackupData
+
| 3 || All
 +
|}
 +
 
 +
= Date =
 +
 
 +
This is "nn::nfp::Date":
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 205 || WriteBackupData
+
! Offset || Size || Description
 
|-
 
|-
| 206 || WriteNtf
+
| 0x0 || 0x2 || Year
 
|-
 
|-
| 300 || [1.0.0-3.0.2]
+
| 0x2 || 0x1 || Month
 
|-
 
|-
| 301 || [1.0.0-3.0.2]
+
| 0x3 || 0x1 || Day
 +
|}
 +
 
 +
= TagInfo =
 +
This is "nn::nfp::TagInfo". This is a 0x58-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 302 || [1.0.0-3.0.2]
+
! Offset || Size || Description
 
|-
 
|-
| 303 || [1.0.0-3.0.2]
+
| 0x0 || 0xA || UUID
 
|-
 
|-
| 304 || [1.0.0-3.0.2]
+
| 0xA || 0x1 || UUID length
 
|-
 
|-
| 305 || [1.0.0-3.0.2]
+
| 0xB || 0x15 || Reserved
 
|-
 
|-
| 306 || [1.0.0-3.0.2]
+
| 0x20 || 0x4 || Protocol
 
|-
 
|-
| 307 || [1.0.0-3.0.2]
+
| 0x24 || 0x4 || Tag type
 
|-
 
|-
| 308 || [1.0.0-3.0.2]
+
| 0x28 || 0x30 || Reserved
 +
|}
 +
 
 +
= RegisterInfo =
 +
This is "nn::nfp::RegisterInfo". This is a 0x100-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 309 || [1.0.0-3.0.2]
+
! Offset || Size || Description
 
|-
 
|-
| 310 || [1.0.0-3.0.2]
+
| 0x0 || 0x58 || Mii CharInfo (see mii services)
 
|-
 
|-
| 311 || [1.0.0-3.0.2]
+
| 0x58 || 0x4 || First write date (see [[#Date]])
 
|-
 
|-
| 312 || [1.0.0-3.0.2]
+
| 0x5C || 0x29 || Amiibo name (NUL-terminated string)
 
|-
 
|-
| 313 || [1.0.0-3.0.2]
+
| 0x85 || 0x1 || Unknown
 
|-
 
|-
| 314 || [1.0.0-3.0.2]
+
| 0x86 || 0x7A || Reserved
 
|}
 
|}
   −
= nfp:sys =
+
= CommonInfo =
This is "nn::nfp::detail::ISystemManager".
+
This is ""nn::nfp::CommonInfo". This is a 0x40-byte struct.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Offset || Size || Description
 +
|-
 +
| 0x0 || 0x4 || Last write date (see [[#Date]])
 +
|-
 +
| 0x4 || 0x2 || Write counter
 +
|-
 +
| 0x6 || 0x1 || Version
 +
|-
 +
| 0x7 || 0x1 || Padding
 +
|-
 +
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])
 
|-
 
|-
| 0 || CreateSystemInterface
+
| 0xC || 0x34 || Reserved
 
|}
 
|}
   −
== ISystem ==
+
= ModelInfo =
This is "nn::nfp::detail::ISystem".
+
This is "nn::nfp::ModelInfo". This is a 0x40-byte struct.
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Cmd || Name
+
! Offset || Size || Description
 
|-
 
|-
| 0 || InitializeSystem
+
| 0x0 || 0x2 || Game and character ID
 
|-
 
|-
| 1 || FinalizeSystem
+
| 0x2 || 0x1 || Character variant
 
|-
 
|-
| 2 || ListDevices
+
| 0x3 || 0x1 || Figure type
 
|-
 
|-
| 3 || StartDetection
+
| 0x4 || 0x2 || Model number
 
|-
 
|-
| 4 || StopDetection
+
| 0x6 || 0x1 || Series
 
|-
 
|-
| 5 || Mount
+
| 0x7 || 0x39 || Reserved
 +
|}
 +
 
 +
= AdminInfo =
 +
This is "nn::nfp::AdminInfo". This is a 0x40-byte struct.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 6 || Unmount
+
! Offset || Size || Description
 
|-
 
|-
| 10 || Flush
+
| 0x0 || 0x8 || Program ID (From the Wii U, 3DS or Switch title who created the application area)
 
|-
 
|-
| 11 || Restore
+
| 0x8 || 0x4 || [[#Access ID]]
 
|-
 
|-
| 13 || GetTagInfo
+
| 0xC || 0x2 || CRC32 change counter
 
|-
 
|-
| 14 || GetRegisterInfo
+
| 0xE || 0x1 || Flags (bit0 = amiibo was initialized in console settings, bit1 = has application area, bit2/bit3 unknown)
 
|-
 
|-
| 15 || GetCommonInfo
+
| 0xF || 0x1 || Unknown, hardcoded to 0x2
 
|-
 
|-
| 16 || GetModelInfo
+
| 0x10 || 0x1 || 0xFF if there is no application area, related to the console of the application area game otherwise (0/2 = 3DS, 1 = Wii U, 3 = Switch)
 
|-
 
|-
| 17 || AttachActivateEvent
+
| 0x11 || 0x7 || Padding
 
|-
 
|-
| 18 || AttachDeactivateEvent
+
| 0x18 || 0x28 || Reserved
 +
|}
 +
 
 +
= RegisterInfoPrivate =
 +
This is "nn::nfp::RegisterInfoPrivate". This is a 0x100-byte struct.
 +
 
 +
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 19 || GetState
+
! Offset || Size || Description
 
|-
 
|-
| 20 || GetDeviceState
+
| 0x0 || 0x44 || Mii StoreData (see mii services)
 
|-
 
|-
| 21 || GetNpadId
+
| 0x44 || 0x4 || First write date (see [[#Date]])
 
|-
 
|-
| 23 || AttachAvailabilityChangeEvent
+
| 0x48 || 0x29 || Amiibo name (NUL-terminated string)
 
|-
 
|-
| 100 || Format
+
| 0x71 || 0x1 || Unknown
 
|-
 
|-
| 101 || GetAdminInfo
+
| 0x72 || 0x8E || Reserved
 +
|}
 +
 
 +
= NfpData =
 +
This is "nn::nfp::NfpData". This is a 0x298-byte struct.
 +
 
 +
= BreakType =
 +
This is "nn::nfp::BreakType".
 +
 
 +
{| class="wikitable" border="1"
 
|-
 
|-
| 102 || GetRegisterInfo
+
! Value || Description
 
|-
 
|-
| 103 || SetRegisterInfo
+
| 0 || ?
 
|-
 
|-
| 104 || DeleteRegisterInfo
+
| 1 || ?
 
|-
 
|-
| 105 || DeleteApplicationArea
+
| 2 || ?
 +
|}
 +
 
 +
Value 0 is internally used in some places, aside for [[#BreakTag]] commands called externally.
 +
 
 +
= WriteType =
 +
This is "nn::nfp::WriteType".
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Value || Description
 +
|-
 +
| 0 || ?
 
|-
 
|-
| 106 || ExistsApplicationArea
+
| 1 || ?
 
|}
 
|}
   −
= Application IDs =
+
= Access ID =
Application IDs (also referenced as "access_id" in official software) are game-unique u32s used to access the amiibo 0xd8-big application area.
+
Access IDs are game-unique u32s used to access the amiibo application area.
 +
 
 +
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.
 +
 
 +
== Nintendo Switch titles ==
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Game || AppID
+
! Game || Access ID
 +
|-
 +
| Super Smash Bros. Ultimate || 0x34F80200
 
|-
 
|-
| Super Smash Bros. Ultimate || 0x34f80200
+
| Splatoon 2 || 0x10162B00
 +
|-
 +
| The Legend of Zelda: Breath of the Wild || 0x1019C800
 +
|-
 +
| The Legend of Zelda: Link's Awakening || 0x3B440400
 
|}
 
|}
    
[[Category:Services]]
 
[[Category:Services]]
 +
 +
= 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.
17

edits

Navigation menu