<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mailwl</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mailwl"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Mailwl"/>
	<updated>2026-04-05T16:06:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=PTM:GetStepHistory&amp;diff=20364</id>
		<title>PTM:GetStepHistory</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=PTM:GetStepHistory&amp;diff=20364"/>
		<updated>2017-09-29T20:00:48Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: Created page with &amp;quot;=Request= {| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot; |- !  Index Word !  Description |- | 0 | Header code [0x000B00C2] |- | 1 | Number of hours |- | 2-3 | DateTime start of (3ds date fro...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x000B00C2]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Number of hours&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| DateTime start of (3ds date from 2000y)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Translated size of output buffer&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| short* buffer for number of hours&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=PTM_Services&amp;diff=20363</id>
		<title>PTM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=PTM_Services&amp;diff=20363"/>
		<updated>2017-09-29T19:41:51Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* User PTM Service &amp;quot;ptm:u&amp;quot; / PTM services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A total of 24 sessions can be open for each of these services combined. The commands for each service are handled by the PTM module main() thread.&lt;br /&gt;
&lt;br /&gt;
=User PTM Service &amp;quot;ptm:u&amp;quot; / PTM services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002&lt;br /&gt;
| RegisterAlarmClient&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| SetRtcAlarm&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetRtcAlarm&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| CancelRtcAlarm&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[PTM:GetAdapterState|GetAdapterState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[PTM:GetShellState|GetShellState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[PTM:GetBatteryLevel|GetBatteryLevel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[PTM:GetBatteryChargeState|GetBatteryChargeState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[PTM:GetPedometerState|GetPedometerState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0042&lt;br /&gt;
| GetStepHistoryEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B00C2&lt;br /&gt;
| [[PTM:GetStepHistory|GetStepHistory]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[PTM:GetTotalStepCount|GetTotalStepCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| SetPedometerRecordingMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetPedometerRecordingMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0084&lt;br /&gt;
| GetStepHistoryAll&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above commands are available for all PTM services, except the SetSystemTime service.&lt;br /&gt;
&lt;br /&gt;
=PlayHistory PTM Service &amp;quot;ptm:play&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070082&lt;br /&gt;
| [[PTM:GetPlayHistory|GetPlayHistory]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| GetPlayHistoryStart&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| GetPlayHistoryLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0080&lt;br /&gt;
| CalcPlayHistoryStart&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=SystemControl PTM Service &amp;quot;ptm:s&amp;quot;=&lt;br /&gt;
Identical to the below &amp;quot;ptm:sysm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=SysMenu PTM Service &amp;quot;ptm:sysm&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C0&lt;br /&gt;
| SetRtcAlarmEx&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020042&lt;br /&gt;
| ReplySleepQuery&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030042&lt;br /&gt;
| NotifySleepPreparationComplete&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040102&lt;br /&gt;
| SetWakeupTrigger&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| GetAwakeReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| RequestSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x040700C0&lt;br /&gt;
|  [[PTM:ShutdownAsync|ShutdownAsync]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| Awake&lt;br /&gt;
|-&lt;br /&gt;
| 0x04090080&lt;br /&gt;
| [[PTMSYSM:LaunchFIRMRebootSystem|RebootAsync]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0000&lt;br /&gt;
| [[PTMSYSM:CheckNew3DS|CheckNew3DS]] (Added with [[8.0.0-18]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010640&lt;br /&gt;
| [[PTMSYSM:SetInfoLEDPattern|SetInfoLEDPattern]] (These 4 LED commands are used for the notification LED, see [[MCU]] regarding boot fail with invalid parameters)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08020040&lt;br /&gt;
| [[PTMSYSM:SetInfoLEDPatternHeader|SetInfoLEDPatternHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030000&lt;br /&gt;
| [[PTMSYSM:GetInfoLEDStatus|GetInfoLEDStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08040040&lt;br /&gt;
| [[PTMSYSM:SetBatteryEmptyLEDPattern|SetBatteryEmptyLEDPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050000&lt;br /&gt;
| ClearStepHistory&lt;br /&gt;
|-&lt;br /&gt;
| 0x080600C2&lt;br /&gt;
| SetStepHistory&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070082&lt;br /&gt;
| [[PTM:GetPlayHistory|GetPlayHistory]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| GetPlayHistoryStart&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| GetPlayHistoryLength&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0000&lt;br /&gt;
| ClearPlayHistory&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0080&lt;br /&gt;
| CalcPlayHistoryStart&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C0080&lt;br /&gt;
| SetUserTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x080D0000&lt;br /&gt;
| InvalidateSystemTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x080E0140&lt;br /&gt;
| [[PTMSYSM:NotifyPlayEvent|NotifyPlayEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080F0000&lt;br /&gt;
| [[PTMSYSM:GetSoftwareClosedFlag|GetSoftwareClosedFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08100000&lt;br /&gt;
| [[PTMSYSM:ClearSoftwareClosedFlag|ClearSoftwareClosedFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08110000&lt;br /&gt;
| GetShellStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x08120000&lt;br /&gt;
| IsShutdownByBatteryEmpty&lt;br /&gt;
|-&lt;br /&gt;
| 0x08130000&lt;br /&gt;
| FormatSavedata&lt;br /&gt;
|-&lt;br /&gt;
| 0x08140000&lt;br /&gt;
| GetLegacyJumpProhibitedFlag&lt;br /&gt;
|- &lt;br /&gt;
| 0x0815...&lt;br /&gt;
| unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x0816....&lt;br /&gt;
| Abstraction for mcu::RTC::GetSystemClock&lt;br /&gt;
|-&lt;br /&gt;
| 0x0817....&lt;br /&gt;
| Abstraction for mcu::RTC::SetSystemClock&lt;br /&gt;
|-&lt;br /&gt;
| 0x08180040&lt;br /&gt;
| [[PTMSYSM:ConfigureNew3DSCPU|ConfigureNew3DSCPU]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=GetSystemTime PTM Service &amp;quot;ptm:gets&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010000&lt;br /&gt;
| GetSystemTime&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=SetSystemTime PTM Service &amp;quot;ptm:sets&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010080&lt;br /&gt;
| SetSystemTime&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=PTM [[System_SaveData]]=&lt;br /&gt;
During system boot PTM attempts to open the PTM savedata, if this fails it will repeatedly keep trying to open the archive. When opening the archive is failing due to savedata corruption, PTM eventually(during system boot) deletes the savedata then creates it again.&lt;br /&gt;
&lt;br /&gt;
Savedata contents:&lt;br /&gt;
* &amp;quot;/Pedometer.dat&amp;quot;&lt;br /&gt;
* &amp;quot;/PlayHistory.dat&amp;quot; Filesize is 0xD5DE8.&lt;br /&gt;
&lt;br /&gt;
==PlayHistory.dat==&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;
| 0x4&lt;br /&gt;
| Start entry index.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total PlayHistory entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0xD5DE0&lt;br /&gt;
| 0x11D28 PlayHistory entries, 0xC-bytes each.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===PlayHistory entry===&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;
| u64 programID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32, probably timestamp.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=DLP_Services&amp;diff=20222</id>
		<title>DLP Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=DLP_Services&amp;diff=20222"/>
		<updated>2017-08-09T11:12:12Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Download Play Client Service &amp;quot;dlp:CLNT&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Download Play services are not used by the Download Play child application at all(the title which runs on the Download Play clients). This is used instead: [[APT:GetWirelessRebootInfo]]. The DLP-child is launched by the dlplay system-application the same way as any other system-application-&amp;gt;system-application launching(besides using [[NSS:SetWirelessRebootInfo]]).&lt;br /&gt;
&lt;br /&gt;
There can only be one session open for each individual DLP service at a time.&lt;br /&gt;
&lt;br /&gt;
=Download Play Client Service &amp;quot;dlp:CLNT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C3&lt;br /&gt;
| ?&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
| Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
| GetEventDesc. Writes 0x18-bytes of output starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
| GetChannel. Writes an output u16 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050180&lt;br /&gt;
| ?&lt;br /&gt;
| StartScan&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ?&lt;br /&gt;
| StopScan&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| ?&lt;br /&gt;
| GetServerInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| ?&lt;br /&gt;
| GetTitleInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| ?&lt;br /&gt;
| GetTitleInfoInOrder&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0080&lt;br /&gt;
| ?&lt;br /&gt;
| DeleteScanInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0100&lt;br /&gt;
| ?&lt;br /&gt;
| PrepareForSystemDownload&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
| StartSystemDownload&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0100&lt;br /&gt;
| ?&lt;br /&gt;
| StartTitleDownload&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| ?&lt;br /&gt;
| GetMyStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0040&lt;br /&gt;
| ?&lt;br /&gt;
| GetConnectingNodes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
| GetNodeInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| ?&lt;br /&gt;
| [[DLP:GetWirelessRebootPassphrase|GetWirelessRebootPassphrase]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| ?&lt;br /&gt;
| StopSession &lt;br /&gt;
|-&lt;br /&gt;
| 0x00130100&lt;br /&gt;
| ?&lt;br /&gt;
| GetCupVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140100&lt;br /&gt;
| ?&lt;br /&gt;
| GetDupAvailability&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Download Play Server Service &amp;quot;dlp:SRVR&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010183&lt;br /&gt;
| &lt;br /&gt;
| [[DLPSRVR:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| GetServerState&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| &lt;br /&gt;
| GetEventDescription&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050080&lt;br /&gt;
| &lt;br /&gt;
| StartAccepting&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| EndAccepting&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| StartDistribution&lt;br /&gt;
|-&lt;br /&gt;
| 0x000800C0&lt;br /&gt;
| &lt;br /&gt;
| [[DLPSRVR:SendWirelessRebootPassphrase|SendWirelessRebootPassphrase]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| AcceptClient&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| DisconnectClient&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| &lt;br /&gt;
| GetConnectingClients&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| &lt;br /&gt;
| GetClientInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| GetClientState&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| &lt;br /&gt;
| IsChild&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0303&lt;br /&gt;
| &lt;br /&gt;
| InitializeWithName&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| &lt;br /&gt;
| GetDupNoticeNeed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Download Play Fake Client Service &amp;quot;dlp:FKCL&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010083&lt;br /&gt;
| ?&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
| Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
| GetEventDesc&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
| GetChannels&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050180&lt;br /&gt;
| ?&lt;br /&gt;
| StartScan&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| ?&lt;br /&gt;
| StopScan&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| ?&lt;br /&gt;
| GetServerInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| ?&lt;br /&gt;
| GetTitleInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| ?&lt;br /&gt;
| GetTitleInfoInOrder&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0080&lt;br /&gt;
| ?&lt;br /&gt;
| DeleteScanInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0100&lt;br /&gt;
| ?&lt;br /&gt;
| StartFakeSession&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
| GetMyStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| ?&lt;br /&gt;
| GetConnectingNodes &lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| ?&lt;br /&gt;
| GetNodeInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[DLP:GetWirelessRebootPassphrase|GetWirelessRebootPassphrase]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| ?&lt;br /&gt;
| Same as dlp:CLNT cmd12 (StopSession).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110203&lt;br /&gt;
| ?&lt;br /&gt;
| Calls the same function as DLPFKCL:Initialize.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=WirelessRebootPassphrase=&lt;br /&gt;
This 9-byte UDS passphrase is sent by the DLP host application to the DLP clients via [[DLPSRVR:SendWirelessRebootPassphrase]]. The dlplay client system-application then loads it via [[DLP:GetWirelessRebootPassphrase]] for [[NSS:SetWirelessRebootInfo|setting]] the NS [[NS_and_APT_Services#WirelessRebootInfo|WirelessRebootInfo]]. Afterwards once launched, the DLP child application can then use [[APT:GetWirelessRebootInfo]] to load that data.&lt;br /&gt;
&lt;br /&gt;
Normally this a randomly-generated ASCII hex string, however it can be arbitrary. These strings are less than 9-bytes for some titles, the unused bytes are cleared to zero. This is the passphrase for the new UDS network which will be used by the clients and host for communicating, once the DLP child titles on those clients launch. This entire 9-byte passphrase is passed directly to the [[NWM_Services|UDS]] network connection/creation commands.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Friend_Services&amp;diff=20180</id>
		<title>Friend Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Friend_Services&amp;diff=20180"/>
		<updated>2017-07-20T07:19:48Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* &amp;quot;frd:a&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= Friend Service &amp;quot;frd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[FRDU:HasLoggedIn|HasLoggedIn]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[FRDU:IsOnline|IsOnline]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030002&lt;br /&gt;
| [[FRDU:Login|Login]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[FRDU:Logout|Logout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[FRDU:GetMyFriendKey|GetMyFriendKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[FRDU:GetMyPreference|GetMyPreference]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[FRDU:GetMyProfile|GetMyProfile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[FRDU:GetMyPresence|GetMyPresence]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[FRDU:GetMyScreenName|GetMyScreenName]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[FRDU:GetMyMii|GetMyMii]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[FRDU:GetMyLocalAccountId|GetMyLocalAccountId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[FRDU:GetMyPlayingGame|GetMyPlayingGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[FRDU:GetMyFavoriteGame|GetMyFavoriteGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[FRDU:GetMyNcPrincipalId|GetMyNcPrincipalId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[FRDU:GetMyComment|GetMyComment]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| [[FRDU:GetMyPassword|GetMyPassword]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| [[FRDU:GetFriendKeyList|GetFriendKeyList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| [[FRDU:GetFriendPresence|GetFriendPresence]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130142&lt;br /&gt;
| [[FRDU:GetFriendScreenName|GetFriendScreenName]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140044&lt;br /&gt;
| [[FRDU:GetFriendMii|GetFriendMii]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[FRDU:GetFriendProfile|GetFriendProfile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160042&lt;br /&gt;
| [[FRDU:GetFriendRelationship|GetFriendRelationship]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170042&lt;br /&gt;
| [[FRDU:GetFriendAttributeFlags|GetFriendAttributeFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180044&lt;br /&gt;
| [[FRDU:GetFriendPlayingGame|GetFriendPlayingGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190042&lt;br /&gt;
| [[FRDU:GetFriendFavoriteGame|GetFriendFavoriteGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A00C4&lt;br /&gt;
| [[FRDU:GetFriendInfo|GetFriendInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0080&lt;br /&gt;
| [[FRDU:IsIncludedInFriendList|IsIncludedInFriendList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0042&lt;br /&gt;
| [[FRDU:UnscrambleLocalFriendCode|UnscrambleLocalFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0002&lt;br /&gt;
| [[FRDU:UpdateGameModeDescription|UpdateGameModeDescription]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E02C2&lt;br /&gt;
| [[FRDU:UpdateGameMode|UpdateGameMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0042&lt;br /&gt;
| [[FRDU:SendInvitation|SendInvitation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[FRDU:AttachToEventNotification|AttachToEventNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210040&lt;br /&gt;
| [[FRDU:SetNotificationMask|SetNotificationMask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| [[FRDU:GetEventNotification|GetEventNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| [[FRDU:GetLastResponseResult|GetLastResponseResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240040&lt;br /&gt;
| [[FRDU:PrincipalIdToFriendCode|PrincipalIdToFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00250080&lt;br /&gt;
| [[FRDU:FriendCodeToPrincipalId|FriendCodeToPrincipalId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260080&lt;br /&gt;
| [[FRDU:IsValidFriendCode|IsValidFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270040&lt;br /&gt;
| [[FRDU:ResultToErrorCode|ResultToErrorCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280244&lt;br /&gt;
| [[FRDU:RequestGameAuthentication|RequestGameAuthentication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290000&lt;br /&gt;
| [[FRDU:GetGameAuthenticationData|GetGameAuthenticationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0204&lt;br /&gt;
| [[FRDU:RequestServiceLocator|RequestServiceLocator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| [[FRDU:GetServiceLocatorData|GetServiceLocatorData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0002&lt;br /&gt;
| [[FRDU:DetectNatProperties|DetectNatProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| [[FRDU:GetNatProperties|GetNatProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0000&lt;br /&gt;
| [[FRDU:GetServerTimeInterval|GetServerTimeInterval]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| [[FRDU:AllowHalfAwake|AllowHalfAwake]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300000&lt;br /&gt;
| [[FRDU:GetServerTypes|GetServerTypes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310082&lt;br /&gt;
| [[FRDU:GetFriendComment|GetFriendComment]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320042&lt;br /&gt;
| [[FRDU:SetClientSdkVersion|SetClientSdkVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| [[FRDU:GetMyApproachContext|GetMyApproachContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340046&lt;br /&gt;
| [[FRDU:AddFriendWithApproach|AddFriendWithApproach]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350082&lt;br /&gt;
| [[FRDU:DecryptApproachContext|DecryptApproachContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;quot;frd:n&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;quot;frd:a&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
This contains a similar (probably the same) command handler from 0x0001.... to 0x002F.... as them in frd:u. In addition, it also contains&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| Used in creating the user Mii. No cmdbuff parameters.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0800&lt;br /&gt;
| Used in creating the user Mii. 128-byte struct as cmdbuff parameters.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=HTTPS Requests=&lt;br /&gt;
&lt;br /&gt;
==Trusted RootCAs==&lt;br /&gt;
No RootCertChain(s) are used. For the nasc site, friends-module uses [[HTTPC:AddDefaultCert]] with the following certIDs: 0x1, 0x2, and 0x3.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Friend_Services&amp;diff=20179</id>
		<title>Friend Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Friend_Services&amp;diff=20179"/>
		<updated>2017-07-20T06:50:04Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* &amp;quot;frd:a&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= Friend Service &amp;quot;frd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[FRDU:HasLoggedIn|HasLoggedIn]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[FRDU:IsOnline|IsOnline]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030002&lt;br /&gt;
| [[FRDU:Login|Login]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[FRDU:Logout|Logout]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[FRDU:GetMyFriendKey|GetMyFriendKey]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[FRDU:GetMyPreference|GetMyPreference]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[FRDU:GetMyProfile|GetMyProfile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[FRDU:GetMyPresence|GetMyPresence]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[FRDU:GetMyScreenName|GetMyScreenName]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[FRDU:GetMyMii|GetMyMii]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[FRDU:GetMyLocalAccountId|GetMyLocalAccountId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[FRDU:GetMyPlayingGame|GetMyPlayingGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[FRDU:GetMyFavoriteGame|GetMyFavoriteGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[FRDU:GetMyNcPrincipalId|GetMyNcPrincipalId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[FRDU:GetMyComment|GetMyComment]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| [[FRDU:GetMyPassword|GetMyPassword]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110080&lt;br /&gt;
| [[FRDU:GetFriendKeyList|GetFriendKeyList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| [[FRDU:GetFriendPresence|GetFriendPresence]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130142&lt;br /&gt;
| [[FRDU:GetFriendScreenName|GetFriendScreenName]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140044&lt;br /&gt;
| [[FRDU:GetFriendMii|GetFriendMii]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| [[FRDU:GetFriendProfile|GetFriendProfile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160042&lt;br /&gt;
| [[FRDU:GetFriendRelationship|GetFriendRelationship]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170042&lt;br /&gt;
| [[FRDU:GetFriendAttributeFlags|GetFriendAttributeFlags]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180044&lt;br /&gt;
| [[FRDU:GetFriendPlayingGame|GetFriendPlayingGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190042&lt;br /&gt;
| [[FRDU:GetFriendFavoriteGame|GetFriendFavoriteGame]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A00C4&lt;br /&gt;
| [[FRDU:GetFriendInfo|GetFriendInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0080&lt;br /&gt;
| [[FRDU:IsIncludedInFriendList|IsIncludedInFriendList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0042&lt;br /&gt;
| [[FRDU:UnscrambleLocalFriendCode|UnscrambleLocalFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0002&lt;br /&gt;
| [[FRDU:UpdateGameModeDescription|UpdateGameModeDescription]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E02C2&lt;br /&gt;
| [[FRDU:UpdateGameMode|UpdateGameMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0042&lt;br /&gt;
| [[FRDU:SendInvitation|SendInvitation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200002&lt;br /&gt;
| [[FRDU:AttachToEventNotification|AttachToEventNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210040&lt;br /&gt;
| [[FRDU:SetNotificationMask|SetNotificationMask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| [[FRDU:GetEventNotification|GetEventNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| [[FRDU:GetLastResponseResult|GetLastResponseResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240040&lt;br /&gt;
| [[FRDU:PrincipalIdToFriendCode|PrincipalIdToFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00250080&lt;br /&gt;
| [[FRDU:FriendCodeToPrincipalId|FriendCodeToPrincipalId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260080&lt;br /&gt;
| [[FRDU:IsValidFriendCode|IsValidFriendCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270040&lt;br /&gt;
| [[FRDU:ResultToErrorCode|ResultToErrorCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280244&lt;br /&gt;
| [[FRDU:RequestGameAuthentication|RequestGameAuthentication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290000&lt;br /&gt;
| [[FRDU:GetGameAuthenticationData|GetGameAuthenticationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0204&lt;br /&gt;
| [[FRDU:RequestServiceLocator|RequestServiceLocator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| [[FRDU:GetServiceLocatorData|GetServiceLocatorData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0002&lt;br /&gt;
| [[FRDU:DetectNatProperties|DetectNatProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| [[FRDU:GetNatProperties|GetNatProperties]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0000&lt;br /&gt;
| [[FRDU:GetServerTimeInterval|GetServerTimeInterval]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| [[FRDU:AllowHalfAwake|AllowHalfAwake]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300000&lt;br /&gt;
| [[FRDU:GetServerTypes|GetServerTypes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310082&lt;br /&gt;
| [[FRDU:GetFriendComment|GetFriendComment]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320042&lt;br /&gt;
| [[FRDU:SetClientSdkVersion|SetClientSdkVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| [[FRDU:GetMyApproachContext|GetMyApproachContext]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340046&lt;br /&gt;
| [[FRDU:AddFriendWithApproach|AddFriendWithApproach]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350082&lt;br /&gt;
| [[FRDU:DecryptApproachContext|DecryptApproachContext]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;quot;frd:n&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= &amp;quot;frd:a&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
This contains a similar (probably the same) command handler from 0x0001.... to 0x0035.... as them in frd:u. In addition, it also contains&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050000&lt;br /&gt;
| Used in creating the user Mii. No cmdbuff parameters.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0800&lt;br /&gt;
| Used in creating the user Mii. 128-byte struct as cmdbuff parameters.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=HTTPS Requests=&lt;br /&gt;
&lt;br /&gt;
==Trusted RootCAs==&lt;br /&gt;
No RootCertChain(s) are used. For the nasc site, friends-module uses [[HTTPC:AddDefaultCert]] with the following certIDs: 0x1, 0x2, and 0x3.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Circle_Pad_Pro&amp;diff=19721</id>
		<title>Circle Pad Pro</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Circle_Pad_Pro&amp;diff=19721"/>
		<updated>2017-02-28T08:10:11Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Read Input */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Also known as CTR-009, it sends the commands to the console through the IR interface on the back of the console.&lt;br /&gt;
&lt;br /&gt;
[http://what-games.golog.jp/archives/1350330.html Pictures of its contents].&lt;br /&gt;
&lt;br /&gt;
== Usage Instructions ==&lt;br /&gt;
&lt;br /&gt;
[[File:Circle pad pro instructions.jpg]]&lt;br /&gt;
&lt;br /&gt;
== IR Protocol ==&lt;br /&gt;
Communications with this device is done via the [[IR_Services|ir:USER]] service, which uses obfuscation implemented in software. The [[IRU:SetBitRate|bitrate-value]] passed to IRUSER is 0x04, hence the actual bps is 96000.&lt;br /&gt;
&lt;br /&gt;
The application sends requests via [[IRUSER:SendIrnop]] and receives response from Circle Pad Pro via [[IRUSER:ReceiveIrnop]] (or read data from the [[IRUSER_Shared_Memory|shared memory]]). The request and response data structures below are payloads in packets.&lt;br /&gt;
&lt;br /&gt;
=== Read Input ===&lt;br /&gt;
&lt;br /&gt;
Request (3 bytes):&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;
| 0x1&lt;br /&gt;
| Request ID (fixed value 1)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Response period in ms&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Response (6 bytes):&lt;br /&gt;
This Response will be sent repeatedly by the specified period.&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;
| 0x1&lt;br /&gt;
| Response ID? Fixed value 0x11 (Really 0x11? Should be 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x3&lt;br /&gt;
| Right circle pad position. &lt;br /&gt;
This three bytes are two little-endian 12-bit fields. The first one is for x-axis and the second one is for y-axis.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| bit[0:4] battery level?&lt;br /&gt;
bit[5] ZL button&lt;br /&gt;
&lt;br /&gt;
bit[6] ZR button&lt;br /&gt;
&lt;br /&gt;
bit[7] R button&lt;br /&gt;
&lt;br /&gt;
Note that for the three button fields, the bit is set when the button is NOT pressed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Read Calibration Data? ===&lt;br /&gt;
&lt;br /&gt;
Request (6 bytes):&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;
| 0x1&lt;br /&gt;
| Request ID (fixed value 2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Expected response time in ms?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data offset? (aligned to 0x10?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data size (aligned to 0x10?)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Response (5 bytes + requested size)&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;
| 0x1&lt;br /&gt;
| Response ID? Fixed value 0x11&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x2&lt;br /&gt;
| Unknown. Same as request+0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Data size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| data size&lt;br /&gt;
| calibration data?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IRUSER_Shared_Memory&amp;diff=19719</id>
		<title>IRUSER Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IRUSER_Shared_Memory&amp;diff=19719"/>
		<updated>2017-02-28T07:54:05Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* ReceiveBufferInfo/SendBufferInfo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the shared-memory for [[IR_Services|&amp;quot;ir:USER&amp;quot;]], which is provided by the application via [[IRUSER:InitializeIrnop|InitializeIrnop]] or [[IRUSER:InitializeIrnopShared|InitializeIrnopShared]]. The size of the shared memory is determined by parameters of the Init functions above.&lt;br /&gt;
&lt;br /&gt;
=Overall Structure=&lt;br /&gt;
&lt;br /&gt;
The shared memory consists of 2 or 5 components, depending on which Init function is called. For InitializeIrnopShared, ir service puts more information to the shared memory and applications can read it directly; for InitializeIrnop, ir service puts less information and store the rest in its local storage. All these components are adjacent to each other, without any padding, which means the data can be unaligned if the size specified in Init is unaligned.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| StatusInfo. Only presents when InitializeIrnopShared is called&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| ReceiveBufferInfo. Only presents when InitializeIrnopShared is called&lt;br /&gt;
|-&lt;br /&gt;
| (specified by Init paramter)&lt;br /&gt;
| ReceiveBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| SendBufferInfo. Only presents when InitializeIrnopShared is called&lt;br /&gt;
|-&lt;br /&gt;
| (specified by Init paramter)&lt;br /&gt;
| SendBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=StatusInfo=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Relative offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Latest receive error result. Read by [[IRUSER:GetLatestReceiveErrorResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Latest Send error result. Read by [[IRUSER:GetLatestSendErrorResult]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Connection status. Read by [[IRUSER:GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x1&lt;br /&gt;
| Trying to connect status. Read by [[IRUSER:GetTryingToConnectStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| Connection role. Read by [[IRUSER:GetConnectionRole]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Machine ID. Set by [[IRUSER:SetOwnMachineId]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown. Value 1 is observed after connection&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0x1&lt;br /&gt;
| Network ID? Seems like a randomly distributed number after connection&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown. Value 1 is observed after initialization&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=ReceiveBufferInfo/SendBufferInfo=&lt;br /&gt;
(Information below is poorly verified against real hardware. Please help me verify them -- [[User:Wwylele|Wwylele]] ([[User talk:Wwylele|talk]]))&lt;br /&gt;
&lt;br /&gt;
The BufferInfo sections store data validity information for the two buffers&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Relative offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read index of valid packets&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| End index of valid packets&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of valid packets&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=ReceiveBuffer/SendBuffer=&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Relative offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8 * packet_count (specified in Init parameter)&lt;br /&gt;
| PacketInfo{u32 offset_to_data_buffer, u32 data_length}&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 * packet_count&lt;br /&gt;
| buffer_size - 0x8 * packet_count&lt;br /&gt;
| Data buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The buffers are two circular buffers. A new packet is added to the end of previous packet in the data buffer, with packet info added to PacketInfo[end_index++]. Note that if an added packet exceeds the end of the buffer, the exceeding data will be wrapped around to the beginning of the data buffer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Packet structure==&lt;br /&gt;
A packet in the data buffer consists of a header, payload and a crc8 checksum&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Relative offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Fixed value 0xA5?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Destination network ID?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| The highest bit is unknown. &lt;br /&gt;
When second highest bit is clear, the rest bit[0:5] of this byte is the payload length; otherwise bit[0:5] is the higher byte of the payload length&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| When bit[6] of previous byte is set, this byte is the lower byte of the payload length; other wise this byte doesn&#039;t present&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 or 0x4&lt;br /&gt;
| payload length&lt;br /&gt;
| payload&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 or 0x4 +payload_length&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[CRC-8-CCITT]] over data above (header + payload)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Services_API&amp;diff=19410</id>
		<title>Talk:Services API</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Services_API&amp;diff=19410"/>
		<updated>2017-01-24T07:46:12Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;s&amp;gt;there is yet another service: MP (&amp;quot;mp:u&amp;quot;), maybe add it to the list?&amp;lt;/s&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Setting_up_Development_Environment&amp;diff=19256</id>
		<title>Talk:Setting up Development Environment</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Setting_up_Development_Environment&amp;diff=19256"/>
		<updated>2017-01-13T05:05:50Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;IDE for windows, i tryed: CodeLite (a little better than Sublime, IMHO)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strike&amp;gt;Should we have instructions for setting up the WSL? --[[User:Thejsa|Thejsa]] ([[User talk:Thejsa|talk]]) 10:39, 5 August 2016 (CEST)&amp;lt;/strike&amp;gt;&lt;br /&gt;
* This is redundant now we have the MSDN link. Added note about not requiring Windows Insider status. --[[User:Thejsa|Thejsa]] ([[User talk:Thejsa|talk]]) 10:45, 5 August 2016 (CEST)&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19252</id>
		<title>ACTU:GetErrorCode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19252"/>
		<updated>2017-01-12T12:43:18Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code [0x00020040]}}&lt;br /&gt;
{{IPC/RequestEntry|u32 input error code}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code}}&lt;br /&gt;
{{IPC/RequestEntry|Result code}}&lt;br /&gt;
{{IPC/RequestEntry|u32 Output value (not Result type)}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19251</id>
		<title>ACTU:GetErrorCode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19251"/>
		<updated>2017-01-12T12:31:10Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code [0x00020040]}}&lt;br /&gt;
{{IPC/RequestEntry|u32 input error code}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code}}&lt;br /&gt;
{{IPC/RequestEntry|Result code}}&lt;br /&gt;
{{IPC/RequestEntry|u32 Output result code}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19250</id>
		<title>ACTU:GetErrorCode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19250"/>
		<updated>2017-01-12T12:30:36Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Request */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code [0x00020040]}}&lt;br /&gt;
{{IPC/RequestEntry|u32 input error code}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code}}&lt;br /&gt;
{{IPC/RequestEntry|Result code}}&lt;br /&gt;
{{IPC/RequestEntry|u32 Output value}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19249</id>
		<title>ACTU:GetErrorCode</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACTU:GetErrorCode&amp;diff=19249"/>
		<updated>2017-01-12T12:26:38Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* ACT:GetErrorCode first commit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code [0x00020040]}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{{IPC/Request}}&lt;br /&gt;
{{#vardefine:ipc_offset|0}}&lt;br /&gt;
{{IPC/RequestEntry|Header code}}&lt;br /&gt;
{{IPC/RequestEntry|Result code}}&lt;br /&gt;
{{IPC/RequestEntry|u32 Output value}}&lt;br /&gt;
{{IPC/RequestEnd}}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACT_Services&amp;diff=19248</id>
		<title>ACT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACT_Services&amp;diff=19248"/>
		<updated>2017-01-12T12:20:41Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* ACT service &amp;quot;act:u&amp;quot; GetErrorCode*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
The ACT module handles NNID accounts.&lt;br /&gt;
&lt;br /&gt;
= ACT service &amp;quot;act:u&amp;quot; =&lt;br /&gt;
These commands are common to both act:u and act:a&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010084&lt;br /&gt;
| &lt;br /&gt;
| [[ACT:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| &lt;br /&gt;
| [[ACT:GetErrorCode|GetErrorCode]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000600C2&lt;br /&gt;
| &lt;br /&gt;
| [[ACTU:GetAccountDataBlock|GetAccountDataBlock]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
|&lt;br /&gt;
| AcquireEulaList&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| GenerateUuid&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ACT service &amp;quot;act:a&amp;quot; =&lt;br /&gt;
These commands are exclusive to act:a&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x041300C2&lt;br /&gt;
| &lt;br /&gt;
| UpdateMiiImage&lt;br /&gt;
|-&lt;br /&gt;
| 0x041B0142&lt;br /&gt;
| &lt;br /&gt;
| AgreeEula&lt;br /&gt;
|-&lt;br /&gt;
| 0x04210042&lt;br /&gt;
| &lt;br /&gt;
| UploadMii&lt;br /&gt;
|-&lt;br /&gt;
| 0x04230082&lt;br /&gt;
| &lt;br /&gt;
| ValidateMailAddress&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is the service used by regular applications.&lt;br /&gt;
&lt;br /&gt;
=HTTPS Requests=&lt;br /&gt;
&lt;br /&gt;
With each request, ACT-sysmodule specifies request-header &amp;quot;X-Nintendo-Device-Model&amp;quot;. This is the only *dedicated* request-header that&#039;s contains anything Old3DS/New3DS specific. This was implemented with [[9.0.0-20|9.0.0-X]], and presumably [[8.1.0-0_New3DS]]. The value is from a string initialized during ACT-sysmodule startup. The value-string is the [[Cfg:GetSystemModel|codename]] string for all 5 of the model values from [[Cfg:GetSystemModel]]. When the output from GetSystemModel is &amp;gt;=5(switch statement default case), it runs this: &amp;quot;len = snprintf(outstr, outmaxsize, &amp;quot;3DS-%u&amp;quot;, model);&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Trusted Root CAs==&lt;br /&gt;
ACT module uses a [[HTTP_Services|RootCertChain]] for all HTTPS requests, the only trusted root CA is [[SSLC:RootCertChainAddDefaultCert|default]] CertID 0x3.&lt;br /&gt;
&lt;br /&gt;
=New3DS=&lt;br /&gt;
Even though ACT-sysmodule uses [[PTM_Services|ptm:s]], it doesn&#039;t use CheckNew3DS at all.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=ACTU:GetAccountDataBlock&amp;diff=19074</id>
		<title>ACTU:GetAccountDataBlock</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=ACTU:GetAccountDataBlock&amp;diff=19074"/>
		<updated>2016-12-30T06:49:43Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* DataBlocks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x000600C2]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Unknown, usually 0xFE?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Size&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| BlkID&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| (Size&amp;lt;&amp;lt;4)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 12&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Output buffer ptr&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This returns NNID account info.&lt;br /&gt;
&lt;br /&gt;
=DataBlocks=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  BlkID&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x11&lt;br /&gt;
| ASCII NUL-terminated Nintendo Network ID&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x3&lt;br /&gt;
| ASCII NUL-terminated Country Name&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Principal ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| 0x1&lt;br /&gt;
| Gender&lt;br /&gt;
|-&lt;br /&gt;
| 0x19&lt;br /&gt;
| 0x8&lt;br /&gt;
| UTC offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x41&lt;br /&gt;
| ASCII Time Zone Location&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 0x2&lt;br /&gt;
| Age&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[Config_Savegame#CountryInfo|CountryInfo]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=19073</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=19073"/>
		<updated>2016-12-29T18:43:00Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* 9.3.0-X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the [[I2C_Registers|NFC]] hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications, for the NFP API.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-X command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| Unknown, &amp;lt;[[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| [[NFCM:SetAmiiboSettings|SetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| None&lt;br /&gt;
| s32 result&lt;br /&gt;
| Among other things, this will eventually call the savedata writing code referenced in the below savedata section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used by the [[amiibo Settings]] applet. This service has the above commands, in addition to the command-set listed below.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
The mint process is the only known eShop-related process using this service([[eShop]]-application and NIM-module don&#039;t use it). Presumably used for NFC card payments in JPN [[eShop]](the v16384 mint title is &#039;&#039;identical&#039;&#039; for USA/JPN besides programIDs in the NCCH header/exheader).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 20 00 01 01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 40 00 03 00 0F 01.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are at least two different revisions of the NFC module. First version was introduced on New3DS only with firmware [[8.1.0-0_New3DS]]. Second version made its appearance with [[9.3.0-21|9.3.0-X]], on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module, before the system titles added with [[9.3.0-21]] which use NFC.&lt;br /&gt;
&lt;br /&gt;
==9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Initialize|Initialize]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Shutdown|Shutdown]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartCommunication|StartCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopCommunication|StopCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartTagScanning|StartTagScanning]]&lt;br /&gt;
| u16 inval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopTagScanning|StopTagScanning]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:LoadAmiiboData|LoadAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ResetTagScanState|ResetTagScanState]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:UpdateStoredAmiiboData|UpdateStoredAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| GetTagInRangeEvent(?)&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 copy handle descriptor, Handle event&lt;br /&gt;
| amiibo applet ignores value &#039;descriptor&#039;. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| GetTagOutOfRangeEvent(?)&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 copy handle descriptor, Handle event&lt;br /&gt;
| amiibo applet also ignores value &#039;descriptor&#039; for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagState|GetTagState]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 outval&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetStatus|CommunicationGetStatus]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo2|GetTagInfo2]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo|GetTagInfo]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetResult|CommunicationGetResult]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:OpenAppData|OpenAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:InitializeWriteAppData|InitializeWriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ReadAppData|ReadAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:WriteAppData|WriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboSettings|GetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboConfig|GetAmiiboConfig]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAppDataInitStruct|GetAppDataInitStruct]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| No additional output.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| 0x36-byte output structure starting at cmdreply[2].&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u32 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| u8 outval at cmdreply[2].&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Pre-9.3.0-X command header&lt;br /&gt;
!  Command header starting with 9.3.0-X&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC services error codes=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xc8a17600&lt;br /&gt;
| The current NFC tag [[NFC:GetTagState|state]], or other NFC state, is invalid with the NFC command which was used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; This contains raw data from the [[Amiibo]] NFC data pages. The filesize is 0x001fbd20-bytes. Certain service cmds will trigger writing to this savedata. This entire file is read during [[amiibo Settings]] startup, it&#039;s unknown what command(s) actually triggers that. It seems the Amiibo data here is updated each time the Amiibo NFC data is updated, and read each time the Amiibo NFC data is read. Data is written into this savedata when the Amiibo was never scanned on this system before. The data here is probably also updated when the scanned Amiibo NFC data doesn&#039;t match the data stored here.&lt;br /&gt;
&lt;br /&gt;
During NFC writing, the NFC data being written can become corrupted if the Amiibo figure is moved outside of range during writing. When this happens, this nfp_backup data can be used to restore a previous version of that data prior to the last failed write.&lt;br /&gt;
&lt;br /&gt;
==nfp_backup.dat structure==&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;
| 0x20&lt;br /&gt;
| Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x800&lt;br /&gt;
| Amiibo data table header&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20&lt;br /&gt;
| 0x21C&lt;br /&gt;
| The NFC data for the first stored Amiibo is located here. This is the entire raw data from all 0x87 NFC data pages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Header structure===&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;
| Unknown, normally the following data? &amp;quot;00 00 02 00 02 00 00 00&amp;quot; (as little-endian u32s: 0x20000, 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| Unknown, normally all-zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Amiibo data table header===&lt;br /&gt;
This is an array with 0x40(?) entries, where the size of each entry is 0x20-bytes. Entry structure:&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;
| First 8-bytes from [[Amiibo]] NFC serial-number.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 little-endian date value for when this Amiibo was initially written into this savedata, with the same format from [[Amiibo|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xF&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module versions=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  System version&lt;br /&gt;
!  New3DS title-version&lt;br /&gt;
!  Old3DS title-version&lt;br /&gt;
!  Changes&lt;br /&gt;
|-&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| v4102&lt;br /&gt;
| v4106&lt;br /&gt;
| New3DS and Old3DS: the only changes regarding new commands is that new commands were added for the nfcu/nfcm command-set and new commands for an unknown cmd-handler were added. It&#039;s unknown if there&#039;s other changes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17600&lt;br /&gt;
| This is returned when the current state is invalid for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17620&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the appdata is uninitialized since [[NFC:InitializeWriteAppData]] wasn&#039;t used previously.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17628&lt;br /&gt;
| This is returned by [[NFC:GetAmiiboSettings]] when the amiibo wasn&#039;t setup by the amiibo Settings applet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17638&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the input AppID doesn&#039;t match the actual Amiibo AppID.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8C1760C&lt;br /&gt;
| Returned for HMAC-hash mismatch(data corruption), with HMAC-calculation input_buffer_size=0x34.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17618&lt;br /&gt;
| HMAC-hash mismatch with input_buffer_size=0x1DF(see [[Amiibo|here]]).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:Services_API&amp;diff=19030</id>
		<title>Talk:Services API</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:Services_API&amp;diff=19030"/>
		<updated>2016-12-27T05:21:43Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: Created page with &amp;quot;there is yet another service: MP (&amp;quot;mp:u&amp;quot;), maybe add it to the list?&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;there is yet another service: MP (&amp;quot;mp:u&amp;quot;), maybe add it to the list?&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=I2C_Services&amp;diff=18986</id>
		<title>I2C Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=I2C_Services&amp;diff=18986"/>
		<updated>2016-12-23T09:08:16Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* I2C Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= I2C Service Names =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Service names&lt;br /&gt;
!  Notes&lt;br /&gt;
!  Accessible [[I2C_Registers|deviceIDs]]&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::MCU&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 0, 3&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::CAM&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 1, 2, 4&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::LCD&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 5, 6&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::DEB&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 7, 8&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::HID&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 9, 10, 11, 12&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::IR&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 13, and additionally for New3DS i2c module: 17&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::EEP&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::NFC&amp;quot;&lt;br /&gt;
| Only available via the New3DS i2c sysmodule.&lt;br /&gt;
| 15&lt;br /&gt;
|-&lt;br /&gt;
| &amp;quot;i2c::QTM&amp;quot;&lt;br /&gt;
| Only available via the New3DS i2c sysmodule.&lt;br /&gt;
| 16&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each I2C service can only access certain I2C [[I2C_Registers|device(s)]]. When the specified deviceid isn&#039;t accessible, error 0xE0A02FEA is returned.&lt;br /&gt;
&lt;br /&gt;
= I2C Service =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010100&lt;br /&gt;
| &lt;br /&gt;
| SetRegisterBits8 (u8 devid, u8 regid, u8 regdata, u8 mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| &lt;br /&gt;
| EnableRegisterBits8 (u8 devid, u8 regid, u8 enablemask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000300C0&lt;br /&gt;
| &lt;br /&gt;
| DisableRegisterBits8 (u8 devid, u8 regid, u8 disablemask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040102&lt;br /&gt;
| &lt;br /&gt;
| MultiSetRegisterBits16 (u16 regid, u16 regdata, u16 mask, devcount, u8* devidlistptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| &lt;br /&gt;
| WriteRegister8 (u8 devid, u8 regid, u8 regdata)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060080&lt;br /&gt;
| &lt;br /&gt;
| WriteCommand8 (u8 devid, u8 cmdid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| &lt;br /&gt;
| WriteRegister16 (u8 devid, u16 regid, u16 regdata)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000800C2&lt;br /&gt;
| &lt;br /&gt;
| MultiWriteRegister16 (u16 regid, u16 regdata, devcount, u8* devidlistptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090080&lt;br /&gt;
| &lt;br /&gt;
| u8 ReadRegister8 (u8 devid, u8 regid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A....&lt;br /&gt;
| &lt;br /&gt;
| u16 ReadRegister16 (u8 devid, u16 regid)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B00C2&lt;br /&gt;
| &lt;br /&gt;
| WriteRegisterBuffer8 (u8 devid, u8 regid, buffersize, (buffersize &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402, u8* bufferptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C00C2&lt;br /&gt;
| &lt;br /&gt;
| WriteRegisterBuffer16 (u8 devid, u16 regid, buffersize, (buffersize &amp;lt;&amp;lt; 15) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402, u16* bufferptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D00C0&lt;br /&gt;
| &lt;br /&gt;
| ReadRegisterBuffer8 (u8 devid, u8 regid, buffersize, +0x180: (buffersize &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2, +0x184: u8 bufferptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E00C2&lt;br /&gt;
| &lt;br /&gt;
| WriteRegisterBuffer8_again? (u8 devid, u8 regid, buffersize, u8* bufferptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C0&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x0010....&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C2&lt;br /&gt;
| &lt;br /&gt;
| WriteRegisterBuffer(u8 devid, u16 regid, buffersize, u8 *buff)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001200C2&lt;br /&gt;
| &lt;br /&gt;
| ReadRegisterBuffer(u8 devid, u16 regid, buffersize, u8 *buff)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ReadDeviceRaw8(u8 devid) Writes the output read u8 I2C data to cmdreply[2]. After successfully selecting the I2C device, it writes 0xE1 to CNT then loads the output u8 I2C data from the DATA register.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140082&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| WriteDeviceRaw(u8 devid, u32 buffersize, (buffersize &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402, bufferptr) This is basically the write-data version of command 0x00150080.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ReadDeviceRaw(u8 devid, u32 buffersize, +0x180: (buffersize &amp;lt;&amp;lt; 14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2, +0x184: bufferptr) This is the &amp;gt;1-byte version of command 0x00130040, except value 0xF0 is used for CNT instead of 0xE1.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands 0x00130040..0x00150080 are only usable with the New3DS i2c module: on Old3DS the actual command-handler function for each of these commands just return an error. Commands 0x00140082 and 0x00150080 are used by [[NFC_Services|NFC]] module.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IRRST:Initialize&amp;diff=18985</id>
		<title>IRRST:Initialize</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IRRST:Initialize&amp;diff=18985"/>
		<updated>2016-12-23T06:20:27Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00020080]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| u32, unknown&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| u8, unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00020040]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IRRST:GetHandles&amp;diff=18984</id>
		<title>IRRST:GetHandles</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IRRST:GetHandles&amp;diff=18984"/>
		<updated>2016-12-23T06:17:29Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Response */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00010000]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x00010043]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0x4000000, translate-header used by ARM11-kernel.&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Output [[IRRST_Shared_Memory|shared-memory]] handle.&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Output event handle.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=18970</id>
		<title>NWM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=18970"/>
		<updated>2016-12-22T06:44:42Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* NWM service &amp;quot;nwm::EXT&amp;quot; update command IDs*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010442&lt;br /&gt;
| &lt;br /&gt;
| Initialize Deprecated. Appears to be handled about the same way as [[NWMUDS:InitializeWithVersion]], except this uses version=0x100 internally instead of loading it from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040402&lt;br /&gt;
| &lt;br /&gt;
| CreateNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
|&lt;br /&gt;
| [[NWMUDS:EjectClient|EjectClient]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:EjectSpectator|EjectSpectator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:UpdateNetworkAttribute|UpdateNetworkAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DestroyNetwork|DestroyNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090442&lt;br /&gt;
| &lt;br /&gt;
| ConnectNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DisconnectNetwork|DisconnectNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetConnectionStatus|GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetNodeInformation|GetNodeInformation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0006&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Identical&#039;&#039; to [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]. Deprecated, only used by old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0404&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SetApplicationData|SetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetApplicationData|GetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120100&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Bind|Bind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Unbind|Unbind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C0&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:PullPacket|PullPacket]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| &lt;br /&gt;
| SetMaxSendDelay(u64 unk) Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170182&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SendTo|SendTo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| (u16 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| (u32 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetChannel|GetChannel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0302&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:InitializeWithVersion|InitializeWithVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0044&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:BeginHostingNetwork|BeginHostingNetwork]] This is a replacement for the original network-creation command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ConnectToNetwork|ConnectToNetwork]] This is a replacement for the original network-connection command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0006&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| Flush (u8 data_frame_index) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210080&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:SetProbeResponseParam|SetProbeResponseParam]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220402&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ScanOnConnection|ScanOnConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PullPacket is used for receiving data over the network and SendTo is for sending data over the network.&lt;br /&gt;
&lt;br /&gt;
=NWM infrastructure service &amp;quot;nwm::INF&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000603C4&lt;br /&gt;
| [[NWMINF:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070742&lt;br /&gt;
| [[NWMINF:ConnectToEncryptedAP|ConnectToEncryptedAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080302&lt;br /&gt;
| [[NWMINF:ConnectToAP|ConnectToAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ?, return event handle in cmdbuf[3]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM socket service &amp;quot;nwm::SOC&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::SAP&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN [[StreetPass]] service &amp;quot;nwm::CEC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060002&lt;br /&gt;
| Unknown, called by CECD module, cmdbuf[2] takes an event handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[NWMCEC:SendProbeRequest|SendProbeRequest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::EXT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| This copies 0x1C-bytes from NWM-module state to the data starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| [[NWMEXT:ControlWirelessEnabled|ControlWirelessEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::TST&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=BeaconDataReply Structure=&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;
| 0x4&lt;br /&gt;
| Max output size, from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total amount of output data written relative to struct+0. 0xC when there&#039;s no entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total entries, 0 for none.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| &amp;lt;Rest of the structure&amp;gt;&lt;br /&gt;
| Beacon entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beacon entry:&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;
| 0x4&lt;br /&gt;
| Size of this entire entry. The next entry starts at curentry_startoffset+curentry_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| AP wifi channel.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| AP MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value 0x1C(size of this header and/or offset to the actual beacon data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Entry_size - 0x1C&lt;br /&gt;
| The actual beacon data is located here, starting at the 802.11 management frame header.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the structure returned by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=ScanInputStruct=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Host MAC address. The 6-bytes located here are normally all 0xFF, for all hosts. Otherwise when not set to broadcast-MAC, the command will only return info for the specified host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 4-12&lt;br /&gt;
| Uninitialized for UDS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the 0x34-byte input structure used by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=Local-WLAN=&lt;br /&gt;
UDS is used for 3DS&amp;lt;&amp;gt;3DS local-WLAN communications, and for 3DS&amp;lt;&amp;gt;Wii U communications. The latter is mainly only used for multi-player in games.&lt;br /&gt;
&lt;br /&gt;
All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for [[StreetPass]] is generated by the CECD module. The input data used with [[Process_Services|EncryptDecryptAes]] with [[PSPXI:EncryptDecryptAes|keytype1]] is a MD5 hash over the input passphrase. This input passphrase is fixed for [[Download Play]], it&#039;s unique per local-WLAN application. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key. This passphrase is a raw input buffer: while the passphrase specified by user-processes is normally a string with the NUL-terminator included, it can be anything(like the [[DLP_Services|WirelessRebootPassphrase]] for example).&lt;br /&gt;
&lt;br /&gt;
The maximum number of nodes(including the host) which can be on an UDS network is 16.&lt;br /&gt;
&lt;br /&gt;
==NodeID==&lt;br /&gt;
There are two types of client connections: regular Client, and Spectator. The latter &#039;&#039;never&#039;&#039; sends &#039;&#039;any&#039;&#039; 802.11 frame at all to the host, hence &#039;&#039;nothing&#039;&#039; actually connected to the network(including the host) can know about any spectators. Once a spectator is &amp;quot;connected&amp;quot; to a network, it can only receive broadcasted data, no sending.&lt;br /&gt;
&lt;br /&gt;
DLP-client connects to the network as a spectator during DLP scanning to get various [[Download_Play|metadata]] including icon data.&lt;br /&gt;
&lt;br /&gt;
===NetworkNodeID===&lt;br /&gt;
This is the network u16 ID for each device on the UDS network. NodeID 0xFFFF is a broadcast alias. 0x1 is for the host, the 0x2 for the first client, 0x3 for the second client, and so on.&lt;br /&gt;
&lt;br /&gt;
The spectator doesn&#039;t have a NetworkNodeID, since it can&#039;t [[NWMUDS:SendTo|send]] any data.&lt;br /&gt;
&lt;br /&gt;
NetworkNodeIDs for clients do not change when any clients disconnect, likewise for the encrypted node-listing stored in the wifi beacons. When a client disconnects, the corresponding NetworkNodeID bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]] is cleared. When a client is connecting, the client is assigned the NetworkNodeID with the lowest corresponding clear-bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]], then that bit is set.&lt;br /&gt;
&lt;br /&gt;
===BindNodeID===&lt;br /&gt;
This u32 is an ID only used on the local device. How many devices are on the network or which device this system is does not affect this ID.&lt;br /&gt;
&lt;br /&gt;
The spectator uses BindNodeID 0x1. DLP uses BindNodeID 0x3 when connecting as an actual client. Hence, it seems BindNodeID bit0 is spectator-related. All normal nodes(host/client) start with BindNodeID 0x2. When connecting to a network again(and probably with network creation) without reinitializing NWMUDS, official user processes increase the used BindNodeID by 0x2.&lt;br /&gt;
&lt;br /&gt;
BindNodeID value 0x0 is invalid. The maximum number of BindNodeIDs which can be open at the same time is 16.&lt;br /&gt;
&lt;br /&gt;
==Application data transfer==&lt;br /&gt;
The protocol used for sending/receiving data over the network with UDS by official applications is [[PRUDP]](in some cases at least). Mario Kart 7 uses PRUDP here. Triforce Heroes uses plaintext for whatever protocol it uses for UDS.&lt;br /&gt;
&lt;br /&gt;
The UDS version of [[PRUDP]] is different from the normal UDP version it appears(no afa1/a1af data for example).&lt;br /&gt;
&lt;br /&gt;
==Data frames==&lt;br /&gt;
Data is transferred over the network using [[NWMUDS:PullPacket]]/[[NWMUDS:SendTo]]. That data is transferred using 802.11 data frames using CCMP encryption. The encrypted data contained in the frame starts with the 0x10-byte LLC header, then the 0xE-byte NWM header, followed by the actual application data from the previously mentioned commands. When [[NWMUDS:SendTo]] was used with dst_NodeID = broadcast, the data frame is sent to the 802.11 broadcast MAC address. Otherwise with a specific NodeID, the data frame is sent to the actual MAC address for that device.&lt;br /&gt;
&lt;br /&gt;
Official application data is normally stored here as big-endian.&lt;br /&gt;
&lt;br /&gt;
==Structure used for generating the CTR for CCMP key generation==&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;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| id8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian.&lt;br /&gt;
&lt;br /&gt;
==CTR used for beacon tags crypto==&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;
| 0x6&lt;br /&gt;
| Host MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding, value zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian. All data here is all-zero except for the MAC address, when the u8 at offset 0x8 in the network-struct is 0.&lt;br /&gt;
&lt;br /&gt;
==Network structure==&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;
| 0x6&lt;br /&gt;
| This is the MAC address of the host. This is used for when [[NWMUDS:ConnectToNetwork|connecting]] to the network.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is actually written as an u16 without byte-swapping. This is the network wifi channel. When connecting this is normally non-zero. When hosting, this can be 0 to automatically select a channel, otherwise the specified channel is used. When non-zero official user-processes require this value to be one of the following when hosting: 1, 6, or 11.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Initialized flag. Must be non-zero otherwise NWM-module will use value 0x0 for most/all(?) fields in this structure when reading these fields.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x3&lt;br /&gt;
| This is the OUI value for use with the beacon tags. Normally this is 001F32.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (21/0x15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID. Local-WLAN communication ID, normally this is: (user_process [[Title_list|uniqueID]] &amp;lt;&amp;lt; 8) | val. Where val is 0x10 on retail([[Configuration_Memory|configmem]] UNITINFO bit0 set), 0x90 for devunit. Official software includes an input bool flag parameter for setting bit0 in this wlancommID, normally that flag isn&#039;t set. For [[Download Play]], this is always 0x2810 on retail(0x2890 on devunit).&lt;br /&gt;
&lt;br /&gt;
This wlancommID can have the side affect of region-locking when the title uses the uniqueID for the current title(hard-coded in .text normally), instead of using a fixed input uniqueID for each region of the title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8. ID, for [[Download Play]] this is 0x55. 0x55/&#039;U&#039; seems to be used for networks where Wii U can host it(Download Play, Smash Bros, ...) - this value isn&#039;t known to be actually checked anywhere however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1&lt;br /&gt;
| Some sort of counter for how many times this network was connected to?&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| This network attributes u16 bitmask can be written via [[NWMUDS:UpdateNetworkAttribute]].&lt;br /&gt;
Bitmasks:&lt;br /&gt;
* 0x1: When set, spectators are not allowed to connect(see [[NWMUDS:EjectSpectator|here]]). Checked by official user-processes before using [[NWMUDS:ConnectToNetwork]], when connecting as a Spectator. Must be clear otherwise that code returns error 0xE10113EA. If the initialized_flag at offset 0x8 is zero, this code handles it the same way as if this bit was set. The latest NWM-module handles checking this bit itself however.&lt;br /&gt;
* 0x2: When set, new regular-clients are not allowed to connect.&lt;br /&gt;
* 0x4: Unknown, has no affect on new clients/spectators connecting. Official software has an option for setting this bit via an input flag from the same code using bitmask 0x2. Official software always clears bitmask 0x6 when unblocking new connections.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, &amp;quot;%08X&amp;quot;, networkID).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Total number of currently connected nodes, including the host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Maximum number of nodes, including the host. This also is the total number of entries stored under the array in the encrypted beacon data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC8&lt;br /&gt;
| Appdata(Application data), if any. Size of the appdata is specified via the u8 at offset 0x3F. This data is not used when the size-field is zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==NodeInfo structure==&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;
| u64 ID, this is the UDS version of the FriendCodeSeed. This is loaded from BlkID 0x00090000 in the [[Config_Savegame|system-config]] via [[CfgS:GetConfigInfoBlk2]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| The first 0x18-bytes from BlkID 0x000A0000 in the [[Config_Savegame|system-config]] loaded via [[CfgS:GetConfigInfoBlk2]] is written here by user-processes. However, the data at +0x14(absolute offset 0x1C) is written by NWM-module later.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16, unknown. Set to 0x0 with the output from [[NWMUDS:DecryptBeaconData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8 flag, unknown. Originates from the u16 bitmask in the beacon node-list header. This flag is normally 0 since that bitmask is normally 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first 0x20-bytes are written by the user-process before using this structure with [[NWMUDS:InitializeWithVersion]]. The data starting at offset 0x8 is only initialized by NWM-module.&lt;br /&gt;
&lt;br /&gt;
== UDS Beacons ==&lt;br /&gt;
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags(tag number 0xDD, see above for the OUI), normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.&lt;br /&gt;
&lt;br /&gt;
A tool for these beacons is available here: [https://github.com/yellows8/ctr-wlanbeacontool]&lt;br /&gt;
&lt;br /&gt;
=== UDS Beacon Tags ===&lt;br /&gt;
The following is the structure of each tag, starting at the OUI. The order of the tags is the same as listed below. All data stored under these tags are stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 20 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (20/0x14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x3&lt;br /&gt;
| Sample data: 0a 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x07.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 21 ====&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;
| 0x1F&lt;br /&gt;
| This is the network structure starting at offset 0xC, with the first 0x1F-bytes from there.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash. When doing the hashing, this hash is cleared to zero. The hash data starts at offset 0x0(OUI), and the size is 0x34 + &amp;lt;value of the u8 at offset 0x33&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata. Normally zero. When non-zero this appdata is located at offset 0x34.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x34, not including appdata.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 24 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (24/0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See below&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the tag0 used with [[NWMUDS:DecryptBeaconData]]. The size of data stored under this tag has a maximum size of 0xFA-bytes, however normally the size is smaller than that. Additional encrypted data, if any, is stored under the below tag1.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 25 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (25/0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See above&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this exists in the beacon, this is the tag1 used with [[NWMUDS:DecryptBeaconData]]. The data stored here is the 0xFA-bytes following the previous encrypted data in tag0, for more space for storing the encrypted data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Encrypted beacon data ====&lt;br /&gt;
The following structure is for the plaintext version of the encrypted data, stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
This data is encrypted with AES-CTR, by NWM module in software. The AES key is stored in NWM module itself. See above for the CTR. The size of this encrypted data is 0x12 + (0x1E*val), where val is the u8 from networkstruct offset 0x1D.&lt;br /&gt;
&lt;br /&gt;
===== Structure =====&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;
| 0x10&lt;br /&gt;
| MD5 over the rest of the data following this(plaintext).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 bitmask. Unknown, normally 0? Bit0 is for entry0, bit1 for entry1, and so on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1E * &amp;lt;total array entries&amp;gt;&lt;br /&gt;
| This is an array of entries for each of the devices on this network, the first entry is for the host and the rest is for the client(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Array entry =====&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;
| 0x1C&lt;br /&gt;
| This is the first 0x1C-bytes of the NodeInfo structure, stored as big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID, stored as big-endian.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry is for a node.&lt;br /&gt;
&lt;br /&gt;
= Mapped IO =&lt;br /&gt;
&#039;&#039;All&#039;&#039; of the [[IO_Registers|IO]] mapped under the NWM-module process is listed below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Userland address&lt;br /&gt;
!  Physical address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC22000&lt;br /&gt;
| 0x10122000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[WIFI_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC40000&lt;br /&gt;
| 0x10140000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[PDN_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE22000&lt;br /&gt;
| 0x10322000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A06C0D&lt;br /&gt;
| The operation being performed is already done (e.g., if you run NWMEXT_ControlWirelessEnabled to turn wifi on when it&#039;s on already, you can&#039;t turn it on again).&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A113EA&lt;br /&gt;
| Returned when the command isn&#039;t allowed to be used on this device.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC90113FA&lt;br /&gt;
| Node doesn&#039;t exist / invalid NetworkNodeID?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC92113FB&lt;br /&gt;
| Returned when trying to connect to a host when the host has the specified connection-type blocked via the network attributes. There might be other causes too.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113E9&lt;br /&gt;
| Returned when the input size is invalid. Returned by [[NWMUDS:PullPacket]] when the input size is smaller than the frame_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113EA&lt;br /&gt;
| Invalid bind / data_channel is invalid(0x0).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=18969</id>
		<title>NWM Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NWM_Services&amp;diff=18969"/>
		<updated>2016-12-22T06:36:27Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* NWM infrastructure service &amp;quot;nwm::INF&amp;quot;, add command IDS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
These NWM services are used for local-WLAN communications, NWM module handles regular wifi APs as well. These services are used for creating/connecting to networks, and for sending/receiving data over the network etc. NWM module uses the wifi SDIO hardware via the IO registers for this.&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN service &amp;quot;nwm::UDS&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010442&lt;br /&gt;
| &lt;br /&gt;
| Initialize Deprecated. Appears to be handled about the same way as [[NWMUDS:InitializeWithVersion]], except this uses version=0x100 internally instead of loading it from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| &lt;br /&gt;
| Scrap Not used by sub-wars. This sets a state value to 0x2 then signals an event. This is probably some sort of shutdown command since this state write will result in all UDS commands returning an error if used afterwards.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040402&lt;br /&gt;
| &lt;br /&gt;
| CreateNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
|&lt;br /&gt;
| [[NWMUDS:EjectClient|EjectClient]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:EjectSpectator|EjectSpectator]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:UpdateNetworkAttribute|UpdateNetworkAttribute]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DestroyNetwork|DestroyNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090442&lt;br /&gt;
| &lt;br /&gt;
| ConnectNetwork Deprecated. Only used by very old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:DisconnectNetwork|DisconnectNetwork]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetConnectionStatus|GetConnectionStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| This writes two output u8 values to cmdreply[2] +0/+1. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetNodeInformation|GetNodeInformation]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0006&lt;br /&gt;
| &lt;br /&gt;
| &#039;&#039;Identical&#039;&#039; to [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]. Deprecated, only used by old titles.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0404&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SetApplicationData|SetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetApplicationData|GetApplicationData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120100&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Bind|Bind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:Unbind|Unbind]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001400C0&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:PullPacket|PullPacket]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150080&lt;br /&gt;
| &lt;br /&gt;
| SetMaxSendDelay(u64 unk) Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170182&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:SendTo|SendTo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| (u16 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| (u32 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:GetChannel|GetChannel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0302&lt;br /&gt;
| &lt;br /&gt;
| [[NWMUDS:InitializeWithVersion|InitializeWithVersion]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| &lt;br /&gt;
| (u8 inputval) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0044&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:BeginHostingNetwork|BeginHostingNetwork]] This is a replacement for the original network-creation command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ConnectToNetwork|ConnectToNetwork]] This is a replacement for the original network-connection command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0006&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:DecryptBeaconData|DecryptBeaconData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| Flush (u8 data_frame_index) Unknown. Not used by sub-wars.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210080&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:SetProbeResponseParam|SetProbeResponseParam]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220402&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| [[NWMUDS:ScanOnConnection|ScanOnConnection]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| Unknown, &amp;gt;[[2.0.0-2]]&lt;br /&gt;
| This writes an output u16 value to cmdreply[2]. Unknown. Not used by sub-wars.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
PullPacket is used for receiving data over the network and SendTo is for sending data over the network.&lt;br /&gt;
&lt;br /&gt;
=NWM infrastructure service &amp;quot;nwm::INF&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000603C4&lt;br /&gt;
| [[NWMINF:RecvBeaconBroadcastData|RecvBeaconBroadcastData]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070742&lt;br /&gt;
| [[NWMINF:ConnectToEncryptedAP|ConnectToEncryptedAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080302&lt;br /&gt;
| [[NWMINF:ConnectToAP|ConnectToAP]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| ?, return event handle in cmdbuf[3]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM socket service &amp;quot;nwm::SOC&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::SAP&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=NWM local-WLAN [[StreetPass]] service &amp;quot;nwm::CEC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060002&lt;br /&gt;
| Unknown, called by CECD module, cmdbuf[2] takes an event handle.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[NWMCEC:SendProbeRequest|SendProbeRequest]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::EXT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| This copies 0x1C-bytes from NWM-module state to the data starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| [[NWMEXT:ControlWirelessEnabled|ControlWirelessEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009....&lt;br /&gt;
| &amp;lt;=[[2.0.0-2]]&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NWM service &amp;quot;nwm::TST&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
=BeaconDataReply Structure=&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;
| 0x4&lt;br /&gt;
| Max output size, from the command request.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total amount of output data written relative to struct+0. 0xC when there&#039;s no entries.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total entries, 0 for none.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| &amp;lt;Rest of the structure&amp;gt;&lt;br /&gt;
| Beacon entries.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Beacon entry:&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;
| 0x4&lt;br /&gt;
| Size of this entire entry. The next entry starts at curentry_startoffset+curentry_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 0x1&lt;br /&gt;
| AP wifi channel.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| AP MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x6&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Value 0x1C(size of this header and/or offset to the actual beacon data).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| Entry_size - 0x1C&lt;br /&gt;
| The actual beacon data is located here, starting at the 802.11 management frame header.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the structure returned by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=ScanInputStruct=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Two unknown u16s.&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| Host MAC address. The 6-bytes located here are normally all 0xFF, for all hosts. Otherwise when not set to broadcast-MAC, the command will only return info for the specified host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 4-12&lt;br /&gt;
| Uninitialized for UDS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This section describes the 0x34-byte input structure used by [[NWMINF:RecvBeaconBroadcastData]] and [[NWMUDS:RecvBeaconBroadcastData]].&lt;br /&gt;
&lt;br /&gt;
=Local-WLAN=&lt;br /&gt;
UDS is used for 3DS&amp;lt;&amp;gt;3DS local-WLAN communications, and for 3DS&amp;lt;&amp;gt;Wii U communications. The latter is mainly only used for multi-player in games.&lt;br /&gt;
&lt;br /&gt;
All UDS local-WLAN communications have the CCMP key for data encryption generated via NWM module. The CCMP key passed to nwm::CEC commands(stored in a 0x44-byte input structure) for [[StreetPass]] is generated by the CECD module. The input data used with [[Process_Services|EncryptDecryptAes]] with [[PSPXI:EncryptDecryptAes|keytype1]] is a MD5 hash over the input passphrase. This input passphrase is fixed for [[Download Play]], it&#039;s unique per local-WLAN application. The CTR is a MD5 hash over the below 0x10-byte structure. The output from encrypting that data with AES-CTR is the final CCMP key. This passphrase is a raw input buffer: while the passphrase specified by user-processes is normally a string with the NUL-terminator included, it can be anything(like the [[DLP_Services|WirelessRebootPassphrase]] for example).&lt;br /&gt;
&lt;br /&gt;
The maximum number of nodes(including the host) which can be on an UDS network is 16.&lt;br /&gt;
&lt;br /&gt;
==NodeID==&lt;br /&gt;
There are two types of client connections: regular Client, and Spectator. The latter &#039;&#039;never&#039;&#039; sends &#039;&#039;any&#039;&#039; 802.11 frame at all to the host, hence &#039;&#039;nothing&#039;&#039; actually connected to the network(including the host) can know about any spectators. Once a spectator is &amp;quot;connected&amp;quot; to a network, it can only receive broadcasted data, no sending.&lt;br /&gt;
&lt;br /&gt;
DLP-client connects to the network as a spectator during DLP scanning to get various [[Download_Play|metadata]] including icon data.&lt;br /&gt;
&lt;br /&gt;
===NetworkNodeID===&lt;br /&gt;
This is the network u16 ID for each device on the UDS network. NodeID 0xFFFF is a broadcast alias. 0x1 is for the host, the 0x2 for the first client, 0x3 for the second client, and so on.&lt;br /&gt;
&lt;br /&gt;
The spectator doesn&#039;t have a NetworkNodeID, since it can&#039;t [[NWMUDS:SendTo|send]] any data.&lt;br /&gt;
&lt;br /&gt;
NetworkNodeIDs for clients do not change when any clients disconnect, likewise for the encrypted node-listing stored in the wifi beacons. When a client disconnects, the corresponding NetworkNodeID bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]] is cleared. When a client is connecting, the client is assigned the NetworkNodeID with the lowest corresponding clear-bit in the [[NWMUDS:GetConnectionStatus|node_bitmask]], then that bit is set.&lt;br /&gt;
&lt;br /&gt;
===BindNodeID===&lt;br /&gt;
This u32 is an ID only used on the local device. How many devices are on the network or which device this system is does not affect this ID.&lt;br /&gt;
&lt;br /&gt;
The spectator uses BindNodeID 0x1. DLP uses BindNodeID 0x3 when connecting as an actual client. Hence, it seems BindNodeID bit0 is spectator-related. All normal nodes(host/client) start with BindNodeID 0x2. When connecting to a network again(and probably with network creation) without reinitializing NWMUDS, official user processes increase the used BindNodeID by 0x2.&lt;br /&gt;
&lt;br /&gt;
BindNodeID value 0x0 is invalid. The maximum number of BindNodeIDs which can be open at the same time is 16.&lt;br /&gt;
&lt;br /&gt;
==Application data transfer==&lt;br /&gt;
The protocol used for sending/receiving data over the network with UDS by official applications is [[PRUDP]](in some cases at least). Mario Kart 7 uses PRUDP here. Triforce Heroes uses plaintext for whatever protocol it uses for UDS.&lt;br /&gt;
&lt;br /&gt;
The UDS version of [[PRUDP]] is different from the normal UDP version it appears(no afa1/a1af data for example).&lt;br /&gt;
&lt;br /&gt;
==Data frames==&lt;br /&gt;
Data is transferred over the network using [[NWMUDS:PullPacket]]/[[NWMUDS:SendTo]]. That data is transferred using 802.11 data frames using CCMP encryption. The encrypted data contained in the frame starts with the 0x10-byte LLC header, then the 0xE-byte NWM header, followed by the actual application data from the previously mentioned commands. When [[NWMUDS:SendTo]] was used with dst_NodeID = broadcast, the data frame is sent to the 802.11 broadcast MAC address. Otherwise with a specific NodeID, the data frame is sent to the actual MAC address for that device.&lt;br /&gt;
&lt;br /&gt;
Official application data is normally stored here as big-endian.&lt;br /&gt;
&lt;br /&gt;
==Structure used for generating the CTR for CCMP key generation==&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;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x6&lt;br /&gt;
| Host MAC address.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE&lt;br /&gt;
| 0x2&lt;br /&gt;
| id8&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian.&lt;br /&gt;
&lt;br /&gt;
==CTR used for beacon tags crypto==&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;
| 0x6&lt;br /&gt;
| Host MAC address&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID&lt;br /&gt;
|-&lt;br /&gt;
| 0xA&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding, value zero.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| networkID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This data is stored as little-endian. All data here is all-zero except for the MAC address, when the u8 at offset 0x8 in the network-struct is 0.&lt;br /&gt;
&lt;br /&gt;
==Network structure==&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;
| 0x6&lt;br /&gt;
| This is the MAC address of the host. This is used for when [[NWMUDS:ConnectToNetwork|connecting]] to the network.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x1&lt;br /&gt;
| This is actually written as an u16 without byte-swapping. This is the network wifi channel. When connecting this is normally non-zero. When hosting, this can be 0 to automatically select a channel, otherwise the specified channel is used. When non-zero official user-processes require this value to be one of the following when hosting: 1, 6, or 11.&lt;br /&gt;
|-&lt;br /&gt;
| 0x7&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Initialized flag. Must be non-zero otherwise NWM-module will use value 0x0 for most/all(?) fields in this structure when reading these fields.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x3&lt;br /&gt;
| This is the OUI value for use with the beacon tags. Normally this is 001F32.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (21/0x15)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| wlancommID. Local-WLAN communication ID, normally this is: (user_process [[Title_list|uniqueID]] &amp;lt;&amp;lt; 8) | val. Where val is 0x10 on retail([[Configuration_Memory|configmem]] UNITINFO bit0 set), 0x90 for devunit. Official software includes an input bool flag parameter for setting bit0 in this wlancommID, normally that flag isn&#039;t set. For [[Download Play]], this is always 0x2810 on retail(0x2890 on devunit).&lt;br /&gt;
&lt;br /&gt;
This wlancommID can have the side affect of region-locking when the title uses the uniqueID for the current title(hard-coded in .text normally), instead of using a fixed input uniqueID for each region of the title.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x1&lt;br /&gt;
| id8. ID, for [[Download Play]] this is 0x55. 0x55/&#039;U&#039; seems to be used for networks where Wii U can host it(Download Play, Smash Bros, ...) - this value isn&#039;t known to be actually checked anywhere however.&lt;br /&gt;
|-&lt;br /&gt;
| 0x15&lt;br /&gt;
| 0x1&lt;br /&gt;
| Some sort of counter for how many times this network was connected to?&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x2&lt;br /&gt;
| This network attributes u16 bitmask can be written via [[NWMUDS:UpdateNetworkAttribute]].&lt;br /&gt;
Bitmasks:&lt;br /&gt;
* 0x1: When set, spectators are not allowed to connect(see [[NWMUDS:EjectSpectator|here]]). Checked by official user-processes before using [[NWMUDS:ConnectToNetwork]], when connecting as a Spectator. Must be clear otherwise that code returns error 0xE10113EA. If the initialized_flag at offset 0x8 is zero, this code handles it the same way as if this bit was set. The latest NWM-module handles checking this bit itself however.&lt;br /&gt;
* 0x2: When set, new regular-clients are not allowed to connect.&lt;br /&gt;
* 0x4: Unknown, has no affect on new clients/spectators connecting. Official software has an option for setting this bit via an input flag from the same code using bitmask 0x2. Official software always clears bitmask 0x6 when unblocking new connections.&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| u32 networkID, randomly-generated when creating the network. The network SSID used when a client connects to the network is sprintf(out, &amp;quot;%08X&amp;quot;, networkID).&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x1&lt;br /&gt;
| Total number of currently connected nodes, including the host.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D&lt;br /&gt;
| 0x1&lt;br /&gt;
| Maximum number of nodes, including the host. This also is the total number of entries stored under the array in the encrypted beacon data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata.&lt;br /&gt;
|-&lt;br /&gt;
| 0x40&lt;br /&gt;
| 0xC8&lt;br /&gt;
| Appdata(Application data), if any. Size of the appdata is specified via the u8 at offset 0x3F. This data is not used when the size-field is zero.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This 0x108-byte structure is used for [[NWMUDS:BeginHostingNetwork]], [[NWMUDS:ConnectToNetwork]], etc. This data is stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==NodeInfo structure==&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;
| u64 ID, this is the UDS version of the FriendCodeSeed. This is loaded from BlkID 0x00090000 in the [[Config_Savegame|system-config]] via [[CfgS:GetConfigInfoBlk2]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| The first 0x18-bytes from BlkID 0x000A0000 in the [[Config_Savegame|system-config]] loaded via [[CfgS:GetConfigInfoBlk2]] is written here by user-processes. However, the data at +0x14(absolute offset 0x1C) is written by NWM-module later.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16, unknown. Set to 0x0 with the output from [[NWMUDS:DecryptBeaconData]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E&lt;br /&gt;
| 0x1&lt;br /&gt;
| u8 flag, unknown. Originates from the u16 bitmask in the beacon node-list header. This flag is normally 0 since that bitmask is normally 0?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x1&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID&lt;br /&gt;
|-&lt;br /&gt;
| 0x22&lt;br /&gt;
| 0x6&lt;br /&gt;
| Normally zero?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The first 0x20-bytes are written by the user-process before using this structure with [[NWMUDS:InitializeWithVersion]]. The data starting at offset 0x8 is only initialized by NWM-module.&lt;br /&gt;
&lt;br /&gt;
== UDS Beacons ==&lt;br /&gt;
The UDS host broadcasts a beacon containing at least two Nintendo-vendor tags(tag number 0xDD, see above for the OUI), normally the data stored in these tags are static. The second tag contains the big-endian u32 networkID, used by the clients when connecting to the host and for the above CCMP key generation. The Nintendo-vendor tag(s) following the first two are unique to the process using UDS, these tags are used for broadcasting metadata regarding the host.&lt;br /&gt;
&lt;br /&gt;
A tool for these beacons is available here: [https://github.com/yellows8/ctr-wlanbeacontool]&lt;br /&gt;
&lt;br /&gt;
=== UDS Beacon Tags ===&lt;br /&gt;
The following is the structure of each tag, starting at the OUI. The order of the tags is the same as listed below. All data stored under these tags are stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 20 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (20/0x14)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x3&lt;br /&gt;
| Sample data: 0a 00 00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x07.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 21 ====&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;
| 0x1F&lt;br /&gt;
| This is the network structure starting at offset 0xC, with the first 0x1F-bytes from there.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F&lt;br /&gt;
| 0x14&lt;br /&gt;
| SHA1 hash. When doing the hashing, this hash is cleared to zero. The hash data starts at offset 0x0(OUI), and the size is 0x34 + &amp;lt;value of the u8 at offset 0x33&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| 0x33&lt;br /&gt;
| 0x1&lt;br /&gt;
| Size of appdata. Normally zero. When non-zero this appdata is located at offset 0x34.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Normally the size of this tag(from the tag size field) is 0x34, not including appdata.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 24 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (24/0x18)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See below&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the tag0 used with [[NWMUDS:DecryptBeaconData]]. The size of data stored under this tag has a maximum size of 0xFA-bytes, however normally the size is smaller than that. Additional encrypted data, if any, is stored under the below tag1.&lt;br /&gt;
&lt;br /&gt;
==== OUI Type 25 ====&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;
| 0x3&lt;br /&gt;
| OUI, see above.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| OUI type (25/0x19)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| See above&lt;br /&gt;
| Encrypted data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
When this exists in the beacon, this is the tag1 used with [[NWMUDS:DecryptBeaconData]]. The data stored here is the 0xFA-bytes following the previous encrypted data in tag0, for more space for storing the encrypted data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Encrypted beacon data ====&lt;br /&gt;
The following structure is for the plaintext version of the encrypted data, stored as big-endian.&lt;br /&gt;
&lt;br /&gt;
This data is encrypted with AES-CTR, by NWM module in software. The AES key is stored in NWM module itself. See above for the CTR. The size of this encrypted data is 0x12 + (0x1E*val), where val is the u8 from networkstruct offset 0x1D.&lt;br /&gt;
&lt;br /&gt;
===== Structure =====&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;
| 0x10&lt;br /&gt;
| MD5 over the rest of the data following this(plaintext).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 bitmask. Unknown, normally 0? Bit0 is for entry0, bit1 for entry1, and so on.&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1E * &amp;lt;total array entries&amp;gt;&lt;br /&gt;
| This is an array of entries for each of the devices on this network, the first entry is for the host and the rest is for the client(s).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Array entry =====&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;
| 0x1C&lt;br /&gt;
| This is the first 0x1C-bytes of the NodeInfo structure, stored as big-endian.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 NetworkNodeID, stored as big-endian.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each entry is for a node.&lt;br /&gt;
&lt;br /&gt;
= Mapped IO =&lt;br /&gt;
&#039;&#039;All&#039;&#039; of the [[IO_Registers|IO]] mapped under the NWM-module process is listed below:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Userland address&lt;br /&gt;
!  Physical address&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC22000&lt;br /&gt;
| 0x10122000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[WIFI_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EC40000&lt;br /&gt;
| 0x10140000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| [[PDN_Registers]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1EE22000&lt;br /&gt;
| 0x10322000&lt;br /&gt;
| 0x1000&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A06C0D&lt;br /&gt;
| The operation being performed is already done (e.g., if you run NWMEXT_ControlWirelessEnabled to turn wifi on when it&#039;s on already, you can&#039;t turn it on again).&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A113EA&lt;br /&gt;
| Returned when the command isn&#039;t allowed to be used on this device.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC90113FA&lt;br /&gt;
| Node doesn&#039;t exist / invalid NetworkNodeID?&lt;br /&gt;
|-&lt;br /&gt;
| 0xC92113FB&lt;br /&gt;
| Returned when trying to connect to a host when the host has the specified connection-type blocked via the network attributes. There might be other causes too.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113E9&lt;br /&gt;
| Returned when the input size is invalid. Returned by [[NWMUDS:PullPacket]] when the input size is smaller than the frame_size.&lt;br /&gt;
|-&lt;br /&gt;
| 0xE10113EA&lt;br /&gt;
| Invalid bind / data_channel is invalid(0x0).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=18913</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=18913"/>
		<updated>2016-12-16T05:24:57Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* 9.3.0-X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the [[I2C_Registers|NFC]] hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications, for the NFP API.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-X command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| Unknown, &amp;lt;[[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| [[NFCM:SetAmiiboSettings|SetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| None&lt;br /&gt;
| s32 result&lt;br /&gt;
| Among other things, this will eventually call the savedata writing code referenced in the below savedata section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used by the [[amiibo Settings]] applet. This service has the above commands, in addition to the command-set listed below.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
The mint process is the only known eShop-related process using this service([[eShop]]-application and NIM-module don&#039;t use it). Presumably used for NFC card payments in JPN [[eShop]](the v16384 mint title is &#039;&#039;identical&#039;&#039; for USA/JPN besides programIDs in the NCCH header/exheader).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 20 00 01 01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 40 00 03 00 0F 01.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are at least two different revisions of the NFC module. First version was introduced on New3DS only with firmware [[8.1.0-0_New3DS]]. Second version made its appearance with [[9.3.0-21|9.3.0-X]], on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module, before the system titles added with [[9.3.0-21]] which use NFC.&lt;br /&gt;
&lt;br /&gt;
==9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Initialize|Initialize]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Shutdown|Shutdown]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartCommunication|StartCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopCommunication|StopCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartTagScanning|StartTagScanning]]&lt;br /&gt;
| u16 inval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopTagScanning|StopTagScanning]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:LoadAmiiboData|LoadAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ResetTagScanState|ResetTagScanState]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:UpdateStoredAmiiboData|UpdateStoredAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 copy handle descriptor, Handle event&lt;br /&gt;
| amiibo applet ignores value &#039;descriptor&#039;. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 copy handle descriptor, Handle event&lt;br /&gt;
| amiibo applet also ignores value &#039;descriptor&#039; for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagState|GetTagState]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 outval&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetStatus|CommunicationGetStatus]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo2|GetTagInfo2]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo|GetTagInfo]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetResult|CommunicationGetResult]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:OpenAppData|OpenAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:InitializeWriteAppData|InitializeWriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ReadAppData|ReadAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:WriteAppData|WriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboSettings|GetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboConfig|GetAmiiboConfig]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAppDataInitStruct|GetAppDataInitStruct]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| No additional output.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| 0x36-byte output structure starting at cmdreply[2].&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u32 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| u8 outval at cmdreply[2].&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Pre-9.3.0-X command header&lt;br /&gt;
!  Command header starting with 9.3.0-X&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC services error codes=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xc8a17600&lt;br /&gt;
| The current NFC tag [[NFC:GetTagState|state]], or other NFC state, is invalid with the NFC command which was used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; This contains raw data from the [[Amiibo]] NFC data pages. The filesize is 0x001fbd20-bytes. Certain service cmds will trigger writing to this savedata. This entire file is read during [[amiibo Settings]] startup, it&#039;s unknown what command(s) actually triggers that. It seems the Amiibo data here is updated each time the Amiibo NFC data is updated, and read each time the Amiibo NFC data is read. Data is written into this savedata when the Amiibo was never scanned on this system before. The data here is probably also updated when the scanned Amiibo NFC data doesn&#039;t match the data stored here.&lt;br /&gt;
&lt;br /&gt;
During NFC writing, the NFC data being written can become corrupted if the Amiibo figure is moved outside of range during writing. When this happens, this nfp_backup data can be used to restore a previous version of that data prior to the last failed write.&lt;br /&gt;
&lt;br /&gt;
==nfp_backup.dat structure==&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;
| 0x20&lt;br /&gt;
| Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x800&lt;br /&gt;
| Amiibo data table header&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20&lt;br /&gt;
| 0x21C&lt;br /&gt;
| The NFC data for the first stored Amiibo is located here. This is the entire raw data from all 0x87 NFC data pages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Header structure===&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;
| Unknown, normally the following data? &amp;quot;00 00 02 00 02 00 00 00&amp;quot; (as little-endian u32s: 0x20000, 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| Unknown, normally all-zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Amiibo data table header===&lt;br /&gt;
This is an array with 0x40(?) entries, where the size of each entry is 0x20-bytes. Entry structure:&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;
| First 8-bytes from [[Amiibo]] NFC serial-number.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 little-endian date value for when this Amiibo was initially written into this savedata, with the same format from [[Amiibo|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xF&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module versions=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  System version&lt;br /&gt;
!  New3DS title-version&lt;br /&gt;
!  Old3DS title-version&lt;br /&gt;
!  Changes&lt;br /&gt;
|-&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| v4102&lt;br /&gt;
| v4106&lt;br /&gt;
| New3DS and Old3DS: the only changes regarding new commands is that new commands were added for the nfcu/nfcm command-set and new commands for an unknown cmd-handler were added. It&#039;s unknown if there&#039;s other changes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17600&lt;br /&gt;
| This is returned when the current state is invalid for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17620&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the appdata is uninitialized since [[NFC:InitializeWriteAppData]] wasn&#039;t used previously.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17628&lt;br /&gt;
| This is returned by [[NFC:GetAmiiboSettings]] when the amiibo wasn&#039;t setup by the amiibo Settings applet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17638&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the input AppID doesn&#039;t match the actual Amiibo AppID.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8C1760C&lt;br /&gt;
| Returned for HMAC-hash mismatch(data corruption), with HMAC-calculation input_buffer_size=0x34.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17618&lt;br /&gt;
| HMAC-hash mismatch with input_buffer_size=0x1DF(see [[Amiibo|here]]).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=18911</id>
		<title>NFC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NFC_Services&amp;diff=18911"/>
		<updated>2016-12-15T18:50:57Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* 9.3.0-X */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The New3DS NFC module was added with [[8.1.0-0_New3DS]]. The Old3DS NFC module was added with [[9.3.0-21|9.3.0-X]].&lt;br /&gt;
&lt;br /&gt;
On New3DS NFC module uses the [[I2C_Registers|NFC]] hardware via the [[I2C_Services|i2c::NFC]] and [[GPIO_Services|gpio:NFC]] services. On Old3DS NFC module communicates with a NFC peripheral via IR with the IRUSER service.&lt;br /&gt;
&lt;br /&gt;
A total of 6 sessions can be open simultaneously for all of these services combined.&lt;br /&gt;
&lt;br /&gt;
=NFC services=&lt;br /&gt;
==NFC user service &amp;quot;nfc:u&amp;quot;==&lt;br /&gt;
This is the NFC service used by regular applications, for the NFP API.&lt;br /&gt;
&lt;br /&gt;
This was first seen in the Super Smash Bros eShop demo (only in the exheader, the demo doesn&#039;t actually use it), but at that time no system-module was available for NFC on CDN. The first regular application to use this service was Super Smash Bros, with the v1.0.5 game-update, which used the new 9.3.0-X command set.&lt;br /&gt;
&lt;br /&gt;
==NFC management service &amp;quot;nfc:m&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C2&lt;br /&gt;
| Unknown, &amp;lt;[[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| u32 unknownA, u32 unknownB, u32 unknownC, u32 (sizeof(*buffer) &amp;lt;&amp;lt; 14 &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), void * buffer&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[16]&lt;br /&gt;
| Output seems to be a struct&lt;br /&gt;
|-&lt;br /&gt;
| 0x04030000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA[41]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040A40&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| [[NFCM:SetAmiiboSettings|SetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| None&lt;br /&gt;
| s32 result&lt;br /&gt;
| Among other things, this will eventually call the savedata writing code referenced in the below savedata section.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| Again, amiibo applet ignores value unknownA.&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F0000&lt;br /&gt;
| [[9.3.0-21|9.3.0-X]]&lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is used by the [[amiibo Settings]] applet. This service has the above commands, in addition to the command-set listed below.&lt;br /&gt;
&lt;br /&gt;
==NFC development service &amp;quot;nfc:dev&amp;quot;==&lt;br /&gt;
This service seems to be intended for use only on dev-units(or at least some of the command(s)).&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:p&amp;quot;==&lt;br /&gt;
This service is used by the mint library-applet, starting with [[9.3.0-21]]. This service was added to the mint service-access-control list with [[9.0.0-20]].&lt;br /&gt;
The mint process is the only known eShop-related process using this service([[eShop]]-application and NIM-module don&#039;t use it). Presumably used for NFC card payments in JPN [[eShop]](the v16384 mint title is &#039;&#039;identical&#039;&#039; for USA/JPN besides programIDs in the NCCH header/exheader).&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:r&amp;quot;==&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
==NFC service &amp;quot;nfc:s&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 20 00 01 01.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240000&lt;br /&gt;
| &lt;br /&gt;
| This writes the following command request data to [[I2C_Registers|I2C]], without reading any response: 10 40 00 03 00 0F 01.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service has no known use.&lt;br /&gt;
&lt;br /&gt;
Unlike the New3DS NFC-module, at least some of these commands are stubbed in the Old3DS NFC-module(only returns an error).&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;nfc:u&amp;quot; and &amp;quot;nfc:m&amp;quot; command set=&lt;br /&gt;
There are at least two different revisions of the NFC module. First version was introduced on New3DS only with firmware [[8.1.0-0_New3DS]]. Second version made its appearance with [[9.3.0-21|9.3.0-X]], on both Old3DS and New3DS.&lt;br /&gt;
&lt;br /&gt;
These two versions are not interchangeable and not compatible, since the newer version uses a different command set and has no implemented commands from the older version. This does not introduce compatibility problems since no retail software used the NFC module, before the system titles added with [[9.3.0-21]] which use NFC.&lt;br /&gt;
&lt;br /&gt;
==9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Name&lt;br /&gt;
!  Input&lt;br /&gt;
!  Output&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Initialize|Initialize]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:Shutdown|Shutdown]]&lt;br /&gt;
| u8 inputval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartCommunication|StartCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopCommunication|StopCommunication]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StartTagScanning|StartTagScanning]]&lt;br /&gt;
| u16 inval&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:StopTagScanning|StopTagScanning]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:LoadAmiiboData|LoadAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ResetTagScanState|ResetTagScanState]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:UpdateStoredAmiiboData|UpdateStoredAmiiboData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 copy handle descriptor, Handle event&lt;br /&gt;
| amiibo applet ignores value &#039;descriptor&#039;. It doesn&#039;t even read it from the command buffer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| &lt;br /&gt;
| ???&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u32 unknownA, u32 unknownB&lt;br /&gt;
| amiibo applet also ignores value unknownA for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagState|GetTagState]]&lt;br /&gt;
| void&lt;br /&gt;
| s32 result, u8 outval&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetStatus|CommunicationGetStatus]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo2|GetTagInfo2]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetTagInfo|GetTagInfo]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:CommunicationGetResult|CommunicationGetResult]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00130040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:OpenAppData|OpenAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140384&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:InitializeWriteAppData|InitializeWriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00150040&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:ReadAppData|ReadAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00160242&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:WriteAppData|WriteAppData]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboSettings|GetAmiiboSettings]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAmiiboConfig|GetAmiiboConfig]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| &lt;br /&gt;
| [[NFC:GetAppDataInitStruct|GetAppDataInitStruct]]&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| No additional output.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0000&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| None&lt;br /&gt;
| 0x36-byte output structure starting at cmdreply[2].&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u32 inputval&lt;br /&gt;
| No additional output.&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0040&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| &lt;br /&gt;
| u8 inputval&lt;br /&gt;
| u8 outval at cmdreply[2].&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Pre-9.3.0-X==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Pre-9.3.0-X command header&lt;br /&gt;
!  Command header starting with 9.3.0-X&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Shutdown&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| GetNFCState. This writes an output u8 to cmdreply[2]: 0 = not initialized, 1 = just initialized, 5 = data transfer ready, ...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output handle to cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this. cmdreply[2] = actual output data size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080100&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (&amp;lt;0x10-bytes starting at cmdreq[1]&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| The user process must setup the output-buffer hdr+ptr data @ TLS+0x180 when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0044&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 size, 0x20, &amp;lt;procid set by kernel&amp;gt;, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x402), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u16 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x000F00C2&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 unk0, u32 unk1, u32 unk2, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 0x802), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| (u32 in)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| Writes an output u32 to cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x30-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| This writes an output 0x2C-byte struct starting at cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| ?&lt;br /&gt;
| [[8.1.0-0_New3DS]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC services error codes=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error-code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xc8a17600&lt;br /&gt;
| The current NFC tag [[NFC:GetTagState|state]], or other NFC state, is invalid with the NFC command which was used.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module savedata=&lt;br /&gt;
* &amp;quot;/nfp_backup.dat&amp;quot; This contains raw data from the [[Amiibo]] NFC data pages. The filesize is 0x001fbd20-bytes. Certain service cmds will trigger writing to this savedata. This entire file is read during [[amiibo Settings]] startup, it&#039;s unknown what command(s) actually triggers that. It seems the Amiibo data here is updated each time the Amiibo NFC data is updated, and read each time the Amiibo NFC data is read. Data is written into this savedata when the Amiibo was never scanned on this system before. The data here is probably also updated when the scanned Amiibo NFC data doesn&#039;t match the data stored here.&lt;br /&gt;
&lt;br /&gt;
During NFC writing, the NFC data being written can become corrupted if the Amiibo figure is moved outside of range during writing. When this happens, this nfp_backup data can be used to restore a previous version of that data prior to the last failed write.&lt;br /&gt;
&lt;br /&gt;
==nfp_backup.dat structure==&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;
| 0x20&lt;br /&gt;
| Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x800&lt;br /&gt;
| Amiibo data table header&lt;br /&gt;
|-&lt;br /&gt;
| 0x7D20&lt;br /&gt;
| 0x21C&lt;br /&gt;
| The NFC data for the first stored Amiibo is located here. This is the entire raw data from all 0x87 NFC data pages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Header structure===&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;
| Unknown, normally the following data? &amp;quot;00 00 02 00 02 00 00 00&amp;quot; (as little-endian u32s: 0x20000, 0x2)&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x14&lt;br /&gt;
| Unknown, normally all-zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Amiibo data table header===&lt;br /&gt;
This is an array with 0x40(?) entries, where the size of each entry is 0x20-bytes. Entry structure:&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;
| First 8-bytes from [[Amiibo]] NFC serial-number.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x3&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0xB&lt;br /&gt;
| 0x2&lt;br /&gt;
| u16 little-endian date value for when this Amiibo was initially written into this savedata, with the same format from [[Amiibo|here]].&lt;br /&gt;
|-&lt;br /&gt;
| 0xD&lt;br /&gt;
| 0xF&lt;br /&gt;
| Unknown, normally zero?&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Unknown. CRC32 / checksum maybe?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=NFC module versions=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  System version&lt;br /&gt;
!  New3DS title-version&lt;br /&gt;
!  Old3DS title-version&lt;br /&gt;
!  Changes&lt;br /&gt;
|-&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| v4102&lt;br /&gt;
| v4106&lt;br /&gt;
| New3DS and Old3DS: the only changes regarding new commands is that new commands were added for the nfcu/nfcm command-set and new commands for an unknown cmd-handler were added. It&#039;s unknown if there&#039;s other changes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Error code&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17600&lt;br /&gt;
| This is returned when the current state is invalid for this command.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17620&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the appdata is uninitialized since [[NFC:InitializeWriteAppData]] wasn&#039;t used previously.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17628&lt;br /&gt;
| This is returned by [[NFC:GetAmiiboSettings]] when the amiibo wasn&#039;t setup by the amiibo Settings applet.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17638&lt;br /&gt;
| This is returned by [[NFC:OpenAppData]] when the input AppID doesn&#039;t match the actual Amiibo AppID.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8C1760C&lt;br /&gt;
| Returned for HMAC-hash mismatch(data corruption), with HMAC-calculation input_buffer_size=0x34.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC8A17618&lt;br /&gt;
| HMAC-hash mismatch with input_buffer_size=0x1DF(see [[Amiibo|here]]).&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MCU_Services&amp;diff=18906</id>
		<title>MCU Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MCU_Services&amp;diff=18906"/>
		<updated>2016-12-15T10:19:46Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* MCU GPU service &amp;quot;mcu::GPU&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Only one session can be open per service at a time. If a session is already open for a service, MCU module will wait for the thread handling the session to terminate(triggered by the session being closed by the user process), then it accepts the new session. The commands for each service are handled by separate threads.&lt;br /&gt;
&lt;br /&gt;
=MCU camera service &amp;quot;mcu::CAM&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU GPU service &amp;quot;mcu::GPU&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| GetLcdPowerState. This writes the value of I2C-MCU register 0xf bit6 to u8 cmdreply[2], and the value of bit5 from that register to u8 cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| SetLcdPowerState. This writes the upper LCD bits of MCU register 0x22.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| GetGpuLcdInterfaceState. This writes the value of I2C-MCU register 0xf bit7 to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| SetGpuLcdInterfaceState. This writes the lower two bits of MCU register 0x22.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| GetMcuFwVerHigh. Called by GSP module&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetMcuFwVerLow. Called by GSP module&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| Set3dLedState&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C....&lt;br /&gt;
| Get3dLedState&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| GetMcuGpuEventHandle. Event handle written to TLS+0x8c. MCU notifications 24 to 29 signal this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetMcuGpuEventReason. Writes some value to TLS+0x88. Called by GSP module&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU HID service &amp;quot;mcu::HID&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| Get3dSliderState&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| GetMcuHidEventHandle. MCU notifications 11 and 12 signal this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| GetMcuHidEventReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[MCUHID:GetSoundVolume|GetSoundVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0040&lt;br /&gt;
| SetAccelerometerState(int enable). 1 = enable, 0 = disable accelerometer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU service &amp;quot;mcu::RTC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| SetSystemClock (RTC)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| GetSystemClock (RTC)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0010....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0011....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0012....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0013....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0014....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0015....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0016....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0017....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0018....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0019....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0040&lt;br /&gt;
| SetPedometerRecordingMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200000&lt;br /&gt;
| GetPedometerState&lt;br /&gt;
|-&lt;br /&gt;
| 0x0021....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0022....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0023....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024....&lt;br /&gt;
| GetMcuRtcEventHandle. MCU notifications 1, 8, 9, 10, 13, 14 and 15 signal this.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0025....&lt;br /&gt;
| GetMcuRtcEventReason&lt;br /&gt;
|-&lt;br /&gt;
| 0x0026....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0027....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0028....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0029....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| GetShellState. This writes the value of I2C-MCU register 0xf bit1 to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| GetAdapterState. This writes the value of I2C-MCU register 0xf bit3 to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0000&lt;br /&gt;
| GetBatteryChargeState. This writes the value of I2C-MCU register 0xf bit4 to u8 cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| [[MCURTC:GetBatteryLevel|GetBatteryLevel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0030....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0031....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0032....&lt;br /&gt;
| [[MCURTC:PowerOff|PowerOff]] (writes 0x1 to i2c MCU device, reg 0x20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0033....&lt;br /&gt;
| [[MCURTC:HardwareReboot|HardwareReboot]] (writes 0x4 to i2c MCU device, reg 0x20)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0034....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0035....&lt;br /&gt;
| Writes 0x10 to i2c MCU device, reg 0x20&lt;br /&gt;
|-&lt;br /&gt;
| 0x0036....&lt;br /&gt;
| SetWatchdogTimer&lt;br /&gt;
|-&lt;br /&gt;
| 0x0037....&lt;br /&gt;
| GetWatchdogTimer&lt;br /&gt;
|-&lt;br /&gt;
| 0x0038....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0039....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0640&lt;br /&gt;
| [[MCURTC:SetInfoLEDPattern|SetInfoLEDPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0040&lt;br /&gt;
| [[MCURTC:SetInfoLEDPatternHeader|SetInfoLEDPatternHeader]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0000&lt;br /&gt;
| [[MCURTC:GetInfoLEDStatus|GetInfoLEDStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0040....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0041....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420040&lt;br /&gt;
| [[MCURTC:SetBatteryEmptyLEDPattern|SetBatteryEmptyLEDPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0043....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0044....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0045....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0046....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0047....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0048....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0049....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D....&lt;br /&gt;
| [[MCURTC:ReadHidFlagRegister|ReadHidFlagRegister]] (reads i2c MCU device, reg 0x10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0040&lt;br /&gt;
| [[MCURTC:PublishNotifications|PublishNotifications]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F....&lt;br /&gt;
| Sets some flag (otherwise set when uploading MCU firmware)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0050....&lt;br /&gt;
| Returns the above flag&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510040&lt;br /&gt;
| [[MCURTC:SetSoftwareClosedFlag|SetSoftwareClosedFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520000&lt;br /&gt;
| [[MCURTC:GetSoftwareClosedFlag|GetSoftwareClosedFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0053....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0054....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0055....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0056....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0057....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0058....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00590040&lt;br /&gt;
| [[MCURTC:SetLegacyJumpProhibitedFlag|SetLegacyJumpProhibitedFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x005A0000&lt;br /&gt;
| [[MCURTC:GetLegacyJumpProhibitedFlag|GetLegacyJumpProhibitedFlag]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that using invalid input with these InfoLED/SetBatteryEmptyLEDPattern commands(especially SetInfoLEDPattern) can cause the system to be bricked(however the boot failure may not begin immediately after using the invalid parameters).&lt;br /&gt;
&lt;br /&gt;
=MCU sound service &amp;quot;mcu::SND&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| GetSoundVolume&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU wifi service &amp;quot;mcu::NWM&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| SetWirelessLedState&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| GetWirelessLedState&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| Sets GPIO 0x20 high/low?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| Gets GPIO 0x20 high/low?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| Sets GPIO 0x40000 high/low?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| Gets GPIO 0x40000 high/low?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| [[MCUNWM:SetWirelessDisabledFlag|SetWirelessDisabledFlag]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| [[MCUNWM:GetWirelessDisabledFlag|GetWirelessDisabledFlag]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU service &amp;quot;mcu::HWC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| [[MCUHWC:ReadRegister|ReadRegister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020082&lt;br /&gt;
| [[MCUHWC:WriteRegister|WriteRegister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| [[MCUHWC:GetInfoRegisters|GetInfoRegisters]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[MCUHWC:GetBatteryVoltage|GetBatteryVoltage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[MCUHWC:GetBatteryLevel|GetBatteryLevel]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| [[MCUHWC:SetPowerLEDPattern|SetPowerLEDPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[MCUHWC:SetWifiLEDState|SetWifiLEDState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080040&lt;br /&gt;
| [[MCUHWC:SetCameraLEDPattern|SetCameraLEDPattern]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[MCUHWC:Set3DLEDState|Set3DLEDState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0640&lt;br /&gt;
| This is the same as [[MCURTC:SetInfoLEDPattern]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[MCUHWC:GetSoundVolume|GetSoundVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F....&lt;br /&gt;
| GetRtcTime&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| GetMcuFwVerHigh&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110000&lt;br /&gt;
| GetMcuFwVerLow&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU service &amp;quot;mcu::PLS&amp;quot;=&lt;br /&gt;
&lt;br /&gt;
RTC-related? Each of these seems to retrieve a second counter from a different RTC register.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0005....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0007....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009....&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=MCU codec service &amp;quot;mcu::CDC&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=New3DS=&lt;br /&gt;
The Old3DS/New3DS MCU sysmodules are identical except that the MCU firmware binary written via I2C is different. The size of that binary is the same. The only different words in .text are for the version of that MCU fw binary.&lt;br /&gt;
&lt;br /&gt;
=MCU firmware versions=&lt;br /&gt;
&lt;br /&gt;
These reside in mcu-module .rodata, are uploaded to MCU register 0x05 and are usually size 0x4003 bytes. (0x4000 bytes with 3 byte magic &amp;quot;jhl&amp;quot;?)&lt;br /&gt;
&lt;br /&gt;
There exists an alternate code path where uploading is done using register 0x3B (decided by making some nonsense conclusions about registers 0x0F and 0x10). This may be a &amp;quot;hack&amp;quot; around early versions of MCU? Register 0x3B is RTC-related on recent versions of MCU, and the &amp;quot;nonsense&amp;quot; condition is not met even on factory MCU firmware.&lt;br /&gt;
&lt;br /&gt;
On dev-units, the user-facing representation of this firmware version is displayed by first subtracting 0x10 from the major field (raw register 0x00). It is these user-facing versions that are displayed in the table below. It is unknown what bit4 (0x10) actually represents, but it is seemingly always set.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Title version&lt;br /&gt;
!  Firmware&lt;br /&gt;
|-&lt;br /&gt;
| New3DS v8192/safe v9217 (latest)&lt;br /&gt;
| 3.56&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v6145 to v8192 (latest)&lt;br /&gt;
| 2.37&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v5122&lt;br /&gt;
| 2.35&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v4102&lt;br /&gt;
| 2.30&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v3072&lt;br /&gt;
| 2.16&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v2048&lt;br /&gt;
| 1.52&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v1026&lt;br /&gt;
| 1.51&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS v0/safe v0&lt;br /&gt;
| 1.20&lt;br /&gt;
|-&lt;br /&gt;
| Old3DS factory&lt;br /&gt;
| 1.07&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=18905</id>
		<title>CECD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=18905"/>
		<updated>2016-12-15T05:36:21Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* CECD Service &amp;quot;cecd:ndm&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
Streetpass stuff.&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C2&lt;br /&gt;
| [[CECDU:OpenRawFile|OpenRawFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020042&lt;br /&gt;
| [[CECDU:ReadRawFile|ReadRawFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030104&lt;br /&gt;
| [[CECDU:ReadMessage|ReadMessage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040106&lt;br /&gt;
| [[CECDU:ReadMessageWithHMAC|ReadMessageWithHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050042&lt;br /&gt;
| [[CECDU:WriteRawFile|WriteRawFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060104&lt;br /&gt;
| [[CECDU:WriteMessage|WriteMessage]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070106&lt;br /&gt;
| [[CECDU:WriteMessageWithHMAC|WriteMessageWithHMAC]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| [[CECDU:Delete|Delete]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000900C2&lt;br /&gt;
| ? (16*length+10 of CecMessageId buffer in cmdbuff[4] (always 16*8+10), CecMessageId* in cmdbuf[5])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A00C4&lt;br /&gt;
| [[CECDU:GetSystemInfo|GetSystemInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| RunCommand&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| RunCommandAlt (seems to be the same as RunCommand besides some extra checks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetCecStateAbbreviated (returns CecStateAbbreviated in cmdbuf[2])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| GetCecInfoEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| GetChangeStateEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110104&lt;br /&gt;
| [[CECDU:OpenAndWrite|OpenAndWrite]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120104&lt;br /&gt;
| [[CECDU:OpenAndRead|OpenAndRead]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0021....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecDataPathType ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_MBOX_LIST || 1&lt;br /&gt;
| data:/CEC/MBoxList____&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_MBOX_INFO || 2&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/MBoxInfo____&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_INBOX_INFO || 3&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/InBox___/BoxInfo_____&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_OUTBOX_INFO  || 4&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/OutBox__/BoxInfo_____&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_OUTBOX_INDEX  || 5&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/OutBox__/OBIndex_____&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_INBOX_MSG  || 6&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/InBox___/_&amp;lt;message_id&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_OUTBOX_MSG  || 7&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/OutBox__/_&amp;lt;message_id&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_ROOT_DIR  || 10&lt;br /&gt;
| data:/CEC&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_MBOX_DIR  || 11&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_INBOX_DIR  || 12&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/InBox___&lt;br /&gt;
|-&lt;br /&gt;
| CEC_PATH_OUTBOX_DIR  || 13&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/OutBox__&lt;br /&gt;
|-&lt;br /&gt;
| || 101 thru 199 (inclusive)&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/MBoxData.0&amp;lt;i-100&amp;gt;&lt;br /&gt;
|- &lt;br /&gt;
| CECMESSAGE_BOX_ICON  || 101&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/MBoxData.001&lt;br /&gt;
|- &lt;br /&gt;
| CECMESSAGE_BOX_TITLE  || 110&lt;br /&gt;
| data:/CEC/&amp;lt;id&amp;gt;/MBoxData.010&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecCommand ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NONE&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_START&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_START&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCAN&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCANWAIT&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STARTSCAN&lt;br /&gt;
| 5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESCAN&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_RESUME&lt;br /&gt;
| 7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND_IMMEDIATE&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOPWAIT&lt;br /&gt;
| 0xA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP&lt;br /&gt;
| 0xB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE&lt;br /&gt;
| 0xC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE_WAIT&lt;br /&gt;
| 0xD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_FILTER&lt;br /&gt;
| 0xE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_STOP&lt;br /&gt;
| 0xF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_START&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_EXIT&lt;br /&gt;
| 0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS&lt;br /&gt;
| 0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE&lt;br /&gt;
| 0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE_WAIT&lt;br /&gt;
| 0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_END&lt;br /&gt;
| 0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecStateAbbreviated ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_IDLE&lt;br /&gt;
| 1&lt;br /&gt;
| Corresponds to CEC_STATE_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_INACTIVE&lt;br /&gt;
| 2&lt;br /&gt;
| Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_SCANNING&lt;br /&gt;
| 3&lt;br /&gt;
| Corresponds to CEC_STATE_SCANNING&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_WLREADY?&lt;br /&gt;
| 4&lt;br /&gt;
| Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_OTHER&lt;br /&gt;
| 5&lt;br /&gt;
| Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessageId ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| char[8]&lt;br /&gt;
| data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:s&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
This contains a similar (probably the same) command handler from 0x0001.... to 0x0021.... as them in cecd:u. In addition, it also contains&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0401....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040B....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040E....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040F....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0410....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04110042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041200C2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0413....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0414....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0415....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04160002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0417....&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:ndm&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Deinitialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| ResumeDaemon&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| SuspendDaemon(bool immediately)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18867</id>
		<title>AC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18867"/>
		<updated>2016-12-12T10:13:53Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* AC service &amp;quot;ac:i&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= AC service &amp;quot;ac:u&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
These commands are common to both ac:u and ac:i&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| CreateDefaultConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040006&lt;br /&gt;
| ConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| GetConnectResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| CancelConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080004&lt;br /&gt;
| CloseAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| GetCloseResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetLastErrorCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[ACU:GetWifiStatus|GetWifiStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[ACU:GetCurrentAPInfo|GetCurrentAPInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| [[ACU:GetCurrentNZoneInfo|GetCurrentNZoneInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110042&lt;br /&gt;
| [[ACU:GetNZoneApNumService|GetNZoneApNumService]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[AC:ScanAPs|ScanAPs]] System Settings uses this via ac:i, this is presumably accessible via ac:u too.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240042&lt;br /&gt;
| AddDenyApType&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270002&lt;br /&gt;
| GetInfraPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0042&lt;br /&gt;
| unknown..&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0082&lt;br /&gt;
| SetRequestEulaVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300004&lt;br /&gt;
| RegisterDisconnectEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| [[ACU:GetAPSSIDList|GetAPSSIDList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0042&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| SetClientVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AC service &amp;quot;ac:i&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
These commands are exclusive to ac:i &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04100002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04140040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04160002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04180002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04200002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04220040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04240040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04260002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04280002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04300002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04360040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04380040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043C0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043E0002&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18866</id>
		<title>AC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18866"/>
		<updated>2016-12-12T10:13:21Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* AC service &amp;quot;ac:u&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= AC service &amp;quot;ac:u&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
These commands are common to both ac:u and ac:i&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| CreateDefaultConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040006&lt;br /&gt;
| ConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| GetConnectResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| CancelConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080004&lt;br /&gt;
| CloseAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| GetCloseResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetLastErrorCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[ACU:GetWifiStatus|GetWifiStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[ACU:GetCurrentAPInfo|GetCurrentAPInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| [[ACU:GetCurrentNZoneInfo|GetCurrentNZoneInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110042&lt;br /&gt;
| [[ACU:GetNZoneApNumService|GetNZoneApNumService]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[AC:ScanAPs|ScanAPs]] System Settings uses this via ac:i, this is presumably accessible via ac:u too.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240042&lt;br /&gt;
| AddDenyApType&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270002&lt;br /&gt;
| GetInfraPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0042&lt;br /&gt;
| unknown..&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0082&lt;br /&gt;
| SetRequestEulaVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300004&lt;br /&gt;
| RegisterDisconnectEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| [[ACU:GetAPSSIDList|GetAPSSIDList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0042&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| SetClientVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AC service &amp;quot;ac:i&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ac:i&amp;quot; service has same functions as &amp;quot;ac:u&amp;quot;, and additional functions, related with connection setup:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04100002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04140040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04160002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04180002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04200002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04220040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04240040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04260002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04280002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04300002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04360040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04380040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043C0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043E0002&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18865</id>
		<title>AC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18865"/>
		<updated>2016-12-12T08:38:28Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* AC service &amp;quot;ac:i&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= AC service &amp;quot;ac:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| CreateDefaultConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040006&lt;br /&gt;
| ConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| GetConnectResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| CancelConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080004&lt;br /&gt;
| CloseAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| GetCloseResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetLastErrorCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[ACU:GetWifiStatus|GetWifiStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[ACU:GetCurrentAPInfo|GetCurrentAPInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| [[ACU:GetCurrentNZoneInfo|GetCurrentNZoneInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110042&lt;br /&gt;
| [[ACU:GetNZoneApNumService|GetNZoneApNumService]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[AC:ScanAPs|ScanAPs]] System Settings uses this via ac:i, this is presumably accessible via ac:u too.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240042&lt;br /&gt;
| AddDenyApType&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270002&lt;br /&gt;
| GetInfraPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0042&lt;br /&gt;
| unknown..&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0082&lt;br /&gt;
| SetRequestEulaVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300004&lt;br /&gt;
| RegisterDisconnectEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| [[ACU:GetAPSSIDList|GetAPSSIDList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0042&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| SetClientVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AC service &amp;quot;ac:i&amp;quot; =&lt;br /&gt;
&lt;br /&gt;
&amp;quot;ac:i&amp;quot; service has same functions as &amp;quot;ac:u&amp;quot;, and additional functions, related with connection setup:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04010040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04080040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x040C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04100002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04140040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04160002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04180002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x041E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04200002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04220040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04240040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04260002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04280002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x042E0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04300002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04360040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x04380040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043A0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043C0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x043E0002&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Services_API&amp;diff=18548</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Services_API&amp;diff=18548"/>
		<updated>2016-11-11T08:29:47Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: add boss:P to BOSS Services&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Nintendo provides application developers with an API, which communicate with certain services. Services, in this sense, are [[Title_list#00040130_-_System_Modules|system processes running in the background]] which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via interprocess communication. Each service has a name up to 8 characters, for example &amp;quot;nim:u&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the [[Services|service manager port]], &amp;quot;srv:&amp;quot;. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC.&lt;br /&gt;
&lt;br /&gt;
For a description of how commands and arguments are passed to services, see [[IPC Command Structure]].&lt;br /&gt;
&lt;br /&gt;
List of services (grouped by the process which provides them):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Old3ds&lt;br /&gt;
!  Services&lt;br /&gt;
!  Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; |  Notes&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Filesystem services‎]]&lt;br /&gt;
| fs:USER, fs:LDR, fs:REG&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Process Services‎]]&lt;br /&gt;
| ps:ps&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[PXI Services‎]]&lt;br /&gt;
| PxiFS0, PxiFS1, PxiFSB, PxiFSR, PxiPM, pxi:am9, pxi:dev, pxi:mc, pxi:ps9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Application Manager Services]]&lt;br /&gt;
| am:app, am:net, am:u, am:sys, am:pipe&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Process Manager Services]]&lt;br /&gt;
| pm:app, pm:dbg&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[NIM Services]]&lt;br /&gt;
| nim:aoc, nim:ndm, nim:s, nim:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Config Services]]&lt;br /&gt;
| cfg:u, cfg:s, cfg:i, cfg:nor&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[NS|NS and APT Services]]&lt;br /&gt;
| ns:s, ns:p, ns:c, APT:A, APT:S, APT:U&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[RO Services]]&lt;br /&gt;
| ldr:ro&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[NDM Services]]&lt;br /&gt;
| ndm:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[CSND Services]]&lt;br /&gt;
| csnd:SND&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Camera Services]]&lt;br /&gt;
| cam:u, y2r:u, cam:s, cam:c, cam:q (New3DS only)&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Codec Services]]&lt;br /&gt;
| cdc:HID, cdc:MIC, cdc:CSN, cdc:DSP, cdc:LGY, cdc:CHK&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[DLP Services]]&lt;br /&gt;
| dlp:CLNT, dlp:FKCL, dlp:SRVR&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[DSP Services]]&lt;br /&gt;
| dsp::DSP&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[GSP Services]]&lt;br /&gt;
| gsp::Lcd, gsp::Gpu&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[BOSS Services]]&lt;br /&gt;
| boss:U, boss:P&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[CECD Services]]&lt;br /&gt;
| cecd:u, cecd:s, cecd:ndm&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[IR Services]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[I2C Services]]&lt;br /&gt;
| i2c::MCU, i2c::CAM, i2c::LCD, i2c::DEB, i2c::HID, i2c::IR, i2c::EEP, i2c::NFC, i2c::QTM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[GPIO Services]]&lt;br /&gt;
| gpio:CDC, gpio:MCU, gpio:HID, gpio:NWM, gpio:IR, gpio:NFC, gpio:QTM&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[HID Services]]&lt;br /&gt;
| hid:NFC, hid:QTM, hid:SPVR, hid:USER &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[PTM Services]]&lt;br /&gt;
| ptm:gets, ptm:play, ptm:s, ptm:sets, ptm:sysm, ptm:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[NWM Services]]&lt;br /&gt;
| nwm::UDS&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[HTTP Services]]&lt;br /&gt;
| http:C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[SSL Services]]&lt;br /&gt;
| ssl:C&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Socket Services]]&lt;br /&gt;
| soc:P, soc:U&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[AC Services]]&lt;br /&gt;
| ac:i, ac:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Friend Services]]&lt;br /&gt;
| frd:a, frd:u, frd:n&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[News Services]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[PDN Services]]&lt;br /&gt;
| pdn:s, pdn:d, pdn:i, pdn:g, pdn:c&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[SPI Services]]&lt;br /&gt;
| SPI::NOR, SPI::CD2, SPI::CS2, SPI::CS3, SPI::DEF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[Loader Services]]&lt;br /&gt;
| Loader&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[MCU Services]]&lt;br /&gt;
| mcu::CAM, mcu::GPU, mcu::HID, mcu::RTC, mcu::SND, mcu::NWM, mcu::HWC, mcu::PLS, mcu::CDC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[MIC Services]]&lt;br /&gt;
| mic:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[ACT Services]]&lt;br /&gt;
| act:a, act:u&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: green&amp;quot; | Yes&lt;br /&gt;
| [[NFC Services]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| [[MVD Services]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background: red&amp;quot; | No&lt;br /&gt;
| [[QTM Services]]&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
List of PXI services:&lt;br /&gt;
* [[Filesystem services PXI]]&lt;br /&gt;
* [[Process Services PXI]]&lt;br /&gt;
* [[Application Manager Services PXI]]&lt;br /&gt;
* [[Process Manager Services PXI]]&lt;br /&gt;
* [[Development Services PXI]]&lt;br /&gt;
* [[Gamecard Services PXI]]&lt;br /&gt;
* [[Legacy FIRM PXI]] (TWL_FIRM/AGB_FIRM)&lt;br /&gt;
&lt;br /&gt;
List of ports:&lt;br /&gt;
* [[ErrDisp]]&lt;br /&gt;
* [[Services]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See [[Error codes]].&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18498</id>
		<title>AC Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=AC_Services&amp;diff=18498"/>
		<updated>2016-10-26T10:19:13Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* AC service &amp;quot;ac:u&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= AC service &amp;quot;ac:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| CreateDefaultConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040006&lt;br /&gt;
| ConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050002&lt;br /&gt;
| GetConnectResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070002&lt;br /&gt;
| CancelConnectAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080004&lt;br /&gt;
| CloseAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090002&lt;br /&gt;
| GetCloseResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetLastErrorCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[ACU:GetWifiStatus|GetWifiStatus]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[ACU:GetCurrentAPInfo|GetCurrentAPInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| [[ACU:GetCurrentNZoneInfo|GetCurrentNZoneInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110042&lt;br /&gt;
| [[ACU:GetNZoneApNumService|GetNZoneApNumService]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0002&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| [[AC:ScanAPs|ScanAPs]] System Settings uses this via ac:i, this is presumably accessible via ac:u too.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240042&lt;br /&gt;
| AddDenyApType&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270002&lt;br /&gt;
| GetInfraPriority&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0042&lt;br /&gt;
| unknown..&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0082&lt;br /&gt;
| SetRequestEulaVersion&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0004&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300004&lt;br /&gt;
| RegisterDisconnectEvent&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| [[ACU:GetAPSSIDList|GetAPSSIDList]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0042&lt;br /&gt;
| IsConnected&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| SetClientVersion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= AC service &amp;quot;ac:i&amp;quot; =&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=BOSS_Services&amp;diff=17935</id>
		<title>BOSS Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=BOSS_Services&amp;diff=17935"/>
		<updated>2016-08-13T12:17:21Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* BOSS Service &amp;quot;boss:U&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==BOSS Service &amp;quot;boss:U&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010082&lt;br /&gt;
| InitializeSession&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020100&lt;br /&gt;
| GetStorageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| UnregisterStorage&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| GetTaskStorageInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| SetOptoutFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| GetOptoutFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B00C2&lt;br /&gt;
| RegisterTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| ReconfigureTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetTaskIdList&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0082&lt;br /&gt;
| UnregisterTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100102&lt;br /&gt;
| GetNsDataIdList&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140082&lt;br /&gt;
| SendProperty&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150042&lt;br /&gt;
| SendPropertyHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160082&lt;br /&gt;
| ReceiveProperty&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180082&lt;br /&gt;
| UpdateTaskCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0042&lt;br /&gt;
| GetTaskCount&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0042&lt;br /&gt;
| GetTaskServiceStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0042&lt;br /&gt;
| StartTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0042&lt;br /&gt;
| StartTaskImmediate&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0042&lt;br /&gt;
| CancelTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0000&lt;br /&gt;
| GetTaskFinishHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200082&lt;br /&gt;
| GetTaskState&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210042&lt;br /&gt;
| GetTaskResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x002300C2&lt;br /&gt;
| GetTaskStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260040&lt;br /&gt;
| DeleteNsData&lt;br /&gt;
|-&lt;br /&gt;
| 0x002700C2&lt;br /&gt;
| GetNsDataHeaderInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280102&lt;br /&gt;
| ReadNsData&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0080&lt;br /&gt;
| SetNsDataNewFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0040&lt;br /&gt;
| GetNsDataNewFlag&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0040&lt;br /&gt;
| GetErrorCode&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0140&lt;br /&gt;
| RegisterStorageEntry&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300000&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330042&lt;br /&gt;
| StartBgImmediate&lt;br /&gt;
|-&lt;br /&gt;
| 0x003500C2&lt;br /&gt;
| RegisterImmediateTask&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360084&lt;br /&gt;
| unknown...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Privileged BOSS Service &amp;quot;boss:P&amp;quot;==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040080&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x040500C0&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x040600C0&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04070080&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04090102&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x040B0080&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x040D0182&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x041500C0&lt;br /&gt;
| DeleteNsDataPrivileged&lt;br /&gt;
|-&lt;br /&gt;
| 0x04160142&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04170182&lt;br /&gt;
| ReadNsDataPrivileged&lt;br /&gt;
|-&lt;br /&gt;
| 0x041A0100&lt;br /&gt;
| SetNsDataNewFlagPrivileged&lt;br /&gt;
|-&lt;br /&gt;
| 0x041B00C0&lt;br /&gt;
| GetNsDataNewFlagPrivileged&lt;br /&gt;
|-&lt;br /&gt;
| 0x041C00C0&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x042E00C2&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x042F00C2&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x043000C2&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04490142&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x044A0180&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x044D0080&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04500102&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x04540102&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x045500C2&lt;br /&gt;
| unknown...&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
boss:P also contains all of the commands from boss:U.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=17440</id>
		<title>CECD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=17440"/>
		<updated>2016-05-29T18:16:49Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* CECD Service &amp;quot;cecd:u&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
Streetpass stuff.&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C2&lt;br /&gt;
| Open mail box&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030104&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070106&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[9] (always 16*8+10), CecMessage* in cmdbuf[10])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| Delete mail box&lt;br /&gt;
|-&lt;br /&gt;
| 0x000900C2&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[4] (always 16*8+10), CecMessage* in cmdbuf[5])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A00C4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetCecStateAbbreviated (returns CecStateAbbreviated in cmdbuf[2])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| GetCecInfoEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| GetChangeStateEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110104&lt;br /&gt;
| OpenAndWrite (cmdbuf[3]: CecMessageType type, cmdbuf[5]: 0x20, cmdbuf[6]: u8* data_buf, cmdbuf[7]: u32 16*data_size+10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120104&lt;br /&gt;
| [[CECDU:ReadSavedData|OpenAndRead]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecCommand ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NONE&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_START&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_START&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCAN&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCANWAIT&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STARTSCAN&lt;br /&gt;
| 5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESCAN&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_RESUME&lt;br /&gt;
| 7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND_IMMEDIATE&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOPWAIT&lt;br /&gt;
| 0xA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP&lt;br /&gt;
| 0xB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE&lt;br /&gt;
| 0xC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE_WAIT&lt;br /&gt;
| 0xD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_FILTER&lt;br /&gt;
| 0xE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_STOP&lt;br /&gt;
| 0xF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_START&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_EXIT&lt;br /&gt;
| 0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS&lt;br /&gt;
| 0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE&lt;br /&gt;
| 0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE_WAIT&lt;br /&gt;
| 0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_END&lt;br /&gt;
| 0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecStateAbbreviated ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_IDLE&lt;br /&gt;
| 1&lt;br /&gt;
| Corresponds to CEC_STATE_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_NOT_LOCAL?&lt;br /&gt;
| 2&lt;br /&gt;
| Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_SCANNING&lt;br /&gt;
| 3&lt;br /&gt;
| Corresponds to CEC_STATE_SCANNING&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_WLREADY?&lt;br /&gt;
| 4&lt;br /&gt;
| Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_OTHER&lt;br /&gt;
| 5&lt;br /&gt;
| Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessage ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| char[8]&lt;br /&gt;
| data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessageType ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 0x2&lt;br /&gt;
| Corresponds to some 0x60-byte data&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_ICON&lt;br /&gt;
| 0x65&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; icon&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_TITLE&lt;br /&gt;
| 0x6E&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; title&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:ndm&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| Deinitialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ResumeDaemon&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| SuspendDaemon(bool immediately)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=17438</id>
		<title>CECD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=17438"/>
		<updated>2016-05-29T10:57:32Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: change names of 2 function&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
Streetpass stuff.&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020042&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030104&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070106&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[9] (always 16*8+10), CecMessage* in cmdbuf[10])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000900C2&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[4] (always 16*8+10), CecMessage* in cmdbuf[5])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A00C4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetCecStateAbbreviated (returns CecStateAbbreviated in cmdbuf[2])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| GetCecInfoEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| GetChangeStateEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110104&lt;br /&gt;
| OpenAndWrite (cmdbuf[3]: CecMessageType type, cmdbuf[5]: 0x20, cmdbuf[6]: u8* data_buf, cmdbuf[7]: u32 16*data_size+10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120104&lt;br /&gt;
| [[CECDU:ReadSavedData|OpenAndRead]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecCommand ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NONE&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_START&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_START&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCAN&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCANWAIT&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STARTSCAN&lt;br /&gt;
| 5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESCAN&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_RESUME&lt;br /&gt;
| 7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND_IMMEDIATE&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOPWAIT&lt;br /&gt;
| 0xA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP&lt;br /&gt;
| 0xB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE&lt;br /&gt;
| 0xC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE_WAIT&lt;br /&gt;
| 0xD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_FILTER&lt;br /&gt;
| 0xE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_STOP&lt;br /&gt;
| 0xF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_START&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_EXIT&lt;br /&gt;
| 0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS&lt;br /&gt;
| 0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE&lt;br /&gt;
| 0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE_WAIT&lt;br /&gt;
| 0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_END&lt;br /&gt;
| 0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecStateAbbreviated ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_IDLE&lt;br /&gt;
| 1&lt;br /&gt;
| Corresponds to CEC_STATE_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_NOT_LOCAL?&lt;br /&gt;
| 2&lt;br /&gt;
| Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_SCANNING&lt;br /&gt;
| 3&lt;br /&gt;
| Corresponds to CEC_STATE_SCANNING&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_WLREADY?&lt;br /&gt;
| 4&lt;br /&gt;
| Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_OTHER&lt;br /&gt;
| 5&lt;br /&gt;
| Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessage ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| char[8]&lt;br /&gt;
| data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessageType ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 0x2&lt;br /&gt;
| Corresponds to some 0x60-byte data&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_ICON&lt;br /&gt;
| 0x65&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; icon&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_TITLE&lt;br /&gt;
| 0x6E&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; title&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:ndm&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| Deinitialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ResumeDaemon&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| SuspendDaemon(bool immediately)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=16347</id>
		<title>CECD Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=CECD_Services&amp;diff=16347"/>
		<updated>2016-03-31T07:01:37Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* CECD Service &amp;quot;cecd:u&amp;quot; add name for 2 functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
Streetpass stuff.&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C2&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030104&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070106&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[9] (always 16*8+10), CecMessage* in cmdbuf[10])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080102&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000900C2&lt;br /&gt;
| ? (16*length+10 of CecMessage buffer in cmdbuff[4] (always 16*8+10), CecMessage* in cmdbuf[5])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A00C4&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| GetCecStateAbbreviated (returns CecStateAbbreviated in cmdbuf[2])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| GetCecInfoEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| GetChangeStateEventHandle (returns event handle in cmdbuf[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110104&lt;br /&gt;
| SetSendingData? (cmdbuf[3]: CecMessageType type, cmdbuf[5]: 0x20, cmdbuf[6]: u8* data_buf, cmdbuf[7]: u32 16*data_size+10)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120104&lt;br /&gt;
| [[CECDU:ReadSavedData|ReadSavedData]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecCommand ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NONE&lt;br /&gt;
| 0&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_START&lt;br /&gt;
| 1&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_START&lt;br /&gt;
| 2&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCAN&lt;br /&gt;
| 3&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_READYSCANWAIT&lt;br /&gt;
| 4&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STARTSCAN&lt;br /&gt;
| 5&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESCAN&lt;br /&gt;
| 6&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_RESUME&lt;br /&gt;
| 7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND&lt;br /&gt;
| 8&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_NDM_SUSPEND_IMMEDIATE&lt;br /&gt;
| 9&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOPWAIT&lt;br /&gt;
| 0xA&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP&lt;br /&gt;
| 0xB&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE&lt;br /&gt;
| 0xC&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_STOP_FORCE_WAIT&lt;br /&gt;
| 0xD&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_RESET_FILTER&lt;br /&gt;
| 0xE&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_STOP&lt;br /&gt;
| 0xF&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_DAEMON_START&lt;br /&gt;
| 0x10&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_EXIT&lt;br /&gt;
| 0x11&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS&lt;br /&gt;
| 0x12&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE&lt;br /&gt;
| 0x13&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_OVER_BOSS_FORCE_WAIT&lt;br /&gt;
| 0x14&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| CEC_COMMAND_END&lt;br /&gt;
| 0x15&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecStateAbbreviated ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Value&lt;br /&gt;
!  Notes&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_IDLE&lt;br /&gt;
| 1&lt;br /&gt;
| Corresponds to CEC_STATE_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_NOT_LOCAL?&lt;br /&gt;
| 2&lt;br /&gt;
| Corresponds to CEC_STATEs *FINISH*, *POST, and OVER_BOSS&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_SCANNING&lt;br /&gt;
| 3&lt;br /&gt;
| Corresponds to CEC_STATE_SCANNING&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_WLREADY?&lt;br /&gt;
| 4&lt;br /&gt;
| Corresponds to CEC_STATE_WIRELESS_READY when some unknown bool is true&lt;br /&gt;
|-&lt;br /&gt;
| CEC_STATE_ABBREV_OTHER&lt;br /&gt;
| 5&lt;br /&gt;
| Corresponds to CEC_STATEs besides *FINISH*, *POST, and OVER_BOSS and those listed here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessage ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Type&lt;br /&gt;
!  Field&lt;br /&gt;
|-&lt;br /&gt;
| char[8]&lt;br /&gt;
| data&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CecMessageType ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
! Value&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 0x2&lt;br /&gt;
| Corresponds to some 0x60-byte data&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_ICON&lt;br /&gt;
| 0x65&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; icon&lt;br /&gt;
|-&lt;br /&gt;
| CECMESSAGE_BOX_TITLE&lt;br /&gt;
| 0x6E&lt;br /&gt;
| Corresponds to the StreetPass &amp;quot;box&amp;quot; title&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= CECD Service &amp;quot;cecd:ndm&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0001....&lt;br /&gt;
| Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002....&lt;br /&gt;
| Deinitialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| ResumeDaemon&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| SuspendDaemon(bool immediately)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=DLP_Services&amp;diff=16322</id>
		<title>DLP Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=DLP_Services&amp;diff=16322"/>
		<updated>2016-03-30T04:37:31Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Download Play Server Service &amp;quot;dlp:SRVR&amp;quot; all functions codes added*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Download Play Client Service &amp;quot;dlp:CLNT&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;dlp:FKCL&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Download Play Server Service &amp;quot;dlp:SRVR&amp;quot;=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010183&lt;br /&gt;
| Initialize...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| Finalize...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050080&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000800C0&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0042&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0040&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0303&lt;br /&gt;
| unknown...&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| unknown...&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=15861</id>
		<title>IR Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=IR_Services&amp;diff=15861"/>
		<updated>2016-02-21T08:47:51Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: clarify some service codes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= IR Service &amp;quot;ir:u&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030042&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartSendTransfer|StartSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitSendTransfer|WaitSendTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:StartRecvTransfer|StartRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:WaitRecvTransfer|WaitRecvTransfer]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvTransferCount|GetRecvTransferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendState|GetSendState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetBitRate|SetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetBitRate|GetBitRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetIRLEDState|SetIRLEDState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetIRLEDRecvState|GetIRLEDRecvState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetSendFinishedEvent|GetSendFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetRecvFinishedEvent|GetRecvFinishedEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:GetTransferState|GetTransferState]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| GetErrorStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeActive|SetSleepModeActive]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[IRU:SetSleepModeState|SetSleepModeState]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:USER&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010182&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| InitializeIrnop(cmd[5]=[[IRU:SetBitRate|bitrate]] value, cmd[7]=0, cmd[8]=handle, the rest unknown)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| FinalizeIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearReceiveBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ClearSendBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| WaitConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| RequireConnection (u8 input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070C20&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AutoConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| AnyConnection&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| Disconnect&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0000&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatusEvent (writes event handle to cmdreply[3])&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnop (u32 size, ((Size&amp;lt;&amp;lt;14) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| SendIrnopLarge (u32 size, ((Size&amp;lt;&amp;lt;8) &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 10), inbufptr)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0040&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnop&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100042&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| ReceiveIrnopLarge&lt;br /&gt;
|-&lt;br /&gt;
| 0x0011....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestReceiveErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0012....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetLatestSendErrorResult&lt;br /&gt;
|-&lt;br /&gt;
| 0x0013....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetConnectionStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0014....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetTryingToConnectStatus&lt;br /&gt;
|-&lt;br /&gt;
| 0x0015....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetReceiveSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0016....&lt;br /&gt;
| [[2.0.0-2]]&lt;br /&gt;
| GetSendSizeFreeAndUsed&lt;br /&gt;
|-&lt;br /&gt;
| 0x0017....&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| GetConnectionRole&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180182&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| InitializeIrnopShared (u32, u32, u32, u32, u32, cmd[6] = u8 [[IRU:SetBitRate|bitrate]] value, 0, handle)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| ReleaseReceivedData (32bit_value input)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| SetOwnMachineId (u8 input)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service was added with [[2.0.0-2]].&lt;br /&gt;
&lt;br /&gt;
When sending data, SendIrnop is used when the size is &amp;lt;=0xFC, otherwise SendIrnopLarge is used.&lt;br /&gt;
&lt;br /&gt;
= IR Service &amp;quot;ir:rst&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system-version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:GetHandles|GetHandles]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| [[IRRST:Shutdown|Shutdown]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 to index-word cmdreply[2], from data loaded from an I2C device register.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes an unknown u8 from IR-module state to index-word cmdreply[2].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This writes two unknown u8 fields from IR-module state to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070080&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| (u8 unk0, u8 unk1) ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090000&lt;br /&gt;
| [[9.0.0-20]]&lt;br /&gt;
| This writes two unknown u8 fields to index-word cmdreply[2] and cmdreply[3].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This service was added with [[8.0.0-18]]. Unlike the other IR services, this uses [[I2C]] deviceid 17(this deviceid isn&#039;t actually handled by the [[8.0.0-18]] I2C module). This is for the additional [[New 3DS]] HID hardware, this HID data is stored in [[IRRST_Shared_Memory|shared-memory]]. Even with [[9.0.0-20]] IR module still registers+handles this service on both Old3DS+New3DS.&lt;br /&gt;
&lt;br /&gt;
=IR Services=&lt;br /&gt;
Only one session(two sessions starting with [[8.0.0-18]]) to any of these services can be open at a time, thus only one/two process(es) can use any of these services at once. These services interface with hardware services gpio::IR and i2c::IR. The i2c::IR service is used for sending/receiving data.&lt;br /&gt;
&lt;br /&gt;
IRU is for regular IR comms. IRUSER uses a custom IR protocol(above the physical layer). Both of these services use IrDA-SIR. The IR hardware seems to only support IrDA-SIR, other physical protocols such as the one for TV-remotes are not supported(going by the datasheet linked [[Hardware|here]] for a different IC at least).&lt;br /&gt;
&lt;br /&gt;
The protocol used with IRUSER involves encryption(?) implemented in software. IRUSER is used for the [[Circle Pad Pro]]. This same IRUSER service uses the New3DS HID hardware when running on New3DS(note that the main service for New3DS HID is ir:rst).&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=13423</id>
		<title>NS and APT Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NS_and_APT_Services&amp;diff=13423"/>
		<updated>2015-09-28T04:36:35Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: right code for 0x00510080&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
The NS (&#039;&#039;&#039;N&#039;&#039;&#039;intendo User Interface &#039;&#039;&#039;S&#039;&#039;&#039;hell) system module is the first module launched from a CTR-NAND title after the [[FIRM]] processes are loaded. This module is launched by the pm process, with the titleID loaded from NS state(hard-coded TID initialized during applet TID-array initialization). NS first launches [[ErrDisp]], then the menu. On retail the menu TID is loaded from NS state, while on dev/debug the menu TID is loaded from [[Config_Savegame|config]]. On dev-units if the menu TID block doesn&#039;t exist in [[Config_Savegame|config]], NS will attempt to launch the alternate menu instead. The TID of the launched menu is then written to [[Configuration Memory|ACTIVEMENUTID]]. NS uses [[PMApp:LaunchTitle|pm:app]] to launch titles.&lt;br /&gt;
&lt;br /&gt;
NS will not trigger the [[ErrDisp|fatal-error]] screen when launching the regular/alternate menu fails.&lt;br /&gt;
&lt;br /&gt;
Like home menu NS is constantly running while the system is in 3DS-mode. When attempting to return to home-menu when the home-menu process isn&#039;t running(like when the process terminated/crashed), NS will trigger a [[ErrDisp|fatal]] error.&lt;br /&gt;
&lt;br /&gt;
= Alternate menu =&lt;br /&gt;
When launching the regular menu fails, NS will then attempt to launch the alternate menu. This title could be used as a recovery process, however it&#039;s normally not used after the factory.&lt;br /&gt;
&lt;br /&gt;
At the factory for all 3DS systems, [[3DS Development Unit GUI#Test Menu|Test Menu]] is installed with this TID. On retail this title is eventually deleted during [[Factory Setup]].&lt;br /&gt;
&lt;br /&gt;
= Auto-boot =&lt;br /&gt;
After [[PMApp:GetFIRMLaunchParams|loading]] [[FIRM]] params and prior to launching [[ErrDisp]]/Home Menu, NS handles auto-booting titles. The same code called by [[APT:Reboot]] is used for launching FIRM here. When the [[Configuration_Memory|UPDATEFLAG]] is set, NS will launch SAFE_MODE_FIRM with the application titleID set to the [[System_Settings#System_Updater|System Updater]] titleID for this region. When the UPDATEFLAG is not set, NS can auto-boot the following titles as well if [[Configuration_Memory|0x1FF80016]] bit0 is set.&lt;br /&gt;
&lt;br /&gt;
When bit1 and bit2 are value zero in [[Configuration_Memory|0x1FF80016]], NS will [[NSS:LaunchFIRM|launch]] the title specified by the [[FIRM]] parameters if the title-info is set. This FIRM launch is done after launching [[ErrDisp]] and Home Menu. Otherwise when [[Configuration_Memory|0x1FF80016]] is value 2 and the output u8 from [[PTM|PTMSYSM]] command 0x08140000 is value 0, NS will boot the title specified from the TWL TLNC block from FIRMparams+0x300. This is the same TLNC block which DSi titles wrote to RAM+0x300 for launching other titles via the launcher title. When handling the TLNC block, NS will boot the 3DS System Settings title when the TLNC titleID is the DSi System Settings titleID(the region field in the TLNC TID is not checked/used). When the TLNC titleID is not System Settings, NS will convert the input DSi titleID-high to the 3DS TWL titleID-high(tidhigh = (TLNCtidhigh &amp;amp; 0x7FFF) | 0x48000), then launch TWL_FIRM to run the title. NS does not support launching from gamecard via TLNC.&lt;br /&gt;
&lt;br /&gt;
= NS Workaround =&lt;br /&gt;
A &amp;quot;ns_workaround&amp;quot; was [[5.1.0-11|added]] in NS to workaround the flaw added with [[5.0.0-11]]. When NS is loading before launching any ARM11 processes and certain [[Configuration Memory]] fields are set, NS will launch [[Application_Manager_Services|AM]] then use command [[AM:InstallNATIVEFIRM]]. NS will then execute the code called by [[APT:StartNewestHomeMenu]], the code related to APT:PrepareToStartNewestHomeMenu is not executed here.&lt;br /&gt;
&lt;br /&gt;
NS will only execute this code-path when [[Configuration Memory|0x1FF80016]] is value zero, when KERNEL_VERSIONMAJOR is value 2, and when KERNEL_VERSIONMINOR is less than 35. Therefore, this code-path is only executed when the running NATIVE_FIRM version is prior to [[5.0.0-11]].&lt;br /&gt;
&lt;br /&gt;
= NS Service &amp;quot;ns:s&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchFIRM|LaunchFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000200C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchTitle|LaunchTitle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0003....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Wrapper for [[Process_Manager_Services|PMApp]] command 0x00030080.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Wrapper for [[Process_Manager_Services|PMApp]] command 0x000500C0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C0&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:LaunchApplicationFIRM|LaunchApplicationFIRM]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetFIRMParams4A0|SetFIRMParams4A0]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070042&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:CardUpdateInitialize|CardUpdateInitialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This shuts down the gamecard system update interface: the shared memory is unmapped, the CFA archive is closed, state is cleared, etc.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Gamecard system update related.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0140&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:SetFIRMParams4B0|SetFIRMParams4B0]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| Wrapper for &amp;quot;ptm:sysm&amp;quot; service command 0x040700C0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| This calls [[APT:AppletUtility]] with fixed input params.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100180&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:RebootSystem|RebootSystem]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0011....&lt;br /&gt;
| [[1.0.0-0]] - [[2.0.0-2]]&lt;br /&gt;
| [[NSS:TerminateProcessTID|TerminateProcessTID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0012....&lt;br /&gt;
| ?&lt;br /&gt;
| Uses pm:app cmdA&amp;amp;B&lt;br /&gt;
|-&lt;br /&gt;
| 0x0013....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0014....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0015....&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| This triggers a hw-reboot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The maximum sessions that can be used with this service is two, therefore only two processes can use this service at the same time.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:p&amp;quot;=&lt;br /&gt;
This was added with [[3.0.0-5]]. The PTM sysmodule connects to this service, and syncs whenever [[PTM|ptm:s GetShellState()]] changes.&lt;br /&gt;
&lt;br /&gt;
=NS Service &amp;quot;ns:c&amp;quot;=&lt;br /&gt;
This was added with [[5.0.0-11]], it&#039;s unknown what this is used for.&lt;br /&gt;
&lt;br /&gt;
=APT Services=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Accessible with APT:U&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetLockHandle&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020080&lt;br /&gt;
| &lt;br /&gt;
| See [[APTU:Initialize|here]].&lt;br /&gt;
| [[APTU:Initialize|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Enable&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletManInfo|GetAppletManInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00060040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletInfo|GetAppletInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetLastSignaledAppletId&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CountRegisteredApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:IsRegistered|IsRegistered]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetAttribute&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APTU:GetSignalType|InquireNotification]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendParameter|SendParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveParameter|ReceiveParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GlanceParameter|GlanceParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:CancelParameter|CancelParameter]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| DebugFunc&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:MapProgramIdForDebug|MapProgramIdForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SetHomeMenuAppletIdForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetPreparationState&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SetPreparationState&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150140&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:PrepareToStartApplication|PrepareToStartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PreloadLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| FinishPreloadingLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToStartLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToStartSystemApplet|PrepareToStartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToStartNewestHomeMenu&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B00C4&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartApplication|StartApplication]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| WakeupApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CancelApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| StartLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartSystemApplet|StartSystemApplet]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StartNewestHomeMenu|StartNewestHomeMenu]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| OrderToCloseApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToCloseApplication(bool isJumpToHome)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00230040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToJumpToApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x00240044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| JumpToApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x002500C0&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToCloseLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToCloseSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CloseApplication&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CloseLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x00290044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CloseSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| OrderToCloseSystemApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToJumpToHomeMenu&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| JumpToHomeMenu&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToLeaveHomeMenu&lt;br /&gt;
|-&lt;br /&gt;
| 0x002E0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| LeaveHomeMenu&lt;br /&gt;
|-&lt;br /&gt;
| 0x002F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToLeaveResidentApplet This is stubbed: this just returns 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00300044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| LeaveResidentApplet This is stubbed: this just returns 0 after verifying the cmd/translate headers.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00310100&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:PrepareToDoApplicationJump|PrepareToDoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00320084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:DoApplicationJump|DoApplicationJump]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00330000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetProgramIdOnApplicationJump&lt;br /&gt;
|-&lt;br /&gt;
| 0x00340084&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendDeliverArg|SendDeliverArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00350080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| ReceiveDeliverArg&lt;br /&gt;
|-&lt;br /&gt;
| 0x00360040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:LoadSysMenuArg|LoadSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00370042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:StoreSysMenuArg|StoreSysMenuArg]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00380040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PreloadResidentApplet This is stubbed: this just returns 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00390040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| PrepareToStartResidentApplet This is stubbed: this just returns 0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x003A0044&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| StartResidentApplet This is stubbed: this just returns 0 after verifying the cmd/translate headers.&lt;br /&gt;
|-&lt;br /&gt;
| 0x003B0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| CancelLibraryApplet&lt;br /&gt;
|-&lt;br /&gt;
| 0x003C0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SendDspSleep&lt;br /&gt;
|-&lt;br /&gt;
| 0x003D0042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SendDspWakeUp&lt;br /&gt;
|-&lt;br /&gt;
| 0x003E0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| ReplySleepQuery&lt;br /&gt;
|-&lt;br /&gt;
| 0x003F0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| ReplySleepNotificationComplete&lt;br /&gt;
|-&lt;br /&gt;
| 0x00400042&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SendCaptureBufferInfo|SendCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00410040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:ReceiveCaptureBufferInfo|ReceiveCaptureBufferInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00420080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SleepSystem&lt;br /&gt;
|-&lt;br /&gt;
| 0x00430040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| NotifyToWait&lt;br /&gt;
|-&lt;br /&gt;
| 0x00440000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetSharedFont&lt;br /&gt;
|-&lt;br /&gt;
| 0x00450040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| GetWirelessRebootInfo&lt;br /&gt;
|-&lt;br /&gt;
| 0x00460104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Wrap|Wrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00470104&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:Unwrap|Unwrap]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00480100&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00490180&lt;br /&gt;
| &lt;br /&gt;
| No&lt;br /&gt;
| [[APT:Reboot|Reboot]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004A0040&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetCaptureInfo|GetCaptureInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004B00C2&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:AppletUtility|AppletUtility]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004C0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| SetFatalErrDispMode&lt;br /&gt;
|-&lt;br /&gt;
| 0x004D0080&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetAppletProgramInfo|GetAppletProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x004E0000&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
| HardwareResetAsync&lt;br /&gt;
|-&lt;br /&gt;
| 0x004F0080&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:SetApplicationCpuTimeLimit|SetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00500040&lt;br /&gt;
| [[2.2.0-X]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetApplicationCpuTimeLimit|GetApplicationCpuTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00510080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| ?&lt;br /&gt;
| Uses pm:app cmdB&lt;br /&gt;
|-&lt;br /&gt;
| 0x00520104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| ?&lt;br /&gt;
| Wrap1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00530104&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| ?&lt;br /&gt;
| Unwrap1&lt;br /&gt;
|-&lt;br /&gt;
| 0x00540040&lt;br /&gt;
| [[5.0.0-11]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00550040&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| This writes the input u8 to a NS state field.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00560000&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| This returns an u8 NS state field(which can be set by cmd 0x00550040), at cmdreply+8.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00570044&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| ?&lt;br /&gt;
| WakeupApplication2?&lt;br /&gt;
|-&lt;br /&gt;
| 0x00580002&lt;br /&gt;
| [[7.0.0-13]]&lt;br /&gt;
| Yes&lt;br /&gt;
| [[APT:GetProgramID]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x01010000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| This writes an output u8 to cmdreply indexword[2]. This uses [[PTMSYSM:CheckNew3DS]]. When a certain NS state field is non-zero, the output value is zero, otherwise the output is from [[PTMSYSM:CheckNew3DS]]. Normally this NS state field is zero, however this state field is set to 1 when [[APT:PrepareToStartApplication]] is used with flags bit8 is set.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01020000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| Wrapper for [[PTMSYSM:CheckNew3DS]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x01030000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x01040000&lt;br /&gt;
| [[8.0.0-18]]&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These &amp;quot;APT:U&amp;quot; and &amp;quot;APT:S&amp;quot; NS services can handle launching titles/&amp;quot;applets&amp;quot;, these services handle signaling for home/power button as well. Only one session for either APT service can be open at a time, normally processes close the service handle immediately once finished using the service. The commands for APT:U and APT:S are exactly the same, however certain commands are only accessible with APT:S(NS module will call [[SVC|svcBreak]] when the command isn&#039;t accessible).&lt;br /&gt;
&lt;br /&gt;
Applets returning to home-menu first use commands APT:PrepareToJumpToHomeMenu and APT:JumpToHomeMenu, followed by these commands to launch home-menu: [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]]. [[APT:PrepareToStartSystemApplet]] and [[APT:StartSystemApplet]] are also used for launching the [[Internet Browser]], the camera applet, etc.&lt;br /&gt;
&lt;br /&gt;
Processes launch applications via home-menu, not directly with [[APT:PrepareToStartApplication]] and [[APT:StartApplication]]. Regular applications can&#039;t directly launch applications since [[APT:StartApplication]] launches the process without terminating the currently running application.&lt;br /&gt;
&lt;br /&gt;
APT:PrepareToDoApplicationJump and APT:DoApplicationJump are used by applications, for launching native/&amp;lt;non-NATIVE_FIRM&amp;gt; applications. These commands notify Home Menu that title launching needs done, Home Menu does the actual title launching via NS commands.&lt;br /&gt;
&lt;br /&gt;
=&amp;quot;APT:A&amp;quot; Service=&lt;br /&gt;
This was added with [[7.0.0-13|7.0.0-X]]. Official apps built with the CTRSDK for system-version &amp;gt;=[[7.0.0-13|7.0.0-X]] normally use the &amp;quot;APT:A&amp;quot; service instead of &amp;quot;APT:U&amp;quot;. Those processes also have &amp;quot;APT:A&amp;quot; instead of &amp;quot;APT:U&amp;quot; in the service-access-control. It&#039;s unknown whether there&#039;s anything which is only accessible via &amp;quot;APT:A&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Applets=&lt;br /&gt;
NS module does not verify that the input appID for the APT service cmds are correct for that type of command. For example, a process-launch of a SystemApplet via LibraryApplet commands works fine(minus the launched-process side of APT probably).&lt;br /&gt;
&lt;br /&gt;
==System Applets==&lt;br /&gt;
On Old3DS there could only be one applet here(Home Menu, Internet Browser, Friend-List, etc) with programID-high 00040030 running at a time. On Old3DS when directly launching one of these 00040030 applets with Home Menu, the Home Menu process will terminate once the process is launched. On Old3DS when returning to Home Menu from that launched process, the Home Menu process is launched again.&lt;br /&gt;
&lt;br /&gt;
On New3DS the Home Menu process is still running/in-memory, while another system-applet is running. On New3DS it appears that the Home Menu process is terminated+relaunched, when another system-applet terminated without exiting with APT properly.&lt;br /&gt;
&lt;br /&gt;
==Library Applets==&lt;br /&gt;
Library applets can be launched by applications and regular applets. These library applets render to the screen(s) when running, etc. For example, this includes swkbd for text input. See the below appIDs in the 0x2XX range, the actual appID used is 0x4XX however.&lt;br /&gt;
&lt;br /&gt;
Input data can be sent to the library applet via the NS [[APT:SendParameter|parameter]] buffer, and/or with shared-memory with a shared-mem handle sent to the library applet. Output data from the library applet can be received by [[APT:ReceiveParameter]], the library applet can also use the specified shared-mem for output too.&lt;br /&gt;
&lt;br /&gt;
=AppIDs=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  AppID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x101&lt;br /&gt;
| Home Menu (menu)&lt;br /&gt;
|-&lt;br /&gt;
| 0x103&lt;br /&gt;
| Alternate Menu&lt;br /&gt;
|-&lt;br /&gt;
| 0x110&lt;br /&gt;
| Camera applet (CtrApp)&lt;br /&gt;
|-&lt;br /&gt;
| 0x112&lt;br /&gt;
| Friends List applet (friend)&lt;br /&gt;
|-&lt;br /&gt;
| 0x113&lt;br /&gt;
| Game Notes applet (Cherry)&lt;br /&gt;
|-&lt;br /&gt;
| 0x114&lt;br /&gt;
| [[Internet Browser]] (spider/SKATER)&lt;br /&gt;
|-&lt;br /&gt;
| 0x115&lt;br /&gt;
| Instruction Manual applet&lt;br /&gt;
|-&lt;br /&gt;
| 0x116&lt;br /&gt;
| Notifications applet (newslist)&lt;br /&gt;
|-&lt;br /&gt;
| 0x117&lt;br /&gt;
| Miiverse applet (olv)&lt;br /&gt;
|-&lt;br /&gt;
| 0x118&lt;br /&gt;
| Miiverse posting applet (solv3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x119&lt;br /&gt;
| Amiibo settings (cabinet)&lt;br /&gt;
|-&lt;br /&gt;
| 0x201&lt;br /&gt;
| Software Keyboard (swkbd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x202&lt;br /&gt;
| Mii Selector (appletEd) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x204&lt;br /&gt;
| Photo Selector (PNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x205&lt;br /&gt;
| Sound Selector (SNOTE_AP) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x206&lt;br /&gt;
| Error Display (error) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x207&lt;br /&gt;
| eShop applet (mint) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x208&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]]) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x209&lt;br /&gt;
| Notepad (memolib) (?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| Application&lt;br /&gt;
|-&lt;br /&gt;
| 0x301&lt;br /&gt;
| eShop (tiger)&lt;br /&gt;
|-&lt;br /&gt;
| 0x401&lt;br /&gt;
| Software Keyboard (swkbd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x402&lt;br /&gt;
| Mii Selector (appletEd)&lt;br /&gt;
|-&lt;br /&gt;
| 0x404&lt;br /&gt;
| Photo Selector (PNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x405&lt;br /&gt;
| Sound Selector (SNOTE_AP)&lt;br /&gt;
|-&lt;br /&gt;
| 0x406&lt;br /&gt;
| Error Display (error)&lt;br /&gt;
|-&lt;br /&gt;
| 0x407&lt;br /&gt;
| eShop applet (mint)&lt;br /&gt;
|-&lt;br /&gt;
| 0x408&lt;br /&gt;
| Circle Pad Pro Calibrator ([[Extrapad_Applet|extrapad]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x409&lt;br /&gt;
| Notepad (memolib)&lt;br /&gt;
|-&lt;br /&gt;
| 0xF10&lt;br /&gt;
| ProgramID: 0004003000008900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF11&lt;br /&gt;
| ProgramID: 000400000FFFFD00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF12&lt;br /&gt;
| ProgramID: 000400000FFFFC00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF13&lt;br /&gt;
| ProgramID: 000400000FFFFB00.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF14&lt;br /&gt;
| ProgramID: 000400000FFFF900.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF15&lt;br /&gt;
| ProgramID: 000400000FFFF800.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF16&lt;br /&gt;
| ProgramID: 000400000FFFF700.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF17&lt;br /&gt;
| ProgramID: 000400000FFFF600.&lt;br /&gt;
|-&lt;br /&gt;
| 0xF18&lt;br /&gt;
| ProgramID: 000400000FFFF500.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
These AppIDs are all for NAND titles, except for 0x300. AppIDs in the 0x1XX range are applets(programID-high 00040030), and the AppIDs in the 0x2XX range are &amp;quot;system libraries&amp;quot;(programID-high 00040030). The 0xFXX AppID range is for development NAND applications, these are not available for retail.&lt;br /&gt;
&lt;br /&gt;
Note that at some point the total AppID entry count was changed from 28 to 27.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=FS:OpenArchive&amp;diff=12878</id>
		<title>FS:OpenArchive</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=FS:OpenArchive&amp;diff=12878"/>
		<updated>2015-06-25T08:56:09Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* Archive idcodes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x080C00C2]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Archive idcode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| [[FS:OpenFile|LowPath]].Type&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| LowPath.Size&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| (LowPath.Size&amp;lt;&amp;lt;14)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 2&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| LowPath.Data pointer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Resultcode&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Archive handle lower word&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Archive handle upper word&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Archive idcodes =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Idcode&lt;br /&gt;
!  Description&lt;br /&gt;
!  Accessible via [[Filesystem_services|FS]]&lt;br /&gt;
!  Accessible via [[Filesystem_services_PXI|FSPXI]]&lt;br /&gt;
!  Requires binary [[FS:OpenFile|Lowpath]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000003&lt;br /&gt;
| Application RomFS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000004&lt;br /&gt;
| SaveData (the saveID/mediatype for this is loaded from data originally from the user process&#039; exheader)&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000006&lt;br /&gt;
| ExtSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000007&lt;br /&gt;
| Shared ExtSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000008&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000009&lt;br /&gt;
| SDMC&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000000A&lt;br /&gt;
| SDMC Write-Only&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345678&lt;br /&gt;
| ExtSaveData for BOSS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345679&lt;br /&gt;
| CARD SPI FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567B&lt;br /&gt;
| ExtSaveData, and ExtSaveData for BOSS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567C&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567D&lt;br /&gt;
| NAND RW&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567E&lt;br /&gt;
| NAND RO&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567F&lt;br /&gt;
| NAND RO Write FS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678A&lt;br /&gt;
| User/GameCard SaveData (for check), and other uses (FS can only mount the latter) (lo hi mediatype reserved)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678B&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678C&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678D&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678E&lt;br /&gt;
| SaveData, ExeFS, and RomFS (For [[Filesystem_services|fs:LDR]], only ExeFS)&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AB&lt;br /&gt;
| NAND CTR FS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AC&lt;br /&gt;
| TWL PHOTO&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AD&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AE&lt;br /&gt;
| NAND TWL FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AF&lt;br /&gt;
| NAND W FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B0&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B1&lt;br /&gt;
| Gamecard SaveData (for check). This is a wrapper for UserSaveDataForCheck: the OpenArchive code for that is called with archive-lowpath TID=0/mediatype=2(gamecard).&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B2&lt;br /&gt;
| UserSaveData (for check). This is the same as the regular SaveData archive, except with this the savedata ID and mediatype is loaded from the input archive lowpath.&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B4&lt;br /&gt;
| ? SaveData from Demo Version of Retail Game&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|}&lt;br /&gt;
Archives listed as not requiring a binary lowpath, use lowpath type [[FS:OpenFile|empty]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Archives CTR NAND, NAND RO Write FS, TWL NAND, NAND W FS, and CARD SPI FS require the corresponding process exheader access control mount flag to be set, in the exheader for any of the currently running ARM11 processes, for [[Filesystem_services_PXI|FSPXI]]. The access rights checked by [[Filesystem services|FS]] module for archive mounting with fs:USER, are stored in the process&#039; exheader accessinfo.&lt;br /&gt;
&lt;br /&gt;
The CARDSPI archive allows access to the gamecard CARD1 raw savedata flash(aka &amp;quot;cardspi:/&amp;quot; in [[FIRM|Process9]]), the file lowpath must be WCHAR &amp;quot;/&amp;quot;. The &amp;quot;NAND W FS&amp;quot; archive allows access to the raw NAND image(aka &amp;quot;wnand:/&amp;quot; in Process9), the file lowpath must be WCHAR &amp;quot;/&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:RegisterInterruptEvents&amp;diff=12874</id>
		<title>Talk:DSP:RegisterInterruptEvents</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:RegisterInterruptEvents&amp;diff=12874"/>
		<updated>2015-06-23T04:38:59Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DSP really changes header in answer? but why? applications never checks it, as far as i know&lt;br /&gt;
--[[User:Mailwl|Mailwl]] 13:47, 21 June 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
Many do that in case of an error for example some errors in the GSP come back with 0x00000040&lt;br /&gt;
--[[User:ichfly]]&lt;br /&gt;
&lt;br /&gt;
All services change the header, because it&#039;s used by the kernel to know how to send the parameters back to the calling process. [[User:Yuriks|Yuriks]] 00:49, 23 June 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
Ah, this make sense&lt;br /&gt;
--[[User:Mailwl|Mailwl]] 08:38, 23 June 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Camera_Services&amp;diff=12870</id>
		<title>Camera Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Camera_Services&amp;diff=12870"/>
		<updated>2015-06-22T15:43:26Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* y2r:u */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==cam:c (PORT_REG) ==&lt;br /&gt;
&lt;br /&gt;
==cam:s (PORT_CAL) ==&lt;br /&gt;
&lt;br /&gt;
==cam:q (PORT_QTM) ==&lt;br /&gt;
This was added with New3DS.&lt;br /&gt;
&lt;br /&gt;
==cam:u (PORT_USER)==&lt;br /&gt;
&lt;br /&gt;
== y2r:u ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| SetInputFormat(InputFormat)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0002...&lt;br /&gt;
| GetInputFormat()&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030040&lt;br /&gt;
| SetOutputFormat(OutputFormat)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0004...&lt;br /&gt;
| GetOutputFormat()&lt;br /&gt;
|-&lt;br /&gt;
| 0x00050040&lt;br /&gt;
| SetRotation(Rotation)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0006...&lt;br /&gt;
| GetRotation()&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| SetBlockAlignment(BlockAlignment)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0008...&lt;br /&gt;
| GetBlockAlignment()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0009...&lt;br /&gt;
| SetCntBit16(Value)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A...&lt;br /&gt;
| GetCntBit16()&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B...&lt;br /&gt;
| SetCntBit17(Value)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C...&lt;br /&gt;
| GetCntBit17()&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0040&lt;br /&gt;
| SetTransferEndInterrupt(bool)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E...&lt;br /&gt;
| GetTransferEndInterrupt()&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0000&lt;br /&gt;
| GetTransferEndEvent(Handle*)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00100102&lt;br /&gt;
| [[Y2R:SetSendingY|SetSendingY]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00110102&lt;br /&gt;
| [[Y2R:SetSendingU|SetSendingU]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120102&lt;br /&gt;
| [[Y2R:SetSendingV|SetSendingV]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130102&lt;br /&gt;
| [[Y2R:SetSendingYUYV|SetSendingYUYV]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140000&lt;br /&gt;
| IsDoneSendingYUYV(bool* state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150000&lt;br /&gt;
| IsDoneSendingY(bool* state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| IsDoneSendingU(bool* state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170000&lt;br /&gt;
| IsDoneSendingV(bool* state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180102&lt;br /&gt;
| SetReceiving(unsigned int pDst, unsigned int imageSize, short transferUnit, short transferStride, 0, Handle dstProcess).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190000&lt;br /&gt;
| IsDoneReceiving(bool* state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0040&lt;br /&gt;
| SetInputLineWidth(short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B...&lt;br /&gt;
| GetInputLineWidth()&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0040&lt;br /&gt;
| SetInputLines(short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D...&lt;br /&gt;
| GetInputLines()&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E....&lt;br /&gt;
| SetCoefficient(0x10-byte CoefficientStruct)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F....&lt;br /&gt;
| GetCoefficient()&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| SetStandardCoefficient(StandardCoefficient)&lt;br /&gt;
This command is equivalent to SetCoefficient(GenerateStandardCoefficient(StandardCoefficient)).&lt;br /&gt;
|-&lt;br /&gt;
| 0x0021....&lt;br /&gt;
| GenerateStandardCoefficient(StandardCoefficient)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00220040&lt;br /&gt;
| SetAlpha(short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0023....&lt;br /&gt;
| GetAlpha()&lt;br /&gt;
|-&lt;br /&gt;
| 0x0024....&lt;br /&gt;
| SetUnknownParams(0x20 bytes UnknownParamBlock)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0025....&lt;br /&gt;
| GetUnknownParams&lt;br /&gt;
|-&lt;br /&gt;
| 0x00260000&lt;br /&gt;
| StartConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00270000&lt;br /&gt;
| StopConversion&lt;br /&gt;
|-&lt;br /&gt;
| 0x00280000&lt;br /&gt;
| IsBusyConversion(bool * state)&lt;br /&gt;
|-&lt;br /&gt;
| 0x002901C0&lt;br /&gt;
| [[Y2R:SetConversionParams|SetConversionParams]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x002A0000&lt;br /&gt;
| PingProcess(unsigned char * connectedNumber)&lt;br /&gt;
|-&lt;br /&gt;
| 0x002B0000&lt;br /&gt;
| DriverInitialize&lt;br /&gt;
|-&lt;br /&gt;
| 0x002C0000&lt;br /&gt;
| DriverFinalize&lt;br /&gt;
|-&lt;br /&gt;
| 0x002D....&lt;br /&gt;
| [[Y2R:GetConversionParams|GetConversionParams]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;InputFormat&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Enum&lt;br /&gt;
!  Value&lt;br /&gt;
|-&lt;br /&gt;
| INPUT_YUV422_INDIV_8&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| INPUT_YUV420_INDIV_8&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| INPUT_YUV422_INDIV_16&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| INPUT_YUV420_INDIV_16&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| INPUT_YUV422_BATCH&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;OutputFormat&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Enum&lt;br /&gt;
!  Value&lt;br /&gt;
|-&lt;br /&gt;
| OUTPUT_RGB_32&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| OUTPUT_RGB_24&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| OUTPUT_RGB_16_555&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| OUTPUT_RGB_16_565&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Rotation&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Enum&lt;br /&gt;
!  Value&lt;br /&gt;
|-&lt;br /&gt;
| ROTATION_NONE&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| ROTATION_CLOCKWISE_90&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| ROTATION_CLOCKWISE_180&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| ROTATION_CLOCKWISE_270&lt;br /&gt;
| 0x3&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;BlockAlignment&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Enum&lt;br /&gt;
! Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| BLOCK_LINE&lt;br /&gt;
| 0x0&lt;br /&gt;
| Output buffer&#039;s pixels are arranged linearly. Used when outputting to the framebuffer.&lt;br /&gt;
|-&lt;br /&gt;
| BLOCK_8_BY_8&lt;br /&gt;
| 0x1&lt;br /&gt;
| Output buffer&#039;s pixels are morton swizzled. Used when outputting to a GPU texture.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;StandardCoefficient&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Enum&lt;br /&gt;
!  Value&lt;br /&gt;
|-&lt;br /&gt;
| COEFFICIENT_ITU_R_BT_601&lt;br /&gt;
| 0x0&lt;br /&gt;
|-&lt;br /&gt;
| COEFFICIENT_ITU_R_BT_709&lt;br /&gt;
| 0x1&lt;br /&gt;
|-&lt;br /&gt;
| COEFFICIENT_ITU_R_BT_601_SCALING&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| COEFFICIENT_ITU_R_BT_709_SCALING&lt;br /&gt;
| 0x3&lt;br /&gt;
|-&lt;br /&gt;
| COEFFICIENT_MAX&lt;br /&gt;
| 0x4&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:RegisterInterruptEvents&amp;diff=12857</id>
		<title>Talk:DSP:RegisterInterruptEvents</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:RegisterInterruptEvents&amp;diff=12857"/>
		<updated>2015-06-21T09:47:04Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: Created page with &amp;quot;DSP really changes header in answer? but why? applications never checks it, as far as i know --~~~~&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;DSP really changes header in answer? but why? applications never checks it, as far as i know&lt;br /&gt;
--[[User:Mailwl|Mailwl]] 13:47, 21 June 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12844</id>
		<title>Talk:DSP:LoadComponent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12844"/>
		<updated>2015-06-18T23:42:54Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I would prefer if you didn&#039;t. Thanks.&lt;br /&gt;
&lt;br /&gt;
- [[User:Plutooo|Plutooo]] 22:18, 18 June 2015 (CEST)&lt;br /&gt;
----&lt;br /&gt;
ok, i&#039;ll discard all changes, i made. &lt;br /&gt;
Oops, I don&#039;t know, how to do it. Just copy old version? How in history remain old version&lt;br /&gt;
--[[User:Mailwl|Mailwl]] 03:42, 19 June 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12843</id>
		<title>Talk:DSP:LoadComponent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12843"/>
		<updated>2015-06-18T23:36:08Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
I would prefer if you didn&#039;t. Thanks.&lt;br /&gt;
&lt;br /&gt;
- [[User:Plutooo|Plutooo]] 22:18, 18 June 2015 (CEST)&lt;br /&gt;
----&lt;br /&gt;
ok, i discard all changes&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12841</id>
		<title>Talk:DSP:LoadComponent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12841"/>
		<updated>2015-06-18T14:04:28Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is CTR SDK version of Component is signed too?&lt;br /&gt;
It differs from games version by size&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Hi, please do not make wiki contributions based on the official CTR SDK.&lt;br /&gt;
This wiki is for people to share their reverse engineering notes; this is not a 3DS version of Wikileaks.&lt;br /&gt;
Anyway, the DSP firmware is signed and the DSP module has a separate RSA-key for devunits.&lt;br /&gt;
&lt;br /&gt;
- [[User:Plutooo|Plutooo]] 17:12, 18 June 2015 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Ok, I got it! BTW, I did reverse engineering of CTR to fill the table of name functions (they is not used directly, too low level). &lt;br /&gt;
It is allowed in this case? I think it may help in DSP emulation&lt;br /&gt;
&lt;br /&gt;
--[[User:Mailwl|Mailwl]] 18:04, 18 June 2015 (CEST)&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12839</id>
		<title>Talk:DSP:LoadComponent</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Talk:DSP:LoadComponent&amp;diff=12839"/>
		<updated>2015-06-18T07:49:09Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: Created page with &amp;quot;Is CTR SDK version of Component is signed too? It differs from games version by size&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is CTR SDK version of Component is signed too?&lt;br /&gt;
It differs from games version by size&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12838</id>
		<title>DSP Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12838"/>
		<updated>2015-06-18T07:44:17Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: all functions described (still no parameters for all)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= DSP service &amp;quot;dsp::DSP&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| RecvData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| RecvDataIsReady(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030080&lt;br /&gt;
| SendData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| SendDataIsEmpty(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| SendFifoEx(unsigned short, unsigned short const*, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000600C0&lt;br /&gt;
| RecvFifoEx(unsigned short *, unsigned short, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[DSP:WriteReg0x10|WriteReg0x10]] SetSemaphore&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| GetSemaphore(unsigned short * pMask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| ClearSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| MaskSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| CheckSemaphoreRequest(bool * pIsRequested )&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| [[DSP:ConvertProcessAddressFromDspDram|ConvertProcessAddressFromDspDram]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[DSP:WriteProcessPipe|WriteProcessPipe]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E00C0&lt;br /&gt;
| ReadPipe(int, int, unsigned char *, unsigned short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetPipeReadableSize(int, int, unsigned short *)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C0&lt;br /&gt;
| [[DSP:ReadPipeIfPossible|ReadPipeIfPossible]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C2&lt;br /&gt;
| [[DSP:LoadComponent|LoadComponent]]. This requires RSA-signed DSP firmware specified via the input buffer for this command, the firmware data is eventually written to DSPmem+0(0x1FF00000).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| UnloadComponent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130082&lt;br /&gt;
| FlushDataCache (The buffer must be located in the 0x14000000 region)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00140082&lt;br /&gt;
| InvalidateDCache (The buffer must be located in either the 0x14000000 region, or the DSP memory region)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150082&lt;br /&gt;
| [[DSP:RegisterInterruptEvents|RegisterInterruptEvents(param0, param1, 0, eventhandle)]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[DSP:GetSemaphoreEventHandle|GetSemaphoreEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| [[DSP:SetSemaphoreMask|SetSemaphoreMask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| GetPhysicalAddress (0x14000000+ -&amp;gt; 0x20000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0x08000000-0x0E000000 -&amp;gt; 0x00000000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| GetVirtualAddress (0x20000000+ -&amp;gt; 0x14000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0042&lt;br /&gt;
| SetIirFilterI2S1. Wrapper for cdc:DSP cmd 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0042&lt;br /&gt;
| SetIirFilterI2S2. Wrapper for cdc:DSP cmd 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0082&lt;br /&gt;
| SetIirFilterEQ. Wrapper for cdc:DSP cmd 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D00C0&lt;br /&gt;
| ReadMultiEx_SPI2(unsigned char, unsigned char, unsigned char *, unsigned char) (Wrapper for cdc:DSP cmd 4)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E00C2&lt;br /&gt;
| WriteMultiEx_SPI2(unsigned char, unsigned char, unsigned char const*, unsigned char) (Wrapper for cdc:DSP cmd 5)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0000&lt;br /&gt;
| GetHeadphoneStatus(bool *isConnected). Wrapper for cdc:DSP cmd 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x00200040&lt;br /&gt;
| ForceHeadphoneOut(bool forceout) (Wrapper for cdc:DSP cmd 8)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| GetIsDspOccupied(bool *) returns a byte (can be 1 or 0) can be set to 1 in LoadComponent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the main service for playing audio. The [[CSND_Services|CSND]] service can be used for playing audio as well, however most processes use this DSP service for playing audio. The DSP and CSND hardware can play audio simultaneously.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12837</id>
		<title>DSP Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12837"/>
		<updated>2015-06-18T07:37:51Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: /* DSP service &amp;quot;dsp::DSP&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= DSP service &amp;quot;dsp::DSP&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| RecvData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| RecvDataIsReady(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030080&lt;br /&gt;
| SendData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| SendDataIsEmpty(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| SendFifoEx(unsigned short, unsigned short const*, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000600C0&lt;br /&gt;
| RecvFifoEx(unsigned short *, unsigned short, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[DSP:WriteReg0x10|WriteReg0x10]] SetSemaphore&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| GetSemaphore(unsigned short * pMask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| ClearSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| MaskSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| CheckSemaphoreRequest(bool * pIsRequested )&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| [[DSP:ConvertProcessAddressFromDspDram|ConvertProcessAddressFromDspDram]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[DSP:WriteProcessPipe|WriteProcessPipe]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E00C0&lt;br /&gt;
| ReadPipe(int, int, unsigned char *, unsigned short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetPipeReadableSize(int, int, unsigned short *)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C0&lt;br /&gt;
| [[DSP:ReadPipeIfPossible|ReadPipeIfPossible]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C2&lt;br /&gt;
| [[DSP:LoadComponent|LoadComponent]]. This requires RSA-signed DSP firmware specified via the input buffer for this command, the firmware data is eventually written to DSPmem+0(0x1FF00000).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| UnloadComponent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130082&lt;br /&gt;
| FlushDataCache (The buffer must be located in the 0x14000000 region)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00140082&lt;br /&gt;
| InvalidateDCache (The buffer must be located in either the 0x14000000 region, or the DSP memory region)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150082&lt;br /&gt;
| [[DSP:RegisterInterruptEvents|RegisterInterruptEvents(param0, param1, 0, eventhandle)]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[DSP:GetSemaphoreEventHandle|GetSemaphoreEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| [[DSP:SetSemaphoreMask|SetSemaphoreMask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| GetPhysicalAddress (0x14000000+ -&amp;gt; 0x20000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0x08000000-0x0E000000 -&amp;gt; 0x00000000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| GetVirtualAddress (0x20000000+ -&amp;gt; 0x14000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0042&lt;br /&gt;
| SetIirFilterI2S1. Wrapper for cdc:DSP cmd 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0042&lt;br /&gt;
| SetIirFilterI2S2. Wrapper for cdc:DSP cmd 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0082&lt;br /&gt;
| SetIirFilterEQ. Wrapper for cdc:DSP cmd 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 4&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 5&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0000&lt;br /&gt;
| GetHeadphoneStatus. Wrapper for cdc:DSP cmd 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 8&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| GetIsDspOccupied returns a byte (can be 1 or 0) can be set to 1 in LoadComponent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the main service for playing audio. The [[CSND_Services|CSND]] service can be used for playing audio as well, however most processes use this DSP service for playing audio. The DSP and CSND hardware can play audio simultaneously.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12836</id>
		<title>DSP Services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=DSP_Services&amp;diff=12836"/>
		<updated>2015-06-18T07:36:59Z</updated>

		<summary type="html">&lt;p&gt;Mailwl: add some requests&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
= DSP service &amp;quot;dsp::DSP&amp;quot; =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010040&lt;br /&gt;
| RecvData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020040&lt;br /&gt;
| RecvDataIsReady(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00030080&lt;br /&gt;
| SendData(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00040040&lt;br /&gt;
| SendDataIsEmpty(chan 0-3)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000500C2&lt;br /&gt;
| SendFifoEx(unsigned short, unsigned short const*, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000600C0&lt;br /&gt;
| RecvFifoEx(unsigned short *, unsigned short, unsigned int, unsigned int)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00070040&lt;br /&gt;
| [[DSP:WriteReg0x10|WriteReg0x10]] SetSemaphore&lt;br /&gt;
|-&lt;br /&gt;
| 0x00080000&lt;br /&gt;
| GetSemaphore(unsigned short * pMask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00090040&lt;br /&gt;
| ClearSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000A0040&lt;br /&gt;
| MaskSemaphore(unsigned short mask)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000B0000&lt;br /&gt;
| CheckSemaphoreRequest(bool * pIsRequested )&lt;br /&gt;
|-&lt;br /&gt;
| 0x000C0040&lt;br /&gt;
| [[DSP:ConvertProcessAddressFromDspDram|ConvertProcessAddressFromDspDram]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000D0082&lt;br /&gt;
| [[DSP:WriteProcessPipe|WriteProcessPipe]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x000E00C0&lt;br /&gt;
| ReadPipe(int, int, unsigned char *, unsigned short)&lt;br /&gt;
|-&lt;br /&gt;
| 0x000F0080&lt;br /&gt;
| GetPipeReadableSize(int, int, unsigned short *)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001000C0&lt;br /&gt;
| [[DSP:ReadPipeIfPossible|ReadPipeIfPossible]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x001100C2&lt;br /&gt;
| [[DSP:LoadComponent|LoadComponent]]. This requires RSA-signed DSP firmware specified via the input buffer for this command, the firmware data is eventually written to DSPmem+0(0x1FF00000).&lt;br /&gt;
|-&lt;br /&gt;
| 0x00120000&lt;br /&gt;
| UnloadComponent&lt;br /&gt;
|-&lt;br /&gt;
| 0x00130082&lt;br /&gt;
| FlushDataCache (The buffer must be located in the 0x14000000 region)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x00140082&lt;br /&gt;
| InvalidateDCache (The buffer must be located in either the 0x14000000 region, or the DSP memory region)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00150082&lt;br /&gt;
| [[DSP:RegisterInterruptEvents|RegisterInterruptEvents(param0, param1, 0, eventhandle)]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00160000&lt;br /&gt;
| [[DSP:GetSemaphoreEventHandle|GetSemaphoreEventHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00170040&lt;br /&gt;
| [[DSP:SetSemaphoreMask|SetSemaphoreMask]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x00180040&lt;br /&gt;
| GetPhysicalAddress (0x14000000+ -&amp;gt; 0x20000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0x08000000-0x0E000000 -&amp;gt; 0x00000000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x00190040&lt;br /&gt;
| GetVirtualAddress (0x20000000+ -&amp;gt; 0x14000000+, 0x1FF00000+ -&amp;gt; 0x1FF00000+, 0 otherwise)&lt;br /&gt;
|-&lt;br /&gt;
| 0x001A0042&lt;br /&gt;
| SetIirFilterI2S1. Wrapper for cdc:DSP cmd 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x001B0042&lt;br /&gt;
| SetIirFilterI2S1. Wrapper for cdc:DSP cmd 2&lt;br /&gt;
|-&lt;br /&gt;
| 0x001C0082&lt;br /&gt;
| SetIirFilterEQ. Wrapper for cdc:DSP cmd 3&lt;br /&gt;
|-&lt;br /&gt;
| 0x001D....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 4&lt;br /&gt;
|-&lt;br /&gt;
| 0x001E....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 5&lt;br /&gt;
|-&lt;br /&gt;
| 0x001F0000&lt;br /&gt;
| GetHeadphoneStatus. Wrapper for cdc:DSP cmd 6&lt;br /&gt;
|-&lt;br /&gt;
| 0x0020....&lt;br /&gt;
| Wrapper for cdc:DSP cmd 8&lt;br /&gt;
|-&lt;br /&gt;
| 0x00210000&lt;br /&gt;
| GetIsDspOccupied returns a byte (can be 1 or 0) can be set to 1 in LoadComponent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is the main service for playing audio. The [[CSND_Services|CSND]] service can be used for playing audio as well, however most processes use this DSP service for playing audio. The DSP and CSND hardware can play audio simultaneously.&lt;/div&gt;</summary>
		<author><name>Mailwl</name></author>
	</entry>
</feed>