<?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=Corenting</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=Corenting"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Corenting"/>
	<updated>2026-05-14T18:21:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_Shared_Memory&amp;diff=5837</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=5837"/>
		<updated>2018-12-20T13:41:49Z</updated>

		<summary type="html">&lt;p&gt;Corenting: Change keyboard entry struct size&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;
| 0x38 * 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>Corenting</name></author>
	</entry>
</feed>