<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=XorTroll</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=XorTroll"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/XorTroll"/>
	<updated>2026-05-17T20:43:06Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=14181</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=14181"/>
		<updated>2025-12-12T16:05:46Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Amiibo version is no longer hardcoded to value 2, and actually set from the corresponding amiibo ID bits.&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Internal check &amp;quot;amiibo_version == 2&amp;quot; was changed to &amp;quot;(amiibo_version &amp;amp; 0xFE) == 2&amp;quot; to also cover new v3 amiibos.&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Internal check &amp;quot;amiibo_version == 2&amp;quot; was changed to &amp;quot;(amiibo_version &amp;amp; 0xFE) == 2&amp;quot; to also cover new v3 amiibos.&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Now the Mii CRC32 in [[#Amiibo settings]] is properly computed for v3 amiibos, while for v2 amiibos (as it was done so far)the field is set to a random u16 value.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Amiibo version is no longer hardcoded to value 2, and actually set from the corresponding amiibo ID bits.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Now the Mii CRC32 in [[#Amiibo settings]] is properly computed for v3 amiibos, while for v2 amiibos (as it was done so far)the field is set to a random u16 value.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [20.5.0+] Backup entry type, depending on amiibo version (0 = v2, 1 = v3), previously reserved/zero&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0xD || Unknown (reserved?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] The entry data stored is different for v3 amiibos: the first 0x80 bytes of the [[#Raw format]] are stored, then followed by 0x40 internal bytes from the corresponding Noft2 object (what exactly?) and finally followed by the remaining (0x19C) bytes of the raw data, thus now using 0x25C bytes of the entry data (and leaving the remaining 0x5A4 bytes unused).&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Amiibo version (v2 or [20.5.0+] v3)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below) (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2 (appears to be reserved for v2 amiibos and used in v3 amiibos, for maybe application area-related purposes?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes) (big-endian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=14179</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=14179"/>
		<updated>2025-12-09T20:04:14Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Document relevant v3 amiibo NFP changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Amiibo version is no longer hardcoded to value 2, and actually set from the corresponding amiibo ID bits.&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Internal check &amp;quot;amiibo_version == 2&amp;quot; was changed to &amp;quot;(amiibo_version &amp;amp; 0xFE) == 2&amp;quot; to also cover new v3 amiibos.&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Internal check &amp;quot;amiibo_version == 2&amp;quot; was changed to &amp;quot;(amiibo_version &amp;amp; 0xFE) == 2&amp;quot; to also cover new v3 amiibos.&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Now the Mii CRC32 in [[#Amiibo settings]] is properly computed for v3 amiibos, while for v2 amiibos (as it was done so far)the field is set to a random u16 value.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Amiibo version is no longer hardcoded to value 2, and actually set from the corresponding amiibo ID bits.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] Now the Mii CRC32 in [[#Amiibo settings]] is properly computed for v3 amiibos, while for v2 amiibos (as it was done so far)the field is set to a random u16 value.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] [[#Amiibo settings]] Field `Unknown2` always zeroed for v3 amiibos, while it it conditionally zeroed for v2 amiibos (as it was done so far).&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [20.5.0+] Backup entry type, depending on amiibo version (0 = v2, 1 = v3), previously reserved/zero&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0xD || Unknown (reserved?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
[20.5.0+] The entry data stored is different for v3 amiibos: the first 0x80 bytes of the [[#Raw format]] are stored, then followed by 0x40 internal bytes from the corresponding Noft2 object (what exactly?) and finally followed by the remaining (0x19C) bytes of the raw data, thus now using 0x25C bytes of the entry data (and leaving the remaining 0x5A4 bytes unused).&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below) (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2 (appears to be reserved for v2 amiibos and used in v3 amiibos, for maybe application area-related purposes?)&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes) (big-endian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13255</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13255"/>
		<updated>2025-05-22T15:39:47Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xE || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below) (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes) (big-endian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13254</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13254"/>
		<updated>2025-05-22T15:33:38Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xE || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below) (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes) (big-endian)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13253</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13253"/>
		<updated>2025-05-22T15:09:48Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xE || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13252</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13252"/>
		<updated>2025-05-18T12:36:24Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Fix typos in my previous changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Plain format]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo header]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xE || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switch games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_codes&amp;diff=13251</id>
		<title>Error codes</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_codes&amp;diff=13251"/>
		<updated>2025-05-18T12:35:52Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Add various NFC/NFP results&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Structure =&lt;br /&gt;
These have been redesigned from the 3DS so that they fit within a Aarch64 MOV instruction immediate most of the time (without requiring the additional MOVK).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Field&lt;br /&gt;
|-&lt;br /&gt;
| 0-8 || Module&lt;br /&gt;
|-&lt;br /&gt;
| 9-21 || Description&lt;br /&gt;
|-&lt;br /&gt;
| 22-31 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When a fatal error is received the error code is outputted using the following formatter:&lt;br /&gt;
  %04d-%04d&lt;br /&gt;
&lt;br /&gt;
Where the first code is &amp;lt;code&amp;gt;2000 + Module&amp;lt;/code&amp;gt;, and the second being &amp;lt;code&amp;gt;Description&amp;lt;/code&amp;gt;. Bits &amp;gt;=22 from the error code are reserved and unused.&lt;br /&gt;
&lt;br /&gt;
= Result Errors =&lt;br /&gt;
General errors used by system modules and applications.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Svc&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Fs&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Os&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Htcs&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Ncm&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Dd&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Osdbg&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Lr&lt;br /&gt;
|-&lt;br /&gt;
| 9 || Ldr&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Sf&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Sf_Hipc&lt;br /&gt;
|-&lt;br /&gt;
| 12 || Tma&lt;br /&gt;
|-&lt;br /&gt;
| 13 || Dmnt&lt;br /&gt;
|-&lt;br /&gt;
| 14 || Gds&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Pm&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Ns&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Bsdsockets&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Htc&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Tsc&lt;br /&gt;
|-&lt;br /&gt;
| 20 || Kvdb&lt;br /&gt;
|-&lt;br /&gt;
| 21 || Sm&lt;br /&gt;
|-&lt;br /&gt;
| 22 || Ro&lt;br /&gt;
|-&lt;br /&gt;
| 23 || Gc&lt;br /&gt;
|-&lt;br /&gt;
| 24 || Sdmmc&lt;br /&gt;
|-&lt;br /&gt;
| 25 || Ovln&lt;br /&gt;
|-&lt;br /&gt;
| 26 || Spl&lt;br /&gt;
|-&lt;br /&gt;
| 27 || Socket&lt;br /&gt;
|-&lt;br /&gt;
| 28 || &lt;br /&gt;
|-&lt;br /&gt;
| 29 || Htclow&lt;br /&gt;
|-&lt;br /&gt;
| 30 || Ddsf&lt;br /&gt;
|-&lt;br /&gt;
| 31 || Htcfs&lt;br /&gt;
|-&lt;br /&gt;
| 32 || Async&lt;br /&gt;
|-&lt;br /&gt;
| 33 || Util&lt;br /&gt;
|-&lt;br /&gt;
| 34 || &lt;br /&gt;
|-&lt;br /&gt;
| 35 || Tipc&lt;br /&gt;
|-&lt;br /&gt;
| 36 || &lt;br /&gt;
|-&lt;br /&gt;
| 37 || Anif&lt;br /&gt;
|-&lt;br /&gt;
| 38 || &lt;br /&gt;
|-&lt;br /&gt;
| 39 || Crt&lt;br /&gt;
|-&lt;br /&gt;
| 100 || Eth&lt;br /&gt;
|-&lt;br /&gt;
| 101 || I2c&lt;br /&gt;
|-&lt;br /&gt;
| 102 || Gpio&lt;br /&gt;
|-&lt;br /&gt;
| 103 || Uart&lt;br /&gt;
|-&lt;br /&gt;
| 104 || Cpad&lt;br /&gt;
|-&lt;br /&gt;
| 105 || Settings&lt;br /&gt;
|-&lt;br /&gt;
| 106 || Ftm&lt;br /&gt;
|-&lt;br /&gt;
| 107 || Wlan&lt;br /&gt;
|-&lt;br /&gt;
| 108 || Xcd&lt;br /&gt;
|-&lt;br /&gt;
| 109 || Tmp451&lt;br /&gt;
|-&lt;br /&gt;
| 110 || Nifm&lt;br /&gt;
|-&lt;br /&gt;
| 111 || Codec&lt;br /&gt;
|-&lt;br /&gt;
| 112 || Lsm6ds3&lt;br /&gt;
|-&lt;br /&gt;
| 113 || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 114 || Vi&lt;br /&gt;
|-&lt;br /&gt;
| 115 || Nfp&lt;br /&gt;
|-&lt;br /&gt;
| 116 || Time&lt;br /&gt;
|-&lt;br /&gt;
| 117 || Fgm&lt;br /&gt;
|-&lt;br /&gt;
| 118 || Oe&lt;br /&gt;
|-&lt;br /&gt;
| 119 || Bh1730fvc&lt;br /&gt;
|-&lt;br /&gt;
| 120 || Pcie&lt;br /&gt;
|-&lt;br /&gt;
| 121 || Friends&lt;br /&gt;
|-&lt;br /&gt;
| 122 || Bcat&lt;br /&gt;
|-&lt;br /&gt;
| 123 || Ssl&lt;br /&gt;
|-&lt;br /&gt;
| 124 || Account&lt;br /&gt;
|-&lt;br /&gt;
| 125 || News&lt;br /&gt;
|-&lt;br /&gt;
| 126 || Mii&lt;br /&gt;
|-&lt;br /&gt;
| 127 || Nfc&lt;br /&gt;
|-&lt;br /&gt;
| 128 || Am&lt;br /&gt;
|-&lt;br /&gt;
| 129 || Prepo&lt;br /&gt;
|-&lt;br /&gt;
| 130 || Ahid&lt;br /&gt;
|-&lt;br /&gt;
| 131 || Applet&lt;br /&gt;
|-&lt;br /&gt;
| 132 || Ae&lt;br /&gt;
|-&lt;br /&gt;
| 133 || Pcv&lt;br /&gt;
|-&lt;br /&gt;
| 134 || Usb_Pd&lt;br /&gt;
|-&lt;br /&gt;
| 135 || Bpc&lt;br /&gt;
|-&lt;br /&gt;
| 136 || Psm&lt;br /&gt;
|-&lt;br /&gt;
| 137 || Nim&lt;br /&gt;
|-&lt;br /&gt;
| 138 || Psc&lt;br /&gt;
|-&lt;br /&gt;
| 139 || Tc&lt;br /&gt;
|-&lt;br /&gt;
| 140 || Usb&lt;br /&gt;
|-&lt;br /&gt;
| 141 || Nsd&lt;br /&gt;
|-&lt;br /&gt;
| 142 || Pctl&lt;br /&gt;
|-&lt;br /&gt;
| 143 || Btm&lt;br /&gt;
|-&lt;br /&gt;
| 144 || La&lt;br /&gt;
|-&lt;br /&gt;
| 145 || Es&lt;br /&gt;
|-&lt;br /&gt;
| 146 || Ngc&lt;br /&gt;
|-&lt;br /&gt;
| 147 || Erpt&lt;br /&gt;
|-&lt;br /&gt;
| 148 || Apm&lt;br /&gt;
|-&lt;br /&gt;
| 149 || Cec&lt;br /&gt;
|-&lt;br /&gt;
| 150 || Profiler&lt;br /&gt;
|-&lt;br /&gt;
| 151 || Eupld&lt;br /&gt;
|-&lt;br /&gt;
| 152 || Lidbe&lt;br /&gt;
|-&lt;br /&gt;
| 153 || Audio&lt;br /&gt;
|-&lt;br /&gt;
| 154 || Npns&lt;br /&gt;
|-&lt;br /&gt;
| 155 || Http&lt;br /&gt;
|-&lt;br /&gt;
| 156 || Idle&lt;br /&gt;
|-&lt;br /&gt;
| 157 || Arp&lt;br /&gt;
|-&lt;br /&gt;
| 158 || Updater&lt;br /&gt;
|-&lt;br /&gt;
| 159 || Swkbd&lt;br /&gt;
|-&lt;br /&gt;
| 160 || Netdiag&lt;br /&gt;
|-&lt;br /&gt;
| 161 || Nfc_Mifare&lt;br /&gt;
|-&lt;br /&gt;
| 162 || Err&lt;br /&gt;
|-&lt;br /&gt;
| 163 || Fatal&lt;br /&gt;
|-&lt;br /&gt;
| 164 || Ec&lt;br /&gt;
|-&lt;br /&gt;
| 165 || Spsm&lt;br /&gt;
|-&lt;br /&gt;
| 166 || Aoc&lt;br /&gt;
|-&lt;br /&gt;
| 167 || Bgtc&lt;br /&gt;
|-&lt;br /&gt;
| 168 || Creport&lt;br /&gt;
|-&lt;br /&gt;
| 169 || Sasbus&lt;br /&gt;
|-&lt;br /&gt;
| 170 || Pl&lt;br /&gt;
|-&lt;br /&gt;
| 171 || Cdmsc&lt;br /&gt;
|-&lt;br /&gt;
| 172 || Audioctrl&lt;br /&gt;
|-&lt;br /&gt;
| 173 || Lbl&lt;br /&gt;
|-&lt;br /&gt;
| 174 || &lt;br /&gt;
|-&lt;br /&gt;
| 175 || Jit&lt;br /&gt;
|-&lt;br /&gt;
| 176 || Hdcp&lt;br /&gt;
|-&lt;br /&gt;
| 177 || Omm&lt;br /&gt;
|-&lt;br /&gt;
| 178 || Pdm&lt;br /&gt;
|-&lt;br /&gt;
| 179 || Olsc&lt;br /&gt;
|-&lt;br /&gt;
| 180 || Srepo&lt;br /&gt;
|-&lt;br /&gt;
| 181 || Dauth&lt;br /&gt;
|-&lt;br /&gt;
| 182 || Stdfu&lt;br /&gt;
|-&lt;br /&gt;
| 183 || Dbg&lt;br /&gt;
|-&lt;br /&gt;
| 184 || Cdacm&lt;br /&gt;
|-&lt;br /&gt;
| 185 || Tcap&lt;br /&gt;
|-&lt;br /&gt;
| 186 || Dhcps&lt;br /&gt;
|-&lt;br /&gt;
| 187 || Spi&lt;br /&gt;
|-&lt;br /&gt;
| 188 || Avm&lt;br /&gt;
|-&lt;br /&gt;
| 189 || Pwm&lt;br /&gt;
|-&lt;br /&gt;
| 190 || Dnsserver&lt;br /&gt;
|-&lt;br /&gt;
| 191 || Rtc&lt;br /&gt;
|-&lt;br /&gt;
| 192 || Regulator&lt;br /&gt;
|-&lt;br /&gt;
| 193 || Led&lt;br /&gt;
|-&lt;br /&gt;
| 194 || HtcTool&lt;br /&gt;
|-&lt;br /&gt;
| 195 || Sio&lt;br /&gt;
|-&lt;br /&gt;
| 196 || Pcm&lt;br /&gt;
|-&lt;br /&gt;
| 197 || Clkrst&lt;br /&gt;
|-&lt;br /&gt;
| 198 || Powctl&lt;br /&gt;
|-&lt;br /&gt;
| 199 || Hiddriver&lt;br /&gt;
|-&lt;br /&gt;
| 200 || Dma&lt;br /&gt;
|-&lt;br /&gt;
| 201 || Audio_Old&lt;br /&gt;
|-&lt;br /&gt;
| 202 || Hid&lt;br /&gt;
|-&lt;br /&gt;
| 203 || Ldn&lt;br /&gt;
|-&lt;br /&gt;
| 204 || Cs&lt;br /&gt;
|-&lt;br /&gt;
| 205 || Irsensor&lt;br /&gt;
|-&lt;br /&gt;
| 206 || Capsrv&lt;br /&gt;
|-&lt;br /&gt;
| 207 || Mm&lt;br /&gt;
|-&lt;br /&gt;
| 208 || Manu&lt;br /&gt;
|-&lt;br /&gt;
| 209 || Atk&lt;br /&gt;
|-&lt;br /&gt;
| 210 || Web&lt;br /&gt;
|-&lt;br /&gt;
| 211 || Lcs&lt;br /&gt;
|-&lt;br /&gt;
| 212 || Grc&lt;br /&gt;
|-&lt;br /&gt;
| 213 || Repair&lt;br /&gt;
|-&lt;br /&gt;
| 214 || Album&lt;br /&gt;
|-&lt;br /&gt;
| 215 || Rid&lt;br /&gt;
|-&lt;br /&gt;
| 216 || Migration&lt;br /&gt;
|-&lt;br /&gt;
| 217 || Migration_Idc&lt;br /&gt;
|-&lt;br /&gt;
| 218 || Hidbus&lt;br /&gt;
|-&lt;br /&gt;
| 219 || Ens&lt;br /&gt;
|-&lt;br /&gt;
| 220 || Nd&lt;br /&gt;
|-&lt;br /&gt;
| 221 || Ndd&lt;br /&gt;
|-&lt;br /&gt;
| 222 || Toycon&lt;br /&gt;
|-&lt;br /&gt;
| 223 || Websocket&lt;br /&gt;
|-&lt;br /&gt;
| 224 || Socketio&lt;br /&gt;
|-&lt;br /&gt;
| 225 || &lt;br /&gt;
|-&lt;br /&gt;
| 226 || &lt;br /&gt;
|-&lt;br /&gt;
| 227 || Dcdmtp&lt;br /&gt;
|-&lt;br /&gt;
| 228 || Pgl&lt;br /&gt;
|-&lt;br /&gt;
| 229 || Notification&lt;br /&gt;
|-&lt;br /&gt;
| 230 || Ins&lt;br /&gt;
|-&lt;br /&gt;
| 231 || Lp2p&lt;br /&gt;
|-&lt;br /&gt;
| 232 || Rcd&lt;br /&gt;
|-&lt;br /&gt;
| 233 || Icm40607&lt;br /&gt;
|-&lt;br /&gt;
| 234 || &lt;br /&gt;
|-&lt;br /&gt;
| 235 || Prc&lt;br /&gt;
|-&lt;br /&gt;
| 236 || &lt;br /&gt;
|-&lt;br /&gt;
| 237 || Bridgectrl&lt;br /&gt;
|-&lt;br /&gt;
| 238 || Err_Context&lt;br /&gt;
|-&lt;br /&gt;
| 239 || Mnpp&lt;br /&gt;
|-&lt;br /&gt;
| 240 || Hshl&lt;br /&gt;
|-&lt;br /&gt;
| 241 || Ringcon&lt;br /&gt;
|-&lt;br /&gt;
| 242 || Capmtp&lt;br /&gt;
|-&lt;br /&gt;
| 243 || &lt;br /&gt;
|-&lt;br /&gt;
| 244 || Dp2hdmi&lt;br /&gt;
|-&lt;br /&gt;
| 245 || Cradle&lt;br /&gt;
|-&lt;br /&gt;
| 246 || Sprofile&lt;br /&gt;
|-&lt;br /&gt;
| 247 || &lt;br /&gt;
|-&lt;br /&gt;
| 248 || Icm42607p&lt;br /&gt;
|-&lt;br /&gt;
| 249 || &lt;br /&gt;
|-&lt;br /&gt;
| 250 || Ndrm&lt;br /&gt;
|-&lt;br /&gt;
| 251 || Fst2&lt;br /&gt;
|-&lt;br /&gt;
| 252 || &lt;br /&gt;
|-&lt;br /&gt;
| 253 || Ts&lt;br /&gt;
|-&lt;br /&gt;
| 254 || &lt;br /&gt;
|-&lt;br /&gt;
| 255 || &lt;br /&gt;
|-&lt;br /&gt;
| 260 || Splay&lt;br /&gt;
|-&lt;br /&gt;
| 300 || &lt;br /&gt;
|-&lt;br /&gt;
| 301 || &lt;br /&gt;
|-&lt;br /&gt;
| 302 || &lt;br /&gt;
|-&lt;br /&gt;
| 303 || &lt;br /&gt;
|-&lt;br /&gt;
| 304 || &lt;br /&gt;
|-&lt;br /&gt;
| 305 || &lt;br /&gt;
|-&lt;br /&gt;
| 306 || Nex&lt;br /&gt;
|-&lt;br /&gt;
| 307 || &lt;br /&gt;
|-&lt;br /&gt;
| 308 || &lt;br /&gt;
|-&lt;br /&gt;
| 309 || &lt;br /&gt;
|-&lt;br /&gt;
| 310 || &lt;br /&gt;
|-&lt;br /&gt;
| 311 || &lt;br /&gt;
|-&lt;br /&gt;
| 312 || &lt;br /&gt;
|-&lt;br /&gt;
| 313 || &lt;br /&gt;
|-&lt;br /&gt;
| 314 || &lt;br /&gt;
|-&lt;br /&gt;
| 315 || &lt;br /&gt;
|-&lt;br /&gt;
| 316 || &lt;br /&gt;
|-&lt;br /&gt;
| 317 || &lt;br /&gt;
|-&lt;br /&gt;
| 318 || &lt;br /&gt;
|-&lt;br /&gt;
| 319 || &lt;br /&gt;
|-&lt;br /&gt;
| 320 || &lt;br /&gt;
|-&lt;br /&gt;
| 321 || Npln&lt;br /&gt;
|-&lt;br /&gt;
| 499 || Tspm&lt;br /&gt;
|-&lt;br /&gt;
| 500 || Devmenu&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Error Codes ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Module || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xA01 || 1 || 5 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC01 || 1 || 6 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xE01 || 1 || 7 || OutOfSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C01 || 1 || 14 || InvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x4201 || 1 || 33 || NotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C01 || 1 || 54 || StopProcessingException&lt;br /&gt;
|-&lt;br /&gt;
| 0x7201 || 1 || 57 || NoSynchronizationObject&lt;br /&gt;
|-&lt;br /&gt;
| 0x7601 || 1 || 59 || TerminationRequested&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C01 || 1 || 70 || NoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x9401 || 1 || 74 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xCA01 || 1 || 101 || InvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC01 || 1 || 102 || InvalidAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE01 || 1 || 103 || OutOfResource&lt;br /&gt;
|-&lt;br /&gt;
| 0xD001 || 1 || 104 || OutOfMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0xD201 || 1 || 105 || OutOfHandles&lt;br /&gt;
|-&lt;br /&gt;
| 0xD401 || 1 || 106 || InvalidCurrentMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0xD801 || 1 || 108 || InvalidNewMemoryPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0xDA01 || 1 || 109 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xDC01 || 1 || 110 || InvalidMemoryRegion&lt;br /&gt;
|-&lt;br /&gt;
| 0xE001 || 1 || 112 || InvalidPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0xE201 || 1 || 113 || InvalidCoreId&lt;br /&gt;
|-&lt;br /&gt;
| 0xE401 || 1 || 114 || InvalidHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0xE601 || 1 || 115 || InvalidPointer&lt;br /&gt;
|-&lt;br /&gt;
| 0xE801 || 1 || 116 || InvalidCombination&lt;br /&gt;
|-&lt;br /&gt;
| 0xEA01 || 1 || 117 || TimedOut&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC01 || 1 || 118 || Cancelled&lt;br /&gt;
|-&lt;br /&gt;
| 0xEE01 || 1 || 119 || OutOfRange&lt;br /&gt;
|-&lt;br /&gt;
| 0xF001 || 1 || 120 || InvalidEnumValue&lt;br /&gt;
|-&lt;br /&gt;
| 0xF201 || 1 || 121 || NotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xF401 || 1 || 122 || Busy&lt;br /&gt;
|-&lt;br /&gt;
| 0xF601 || 1 || 123 || SessionClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0xF801 || 1 || 124 || NotHandled&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA01 || 1 || 125 || InvalidState&lt;br /&gt;
|-&lt;br /&gt;
| 0xFC01 || 1 || 126 || ReservedUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0xFE01 || 1 || 127 || NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x10001 || 1 || 128 || Debug&lt;br /&gt;
|-&lt;br /&gt;
| 0x10201 || 1 || 129 || NoThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x10401 || 1 || 130 || UnknownThread&lt;br /&gt;
|-&lt;br /&gt;
| 0x10601 || 1 || 131 || PortClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0x10801 || 1 || 132 || LimitReached&lt;br /&gt;
|-&lt;br /&gt;
| 0x10A01 || 1 || 133 || InvalidMemoryPool&lt;br /&gt;
|-&lt;br /&gt;
| 0x20401 || 1 || 258 || ReceiveListBroken&lt;br /&gt;
|-&lt;br /&gt;
| 0x20601 || 1 || 259 || OutOfAddressSpace&lt;br /&gt;
|-&lt;br /&gt;
| 0x20801 || 1 || 260 || MessageTooLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x40001 || 1 || 512 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40201 || 1 || 513 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40401 || 1 || 514 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40601 || 1 || 515 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40801 || 1 || 516 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40A01 || 1 || 517 || InvalidProcessId&lt;br /&gt;
|-&lt;br /&gt;
| 0x40C01 || 1 || 518 || InvalidThreadId&lt;br /&gt;
|-&lt;br /&gt;
| 0x40E01 || 1 || 519 || InvalidId&lt;br /&gt;
|-&lt;br /&gt;
| 0x41001 || 1 || 520 || ProcessTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0x7FE01 || 1 || 1023 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x202 || 2 || 1 || ResultPathNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x402 || 2 || 2 || ResultPathAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0xE02 || 2 || 7 || ResultTargetLocked&lt;br /&gt;
|-&lt;br /&gt;
| 0x4602 || 2 || 35 || UsableSpaceNotEnoughMmcCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 0x4802 || 2 || 36 || UsableSpaceNotEnoughMmcSafe&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A02 || 2 || 37 || UsableSpaceNotEnoughMmcUser&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C02 || 2 || 38 || UsableSpaceNotEnoughMmcSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E02 || 2 || 39 || ResultUsableSpaceNotEnoughSdCard&lt;br /&gt;
|-&lt;br /&gt;
| 0x6402 || 2 || 50 || ResultUnsupportedSdkVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x7802 || 2 || 60 || ResultMountNameAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D202 || 2 || 1001 || ResultPartitionNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D402 || 2 || 1002 || ResultTargetNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA202 || 2 || 2001 || PortSdCardNoDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x13B002 || 2 || 2520 || GameCardCardNotInserted&lt;br /&gt;
|-&lt;br /&gt;
| 0x13B402 || 2 || 2522 || GameCardCardNotActivated&lt;br /&gt;
|-&lt;br /&gt;
| 0x13D802 || 2 || 2540 || GameCardInvalidSecureAccess&lt;br /&gt;
|-&lt;br /&gt;
| 0x13DA02 || 2 || 2541 || GameCardInvalidNormalAccess&lt;br /&gt;
|-&lt;br /&gt;
| 0x13DC02 || 2 || 2542 || GameCardInvalidAccessAcrossMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x13E002 || 2 || 2544 || GameCardInitialDataMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x13E202 || 2 || 2545 || GameCardInitialNotFilledWithZero&lt;br /&gt;
|-&lt;br /&gt;
| 0x13E402 || 2 || 2546 || GameCardKekIndexMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x13EE02 || 2 || 2551 || GameCardCardHeaderReadFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x145002 || 2 || 2600 || GameCardShouldTransitFromInitialToNormal&lt;br /&gt;
|-&lt;br /&gt;
| 0x145202 || 2 || 2601 || GameCardShouldTransitFromNormalModeToSecure&lt;br /&gt;
|-&lt;br /&gt;
| 0x145402 || 2 || 2602 || GameCardShouldTransitFromNormalModeToDebug&lt;br /&gt;
|-&lt;br /&gt;
| 0x149402 || 2 || 2634 || GameCardSendFirmwareFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x149A02 || 2 || 2637 || GameCardReceiveCertificateFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14A002 || 2 || 2640 || GameCardSendSocCertificateFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14AA02 || 2 || 2645 || GameCardReceiveRandomValueFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14AC02 || 2 || 2646 || GameCardSendRandomValueFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14B602 || 2 || 2651 || GameCardReceiveDeviceChallengeFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14B802 || 2 || 2652 || GameCardRespondDeviceChallengeFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14BA02 || 2 || 2653 || GameCardSendHostChallengeFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14BC02 || 2 || 2654 || GameCardReceiveChallengeResponseFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14BE02 || 2 || 2655 || GameCardChallengeAndResponseFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14D802 || 2 || 2668 || GameCardSplGenerateRandomBytesFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14DE02 || 2 || 2671 || GameCardReadRegisterFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E002 || 2 || 2672 || GameCardWriteRegisterFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E202 || 2 || 2673 || GameCardEnableCardBusFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E402 || 2 || 2674 || GameCardGetCardHeaderFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E602 || 2 || 2675 || GameCardAsicStatusError&lt;br /&gt;
|-&lt;br /&gt;
| 0x14E802 || 2 || 2676 || GameCardChangeGcModeToSecureFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14EA02 || 2 || 2677 || GameCardChangeGcModeToDebugFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x14EC02 || 2 || 2678 || GameCardReadRmaInfoFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x150802 || 2 || 2692 || GameCardStateCardSecureModeRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x150A02 || 2 || 2693 || GameCardStateCardDebugModeRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x155602 || 2 || 2731 || GameCardCommandReadId1Failure&lt;br /&gt;
|-&lt;br /&gt;
| 0x155802 || 2 || 2732 || GameCardCommandReadId2Failure&lt;br /&gt;
|-&lt;br /&gt;
| 0x155A02 || 2 || 2733 || GameCardCommandReadId3Failure&lt;br /&gt;
|-&lt;br /&gt;
| 0x155E02 || 2 || 2735 || GameCardCommandReadPageFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x156202 || 2 || 2737 || GameCardCommandWritePageFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x156402 || 2 || 2738 || GameCardCommandRefreshFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x156C02 || 2 || 2742 || GameCardCommandReadCrcFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x156E02 || 2 || 2743 || GameCardCommandEraseFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x157002 || 2 || 2744 || GameCardCommandReadDevParamFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x157202 || 2 || 2745 || GameCardCommandWriteDevParamFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x16B002 || 2 || 2904 || GameCardDebugCardReceivedIdMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x16B202 || 2 || 2905 || GameCardDebugCardId1Mismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x16B402 || 2 || 2906 || GameCardDebugCardId2Mismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x171402 || 2 || 2954 || GameCardFsCheckHandleInGetStatusFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x172002 || 2 || 2960 || GameCardFsCheckHandleInCreateReadOnlyFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x172202 || 2 || 2961 || GameCardFsCheckHandleInCreateSecureReadOnlyFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x177202 || 2 || 3001 || ResultNotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 0x177602 || 2 || 3003 || ResultAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x177A02 || 2 || 3005 || ResultOutOfRange&lt;br /&gt;
|-&lt;br /&gt;
| 0x190202 || 2 || 3201 || AllocationMemoryFailedInFatFileSystemA&lt;br /&gt;
|-&lt;br /&gt;
| 0x190402 || 2 || 3202 || AllocationMemoryFailedInFatFileSystemB&lt;br /&gt;
|-&lt;br /&gt;
| 0x190602 || 2 || 3203 || AllocationMemoryFailedInFatFileSystemC&lt;br /&gt;
|-&lt;br /&gt;
| 0x190802 || 2 || 3204 || AllocationMemoryFailedInFatFileSystemD&lt;br /&gt;
|-&lt;br /&gt;
| 0x190A02 || 2 || 3205 || AllocationMemoryFailedInFatFileSystemE&lt;br /&gt;
|-&lt;br /&gt;
| 0x190C02 || 2 || 3206 || AllocationMemoryFailedInFatFileSystemF&lt;br /&gt;
|-&lt;br /&gt;
| 0x190E02 || 2 || 3207 || AllocationMemoryFailedInFatFileSystemG&lt;br /&gt;
|-&lt;br /&gt;
| 0x191002 || 2 || 3208 || AllocationMemoryFailedInFatFileSystemH&lt;br /&gt;
|-&lt;br /&gt;
| 0x195802 || 2 || 3244 || AllocationMemoryFailedInSdCardA&lt;br /&gt;
|-&lt;br /&gt;
| 0x195A02 || 2 || 3245 || AllocationMemoryFailedInSdCardB&lt;br /&gt;
|-&lt;br /&gt;
| 0x195C02 || 2 || 3246 || AllocationMemoryFailedInSystemSaveDataA&lt;br /&gt;
|-&lt;br /&gt;
| 0x195E02 || 2 || 3247 || AllocationMemoryFailedInRomFsFileSystemA&lt;br /&gt;
|-&lt;br /&gt;
| 0x196002 || 2 || 3248 || AllocationMemoryFailedInRomFsFileSystemB&lt;br /&gt;
|-&lt;br /&gt;
| 0x196202 || 2 || 3249 || AllocationMemoryFailedInRomFsFileSystemC&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A3E02 || 2 || 3359 || AllocationMemoryFailedInSdmmcStorageServiceA&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4002 || 2 || 3360 || AllocationMemoryFailedInBuiltInStorageCreatorA&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A4A02 || 2 || 3365 || AllocationMemoryFailedInRegisterA&lt;br /&gt;
|-&lt;br /&gt;
| 0x21BC02 || 2 || 4318 || IncorrectSaveDataFileSystemMagicCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x234202 || 2 || 4513 || InvalidAcidFileSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x234402 || 2 || 4514 || InvalidAcidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x234602 || 2 || 4515 || InvalidAcid&lt;br /&gt;
|-&lt;br /&gt;
| 0x234802 || 2 || 4516 || AcidVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x234A02 || 2 || 4517 || InvalidNcaSignature&lt;br /&gt;
|-&lt;br /&gt;
| 0x234C02 || 2 || 4518 || NcaHeaderSignature1VerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x234E02 || 2 || 4519 || NcaHeaderSignature2VerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x235002 || 2 || 4520 || NcaFsHeaderHashVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x235202 || 2 || 4521 || InvalidNcaKeyIndex&lt;br /&gt;
|-&lt;br /&gt;
| 0x235602 || 2 || 4523 || InvalidNcaFsHeaderEncryptionType&lt;br /&gt;
|-&lt;br /&gt;
| 0x235802 || 2 || 4524 || InvalidNcaPatchInfoIndirectSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x235A02 || 2 || 4525 || InvalidNcaPatchInfoAesCtrExSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x235C02 || 2 || 4526 || InvalidNcaPatchInfoAesCtrExOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x235E02 || 2 || 4527 || InvalidNcaId&lt;br /&gt;
|-&lt;br /&gt;
| 0x236002 || 2 || 4528 || InvalidNcaHeader&lt;br /&gt;
|-&lt;br /&gt;
| 0x236202 || 2 || 4529 || InvalidNcaFsHeader&lt;br /&gt;
|-&lt;br /&gt;
| 0x236802 || 2 || 4532 || InvalidHierarchicalSha256BlockSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x236A02 || 2 || 4533 || InvalidHierarchicalSha256LayerCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x236C02 || 2 || 4534 || HierarchicalSha256BaseStorageTooLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x236E02 || 2 || 4535 || HierarchicalSha256HashVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x244402 || 2 || 4642 || InvalidSha256PartitionHashTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x244602 || 2 || 4643 || Sha256PartitionHashVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x244802 || 2 || 4644 || PartitionSignatureVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x244A02 || 2 || 4645 || Sha256PartitionSignatureVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x244C02 || 2 || 4646 || InvalidPartitionEntryOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x244E02 || 2 || 4647 || InvalidSha256PartitionMetaDataSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x249802 || 2 || 4684 || InvalidFatFileNumber&lt;br /&gt;
|-&lt;br /&gt;
| 0x249C02 || 2 || 4686 || InvalidFatFormatBisUser&lt;br /&gt;
|-&lt;br /&gt;
| 0x249E02 || 2 || 4687 || InvalidFatFormatBisSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x24A002 || 2 || 4688 || InvalidFatFormatBisSafe&lt;br /&gt;
|-&lt;br /&gt;
| 0x24A202 || 2 || 4689 || InvalidFatFormatBisCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 0x250E02 || 2 || 4743 || AesXtsFileSystemFileHeaderCorruptedOnFileOpen&lt;br /&gt;
|-&lt;br /&gt;
| 0x251002 || 2 || 4744 || AesXtsFileSystemFileNoHeaderOnFileOpen&lt;br /&gt;
|-&lt;br /&gt;
| 0x280202 || 2 || 5121 || FatFsFormatUnsupportedSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x280402 || 2 || 5122 || FatFsFormatInvalidBpb&lt;br /&gt;
|-&lt;br /&gt;
| 0x280602 || 2 || 5123 || FatFsFormatInvalidParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x280802 || 2 || 5124 || FatFsFormatIllegalSectorsA&lt;br /&gt;
|-&lt;br /&gt;
| 0x280A02 || 2 || 5125 || FatFsFormatIllegalSectorsB&lt;br /&gt;
|-&lt;br /&gt;
| 0x280C02 || 2 || 5126 || FatFsFormatIllegalSectorsC&lt;br /&gt;
|-&lt;br /&gt;
| 0x280E02 || 2 || 5127 || FatFsFormatIllegalSectorsD&lt;br /&gt;
|-&lt;br /&gt;
| 0x296A02 || 2 || 5301 || UnexpectedInMountTableA&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE602 || 2 || 6003 || ResultTooLongPath&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE802 || 2 || 6004 || ResultInvalidCharacter&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EEA02 || 2 || 6005 || ResultInvalidPathFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EEC02 || 2 || 6006 || ResultDirectoryUnobtainable&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5A02 || 2 || 6061 || ResultInvalidOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5C02 || 2 || 6062 || ResultInvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F5E02 || 2 || 6063 || ResultNullptrArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F6002 || 2 || 6064 || ResultInvalidAlignment&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F6202 || 2 || 6065 || ResultInvalidMountName&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F6402 || 2 || 6066 || ResultExtensionSizeTooLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F6602 || 2 || 6067 || ResultExtensionSizeInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0x307202 || 2 || 6201 || ResultFileExtensionWithoutOpenModeAllowAppend&lt;br /&gt;
|-&lt;br /&gt;
| 0x313A02 || 2 || 6301 || UnsupportedCommitTarget&lt;br /&gt;
|-&lt;br /&gt;
| 0x313C02 || 2 || 6302 || UnsupportedSetSizeForNotResizableSubStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x313E02 || 2 || 6303 || UnsupportedSetSizeForResizableSubStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314002 || 2 || 6304 || UnsupportedSetSizeForMemoryStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314202 || 2 || 6305 || UnsupportedOperateRangeForMemoryStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314402 || 2 || 6306 || UnsupportedOperateRangeForFileStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314602 || 2 || 6307 || UnsupportedOperateRangeForFileHandleStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314802 || 2 || 6308 || UnsupportedOperateRangeForSwitchStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314A02 || 2 || 6309 || UnsupportedOperateRangeForStorageServiceObjectAdapter&lt;br /&gt;
|-&lt;br /&gt;
| 0x314C02 || 2 || 6310 || UnsupportedWriteForAesCtrCounterExtendedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x314E02 || 2 || 6311 || UnsupportedSetSizeForAesCtrCounterExtendedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315002 || 2 || 6312 || UnsupportedOperateRangeForAesCtrCounterExtendedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315202 || 2 || 6313 || UnsupportedWriteForAesCtrStorageExternal&lt;br /&gt;
|-&lt;br /&gt;
| 0x315402 || 2 || 6314 || UnsupportedSetSizeForAesCtrStorageExternal&lt;br /&gt;
|-&lt;br /&gt;
| 0x315602 || 2 || 6315 || UnsupportedSetSizeForAesCtrStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315802 || 2 || 6316 || UnsupportedSetSizeForHierarchicalIntegrityVerificationStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315A02 || 2 || 6317 || UnsupportedOperateRangeForHierarchicalIntegrityVerificationStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315C02 || 2 || 6318 || UnsupportedSetSizeForIntegrityVerificationStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x315E02 || 2 || 6319 || UnsupportedOperateRangeForWritableIntegrityVerificationStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316002 || 2 || 6320 || UnsupportedOperateRangeForIntegrityVerificationStorage &lt;br /&gt;
|-&lt;br /&gt;
| 0x316202 || 2 || 6321 || UnsupportedSetSizeForBlockCacheBufferedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316402 || 2 || 6322 || UnsupportedOperateRangeForWritableBlockCacheBufferedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316602 || 2 || 6323 || UnsupportedOperateRangeForBlockCacheBufferedStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316802 || 2 || 6324 || UnsupportedWriteForIndirectStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316A02 || 2 || 6325 || UnsupportedSetSizeForIndirectStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316C02 || 2 || 6326 || UnsupportedOperateRangeForIndirectStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x316E02 || 2 || 6327 || UnsupportedWriteForZeroStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317002 || 2 || 6328 || UnsupportedSetSizeForZeroStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317202 || 2 || 6329 || UnsupportedSetSizeForHierarchicalSha256Storage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317402 || 2 || 6330 || UnsupportedWriteForReadOnlyBlockCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317602 || 2 || 6331 || UnsupportedSetSizeForReadOnlyBlockCacheStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317802 || 2 || 6332 || UnsupportedSetSizeForIntegrityRomFsStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317A02 || 2 || 6333 || UnsupportedSetSizeForDuplexStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317C02 || 2 || 6334 || UnsupportedOperateRangeForDuplexStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x317E02 || 2 || 6335 || UnsupportedSetSizeForHierarchicalDuplexStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318002 || 2 || 6336 || UnsupportedGetSizeForRemapStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318202 || 2 || 6337 || UnsupportedSetSizeForRemapStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318402 || 2 || 6338 || UnsupportedOperateRangeForRemapStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318602 || 2 || 6339 || UnsupportedSetSizeForIntegritySaveDataStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318802 || 2 || 6340 || UnsupportedOperateRangeForIntegritySaveDataStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318A02 || 2 || 6341 || UnsupportedSetSizeForJournalIntegritySaveDataStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318C02 || 2 || 6342 || UnsupportedOperateRangeForJournalIntegritySaveDataStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x318E02 || 2 || 6343 || UnsupportedGetSizeForJournalStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319002 || 2 || 6344 || UnsupportedSetSizeForJournalStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319202 || 2 || 6345 || UnsupportedOperateRangeForJournalStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319402 || 2 || 6346 || UnsupportedSetSizeForUnionStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319602 || 2 || 6347 || UnsupportedSetSizeForAllocationTableStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319802 || 2 || 6348 || UnsupportedReadForWriteOnlyGameCardStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319A02 || 2 || 6349 || UnsupportedSetSizeForWriteOnlyGameCardStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319C02 || 2 || 6350 || UnsupportedWriteForReadOnlyGameCardStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x319E02 || 2 || 6351 || UnsupportedSetSizeForReadOnlyGameCardStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x31A002 || 2 || 6352 || UnsupportedOperateRangeForReadOnlyGameCardStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x31A202 || 2 || 6353 || UnsupportedSetSizeForSdmmcStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x31A402 || 2 || 6354 || UnsupportedOperateRangeForSdmmcStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x31A602 || 2 || 6355 || UnsupportedOperateRangeForFatFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31A802 || 2 || 6356 || UnsupportedOperateRangeForStorageFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31AA02 || 2 || 6357 || UnsupportedSetSizeForInternalStorageConcatenationFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31AC02 || 2 || 6358 || UnsupportedOperateRangeForInternalStorageConcatenationFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31AE02 || 2 || 6359 || UnsupportedQueryEntryForConcatenationFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31B002 || 2 || 6360 || UnsupportedOperateRangeForConcatenationFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31B202 || 2 || 6361 || UnsupportedSetSizeForZeroBitmapFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31B402 || 2 || 6362 || UnsupportedOperateRangeForFileServiceObjectAdapter&lt;br /&gt;
|-&lt;br /&gt;
| 0x31B602 || 2 || 6363 || UnsupportedOperateRangeForAesXtsFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31B802 || 2 || 6364 || UnsupportedWriteForRomFsFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31BA02 || 2 || 6365 || UnsupportedCommitProvisionallyForRomFsFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31BC02 || 2 || 6366 || UnsupportedGetTotalSpaceSizeForRomFsFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31BE02 || 2 || 6367 || UnsupportedWriteForRomFsFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C002 || 2 || 6368 || UnsupportedOperateRangeForRomFsFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C202 || 2 || 6369 || UnsupportedWriteForReadOnlyFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C402 || 2 || 6370 || UnsupportedCommitProvisionallyForReadOnlyFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C602 || 2 || 6371 || UnsupportedGetTotalSpaceSizeForReadOnlyFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C802 || 2 || 6372 || UnsupportedWriteForReadOnlyFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31CA02 || 2 || 6373 || UnsupportedOperateRangeForReadOnlyFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31CC02 || 2 || 6374 || UnsupportedWriteForPartitionFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31CE02 || 2 || 6375 || UnsupportedCommitProvisionallyForPartitionFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31D002 || 2 || 6376 || UnsupportedWriteForPartitionFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31D202 || 2 || 6377 || UnsupportedOperateRangeForPartitionFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31D402 || 2 || 6378 || UnsupportedOperateRangeForTmFileSystemFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31D602 || 2 || 6379 || UnsupportedWriteForSaveDataInternalStorageFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31DC02 || 2 || 6382 || UnsupportedCommitProvisionallyForApplicationTemporaryFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31DE02 || 2 || 6383 || UnsupportedCommitProvisionallyForSaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31E002 || 2 || 6384 || UnsupportedCommitProvisionallyForDirectorySaveDataFileSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x31E202 || 2 || 6385 || UnsupportedWriteForZeroBitmapHashStorageFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x31E402 || 2 || 6386 || UnsupportedSetSizeForZeroBitmapHashStorageFile&lt;br /&gt;
|-&lt;br /&gt;
| 0x326602 || 2 || 6451 || ResultNcaExternalKeyUnregisteredDeprecated&lt;br /&gt;
|-&lt;br /&gt;
| 0x326E02 || 2 || 6455 || ResultFileNotClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0x327002 || 2 || 6456 || ResultDirectoryNotClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0x327202 || 2 || 6457 || ResultWriteModeFileNotClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0x327402 || 2 || 6458 || ResultAllocatorAlreadyRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0x327602 || 2 || 6459 || ResultDefaultAllocatorAlreadyUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x327A02 || 2 || 6461 || ResultAllocatorAlignmentViolation&lt;br /&gt;
|-&lt;br /&gt;
| 0x328202 || 2 || 6465 || ResultUserNotExist&lt;br /&gt;
|-&lt;br /&gt;
| 0x339402 || 2 || 6602 || FileNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x339602 || 2 || 6603 || DirectoryNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x346402 || 2 || 6706 || MappingTableFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x346A02 || 2 || 6709 || OpenCountLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x346C02 || 2 || 6710 || MultiCommitFileSystemLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x353602 || 2 || 6811 || MapFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x35F202 || 2 || 6905 || NotMounted&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DBC02 || 2 || 7902 || DbmKeyNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DBE02 || 2 || 7903 || DbmFileNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DC002 || 2 || 7904 || DbmDirectoryNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DC402 || 2 || 7906 || DbmAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DC602 || 2 || 7907 || DbmKeyFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DC802 || 2 || 7908 || DbmDirectoryEntryFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DCA02 || 2 || 7909 || DbmFileEntryFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x3DD402 || 2 || 7914 || DbmInvalidOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0x203 || 3 || 1 || ResultNoPermission&lt;br /&gt;
|-&lt;br /&gt;
| 0x403 || 3 || 2 || ResultAccessViolation&lt;br /&gt;
|-&lt;br /&gt;
| 0x603 || 3 || 3 || ResultBadRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x803 || 3 || 4 || ResultBusy&lt;br /&gt;
|-&lt;br /&gt;
| 0xA03 || 3 || 5 || ResultDeadlock&lt;br /&gt;
|-&lt;br /&gt;
| 0xC03 || 3 || 6 || ResultInvalidAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0xE03 || 3 || 7 || ResultInvalidParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0x1003 || 3 || 8 || ResultOutOfMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0x1203 || 3 || 9 || ResultOutOfResource&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EA03 || 3 || 501 || InvalidHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EC03 || 3 || 502 || InvalidCurrentMemoryState&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EE03 || 3 || 503 || InvalidTransferMemoryState&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F003 || 3 || 504 || InvalidTransferMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F203 || 3 || 505 || InvalidSharedMemoryState&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F403 || 3 || 506 || InvalidSharedMemorySize&lt;br /&gt;
|-&lt;br /&gt;
| 0x7FE03 || 3 || 1023 || ResultInternalError&lt;br /&gt;
|-&lt;br /&gt;
| 0xA05 || 5 || 5 || ContentNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xE05 || 5 || 7 || ContentMetaNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1805 || 5 || 12 || UnknownStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC05 || 5 || 110 || InvalidContentMetaDatabase&lt;br /&gt;
|-&lt;br /&gt;
| 0x17C05 || 5 || 190 || WriteToReadOnlyContentStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x806 || 6 || 4 || InvalidMemoryState&lt;br /&gt;
|-&lt;br /&gt;
| 0x1006 || 6 || 8 || InvalidHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x408 || 8 || 2 || ProgramNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x608 || 8 || 3 || DataNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x808 || 8 || 4 || UnknownResolver&lt;br /&gt;
|-&lt;br /&gt;
| 0xA08 || 8 || 5 || ApplicationNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xC08 || 8 || 6 || HtmlDocumentNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xE08 || 8 || 7 || AddOnContentNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1008 || 8 || 8 || ControlNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1208 || 8 || 9 || LegalInformationNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408 || 8 || 10 || DebugProgramNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x209 || 9 || 1 || ArgumentOverflow&lt;br /&gt;
|-&lt;br /&gt;
| 0x409 || 9 || 2 || ArgumentCountOverflow&lt;br /&gt;
|-&lt;br /&gt;
| 0x609 || 9 || 3 || MetaOverflow&lt;br /&gt;
|-&lt;br /&gt;
| 0x809 || 9 || 4 || InvalidMeta&lt;br /&gt;
|-&lt;br /&gt;
| 0xA09 || 9 || 5 || InvalidNso&lt;br /&gt;
|-&lt;br /&gt;
| 0xC09 || 9 || 6 || InvalidPath&lt;br /&gt;
|-&lt;br /&gt;
| 0xE09 || 9 || 7 || MaxProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x1009 || 9 || 8 || NotPinned&lt;br /&gt;
|-&lt;br /&gt;
| 0x1209 || 9 || 9 || InvalidProgramId&lt;br /&gt;
|-&lt;br /&gt;
| 0x1409 || 9 || 10 || InvalidVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x1609 || 9 || 11 || InvalidAcidSignature&lt;br /&gt;
|-&lt;br /&gt;
| 0x1809 || 9 || 12 || InvalidNcaSignature&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C09 || 9 || 14 || InvalidPlatformId&lt;br /&gt;
|-&lt;br /&gt;
| 0x6609 || 9 || 51 || OutOfAddressSpace&lt;br /&gt;
|-&lt;br /&gt;
| 0x6809 || 9 || 52 || InvalidNroImage&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A09 || 9 || 53 || InvalidNrrImage&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C09 || 9 || 54 || NotAuthorized&lt;br /&gt;
|-&lt;br /&gt;
| 0x6E09 || 9 || 55 || MaxModule&lt;br /&gt;
|-&lt;br /&gt;
| 0x7009 || 9 || 56 || MaxRegistration&lt;br /&gt;
|-&lt;br /&gt;
| 0x7209 || 9 || 57 || NroAlreadyLoaded&lt;br /&gt;
|-&lt;br /&gt;
| 0xA209 || 9 || 81 || InvalidAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0xA409 || 9 || 82 || InvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xA609 || 9 || 83 || InvalidCurrentMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0xA809 || 9 || 84 || NotLoaded&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA09 || 9 || 85 || NotRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC09 || 9 || 86 || InvalidSession&lt;br /&gt;
|-&lt;br /&gt;
| 0xAE09 || 9 || 87 || InvalidProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0xC809 || 9 || 100 || UnknownCapability&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE09 || 9 || 103 || InvalidCapabilityKernelFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0xD009 || 9 || 104 || InvalidCapabilitySyscallMask&lt;br /&gt;
|-&lt;br /&gt;
| 0xD409 || 9 || 106 || InvalidCapabilityMapRange&lt;br /&gt;
|-&lt;br /&gt;
| 0xD609 || 9 || 107 || InvalidCapabilityMapPage&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE09 || 9 || 111 || InvalidCapabilityInterruptPair&lt;br /&gt;
|-&lt;br /&gt;
| 0xE209 || 9 || 113 || InvalidCapabilityApplicationType&lt;br /&gt;
|-&lt;br /&gt;
| 0xE409 || 9 || 114 || InvalidCapabilityKernelVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xE609 || 9 || 115 || InvalidCapabilityHandleTable&lt;br /&gt;
|-&lt;br /&gt;
| 0xE809 || 9 || 116 || InvalidCapabilityDebugFlags&lt;br /&gt;
|-&lt;br /&gt;
| 0x19009 || 9 || 200 || InternalError&lt;br /&gt;
|-&lt;br /&gt;
| 0x1940A || 10 || 202 || InvalidCmifHeaderSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A60A || 10 || 211 || InvalidCmifInHeader&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A80A || 10 || 212 || InvalidCmifOutHeader&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BA0A || 10 || 221 || UnknownMethodId&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D60A || 10 || 235 || InvalidInObjectCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D80A || 10 || 236 || InvalidOutObjectCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x25A0A || 10 || 301 || OutOfDomainEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x20B || 11 || 1 || NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC0B || 11 || 102 || OutOfSessionMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0x11A0B || 11 || 141 || InsufficientPointerTransferBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x1900B || 11 || 200 || OutOfDomains&lt;br /&gt;
|-&lt;br /&gt;
| 0x25A0B || 11 || 301 || SessionClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0x3240B || 11 || 402 || InvalidRequestSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x3260B || 11 || 403 || UnknownCommandType&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D60B || 11 || 491 || TargetNotDomain&lt;br /&gt;
|-&lt;br /&gt;
| 0x20F || 15 || 1 || ProcessNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x60F || 15 || 3 || NotTerminated&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0F || 15 || 5 || ApplicationRunning&lt;br /&gt;
|-&lt;br /&gt;
| 0x410 || 16 || 2 || Title-id not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF010 || 16 || 120 || Sysupdate not required.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F610 || 16 || 251 || Unexpected StorageId.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A810 || 16 || 340 || [[Network_Interface_services#IsAnyInternetRequestAccepted|IsAnyInternetRequestAccepted]] with the output from [[#Network_Interface_services#GetClientId|GetClientId]] returned false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64210 || 16 || 801 || [[NS_Services#SystemDeliveryInfo|SystemDeliveryInfo]] system_delivery_protocol_version is less than the system-setting.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64410 || 16 || 802 || [[NS_Services#SystemDeliveryInfo|SystemDeliveryInfo]] system_delivery_protocol_version is larger than the system-setting.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6F810 || 16 || 892 || Unknown state ref-count is zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0x74610 || 16 || 931 || Invalid [[NS_Services#SystemDeliveryInfo|SystemDeliveryInfo]] HMAC / invalid Meta Id.&lt;br /&gt;
|-&lt;br /&gt;
| 0x215 || 21 || 1 || OutOfProcesses&lt;br /&gt;
|-&lt;br /&gt;
| 0x415 || 21 || 2 || InvalidClient&lt;br /&gt;
|-&lt;br /&gt;
| 0x615 || 21 || 3 || OutOfSessions&lt;br /&gt;
|-&lt;br /&gt;
| 0x815 || 21 || 4 || AlreadyRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0xA15 || 21 || 5 || OutOfServices&lt;br /&gt;
|-&lt;br /&gt;
| 0xC15 || 21 || 6 || InvalidServiceName&lt;br /&gt;
|-&lt;br /&gt;
| 0xE15 || 21 || 7 || NotRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0x1015 || 21 || 8 || NotAllowed&lt;br /&gt;
|-&lt;br /&gt;
| 0x1215 || 21 || 9 || TooLargeAccessControl&lt;br /&gt;
|-&lt;br /&gt;
| 0x416 || 22 || 2 || ResultOutOfAddressSpace&lt;br /&gt;
|-&lt;br /&gt;
| 0x616 || 22 || 3 || ResultNroAlreadyLoaded&lt;br /&gt;
|-&lt;br /&gt;
| 0x816 || 22 || 4 || ResultInvalidNroImage&lt;br /&gt;
|-&lt;br /&gt;
| 0xC16 || 22 || 6 || ResultInvalidNrrImage&lt;br /&gt;
|-&lt;br /&gt;
| 0x1016 || 22 || 8 || ResultMaxRegistration&lt;br /&gt;
|-&lt;br /&gt;
| 0x1216 || 22 || 9 || ResultNotAuthorized&lt;br /&gt;
|-&lt;br /&gt;
| 0x80216 || 22 || 1025 || InvalidAddress&lt;br /&gt;
|-&lt;br /&gt;
| 0x80416 || 22 || 1026 || InvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x80816 || 22 || 1028 || NotLoaded&lt;br /&gt;
|-&lt;br /&gt;
| 0x80A16 || 22 || 1029 || NotRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0x80C16 || 22 || 1030 || InvalidSession&lt;br /&gt;
|-&lt;br /&gt;
| 0x80E16 || 22 || 1031 || InvalidProcess&lt;br /&gt;
|-&lt;br /&gt;
| 0x21A || 26 || 1 || SecureMonitorNotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 0x41A || 26 || 2 || SecureMonitorInvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x61A || 26 || 3 || SecureMonitorBusy&lt;br /&gt;
|-&lt;br /&gt;
| 0x81A || 26 || 4 || SecureMonitorNoAsyncOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0xA1A || 26 || 5 || SecureMonitorInvalidAsyncOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0xC1A || 26 || 6 || SecureMonitorNotPermitted&lt;br /&gt;
|-&lt;br /&gt;
| 0xC81A || 26 || 100 || InvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA1A || 26 || 101 || UnknownSecureMonitorError&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC1A || 26 || 102 || DecryptionFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0xD01A || 26 || 104 || OutOfKeySlots&lt;br /&gt;
|-&lt;br /&gt;
| 0xD21A || 26 || 105 || InvalidKeySlot&lt;br /&gt;
|-&lt;br /&gt;
| 0xD41A || 26 || 106 || BootReasonAlreadySet&lt;br /&gt;
|-&lt;br /&gt;
| 0xD61A || 26 || 107 || BootReasonNotSet&lt;br /&gt;
|-&lt;br /&gt;
| 0xD81A || 26 || 108 || InvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x1423 || 35 || 10 || Invalid command ID received by tipc processor.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E23 || 35 || 15 || Invalid message format received by tipc processor.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC823 || 35 || 100 || Tipc request was deferred for future processing (internal to the processor, never returned externally).&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA23 || 35 || 101 || Tipc object was closed (via close command 0xF, internal, never returned externally). &lt;br /&gt;
|-&lt;br /&gt;
| 0x19269 || 105 || 201 || SettingsNameNull&lt;br /&gt;
|-&lt;br /&gt;
| 0x19469 || 105 || 202 || SettingsItemKeyNull&lt;br /&gt;
|-&lt;br /&gt;
| 0x19669 || 105 || 203 || SettingsItemValueNull&lt;br /&gt;
|-&lt;br /&gt;
| 0x19A69 || 105 || 205 || SettingsItemValueBufferNull&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A069 || 105 || 208 || Null setting value size buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A269 || 105 || 209 || Null debug mode flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BA69 || 105 || 221 || SettingsNameEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BC69 || 105 || 222 || SettingsItemKeyEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E269 || 105 || 241 || SettingsNameTooLong&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E469 || 105 || 242 || SettingsItemKeyTooLong&lt;br /&gt;
|-&lt;br /&gt;
| 0x20A69 || 105 || 261 || SettingsNameInvalidFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C69 || 105 || 262 || SettingsItemKeyInvalidFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x4DA69 || 105 || 621 || Null language code buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E269 || 105 || 625 || Language out of valid range.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4EE69 || 105 || 631 || Null network settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4F069 || 105 || 632 || Null network settings output count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x50269 || 105 || 641 || Null backlight settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x51669 || 105 || 651 || Null Bluetooth device setting buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x51869 || 105 || 652 || Null Bluetooth device setting output count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x51A69 || 105 || 653 || Null Bluetooth enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C69 || 105 || 654 || Null Bluetooth AFH enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x51E69 || 105 || 655 || Null Bluetooth boost enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x52069 || 105 || 656 || Null BLE pairing settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x52269 || 105 || 657 || Null BLE pairing settings entry count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x52A69 || 105 || 661 || Null external steady clock source ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C69 || 105 || 662 || Null user system clock context buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x52E69 || 105 || 663 || Null network system clock context buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x53069 || 105 || 664 || Null user system clock automatic correction enabled flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x53269 || 105 || 665 || Null shutdown RTC value buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x53469 || 105 || 666 || Null external steady clock internal offset buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x53E69 || 105 || 671 || Null account settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55269 || 105 || 681 || Null audio volume buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55669 || 105 || 683 || Null ForceMuteOnHeadphoneRemoved buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55869 || 105 || 684 || Null headphone volume warning count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55E69 || 105 || 687 || Invalid audio output mode.&lt;br /&gt;
|-&lt;br /&gt;
| 0x56069 || 105 || 688 || Null headphone volume update flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x56669 || 105 || 691 || Null console information upload flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x57A69 || 105 || 701 || Null automatic application download flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x57C69 || 105 || 702 || Null notification settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x57E69 || 105 || 703 || Null account notification settings entry count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58069 || 105 || 704 || Null account notification settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x58E69 || 105 || 711 || Null vibration master volume buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x59069 || 105 || 712 || Null NX controller settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x59269 || 105 || 713 || Null NX controller settings entry count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x59469 || 105 || 714 || Null USB full key enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A269 || 105 || 721 || Null TV settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A469 || 105 || 722 || Null EDID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5B669 || 105 || 731 || Null data deletion settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5CA69 || 105 || 741 || Null initial system applet program ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5CC69 || 105 || 742 || Null overlay disp program ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5CE69 || 105 || 743 || Null IsInRepairProcess buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5D069 || 105 || 744 || Null RequiresRunRepairTimeReviser buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5DE69 || 105 || 751 || Null device timezone location name buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5F269 || 105 || 761 || Null primary album storage buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60669 || 105 || 771 || Null USB 3.0 enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x60869 || 105 || 772 || Null USB Type-C power source circuit version buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x61A69 || 105 || 781 || Null battery lot buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x62E69 || 105 || 791 || Null serial number buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64269 || 105 || 801 || Null lock screen flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64669 || 105 || 803 || Null color set ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64869 || 105 || 804 || Null quest flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64A69 || 105 || 805 || Null wireless certification file size buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64C69 || 105 || 806 || Null wireless certification file buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x64E69 || 105 || 807 || Null initial launch settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x65069 || 105 || 808 || Null device nickname buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x65269 || 105 || 809 || Null battery percentage flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x65469 || 105 || 810 || Null applet launch flags buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E869 || 105 || 1012 || Null wireless LAN enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7FA69 || 105 || 1021 || Null product model buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80E69 || 105 || 1031 || Null NFC enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x82269 || 105 || 1041 || Null ECI device certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x82469 || 105 || 1042 || Null E-Ticket device certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x83669 || 105 || 1051 || Null sleep settings buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84A69 || 105 || 1061 || Null EULA version buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84C69 || 105 || 1062 || Null EULA version entry count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x85E69 || 105 || 1071 || Null LDN channel buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x87269 || 105 || 1081 || Null SSL key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x87469 || 105 || 1082 || Null SSL certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x88669 || 105 || 1091 || Null telemetry flags buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x89A69 || 105 || 1101 || Null Gamecard key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x89C69 || 105 || 1102 || Null Gamecard certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8AE69 || 105 || 1111 || Null PTM battery lot buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8B069 || 105 || 1112 || Null PTM fuel gauge parameter buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C269 || 105 || 1121 || Null ECI device key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8C469 || 105 || 1122 || Null E-Ticket device key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8D669 || 105 || 1131 || Null speaker parameter buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8EA69 || 105 || 1141 || Null firmware version buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8EC69 || 105 || 1142 || Null firmware version digest buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8EE69 || 105 || 1143 || Null rebootless system update version buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8FE69 || 105 || 1151 || Null Mii author ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x91269 || 105 || 1161 || Null fatal flags buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x92669 || 105 || 1171 || Null auto update enable flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x93A69 || 105 || 1181 || Null external RTC reset flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x94E69 || 105 || 1191 || Null push notification activity mode buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x96269 || 105 || 1201 || Null service discovery control setting buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x97669 || 105 || 1211 || Null error report share permission buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x98A69 || 105 || 1221 || Null LCD vendor ID buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x99E69 || 105 || 1231 || Null console SixAxis sensor acceleration bias buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A069 || 105 || 1232 || Null console SixAxis sensor angular velocity bias buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A269 || 105 || 1233 || Null console SixAxis sensor acceleration gain buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A469 || 105 || 1234 || Null console SixAxis sensor angular velocity gain buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A669 || 105 || 1235 || Null console SixAxis sensor angular velocity time bias buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A869 || 105 || 1236 || Null console SixAxis sensor angular acceleration buffer .&lt;br /&gt;
|-&lt;br /&gt;
| 0x9B269 || 105 || 1241 || Null keyboard layout buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9BA69 || 105 || 1245 || Invalid keyboard layout.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C669 || 105 || 1251 || Null web inspector flag buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9C869 || 105 || 1252 || Null allowed SSL hosts buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9CA69 || 105 || 1253 || Null allowed SSL hosts entry count buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9CC69 || 105 || 1254 || Null host FS mount point buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9EE69 || 105 || 1271 || Null Amiibo key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F069 || 105 || 1272 || Null Amiibo ECQV certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F269 || 105 || 1273 || Null Amiibo ECDSA certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F469 || 105 || 1274 || Null Amiibo ECQV BLS key buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F669 || 105 || 1275 || Null Amiibo ECQV BLS certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x9F869 || 105 || 1276 || Null Amiibo ECQV BLS root certificate buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x272 || 114 || 1 || ResultOperationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0xC72 || 114 || 6 || ResultNotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x74 || 116 || 0 || ResultNotInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x274 || 116 || 1 || ResultNoCapability&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC74 || 116 || 102 || OffsetInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE74 || 116 || 103 || UninitializedClock&lt;br /&gt;
|-&lt;br /&gt;
| 0x19074 || 116 || 200 || ResultNotComparable&lt;br /&gt;
|-&lt;br /&gt;
| 0x19274 || 116 || 201 || ResultOverflowed&lt;br /&gt;
|-&lt;br /&gt;
| 0x64274 || 116 || 801 || ResultOutOfMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0x70A74 || 116 || 901 || InvalidPointer&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C74 || 116 || 902 || OutOfRange&lt;br /&gt;
|-&lt;br /&gt;
| 0x70E74 || 116 || 903 || InvalidTimeZoneBinary&lt;br /&gt;
|-&lt;br /&gt;
| 0x7BA74 || 116 || 989 || NotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x7BC74 || 116 || 990 || NotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 0xC79 || 121 || 6 || ResultInternetRequestNotAccepted&lt;br /&gt;
|-&lt;br /&gt;
| 0x27A || 122 || 1 || ResultInvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x47A || 122 || 2 || ResultNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x67A || 122 || 3 || ResultLocked&lt;br /&gt;
|-&lt;br /&gt;
| 0x87A || 122 || 4 || ResultAlreadyMounted&lt;br /&gt;
|-&lt;br /&gt;
| 0xA7A || 122 || 5 || ResultNotMounted&lt;br /&gt;
|-&lt;br /&gt;
| 0xC7A || 122 || 6 || ResultAlreadyOpened&lt;br /&gt;
|-&lt;br /&gt;
| 0xE7A || 122 || 7 || ResultNotOpened&lt;br /&gt;
|-&lt;br /&gt;
| 0x107A || 122 || 8 || ResultInternetRequestNotAccepted&lt;br /&gt;
|-&lt;br /&gt;
| 0xA07A || 122 || 80 || ResultPassphraseNotSaved&lt;br /&gt;
|-&lt;br /&gt;
| 0xA27A || 122 || 81 || ResultDataVerificationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0xB47A || 122 || 90 || ResultNotPermitted&lt;br /&gt;
|-&lt;br /&gt;
| 0xC47A || 122 || 98 || ResultInvalidOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0x167B || 123 || 11 || ResultErrorLower&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A7B || 123 || 13 || ResultInternalLogicError&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC7B || 123 || 102 || ResultInsufficientMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0xE87B || 123 || 116 || ResultInvalidSocketDescriptor&lt;br /&gt;
|-&lt;br /&gt;
| 0x1027B || 123 || 129 || ResultInvalidCrlFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x1987B || 123 || 204 || ResultIoWouldBlock&lt;br /&gt;
|-&lt;br /&gt;
| 0x19A7B || 123 || 205 || ResultIoTimeout&lt;br /&gt;
|-&lt;br /&gt;
| 0x19C7B || 123 || 206 || ResultIoAborted&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A07B || 123 || 208 || ResultNoConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A27B || 123 || 209 || ResultConnectionReset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A47B || 123 || 210 || ResultConnectionAborted&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A67B || 123 || 211 || ResultSocketShutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A87B || 123 || 212 || ResultNetworkDown&lt;br /&gt;
|-&lt;br /&gt;
| 0x1AE7B || 123 || 215 || ResultClientPkiAlreadyRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B47B || 123 || 218 || ResultMaxServerPkiRegistered&lt;br /&gt;
|-&lt;br /&gt;
| 0x25A7B || 123 || 301 || ResultSslErrorInvalidCertDomain&lt;br /&gt;
|-&lt;br /&gt;
| 0x25C7B || 123 || 302 || ResultSslErrorNoCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x25E7B || 123 || 303 || ResultSslErrorExpiredCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x2607B || 123 || 304 || ResultSslErrorRevokedCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x2627B || 123 || 305 || ResultSslErrorUnsupportedCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x2647B || 123 || 306 || ResultSslErrorUnknownCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x2667B || 123 || 307 || ResultSslErrorBadCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0x2687B || 123 || 308 || ResultSslErrorUnkownCa&lt;br /&gt;
|-&lt;br /&gt;
| 0x26A7B || 123 || 309 || ResultSslErrorAccessDenied&lt;br /&gt;
|-&lt;br /&gt;
| 0x26C7B || 123 || 310 || ResultSslErrorReceivedUnkownData&lt;br /&gt;
|-&lt;br /&gt;
| 0x26E7B || 123 || 311 || ResultSslErrorReceivedMalformedData&lt;br /&gt;
|-&lt;br /&gt;
| 0x2707B || 123 || 312 || ResultSslErrorReceivedUnexpectedHandshakeData&lt;br /&gt;
|-&lt;br /&gt;
| 0x2727B || 123 || 313 || ResultSslErrorReceivedUnexpectedRecordData&lt;br /&gt;
|-&lt;br /&gt;
| 0x2747B || 123 || 314 || ResultSslErrorReceivedTooLongRecord&lt;br /&gt;
|-&lt;br /&gt;
| 0x2767B || 123 || 315 || ResultSslErrorUnexpectedHelloVerifyRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x2787B || 123 || 316 || ResultSslErrorUnexpectedCertificateStatusResponse&lt;br /&gt;
|-&lt;br /&gt;
| 0x27A7B || 123 || 317 || ResultSslErrorInconsistentSignAlgorithm&lt;br /&gt;
|-&lt;br /&gt;
| 0x27C7B || 123 || 318 || ResultSslErrorInsufficientSecurity&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E7B || 123 || 319 || ResultSslErrorDecryptionWithInvalidMac&lt;br /&gt;
|-&lt;br /&gt;
| 0x2827B || 123 || 321 || ResultSslErrorDigestCalculationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x2847B || 123 || 322 || ResultSslErrorMacCalculationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x2887B || 123 || 324 || ResultSslErrorNoExtendedField&lt;br /&gt;
|-&lt;br /&gt;
| 0x28A7B || 123 || 325 || ResultSslErrorUntrustedOid&lt;br /&gt;
|-&lt;br /&gt;
| 0x28C7B || 123 || 326 || ResultSslErrorInvalidPolicy&lt;br /&gt;
|-&lt;br /&gt;
| 0x2947B || 123 || 330 || ResultSslErrorDecompressionFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0xBBA7B || 123 || 1501 || ResultSslAlertCloseNotify&lt;br /&gt;
|-&lt;br /&gt;
| 0xBBC7B || 123 || 1502 || ResultSslAlertUnexpectedMessage&lt;br /&gt;
|-&lt;br /&gt;
| 0xBBE7B || 123 || 1503 || ResultSslAlertBadRecordMac&lt;br /&gt;
|-&lt;br /&gt;
| 0xBC07B || 123 || 1504 || ResultSslAlertDecriptionFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0xBC27B || 123 || 1505 || ResultSslAlertRecordOverfrlow&lt;br /&gt;
|-&lt;br /&gt;
| 0xBC47B || 123 || 1506 || ResultSslAlertDecompressionFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0xBC67B || 123 || 1507 || ResultSslAlertHandshakeFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0xBCA7B || 123 || 1509 || ResultSslAlertBadCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0xBCC7B || 123 || 1510 || ResultSslAlertUnsupportedCertificate&lt;br /&gt;
|-&lt;br /&gt;
| 0xBCE7B || 123 || 1511 || ResultSslAlertCertificateRevoked&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD07B || 123 || 1512 || ResultSslAlertCertificateExpired&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD27B || 123 || 1513 || ResultSslAlertCertificateUnkown&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD47B || 123 || 1514 || ResultSslAlertIllegalParameter&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD67B || 123 || 1515 || ResultSslAlertUnknownCa&lt;br /&gt;
|-&lt;br /&gt;
| 0xBD87B || 123 || 1516 || ResultSslAlertAccessDenied&lt;br /&gt;
|-&lt;br /&gt;
| 0xBDA7B || 123 || 1517 || ResultSslAlertDecodeError&lt;br /&gt;
|-&lt;br /&gt;
| 0xBDC7B || 123 || 1518 || ResultSslAlertDecryptError&lt;br /&gt;
|-&lt;br /&gt;
| 0xBDE7B || 123 || 1519 || ResultSslAlertExportRestriction&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE07B || 123 || 1520 || ResultSslAlertProtocolVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE27B || 123 || 1521 || ResultSslAlertInsufficientSecurity&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE47B || 123 || 1522 || ResultSslAlertInternalError&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE67B || 123 || 1523 || ResultSslAlertInappropriateFallback&lt;br /&gt;
|-&lt;br /&gt;
| 0xBE87B || 123 || 1524 || ResultSslAlertUserCancelled&lt;br /&gt;
|-&lt;br /&gt;
| 0xBEA7B || 123 || 1525 || ResultSslAlertNoRenegotiation&lt;br /&gt;
|-&lt;br /&gt;
| 0xBEC7B || 123 || 1526 || ResultSslAlertUnsupportedExtention&lt;br /&gt;
|-&lt;br /&gt;
| 0xBEE7B || 123 || 1527 || ResultSslAlertCertificateUnobtainable&lt;br /&gt;
|-&lt;br /&gt;
| 0xBF07B || 123 || 1528 || ResultSslAlertUnrecognizedName&lt;br /&gt;
|-&lt;br /&gt;
| 0xBF27B || 123 || 1529 || ResultSslAlertBadCertificateStatusResponse&lt;br /&gt;
|-&lt;br /&gt;
| 0xBF47B || 123 || 1530 || ResultSslAlertBadCertificateHashValue&lt;br /&gt;
|-&lt;br /&gt;
| 0x27127B || 123 || 5001 || Converted from [https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/SSL_functions/sslerr.html NSS] SSL error -12155 (SSL_ERROR_RX_SHORT_DTLS_READ).&lt;br /&gt;
|-&lt;br /&gt;
| 0x271E7B || 123 || 5007 || Out-of-bounds error during error conversion.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 124 || 0 || ResultCancelled&lt;br /&gt;
|-&lt;br /&gt;
| 0x27C || 124 || 1 || ResultCancelledByUser&lt;br /&gt;
|-&lt;br /&gt;
| 0x287C || 124 || 20 || ResultInvalidUserId&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A7C || 124 || 21 || ResultInvalidUserPosition&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C7C || 124 || 22 || ResultInvalidApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C7C || 124 || 30 || ResultNullptr&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E7C || 124 || 31 || ResultInsufficientBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x407C || 124 || 32 || ResultInvalidArrayLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x427C || 124 || 33 || ResultInvalidStringFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x447C || 124 || 34 || ResultValueOutOfRange&lt;br /&gt;
|-&lt;br /&gt;
| 0x507C || 124 || 40 || ResultInvalidObjectAccess&lt;br /&gt;
|-&lt;br /&gt;
| 0x527C || 124 || 41 || ResultInvalidProtocolAccess&lt;br /&gt;
|-&lt;br /&gt;
| 0x767C || 124 || 59 || ResultInternetConnectionRequestNotAccepted&lt;br /&gt;
|-&lt;br /&gt;
| 0xC87C || 124 || 100 || ResultUserNotExist&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA7C || 124 || 101 || ResultUserAlreadyOpened&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC7C || 124 || 102 || ResultUserAlreadyClosed&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE7C || 124 || 103 || ResultUserReferred&lt;br /&gt;
|-&lt;br /&gt;
| 0xD07C || 124 || 104 || ResultUserUnqualified&lt;br /&gt;
|-&lt;br /&gt;
| 0xD27C || 124 || 105 || ResultNeverBeenQualified&lt;br /&gt;
|-&lt;br /&gt;
| 0x1907C || 124 || 200 || ResultNetworkServiceAccountRegistrationRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A47C || 124 || 210 || ResultNetworkServiceAccountCredentialBroken&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A67C || 124 || 211 || ResultNetworkServiceAccountUnmanaged&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A87C || 124 || 212 || ResultNetworkServiceAccountBanned&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CC7C || 124 || 230 || ResultNintendoAccountLinkageBroken&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E07C || 124 || 240 || ResultNintendoAccountStateOtherButInteractionRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E27C || 124 || 241 || ResultNintendoAccountStateDeleted&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E47C || 124 || 242 || ResultNintendoAccountStateBanned&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E67C || 124 || 243 || ResultNintendoAccountStateSuspended&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E87C || 124 || 244 || ResultNintendoAccountStateWithdrawn&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EA7C || 124 || 245 || ResultNintendoAccountStateTermsAgreementRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x2067C || 124 || 259 || ResultNintendoAccountStateReauthorizationRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x17707C || 124 || 3000 || ResultUnacceptableSystemVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x17727C || 124 || 3001 || ResultUnacceptableApplicationVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4E7C || 124 || 4007 || [https://en-americas-support.nintendo.com/app/answers/detail/a_id/28046/ Account Permanent Ban]&lt;br /&gt;
|-&lt;br /&gt;
| 0x23387C || 124 || 4508 || [https://en-americas-support.nintendo.com/app/answers/detail/a_id/28046/ Account Permanent Ban]&lt;br /&gt;
|-&lt;br /&gt;
| 0x234A7C || 124 || 4517 || [https://en-americas-support.nintendo.com/app/answers/detail/a_id/43652/ Account Ban]&lt;br /&gt;
|-&lt;br /&gt;
| 0x24027C || 124 || 4609 || [https://en-americas-support.nintendo.com/app/answers/detail/a_id/46482/ Service Discontinued]&lt;br /&gt;
|-&lt;br /&gt;
| 0x27107C || 124 || 5000 || ResultInvalidParams&lt;br /&gt;
|-&lt;br /&gt;
| 0x27127C || 124 || 5001 || ResultInvalidRequest&lt;br /&gt;
|-&lt;br /&gt;
| 0x27147C || 124 || 5002 || ResultInvalidDeviceAccount&lt;br /&gt;
|-&lt;br /&gt;
| 0x27167C || 124 || 5003 || ResultInvalidNdasAppAuthnToken&lt;br /&gt;
|-&lt;br /&gt;
| 0x27187C || 124 || 5004 || ResultInvalidIdp&lt;br /&gt;
|-&lt;br /&gt;
| 0x271A7C || 124 || 5005 || ResultInvalidIdpAccount&lt;br /&gt;
|-&lt;br /&gt;
| 0x271C7C || 124 || 5006 || ResultLinkedUserNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x271E7C || 124 || 5007 || ResultInvalidFriendCodeFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0x27207C || 124 || 5008 || ResultUserLinkNotExist&lt;br /&gt;
|-&lt;br /&gt;
| 0x27D87C || 124 || 5100 || ResultInvalidRawContent&lt;br /&gt;
|-&lt;br /&gt;
| 0x27DA7C || 124 || 5101 || ResultInsufficientScope&lt;br /&gt;
|-&lt;br /&gt;
| 0x27DC7C || 124 || 5102 || ResultForbidden&lt;br /&gt;
|-&lt;br /&gt;
| 0x27DE7C || 124 || 5103 || ResultUnavailableDeviceAccount&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E07C || 124 || 5104 || ResultResourceIsNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E27C || 124 || 5105 || ResultMethodNotAllowed&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E47C || 124 || 5106 || ResultNotAcceptableLanguage&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E67C || 124 || 5107 || ResultResourceAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E87C || 124 || 5108 || ResultUserLinkAlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x27EA7C || 124 || 5109 || ResultPreconditionFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x27EC7C || 124 || 5110 || ResultFriendCodeUnregenerableState&lt;br /&gt;
|-&lt;br /&gt;
| 0x27EE7C || 124 || 5111 || ResultBannedUser&lt;br /&gt;
|-&lt;br /&gt;
| 0x27F07C || 124 || 5112 || ResultDeletedUser&lt;br /&gt;
|-&lt;br /&gt;
| 0x27F27C || 124 || 5113 || ResultMembershipRequired&lt;br /&gt;
|-&lt;br /&gt;
| 0x27F47C || 124 || 5114 || ResultBannedUserByApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x28A07C || 124 || 5200 || ResultInternalServerError&lt;br /&gt;
|-&lt;br /&gt;
| 0x28B47C || 124 || 5210 || ResultCouldNotConfirmMembership&lt;br /&gt;
|-&lt;br /&gt;
| 0x29027C || 124 || 5249 || ResultUnderMaintenance&lt;br /&gt;
|-&lt;br /&gt;
| 0x27E || 126 || 1 || ResultInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0x87E || 126 || 4 || ResultNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE7E || 126 || 67 || Invalid database signature value (should be &amp;quot;NFDB&amp;quot;).&lt;br /&gt;
|-&lt;br /&gt;
| 0xD27E || 126 || 69 || Invalid database entry count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1987E || 126 || 204 || ResultDevelopmentOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x627F || 127 || 49 || Invalid NFP backup data header / entry header size (entry count / UUID length).&lt;br /&gt;
|-&lt;br /&gt;
| 0x667F || 127 || 51 || Invalid NFP backup data header / entry header CRC32.&lt;br /&gt;
|-&lt;br /&gt;
| 0x807F || 127 || 64 || Device not found / no devices available.&lt;br /&gt;
|-&lt;br /&gt;
| 0x827F || 127 || 65 || Invalid argument.&lt;br /&gt;
|-&lt;br /&gt;
| 0x847F || 127 || 66 || Invalid amiibo UTF-8 name.&lt;br /&gt;
|-&lt;br /&gt;
| 0x867F || 127 || 67 || Invalid amiibo mii StoreData.&lt;br /&gt;
|-&lt;br /&gt;
| 0x887F || 127 || 68 || Too large application area size (&amp;gt; 0xD8 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| 0x927F || 127 || 73 || Amiibo not mounted / not mounted in the required type.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA07F || 127 || 80 || NFC not enabled in system settings.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC07F || 127 || 96 || Amiibo/session needs restart.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC27F || 127 || 97 || Invalid device state / entry not found in backup data.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE27F || 127 || 113 || Internal FS error (failed to mount NFC savedata, invalid backup data file size).&lt;br /&gt;
|-&lt;br /&gt;
| 0xF07F || 127 || 120 || Invalid amiibo settings UTF-16 name / mii.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1007F || 127 || 128 || Amiibo application area does not exist / is not created.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1207F || 127 || 144 || Invalid amiibo data SHA256 hash / invalid amiibo header 0xA5 magic.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1307F || 127 || 152 || Amiibo application area access ID mismatch.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1507F || 127 || 168 || Amiibo application area already exists.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1647F || 127 || 178 || Malformed amiibo (invalid protocol / tag type / NTAG215 lock .fields / NTAG215 CFG)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1687F || 127 || 180 || Invalid amiibo tag SHA256 hash.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1707F || 127 || 184 || Invalid amiibo tag type.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B07F || 127 || 216 || Internal FS error (NFC savedata busy / file already exists).&lt;br /&gt;
|-&lt;br /&gt;
| 0x480 || 128 || 2 || IStorage not available.&lt;br /&gt;
|-&lt;br /&gt;
| 0x680 || 128 || 3 || No messages.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4680 || 128 || 35 || Error while launching applet.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A80 || 128 || 37 || Title-ID not found. Caused by code 0x410 when applet launch fails.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E880 || 128 || 500 || Invalid input.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EC80 || 128 || 502 || IStorage has already been opened by another accessor.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3EE80 || 128 || 503 || IStorage Read/Write out-of-bounds.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F480 || 128 || 506 || Invalid parameters.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3FE80 || 128 || 511 || IStorage opened as wrong type (data opened as transfermem, transfermem opened as data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x40080 || 128 || 512 || Unbalanced fatal section leave (returned when executing LeaveFatalSection without a preceding EnterFatalSection call).&lt;br /&gt;
|-&lt;br /&gt;
| 0x40C80 || 128 || 518 || Null object.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B080 || 128 || 600 || Failed to allocate memory for IStorage.&lt;br /&gt;
|-&lt;br /&gt;
| 0x59080 || 128 || 712 || Thread stack pool exhausted (out of memory).&lt;br /&gt;
|-&lt;br /&gt;
| 0x79C80 || 128 || 974 || DebugMode not enabled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7A880 || 128 || 980 || &amp;lt;code&amp;gt;am.debug!dev_function&amp;lt;/code&amp;gt; setting needs to be set / DebugMode not enabled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7CC80 || 128 || 998 || Not implemented.&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC81 || 129 || 102 || Transmission not agreed.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD281 || 129 || 105 || Network unavailable.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7DA81 || 129 || 1005 || HTTP error: Couldnt resolve proxy.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7DC81 || 129 || 1006 || HTTP error: Couldnt resolve host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7DE81 || 129 || 1007 || HTTP error: Couldnt connect.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7FE81 || 129 || 1023 || HTTP error: Write error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80481 || 129 || 1026 || HTTP error: Read error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80681 || 129 || 1027 || HTTP error: Out of memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80881 || 129 || 1028 || HTTP error: Operation timedout.&lt;br /&gt;
|-&lt;br /&gt;
| 0x81681 || 129 || 1035 || HTTP error: SSL connect error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x83681 || 129 || 1051 || HTTP error: Peer failed verification.&lt;br /&gt;
|-&lt;br /&gt;
| 0x83881 || 129 || 1052 || HTTP error: Got nothing.&lt;br /&gt;
|-&lt;br /&gt;
| 0x83E81 || 129 || 1055 || HTTP error: Send error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84081 || 129 || 1056 || HTTP error: Recv error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84481 || 129 || 1058 || HTTP error: SSL cert problem.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84681 || 129 || 1059 || HTTP error: SSL cipher.&lt;br /&gt;
|-&lt;br /&gt;
| 0x84881 || 129 || 1060 || HTTP error: SSL CA cert.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12C081 || 129 || 2400 || Server error: Status 400.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12C281 || 129 || 2401 || Server error: Status 401.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12C681 || 129 || 2403 || Server error: Status 403.&lt;br /&gt;
|-&lt;br /&gt;
| 0x138881 || 129 || 2500 || Server error: Status 500.&lt;br /&gt;
|-&lt;br /&gt;
| 0x138E81 || 129 || 2503 || Server error: Status 503.&lt;br /&gt;
|-&lt;br /&gt;
| 0x139081 || 129 || 2504 || Server error: Status 504.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA83 || 131 || 5 || Unrecognized applet ID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x485 || 133 || 2 || Invalid DVFS table ID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x685 || 133 || 3 || DVFS table ID for debug only.&lt;br /&gt;
|-&lt;br /&gt;
| 0x885 || 133 || 4 || Invalid parameter.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1489 || 137 || 10 || Already initialized.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C89 || 137 || 30 || Task not found.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5089 || 137  || 40 || Memory allocation failed / bad input.&lt;br /&gt;
|-&lt;br /&gt;
| 0x29489 || 137 || 330 || [[NCM_services#ContentMetaType|ContentMetaType]] doesn&#039;t match SystemUpdate.&lt;br /&gt;
|-&lt;br /&gt;
| 0x271289 || 137 || 5001 || One of the following socket errors occurred: ENETDOWN, ECONNRESET, EHOSTDOWN, EHOSTUNREACH, or EPIPE. Also occurs when the received size doesn&#039;t match the expected size (recvfrom() ret with [[NIM_services#Contents_Delivery|meta_size]] data receiving).&lt;br /&gt;
|-&lt;br /&gt;
| 0x272489 || 137 || 5010 || Socket was [[Sockets_services|shutdown()]] due to the async operation being cancelled.&lt;br /&gt;
|-&lt;br /&gt;
| 0x273889 || 137 || 5020 || Too many internal output entries with [[NIM_services|nim]] cmd42, system is [[NIM_services#Contents_Delivery|Internet-connected]], or an unrecognized socket error occured.&lt;br /&gt;
|-&lt;br /&gt;
| 0x27D889 || 137 || 5100 || Connection timeout.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A4489 || 137 || 5410 || Invalid [[NIM_services#Contents_Delivery|ID]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A5889 || 137 || 5420 || Invalid [[NIM_services#Contents_Delivery|magicnum]]. Can also be caused by the connection being closed by the peer, since non-negative return values from recv() are ignored in this case.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A6C89 || 137 || 5430 || Invalid [[NIM_services#Contents_Delivery|data_size]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A8089 || 137 || 5440 || The input [[NCM_services#ContentMetaKey|ContentMetaKey]] doesn&#039;t match the ContentMetaKey in state.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A9489 || 137 || 5450 || Invalid [[NIM_services#Contents_Delivery|meta_size]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x36B289 || 137 || 7001 || HTTP invalid response code (&amp;gt;=600).&lt;br /&gt;
|-&lt;br /&gt;
| 0x36B489 || 137 || 7002 || HTTP invalid client response code (4xx).&lt;br /&gt;
|-&lt;br /&gt;
| 0x36B689 || 137 || 7003 || HTTP invalid server response code (5xx).&lt;br /&gt;
|-&lt;br /&gt;
| 0x36B889 || 137 || 7004 || HTTP invalid redirect response code (3xx).&lt;br /&gt;
|-&lt;br /&gt;
| 0x3CF089 || 137 || 7800 || Unknown/invalid libcurl error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x68A || 138 || 3 || NotInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x28C || 140 || 1 || ResultInterfaceInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0xA8C || 140 || 5 || ResultMemAllocFailure&lt;br /&gt;
|-&lt;br /&gt;
| 0x108C || 140 || 8 || ResultInternalStateError&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E8C || 140 || 15 || ResultEndpointStateInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A8C || 140 || 21 || ResultUrbLimitExceeded&lt;br /&gt;
|-&lt;br /&gt;
| 0x608C || 140 || 48 || ResultInvalidDeviceState&lt;br /&gt;
|-&lt;br /&gt;
| 0x628C || 140 || 49 || ResultUsbEndpointAlreadyOpen&lt;br /&gt;
|-&lt;br /&gt;
| 0x648C || 140 || 50 || ResultInvalidAlternateSetting&lt;br /&gt;
|-&lt;br /&gt;
| 0x668C || 140 || 51 || USB data-transfer in progress.&lt;br /&gt;
|-&lt;br /&gt;
| 0x868C || 140 || 67 || ResultPlatformInvalid&lt;br /&gt;
|-&lt;br /&gt;
| 0xC88C || 140 || 100 || ResultInvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA8C || 140 || 101 || ResultInvalidOffset&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC8C || 140 || 102 || ResultInvalidSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xCE8C || 140 || 103 || ResultInvalidAlignment&lt;br /&gt;
|-&lt;br /&gt;
| 0xD48C || 140 || 106 || Invalid descriptor.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1928C || 140 || 201 || ResultOperationDenied&lt;br /&gt;
|-&lt;br /&gt;
| 0x1BE8E || 142 || 223 || [[Network_Interface_services#IsAnyInternetRequestAccepted|IsAnyInternetRequestAccepted]] with the output from [[#Network_Interface_services#GetClientId|GetClientId]] returned false.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1928F || 143 || 201 || ResultFailureLowLayerGeneral&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F68F || 143 || 251 || ResultInternalErrorMultipleConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F88F || 143 || 252 || ResultInternalErrorOverConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FA8F || 143 || 253 || ResultInternalErrorUnHandledCoreEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FC8F || 143 || 254 || ResultInternalErrorUnHandledHidEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FE8F || 143 || 255 || ResultInternalErrorUnHandledApiId&lt;br /&gt;
|-&lt;br /&gt;
| 0x2008F || 143 || 256 || ResultInternalErrorTimeOut&lt;br /&gt;
|-&lt;br /&gt;
| 0x2028F || 143 || 257 || ResultInternalErrorQueueFull&lt;br /&gt;
|-&lt;br /&gt;
| 0x2048F || 143 || 258 || ResultInternalErrorInvalidTsi&lt;br /&gt;
|-&lt;br /&gt;
| 0x2068F || 143 || 259 || ResultInternalErrorInvalidUsecase&lt;br /&gt;
|-&lt;br /&gt;
| 0x2088F || 143 || 260 || ResultInternalErrorInvalidOperationOnSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x20A8F || 143 || 261 || ResultInternalErrorFaultyDesign&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C8F || 143 || 262 || ResultInternalErrorTimeoutDisablePageScan&lt;br /&gt;
|-&lt;br /&gt;
| 0x20E8F || 143 || 263 || ResultInternalErrorTimeoutDisconnectAllDevices&lt;br /&gt;
|-&lt;br /&gt;
| 0x2108F || 143 || 264 || ResultInternalErrorTimeoutDisconnectDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x21A8F || 143 || 269 || ResultInternalErrorRecoveryPrecondition&lt;br /&gt;
|-&lt;br /&gt;
| 0x21E8F || 143 || 271 || ResultInternalErrorTimeoutWaitForLlrFinish&lt;br /&gt;
|-&lt;br /&gt;
| 0x2208F || 143 || 272 || ResultInternalErrorTimeoutBleConfigScanFilterCondition&lt;br /&gt;
|-&lt;br /&gt;
| 0x2228F || 143 || 273 || ResultInternalErrorTimeoutBleDisconnectAllDevices&lt;br /&gt;
|-&lt;br /&gt;
| 0x290 || 144 || 1 || Exited Abnormally ([[Applet_Manager_services#LibraryAppletExitReason|ExitReason]] == Abormal).&lt;br /&gt;
|-&lt;br /&gt;
| 0x690 || 144 || 3 || Canceled ([[Applet_Manager_services#LibraryAppletExitReason|ExitReason]] == Canceled).&lt;br /&gt;
|-&lt;br /&gt;
| 0x890 || 144 || 4 || Rejected.&lt;br /&gt;
|-&lt;br /&gt;
| 0xA90 || 144 || 5 || Exited Unexpectedly ([[Applet_Manager_services#LibraryAppletExitReason|ExitReason]] == Unexpected).&lt;br /&gt;
|-&lt;br /&gt;
| 0x293 || 147 || 1 || NotInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x493 || 147 || 2 || AlreadyInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 0x693 || 147 || 3 || OutOfArraySpace&lt;br /&gt;
|-&lt;br /&gt;
| 0x893 || 147 || 4 || OutOfFieldSpace&lt;br /&gt;
|-&lt;br /&gt;
| 0xA93 || 147 || 5 || OutOfMemory&lt;br /&gt;
|-&lt;br /&gt;
| 0xC93 || 147 || 6 || NotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0xE93 || 147 || 7 || InvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x1093 || 147 || 8 || NotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1293 || 147 || 9 || FieldCategoryMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x1493 || 147 || 10 || FieldTypeMismatch&lt;br /&gt;
|-&lt;br /&gt;
| 0x1693 || 147 || 11 || AlreadyExists&lt;br /&gt;
|-&lt;br /&gt;
| 0x1893 || 147 || 12 || CorruptJournal&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A93 || 147 || 13 || CategoryNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C93 || 147 || 14 || RequiredContextMissing&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E93 || 147 || 15 || RequiredFieldMissing&lt;br /&gt;
|-&lt;br /&gt;
| 0x2093 || 147 || 16 || FormatterError&lt;br /&gt;
|-&lt;br /&gt;
| 0x2293 || 147 || 17 || InvalidPowerState&lt;br /&gt;
|-&lt;br /&gt;
| 0x2493 || 147 || 18 || ArrayFieldTooLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x2693 || 147 || 19 || AlreadyOwned&lt;br /&gt;
|-&lt;br /&gt;
| 0x299 || 153 || 1 || ResultNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x499 || 153 || 2 || ResultOperationFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x699 || 153 || 3 || ResultInvalidSampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 0x899 || 153 || 4 || ResultInsufficientBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0xA99 || 153 || 5 || ResultOutOfResource&lt;br /&gt;
|-&lt;br /&gt;
| 0xC99 || 153 || 6 || ResultDefaultAudioInNotAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 0xE99 || 153 || 7 || ResultDefaultAudioOutNotAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 0x1099 || 153 || 8 || Too many buffers are still unreleased.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1299 || 153 || 9 || ResultAlreadyOpen&lt;br /&gt;
|-&lt;br /&gt;
| 0x1499 || 153 || 10 || ResultInvalidChannelCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x5299 || 153 || 41 || ResultInvalidUpdateInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x5499 || 153 || 42 || ResultNoMemoryPoolEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x5699 || 153 || 42 || ResultCycleDetected&lt;br /&gt;
|-&lt;br /&gt;
| 0x28299 || 153 || 321 || ResultCodecSpeakerOverCurrent&lt;br /&gt;
|-&lt;br /&gt;
| 0x28499 || 153 || 322 || ResultCodecOverTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 0x40099 || 153 || 512 || ResultNoAudioDeviceFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x40299 || 153 || 513 || ResultNotSupported&lt;br /&gt;
|-&lt;br /&gt;
| 0x40499 || 153 || 514 || ResultNotImplemented&lt;br /&gt;
|-&lt;br /&gt;
| 0x40699 || 153 || 515 || ResultInvalidSampleFormat&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0099 || 153 || 1536 || Invalid handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0899 || 153 || 1540 || [[Audio_services#Notes|ResultAudioDspAbort]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC0C99 || 153 || 1542 || No mailbox response from the ADSP during ADSP initialization.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C9D || 157 || 30 || Address is NULL.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E9D || 157 || 31 || PID is NULL.&lt;br /&gt;
|-&lt;br /&gt;
| 0x549D || 157 || 42 || Already bound.&lt;br /&gt;
|-&lt;br /&gt;
| 0xCC9D || 157 || 102 || Invalid PID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x49E || 158 || 2 || BootImagePackageNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x69E || 158 || 3 || InvalidBootImagePackage&lt;br /&gt;
|-&lt;br /&gt;
| 0x89E || 158 || 4 || TooSmallWorkBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0xA9E || 158 || 5 || NotAlignedWorkBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0xC9E || 158 || 6 || NeedsRepairBootImages&lt;br /&gt;
|-&lt;br /&gt;
| 0x29F || 159 || 1 || ResultCanceled&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A2 || 162 || 1 || ApplicationAborted&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A2 || 162 || 2 || SystemModuleAborted&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A2 || 162 || 3 || ApplicationExitTimeout&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A2 || 162 || 4 || ForcedShutdownDetected&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A2 || 162 || 100 || UnacceptableApplicationVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xCAA2 || 162 || 101 || UnacceptableAddOnContentVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA3 || 163 || 5 || InRepairWithoutVolHeld&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA3 || 163 || 6 || InRepairWithoutTimeReviserCartridge&lt;br /&gt;
|-&lt;br /&gt;
| 0x70A4 || 164 || 56 || ResultInternetRequestNotAccepted&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A5 || 165 || 1 || PmControl dispatched request timed out.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A5 || 165 || 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x6A5 || 165 || 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 0x7D2A5 || 165 || 1001 || PmRequest aborted.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D2A5 || 165 || 1002 || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA8 || 168 || 0 || UndefinedInstruction&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A8 || 168 || 1 || InstructionAbort&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A8 || 168 || 2 || DataAbort&lt;br /&gt;
|-&lt;br /&gt;
| 0x6A8 || 168 || 3 || AlignmentFault&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A8 || 168 || 4 || DebuggerAttached&lt;br /&gt;
|-&lt;br /&gt;
| 0xAA8 || 168 || 5 || BreakPoint&lt;br /&gt;
|-&lt;br /&gt;
| 0xCA8 || 168 || 6 || UserBreak&lt;br /&gt;
|-&lt;br /&gt;
| 0xEA8 || 168 || 7 || DebuggerBreak&lt;br /&gt;
|-&lt;br /&gt;
| 0x10A8 || 168 || 8 || UndefinedSystemCall&lt;br /&gt;
|-&lt;br /&gt;
| 0x12A8 || 168 || 9 || MemorySystemError&lt;br /&gt;
|-&lt;br /&gt;
| 0xC6A8 || 168 || 99 || IncompleteReport&lt;br /&gt;
|-&lt;br /&gt;
| 0x4AF || 175 || 2 || Bad version returned from calling the &amp;quot;nnjitpluginGetVersion&amp;quot; symbol.&lt;br /&gt;
|-&lt;br /&gt;
| 0xCAAF || 175 || 101 || Input NRO/NRR are too large for the storage buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B0AF || 175 || 600 || Symbol funcptr used by this cmd is not initialized (Control/GenerateCode).&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B2AF || 175 || 601 || DllPlugin Not initialized, or plugin NRO has already been loaded.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B4AF || 175 || 602 || An error was returned from calling the symbol funcptr with the Control cmd.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8B2 || 178 || 100 || Invalid user ID.&lt;br /&gt;
|-&lt;br /&gt;
| 0xCAB2 || 178 || 101 || User does not exist.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12CB2 || 178 || 150 || Service unavailable.&lt;br /&gt;
|-&lt;br /&gt;
| 0x190B2 || 178 || 200 || File storage failure.&lt;br /&gt;
|-&lt;br /&gt;
| 0xAB4 || 180 || 5 || Invalid event ID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D0B5 || 181 || 1000 || Invalid ELicense ID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4EB5 || 181 || 4007 || Device authentication error: System update required.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F50B5 || 181 || 4008 || Device authentication error: [https://en-americas-support.nintendo.com/app/answers/detail/a_id/42061/ Permanant Ban].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F52B5 || 181 || 4009 || Device authentication error: Internal server error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F54B5 || 181 || 4010 || Device authentication error: Under maintenance.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F62B5 || 181 || 4017 || Device authentication error: [https://en-americas-support.nintendo.com/app/answers/detail/a_id/43653/ Ban].&lt;br /&gt;
|-&lt;br /&gt;
| 0x58ACA || 202 || 709 || Npad ID is out of range.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2032CA || 202 || 4121 || [[Settings_services#ButtonConfigSettings|ButtonConfigSettings]] IsFull flag is clear.&lt;br /&gt;
|-&lt;br /&gt;
| 0x28CB || 203 || 20 || The [6.0.0+] Authentication challenge failed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x82CB || 203 || 65 || ResultNetworkNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x84CB || 203 || 66 || ResultConnectionTimeout&lt;br /&gt;
|-&lt;br /&gt;
| 0x86CB || 203 || 67 || ResultConnectionRejected&lt;br /&gt;
|-&lt;br /&gt;
| 0xC2CB || 203 || 97 || Matching LocalCommunicationId not found in the user-process [[NACP_Format|control.nacp]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xE2CB || 203 || 113 || ResultLowerVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xE4CB || 203 || 114 || ResultHigherVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0xF0CD || 205 || 120 || IrsensorNotReady&lt;br /&gt;
|-&lt;br /&gt;
| 0x198CD || 205 || 204 || IR camera invalid handle value.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A8CD || 205 || 212 || IR camera handle pointer is null.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6CE || 206 || 3 || AlbumWorkMemoryError&lt;br /&gt;
|-&lt;br /&gt;
| 0x10CE || 206 || 8 || AlbumOutOfRange&lt;br /&gt;
|-&lt;br /&gt;
| 0x18CE || 206 || 12 || AlbumInvalidTimestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x1ACE || 206 || 13 || AlbumInvalidStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x1CCE || 206 || 14 || AlbumInvalidFileContents&lt;br /&gt;
|-&lt;br /&gt;
| 0x2ACE || 206 || 21 || AlbumIsNotMounted&lt;br /&gt;
|-&lt;br /&gt;
| 0x2CCE || 206 || 23 || AlbumFileNotFound&lt;br /&gt;
|-&lt;br /&gt;
| 0x30CE || 206 || 24 || AlbumInvalidFileData&lt;br /&gt;
|-&lt;br /&gt;
| 0x3CCE || 206 || 30 || AlbumReadBufferShortage&lt;br /&gt;
|-&lt;br /&gt;
| 0xAF2CE || 206 || 1401 || InternalAlbumLimitationFileCountLimit&lt;br /&gt;
|-&lt;br /&gt;
| 0x4DA || 218 || 2 || StatusManager entry IsValid flag not set, or controller-update currently in-progress.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6DA || 218 || 3 || Controller-update failed via the LibraryApplet.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8DA || 218 || 4 || Invalid BusHandle.&lt;br /&gt;
|-&lt;br /&gt;
| 0xADA || 218 || 5 || StatusManager entry flag +0x0 not set, or device not connected.&lt;br /&gt;
|-&lt;br /&gt;
| 0xEDA || 218 || 7 || PollingReceivedData not available.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10DA || 218 || 8 || StatusManager entry DeviceEnabled flag not set, or flag +0x0 not set.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12DA || 218 || 9 || ExternalDeviceId mismatch.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14DA || 218 || 10 || BusHandle already initialized.&lt;br /&gt;
|-&lt;br /&gt;
| 0x104E7 || 231 || 130 || Nullptr passed to the LocalCommunicationId [[NACP_Format|control.nacp]] validation func.&lt;br /&gt;
|-&lt;br /&gt;
| 0x140E7 || 231 || 160 || GroupInfo field out of range.&lt;br /&gt;
|-&lt;br /&gt;
| 0x142E7 || 231 || 161 || SupportedPlatform not appropriate for this operation.&lt;br /&gt;
|-&lt;br /&gt;
| 0x146E7 || 231 || 163 || Invalid ServiceName.&lt;br /&gt;
|-&lt;br /&gt;
| 0x148E7 || 231 || 164 || Must provide PresharedBinaryKey.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C0E7 || 231 || 224 || Requested Priority value not allowed.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C2E7 || 231 || 225 || Matching LocalCommunicationId not found in the user-process [[NACP_Format|control.nacp]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x200E7 || 231 || 256 || Invalid flag.&lt;br /&gt;
|-&lt;br /&gt;
| 0x204E7 || 231 || 258 || Invalid SupportedPlatform.&lt;br /&gt;
|-&lt;br /&gt;
| 0x208E7 || 231 || 260 || Invalid StaticAesKeyIndex.&lt;br /&gt;
|-&lt;br /&gt;
| 0x20AE7 || 231 || 261 || MemberCountMax cannot be greater than 8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x210E7 || 231 || 264 || GroupInfo+8F must be 0x20.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Error Ranges ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Module || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0xFA002-0x138602 || 2 || 2000-2499 || ResultSdCardAccessFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x136802-0x176E02 || 2 || 2500-2999 || ResultGameCardAccessFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x190002-0x1B5602 || 2 || 3200-3499 || ResultAllocationMemoryFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B5802-0x1F3E02 || 2 || 3500-3999 || ResultMmcAccessFailed&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4002-0x270E02 || 2 || 4000-4999 || ResultDataCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F4202-0x219602 || 2 || 4001-4299 || RomCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x219A02-0x232602 || 2 || 4301-4499 || SaveDataCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x232A02-0x23EE02 || 2 || 4501-4599 || NcaCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x23F202-0x243E02 || 2 || 4601-4639 || IntegrityVerificationStorageCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x244202-0x246602 || 2 || 4641-4659 || PartitionFileSystemCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x246A02-0x248E02 || 2 || 4661-4679 || BuiltInStorageCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x249202-0x24B602 || 2 || 4681-4699 || FatFileSystemCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x24BA02-0x24DE02 || 2 || 4701-4719 || ResultHostFileSystemCorrupted&lt;br /&gt;
|-&lt;br /&gt;
| 0x271002-0x2EDE02 || 2 || 5000-5999 || ResultUnexpected&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE002-0x32C602 || 2 || 6000-6499 || ResultPreconditionViolation&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE202-0x306E02 || 2 || 6001-6199 || ResultInvalidArgument&lt;br /&gt;
|-&lt;br /&gt;
| 0x2EE402-0x2F1A02 || 2 || 6002-6029 || ResultInvalidPath&lt;br /&gt;
|-&lt;br /&gt;
| 0x307002-0x313602 || 2 || 6200-6299 || ResultInvalidOperationForOpenMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x313802-0x31FE02 || 2 || 6300-6399 || ResultUnsupportedOperation&lt;br /&gt;
|-&lt;br /&gt;
| 0x320002-0x326202 || 2 || 6400-6449 || ResultPermissionDenied&lt;br /&gt;
|-&lt;br /&gt;
| 0x390889-0x391889 || 137 || 7300-7308 || HTTP response code 300-308.&lt;br /&gt;
|-&lt;br /&gt;
| 0x39D089-0x39F289 || 137 || 7400-7417 || HTTP response code 400-417.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A9889-0x3AAA89 || 137 || 7500-7509 || HTTP response code 500-509.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E8289-0x3F4089 || 137 || 8001-8096 || libcurl error 1-96.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Support Errors =&lt;br /&gt;
This section is for Support Errors displayed by the error-applet, separate from the normal Result Errors.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 520 || Nverpt&lt;br /&gt;
|-&lt;br /&gt;
| 521 || Am_StuckMonitor&lt;br /&gt;
|-&lt;br /&gt;
| 600 || &lt;br /&gt;
|-&lt;br /&gt;
| 601 || &lt;br /&gt;
|-&lt;br /&gt;
| 602 || &lt;br /&gt;
|-&lt;br /&gt;
| 603 || &lt;br /&gt;
|-&lt;br /&gt;
| 604 || &lt;br /&gt;
|-&lt;br /&gt;
| 605 || &lt;br /&gt;
|-&lt;br /&gt;
| 606 || &lt;br /&gt;
|-&lt;br /&gt;
| 607 || &lt;br /&gt;
|-&lt;br /&gt;
| 608 || &lt;br /&gt;
|-&lt;br /&gt;
| 609 || &lt;br /&gt;
|-&lt;br /&gt;
| 610 || &lt;br /&gt;
|-&lt;br /&gt;
| 611 || &lt;br /&gt;
|-&lt;br /&gt;
| 612 || &lt;br /&gt;
|-&lt;br /&gt;
| 613 || &lt;br /&gt;
|-&lt;br /&gt;
| 614 || &lt;br /&gt;
|-&lt;br /&gt;
| 615 || &lt;br /&gt;
|-&lt;br /&gt;
| 616 || &lt;br /&gt;
|-&lt;br /&gt;
| 617 || &lt;br /&gt;
|-&lt;br /&gt;
| 618 || Pia&lt;br /&gt;
|-&lt;br /&gt;
| 619 || &lt;br /&gt;
|-&lt;br /&gt;
| 620 || &lt;br /&gt;
|-&lt;br /&gt;
| 621 || &lt;br /&gt;
|-&lt;br /&gt;
| 622 || &lt;br /&gt;
|-&lt;br /&gt;
| 623 || Eagle&lt;br /&gt;
|-&lt;br /&gt;
| 800 || [[Internet_Browser|LibAppletWeb]]&lt;br /&gt;
|-&lt;br /&gt;
| 801 || &lt;br /&gt;
|-&lt;br /&gt;
| 802 || &lt;br /&gt;
|-&lt;br /&gt;
| 803 || &lt;br /&gt;
|-&lt;br /&gt;
| 804 || &lt;br /&gt;
|-&lt;br /&gt;
| 805 || &lt;br /&gt;
|-&lt;br /&gt;
| 806 || &lt;br /&gt;
|-&lt;br /&gt;
| 807 || &lt;br /&gt;
|-&lt;br /&gt;
| 808 || &lt;br /&gt;
|-&lt;br /&gt;
| 809 || [[Internet_Browser|LibAppletAuth]]&lt;br /&gt;
|-&lt;br /&gt;
| 810 || [[Internet_Browser|LibAppletLns]]&lt;br /&gt;
|-&lt;br /&gt;
| 811 || [[Internet_Browser|LibAppletShop]]&lt;br /&gt;
|-&lt;br /&gt;
| 812 || &lt;br /&gt;
|-&lt;br /&gt;
| 813 || &lt;br /&gt;
|-&lt;br /&gt;
| 814 || &lt;br /&gt;
|-&lt;br /&gt;
| 815 || Coral&lt;br /&gt;
|-&lt;br /&gt;
| 816 || &lt;br /&gt;
|-&lt;br /&gt;
| 817 || &lt;br /&gt;
|-&lt;br /&gt;
| 818 || &lt;br /&gt;
|-&lt;br /&gt;
| 819 || &lt;br /&gt;
|-&lt;br /&gt;
| 820 || &lt;br /&gt;
|-&lt;br /&gt;
| 821 || &lt;br /&gt;
|-&lt;br /&gt;
| 899 ||&lt;br /&gt;
|-&lt;br /&gt;
| 999 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Error Codes ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Module || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| Variable&lt;br /&gt;
| {web-applets listed above}&lt;br /&gt;
| 2750&lt;br /&gt;
| MP4 parsing failed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Homebrew Errors =&lt;br /&gt;
Custom errors used by homebrew libraries and applications.&lt;br /&gt;
&lt;br /&gt;
== Modules ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 345 || libnx&lt;br /&gt;
|-&lt;br /&gt;
| 346 || [[Homebrew ABI]]&lt;br /&gt;
|-&lt;br /&gt;
| 347 || Homebrew Loader&lt;br /&gt;
|-&lt;br /&gt;
| 348 || libnx NVIDIA errors&lt;br /&gt;
|-&lt;br /&gt;
| 349 || libnx Binder errors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Error Codes ==&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Value || Module || Description || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x35B || 347 || 1 || Failed to init SM.&lt;br /&gt;
|-&lt;br /&gt;
| 0x55B || 347 || 2 || Failed to init FS.&lt;br /&gt;
|-&lt;br /&gt;
| 0x75B || 347 || 3 || Failed to open NRO file. May also happen when SD card isn&#039;t inserted / SD mounting failed earlier.&lt;br /&gt;
|-&lt;br /&gt;
| 0x95B || 347 || 4 || Failed to read NRO header.&lt;br /&gt;
|-&lt;br /&gt;
| 0xB5B || 347 || 5 || Invalid NRO magic.&lt;br /&gt;
|-&lt;br /&gt;
| 0xD5B || 347 || 6 || Invalid NRO segments.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF5B || 347 || 7 || Failed to read NRO.&lt;br /&gt;
|-&lt;br /&gt;
| 0x135B || 347 || 9 || Failed to allocate heap.&lt;br /&gt;
|-&lt;br /&gt;
| 0x255B || 347 || 18 || Failed to map code-binary memory.&lt;br /&gt;
|-&lt;br /&gt;
| 0x275B || 347 || 19 || Failed to map code memory (.text).&lt;br /&gt;
|-&lt;br /&gt;
| 0x295B || 347 || 20 || Failed to map code memory (.rodata).&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B5B || 347 || 21 || Failed to map code memory (.data+.bss).&lt;br /&gt;
|-&lt;br /&gt;
| 0x315B || 347 || 24 || Failed to unmap code memory (.text).&lt;br /&gt;
|-&lt;br /&gt;
| 0x335B || 347 || 25 || Failed to unmap code memory (.rodata).&lt;br /&gt;
|-&lt;br /&gt;
| 0x355B || 347 || 26 || Failed to unmap code memory (.data+.bss).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13250</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=13250"/>
		<updated>2025-05-18T12:13:34Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Improved NFP structs, detailed some NFP commands, detailed amiibo information and structures&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol).&lt;br /&gt;
&lt;br /&gt;
Check [[Error codes]] for result codes that these commands may return on error.&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output data. The last write date is not validated here (unlike with [[#GetCommonInfo]]).&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input data to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
Calls an internal function with the input [[#BreakType]]. This first reads amiibo data (like [[#Mount]] and other commands), then saves the read amiibo in the [[#Backup data]], then depending on the type performs some logic (this changes are thus not saved in the backup), and finally flushes the modified amiibo (writes it to the figurine).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 0 does nothing (it is used as a flushing command, used by many other commands).&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 1 breaks the data SHA256 HMAC hash (doing &amp;quot;raw_fmt-&amp;gt;data_sha256_hmac_hash[0] ^= 0x80u;&amp;quot;, see [[#Amiibo settings]])&lt;br /&gt;
&lt;br /&gt;
[[#BreakType]] 2 sets the amiibo header magic (see [[#Amiibo settings]]) to 0x00 (which beaks the figurine since this magic is checked to be 0xA5 in several places).&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
This reads from the raw [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
This writes directly to the raw [[#Backup data]]. The buffer size must be less or equal than the backup data size (0x1FBD20).&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
The input PID is internally used to get the process application ID when needed.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
Creates an internal object that manages mounted amiibo data. This step loads the amiibo [[#Raw format]], saves it in [[#Backup data]], and converts/decrypts it internally into a [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted. Disposes the internal object that manages mounted amiibo data.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist (checks the [[#Amiibo flag]]). Just sets an internal flag to 1 if the provided access ID and the application area access ID match.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output [[#Application area]] data buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area. The remaining data out of the total 0xD8-bytes is filled with randomly generated bytes.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Performs CRC verifications, updates write counters (see [[#Amiibo settings]]) and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Reloads amiibo data (same internal functions as [[#Mount]]) and writes the data to the amiibo again. If reading the amiibo fails, it tries to load the [[#Raw data]] from the [[#Backup data]].&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Sets the new application ID / access ID values (even if an application area already existed), updates CRC values, updates write counters (see [[#Amiibo settings]]), copies input data, fills remaining space with random bytes, and then calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Converts data from the internal [[#Amiibo settings]] to the output info. The last write date is validated, defaulting it to 2000-1-1 if the validation fails.&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] ROM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
The returned state is mapped from the internal state value through lookup tables. nfp services uses the same table, mifare uses a separate one, and the nfc services use another separate table.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input [[#Application area]] data buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM, and the application area to exist and be opened (see [[#OpenApplicationArea]]).&lt;br /&gt;
&lt;br /&gt;
Performs the same logic as [[#SetApplicationArea]] but without checking the current access ID, just overwriting it.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the internal [[#Amiibo settings]] to the output info.&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just converts data from the input info to the internal [[#Amiibo settings]]. No flushing / writing to the amiibo is done in this command.&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#RegisterInfo]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the amiibo-initialized [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
All [[#Application area]]-related fields in the internal [[#Amiibo settings]] are filled with random bytes, and the corresponding [[#Amiibo flag]] is removed. Finally, it calls internally the same function as [[#BreakTag]] with [[#BreakType]] 0.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
Requires the amiibo to be mounted with [[#MountType]] RAM.&lt;br /&gt;
&lt;br /&gt;
Just returns whether the corresponding [[#Amiibo flag]] in the internal [[#Amiibo settings]] is set.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareKey =&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || MifareCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x6 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x6 || Key data&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || Block index&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x10 || [[#MifareKey]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
State 5 is not used/exposed with all nfc commands :it is only used with nfp and mifare, see [[#GetDeviceState]].&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 2 || RAM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Font region (masked bits from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (byte-swapped value in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type  (same as in [[#Amiibo ID]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area version =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xFF || Invalid (application area does not exist)&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Nintendo 3DS&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Nintendo Wii U&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Nintendo 3DS (v2?)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Nintendo Switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This value corresponds to hex-digit 7 of application IDs (3DS and Wii U title IDs have 0/1 at that position).&lt;br /&gt;
&lt;br /&gt;
NFC computes it by taking (app_id_be &amp;gt;&amp;gt; 36) &amp;amp; 0xF.&lt;br /&gt;
&lt;br /&gt;
Since Switch games do not follow this trend, the application ID in [[#Amiibo settings]] is stored as bswap64(application_id &amp;amp; 0xFFFFFFFF0FFFFFFF | 0x30000000) by [[#CreateApplicationArea]], force-setting the hex-digit (presumably so that older consoles will recognize it).&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Application ID of the game owning the application area (original value, see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || [[#Amiibo settings]] flags, bit-shifted: bit0=[[#Amiibo flag]] bit4 and so on&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated UTF-8 string, converted from UTF-16)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || [[#Amiibo header]] magic (Always 0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || [[#Amiibo header]] write counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || [[#Amiibo settings]] terminal ID CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x38 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0x40 || Same contents as [[#CommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x5C || [[#Amiibo settings]] mii Ver3StoreData, format used in 3DS (see https://www.3dbrew.org/wiki/Mii#Mii_format)&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0x2 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xDE || 0x2 || [[#Amiibo settings]] mii CRC16&lt;br /&gt;
|-&lt;br /&gt;
| 0xE0 || 0x8 || [[#Amiibo settings]] mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0xE8 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xEC || 0x16 (2*11) || Amiibo name (NUL-terminated UTF-16 string, byte-swapped from [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x102 || 0x1 || [[#Amiibo settings]] font region&lt;br /&gt;
|-&lt;br /&gt;
| 0x103 || 0x1 || Unknown, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x104 || 0x4 || [[#Amiibo settings]] mii CRC32 (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x108 || 0x14 || [[#Amiibo settings]] unknown 0x14 bytes, normally zero&lt;br /&gt;
|-&lt;br /&gt;
| 0x11c || 0x64 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x180 || 0x8 || [[#Amiibo settings]] modified application ID (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x188 || 0x4 || [[#Amiibo settings]] [[#Access ID]] (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18c || 0x2 || [[#Amiibo settings]] terminal ID CRC32 change counter (byte-swapped)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18e || 0x1 || [[#Amiibo settings]] flags (bit-shifted, same as with [[#AdminInfo]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x18f || 0x1 || Hardcoded to 0x02 (tag type? amiibo version?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x190 || 0x1 || [[#Application area version]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x191 || 0x1 || Application ID byte (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x192 || 0x2E || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x1c0 || 0xD8 || [[#Application area]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;. For more details, see [[#BreakTag]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Does no breaking, just flushes&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Breaks the amiibo data SHA256 HMAC hash (see [[#Amiibo settings]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Breaks the amiibo header magic (see [[#Amiibo settings]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Value 0 is internally used in some places, aside for [[#BreakTag]] commands called externally.&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Application area =&lt;br /&gt;
&lt;br /&gt;
This is a 0xD8 byte region for per-game amiibo savedata. Only one game may use the application area.&lt;br /&gt;
&lt;br /&gt;
== Access ID ==&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
== Nintendo 3DS titles ==&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| Shovel Knight: Treasure Trove || 0x1016E100&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 3 || 0x38600500&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Backup data =&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
Backup data is stored at [[Flash_Filesystem#SystemSaveData|data]]:/nfp_backup.dat. It has a total size of 0x1FBD20 bytes, and has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x20 || [[#Backup header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x7D00 (0x20*1000) || [[#Backup entry header]] array&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20 || 0x1F4000 (0x800*1000) || [[#Backup entry data]] array&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is a maximum of 1000 entries. This can be accessed by [[#ReadBackupData]] and [[#WriteBackupData]] commands.&lt;br /&gt;
&lt;br /&gt;
== Backup header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Next free entry index&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry header ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x20 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || Packed date (when this entry was written)&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0xE || Unknown (zero?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || CRC32 of the 0x1C bytes above&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Backup entry data ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is a 0x800 bytes (per-entry data).&lt;br /&gt;
&lt;br /&gt;
NFC writes here the amiibo [[#Raw format]], while the remaining 0x5E4 bytes are unused.&lt;br /&gt;
&lt;br /&gt;
= Amiibo =&lt;br /&gt;
&lt;br /&gt;
== Raw format ==&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
This is the raw format initially read by NFC (as well as other amiibo dumping tools). It has the following format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x20 || Encrypted section 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x20 || Tag SHA256 HMAC hash: hash over plain tag data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x54 || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x20 || Data SHA256 HMAC hash: hash over plain data, see [[#Plain format]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA0 || 0x114 || Encrypted section 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x54 || Encrypted section 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All non-NTAG215 fields are specific of amiibo (located in the user memory pages of the tag). For more details on the page layout, see https://www.3dbrew.org/wiki/Amiibo.&lt;br /&gt;
&lt;br /&gt;
The three encrypted sections combined in order (a total of 0x188 bytes) are decrypted to get the [[#Amiibo settings]] and the [[#Application area]], in that order.&lt;br /&gt;
&lt;br /&gt;
== Plain format ==&lt;br /&gt;
&lt;br /&gt;
This is 0x21C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
This format contains reordered and decrypted amiibo data:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#NTAG215 data 2]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x20 || Data SHA256 HMAC hash: hash over 0x1DF bytes, starting at offset 0x29 ([[#Amiibo header]] write counter) until [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || [[#Amiibo header]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xB0 || [[#Amiibo settings]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xDC || 0xD8 || [[#Application area]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B4 || 0x20 || Tag SHA256 HMAC hash: hash over 0x34 bytes below ([[#NTAG215 data 1]] and [[#Amiibo ID entry]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D4 || 0x8 || [[#NTAG215 data 1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1DC || 0x2C || [[#Amiibo ID entry]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x208 || 0x4 || [[#NTAG215 dynamic lock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C || 0x10 || [[#NTAG215 config]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When converting from [[#Raw format]] to [[#Plain format]], both SHA256 HMAC hashes are tested, otherwise an error is returned internally.&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 1 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || NTAG215 9-byte manufacturer serial number (first 8 bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NTAG215 data 2 ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || NTAG215 9-byte manufacturer serial number (last byte)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Static lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || Capability Container (CC) bytes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the static lock bytes match 0xE00F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 dynamic lock ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Dynamic lock bytes&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks the dynamic lock state when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== NTAG215 config ==&lt;br /&gt;
&lt;br /&gt;
This is 0x10 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || CFG0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || CFG1&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || PWD&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || PACK&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x2 || RFUI&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
NFC checks that the CFG0 and CFG1 match 0x4000000 and 0x5F when converting from [[#Raw format]] to [[#Plain format]].&lt;br /&gt;
&lt;br /&gt;
== Amiibo header ==&lt;br /&gt;
&lt;br /&gt;
This is 0x4 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Magic (0xA5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Version (0x00)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID ==&lt;br /&gt;
&lt;br /&gt;
This is 0x8 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x3 || Character ID: bits0-9 = game ID, bits10-15 = character ID, bits16-23 = character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Series ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Numbering ID (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || NFP type (figurine type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Version? (0x02)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo ID entry ==&lt;br /&gt;
&lt;br /&gt;
This is 0x2C bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#Amiibo ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x20 || Unknown, maybe some hash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo flag ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bit || Mask || Description&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x10 || Initialized in console settings&lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0x20 || Application area exists (was created by some game)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo date ==&lt;br /&gt;
&lt;br /&gt;
This is a date packed in 2 bytes:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 5-8 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 9-15 || Year (relative to 2000)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Amiibo settings ==&lt;br /&gt;
&lt;br /&gt;
This is 0xB0 bytes.&lt;br /&gt;
&lt;br /&gt;
Note: unofficial name.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || Font region (bits0-3) and [[#Amiibo flag]] (bits4-7)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x2 || Country code ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || Counter of the times the terminal ID CRC32 has changed (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || First write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x2 || Last write date (big-endian, see [[#Amiibo date]] for format in little-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || CRC32 of NFC terminal ID (8 bytes, see below)&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x14 (2*10) || Amiibo name (UTF16-BE, not null-terminated)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x5C || Mii in Ver3StoreData format, see https://www.3dbrew.org/wiki/Mii#Mii_format&lt;br /&gt;
|-&lt;br /&gt;
| 0x7C || 0x2 || Unused/padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x7E || 0x2 || CRC16 of the mii data (0x60 bytes, last 4-bytes zeroed)&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x8 || Application ID of the game owning the application area (big-endian) (modified, see [[#Application area version]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x88 || 0x2 || Write counter (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8A || 0x4 || Access ID of the game owning the application area (big-endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8E || 0x1 || Application ID byte: (Application ID &amp;gt;&amp;gt; 28) &amp;amp; 0xFF&lt;br /&gt;
|-&lt;br /&gt;
| 0x8F || 0x1 || Unknown1&lt;br /&gt;
|-&lt;br /&gt;
| 0x90 || 0x8 || Mii StoreDataExtension&lt;br /&gt;
|-&lt;br /&gt;
| 0x98 || 0x14 || Unknown2&lt;br /&gt;
|-&lt;br /&gt;
| 0xAC || 0x4 || CRC32 of mii data (Ver3StoreData + pad + CRC16) +  Application ID byte + Unknown1 + StoreDataExtension + Unknown2 (total of 0x7E bytes)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The country code ID is zeroed when calling [[#SetRegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
The application ID byte contains the original application ID hex-digit (only used for Switcj games, see [[#Application area version]]), so it can be to restore the original value (which is needed for [[#GetAdminInfo]]).&lt;br /&gt;
&lt;br /&gt;
The terminal ID is a randomly-generated 8-byte value that is re-generated every time [[#Initialize]] is called (thus every nfc/nfp/mifare session), and saved at [[Flash_Filesystem#SystemSaveData|data]]:/nfc_terminal_id.dat.&lt;br /&gt;
&lt;br /&gt;
= Play report =&lt;br /&gt;
&lt;br /&gt;
In nfp [[#Unmount]] and [[#Format]] commands, and if [[System Settings|setting]] &amp;lt;code&amp;gt;nfp!play_report&amp;lt;/code&amp;gt; is true, a [[BCAT services|play report]] is sent with the following fields: &amp;lt;code&amp;gt;Uid&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CharacterId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NumberingId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SeriesId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NfpType&amp;lt;/code&amp;gt; (from the current [[#Amiibo ID]]), &amp;lt;code&amp;gt;ApplicationId&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AccessInfo&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DeviceType&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=11680</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=11680"/>
		<updated>2022-04-21T16:07:42Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Document some nfp IDebug commands and types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol)&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [[#GetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SetAll]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#FlushDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || [[#BreakTag]]&lt;br /&gt;
|-&lt;br /&gt;
| 204 || [[#ReadBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 205 || [[#WriteBackupData]]&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x1A output buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
==== SetAll ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x19 input buffer containing [[#NfpData]], no output.&lt;br /&gt;
&lt;br /&gt;
==== FlushDebug ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
==== BreakTag ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#BreakType]], no output.&lt;br /&gt;
&lt;br /&gt;
==== ReadBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x6 output buffer, and an output u32 (read_size).&lt;br /&gt;
&lt;br /&gt;
==== WriteBackupData ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be less or equal than 0x1FBD20.&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#WriteType]], a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0. This handles Amiibo crypto, etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service, this differs depending on the service/cmd however.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service, this differs depending on the service/cmd however.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#ModelType]] and an input u32 [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The application area needs to be opened first.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area.&lt;br /&gt;
&lt;br /&gt;
The application area needs to be opened first.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Creates the application area with the input access ID, and writes the buffer data there.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Actually returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Recreates the application area with the input access ID, and writes the buffer data there.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Finalized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RAM&lt;br /&gt;
|-&lt;br /&gt;
| 3 || All&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated string)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Game and character ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Figure type&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Model number&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Series&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Program ID (From the Wii U, 3DS or Switch title who created the application area)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Access ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || Flags (bit0 = amiibo was initialized in console settings, bit1 = has application area, bit2/bit3 unknown)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 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)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated string)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= NfpData =&lt;br /&gt;
This is &amp;quot;nn::nfp::NfpData&amp;quot;. This is a 0x298-byte struct.&lt;br /&gt;
&lt;br /&gt;
= BreakType =&lt;br /&gt;
This is &amp;quot;nn::nfp::BreakType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Value 0 is internally used in some places, aside for [[#BreakTag]] commands called externally.&lt;br /&gt;
&lt;br /&gt;
= WriteType =&lt;br /&gt;
This is &amp;quot;nn::nfp::WriteType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ?&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Access ID =&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=11465</id>
		<title>NFC services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NFC_services&amp;diff=11465"/>
		<updated>2022-01-31T00:07:45Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Document some nfp stuff&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= nfc:am =&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAmManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateAmInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAm ==&lt;br /&gt;
This is &amp;quot;nn::nfc::am::detail::IAm&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NotifyForegroundApplet&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:mf:u =&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::mifare::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection_2|StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#ReadMifare|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#WriteMifare|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#AttachActivateEvent|GetActivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#AttachDeactivateEvent|GetDeactivateEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [3.0.0+] [[#AttachAvailabilityChangeEvent|GetAvailabilityChangeEventHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= nfc:user =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateUserInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUser ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize|InitializeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize|FinalizeOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetStateOld ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabledOld ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#IsNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#GetStateOld]].&lt;br /&gt;
&lt;br /&gt;
=== IsNfcEnabled ===&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#IsNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a [[#NfcProtocol]], no output.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReadMifare ===&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
sdknso passes the same user-specified array-count for both buffers.&lt;br /&gt;
&lt;br /&gt;
=== WriteMifare ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a type-0x5 input buffer containing an array of [[#MifareWriteBlockParameter]], no output.&lt;br /&gt;
&lt;br /&gt;
=== SendCommandByPassThrough ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], a nn::TimeSpan timeout, a type-0x6 output buffer, a type-0x5 input buffer, returns an output u32 out_size.&lt;br /&gt;
&lt;br /&gt;
sdknso copies the output u32 into an u64. This is the actual size which was copied into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This allows using a raw NFC command. The input buffer contains the command data (id + params), and the output buffer contains the response.&lt;br /&gt;
&lt;br /&gt;
=== KeepPassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ReleasePassThroughSession ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfc:sys =&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateSystemInterface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystem ==&lt;br /&gt;
This is &amp;quot;nn::nfc::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetStateOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#SetNfcEnabledOld]]&lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] [[#Initialize|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] [[#Finalize|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 402 || [4.0.0+] [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 403 || [4.0.0+] [[#IsNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 404 || [4.0.0+] [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 405 || [4.0.0+] [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 406 || [4.0.0+] [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 407 || [4.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 408 || [4.0.0+] [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 409 || [4.0.0+] [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 410 || [4.0.0+] [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 411 || [4.0.0+] [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 412 || [4.0.0+] [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] [[#SetNfcEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [7.0.0+] [[#OutputTestWave]]&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || [4.0.0+] [[#ReadMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || [4.0.0+] [[#WriteMifare]]&lt;br /&gt;
|-&lt;br /&gt;
| 1300 || [4.0.0+] [[#SendCommandByPassThrough]]&lt;br /&gt;
|-&lt;br /&gt;
| 1301 || [4.0.0+] [[#KeepPassThroughSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1302 || [4.0.0+] [[#ReleasePassThroughSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabledOld ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as [[#SetNfcEnabled]].&lt;br /&gt;
&lt;br /&gt;
=== SetNfcEnabled ===&lt;br /&gt;
Takes an input bool, no output.&lt;br /&gt;
&lt;br /&gt;
This replaces [[#SetNfcEnabledOld]].&lt;br /&gt;
&lt;br /&gt;
=== OutputTestWave ===&lt;br /&gt;
Takes an input bool and a [[#TestWaveType]], no output.&lt;br /&gt;
&lt;br /&gt;
= nfp services =&lt;br /&gt;
&lt;br /&gt;
These are used for amiibo support (nfp = Nintendo Figurine Protocol, internal name for amiibo protocol)&lt;br /&gt;
&lt;br /&gt;
== nfp:user ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUserManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateUserInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IUser ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IUser&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|Finalize]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:sys ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateSystemInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ISystem ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::ISystem&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== nfp:dbg ==&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebugManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Create*Interface|CreateDebugInterface]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IDebug ===&lt;br /&gt;
This is &amp;quot;nn::nfp::detail::IDebug&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize*|InitializeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Finalize*|FinalizeDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ListDevices]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StartDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#StopDetection]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#Mount]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#Unmount]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#SetApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#Restore]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#CreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetTagInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetCommonInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetModelInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#AttachActivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#AttachDeactivateEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#GetState]]&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [[#GetDeviceState]]&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [[#GetNpadId]]&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [[#GetApplicationAreaSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] [[#AttachAvailabilityChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#RecreateApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [[#Format]]&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [[#GetAdminInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [[#GetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 103 || [[#SetRegisterInfoPrivate]]&lt;br /&gt;
|-&lt;br /&gt;
| 104 || [[#DeleteRegisterInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 105 || [[#DeleteApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 106 || [[#ExistsApplicationArea]]&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetAll&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetAll&lt;br /&gt;
|-&lt;br /&gt;
| 202 || FlushDebug&lt;br /&gt;
|-&lt;br /&gt;
| 203 || BreakTag&lt;br /&gt;
|-&lt;br /&gt;
| 204 || ReadBackupData&lt;br /&gt;
|-&lt;br /&gt;
| 205 || WriteBackupData&lt;br /&gt;
|-&lt;br /&gt;
| 206 || [[#WriteNtf]]&lt;br /&gt;
|-&lt;br /&gt;
| 300 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 301 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [3.0.0-3.0.2]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0-3.0.2]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== WriteNtf ====&lt;br /&gt;
Takes an input [[#DeviceHandle]], an u32, a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
The input buffer size must match 0x2A0.&lt;br /&gt;
&lt;br /&gt;
This handles Amiibo crypto etc.&lt;br /&gt;
&lt;br /&gt;
== Common ==&lt;br /&gt;
&lt;br /&gt;
=== Create*Interface ===&lt;br /&gt;
Returns an output interface ([[#IUser]], [[#ISystem]] or [[#IDebug]] depending on the service).&lt;br /&gt;
&lt;br /&gt;
=== Initialize* ===&lt;br /&gt;
Takes a PID, an [[AM_services|AppletResourceUserId]], an u64, a type-0x5 input buffer containing an array of [[#RequiredMcuVersionData]], no output.&lt;br /&gt;
&lt;br /&gt;
sdknso passes value 0 for the u64.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service, this differs depending on the service/cmd however.&lt;br /&gt;
&lt;br /&gt;
=== Finalize* ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Internally this is mostly the same for each service, this differs depending on the service/cmd however.&lt;br /&gt;
&lt;br /&gt;
=== ListDevices ===&lt;br /&gt;
Takes a type-0xA output buffer containing an array of [[#DeviceHandle]], returns an output s32 total_out.&lt;br /&gt;
&lt;br /&gt;
This can return a maximum of 0xA entries.&lt;br /&gt;
&lt;br /&gt;
=== StartDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
This runs the same code as nfc [[#StartDetection]] with [[#NfcProtocol]] = -1.&lt;br /&gt;
&lt;br /&gt;
=== StopDetection ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Mount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input [[#ModelType]] and an input [[#MountTarget]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Unmount ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== OpenApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and an input u32 [[#Access ID]], no output.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x6 output buffer, returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Reads the buffer data in the application area and returns the size read from the application area.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The application area needs to be opened first.&lt;br /&gt;
&lt;br /&gt;
=== SetApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Writes the buffer data in the application area.&lt;br /&gt;
&lt;br /&gt;
The application area needs to be opened first.&lt;br /&gt;
&lt;br /&gt;
=== Flush ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== Restore ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== CreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Creates the application area with the input access ID, and writes the buffer data there.&lt;br /&gt;
&lt;br /&gt;
=== GetTagInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#TagInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetCommonInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#CommonInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetModelInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#ModelInfo]].&lt;br /&gt;
&lt;br /&gt;
=== AttachActivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== AttachDeactivateEvent ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== GetState ===&lt;br /&gt;
Returns an output u32 [[#State]].&lt;br /&gt;
&lt;br /&gt;
=== GetDeviceState ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 [[#DeviceState]].&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
=== GetNpadId ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 NpadId.&lt;br /&gt;
&lt;br /&gt;
=== GetApplicationAreaSize ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u32 size.&lt;br /&gt;
&lt;br /&gt;
Actually returns a hardcoded value of 0xD8.&lt;br /&gt;
&lt;br /&gt;
=== AttachAvailabilityChangeEvent ===&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
sdknso uses EventClearMode=1.&lt;br /&gt;
&lt;br /&gt;
=== RecreateApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], an input u32 [[#Access ID]] and a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
Recreates the application area with the input access ID, and writes the buffer data there.&lt;br /&gt;
&lt;br /&gt;
=== Format ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== GetAdminInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#AdminInfo]].&lt;br /&gt;
&lt;br /&gt;
=== GetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x1A output buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
=== SetRegisterInfoPrivate ===&lt;br /&gt;
Takes an input [[#DeviceHandle]] and a type-0x19 input buffer containing a [[#RegisterInfoPrivate]].&lt;br /&gt;
&lt;br /&gt;
=== DeleteRegisterInfo ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== DeleteApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], no output.&lt;br /&gt;
&lt;br /&gt;
=== ExistsApplicationArea ===&lt;br /&gt;
Takes an input [[#DeviceHandle]], returns an output u8/bool.&lt;br /&gt;
&lt;br /&gt;
= RequiredMcuVersionData =&lt;br /&gt;
In sdknso, the global data containing the array data for this is &amp;quot;nn::nfc::client::RequiredMcuVersionData&amp;quot;. The array entry is 0x20-bytes.&lt;br /&gt;
&lt;br /&gt;
= DeviceHandle =&lt;br /&gt;
This is &amp;quot;nn::nfc::DeviceHandle&amp;quot;. This is a 8-byte struct with 4-byte alignment.&lt;br /&gt;
&lt;br /&gt;
= NfcProtocol =&lt;br /&gt;
This is s32 enum &amp;quot;nn::nfc::NfcProtocol&amp;quot;. Value -1 can be used as a default.&lt;br /&gt;
&lt;br /&gt;
= TestWaveType =&lt;br /&gt;
This is u32 enum &amp;quot;nn::nfc::TestWaveType&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockData =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockData&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
= MifareReadBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareReadBlockParameter&amp;quot;. This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
= MifareWriteBlockParameter =&lt;br /&gt;
This is &amp;quot;nn::nfc::MifareWriteBlockParameter&amp;quot;. This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || NonInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Initialized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= DeviceState =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialized&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Searching for tag&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tag found&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Tag removed&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Tag mounted&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Unavailable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Finalized&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelType =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Amiibo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= MountTarget =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ROM&lt;br /&gt;
|-&lt;br /&gt;
| 2 || RAM&lt;br /&gt;
|-&lt;br /&gt;
| 3 || All&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Date =&lt;br /&gt;
&lt;br /&gt;
This is &amp;quot;nn::nfp::Date&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= TagInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::TagInfo&amp;quot;. This is a 0x58-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0xA || UUID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || UUID length&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x15 || Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || Protocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Tag type&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x30 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfo&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x58 || Mii CharInfo (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x58 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x5C || 0x29 || Amiibo name (NUL-terminated string)&lt;br /&gt;
|-&lt;br /&gt;
| 0x85 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x86 || 0x7A || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CommonInfo =&lt;br /&gt;
This is &amp;quot;&amp;quot;nn::nfp::CommonInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Last write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Write counter&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Version&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || Application area size (hardcoded to be 0xD8, like in [[#GetApplicationAreaSize]])&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x34 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ModelInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::ModelInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Game and character ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Character variant&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Figure type&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || Model number&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Series&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x39 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AdminInfo =&lt;br /&gt;
This is &amp;quot;nn::nfp::AdminInfo&amp;quot;. This is a 0x40-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Program ID (From the Wii U, 3DS or Switch title who created the application area)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || [[#Access ID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x2 || CRC32 change counter&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x1 || Flags (bit0 = amiibo was initialized in console settings, bit1 = has application area, bit2/bit3 unknown)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x1 || Unknown, hardcoded to 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 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)&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x28 || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= RegisterInfoPrivate =&lt;br /&gt;
This is &amp;quot;nn::nfp::RegisterInfoPrivate&amp;quot;. This is a 0x100-byte struct.&lt;br /&gt;
&lt;br /&gt;
This is almost identical to [[#RegisterInfo]], but containing mii data as a StoreData instead of a CharInfo and more reserved bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x44 || Mii StoreData (see mii services)&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x4 || First write date (see [[#Date]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x29 || Amiibo name (NUL-terminated string)&lt;br /&gt;
|-&lt;br /&gt;
| 0x71 || 0x1 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x72 || 0x8E || Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Access ID =&lt;br /&gt;
Access IDs are game-unique u32s used to access the amiibo application area.&lt;br /&gt;
&lt;br /&gt;
For a list of Nintendo 3DS access IDs, see https://www.3dbrew.org/wiki/Amiibo#Games_using_Amiibo_AppData.&lt;br /&gt;
&lt;br /&gt;
== Nintendo Switch titles ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Game || Access ID&lt;br /&gt;
|-&lt;br /&gt;
| Super Smash Bros. Ultimate || 0x34F80200&lt;br /&gt;
|-&lt;br /&gt;
| Splatoon 2 || 0x10162B00&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Breath of the Wild || 0x1019C800&lt;br /&gt;
|-&lt;br /&gt;
| The Legend of Zelda: Link&#039;s Awakening || 0x3B440400&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= RomFS =&lt;br /&gt;
[9.0.0+] The nfc-sysmodule RomFS contains:&lt;br /&gt;
  ST21NFCD_01_05_6811.bin&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the NFC IC inside Switch Lite units.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=NCM_services&amp;diff=11409</id>
		<title>NCM services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=NCM_services&amp;diff=11409"/>
		<updated>2022-01-09T09:42:19Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Some cmd corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NCM contains services for internal file path and content management.&lt;br /&gt;
&lt;br /&gt;
= Location Resolver services =&lt;br /&gt;
== lr ==&lt;br /&gt;
This is &amp;quot;nn::lr::ILocationResolverManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenLocationResolver || [[#StorageId]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenRegisteredLocationResolver || None || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || RefreshLocationResolver || [[#StorageId]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [2.0.0+] OpenAddOnContentLocationResolver || None  ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The only sysmodules which use this service are [[Filesystem_services|FS]], [[Loader_services|Loader]], and [[NS_Services|NS]]. [[boot2]] has access but doesn&#039;t use it.&lt;br /&gt;
&lt;br /&gt;
=== ILocationResolver ===&lt;br /&gt;
This is &amp;quot;nn::lr::ILocationResolver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#ResolveProgramPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RedirectProgramPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#ResolveApplicationControlPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#ResolveApplicationHtmlDocumentPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#ResolveDataPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#RedirectApplicationControlPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#RedirectApplicationHtmlDocumentPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#ResolveApplicationLegalInformationPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#RedirectApplicationLegalInformationPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#Refresh]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [5.0.0+] [[#RedirectApplicationProgramPath]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [5.0.0+] [[#ClearApplicationRedirection]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [5.0.0+] [[#EraseProgramRedirection]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [5.0.0+] [[#EraseApplicationControlRedirection]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [5.0.0+] [[#EraseApplicationHtmlDocumentRedirection]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [5.0.0+] [[#EraseApplicationLegalInformationRedirection]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [7.0.0+] [[#ResolveProgramPathForDebug]] || Unofficial name&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [7.0.0+] [[#RedirectProgramPathForDebug]] || Unofficial name&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [7.0.0+] [[#RedirectApplicationProgramPathForDebug]] || Unofficial name&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [7.0.0+] [[#EraseProgramRedirectionForDebug]] || Unofficial name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the supplied [[#StorageId]] is 1 (Host), a different set of internal functions is used to handle these commands. In this more restricted set of functions, [[#ResolveApplicationControlPath]] is stubbed and only returns error 0x608.&lt;br /&gt;
&lt;br /&gt;
The Get* commands load the [[Filesystem_services#ContentPath|ContentPath]] from linked-lists&#039; [[#Location_List_Entry|entries]] in memory using the input [[#ProgramId]]. When the command fails to find an entry for the specified [[#ProgramId]], 0x408 is returned for [[#ResolveProgramPath]] and 0xA08 is returned for the rest.&lt;br /&gt;
&lt;br /&gt;
The Set* commands always return 0 and add a new entry to the list. If a matching entry is found, it&#039;s removed first.&lt;br /&gt;
&lt;br /&gt;
==== ResolveProgramPath ====&lt;br /&gt;
Takes an [[#ProgramId]] and a C descriptor. Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].&lt;br /&gt;
&lt;br /&gt;
==== RedirectProgramPath ====&lt;br /&gt;
Takes an [[#ProgramId]] and a X descriptor with a [[Filesystem_services#ContentPath|ContentPath]]. Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].&lt;br /&gt;
&lt;br /&gt;
Inserts a new [[#Location_List_Entry|entry]] with &#039;&#039;&#039;flag&#039;&#039;&#039; set to 0.&lt;br /&gt;
&lt;br /&gt;
==== ResolveApplicationControlPath ====&lt;br /&gt;
Takes an [[#ApplicationId]] and a C descriptor. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].&lt;br /&gt;
&lt;br /&gt;
==== ResolveApplicationHtmlDocumentPath====&lt;br /&gt;
Takes an [[#ApplicationId]] and a C descriptor. Used for [[NCA_Content_FS#NCA-type4|NCA-type4]].&lt;br /&gt;
&lt;br /&gt;
==== ResolveDataPath ====&lt;br /&gt;
Takes an [[#DataId]] and a C descriptor. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].&lt;br /&gt;
&lt;br /&gt;
==== RedirectApplicationControlPath ====&lt;br /&gt;
Takes an [[#ApplicationId]] and a X descriptor with a [[Filesystem_services#ContentPath|ContentPath]]. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
Inserts a new [[#Location_List_Entry|entry]] with &#039;&#039;&#039;flag&#039;&#039;&#039; set to 1.&lt;br /&gt;
&lt;br /&gt;
==== RedirectApplicationHtmlDocumentPath ====&lt;br /&gt;
Takes an [[#ApplicationId]] and a X descriptor with a [[Filesystem_services#ContentPath|ContentPath]]. Used for [[NCA_Content_FS#NCA-type4|NCA-type4]].&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
Inserts a new [[#Location_List_Entry|entry]] with &#039;&#039;&#039;flag&#039;&#039;&#039; set to 1.&lt;br /&gt;
&lt;br /&gt;
==== ResolveApplicationLegalInformationPath ====&lt;br /&gt;
Takes an [[#ApplicationId]] and a C descriptor. Used for [[NCA_Content_FS#NCA-type5|NCA-type5]].&lt;br /&gt;
&lt;br /&gt;
==== RedirectApplicationLegalInformationPath ====&lt;br /&gt;
Takes an [[#ApplicationId]] and a X descriptor with a [[Filesystem_services#ContentPath|ContentPath]]. Used for [[NCA_Content_FS#NCA-type5|NCA-type5]].&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
Inserts a new [[#Location_List_Entry|entry]] with &#039;&#039;&#039;flag&#039;&#039;&#039; set to 1.&lt;br /&gt;
&lt;br /&gt;
==== Refresh ====&lt;br /&gt;
Takes no input. Frees all linked-lists&#039; entries that have &#039;&#039;&#039;flag&#039;&#039;&#039; set to 0.&lt;br /&gt;
&lt;br /&gt;
==== RedirectApplicationProgramPath ====&lt;br /&gt;
Same as [[#RedirectProgramPath|RedirectProgramPath]], but inserts a new [[#Location_List_Entry|entry]] with &#039;&#039;&#039;flag&#039;&#039;&#039; set to 1.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
==== ClearApplicationRedirection ====&lt;br /&gt;
Takes no input. Frees all linked-lists&#039; entries that have &#039;&#039;&#039;flag&#039;&#039;&#039; set to 1.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Now takes a type-0x5 input buffer, no output.&lt;br /&gt;
&lt;br /&gt;
==== EraseProgramRedirection ====&lt;br /&gt;
Takes an [[#ProgramnId]]. Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].&lt;br /&gt;
&lt;br /&gt;
Removes the [[#Location_List_Entry|entry]] that matches the input ProgramId.&lt;br /&gt;
&lt;br /&gt;
==== EraseApplicationControlRedirection ====&lt;br /&gt;
Takes an [[#ApplicationId]]. Used for [[NCA_Content_FS#NCA-type3|NCA-type3]].&lt;br /&gt;
&lt;br /&gt;
Removes the [[#Location_List_Entry|entry]] that matches the input ApplicationId.&lt;br /&gt;
&lt;br /&gt;
==== EraseApplicationHtmlDocumentRedirection ====&lt;br /&gt;
Takes an [[#ApplicationId]]. Used for [[NCA_Content_FS#NCA-type4|NCA-type4]].&lt;br /&gt;
&lt;br /&gt;
Removes the [[#Location_List_Entry|entry]] that matches the input ApplicationId.&lt;br /&gt;
&lt;br /&gt;
==== EraseApplicationLegalInformationRedirection ====&lt;br /&gt;
Takes an [[#ApplicationId]]. Used for [[NCA_Content_FS#NCA-type5|NCA-type5]].&lt;br /&gt;
&lt;br /&gt;
Removes the [[#Location_List_Entry|entry]] that matches the input ApplicationId.&lt;br /&gt;
&lt;br /&gt;
==== ResolveProgramPathForDebug ====&lt;br /&gt;
Same as [[#ResolveProgramPath|ResolveProgramPath]], but uses a redirection shim on top of the real program path.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.&lt;br /&gt;
&lt;br /&gt;
==== RedirectProgramPathForDebug ====&lt;br /&gt;
Same as [[#RedirectProgramPath|RedirectProgramPath]], but uses a redirection shim on top of the real program path.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.&lt;br /&gt;
&lt;br /&gt;
==== RedirectApplicationProgramPathForDebug ====&lt;br /&gt;
Same as [[#RedirectApplicationProgramPath |RedirectApplicationProgramPath ]], but uses a redirection shim on top of the real program path.&lt;br /&gt;
&lt;br /&gt;
[9.0.0+] Like [[#RedirectApplicationProgramPath]] this now takes an additional 8-bytes of input.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.&lt;br /&gt;
&lt;br /&gt;
==== EraseProgramRedirectionForDebug ====&lt;br /&gt;
Same as [[#EraseProgramRedirection |EraseProgramRedirection ]], but uses a redirection shim on top of the real program path.&lt;br /&gt;
&lt;br /&gt;
[[NS_Services|NS]] uses this command if [[System_Settings#ns.application|ns.application!redirected_rom_storage_id_for_debug]] is different than 0x00.&lt;br /&gt;
&lt;br /&gt;
=== IRegisteredLocationResolver ===&lt;br /&gt;
This is &amp;quot;nn::lr::IRegisteredLocationResolver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This works like [[#ILocationResolver]], but only two types of NCA paths can be gotten/set. In addition, each type has a fallback path that can be set for a single [[#ProgramId]] at a time.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ResolveProgramPath || [[#ProgramId]] + C descriptor || Used for [[NCA_Content_FS#NCA-type1|NCA-type1]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RegisterProgramPath || [[#ProgramId]] + X descriptor [[Filesystem_services#ContentPath|ContentPath]] [9.0.0+] Now takes an additional 8-bytes of input. || Sets the Type 0 fallback TID and path to the provided arguments.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UnregisterProgramPath || [[#ProgramId]] || If the Type 0 fallback TID is == argument TID, unregisters the fallback path. Otherwise, noop.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || RedirectProgramPath || [[#ProgramId]] + X descriptor [[Filesystem_services#ContentPath|ContentPath]] [9.0.0+] Now takes an additional 8-bytes of input. ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [2.0.0+] ResolveHtmlDocumentPath || [[#ApplicationId]] + C descriptor ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [2.0.0+] RegisterHtmlDocumentPath || [[#ApplicationId]] + X descriptor [[Filesystem_services#ContentPath|ContentPath]] [9.0.0+] Now takes an additional 8-bytes of input. || Sets the Type 1 fallback TID and path to the provided arguments.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [2.0.0+] UnregisterHtmlDocumentPath || [[#ApplicationId]] || If the Type 1 fallback TID is == argument TID, unregisters the fallback path. Otherwise, noop.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [2.0.0+] RedirectHtmlDocumentPath || [[#ApplicationId]] + X descriptor [[Filesystem_services#ContentPath|ContentPath]] [9.0.0+] Now takes an additional 8-bytes of input. ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [7.0.0+] Refresh || No input/output. || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || [9.0.0+] RefreshExcluding || Type-5 buffer || Unofficial name. Refreshes entries excluding those with application ProgramIds contained in the buffer.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IAddOnContentLocationResolver ===&lt;br /&gt;
This is &amp;quot;nn::lr::IAddOnContentLocationResolver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Arguments || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ResolveAddOnContentPath || [[#ApplicationId]] + C descriptor || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || RegisterAddOnContentStorage || [[#StorageId]] + [[#ApplicationId]] [9.0.0+] Now takes an additional [[#ApplicationId]] for the owner application. || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || UnregisterAllAddOnContentPath || None || Clears all registered titles here.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [9.0.0+] [[#RefreshApplicationAddOnContent]] || Type-5 buffer || Unofficial name&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [9.0.0+] [[#UnregisterApplicationAddOnContent]] || [[#ApplicationId]] || Unofficial name&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== RefreshApplicationAddOnContent ====&lt;br /&gt;
Takes an type-5 buffer containing an array of [[#ApplicationId]]. Unregisters entries with IDs absent from the input buffer.&lt;br /&gt;
&lt;br /&gt;
==== UnregisterApplicationAddOnContent====&lt;br /&gt;
Takes an [[#ApplicationId]] for the application to unregister add on content entries for.&lt;br /&gt;
&lt;br /&gt;
=== Location List Entry ===&lt;br /&gt;
Total size is 0x320 bytes. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8|| Pointer to previous entry&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8|| Pointer to next entry&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8|| [[#ProgramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x300 || [[Filesystem_services#ContentPath|ContentPath]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x318 || 0x4 || Flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x31C || 0x4 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Content Manager services =&lt;br /&gt;
== ncm ==&lt;br /&gt;
This is &amp;quot;nn::ncm::IContentManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CreateContentStorage || Takes a [[#StorageId]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CreateContentMetaDatabase || Takes a [[#StorageId]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || VerifyContentStorage || Takes a [[#StorageId]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || VerifyContentMetaDatabase || Takes a [[#StorageId]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || OpenContentStorage || Takes a [[#StorageId]], [2.0.0+] Only returns a storage if one has previously been opened globally via CreateContentStorage.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || OpenContentMetaDatabase || Takes a [[#StorageId]], [2.0.0+] Only returns a storage if one has previously been opened globally via CreateContentStorage.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [1.0.0] CloseContentStorageForcibly || Takes a [[#StorageId]]. Calls IContentStorage-&amp;gt;DisableForcibly().&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [1.0.0] CloseContentMetaDatabaseForcibly || Takes a [[#StorageId]].  Calls IContentMetaDatabase-&amp;gt;DisableForcibly().&lt;br /&gt;
|-&lt;br /&gt;
| 8 || CleanupContentMetaDatabase || Takes a [[#StorageId]], and deletes the associated savedata.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [2.0.0+] ActivateContentStorage || Takes a [[#StorageId]], and opens an IContentStorage for the StorageID to be gotten with GetIContentStorage. Note: Name is not official.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [2.0.0+] InactivateContentStorage || Takes a [[#StorageId]], and closes the associated IContentStorage.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [2.0.0+] ActivateContentMetaDatabase || Takes a [[#StorageId]], and opens an IContentMetaDatabase for the StorageID to be gotten with CreateContentMetaDatabase.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [2.0.0+] InactivateContentMetaDatabase || Takes a [[#StorageId]], and closes the associated IContentMetaDatabase.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [9.0.0+] InvalidateRightsIdCache ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [10.0.0+] GetMemoryReport ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== IContentStorage ===&lt;br /&gt;
This is &amp;quot;nn::ncm::IContentStorage&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GeneratePlaceHolderId]] || Returns a random UUID for the Content Storage.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || CreatePlaceHolder || Takes a [[#ContentId]], a [[#PlaceHolderId]], and a s64 filesize.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || DeletePlaceHolder || Takes a [[#PlaceHolderId]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasPlaceHolder ||  Takes a [[#PlaceHolderId]] and returns an output u8 bool.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || WritePlaceHolder || Takes a [[#PlaceHolderId]], a u64-offset, and type-0x5 input buffer. Writes the buffer to the file for the placeholder path at the specified offset.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Register || Takes a [[#ContentId]] and a [[#PlaceHolderId]], no output. Moves the Placeholder NCA content to the registered NCA path.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Delete || Takes a [[#ContentId]].&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Has || Takes a [[#ContentId]].&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetPath || Takes a [[#ContentId]] and a type-0x1A output buffer containing a [[Filesystem_services#ContentPath|ContentPath]].&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetPlaceHolderPath || Takes a [[#PlaceHolderId]] and a type-0x1A output buffer containing a [[Filesystem_services#ContentPath|ContentPath]].&lt;br /&gt;
|-&lt;br /&gt;
| 10 || CleanupAllPlaceHolder || No input/output. Deletes and re-creates the Placeholder directory.&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ListPlaceHolder || This is like [[#GetNumberOfRegisteredEntries]], but for the Placeholder directory.&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetContentCount]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#ListContentId]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#GetSizeFromContentId]] || &lt;br /&gt;
|-&lt;br /&gt;
| 15 || DisableForcibly || No input/output. Closes/Flushes all resources for the storage, and causes all future IPC commands to the current session to return error 0xC805.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [2.0.0+] RevertToPlaceHolder || Takes two [[#ContentId]] and a [[#PlaceHolderId]], no output. Creates the registered directory NCA path, and renames the placeholder path to the registered NCA path.&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [2.0.0+] SetPlaceHolderSize || Takes a [[#PlaceHolderId]], and a s64 size, no output.&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [2.0.0+] [[#ReadContentIdFile]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [2.0.0+] [[#GetRightsIdFromPlaceHolderId]] || &lt;br /&gt;
|-&lt;br /&gt;
| 20 || [2.0.0+] [[#GetRightsIdFromContentId]] || &lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] WriteContentForDebug || Takes a [[#ContentId]], a u64 offset, and a type-0x5 input buffer. On debug units, writes the buffer to the NCA&#039;s registered path. On retail units, this just aborts.&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] GetFreeSpaceSize || Gets free space for the storage.&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] GetTotalSpaceSize || Gets total space for the storage.&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] FlushPlaceHolder || Flushes resources for the storage without closing it.&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [4.0.0+] GetSizeFromPlaceHolderId || &lt;br /&gt;
|-&lt;br /&gt;
| 26 || [4.0.0+] RepairInvalidFileAttribute || &lt;br /&gt;
|-&lt;br /&gt;
| 27 || [8.0.0+] GetRightsIdFromPlaceHolderIdWithCache || &lt;br /&gt;
|-&lt;br /&gt;
| 28 || [13.0.0+] RegisterPath || &lt;br /&gt;
|-&lt;br /&gt;
| 29 || [13.0.0+] ClearRegisteredPath || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== GeneratePlaceHolderId ====&lt;br /&gt;
Generates a random [[#PlaceHolderId]] for use as a placeholder.&lt;br /&gt;
&lt;br /&gt;
Calls nn::util::GenerateUuid(), which internally calls nn::os::GenerateRandomBytes(16);&lt;br /&gt;
&lt;br /&gt;
==== GetContentCount ====&lt;br /&gt;
Writes the total number of entries which can be read by GetEntries, to cmdreply &amp;lt;SFCO_offset&amp;gt;+0x10.&lt;br /&gt;
&lt;br /&gt;
==== ListContentId====&lt;br /&gt;
Takes an output buffer, s32 offset and gets all entries starting at that offset.&lt;br /&gt;
Returns number of entries read.&lt;br /&gt;
&lt;br /&gt;
Each entry is a [[#ContentId]].&lt;br /&gt;
&lt;br /&gt;
The total read entries is exactly the same as the number of &amp;quot;&amp;lt;hex&amp;gt;.nca&amp;quot; directories in the storage FS(or at least under the &amp;quot;registered&amp;quot; directory?).&lt;br /&gt;
&lt;br /&gt;
==== GetSizeFromContentId ====&lt;br /&gt;
Takes a [[#ContentId]] as input.&lt;br /&gt;
&lt;br /&gt;
Returns the total size readable by [[#ReadContentIdFile]]. This is the same as the size-field in the [[NAX0]] &amp;quot;&amp;lt;ContentId&amp;gt;.nca/00&amp;quot; file.&lt;br /&gt;
&lt;br /&gt;
==== ReadContentIdFile ====&lt;br /&gt;
Takes a type-0x6 output buffer, a [[#ContentId]] as input, and a s64 file offset.&lt;br /&gt;
&lt;br /&gt;
Reads plaintext NCA file contents from the Registered path for the ContentId.&lt;br /&gt;
&lt;br /&gt;
==== GetRightsIdFromPlaceHolderId ====&lt;br /&gt;
Takes a [[#PlaceHolderId]], returns a [[#RightsId]].&lt;br /&gt;
&lt;br /&gt;
Gets the Rights ID for the [[#PlaceHolderId]]&#039;s placeholder path.&lt;br /&gt;
&lt;br /&gt;
==== GetRightsIdFromContentId ====&lt;br /&gt;
Takes a [[#ContentId]], returns a [[#RightsId]].&lt;br /&gt;
&lt;br /&gt;
Gets the Rights ID for the [[#ContentId]]&#039;s registered path&lt;br /&gt;
&lt;br /&gt;
=== IContentMetaDatabase ===&lt;br /&gt;
This is &amp;quot;nn::ncm::IContentMetaDatabase&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Set || Takes a [[#ContentMetaKey]], a type-5 [[CNMT#Content_Records|Content Records]] buffer and a u64 size.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Get || Takes a [[#ContentMetaKey]], a type-6 buffer to write [[CNMT#Content_Records|Content Records]] to and a u64 size. Returns the actual number of bytes read into the buffer. First 8 bytes of the data is header (u16 numExtraDataBytes, numContentRecords, numMetaRecords, padding). After the header is numExtraDataBytes of additional data, after which follow content records and content meta keys. Set takes this same data as input.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Remove || Takes a [[#ContentMetaKey]], and removes the associated record.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetContentIdByType || Takes a [[#ContentMetaKey]] and a u8 [[#ContentType]]. Returns a [[#ContentId]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ListContentInfo || Takes a type-6 buffer to write [[CNMT#Content_Records|Content Record]] entries to, a [[#ContentMetaKey]], and a s32 index into the Content Record entries to start copying from. Returns a s32 entries_read.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || List || Takes a type-6 buffer to write [[#ContentMetaKey]]s to, a u32 [[#ContentMetaType]], a [[#ProgramId]], a u64 ProgramId_Low, and u64 ProgramId_High. Writes into the buffer all Content Meta Keys with low &amp;lt;= record-&amp;gt;title_id &amp;lt;= high, and record-&amp;gt;type == type. Returns s32 numEntriesTotal, numEntriesWritten. Additionally requires record-&amp;gt;title_id == TID, if record-&amp;gt;type is Application, Patch, Add-On, or Delta, otherwise, you can pass 0 for type to ignore the type and list them all in the range.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetLatestContentMetaKey || Takes a [[#ProgramId]], and returns the [[#ContentMetaKey]] with the highest version field for that ProgramId.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#ListApplication]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Has || Takes a [[#ContentMetaKey]] and returns an output u8 bool indicating whether that record is present in the database.&lt;br /&gt;
|-&lt;br /&gt;
| 9 || HasAll || Takes a type-0x5 input buffer containing an array of [[#ContentMetaKey]], and returns whether all of those records are present in the database.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetSize || Takes a [[#ContentMetaKey]], and returns the size of the associated [[CNMT#Content_Records|Content Records]].&lt;br /&gt;
|-&lt;br /&gt;
| 11 || GetRequiredSystemVersion || Takes a [[#ContentMetaKey]], and returns u32 from ContentRecords + 16 (only if the content meta key has type Application or Patch).&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetPatchId || Takes a [[#ContentMetaKey]], and returns the update [[#ProgramId]] for that record.&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DisableForcibly || Closes the meta database, and causes all future IPC commands to the current session to return error 0xDC05.&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#LookupOrphanContent]] || Takes a type-6 byte buffer, and a type-5 buffer of [[#ContentId]]s.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Commit || Flushes the in-memory database to savedata.&lt;br /&gt;
|-&lt;br /&gt;
| 16 || HasContent || Takes a [[#ContentMetaKey]] and an [[#ContentId]]. Returns whether the content records for that content meta key contain the ContentId.&lt;br /&gt;
|-&lt;br /&gt;
| 17 || ListContentMetaInfo || Takes a type-6 [[#ContentMetaKey]] output buffer, a s32 offset into that buffer, and an input [[#ContentMetaKey]].&lt;br /&gt;
|-&lt;br /&gt;
| 18 || GetAttributes || Takes a [[#ContentMetaKey]], and returns u8 from ContentRecords + 6.&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [2.0.0+] GetRequiredApplicationVersion || Does the same thing as GetRequiredSystemVersion, but for AddOnContents.&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [5.0.0+] GetContentIdByTypeAndIdOffset || Takes a [[#ContentMetaKey]], a u8 [[#ContentType]] and a u8 id_offset. Returns a [[#ContentId]].&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [10.0.0+] GetCount || Returns a u32 count.&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [10.0.0+] GetOwnerApplicationId || Takes a [[#ContentMetaKey]]. Returns a [[#ApplicationId]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== ListApplication ====&lt;br /&gt;
Each 24-byte entry (officially &amp;quot;ApplicationContentMetaKey&amp;quot;) is as follows:&lt;br /&gt;
  [[CNMT#Meta_records|meta_record]] meta_record;&lt;br /&gt;
  u64    base_title_id;&lt;br /&gt;
&lt;br /&gt;
This function takes in a type 6 buffer to write entries to, and a u8 &amp;quot;filter&amp;quot; [[#Title_Types|type]]. If filter is zero, all update records will be copied to to the output buffer (space permitting). Otherwise, only titles with type == filter_type will be copied to the output buffer.&lt;br /&gt;
&lt;br /&gt;
This func returns a s32 num_entries_total, and a s32 num_entries_written.&lt;br /&gt;
&lt;br /&gt;
==== ReadEntryMetaRecords ====&lt;br /&gt;
Takes a type-6 [[#ContentMetaKey]] output buffer, a s32 offset into that buffer, and an input [[#ContentMetaKey]] entry. Returns a s32 for total_read_entries.&lt;br /&gt;
&lt;br /&gt;
Reads the content meta keys stored in the entry&#039;s content records into the output buffer.&lt;br /&gt;
&lt;br /&gt;
This is used, for example, with System Update title 0100000000000816, which contains content meta keys for all other systitles in its Content Records.&lt;br /&gt;
&lt;br /&gt;
==== LookupOrphanContent ====&lt;br /&gt;
Takes a type-6 byte buffer, and a type-0x5 buffer containing an array of [[#ContentId]].&lt;br /&gt;
&lt;br /&gt;
This function was stubbed to return 0xDC05 in [[2.0.0]].&lt;br /&gt;
&lt;br /&gt;
On 1.0.0: Initialized the output buffer to all 1s. Then, for each [[#ContentId]] in the input buffer, it checks if that ContentId is present anywhere in the database, and if so writes 0 to the corresponding output byte.&lt;br /&gt;
&lt;br /&gt;
In pseudocode, the function basically does the following:&lt;br /&gt;
&lt;br /&gt;
for i in range(len(out_buf)):&lt;br /&gt;
    out_buf[i] = 1&lt;br /&gt;
&lt;br /&gt;
for i, ContentId in ContentId:&lt;br /&gt;
    if is_present_in_database(ContentId):&lt;br /&gt;
        out_buf[i] = 0&lt;br /&gt;
&lt;br /&gt;
=== ContentId ===&lt;br /&gt;
This is &amp;quot;nn::ncm::ContentId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a 0x10-byte entry. This is originally from the hex portion of &amp;quot;&amp;lt;hex&amp;gt;.nca&amp;quot; directory-names from this storage FS(like [[SD_Filesystem|SD]]).&lt;br /&gt;
&lt;br /&gt;
The ContentId is the same as the first 0x10-bytes from the calculated SHA256 hash, from hashing the entire output from [[#ReadContentIdFile]].&lt;br /&gt;
&lt;br /&gt;
=== PlaceHolderId ===&lt;br /&gt;
This is &amp;quot;nn::ncm::PlaceHolderId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is the same as [[#ContentId]], except this is for placeholder content and originates from [[#GeneratePlaceHolderId]].&lt;br /&gt;
&lt;br /&gt;
== ProgramId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ProgramId&amp;quot; or &amp;quot;nn::ncm::SystemProgramId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to a [[Title_list#System_Modules|program]].&lt;br /&gt;
&lt;br /&gt;
== DataId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::DataId&amp;quot; or &amp;quot;nn::ncm::SystemDataId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to a [[Title_list#System_Data_Archives|data archive]].&lt;br /&gt;
&lt;br /&gt;
== ApplicationId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ApplicationId&amp;quot; or &amp;quot;nn::ncm::SystemApplicationId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to an [[Title_list#System_Applications|application]].&lt;br /&gt;
&lt;br /&gt;
Value 0 is invalid.&lt;br /&gt;
&lt;br /&gt;
== PatchId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::PatchId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to a program patch.&lt;br /&gt;
&lt;br /&gt;
== DeltaId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::DeltaId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to a program delta fragment.&lt;br /&gt;
&lt;br /&gt;
== AddOnContentId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::AddOnContentId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to add-on content data.&lt;br /&gt;
&lt;br /&gt;
== SystemUpdateId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::SystemUpdateId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is an u64 ID bound to system update data.&lt;br /&gt;
&lt;br /&gt;
== StorageId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::StorageId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || None&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Host&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GameCard&lt;br /&gt;
|-&lt;br /&gt;
| 3 || BuiltInSystem&lt;br /&gt;
|-&lt;br /&gt;
| 4 || BuiltInUser&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SdCard&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Any&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;None&amp;quot; and &amp;quot;Any&amp;quot; are meta storages.&lt;br /&gt;
&lt;br /&gt;
nn::ncm::IsInstallableStorage returns true for BuiltInSystem, BuiltInUser, SdCard, and Any.&lt;br /&gt;
&lt;br /&gt;
nn::ncm::IsUniqueStorage returns true for != None &amp;amp;&amp;amp; != Any.&lt;br /&gt;
&lt;br /&gt;
== RightsId ==&lt;br /&gt;
This is &amp;quot;nn::ncm::RightsId&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a 0x10-byte struct. [3.0.0+] This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10 || FS Rights ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [3.0.0+] KeyGeneration&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7 || [3.0.0+] Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProgramLocation ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ProgramLocation&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || [[#ProgramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || [[#StorageId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x7 || Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Path ==&lt;br /&gt;
This is &amp;quot;nn::ncm::Path&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This is a 0x300-byte structure, which contains a [[Filesystem_services#ContentPath|ContentPath]].&lt;br /&gt;
&lt;br /&gt;
== ContentInstallType ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ContentInstallType&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| Full&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| FragmentOnly&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| Unknown (Invalid Content Install Type)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContentMetaType ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ContentMetaType&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| Unknown (Invalid Content Meta Type)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01&lt;br /&gt;
| SystemProgram ([[Title_list#System_Modules|System Modules]] or [[Title_list#System_Applets|System Applets]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x02&lt;br /&gt;
| SystemData ([[Title_list#System_Data_Archives|System Data Archives]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x03&lt;br /&gt;
| SystemUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| BootImagePackage ([[Title_list|Firmware package A or C]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x05&lt;br /&gt;
| BootImagePackageSafe ([[Title_list|Firmware package B or D]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x80&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x81&lt;br /&gt;
| Patch&lt;br /&gt;
|-&lt;br /&gt;
| 0x82&lt;br /&gt;
| AddOnContent&lt;br /&gt;
|-&lt;br /&gt;
| 0x83&lt;br /&gt;
| Delta&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContentType ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ContentType&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Meta&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Program&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Data&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Control&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| HtmlDocument&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| LegalInformation&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| DeltaFragment&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ContentMetaKey ==&lt;br /&gt;
This is &amp;quot;nn::ncm::ContentMetaKey&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 &lt;br /&gt;
| 0x8 &lt;br /&gt;
| [[#ProgramId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 &lt;br /&gt;
| 0x4 &lt;br /&gt;
| Version&lt;br /&gt;
|-&lt;br /&gt;
| 0xC &lt;br /&gt;
| 0x1 &lt;br /&gt;
| [[#ContentMetaType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD &lt;br /&gt;
| 0x1 &lt;br /&gt;
| [[#ContentInstallType]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE &lt;br /&gt;
| 0x2 &lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ncm:v ==&lt;br /&gt;
This service doesn&#039;t normally exist on retail.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10359</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10359"/>
		<updated>2020-12-01T22:44:10Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing nothing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. This is stored as a global value. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || TMA&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART&lt;br /&gt;
|-&lt;br /&gt;
| 4 || UART when sleeping&lt;br /&gt;
|-&lt;br /&gt;
| 0xFFFF || Log to all destinations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the EventLogTransmitter object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* CustomSinkBuffer object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the CustomSinkBuffer object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10352</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10352"/>
		<updated>2020-12-01T18:57:49Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing nothing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. This is stored as a global value. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Log to SD card / HTCS&lt;br /&gt;
|-&lt;br /&gt;
| 2 || (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the EventLogTransmitter object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* LogGetterLogger object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the LogGetterLogger object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10351</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10351"/>
		<updated>2020-12-01T18:56:51Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing nothing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Log to SD card / HTCS&lt;br /&gt;
|-&lt;br /&gt;
| 2 || (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the EventLogTransmitter object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* LogGetterLogger object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the LogGetterLogger object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10350</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10350"/>
		<updated>2020-12-01T18:47:47Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing nothing.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Log to SD card / HTCS&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Disable something (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the EventLogTransmitter object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* LogGetterLogger object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the LogGetterLogger object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10349</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10349"/>
		<updated>2020-12-01T18:47:03Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing anything.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Log to SD card / HTCS&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Disable something (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the EventLogTransmitter object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* LogGetterLogger object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the LogGetterLogger object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10348</id>
		<title>Log services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Log_services&amp;diff=10348"/>
		<updated>2020-12-01T18:45:52Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= lm =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This service is stubbed on retail, with all the commands/interfaces being present but returning success and doing anything.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenLogger]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenLogger ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u64 value representing a process ID and returns an [[#ILogger]] instance.&lt;br /&gt;
&lt;br /&gt;
= lm:get =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogGetter&amp;quot;. This service doesn&#039;t exist on retail.&lt;br /&gt;
&lt;br /&gt;
This service can be used to retrieve log messages (only the TextLog field, see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#StartLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#StopLogging]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetLog]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== StartLogging ==&lt;br /&gt;
Takes no input and no output, and just sets a global flag to true.&lt;br /&gt;
&lt;br /&gt;
== StopLogging ==&lt;br /&gt;
Same as above, but the flag is set to false.&lt;br /&gt;
&lt;br /&gt;
== GetLog ==&lt;br /&gt;
Takes an output type-0x22 buffer, returns two output u64s (read size and packet drop count)&lt;br /&gt;
The flag mentioned above is not checked here, as it is used in a different place (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
= ILogger =&lt;br /&gt;
This is &amp;quot;nn::lm::ILogger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Log]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [3.0.0+] [[#SetDestination]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
&lt;br /&gt;
Takes a type-0x21 input buffer containing the message to log.&lt;br /&gt;
Will always return successfully.&lt;br /&gt;
&lt;br /&gt;
== SetDestination ==&lt;br /&gt;
&lt;br /&gt;
Takes an input u32 mask value indicating the logging destinations to send incoming log messages to. The mask entries are as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Log to SD card / HTCS&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Disable something (?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketHeader =&lt;br /&gt;
This is &amp;quot;nn::lm::detail::LogPacketHeader&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Process ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x8 || Thread ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x1 || [[#LogPacketFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x1 || Padding/reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x1 || [[#LogSeverity]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x1 || Verbosity&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Payload size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogPacketFlags =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Head&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Tail&lt;br /&gt;
|-&lt;br /&gt;
| 4 || LittleEndian&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Binary header =&lt;br /&gt;
Binary log files saved in SD card have this extra header (see [[#Logging]])&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || Magic (&amp;quot;hphp&amp;quot;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Version (1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x3 || Padding/reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogSeverity =&lt;br /&gt;
This is &amp;quot;nn::diag::LogSeverity&amp;quot;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Trace&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Info&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Warn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Error&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Fatal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= LogDataChunkKey =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || LogSessionBegin || Special field sent when a process starts logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LogSessionEnd || Special field sent when a process finishes logging (see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 2 || TextLog || Actual log text.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LineNumber || Line number.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || FileName || File name.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || FunctionName || Function name.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ModuleName || Module name.&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ThreadName || Thread name.&lt;br /&gt;
|-&lt;br /&gt;
| 8 || LogPacketDropCount || Special field containing the amount of packets missed (failed to log/flush, see [[#Logging]])&lt;br /&gt;
|-&lt;br /&gt;
| 9 || UserSystemClock  || Time value.&lt;br /&gt;
|-&lt;br /&gt;
| 10 || ProcessName || Process name.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Data chunks =&lt;br /&gt;
Data chunks (log packet data fields) follow this format:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || Variable (normally 0x1) || [[#LogDataChunkKey]] in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Variable (normally 0x1) || Chunk size in LEB128 format&lt;br /&gt;
|-&lt;br /&gt;
| Variable || Chunk size || Chunk data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Log packet =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x18 || [[#LogPacketHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || Variable || Data chunks&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Logging =&lt;br /&gt;
&lt;br /&gt;
LogManager uses two separate threads: a flushing thread and a htcs thread (main thread is handling both IPC and PM module requests):&lt;br /&gt;
&lt;br /&gt;
* The flushing calls Flush() on the &amp;quot;LogBuffer&amp;quot; object, which is the object responsible for flushing logged data though the other objects, and sends a LogPacketDropCount packet via the &amp;quot;EventLogTransmitter&amp;quot; object (see below) if there any dropped packets and the flushing succeeds - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
* The htcs thread continously reads from the server connection, and will close and reopen the client socket if the connection happened to be lost - this is done in a loop, waiting until the process starts finalization.&lt;br /&gt;
&lt;br /&gt;
Different global objects are used for different purposes:&lt;br /&gt;
&lt;br /&gt;
* SdCardLogging object - saves logs on the SD card, if both &amp;lt;code&amp;gt;lm!sd_card_log_output_directory&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;lm!enable_sd_card_logging&amp;lt;/code&amp;gt; are present and the last one is true:&lt;br /&gt;
** The file name format used is &amp;lt;code&amp;gt;sd:/&amp;lt;log_output_directory&amp;gt;/&amp;lt;serial_no&amp;gt;_&amp;lt;year&amp;gt;&amp;lt;month&amp;gt;&amp;lt;day&amp;gt;&amp;lt;hour&amp;gt;&amp;lt;min&amp;gt;&amp;lt;sec&amp;gt;[_&amp;lt;extra_index&amp;gt;].nxbinlog&amp;lt;/code&amp;gt;, where the extra index is added if the file is already present (several logs being saved at the same time), with a maximum value of 100 (otherwise the saving fails).&lt;br /&gt;
** These binary files contain multiple log packets, always preceded by a binary header (see above).&lt;br /&gt;
** A single file is used for all the log packets, if the SD card gets ejected or something similar happens the code will re-mount it when it&#039;s ready and create a new file.&lt;br /&gt;
&lt;br /&gt;
* LogServerProxy object - sends log data via HTCS (see [[TMA_services]])&lt;br /&gt;
&lt;br /&gt;
* LogGetterLogger object - retains log data which can be later retrieved by [[#lm:get]]:&lt;br /&gt;
** When processes log via [[#lm]] service, some code analyzes the log packet, locates the TextLog ([[#LogDataChunkKey]]) chunk (if present) and saves it&#039;s contents in a global buffer (therefore, only the actual log message gets retained).&lt;br /&gt;
** Log packets are only analyzed/retained after enabling it (by calling [[#StartLogging]]), and the [[#GetLog]] command just reads data from the global buffer.&lt;br /&gt;
** The analyzing code also keeps track of which packets are &amp;quot;missed&amp;quot; (skipped/not properly logged), and that missed packet count can be also retrieved on the [[#GetLog]] command.&lt;br /&gt;
** When the global buffer is full, nothing will get logged until a process reads the logged data, cleaning the buffer.&lt;br /&gt;
&lt;br /&gt;
* EventLogTransmitter object - sends special log packets (event logs):&lt;br /&gt;
** When an [[#ILogger]] gets created, this object will send a packet containing the logger&#039;s process ID and a LogSessionBegin chunk, telling the remote connection that a new process has started logging. Analogously, when the logger gets destroyed, a simple packet with the process ID and a LogSessionEnd chunk gets sent, telling the remote connection that the process has stopped logging.&lt;br /&gt;
** As mentioned above, the flush thread will tell this object to send a simple packet with a LogPacketDropCount chunk after flushing succeeds (and if there any dropped packets).&lt;br /&gt;
** These event log packets are logged via the LogBuffer object, like process logs, but they are not analized by the LogGetterLogger object since they have no text to be saved.&lt;br /&gt;
&lt;br /&gt;
* LogBuffer object - responsible for flushing log packets:&lt;br /&gt;
** It internally calls the SdCardLogging and LogServerProxy objects when flushing, so that log packets get flushed to both SD card (if enabled) and HTCS.&lt;br /&gt;
** It uses a secondary object to flush, alternating between itself and that secondary object when flushing.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=7411</id>
		<title>Profile Selector</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=7411"/>
		<updated>2019-08-15T13:09:18Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the applet presented when launching a game that allows the user to select a user.&lt;br /&gt;
&lt;br /&gt;
See [[AM_services#Library_Applets]]. The profile selector expects a two [[AM_services#IStorage|IStorage]] inputs and a single [[AM_services#IStorage|IStorage]] output.&lt;br /&gt;
&lt;br /&gt;
== UserSelectionConfig ==&lt;br /&gt;
&lt;br /&gt;
This has size 0xA0 and seems to only affect the UI display. Typical value is all zero with byte 0x96 equal to 0x01.&lt;br /&gt;
Setting the first byte to 1 will make the applet display in order to create a new user.&lt;br /&gt;
&amp;quot;starter&amp;quot; sets the first byte to 5 in order to display initial user setup.&lt;br /&gt;
&lt;br /&gt;
== Result == &lt;br /&gt;
This is 0x18-bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Result (0 = Success, 2 = Failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || UUID of selected user&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
User-processes should push a common arguments struct and the typical UserSelectionConfig struct as well. After pushing in the data and calling start, user-processes should wait upon the PopOutDataEvent and then pop a single IStorage to obtain the result structure described above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Library Applets]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Glossary&amp;diff=6238</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Glossary&amp;diff=6238"/>
		<updated>2019-02-17T11:21:58Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== (In Alphabetical Order, Descending) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Acronyms&lt;br /&gt;
!  Full Name&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| [[AM_services|AM]]&lt;br /&gt;
| Applet Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[APM_services|APM]]&lt;br /&gt;
| Applet Profile Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BCAT_services|BCAT]]&lt;br /&gt;
| Background Content Asymmetric synchronized delivery and Transmission&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BCT|BCT]]&lt;br /&gt;
| Boot Configuration Table&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BNVIB|BNVIB]]&lt;br /&gt;
| Binary NX Vibration&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BPC_services|BPC]]&lt;br /&gt;
| Board Power Control Manager&lt;br /&gt;
| This is related to the [[PCV_services#bpc|PCV Services]].&lt;br /&gt;
|-&lt;br /&gt;
| DMA&lt;br /&gt;
| Direct Memory Access&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[EMMC_pinout|EMMC pinout]]&lt;br /&gt;
| Embedded Multi-Media Controller pinout&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Eupld_services|Eupld]]&lt;br /&gt;
| Error upload services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[ExeFS|ExeFS]]&lt;br /&gt;
| Executable File System&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Falcon|Falcon]]&lt;br /&gt;
| A microprocessor used in various Tegra specific engines like TSEC, NVDEC, VIC, etc.&lt;br /&gt;
| See [http://envytools.readthedocs.io/en/latest/hw/falcon/intro.html the manual] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Flog|Flog]]&lt;br /&gt;
| NES Golf, spelled backwards&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| GMMU&lt;br /&gt;
| Graphics Memory Management Unit&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[GRC_services|GRC]]&lt;br /&gt;
| Game Recording services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services|HID]]&lt;br /&gt;
| Human Interface Device services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Homebrew_ABI|Homebrew ABI]]&lt;br /&gt;
| Homebrew Application Binary Interface&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[IMKV|IMKV]]&lt;br /&gt;
| IM Key Value databases found in FS and NCM savedata archives&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[INI1|INI1]]&lt;br /&gt;
| Part of the [[Package2|Package2]] section containing built-in system modules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[IPC_Marshalling|IPC Marshalling]]&lt;br /&gt;
| Inter-Process Communication Marshalling&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Interrupt_request_(PC_architecture) IRQ]&lt;br /&gt;
| Interrupt Request&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Jpegdec_services|Jpegdec]]&lt;br /&gt;
| Refactored sysmodule for handling all JPEG decoding associated with capture services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[LAN_Adapter|LAN Adapter]]&lt;br /&gt;
| Local area network adapter&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[LDN_services|LDN]]&lt;br /&gt;
| Local device network services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Manu_Services|Manu]]&lt;br /&gt;
| Manufacturing Services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NAX0|NAX0]]&lt;br /&gt;
| Nintendo AES XTS file system / file format&lt;br /&gt;
| Long form name is known as the Advanced Encryption Standard XEX-based tweaked-codebook mode with ciphertext stealing file system / file format&lt;br /&gt;
|-&lt;br /&gt;
| [[NCA_Format|NCA]]&lt;br /&gt;
| Nintendo Content Archive&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NSP&lt;br /&gt;
| Nintendo Submission Package&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[NCM_services|NCM]]&lt;br /&gt;
| Nintendo Content Management services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NIM_services|NIM]]&lt;br /&gt;
| Network Install Manager services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NPDM|NPDM]]&lt;br /&gt;
| Nintendo Program Descriptor Metadata&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NRO&lt;br /&gt;
| Nintendo Relocatable Object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NSO|NSO]]&lt;br /&gt;
| Main executable format&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NS_Services|NS]]&lt;br /&gt;
| Nintendo Shell services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NV_services|NV]]&lt;br /&gt;
| Customized NVIDIA driver&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Nvnflinger_services|Nvnflinger]]&lt;br /&gt;
| Responsible for mediating the communication between [[Display_services|vi]] and [[NV_services|nvservices]].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[AM_services#omm|OMM]]&lt;br /&gt;
| Operation Mode Manager, responsible for arbitrating the operation changes between docked and handheld modes&lt;br /&gt;
| See [[AM_services|AM Services]] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[PCIe_services|PCIe]]&lt;br /&gt;
| Peripheral Component Interconnect Express services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[PCV_services|PCV]]&lt;br /&gt;
| Power Control / Voltage services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Package1|PK11]]&lt;br /&gt;
| Encrypted binary stored in [[Package1]].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Package2|PK21]]&lt;br /&gt;
| Contains the Switch kernel and the built-in system modules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PMC&lt;br /&gt;
| Power Management Controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SD_Filesystem|SD File System]]&lt;br /&gt;
| Secure Digital File System&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Secmon&lt;br /&gt;
| Secure Monitor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Secure_RNG_services|Secure RNG]]&lt;br /&gt;
| Also known as the [[SPL_services|SPL Services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Services_API|Services API]]&lt;br /&gt;
| Services application programming interface&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SMC|SMC]]&lt;br /&gt;
| Secure Monitor Calls&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SPL_services|SPL]]&lt;br /&gt;
| Secure Platform Services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|SSL]]&lt;br /&gt;
| Secure Sockets Layer services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|SVC]]&lt;br /&gt;
| Supervisor Call instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[TMA_services|TMA]]&lt;br /&gt;
| Target Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[TSEC|TSEC]]&lt;br /&gt;
| Tegra Security Co-processor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Joy-Con_Firmware|Ukyo]]&lt;br /&gt;
| Internal name for the Joy-Con firmware. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[XCI|XCI]]&lt;br /&gt;
| Nintendo Switch Gamecard Format&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Glossary&amp;diff=6237</id>
		<title>Glossary</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Glossary&amp;diff=6237"/>
		<updated>2019-02-17T11:20:46Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Add NSP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== (In Alphabetical Order, Descending) ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Acronyms&lt;br /&gt;
!  Full Name&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| [[AM_services|AM]]&lt;br /&gt;
| Applet Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[APM_services|APM]]&lt;br /&gt;
| Applet Profile Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BCAT_services|BCAT]]&lt;br /&gt;
| Background Content Asymmetric synchronized delivery and Transmission&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BCT|BCT]]&lt;br /&gt;
| Boot Configuration Table&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BNVIB|BNVIB]]&lt;br /&gt;
| Binary NX Vibration&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[BPC_services|BPC]]&lt;br /&gt;
| Board Power Control Manager&lt;br /&gt;
| This is related to the [[PCV_services#bpc|PCV Services]].&lt;br /&gt;
|-&lt;br /&gt;
| DMA&lt;br /&gt;
| Direct Memory Access&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[EMMC_pinout|EMMC pinout]]&lt;br /&gt;
| Embedded Multi-Media Controller pinout&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Eupld_services|Eupld]]&lt;br /&gt;
| Error upload services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[ExeFS|ExeFS]]&lt;br /&gt;
| Executable File System&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Falcon|Falcon]]&lt;br /&gt;
| A microprocessor used in various Tegra specific engines like TSEC, NVDEC, VIC, etc.&lt;br /&gt;
| See [http://envytools.readthedocs.io/en/latest/hw/falcon/intro.html the manual] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[Flog|Flog]]&lt;br /&gt;
| NES Golf, spelled backwards&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| GMMU&lt;br /&gt;
| Graphics Memory Management Unit&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[GRC_services|GRC]]&lt;br /&gt;
| Game Recording services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[HID_services|HID]]&lt;br /&gt;
| Human Interface Device services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Homebrew_ABI|Homebrew ABI]]&lt;br /&gt;
| Homebrew Application Binary Interface&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[IMKV|IMKV]]&lt;br /&gt;
| IM Key Value databases found in FS and NCM savedata archives&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[INI1|INI1]]&lt;br /&gt;
| Part of the [[Package2|Package2]] section containing built-in system modules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[IPC_Marshalling|IPC Marshalling]]&lt;br /&gt;
| Inter-Process Communication Marshalling&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://en.wikipedia.org/wiki/Interrupt_request_(PC_architecture) IRQ]&lt;br /&gt;
| Interrupt Request&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Jpegdec_services|Jpegdec]]&lt;br /&gt;
| Refactored sysmodule for handling all JPEG decoding associated with capture services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[LAN_Adapter|LAN Adapter]]&lt;br /&gt;
| Local area network adapter&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[LDN_services|LDN]]&lt;br /&gt;
| Local device network services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Manu_Services|Manu]]&lt;br /&gt;
| Manufacturing Services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NAX0|NAX0]]&lt;br /&gt;
| Nintendo AES XTS file system / file format&lt;br /&gt;
| Long form name is known as the Advanced Encryption Standard XEX-based tweaked-codebook mode with ciphertext stealing file system / file format&lt;br /&gt;
|-&lt;br /&gt;
| [[NCA_Format|NCA]]&lt;br /&gt;
| Nintendo Content Archive&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[NSP_Format|NSP]]&lt;br /&gt;
| Nintendo Submission Package&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[NCM_services|NCM]]&lt;br /&gt;
| Nintendo Content Management services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NIM_services|NIM]]&lt;br /&gt;
| Network Install Manager services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NPDM|NPDM]]&lt;br /&gt;
| Nintendo Program Descriptor Metadata&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| NRO&lt;br /&gt;
| Nintendo Relocatable Object&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NSO|NSO]]&lt;br /&gt;
| Main executable format&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NS_Services|NS]]&lt;br /&gt;
| Nintendo Shell services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[NV_services|NV]]&lt;br /&gt;
| Customized NVIDIA driver&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Nvnflinger_services|Nvnflinger]]&lt;br /&gt;
| Responsible for mediating the communication between [[Display_services|vi]] and [[NV_services|nvservices]].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[AM_services#omm|OMM]]&lt;br /&gt;
| Operation Mode Manager, responsible for arbitrating the operation changes between docked and handheld modes&lt;br /&gt;
| See [[AM_services|AM Services]] for more information.&lt;br /&gt;
|-&lt;br /&gt;
| [[PCIe_services|PCIe]]&lt;br /&gt;
| Peripheral Component Interconnect Express services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[PCV_services|PCV]]&lt;br /&gt;
| Power Control / Voltage services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Package1|PK11]]&lt;br /&gt;
| Encrypted binary stored in [[Package1]].&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Package2|PK21]]&lt;br /&gt;
| Contains the Switch kernel and the built-in system modules&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| PMC&lt;br /&gt;
| Power Management Controller&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SD_Filesystem|SD File System]]&lt;br /&gt;
| Secure Digital File System&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Secmon&lt;br /&gt;
| Secure Monitor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Secure_RNG_services|Secure RNG]]&lt;br /&gt;
| Also known as the [[SPL_services|SPL Services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Services_API|Services API]]&lt;br /&gt;
| Services application programming interface&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SMC|SMC]]&lt;br /&gt;
| Secure Monitor Calls&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SPL_services|SPL]]&lt;br /&gt;
| Secure Platform Services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SSL_services|SSL]]&lt;br /&gt;
| Secure Sockets Layer services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[SVC|SVC]]&lt;br /&gt;
| Supervisor Call instruction&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[TMA_services|TMA]]&lt;br /&gt;
| Target Manager&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[TSEC|TSEC]]&lt;br /&gt;
| Tegra Security Co-processor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[Joy-Con_Firmware|Ukyo]]&lt;br /&gt;
| Internal name for the Joy-Con firmware. &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [[XCI|XCI]]&lt;br /&gt;
| Nintendo Switch Gamecard Format&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=6019</id>
		<title>Error applet</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=6019"/>
		<updated>2019-01-10T20:16:59Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: /* Error applet types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The error applet is used to display an error result by several titles and applets. (AppletId 0xE)&lt;br /&gt;
&lt;br /&gt;
Depending on the type, the applet will display the error in several ways.&lt;br /&gt;
&lt;br /&gt;
It takes two input storages: common arguments and a custom storage.&lt;br /&gt;
&lt;br /&gt;
== Error applet types ==&lt;br /&gt;
&lt;br /&gt;
=== Error (common one) ===&lt;br /&gt;
&lt;br /&gt;
Takes a CommonArgs storage with version 0.&lt;br /&gt;
&lt;br /&gt;
==== Custom storage ====&lt;br /&gt;
&lt;br /&gt;
Unknown exact size, using size 20 seems to work fine.&lt;br /&gt;
&lt;br /&gt;
The type (byte 0 of this storage) is 0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Typical Value || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 (u32) || 0 (2000-0000) || Result code, same Result type used everywhere in HOS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The error will display error code 2000-0000 if the Result is not set. The text is the default one.&lt;br /&gt;
&lt;br /&gt;
=== SystemError ===&lt;br /&gt;
&lt;br /&gt;
Takes a CommonArgs storage with version 0.&lt;br /&gt;
&lt;br /&gt;
==== Custom storage ====&lt;br /&gt;
&lt;br /&gt;
SDK uses size 4120 for this storage.&lt;br /&gt;
&lt;br /&gt;
The type (byte 0 of this storage) is 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Typical Value || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 8 (u64) || 0 (0000-0000) || ErrorCode (not Result like in normal errors) of the error to use.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x800 || - || String of the text to be shown as a short description of the error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x818 || 0x800 || - || String of the text to be shown as a more detailed description of the error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the first text is not specified but the second one is, the applet will directly load the &amp;quot;Details&amp;quot; display with the second error text.&lt;br /&gt;
&lt;br /&gt;
If both texts are set, the applet will load the dialog with &amp;quot;Close&amp;quot; and &amp;quot;Details&amp;quot; options, and will load the display mentiones above after selecting &amp;quot;Details&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If no ErrorCode is supplied, the applet will use 0000-0000.&lt;br /&gt;
&lt;br /&gt;
=== ApplicationError ===&lt;br /&gt;
&lt;br /&gt;
Apparently similar to SystemError, has type (byte 0 of the second storage) 258, with almost same offsets.&lt;br /&gt;
&lt;br /&gt;
More info needs to be added about this type.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=6018</id>
		<title>Error applet</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=6018"/>
		<updated>2019-01-10T20:16:02Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Add new information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The error applet is used to display an error result by several titles and applets. (AppletId 0xE)&lt;br /&gt;
&lt;br /&gt;
Depending on the type, the applet will display the error in several ways.&lt;br /&gt;
&lt;br /&gt;
It takes two input storages: common arguments and a custom storage.&lt;br /&gt;
&lt;br /&gt;
== Error applet types ==&lt;br /&gt;
&lt;br /&gt;
=== Error (common one) ===&lt;br /&gt;
&lt;br /&gt;
Takes a CommonArgs storage with version 0.&lt;br /&gt;
&lt;br /&gt;
==== Custom storage ====&lt;br /&gt;
&lt;br /&gt;
Unknown exact size, using size 20 seems to work fine.&lt;br /&gt;
&lt;br /&gt;
The type (byte 0 of this storage) is 0.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Typical Value || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 4 (u32) || 0 (2000-0000) || Result code, same Result used everywhere in HOS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The error will display error code 2000-0000 if the Result is not set. The text is the default one.&lt;br /&gt;
&lt;br /&gt;
=== SystemError ===&lt;br /&gt;
&lt;br /&gt;
Takes a CommonArgs storage with version 0.&lt;br /&gt;
&lt;br /&gt;
==== Custom storage ====&lt;br /&gt;
&lt;br /&gt;
SDK uses size 4120 for this storage.&lt;br /&gt;
&lt;br /&gt;
The type (byte 0 of this storage) is 1.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Typical Value || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 8 (u64) || 0 (0000-0000) || ErrorCode (not Result like in normal errors) of the error to use.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x800 || - || String of the text to be shown as a short description of the error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x818 || 0x800 || - || String of the text to be shown as a more detailed description of the error.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If the first text is not specified but the second one is, the applet will directly load the &amp;quot;Details&amp;quot; display with the second error text.&lt;br /&gt;
&lt;br /&gt;
If both texts are set, the applet will load the dialog with &amp;quot;Close&amp;quot; and &amp;quot;Details&amp;quot; options, and will load the display mentiones above after selecting &amp;quot;Details&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If no ErrorCode is supplied, the applet will use 0000-0000.&lt;br /&gt;
&lt;br /&gt;
=== ApplicationError ===&lt;br /&gt;
&lt;br /&gt;
Apparently similar to SystemError, has type (byte 0 of the second storage) 258, with almost same offsets.&lt;br /&gt;
&lt;br /&gt;
More info needs to be added about this type.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=5965</id>
		<title>Error applet</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Error_applet&amp;diff=5965"/>
		<updated>2019-01-05T23:32:02Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Created page with &amp;quot;The error applet is used to display an error result by several titles and applets. (AppletId 0xE)  A dialog is displayed with the error code at the top, and with support text...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The error applet is used to display an error result by several titles and applets. (AppletId 0xE)&lt;br /&gt;
&lt;br /&gt;
A dialog is displayed with the error code at the top, and with support text plus a support page link in the dialog.&lt;br /&gt;
&lt;br /&gt;
It takes two input storages: common arguments and a custom storage.&lt;br /&gt;
&lt;br /&gt;
== Common arguments ==&lt;br /&gt;
&lt;br /&gt;
Version 0 according to official usage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Error storage ==&lt;br /&gt;
&lt;br /&gt;
Has size 20.&lt;br /&gt;
&lt;br /&gt;
Apparently, the layout is changed by setting different values to the first byte.&lt;br /&gt;
&lt;br /&gt;
The error code is an u32/Result located at offset 16.&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=5964</id>
		<title>Profile Selector</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=5964"/>
		<updated>2019-01-05T21:43:14Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the applet presented when launching a game that allows the user to select a user.&lt;br /&gt;
&lt;br /&gt;
See [[AM_services#Library_Applets]]. The profile selector expects a two [[AM_services#IStorage|IStorage]] inputs and a single [[AM_services#IStorage|IStorage]] output.&lt;br /&gt;
&lt;br /&gt;
== UserSelectionConfig ==&lt;br /&gt;
&lt;br /&gt;
This has size 0xA0 and seems to only affect the UI display. Typical value is all zero with byte 0x96 equal to 0x01.&lt;br /&gt;
Setting the first byte to 1 will make the applet display in order to create a new user.&lt;br /&gt;
&lt;br /&gt;
== Result == &lt;br /&gt;
This is 0x18-bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Result (0 = Success, 2 = Failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || UUID of selected user&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
User-processes should push a common arguments struct and the typical UserSelectionConfig struct as well. After pushing in the data and calling start, user-processes should wait upon the PopOutDataEvent and then pop a single IStorage to obtain the result structure described above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Library Applets]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=5963</id>
		<title>Profile Selector</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Profile_Selector&amp;diff=5963"/>
		<updated>2019-01-05T21:42:45Z</updated>

		<summary type="html">&lt;p&gt;XorTroll: Add a bit of information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the applet presented when launching a game that allows the user to select a user.&lt;br /&gt;
&lt;br /&gt;
See [[AM_services#Library_Applets]]. The profile selector expects a two [[AM_services#IStorage|IStorage]] inputs and a single [[AM_services#IStorage|IStorage]] output.&lt;br /&gt;
&lt;br /&gt;
== UserSelectionConfig ==&lt;br /&gt;
&lt;br /&gt;
This has size 0xA0 and seems to only affect the UI display. Typical value is all zero with byte 0x96 equal to 0x01.&lt;br /&gt;
Setting the first byte to 1 display the applet in order to create a new user.&lt;br /&gt;
&lt;br /&gt;
== Result == &lt;br /&gt;
This is 0x18-bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || Result (0 = Success, 2 = Failure)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || UUID of selected user&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Usage == &lt;br /&gt;
User-processes should push a common arguments struct and the typical UserSelectionConfig struct as well. After pushing in the data and calling start, user-processes should wait upon the PopOutDataEvent and then pop a single IStorage to obtain the result structure described above.&lt;br /&gt;
&lt;br /&gt;
[[Category:Library Applets]]&lt;/div&gt;</summary>
		<author><name>XorTroll</name></author>
	</entry>
</feed>