<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Endrift</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Endrift"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Endrift"/>
	<updated>2026-05-05T06:09:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PTM_services&amp;diff=9982</id>
		<title>PTM services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PTM_services&amp;diff=9982"/>
		<updated>2020-10-01T05:51:14Z</updated>

		<summary type="html">&lt;p&gt;Endrift: Add some info on the BatteryChargeInfoFields struct&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= fan =&lt;br /&gt;
This is &amp;quot;nn::fan::detail::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenController&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IController ==&lt;br /&gt;
This is &amp;quot;nn::fan::detail::IController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetRotationSpeedLevel&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetRotationSpeedLevelByDiff&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetRotationSpeedLevel&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetRotationRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetRotationRate&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [1.0.0-6.2.0] EnableFan&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [1.0.0-6.2.0] DisableFan&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [1.0.0-6.2.0] GetActualRotationSpeedLevel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] SetRotationSpeedLevelByDiff/SetRotationRate no longer takes any input. GetRotationRate no longer returns output. These were presumably replaced with new cmds?&lt;br /&gt;
&lt;br /&gt;
= psm =&lt;br /&gt;
This is &amp;quot;nn::psm::IPsmServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetBatteryChargePercentage]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetChargerType]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#EnableBatteryCharging]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#DisableBatteryCharging]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#IsBatteryChargingEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#AcquireControllerPowerSupply]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ReleaseControllerPowerSupply]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#EnableEnoughPowerChargeEmulation]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#DisableEnoughPowerChargeEmulation]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#EnableFastBatteryCharging]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#DisableFastBatteryCharging]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GetBatteryVoltageState]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#GetRawBatteryChargePercentage]]&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#IsEnoughPowerSupplied]]&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#GetBatteryAgePercentage]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetBatteryChargeInfoEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#GetBatteryChargeInfoFields]]&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [3.0.0+] GetBatteryChargeCalibratedEvent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetBatteryChargePercentage ==&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
== GetChargerType ==&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
== EnableBatteryCharging ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DisableBatteryCharging ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== IsBatteryChargingEnabled ==&lt;br /&gt;
No input, returns an output u8.&lt;br /&gt;
&lt;br /&gt;
== AcquireControllerPowerSupply ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== ReleaseControllerPowerSupply ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
No input, returns an output [[#IPsmSession]].&lt;br /&gt;
&lt;br /&gt;
== EnableEnoughPowerChargeEmulation ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DisableEnoughPowerChargeEmulation ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== EnableFastBatteryCharging ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== DisableFastBatteryCharging ==&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
== GetBatteryVoltageState ==&lt;br /&gt;
No input, returns an output u32.&lt;br /&gt;
&lt;br /&gt;
== GetRawBatteryChargePercentage ==&lt;br /&gt;
No input, returns an output double.&lt;br /&gt;
&lt;br /&gt;
== IsEnoughPowerSupplied ==&lt;br /&gt;
No input, returns an output bool.&lt;br /&gt;
&lt;br /&gt;
== GetBatteryAgePercentage ==&lt;br /&gt;
No input, returns an output double.&lt;br /&gt;
&lt;br /&gt;
== GetBatteryChargeInfoEvent ==&lt;br /&gt;
No input, returns an output Event handle.&lt;br /&gt;
&lt;br /&gt;
== GetBatteryChargeInfoFields ==&lt;br /&gt;
No input, returns an output 0x40-byte struct:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x4 || Seems to be a decimal value related to the value at offset 0x4&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x4 || Seems to be a decimal value related to the value at offset 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x4 || Possibly a set a flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x4 || Possibly a set a flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || Possibly an emum&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || Possibly a set a flags&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Possibly an enum&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x4 || u32. Raw battery charge per cent-mille (i.e. 100% = 100000 pcm)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x4 || u32. Battery age per cent-mille (i.e. 100% = 100000 pcm)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x4 || Boolean? Receiving voltage?&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x4 || Boolean? Receiving current?&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x4 || u32. Input voltage in mV&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x4 || u32. Input current in mA&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x4 || Possibly a set a flags (potentially 0x100 for charging, 0x1 for undocked)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPsmSession ==&lt;br /&gt;
This is &amp;quot;nn::psm::IPsmSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#BindStateChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnbindStateChangeEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetChargerTypeChangeEventEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#SetPowerSupplyChangeEventEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetBatteryVoltageStateChangeEventEnabled]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BindStateChangeEvent ===&lt;br /&gt;
No input, returns an output event with autoclear disabled.&lt;br /&gt;
&lt;br /&gt;
=== UnbindStateChangeEvent ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
=== SetChargerTypeChangeEventEnabled ===&lt;br /&gt;
Takes an input u8 bool, no output.&lt;br /&gt;
&lt;br /&gt;
=== SetPowerSupplyChangeEventEnabled ===&lt;br /&gt;
Takes an input u8 bool, no output.&lt;br /&gt;
&lt;br /&gt;
=== SetBatteryVoltageStateChangeEventEnabled ===&lt;br /&gt;
Takes an input u8 bool, no output.&lt;br /&gt;
&lt;br /&gt;
= tc =&lt;br /&gt;
This is &amp;quot;nn::tc::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetOperatingMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetThermalEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2 || IsActionAllowed&lt;br /&gt;
|-&lt;br /&gt;
| 3 || EnableVirtualTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 4 || DisableVirtualTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetVirtualTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 6 || EnableFanControl&lt;br /&gt;
|-&lt;br /&gt;
| 7 || DisableFanControl&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsFanControlEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] GetSkinTemperatureMilliC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= ts =&lt;br /&gt;
This is &amp;quot;nn::ts::server::IMeasurementServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetTemperatureRange]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetTemperature]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetMeasurementMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetTemperatureMilliC]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [8.0.0+] ? (Takes a total of 4-bytes of input, returns an [[#IUnknown0]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IUnknown0 ==&lt;br /&gt;
Added with [8.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || [10.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetTemperatureRange ==&lt;br /&gt;
Takes an u8 [[#Location]] and returns an s32 minimum temperature + s32 maximum temperature.&lt;br /&gt;
&lt;br /&gt;
The returned temperature values are in Celsius.&lt;br /&gt;
&lt;br /&gt;
== GetTemperature ==&lt;br /&gt;
Takes an u8 [[#Location]] and returns an output s32.&lt;br /&gt;
&lt;br /&gt;
The output is the temperature in Celsius.&lt;br /&gt;
&lt;br /&gt;
== SetMeasurementMode ==&lt;br /&gt;
Takes an u8 [[#Location]] and an u8 MeasurementMode, no output.&lt;br /&gt;
&lt;br /&gt;
== GetTemperatureMilliC ==&lt;br /&gt;
Takes an u8 [[#Location]] and returns an output s32.&lt;br /&gt;
&lt;br /&gt;
The output is the temperature in MilliC.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Internal&lt;br /&gt;
|-&lt;br /&gt;
| 1 || External&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcm =&lt;br /&gt;
This is &amp;quot;nn::pcm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] This service was moved to &#039;&#039;&#039;nvdbgsvc&#039;&#039;&#039; and is only available to SDEV units. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || IsSupported&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ReadCurrentPower&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [4.0.0+] IsServiceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [4.0.0+] ReadCurrentVoltage&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= apm:am =&lt;br /&gt;
This is &amp;quot;nn::apm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [8.0.0+] and replaces the old [[PPC_services#apm|apm]] service.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [7.0.0+] [[#IsCpuOverclockEnabled]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Returns an [[#ISession]].&lt;br /&gt;
&lt;br /&gt;
== IsCpuOverclockEnabled ==&lt;br /&gt;
No input, returns an output u8 bool.&lt;br /&gt;
&lt;br /&gt;
= apm:sys =&lt;br /&gt;
This is &amp;quot;nn::apm::ISystemManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestPerformanceMode&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceEvent&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetThrottlingState&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetLastThrottlingState&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ClearLastThrottlingState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [5.0.0+] LoadAndApplySettings&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [7.0.0+] [[#SetCpuBoostMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [7.0.0+] [[#GetCurrentPerformanceConfiguration]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetPerformanceEvent ==&lt;br /&gt;
Returns an [[#ISession]].&lt;br /&gt;
&lt;br /&gt;
== SetCpuBoostMode ==&lt;br /&gt;
Takes an u32 [[#CpuBoostMode]].&lt;br /&gt;
&lt;br /&gt;
=== CpuBoostMode ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Mode || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Disabled.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Boost CPU. Additionally, throttle GPU to minimum.&lt;br /&gt;
Use [[#PerformanceConfiguration|performance configurations]] 0x92220009 and 0x9222000A, or 0x9222000B and 0x9222000C.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Conserve power. Only throttle GPU to minimum.&lt;br /&gt;
Use [[#PerformanceConfiguration|performance configurations]] 0x9222000B and 0x9222000C.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetCurrentPerformanceConfiguration ==&lt;br /&gt;
Returns the currently active [[#PerformanceConfiguration]] (default value is 0x00020003).&lt;br /&gt;
&lt;br /&gt;
= ISession =&lt;br /&gt;
This is &amp;quot;nn::apm::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPerformanceConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPerformanceConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [8.0.0+] [[#SetCpuOverclockEnabled]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetPerformanceConfiguration ==&lt;br /&gt;
Takes an u32 [[#PerformanceMode]] and an u32 [[#PerformanceConfiguration]].&lt;br /&gt;
&lt;br /&gt;
== GetPerformanceConfiguration ==&lt;br /&gt;
Takes an u32 [[#PerformanceMode]] and returns an output u32 [[#PerformanceConfiguration]].&lt;br /&gt;
&lt;br /&gt;
== SetCpuOverclockEnabled ==&lt;br /&gt;
Takes an input u8 bool, no output.&lt;br /&gt;
&lt;br /&gt;
== PerformanceMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Normal&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Boost&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PerformanceConfiguration ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || CPU clock || GPU clock || Memory clock&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010000 || 1020.0 || 384.0 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010001 || 1020.0 || 768.0 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00010002 || 1224.0 || 691.2 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020000 || 1020.0 || 230.4 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020001 || 1020.0 || 307.2 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020002 || 1224.0 || 230.4 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020003 || 1020.0 || 307.2 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020004 || 1020.0 || 384.0 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020005 || 1020.0 || 307.2 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x00020006 || 1020.0 || 384.0 || 1065.6&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220007 || 1020.0  || 460.8 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| 0x92220008 || 1020.0 || 460.8 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x92220009 || 1785.0 || 76.8 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x9222000A || 1785.0 || 76.8 || 1331.2&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x9222000B || 1020.0 || 76.8 || 1600.0&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] 0x9222000C || 1020.0 || 76.8 || 1331.2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Clocks are all in MHz.&lt;br /&gt;
&lt;br /&gt;
Configurations 0x10001 and 0x20000 are only available while docked. Configurations 0x10002 and 0x20002 are only available for SDEV units.&lt;br /&gt;
&lt;br /&gt;
= fgm, fgm:0, fgm:1, fgm:2, fgm:3, fgm:4, fgm:5, fgm:6, fgm:7, fgm:9 =&lt;br /&gt;
These are &amp;quot;nn::fgm::sf::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Each service represents a different priority from 0 to 9. The &amp;quot;fgm&amp;quot; service represents priority 8 (default).&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Only &amp;quot;fgm&amp;quot;, &amp;quot;fgm:0&amp;quot; and &amp;quot;fgm:9&amp;quot; are now valid.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
No input. Returns an [[#IRequest]].&lt;br /&gt;
&lt;br /&gt;
== IRequest ==&lt;br /&gt;
This is &amp;quot;nn::fgm::sf::IRequest&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Initialize_2|Initialize]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Set|Set]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#Get|Get]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#Cancel|Cancel]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialize ===&lt;br /&gt;
Takes a PID-descriptor, a [[#Module]] and an u64. Returns an Event handle with EventClearMode 0.&lt;br /&gt;
&lt;br /&gt;
=== Set ===&lt;br /&gt;
Takes 2 u32s &#039;&#039;&#039;ClockMinRate&#039;&#039;&#039; and &#039;&#039;&#039;ClockMaxRate&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== Get ===&lt;br /&gt;
No input. Returns an u32 &#039;&#039;&#039;ClockRate&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Cancel ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
= fgm:dbg =&lt;br /&gt;
This is &amp;quot;nn::fgm::sf::IDebugger&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Read&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Cancel&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= lbl =&lt;br /&gt;
This is &amp;quot;nn::lbl::detail::ILblController&amp;quot;. This was moved from [[Backlight_services|lbl]] with [10.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SaveCurrentSetting&lt;br /&gt;
|-&lt;br /&gt;
| 1 || LoadCurrentSetting&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetCurrentBrightnessSetting&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetCurrentBrightnessSetting&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ApplyCurrentBrightnessSettingToBacklight&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBrightnessSettingAppliedToBacklight&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SwitchBacklightOn&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SwitchBacklightOff&lt;br /&gt;
|-&lt;br /&gt;
| 8 || GetBacklightSwitchStatus&lt;br /&gt;
|-&lt;br /&gt;
| 9 || EnableDimming&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DisableDimming&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IsDimmingEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 12 || EnableAutoBrightnessControl&lt;br /&gt;
|-&lt;br /&gt;
| 13 || DisableAutoBrightnessControl&lt;br /&gt;
|-&lt;br /&gt;
| 14 || IsAutoBrightnessControlEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SetAmbientLightSensorValue&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#GetAmbientLightSensorValue]]&lt;br /&gt;
|-&lt;br /&gt;
| 17 || SetBrightnessReflectionDelayLevel&lt;br /&gt;
|-&lt;br /&gt;
| 18 || GetBrightnessReflectionDelayLevel&lt;br /&gt;
|-&lt;br /&gt;
| 19 || SetCurrentBrightnessMapping&lt;br /&gt;
|-&lt;br /&gt;
| 20 || GetCurrentBrightnessMapping&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SetCurrentAmbientLightSensorMapping&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetCurrentAmbientLightSensorMapping&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [3.0.0+] IsAmbientLightSensorAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] SetCurrentBrightnessSettingForVrMode&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] GetCurrentBrightnessSettingForVrMode&lt;br /&gt;
|-&lt;br /&gt;
| 26 || [3.0.0+] [[#EnableVrMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 27 || [3.0.0+] [[#DisableVrMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 28 || [3.0.0+] [[#IsVrModeEnabled]]&lt;br /&gt;
|-&lt;br /&gt;
| 29 || [7.0.0+] IsAutoBrightnessControlSupported&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Ambient Light Sensor Notes ==&lt;br /&gt;
The BH1730 outputs 2 values. Visible light and IR light. This is then calculated through an algorithm that checks for Gain, Measurement time, filter qualities and ouputs lux (max correct measurement of 100K lux).&lt;br /&gt;
The default values are Gain 64x and ITIME of 38 (256 - 218). This allows for a max lux value of 17972 lux when visible light value is maximum and IR light is 0. When both of them are on their limit, the output is 1192 lux.&lt;br /&gt;
The sensor is fully configurable.&lt;br /&gt;
&lt;br /&gt;
== GetAmbientLightSensorValue ==&lt;br /&gt;
No input. Before 5.x, outputs lux in float. (5.0.0+) Returns an output struct:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || bOverLimit. (u32) Equals to 1 if visible or IR light data is over 65534.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || fLux. (float) Value in lux from the ambient light sensor.&lt;br /&gt;
|}&lt;br /&gt;
Note: if bOverLimit=1 and the default ALS configuration is used, the measurement of fLux should not be considered and the actual max value depends on the type of light. Ranges from 12.5K - 17.5K.&lt;br /&gt;
&lt;br /&gt;
== GetCurrentBrightnessSetting ==&lt;br /&gt;
No input. Returns an output u32 int of the current backlight level.&lt;br /&gt;
&lt;br /&gt;
== GetBrightnessSettingAppliedToBacklight ==&lt;br /&gt;
No input. Returns an output u32 int of the backlight level computed from the ambient light sensor. &lt;br /&gt;
&lt;br /&gt;
== IsAutoBrightnessControlEnabled ==&lt;br /&gt;
No input. Returns an output u8 bool indicating whether auto brightness is enabled. &lt;br /&gt;
&lt;br /&gt;
== EnableVrMode ==&lt;br /&gt;
No input/output. Used by [[AM_services#SetVrModeEnabled]].&lt;br /&gt;
&lt;br /&gt;
Sets a global state field to 0x1.&lt;br /&gt;
&lt;br /&gt;
== DisableVrMode ==&lt;br /&gt;
No input/output. Used by [[AM_services#SetVrModeEnabled]].&lt;br /&gt;
&lt;br /&gt;
Sets the global state field used by [[#EnableVrMode]] to 0x0.&lt;br /&gt;
&lt;br /&gt;
== IsVrModeEnabled ==&lt;br /&gt;
No input. Returns an output u8 bool set by the above commands.&lt;br /&gt;
&lt;br /&gt;
= Module =&lt;br /&gt;
This is &amp;quot;nn::fgm::Module&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block&lt;br /&gt;
|-&lt;br /&gt;
| 0 || CPU&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GPU&lt;br /&gt;
|-&lt;br /&gt;
| 2 || EMC&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SCLK&lt;br /&gt;
|-&lt;br /&gt;
| 4 || MSELECT&lt;br /&gt;
|-&lt;br /&gt;
| 5 || NVDEC&lt;br /&gt;
|-&lt;br /&gt;
| 6 || NVENC&lt;br /&gt;
|-&lt;br /&gt;
| 7 || NVJPG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Settings =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Key || Size || Notes&lt;br /&gt;
|-&lt;br /&gt;
| background_download_stress_testing_storage || strlen || &amp;quot;sdcard&amp;quot;, &amp;quot;builtin&amp;quot;, &amp;quot;system&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| battery_draining_enabled || 1 || ?&lt;br /&gt;
|-&lt;br /&gt;
| fs_access_log_mode || strlen || &amp;quot;log&amp;quot;, &amp;quot;sdcard&amp;quot;, &amp;quot;log+sdcard&amp;quot;, &amp;quot;off&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| fs_speed_emulation_mode || strlen || &amp;quot;faster&amp;quot;, &amp;quot;slower&amp;quot;, &amp;quot;random&amp;quot;, &amp;quot;off&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| host_romfs_redirection_target || strlen || &amp;quot;builtin&amp;quot;, &amp;quot;off&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| idle_time_detect_mode || strlen || &amp;quot;on&amp;quot;, &amp;quot;off&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| initial_tick_value || strlen || &amp;quot;7days&amp;quot;, &amp;quot;14days&amp;quot;, &amp;quot;30days&amp;quot;, &amp;quot;90days&amp;quot;, &amp;quot;hex&amp;quot;: ?.&lt;br /&gt;
|-&lt;br /&gt;
| memory_mode || strlen || &amp;quot;auto&amp;quot;, &amp;quot;4GB&amp;quot;, &amp;quot;6GB&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| needs_update_vulnerability_policy || strlen || &amp;quot;default&amp;quot;: ?, &amp;quot;force_true&amp;quot;: ?, &amp;quot;force_false&amp;quot;: ?.&lt;br /&gt;
|-&lt;br /&gt;
| operation_mode_policy || strlen || &amp;quot;auto&amp;quot;: ?, &amp;quot;handheld&amp;quot;, &amp;quot;console&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
| performance_mode_policy || strlen || &amp;quot;auto&amp;quot;: use boost mode when docked. &amp;quot;normal&amp;quot;: never use boost mode. &amp;quot;boost&amp;quot;: always use boost mode (SDEV only).&lt;br /&gt;
|-&lt;br /&gt;
| screenshot_target || strlen || &amp;quot;screenshot&amp;quot;: ?, &amp;quot;physical&amp;quot;: ?.&lt;br /&gt;
|-&lt;br /&gt;
| sdev_cpu_overclock_enabled || 1 || SDEV only. Used to allow access to 1224MHz CPU mode.&lt;br /&gt;
|-&lt;br /&gt;
| sdev_throttling_additional_delay_us || 4 || SDEV only.&lt;br /&gt;
|-&lt;br /&gt;
| sdev_throttling_additional_delay_enabled || 1 || SDEV only.&lt;br /&gt;
|-&lt;br /&gt;
| sleep_mode || strlen || &amp;quot;default&amp;quot;: ?, &amp;quot;pseudo&amp;quot;: ?.&lt;br /&gt;
|-&lt;br /&gt;
| throttling_for_smpd_enabled || 1 || Not used as of 3.0.&lt;br /&gt;
|-&lt;br /&gt;
| throttling_for_undock_enabled || 1 || Not used as of 3.0.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5115</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5115"/>
		<updated>2018-09-28T04:17:50Z</updated>

		<summary type="html">&lt;p&gt;Endrift: /* SixAxisSensor State Entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Handheld State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State Header =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, up to 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Accelerometer data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Gyroscope data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Unknown sensor data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4 * 9&lt;br /&gt;
| Orientation basis as 3x3 matrix of floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown, always 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw copies the data from offset 0x8 size 0x60 to the final output state.&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5114</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5114"/>
		<updated>2018-09-28T04:16:40Z</updated>

		<summary type="html">&lt;p&gt;Endrift: /* SixAxisSensor State Entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Handheld State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State Header =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, up to 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples, always the same as the first timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Accelerometer data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Gyroscope data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0x4 * 3&lt;br /&gt;
| Unknown sensor data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x4 * 9&lt;br /&gt;
| Orientation basis as 3x3 matrix of floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown, always 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw copies the data from offset 0x8 size 0x60 to the final output state.&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5113</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5113"/>
		<updated>2018-09-27T23:01:46Z</updated>

		<summary type="html">&lt;p&gt;Endrift: /* SixAxisSensor State Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Handheld State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State Header =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, up to 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples, always the same as the first timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| Accelerometer data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0xC&lt;br /&gt;
| Gyroscope data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Unknown sensor data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Orientation basis as 3x3 matrix of floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown, always 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw copies the data from offset 0x8 size 0x60 to the final output state.&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5112</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5112"/>
		<updated>2018-09-27T22:47:31Z</updated>

		<summary type="html">&lt;p&gt;Endrift: numerical bases are hard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Handheld State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State Header =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total available entries, up to 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples, always the same as the first timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| Accelerometer data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0xC&lt;br /&gt;
| Gyroscope data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Unknown sensor data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Orientation basis as 3x3 matrix of floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown, always 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw copies the data from offset 0x8 size 0x60 to the final output state.&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5111</id>
		<title>HID Shared Memory</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5111"/>
		<updated>2018-09-27T22:42:20Z</updated>

		<summary type="html">&lt;p&gt;Endrift: Fill in some SixAxisSensor information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;HID shared memory is a 0x40000 byte read-only segment of memory shared between applications for input. The segment contains structures for most if not all input methods available to applications.&lt;br /&gt;
&lt;br /&gt;
= Memory Map =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, Header?&lt;br /&gt;
|-&lt;br /&gt;
| 0x400&lt;br /&gt;
| 0x3000&lt;br /&gt;
| Capacitive Touchscreen&lt;br /&gt;
|-&lt;br /&gt;
| 0x3400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Mouse&lt;br /&gt;
|-&lt;br /&gt;
| 0x3800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Keyboard&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C00&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4000&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4400&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4800&lt;br /&gt;
| 0x400&lt;br /&gt;
| Unknown, header and 17 entries&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x4E00&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5000&lt;br /&gt;
| 0x200&lt;br /&gt;
| Unknown, header which says it has 17 entries, but the max entry index is 0&lt;br /&gt;
|-&lt;br /&gt;
| 0x5200&lt;br /&gt;
| 0x80*0x10&lt;br /&gt;
| Unknown, 16 structures with a header and 2 entries each&lt;br /&gt;
|-&lt;br /&gt;
| 0x5A00&lt;br /&gt;
| 0x4000&lt;br /&gt;
| Controller Serials?&lt;br /&gt;
|-&lt;br /&gt;
| 0x9A00&lt;br /&gt;
| 0x32000&lt;br /&gt;
| Controllers&lt;br /&gt;
|-&lt;br /&gt;
| 0x3BA00&lt;br /&gt;
| 0x4600&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Capacitive Touchscreen ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Touch Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x298 * 17&lt;br /&gt;
| Touch Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Touch Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x10	&lt;br /&gt;
| Touch Entry Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x28 * 16	&lt;br /&gt;
| Touch Data	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Structure Header ====&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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Touches	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Touch Data 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
| 0xC	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Index	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Touch Diameter Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Angle	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Padding	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Mouse ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Mouse Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Mouse Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Mouse Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X	&lt;br /&gt;
|-&lt;br /&gt;
| 0x14	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse X Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Mouse Y Change	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change Y	&lt;br /&gt;
|-&lt;br /&gt;
| 0x24	&lt;br /&gt;
| 0x4	&lt;br /&gt;
| Scroll Change X?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Mouse Buttons	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Keyboard ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keyboard Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x20	&lt;br /&gt;
| 0x30 * 17	&lt;br /&gt;
| Keyboard Entries	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Number of Entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Keyboard Entry ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Timestamp in samples again?	&lt;br /&gt;
|-&lt;br /&gt;
| 0x10	&lt;br /&gt;
| 0x8	&lt;br /&gt;
| Modifier Mask	&lt;br /&gt;
|-&lt;br /&gt;
| 0x18	&lt;br /&gt;
| 0x20	&lt;br /&gt;
| Keys Down, each key gets one bit based on the HID keyboard scan code (F1 is 0x3A, bit 0x3A is set)	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controller Serials? ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 16 structures 0x400 bytes large.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x30	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
| 0x60	&lt;br /&gt;
| 0xE	&lt;br /&gt;
| Controller Serial	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Controllers ==&lt;br /&gt;
&lt;br /&gt;
This section contains a series of 10 0x5000 byte structures describing each available controller.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Controller Index&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 to 7	&lt;br /&gt;
| Players 1 to 8	&lt;br /&gt;
|-&lt;br /&gt;
| 8	&lt;br /&gt;
| Handheld Mode	&lt;br /&gt;
|-&lt;br /&gt;
| 9	&lt;br /&gt;
| Unknown	&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Controller ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x28	&lt;br /&gt;
| Controller Header	&lt;br /&gt;
|-&lt;br /&gt;
| 0x28	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x378	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Handheld Joined State&lt;br /&gt;
|-&lt;br /&gt;
| 0x6C8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Joined State (Lone Joy-Con or Pair of Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0xA18	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Left State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0xD68	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Right State (Vertical Controls w/ Joy-Con Half)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10B8	&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State (No Analog Sticks)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1408&lt;br /&gt;
| 0x20 header + 0x30 * 17	&lt;br /&gt;
| Controller Main State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1758&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pro Controller State&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E60&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Handheld State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2568&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C70&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Pair Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3378&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Left State&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A80&lt;br /&gt;
| 0x20 header + 0x68 * 17&lt;br /&gt;
| SixAxisSensor Single Right State&lt;br /&gt;
|-&lt;br /&gt;
| 0x41D0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
| 0x41F0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Controller MAC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0	&lt;br /&gt;
| 0x4&lt;br /&gt;
| Status, bit0 Pro Controller/HID controller, bit1 wired for handheld, bit2 pair, bit3 left, bit4 right&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Is Joy-Con Half&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (single Joy-Con or Pro Controller)&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 0x4&lt;br /&gt;
| bit1 color set does not exist&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (right Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Body Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| RGBA Button Color (left Joy-Con)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State Header ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Maximum Entry Index, always 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Controller State ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples again&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Button State&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0x4&lt;br /&gt;
| Left Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick X&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0x4&lt;br /&gt;
| Right Joystick Y&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 0x8&lt;br /&gt;
| Controller State (bit0 connected, bit1 wired)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== Button State =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Bit&lt;br /&gt;
!   Button&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Y&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Left Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Right Stick Pressed&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| L&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| R&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| ZL&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| ZR&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| Plus&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Minus&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Left&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| Up&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Right&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| Down&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Left Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| Left Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| Left Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| Left Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Right Stick Left&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| Right Stick Up&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| Right Stick Right&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| Right Stick Down&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| SL&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| SR&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State Header =====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!   Offset&lt;br /&gt;
!   Size in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in ticks?&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Number of entries, always 17&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x8&lt;br /&gt;
| Latest Entry Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 0x8&lt;br /&gt;
| Total available entries, up to 16&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===== SixAxisSensor State 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 in bytes&lt;br /&gt;
!   Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x16&lt;br /&gt;
| 0x8&lt;br /&gt;
| Timestamp in samples, always the same as the first timestamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 0xC&lt;br /&gt;
| Accelerometer data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x24&lt;br /&gt;
| 0xC&lt;br /&gt;
| Gyroscope data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 0xC&lt;br /&gt;
| Unknown sensor data as 3 floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C&lt;br /&gt;
| 0x24&lt;br /&gt;
| Orientation basis as 3x3 matrix of floats&lt;br /&gt;
|-&lt;br /&gt;
| 0x60&lt;br /&gt;
| 0x8&lt;br /&gt;
| Unknown, always 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Official sw copies the data from offset 0x8 size 0x60 to the final output state.&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=4229</id>
		<title>Homebrew Applications</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Homebrew_Applications&amp;diff=4229"/>
		<updated>2018-03-22T22:59:05Z</updated>

		<summary type="html">&lt;p&gt;Endrift: /* Emulators */ How about marking these a bit better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Installing ==&lt;br /&gt;
Applications are installed by copying the necessary files directly to the &amp;lt;code&amp;gt;switch/&amp;lt;/code&amp;gt; folder in the root of the SD card, or in a subdirectory of &amp;lt;code&amp;gt;switch/&amp;lt;/code&amp;gt;, in which case said subfolder must be named identically to its executable. Normally the former should be used. The latter should be used if the application uses anything from FS current-working-directory (directory where the NRO is located). Applications come with the following:&lt;br /&gt;
* &amp;lt;code&amp;gt;[appname].nro&amp;lt;/code&amp;gt;: The executable.&lt;br /&gt;
&lt;br /&gt;
The Homebrew Menu will scan the SD card for all &amp;lt;code&amp;gt;.nro&amp;lt;/code&amp;gt; files, but will only display an icon for those who have one according to the format described above. You can also freely navigate the filesystem to select an application.&lt;br /&gt;
&lt;br /&gt;
Icon/metadata for each application is loaded from data embedded in the NRO (custom assets section), if available.&lt;br /&gt;
&lt;br /&gt;
== List ==&lt;br /&gt;
&lt;br /&gt;
=== Launchers ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Open-Source&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/switchbrew/nx-hbmenu Homebrew Menu]&lt;br /&gt;
| Run homebrew on your Switch!&lt;br /&gt;
| [[User:Yellows8|Yellows8]], [[User:plutooo|plutooo]]&lt;br /&gt;
| [https://github.com/switchbrew/nx-hbmenu/releases Here]&lt;br /&gt;
| Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| [https://github.com/yellows8/switch_sysmodule switch_sysmodule]&lt;br /&gt;
| RPC over USB, etc. Originally a sysmodule, however this can also be used as a regular application.&lt;br /&gt;
| [[User:Yellows8|Yellows8]]&lt;br /&gt;
| &lt;br /&gt;
| Yes&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [https://www.switchbru.com/appstore/ AppStore NX]&lt;br /&gt;
| Download and manage homebrew apps&lt;br /&gt;
| vgmoose&lt;br /&gt;
| [https://github.com/vgmoose/appstorenx/releases Here]&lt;br /&gt;
| [https://github.com/vgmoose/appstorenx/ Yes]&lt;br /&gt;
| 2018-03-05&lt;br /&gt;
|-&lt;br /&gt;
| Pynx&lt;br /&gt;
| An ecosystem for developing and running Python homebrew applications on the Nintendo Switch.&lt;br /&gt;
| AileenLumina&lt;br /&gt;
| [https://github.com/nx-python/Pynx/releases Here]&lt;br /&gt;
| [https://github.com/nx-python/Pynx/ Yes]&lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Game Engines ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name &lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description &lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source &lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated &lt;br /&gt;
|-&lt;br /&gt;
| LovePotion&lt;br /&gt;
| [https://love2d.org Love2D] for Nintendo Switch&lt;br /&gt;
| TurtleP&lt;br /&gt;
|&lt;br /&gt;
| [https://github.com/TurtleP/LovePotion/tree/switch Yes]&lt;br /&gt;
| 2018-03-02&lt;br /&gt;
|-&lt;br /&gt;
| [https://blog.easyrpg.org/2018/03/easyrpg-player-now-available-as-nintendo-switch-homebrew/ EasyRPG Player]&lt;br /&gt;
| RPG Maker 2000/2003 game interpreter&lt;br /&gt;
| Rinnegatamante &amp;amp; EasyRPG team&lt;br /&gt;
| [https://easyrpg.org/player/downloads/ here]&lt;br /&gt;
| [https://github.com/EasyRPG/Player Yes]&lt;br /&gt;
| 2018-03-09&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Games ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| Useless Homebrew&lt;br /&gt;
| A &amp;quot;useless machine&amp;quot;-like software, ported from DS&lt;br /&gt;
| Tcm0, Rydian (DS)&lt;br /&gt;
| [https://gbatemp.net/threads/useless-homebrew-for-nintendo-switch.497041/ Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2018-03-03&lt;br /&gt;
|-&lt;br /&gt;
| Space Game NX&lt;br /&gt;
| Space game is a graphical shooter game on the Switch ported from Wii U! &lt;br /&gt;
| vgmoose&lt;br /&gt;
| [https://github.com/vgmoose/spacenx/releases Here]&lt;br /&gt;
| [https://github.com/vgmoose/spacenx/ Yes]&lt;br /&gt;
| 2018-02-19&lt;br /&gt;
|-&lt;br /&gt;
| Pixel-Painter&lt;br /&gt;
| A simple drawing homebrew&lt;br /&gt;
| 8BitWonder&lt;br /&gt;
| [https://github.com/16BitWonder/Pixel-Painter-Switch/releases Here]&lt;br /&gt;
| [https://github.com/16BitWonder/Pixel-Painter-Switch Yes]&lt;br /&gt;
| 2018-02-21&lt;br /&gt;
|-&lt;br /&gt;
| Hamsters NX&lt;br /&gt;
| A breeding of Hamsters game in text mode.&lt;br /&gt;
| Cid2mizard&lt;br /&gt;
| [https://github.com/Cid2mizard/Hamsters_NX/releases Here]&lt;br /&gt;
| [https://github.com/Cid2mizard/Hamsters_NX Yes]&lt;br /&gt;
| 2018-02-28&lt;br /&gt;
|-&lt;br /&gt;
| OpenBOR&lt;br /&gt;
| OpenBOR is the ultimate 2D gaming engine with over 10+ years of active development behind it. With OpenBOR you can build anything from simple button mashers to elaborate projects rivaling the most lavish professional offerings. Download one of the dozens of ready to play game modules available here, or grab the development kit and start up one of your own!&lt;br /&gt;
| cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/openbor/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/openbor Yes]&lt;br /&gt;
| 2018-03-18&lt;br /&gt;
|-&lt;br /&gt;
| TicTacToe&lt;br /&gt;
| A Tic Tac Toe implementation for Switch.&lt;br /&gt;
| SH3RLOCK&lt;br /&gt;
| [https://sh3rlock.ch/ttt.nro Here]&lt;br /&gt;
| [https://sh3rlock.ch/ttt.zip Yes]&lt;br /&gt;
| 2018-02-23&lt;br /&gt;
|-&lt;br /&gt;
| SDLLopan&lt;br /&gt;
| A classic remake of Linux Lopan (a Mahjong solitaire clone) by Dave Ashley.&lt;br /&gt;
| nop90&lt;br /&gt;
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH/releases Here]&lt;br /&gt;
| [https://github.com/Nop90-Switch/SDLLopan-SWITCH Yes]&lt;br /&gt;
| 2018-03-02&lt;br /&gt;
|-&lt;br /&gt;
| Tetriswitch&lt;br /&gt;
| A Tetris clone for Nintendo Switch.&lt;br /&gt;
| Ryuzaki_MrL&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch Yes]&lt;br /&gt;
| 2018-03-13&lt;br /&gt;
|-&lt;br /&gt;
| Snake&lt;br /&gt;
| A minimalistic Snake clone for Switch made with LovePotion.&lt;br /&gt;
| Shrike&lt;br /&gt;
| [https://github.com/Ryuzaki-MrL/tetriswitch/releases Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-10&lt;br /&gt;
|-&lt;br /&gt;
| Meritous&lt;br /&gt;
| Top View Dungeon Game&lt;br /&gt;
| nop90&lt;br /&gt;
| [https://github.com/Nop90-Switch/Meritous-Switch/releases Here]&lt;br /&gt;
| [https://github.com/Nop90-Switch/Meritous-Switch Yes]&lt;br /&gt;
| 2018-03-17&lt;br /&gt;
|-&lt;br /&gt;
| HCL-switch&lt;br /&gt;
| A port of Hydra Castle Labyrinth for PSVITA.&lt;br /&gt;
| Rinnegatamante&lt;br /&gt;
| [https://www.switchbru.com/appstore/zips/HCL-switch.zip Here]&lt;br /&gt;
| [https://github.com/Rinnegatamante/HCL-Switch Yes]&lt;br /&gt;
| 2018-03-03&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Emulators ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| pFBA&lt;br /&gt;
| A port of final burn alpha to multiple platforms&lt;br /&gt;
| cpasjuste&lt;br /&gt;
| [https://github.com/Cpasjuste/pfba/releases Here]&lt;br /&gt;
| [https://github.com/Cpasjuste/pfba Yes]&lt;br /&gt;
| 2018-02-20&lt;br /&gt;
|-&lt;br /&gt;
| Snes9x 2010&lt;br /&gt;
| Super Nintendo Entertainment System (SNES) Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/snes2x2010-rar.116906/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-08&lt;br /&gt;
|-&lt;br /&gt;
| FCEUmm RetroArch&lt;br /&gt;
| Nintendo Entertainment System (NES) Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/libretro-fceumm-rar.116907/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-08&lt;br /&gt;
|-&lt;br /&gt;
| Virtual Jaguar RetroArch&lt;br /&gt;
| Atari Jaguar Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/virtual_jaguar-nro-zip.117971/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| mGBA RetroArch&lt;br /&gt;
| Gameboy, Gameboy Color, and Gameboy Advance Emulator. Unofficial build.&lt;br /&gt;
| [[User:Endrift|endrift]]&lt;br /&gt;
| [https://gbatemp.net/attachments/mgba-nro-zip.116720/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| GearBoy RetroArch&lt;br /&gt;
| Gameboy and Gameboy Color Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/gearboy-nro-zip.116723/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-01-18&lt;br /&gt;
|-&lt;br /&gt;
| gambatte RetroArch&lt;br /&gt;
| Gameboy and Gameboy Color Emulator&lt;br /&gt;
| sinamas&lt;br /&gt;
| [https://gbatemp.net/attachments/gambatte_fix-nro-zip.117249/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-01-18&lt;br /&gt;
|-&lt;br /&gt;
| Picodrive RetroArch&lt;br /&gt;
| Genesis, MegaDrive, Master System, 32x, and Sega CD Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/picodrive-nro-zip.117920/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| Genesis Plus GX RetroArch&lt;br /&gt;
| Genesis, MegaDrive, Master System, Game Gear, and Sega CD Emulator&lt;br /&gt;
| eke-eke&lt;br /&gt;
| [https://gbatemp.net/attachments/genesisgx-nro-zip.116038/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| MAME 2003 RetroArch&lt;br /&gt;
| Multi-purpose emulation framework, Arcade game Emulator&lt;br /&gt;
| &lt;br /&gt;
| [https://gbatemp.net/attachments/mame2003-nro-zip.117945/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|-&lt;br /&gt;
| Beetle PSX RetroArch&lt;br /&gt;
| Playstation Emulator&lt;br /&gt;
| Ryphecha&lt;br /&gt;
| [https://gbatemp.net/attachments/beetlepsx-nro-zip.116708/ Here]&lt;br /&gt;
| &lt;br /&gt;
| 2018-03-19&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Title managers===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Save managers===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== File servers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| Ftpd&lt;br /&gt;
| A port of ftpd for 3DS.&lt;br /&gt;
| mtheall, TuxSH&lt;br /&gt;
| [https://www.switchbru.com/appstore/zips/ftpd.zip Here]&lt;br /&gt;
| [https://github.com/TuxSH/ftpd/tree/switch_pr Yes]&lt;br /&gt;
| 2018-02-27&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Demos ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  width=&amp;quot;20%&amp;quot; | Name&lt;br /&gt;
!  width=&amp;quot;50%&amp;quot; | Description&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Author&lt;br /&gt;
!  width=&amp;quot;10%&amp;quot; | Download&lt;br /&gt;
!  width=&amp;quot;5%&amp;quot;  | Open-Source&lt;br /&gt;
!  width=&amp;quot;15%&amp;quot; | Last Updated&lt;br /&gt;
|-&lt;br /&gt;
| 34c3-demo&lt;br /&gt;
| Demo from the 34c3 for Homebrew on the Switch.&lt;br /&gt;
| [[User:plutoo|plutoo]]&lt;br /&gt;
| [https://github.com/switchbrew/34c3-demo Here]&lt;br /&gt;
| Yes&lt;br /&gt;
| 2018-02-19&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Endrift</name></author>
	</entry>
</feed>