Line 257: |
Line 257: |
| Takes an input bool and a [[#TestWaveType]], no output. | | Takes an input bool and a [[#TestWaveType]], no output. |
| | | |
− | = nfp:user = | + | = 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 264: |
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 274: |
Line 278: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize]] | + | | 0 || [[#Initialize*|Initialize]] |
| |- | | |- |
− | | 1 || [[#Finalize]] | + | | 1 || [[#Finalize*|Finalize]] |
| |- | | |- |
| | 2 || [[#ListDevices]] | | | 2 || [[#ListDevices]] |
| |- | | |- |
− | | 3 || [[#StartDetection_2|StartDetection]] | + | | 3 || [[#StartDetection]] |
| |- | | |- |
| | 4 || [[#StopDetection]] | | | 4 || [[#StopDetection]] |
| |- | | |- |
− | | 5 || Mount | + | | 5 || [[#Mount]] |
| |- | | |- |
− | | 6 || Unmount | + | | 6 || [[#Unmount]] |
| |- | | |- |
− | | 7 || OpenApplicationArea | + | | 7 || [[#OpenApplicationArea]] |
| |- | | |- |
− | | 8 || GetApplicationArea | + | | 8 || [[#GetApplicationArea]] |
| |- | | |- |
− | | 9 || SetApplicationArea | + | | 9 || [[#SetApplicationArea]] |
| |- | | |- |
− | | 10 || Flush | + | | 10 || [[#Flush]] |
| |- | | |- |
− | | 11 || Restore | + | | 11 || [[#Restore]] |
| |- | | |- |
− | | 12 || CreateApplicationArea | + | | 12 || [[#CreateApplicationArea]] |
| |- | | |- |
| | 13 || [[#GetTagInfo]] | | | 13 || [[#GetTagInfo]] |
| |- | | |- |
− | | 14 || GetRegisterInfo | + | | 14 || [[#GetRegisterInfo]] |
| |- | | |- |
− | | 15 || GetCommonInfo | + | | 15 || [[#GetCommonInfo]] |
| |- | | |- |
− | | 16 || GetModelInfo | + | | 16 || [[#GetModelInfo]] |
| |- | | |- |
| | 17 || [[#AttachActivateEvent]] | | | 17 || [[#AttachActivateEvent]] |
Line 318: |
Line 322: |
| | 21 || [[#GetNpadId]] | | | 21 || [[#GetNpadId]] |
| |- | | |- |
− | | 22 || GetApplicationAreaSize | + | | 22 || [[#GetApplicationAreaSize]] |
| |- | | |- |
| | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] | | | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] |
| |- | | |- |
− | | 24 || [3.0.0+] RecreateApplicationArea | + | | 24 || [3.0.0+] [[#RecreateApplicationArea]] |
| |} | | |} |
| | | |
− | === Initialize === | + | == nfp:sys == |
− | Takes a PID, an [[AM_services|AppletResourceUserId]], an u64, a type-0x5 input buffer containing an array of [[#RequiredMcuVersionData]], no output.
| + | This is "nn::nfp::detail::ISystemManager". |
| | | |
− | sdknso passes value 0 for the u64.
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Cmd || Name |
| + | |- |
| + | | 0 || [[#Create*Interface|CreateSystemInterface]] |
| + | |} |
| | | |
− | Internally this is mostly the same for each service, this differs depending on the service/cmd however.
| + | === ISystem === |
| + | This is "nn::nfp::detail::ISystem". |
| | | |
− | === Finalize === | + | {| class="wikitable" border="1" |
− | No input/output.
| + | |- |
− | | + | ! Cmd || Name |
− | Internally this is mostly the same for each service, this differs depending on the service/cmd however.
| + | |- |
− | | + | | 0 || [[#Initialize*|InitializeSystem]] |
− | === ListDevices ===
| + | |- |
− | Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.
| + | | 1 || [[#Finalize*|FinalizeSystem]] |
− | | + | |- |
− | This can return a maximum of 0xA entries.
| + | | 2 || [[#ListDevices]] |
− | | + | |- |
− | === StartDetection ===
| + | | 3 || [[#StartDetection]] |
− | Takes an input [[#DeviceHandle]], no output.
| + | |- |
− | | + | | 4 || [[#StopDetection]] |
− | This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.
| + | |- |
− | | + | | 5 || [[#Mount]] |
− | === GetTagInfo ===
| + | |- |
− | Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].
| + | | 6 || [[#Unmount]] |
− | | + | |- |
− | === AttachActivateEvent ===
| + | | 10 || [[#Flush]] |
− | Takes an input [[#DeviceHandle]], returns an output Event handle.
| + | |- |
− | | + | | 11 || [[#Restore]] |
− | sdknso uses EventClearMode=1.
| + | |- |
− | | + | | 13 || [[#GetTagInfo]] |
− | === AttachDeactivateEvent ===
| + | |- |
− | Takes an input [[#DeviceHandle]], returns an output Event handle.
| + | | 14 || [[#GetRegisterInfo]] |
− | | + | |- |
− | sdknso uses EventClearMode=1.
| + | | 15 || [[#GetCommonInfo]] |
− | | + | |- |
− | === GetDeviceState ===
| + | | 16 || [[#GetModelInfo]] |
− | Takes an input [[#DeviceHandle]], returns an output u32.
| + | |- |
− | | + | | 17 || [[#AttachActivateEvent]] |
− | The returned u32 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.
| + | |- |
| + | | 18 || [[#AttachDeactivateEvent]] |
| + | |- |
| + | | 19 || [[#GetState]] |
| + | |- |
| + | | 20 || [[#GetDeviceState]] |
| + | |- |
| + | | 21 || [[#GetNpadId]] |
| + | |- |
| + | | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] |
| + | |- |
| + | | 100 || [[#Format]] |
| + | |- |
| + | | 101 || [[#GetAdminInfo]] |
| + | |- |
| + | | 102 || [[#GetRegisterInfoPrivate]] |
| + | |- |
| + | | 103 || [[#SetRegisterInfoPrivate]] |
| + | |- |
| + | | 104 || [[#DeleteRegisterInfo]] |
| + | |- |
| + | | 105 || [[#DeleteApplicationArea]] |
| + | |- |
| + | | 106 || [[#ExistsApplicationArea]] |
| + | |} |
| | | |
− | === GetNpadId === | + | == nfp:dbg == |
− | Takes an input [[#DeviceHandle]], returns an output u32 NpadId.
| |
− | | |
− | === AttachAvailabilityChangeEvent ===
| |
− | No input, returns an output Event handle.
| |
− | | |
− | sdknso uses EventClearMode=1.
| |
− | | |
− | = nfp:dbg = | |
| This is "nn::nfp::detail::IDebugManager". | | This is "nn::nfp::detail::IDebugManager". |
| | | |
Line 380: |
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 390: |
Line 416: |
| ! Cmd || Name | | ! Cmd || Name |
| |- | | |- |
− | | 0 || [[#Initialize|InitializeDebug]] | + | | 0 || [[#Initialize*|InitializeDebug]] |
| |- | | |- |
− | | 1 || [[#Finalize|FinalizeDebug]] | + | | 1 || [[#Finalize*|FinalizeDebug]] |
| |- | | |- |
| | 2 || [[#ListDevices]] | | | 2 || [[#ListDevices]] |
| |- | | |- |
− | | 3 || [[#StartDetection_2|StartDetection]] | + | | 3 || [[#StartDetection]] |
| |- | | |- |
| | 4 || [[#StopDetection]] | | | 4 || [[#StopDetection]] |
| |- | | |- |
− | | 5 || Mount | + | | 5 || [[#Mount]] |
| |- | | |- |
− | | 6 || Unmount | + | | 6 || [[#Unmount]] |
| |- | | |- |
− | | 7 || OpenApplicationArea | + | | 7 || [[#OpenApplicationArea]] |
| |- | | |- |
− | | 8 || GetApplicationArea | + | | 8 || [[#GetApplicationArea]] |
| |- | | |- |
− | | 9 || SetApplicationArea | + | | 9 || [[#SetApplicationArea]] |
| |- | | |- |
− | | 10 || Flush | + | | 10 || [[#Flush]] |
| |- | | |- |
− | | 11 || Restore | + | | 11 || [[#Restore]] |
| |- | | |- |
− | | 12 || CreateApplicationArea | + | | 12 || [[#CreateApplicationArea]] |
| |- | | |- |
| | 13 || [[#GetTagInfo]] | | | 13 || [[#GetTagInfo]] |
| |- | | |- |
− | | 14 || GetRegisterInfo | + | | 14 || [[#GetRegisterInfo]] |
| |- | | |- |
− | | 15 || GetCommonInfo | + | | 15 || [[#GetCommonInfo]] |
| |- | | |- |
− | | 16 || GetModelInfo | + | | 16 || [[#GetModelInfo]] |
| |- | | |- |
| | 17 || [[#AttachActivateEvent]] | | | 17 || [[#AttachActivateEvent]] |
Line 434: |
Line 460: |
| | 21 || [[#GetNpadId]] | | | 21 || [[#GetNpadId]] |
| |- | | |- |
− | | 22 || GetApplicationArea2 | + | | 22 || [[#GetApplicationAreaSize]] |
| |- | | |- |
| | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] | | | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] |
| |- | | |- |
− | | 24 || [3.0.0+] RecreateApplicationArea | + | | 24 || [3.0.0+] [[#RecreateApplicationArea]] |
| |- | | |- |
− | | 100 || Format | + | | 100 || [[#Format]] |
| |- | | |- |
− | | 101 || GetAdminInfo | + | | 101 || [[#GetAdminInfo]] |
| |- | | |- |
− | | 102 || GetRegisterInfo | + | | 102 || [[#GetRegisterInfoPrivate]] |
| |- | | |- |
− | | 103 || SetRegisterInfo | + | | 103 || [[#SetRegisterInfoPrivate]] |
| |- | | |- |
− | | 104 || DeleteRegisterInfo | + | | 104 || [[#DeleteRegisterInfo]] |
| |- | | |- |
− | | 105 || DeleteApplicationArea | + | | 105 || [[#DeleteApplicationArea]] |
| |- | | |- |
− | | 106 || ExistsApplicationArea | + | | 106 || [[#ExistsApplicationArea]] |
| |- | | |- |
| | 200 || GetAll | | | 200 || GetAll |
Line 499: |
Line 525: |
| |} | | |} |
| | | |
− | === WriteNtf === | + | ==== WriteNtf ==== |
| Takes an input [[#DeviceHandle]], an u32, a type-0x5 input buffer, no output. | | Takes an input [[#DeviceHandle]], an u32, a type-0x5 input buffer, no output. |
| | | |
Line 506: |
Line 532: |
| This handles Amiibo crypto etc. | | This handles Amiibo crypto etc. |
| | | |
− | = nfp:sys = | + | == Common == |
− | This is "nn::nfp::detail::ISystemManager". | + | |
| + | === Create*Interface === |
| + | Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service). |
| + | |
| + | === Initialize* === |
| + | Takes a PID, an [[AM_services|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. |
| + | |
| + | === 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 [[#ModelType]] and an input [[#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" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name | + | ! Value || Description |
| + | |- |
| + | | 0 || NonInitialized |
| |- | | |- |
− | | 0 || CreateSystemInterface | + | | 1 || Initialized |
| |} | | |} |
| | | |
− | == ISystem == | + | = DeviceState = |
− | This is "nn::nfp::detail::ISystem".
| |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
− | ! Cmd || Name | + | ! Value || Description |
| + | |- |
| + | | 0 || Initialized |
| + | |- |
| + | | 1 || Searching for tag |
| + | |- |
| + | | 2 || Tag found |
| + | |- |
| + | | 3 || Tag removed |
| |- | | |- |
− | | 0 || [[#Initialize|InitializeSystem]] | + | | 4 || Tag mounted |
| |- | | |- |
− | | 1 || [[#Finalize|FinalizeSystem]] | + | | 5 || Unavailable |
| |- | | |- |
− | | 2 || [[#ListDevices]] | + | | 6 || Finalized |
| + | |} |
| + | |
| + | = ModelType = |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 3 || [[#StartDetection_2|StartDetection]] | + | ! Value || Description |
| |- | | |- |
− | | 4 || [[#StopDetection]] | + | | 0 || Amiibo |
| + | |} |
| + | |
| + | = MountTarget = |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 5 || Mount | + | ! Value || Description |
| |- | | |- |
− | | 6 || Unmount | + | | 1 || ROM |
| |- | | |- |
− | | 10 || Flush | + | | 2 || RAM |
| |- | | |- |
− | | 11 || Restore | + | | 3 || All |
| + | |} |
| + | |
| + | = Date = |
| + | |
| + | This is "nn::nfp::Date": |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 13 || [[#GetTagInfo]] | + | ! Offset || Size || Description |
| |- | | |- |
− | | 14 || GetRegisterInfo | + | | 0x0 || 0x2 || Year |
| |- | | |- |
− | | 15 || GetCommonInfo | + | | 0x2 || 0x1 || Month |
| |- | | |- |
− | | 16 || GetModelInfo | + | | 0x3 || 0x1 || Day |
| + | |} |
| + | |
| + | = TagInfo = |
| + | This is "nn::nfp::TagInfo". This is a 0x58-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 17 || [[#AttachActivateEvent]] | + | ! Offset || Size || Description |
| |- | | |- |
− | | 18 || [[#AttachDeactivateEvent]] | + | | 0x0 || 0xA || UUID |
| |- | | |- |
− | | 19 || [[#GetState]] | + | | 0xA || 0x1 || UUID length |
| |- | | |- |
− | | 20 || [[#GetDeviceState]] | + | | 0xB || 0x15 || Reserved |
| |- | | |- |
− | | 21 || [[#GetNpadId]] | + | | 0x20 || 0x4 || Protocol |
| |- | | |- |
− | | 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]] | + | | 0x24 || 0x4 || Tag type |
| |- | | |- |
− | | 100 || Format | + | | 0x28 || 0x30 || Reserved |
| + | |} |
| + | |
| + | = RegisterInfo = |
| + | This is "nn::nfp::RegisterInfo". This is a 0x100-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| |- | | |- |
− | | 101 || GetAdminInfo | + | ! Offset || Size || Description |
| |- | | |- |
− | | 102 || GetRegisterInfo | + | | 0x0 || 0x58 || Mii CharInfo (see mii services) |
| |- | | |- |
− | | 103 || SetRegisterInfo | + | | 0x58 || 0x4 || First write date (see [[#Date]]) |
| |- | | |- |
− | | 104 || DeleteRegisterInfo | + | | 0x5C || 0x29 || Amiibo name (NUL-terminated string) |
| |- | | |- |
− | | 105 || DeleteApplicationArea | + | | 0x85 || 0x1 || Unknown |
| |- | | |- |
− | | 106 || ExistsApplicationArea | + | | 0x86 || 0x7A || Reserved |
| |} | | |} |
| | | |
− | = RequiredMcuVersionData = | + | = CommonInfo = |
− | In sdknso, the global data containing the array data for this is "nn::nfc::client::RequiredMcuVersionData". The array entry is 0x20-bytes.
| + | This is ""nn::nfp::CommonInfo". This is a 0x40-byte struct. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! 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]]) |
| + | |- |
| + | | 0xC || 0x34 || Reserved |
| + | |} |
| | | |
− | = DeviceHandle = | + | = ModelInfo = |
− | This is "nn::nfc::DeviceHandle". This is a 8-byte struct with 4-byte alignment. | + | This is "nn::nfp::ModelInfo". This is a 0x40-byte struct. |
| | | |
− | = NfcProtocol = | + | {| class="wikitable" border="1" |
− | This is s32 enum "nn::nfc::NfcProtocol". Value -1 can be used as a default.
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x2 || Game and character ID |
| + | |- |
| + | | 0x2 || 0x1 || Character variant |
| + | |- |
| + | | 0x3 || 0x1 || Figure type |
| + | |- |
| + | | 0x4 || 0x2 || Model number |
| + | |- |
| + | | 0x6 || 0x1 || Series |
| + | |- |
| + | | 0x7 || 0x39 || Reserved |
| + | |} |
| | | |
− | = TagInfo = | + | = AdminInfo = |
− | This is "nn::nfc::TagInfo" / "nn::nfp::TagInfo". This is a 0x58-byte struct. | + | This is "nn::nfp::AdminInfo". This is a 0x40-byte struct. |
| | | |
− | = TestWaveType = | + | {| class="wikitable" border="1" |
− | This is u32 enum "nn::nfc::TestWaveType".
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x8 || Program ID (From the Wii U, 3DS or Switch title who created the application area) |
| + | |- |
| + | | 0x8 || 0x4 || [[#Access ID]] |
| + | |- |
| + | | 0xC || 0x2 || CRC32 change counter |
| + | |- |
| + | | 0xE || 0x1 || Flags (bit0 = amiibo was initialized in console settings, bit1 = has application area, bit2/bit3 unknown) |
| + | |- |
| + | | 0xF || 0x1 || Unknown, hardcoded to 0x2 |
| + | |- |
| + | | 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) |
| + | |- |
| + | | 0x11 || 0x7 || Padding |
| + | |- |
| + | | 0x18 || 0x28 || Reserved |
| + | |} |
| | | |
− | = MifareReadBlockData = | + | = RegisterInfoPrivate = |
− | This is "nn::nfc::MifareReadBlockData". This is a 0x18-byte struct. | + | This is "nn::nfp::RegisterInfoPrivate". This is a 0x100-byte struct. |
| | | |
− | = MifareReadBlockParameter =
| + | This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes. |
− | This is "nn::nfc::MifareReadBlockParameter". This is a 0x18-byte struct.
| |
| | | |
− | = MifareWriteBlockParameter = | + | {| class="wikitable" border="1" |
− | This is "nn::nfc::MifareWriteBlockParameter". This is a 0x28-byte struct.
| + | |- |
| + | ! Offset || Size || Description |
| + | |- |
| + | | 0x0 || 0x44 || Mii StoreData (see mii services) |
| + | |- |
| + | | 0x44 || 0x4 || First write date (see [[#Date]]) |
| + | |- |
| + | | 0x48 || 0x29 || Amiibo name (NUL-terminated string) |
| + | |- |
| + | | 0x71 || 0x1 || Unknown |
| + | |- |
| + | | 0x72 || 0x8E || Reserved |
| + | |} |
| | | |
− | = RomFS = | + | = Access ID = |
− | [9.0.0+] The nfc-sysmodule RomFS contains:
| + | Access IDs are game-unique u32s used to access the amiibo application area. |
− | ST21NFCD_01_05_6811.bin
| |
| | | |
− | These are firmware files for the NFC IC inside Switch Lite units.
| + | For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData. |
| | | |
− | = Application IDs = | + | == Nintendo Switch titles == |
− | Application IDs (also referenced as "access_id" in official software) are game-unique u32s used to access the amiibo 0xd8-big application area.
| |
| | | |
| {| 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. |