NFC Services: Difference between revisions

Mailwl (talk | contribs)
Steveice10 (talk | contribs)
m These have pages now
 
(37 intermediate revisions by 4 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.


A total of 6 sessions can be open simultaneously for all of these services combined.
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]]
| void
|
| s32 result, u32 unknownA[16]
|
| Output seems to be a struct
|
|-
|-
| 0x04030000
| 0x04030000
| [[9.3.0-21|9.3.0-X]]
| [[9.3.0-21|9.3.0-X]]
| ???
| [[NFCM:GetEmptyRegisterInfo|GetEmptyRegisterInfo]]
| void
|
| s32 result, u32 unknownA[41]
|
|
|
|-
|-
| 0x04040A40
| 0x04040A40
| [[9.3.0-21|9.3.0-X]]
| [[9.3.0-21|9.3.0-X]]
| [[NFCM:SetAmiiboSettings|SetAmiiboSettings]]
| [[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]]
| void
|
| s32 result
|
|
|
|-
|-
| 0x04070000
| 0x04070000
| [[9.3.0-21|9.3.0-X]]
| [[9.3.0-21|9.3.0-X]]
| ???
| [[NFCM:ExistsApplicationArea|ExistsApplicationArea]]
| void
|
| s32 result, u32 unknownA
|
|
|
|-
|-
Line 102: Line 109:


==NFC development service "nfc:dev"==
==NFC development service "nfc:dev"==
This service seems to be intended for use only on dev-units(or at least some of the command(s)).
{| 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).


==NFC service "nfc:p"==
==NFC service "nfc:p"==
{| class="wikitable" border="1"
|-
!  Command header
!  Available since system-version
!  Description
|-
| 0x00010000
|
| Initialize
|-
| 0x00020000
|
| Shutdown
|-
| 0x00030080
|
| (unk0, unk1) ?
|-
| 0x00040000
|
| ?
|-
| 0x000500C2
|
| [[NFCP:SendTagCommand|SendTagCommand]]
|-
| 0x00060000
|
| GetTagInfo
|-
| 0x00070000
|
| GetTagState maybe? Writes an output value to cmdreply[2].
|-
| 0x00080000
|
| Writes a handle to cmdreply[3].
|-
| 0x00090000
|
| Writes a handle to cmdreply[3].
|-
| 0x000A0000
|
| 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). Presumably 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 119: Line 226:
!  Available since system-version
!  Available since system-version
!  Description
!  Description
|-
| 0x00130102
|
| [[NFCS:SendTagCommand|SendTagCommand]]
|-
|-
| 0x00230000
| 0x00230000
Line 220: Line 331:
| 0x000B0000
| 0x000B0000
|  
|  
| ???
| GetTagInRangeEvent(?)
| void
| void
| s32 result, u32 copy handle descriptor, Handle event
| s32 result, u32 copy handle descriptor, Handle event
Line 227: Line 338:
| 0x000C0000
| 0x000C0000
|  
|  
| ???
| GetTagOutOfRangeEvent(?)
| void
| void
| s32 result, u32 copy handle descriptor, Handle event
| s32 result, u32 copy handle descriptor, Handle event
Line 297: Line 408:
| 0x00170000
| 0x00170000
|  
|  
| [[NFC:GetAmiiboSettings|GetAmiiboSettings]]
| [[NFC:GetRegisterInfo|GetRegisterInfo]]
|  
|  
|  
|  
Line 304: Line 415:
| 0x00180000
| 0x00180000
|  
|  
| [[NFC:GetAmiiboConfig|GetAmiiboConfig]]
| [[NFC:GetCommonInfo|GetCommonInfo]]
|  
|  
|  
|  
Line 325: Line 436:
| 0x001B0000
| 0x001B0000
|  
|  
|  
| [[NFC:GetModelInfo|GetModelInfo]]
| None
|
| 0x36-byte output structure starting at cmdreply[2].
|
|  
|  
|-
|-
Line 350: 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 484: 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
|}
|}