NFC Services: Difference between revisions
No edit summary |
Steveice10 (talk | contribs) m These have pages now |
||
(35 intermediate revisions by 3 users not shown) | |||
Line 3: | Line 3: | ||
On New3DS NFC module uses the [[I2C_Registers|NFC]] hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service. | On New3DS NFC module uses the [[I2C_Registers|NFC]] hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service. | ||
Only 1 session can be open for all of these services combined. Commands for each service are handled by the main-thread. | |||
=NFC services= | =NFC services= | ||
Line 26: | Line 26: | ||
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) << 14 <nowiki>|</nowiki> 0x402), void * buffer | | u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) << 14 <nowiki>|</nowiki> 0x402), void * buffer | ||
| s32 result | | s32 result | ||
| | | Used when resetting an amiibo from amiibo Settings. | ||
|- | |- | ||
| 0x04020000 | | 0x04020000 | ||
| [[9.3.0-21|9.3.0-X]] | | [[9.3.0-21|9.3.0-X]] | ||
| | | [[NFCM:GetAdminInfo|GetAdminInfo]] | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
| 0x04030000 | | 0x04030000 | ||
| [[9.3.0-21|9.3.0-X]] | | [[9.3.0-21|9.3.0-X]] | ||
| | | [[NFCM:GetEmptyRegisterInfo|GetEmptyRegisterInfo]] | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
| 0x04040A40 | | 0x04040A40 | ||
| [[9.3.0-21|9.3.0-X]] | | [[9.3.0-21|9.3.0-X]] | ||
| [[NFCM: | | [[NFCM:SetRegisterInfo|SetRegisterInfo]] | ||
| | | | ||
| | | | ||
| | |||
|- | |||
| 0x04050000 | |||
| [[9.3.0-21|9.3.0-X]] | |||
| [[NFCM:DeleteRegisterInfo|DeleteRegisterInfo]] | |||
| | |||
| | |||
| | | | ||
|- | |- | ||
| 0x04060000 | | 0x04060000 | ||
| [[9.3.0-21|9.3.0-X]] | | [[9.3.0-21|9.3.0-X]] | ||
| | | [[NFCM:DeleteApplicationArea|DeleteApplicationArea]] | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
| 0x04070000 | | 0x04070000 | ||
| [[9.3.0-21|9.3.0-X]] | | [[9.3.0-21|9.3.0-X]] | ||
| | | [[NFCM:ExistsApplicationArea|ExistsApplicationArea]] | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
Line 102: | Line 109: | ||
==NFC development service "nfc:dev"== | ==NFC development service "nfc:dev"== | ||
{| class="wikitable" border="1" | |||
|- | |||
! Command header | |||
! Available since system-version | |||
! Description | |||
|- | |||
| 0x00110100 | |||
| | |||
| [[NFCDEV:ReadRawPages|ReadRawPages]] | |||
|- | |||
| 0x001200C0 | |||
| | |||
| [[NFCDEV:WriteRawPage|WriteRawPage]] | |||
|} | |||
Some of these commands seems to be intended for use only on dev-units. | |||
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error). | Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error). | ||
Line 128: | Line 150: | ||
| | | | ||
| ? | | ? | ||
|- | |||
| 0x000500C2 | |||
| | |||
| [[NFCP:SendTagCommand|SendTagCommand]] | |||
|- | |||
| 0x00060000 | |||
| | |||
| GetTagInfo | |||
|- | |- | ||
| 0x00070000 | | 0x00070000 | ||
Line 134: | Line 164: | ||
|- | |- | ||
| 0x00080000 | | 0x00080000 | ||
| | |||
| Writes a handle to cmdreply[3]. | |||
|- | |||
| 0x00090000 | |||
| | | | ||
| Writes a handle to cmdreply[3]. | | Writes a handle to cmdreply[3]. | ||
Line 140: | Line 174: | ||
| | | | ||
| Unknown. Writes an output value to cmdreply[2]. | | Unknown. Writes an output value to cmdreply[2]. | ||
|- | |||
| 0x000B0000 | |||
| | |||
| Unknown. Writes 0x60-bytes of output starting at cmdreply[2]. u16 +0 is the size of the data at +4, +2 is not initialized, u8 +3 is loaded from state, u32 +0x2C is loaded from state, and the data at +4 with the previously mentioned size is copied from state. | |||
|- | |||
| 0x000C0040 | |||
| | |||
| (u32 outputsize) Writes output to static_buf_id=0, outputsize 1 is used when it's >=1. | |||
|- | |||
| 0x000D0040 | |||
| | |||
| (u32 outputsize) Writes output to static_buf_id=0, outputsize 1 is used when it's >=1. | |||
|- | |||
| 0x000E0080 | |||
| | |||
| (u8 unk, u32 outputsize) Writes output to static_buf_id=0, outputsize 2 is used when it's >=2. | |||
|- | |||
| 0x000F0040 | |||
| | |||
| (u32 outputsize) Writes output to static_buf_id=0, outputsize 2 is used when it's >=2. | |||
|- | |||
| 0x00100000 | |||
| | |||
| Unknown. | |||
|- | |||
| 0x00110000 | |||
| | |||
| Unknown. | |||
|- | |||
| 0x00120000 | |||
| | |||
| Unknown. Writes an output u32 to cmdreply[2]. | |||
|- | |||
| 0x00130000 | |||
| | |||
| Unknown. Writes an output u32 to cmdreply[2]. | |||
|} | |} | ||
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]]. | This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]]. | ||
The mint process is the only known eShop-related process using this service([[eShop]]-application and NIM-module don't use it). Used for NFC card payments in JPN [[eShop]](the v16384 mint title is ''identical'' for USA/JPN besides programIDs in the NCCH header/exheader). | The mint process is the only known eShop-related process using this service([[eShop]]-application and NIM-module don't use it). Used for NFC card payments in JPN [[eShop]](the v16384 mint title is ''identical'' for USA/JPN besides programIDs in the NCCH header/exheader). | ||
JPN eShop game "Megami Meguri" uses these same JPN NFC cards. The only accessible NFC service is nfcu. | |||
==NFC service "nfc:r"== | ==NFC service "nfc:r"== | ||
Line 154: | Line 226: | ||
! Available since system-version | ! Available since system-version | ||
! Description | ! Description | ||
|- | |||
| 0x00130102 | |||
| | |||
| [[NFCS:SendTagCommand|SendTagCommand]] | |||
|- | |- | ||
| 0x00230000 | | 0x00230000 | ||
Line 332: | Line 408: | ||
| 0x00170000 | | 0x00170000 | ||
| | | | ||
| [[NFC: | | [[NFC:GetRegisterInfo|GetRegisterInfo]] | ||
| | | | ||
| | | | ||
Line 339: | Line 415: | ||
| 0x00180000 | | 0x00180000 | ||
| | | | ||
| [[NFC: | | [[NFC:GetCommonInfo|GetCommonInfo]] | ||
| | | | ||
| | | | ||
Line 360: | Line 436: | ||
| 0x001B0000 | | 0x001B0000 | ||
| | | | ||
| | | [[NFC:GetModelInfo|GetModelInfo]] | ||
| | | | ||
| | | | ||
| | | | ||
|- | |- | ||
Line 385: | Line 461: | ||
| u8 outval at cmdreply[2]. | | u8 outval at cmdreply[2]. | ||
| ? | | ? | ||
|- | |||
| 0x001F0080 | |||
| [[10.0.0-27|10.0.0-X]] | |||
| [[NFC:StartOtherTagScanning|StartOtherTagScanning]] | |||
| | |||
| | |||
| Used by JPN eShop app "Megami Meguri". | |||
|- | |||
| 0x00200102 | |||
| [[10.0.0-27|10.0.0-X]] | |||
| [[NFC:SendTagCommand|SendTagCommand]] | |||
| | |||
| | |||
| | |||
|- | |||
| 0x00210000 | |||
| [[10.0.0-27|10.0.0-X]] | |||
| ? | |||
| | |||
| | |||
| Used by JPN eShop app "Megami Meguri". This can only be used when [[NFC:Initialize|initialized]] with type3, and when the [[NFC:GetTagState|TagState]] is 3. | |||
|- | |||
| 0x00220000 | |||
| [[10.0.0-27|10.0.0-X]] | |||
| ? | |||
| | |||
| | |||
| This can only be used when [[NFC:Initialize|initialized]] with type3, and when the [[NFC:GetTagState|TagState]] is 3. | |||
|} | |} | ||
Line 519: | Line 623: | ||
| 0xc8a17600 | | 0xc8a17600 | ||
| The current NFC tag [[NFC:GetTagState|state]], or other NFC state, is invalid with the NFC command which was used. | | The current NFC tag [[NFC:GetTagState|state]], or other NFC state, is invalid with the NFC command which was used. | ||
|} | |||
=Data Types= | |||
==AdminInfo== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x08 | |||
| Program ID (From the Wii U, 3DS or Switch title who created the application area) | |||
|- | |||
| 0x08 | |||
| 0x04 | |||
| [[Amiibo#Games_using_Amiibo_AppData|App ID]] | |||
|- | |||
| 0x0C | |||
| 0x02 | |||
| CRC32 Change Counter | |||
|- | |||
| 0x0E | |||
| 0x01 | |||
| Flags (bit0 = amiibo initialized, bit1 = has application area, bit2/bit3 unknown) | |||
|- | |||
| 0x0F | |||
| 0x01 | |||
| 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 | |||
| 0x07 | |||
| Padding | |||
|- | |||
| 0x18 | |||
| 0x28 | |||
| Reserved | |||
|} | |||
==RegisterInfo== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x60 | |||
| [[Mii_Maker#Mii_QR_Code_format|Exported Mii Data]] (minus the AES-CCM used in the linked format) | |||
|- | |||
| 0x60 | |||
| 0x16 | |||
| Amiibo Name (NUL-Terminated) | |||
|- | |||
| 0x76 | |||
| 0x01 | |||
| Flags (bit0 = amiibo initialized, bit1 = has application area) | |||
|- | |||
| 0x77 | |||
| 0x01 | |||
| Font Region | |||
|- | |||
| 0x78 | |||
| 0x04 | |||
| Creation [[#Date|Date]] | |||
|- | |||
| 0x7C | |||
| 0x2C | |||
| Reserved | |||
|} | |||
This data originates from the [[Amiibo]] settings data stored under the encrypted NFC data. | |||
==CommonInfo== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x04 | |||
| Last Write [[#Date|Date]] | |||
|- | |||
| 0x04 | |||
| 0x02 | |||
| Write Counter | |||
|- | |||
| 0x06 | |||
| 0x02 | |||
| Character ID | |||
|- | |||
| 0x08 | |||
| 0x01 | |||
| Character Variant | |||
|- | |||
| 0x09 | |||
| 0x01 | |||
| Amiibo Series | |||
|- | |||
| 0x0A | |||
| 0x02 | |||
| Model Number | |||
|- | |||
| 0x0C | |||
| 0x01 | |||
| Amiibo Type | |||
|- | |||
| 0x0D | |||
| 0x01 | |||
| Version | |||
|- | |||
| 0x0E | |||
| 0x02 | |||
| Application Area Size (hardcoded to 0xD8) | |||
|- | |||
| 0x10 | |||
| 0x30 | |||
| Reserved | |||
|} | |||
This data originates from the [[Amiibo]] NFC data. | |||
==ModelInfo== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x02 | |||
| Character ID | |||
|- | |||
| 0x02 | |||
| 0x01 | |||
| Character Variant | |||
|- | |||
| 0x03 | |||
| 0x01 | |||
| Amiibo Series | |||
|- | |||
| 0x04 | |||
| 0x02 | |||
| Model Number | |||
|- | |||
| 0x06 | |||
| 0x01 | |||
| Amiibo Type | |||
|- | |||
| 0x07 | |||
| 0x01 | |||
| Version | |||
|- | |||
| 0x08 | |||
| 0x2E | |||
| Reserved | |||
|} | |||
This data originates from the [[Amiibo]] NFC data. | |||
==Date== | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x00 | |||
| 0x02 | |||
| Year | |||
|- | |||
| 0x02 | |||
| 0x01 | |||
| Month | |||
|- | |||
| 0x03 | |||
| 0x01 | |||
| Day | |||
|} | |} | ||