<?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=Sebastiaan</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=Sebastiaan"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Sebastiaan"/>
	<updated>2026-05-17T10:36:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Shared_Database_services&amp;diff=3322</id>
		<title>Shared Database services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Shared_Database_services&amp;diff=3322"/>
		<updated>2017-12-31T15:53:09Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= pl:u (Shared Font Manager) =&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 || [[#RequestLoad]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetLoadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetSharedMemoryAddressOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetSharedMemoryNativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetSharedFontInOrderOfPriority&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestLoad ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32)&lt;br /&gt;
&lt;br /&gt;
== GetLoadState ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32).&lt;br /&gt;
&lt;br /&gt;
=== LoadState ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Loading&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Loaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetSize ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32)&lt;br /&gt;
&lt;br /&gt;
== GetSharedMemoryAddressOffset ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address.&lt;br /&gt;
&lt;br /&gt;
== SharedFontType ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Japan, US and Europe (Standard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Chinese Simplified&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Extended Chinese Simplified&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Chinese Traditional&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Korean (Hangul)&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Nintendo Extended&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= mii:u, mii:e =&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 || GetDatabaseServiceSharedPointer&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3318</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3318"/>
		<updated>2017-12-31T10:13:01Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioOutBuffer ===&lt;br /&gt;
Takes a u64 (pointer to audio buffer?). Returns a bool. (u8) (0, if it doesn&#039;t contain the buffer)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || [[#GetAudioRendererSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetAudioRendererSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioRendererMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetAudioRendererState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || QuerySystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleRate ===&lt;br /&gt;
Returns the Sample Rate. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleCount ===&lt;br /&gt;
Returns the Sample Count. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererMixBufferCount ===&lt;br /&gt;
Returns the number of Mix Buffers. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererState ===&lt;br /&gt;
Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== SetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Takes a upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Returns the upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3317</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3317"/>
		<updated>2017-12-31T10:09:23Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#ContainsAudioOutBuffer]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
=== ContainsAudioOutBuffer ===&lt;br /&gt;
Takes a u64 (pointer to audio buffer?). Returns a bool. (u8)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || [[#GetAudioRendererSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetAudioRendererSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioRendererMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetAudioRendererState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || QuerySystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleRate ===&lt;br /&gt;
Returns the Sample Rate. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleCount ===&lt;br /&gt;
Returns the Sample Count. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererMixBufferCount ===&lt;br /&gt;
Returns the number of Mix Buffers. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererState ===&lt;br /&gt;
Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== SetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Takes a upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Returns the upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3314</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3314"/>
		<updated>2017-12-31T08:52:08Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || [[#GetAudioRendererSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetAudioRendererSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioRendererMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetAudioRendererState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || QuerySystemEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleRate ===&lt;br /&gt;
Returns the Sample Rate. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleCount ===&lt;br /&gt;
Returns the Sample Count. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererMixBufferCount ===&lt;br /&gt;
Returns the number of Mix Buffers. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererState ===&lt;br /&gt;
Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== SetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Takes a upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Returns the upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3313</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3313"/>
		<updated>2017-12-31T08:50:03Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || [[#GetAudioRendererSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetAudioRendererSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioRendererMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetAudioRendererState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#SetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetAudioRendererRenderingTimeLimit]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleRate ===&lt;br /&gt;
Returns the Sample Rate. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleCount ===&lt;br /&gt;
Returns the Sample Count. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererMixBufferCount ===&lt;br /&gt;
Returns the number of Mix Buffers. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererState ===&lt;br /&gt;
Returns an AudioRenderState, 0x00=Started 0x01=Stopped (u32)&lt;br /&gt;
&lt;br /&gt;
=== SetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Takes a upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererRenderingTimeLimit ===&lt;br /&gt;
Returns the upper limit of the rendering time in percent. (u32)&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3312</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3312"/>
		<updated>2017-12-31T08:31:20Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || [[#GetAudioRendererSampleRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetAudioRendererSampleCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetAudioRendererMixBufferCount]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetAudioRendererState]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetAudioRendererRenderingTimeLimit&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioRendererRenderingTimeLimit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleRate ===&lt;br /&gt;
Returns the Sample Rate. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererSampleCount ===&lt;br /&gt;
Returns the Sample Count. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererMixBufferCount ===&lt;br /&gt;
Returns the number of Mix Buffers. (u32)&lt;br /&gt;
&lt;br /&gt;
=== GetAudioRendererState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioRenderState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3311</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3311"/>
		<updated>2017-12-31T07:27:52Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, [[#PCM_format|PCM format]], and an unknown field.&lt;br /&gt;
&lt;br /&gt;
=== PCM format ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || INT8&lt;br /&gt;
|-&lt;br /&gt;
| 2 || INT16&lt;br /&gt;
|-&lt;br /&gt;
| 3 || INT24&lt;br /&gt;
|-&lt;br /&gt;
| 4 || INT32&lt;br /&gt;
|-&lt;br /&gt;
| 5 || PCM Float&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ADPCM&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || GetAudioRendererSampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererSampleCount&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRendererMixBufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetAudioRendererState&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetAudioRendererRenderingTimeLimit&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioRendererRenderingTimeLimit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3308</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3308"/>
		<updated>2017-12-30T19:49:53Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object and four u32s: the sample rate, channel count, PCM format, and an unknown field. PCM format 2 is INT16.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#AppendAudioOutBuffer]] taking a type 0x5 (A descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#RegisterBufferEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#GetReleasedAudioOutBuffer]] taking a type 0x6 (B descriptor) buffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#AppendAudioOutBuffer]] taking a type 0x21 buffer&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetReleasedAudioOutBuffer]] taking a type 0x22 buffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
=== AppendAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a u64 (not sure what this is, might act as some sort of identifier for the audio buffer? official applications seem to use the address of the audio buffer struct for this) and a buffer.&lt;br /&gt;
The format of said buffer is as follows:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 8 || Pointer to the sample data pointer.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 8 || Pointer to sample data.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 8 || Capacity of sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 8 || Size of data in sample buffer&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 8 || Unknown. Zero works.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== RegisterBufferEvent ===&lt;br /&gt;
&lt;br /&gt;
Returns an event handle that is signalled when a buffer is released&lt;br /&gt;
&lt;br /&gt;
=== GetReleasedAudioOutBuffer ===&lt;br /&gt;
&lt;br /&gt;
Takes a buffer, which it will fill with the identifiers passed from [[#AppendAudioOutBuffer]] of audio buffers that have been released. Will return a u32 (may indicate how many buffers were released?)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || GetAudioRendererSampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererSampleCount&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRendererMixBufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetAudioRendererState&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetAudioRendererRenderingTimeLimit&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioRendererRenderingTimeLimit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:a, audin:a, audrec:a and audren:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspend&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d, audin:d, audrec:d and audren:d =&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 || [[#RequestSuspendForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3303</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3303"/>
		<updated>2017-12-30T18:01:24Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audout:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioOuts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d =&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 || [[#RequestSuspendAudioOutsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioOutsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioIns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audin:d =&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 || [[#RequestSuspendAudioInsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioInsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audren:u =&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 || OpenAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererWorkBufferSize&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRenderersProcessMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetAudioRenderersProcessMasterVolume&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioRenderer ==&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 || GetAudioRendererSampleRate&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetAudioRendererSampleCount&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetAudioRendererMixBufferCount&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetAudioRendererState&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RequestUpdateAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 5 || StartAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || StopAudioRenderer&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetAudioRendererRenderingTimeLimit&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetAudioRendererRenderingTimeLimit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3302</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3302"/>
		<updated>2017-12-30T10:18:32Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audout:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioOuts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d =&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 || [[#RequestSuspendAudioOutsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioOutsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns an AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioIns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audin:d =&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 || [[#RequestSuspendAudioInsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioInsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes an [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= audrec:u =&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 || OpenFinalOutputRecorder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IFinalOutputRecorder ==&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 || GetFinalOutputRecorderState&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopFinalOutputRecorder&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedFinalOutputRecorderBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsFinalOutputRecorderBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3300</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3300"/>
		<updated>2017-12-30T09:28:33Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audout:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioOuts&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audout:d =&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 || [[#RequestSuspendAudioOutsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioOutsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioOutsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:a =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || RequestSuspendAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RequestResumeAudioIns&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= audin:d =&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 || [[#RequestSuspendAudioInsForDebug]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#RequestResumeAudioInsForDebug]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestSuspendAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
== RequestResumeAudioInsForDebug ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[AM_services#AppletResourceUserId|AppletResourceUserId]]. (u64)&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TMA_services&amp;diff=3298</id>
		<title>TMA services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TMA_services&amp;diff=3298"/>
		<updated>2017-12-29T21:13:36Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TMA (Target Manager) acts as a debugging sysmodule for development kits. This system module is loaded in retail units, but remains unused.&lt;br /&gt;
&lt;br /&gt;
= htc =&lt;br /&gt;
= htcs =&lt;br /&gt;
= htc:tenv =&lt;br /&gt;
These services are inaccessible on retail units. However, all [[Title_list#System_Applets|System Applets]] have permission to access them (see [[NPDM#Service_Access_Control]]).&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3297</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3297"/>
		<updated>2017-12-29T20:06:44Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || InitializeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || FinalizeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 3 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 8 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3295</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3295"/>
		<updated>2017-12-29T18:51:39Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= codecctl =&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 || SleepCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 1 || WakeCodecController&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#SetCodecVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetCodecVolumeMax&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetCodecVolumeMin&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetCodecActiveTarget&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 7 || BindCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsCodecHeadphoneMicJackInserted&lt;br /&gt;
|-&lt;br /&gt;
| 9 || ClearCodecHeadphoneMicJackInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 10 || IsCodecDeviceRequested&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetCodecVolume ==&lt;br /&gt;
&lt;br /&gt;
Takes a Volume (uint32)&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3294</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3294"/>
		<updated>2017-12-29T17:58:40Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;, and are released via svcCloseHandle or when a process is terminated or crashes. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC. Services are also able to limit the number of handles given to other processes.&lt;br /&gt;
&lt;br /&gt;
= sm: =&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 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes a pid descriptor and a reserved input u64.&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer, an u8 bool, and an u32 (session count) at the next word. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer.&lt;br /&gt;
&lt;br /&gt;
= sm:m =&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 || [[#RegisterProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProcess]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProcess ==&lt;br /&gt;
Takes a pid and two A descriptors with the ACID and ACI0 service lists. That data originates from [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterProcess ==&lt;br /&gt;
Takes a pid.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u0: System, u1: User, su: Admin, aa: Baas&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| [[AM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] aoc:u, ns:am2, ns:dev, ns:ec, ns:rid, ns:rt, ns:su, ns:vm, ns:web, ovln:rcv, ovln:snd&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
| [[Glue services]]&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus, auddebug&lt;br /&gt;
| [[Audio services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;banana&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| Some games on [3.0.0+] have access to this service, but it doesn&#039;t appear to be present on retail devices.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:arb, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[PCV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| [[Bluetooth Driver services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| [[Capture services]]&lt;br /&gt;
| a: AlbumAccessor, c: AlbumControl&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u, cec-mgr&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
| [[Nvnflinger services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| [[Error Report services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
| [[PTM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| [[Fatal services]]&lt;br /&gt;
| u: User, p: Privileged&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart, [3.0.0+] sasbus&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| htc, htcs, htc:tenv&lt;br /&gt;
| [[TMA services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[LDN services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] ldr:pm, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| [[Log services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| manu&lt;br /&gt;
| [[Manu Services]]&lt;br /&gt;
| &amp;quot;Manufacturing&amp;quot;, present in factory firmware but not installed on retail systems.&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[NCM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys, nfp:user, nfp:dbg, nfp:sys&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| NPNS services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| [[Parental Control services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| [[PSC services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] ldr:ro, ro:dmnt&lt;br /&gt;
| [[Loader services|RO services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] mii:u, mii:e, pdm:ntfy, pdm:qry, pl:u&lt;br /&gt;
| [[Shared Database services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] csrng, spl:&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] csrng, spl:, spl:mig, spl:fs, spl:ssl, spl:es&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| [[USB services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] grc:c&lt;br /&gt;
| [[GRC services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] mig:usr&lt;br /&gt;
| [[Migration services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] caps:dc&lt;br /&gt;
| [[Jpegdec services]]&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3293</id>
		<title>Audio services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Audio_services&amp;diff=3293"/>
		<updated>2017-12-29T17:35:15Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: audin:u&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= audout:u =&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 || ListAudioOuts&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenAudioOut]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenAudioOut ==&lt;br /&gt;
Takes two u64s (an interface ID and a PID placeholder?), a PID, a process handle, and the name of the interface you want to connect to. Returns an [[#IAudioOut]] object.&lt;br /&gt;
&lt;br /&gt;
== IAudioOut ==&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 || [[#GetAudioOutState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioOut&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioOutBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioOutBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioOutState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioOutState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
= audin:u =&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 || ListAudioIns&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenAudioIn&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IAudioIn ==&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 || [[#GetAudioInState]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || StartAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 2 || StopAudioIn&lt;br /&gt;
|-&lt;br /&gt;
| 3 || AppendAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 4 || RegisterBufferEvent&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetReleasedAudioInBuffer&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ContainsAudioInBuffer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetAudioInState ===&lt;br /&gt;
&lt;br /&gt;
Returns a AudioInState, 0x00=Started 0x01=Stopped&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Shared_Database_services&amp;diff=3291</id>
		<title>Shared Database services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Shared_Database_services&amp;diff=3291"/>
		<updated>2017-12-29T16:20:07Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: /* pl:u (Shared Font Manager) */  SharedFontType&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= pl:u (Shared Font Manager) =&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 || [[#RequestLoad]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetLoadState]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetSharedMemoryAddressOffset]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetSharedMemoryNativeHandle&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetSharedFontInOrderOfPriority&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RequestLoad ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32)&lt;br /&gt;
&lt;br /&gt;
== GetLoadState ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the [[#LoadState]] (uint32).&lt;br /&gt;
&lt;br /&gt;
=== LoadState ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Loading&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Loaded&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetSize ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the Font Size (uint32)&lt;br /&gt;
&lt;br /&gt;
== GetSharedMemoryAddressOffset ==&lt;br /&gt;
&lt;br /&gt;
Takes a [[#SharedFontType]] (uint32), returns the offset (uint32) to the Font Address.&lt;br /&gt;
&lt;br /&gt;
== SharedFontType ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || Japan, US and Europe (Standard)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Chinese Simplified&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Extended Chinese Simplified&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Chinese Traditional&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Korean (Hangul)&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || Nintendo Extended&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3208</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3208"/>
		<updated>2017-12-23T10:13:48Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;, and are released via svcCloseHandle or when a process is terminated or crashes. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC. Services are also able to limit the number of handles given to other processes.&lt;br /&gt;
&lt;br /&gt;
= sm: =&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 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes a pid descriptor and a reserved input u64.&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer, an u8 bool, and an u32 (session count) at the next word. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer.&lt;br /&gt;
&lt;br /&gt;
= sm:m =&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 || [[#RegisterProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProcess]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProcess ==&lt;br /&gt;
Takes a pid and two A descriptors with the ACID and ACI0 service lists. That data originates from [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterProcess ==&lt;br /&gt;
Takes a pid.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u0: System, u1: User, su: Admin, aa: Baas&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| [[AM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] aoc:u, ns:am2, ns:dev, ns:ec, ns:rid, ns:rt, ns:su, ns:vm, ns:web, ovln:rcv, ovln:snd&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?), (aoc:apm??)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
| [[Glue services]]&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus&lt;br /&gt;
| [[Audio services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;banana&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| Some games on [3.0.0+] have access to this service, but it doesn&#039;t appear to be present on retail devices.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:arb, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[PCV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| [[Bluetooth Driver services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| [[Capture services]]&lt;br /&gt;
| a: AlbumAccessor, c: AlbumControl&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u, cec-mgr&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
| [[Nvnflinger services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| [[Error Report services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
| [[PTM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| [[Fatal services]]&lt;br /&gt;
| u: User, p: Privileged&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| htc, htcs, htc:tenv&lt;br /&gt;
| [[TMA services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[LDN services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] ldr:pm, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| [[Log services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| manu&lt;br /&gt;
| [[Manu Services]]&lt;br /&gt;
| &amp;quot;Manufacturing&amp;quot;, present in factory firmware but not installed on retail systems.&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[NCM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys, nfp:user, nfp:dbg, nfp:sys&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| NPNS services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| [[Parental Control services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| [[PSC services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] ldr:ro, ro:dmnt&lt;br /&gt;
| [[Loader services|RO services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] mii:u, mii:e, pdm:ntfy, pdm:qry, pl:u&lt;br /&gt;
| [[Shared Database services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| csrng, spl:&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| [[USB services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3206</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3206"/>
		<updated>2017-12-22T08:58:44Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;, and are released via svcCloseHandle or when a process is terminated or crashes. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC. Services are also able to limit the number of handles given to other processes.&lt;br /&gt;
&lt;br /&gt;
= sm: =&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 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes a pid descriptor and a reserved input u64.&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer, an u8 bool, and an u32 (session count) at the next word. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer.&lt;br /&gt;
&lt;br /&gt;
= sm:m =&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 || [[#RegisterProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProcess]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProcess ==&lt;br /&gt;
Takes a pid and two A descriptors with the ACID and ACI0 service lists. That data originates from [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterProcess ==&lt;br /&gt;
Takes a pid.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u0: System, u1: User, su: Admin, aa: Baas&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| [[AM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] aoc:u, ns:am2, ns:dev, ns:ec, ns:rid, ns:rt, ns:su, ns:vm, ns:web, ovln:rcv, ovln:snd&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?), (aoc:apm??)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
| [[Glue services]]&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus&lt;br /&gt;
| [[Audio services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;banana&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| Some games on [3.0.0+] have access to this service, but it doesn&#039;t appear to be present on retail devices.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:arb, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[PCV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| [[Bluetooth Driver services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| [[Capture services]]&lt;br /&gt;
| a: AlbumAccessor, c: AlbumControl&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u, cec-mgr&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
| [[Nvnflinger services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| [[Error Report services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
| [[PTM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| [[Fatal services]]&lt;br /&gt;
| u: User, p: Privileged&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| htc, htcs, htc:tenv&lt;br /&gt;
| [[TMA services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[LDN services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] ldr:pm, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| [[Log services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| manu&lt;br /&gt;
| [[Manu Services]]&lt;br /&gt;
| &amp;quot;Manufacturing&amp;quot;, present in factory firmware but not installed on retail systems.&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[NCM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys, nfp:user, nfp:dbg&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| NPNS services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| [[Parental Control services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| [[PSC services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] ldr:ro, ro:dmnt&lt;br /&gt;
| [[Loader services|RO services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] mii:u, mii:e, pdm:ntfy, pdm:qry, pl:u&lt;br /&gt;
| [[Shared Database services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| csrng, spl:&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| [[USB services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=BNVIB&amp;diff=3170</id>
		<title>BNVIB</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=BNVIB&amp;diff=3170"/>
		<updated>2017-12-16T18:11:08Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BNVIB (Binary NX Vibration) is the vibration file for the HD Rumble in the Joy-Con or Pro 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&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x01 || Vibration Type (see [[#Vibration Types|Vibration Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x01 || Magic number (0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || ? || Vibration Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of a sample is 4 bytes. The sample rate is in milliseconds.&lt;br /&gt;
&lt;br /&gt;
= Vibration Types =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Normal vibration (Vibrate 1 time) (see [[#Normal Vibration|Normal Vibration]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Loop vibration (see [[#Loop Vibration|Loop Vibration]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Loop and wait vibration (see [[#Loop and Wait Vibration|Loop and Wait Vibration]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Normal Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06  || vibsize || Samples&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Loop Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 ||0x04 ||  Loop start (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x04 || Loop end (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || vibsize || Samples&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Loop and Wait Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x04 || Loop start (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x04 || Loop end (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x04 || Loop wait (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || vibsize || Samples&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=BNVIB&amp;diff=3169</id>
		<title>BNVIB</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=BNVIB&amp;diff=3169"/>
		<updated>2017-12-16T15:26:23Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Info about the BNVIB file format&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;BNVIB is the vibration file for the HD Rumble in the Joy-Con or Pro 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&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x01 || Vibration Type (see [[#Vibration Types|Vibration Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x01 || Magic number (0x03)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || ? || Vibration Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The size of a sample is 4 bytes. The sample rate is in milliseconds.&lt;br /&gt;
&lt;br /&gt;
= Vibration Types =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || Normal vibration (Vibrate 1 time) (see [[#Normal Vibration|Normal Vibration]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || Loop vibration (see [[#Loop Vibration|Loop Vibration]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || Loop and wait vibration (see [[#Loop and Wait Vibration|Loop and Wait Vibration]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Normal Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06  || vibsize || Samples&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Loop Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 ||0x04 ||  Loop start (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x04 || Loop end (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || vibsize || Samples&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Loop and Wait Vibration ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x02 || Sample rate (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x04 || Loop start (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x04 || Loop end (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x04 || Loop wait (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x04 || Vibration size (vibsize) (LE)&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || vibsize || Samples&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Ukyo&amp;diff=3167</id>
		<title>Ukyo</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Ukyo&amp;diff=3167"/>
		<updated>2017-12-12T15:28:13Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Redirected page to Joy-Con Firmware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Joy-Con_Firmware]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con_Firmware&amp;diff=3166</id>
		<title>Joy-Con Firmware</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con_Firmware&amp;diff=3166"/>
		<updated>2017-12-12T15:27:46Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Joy-Con is internally called Ukyo. (Strings in the firmware) The firmware is written in C++. (Also found in strings in the firmware)&lt;br /&gt;
&lt;br /&gt;
= Joy-Con Firmware File =&lt;br /&gt;
&lt;br /&gt;
The length of the firmware must be 524288 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || B || 0x14 || Magic number??&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || L || 0x06 || Unique MAC Address of controller&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B3 || L || 0x04 || Offset to Factory Firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF4 || B || 0x08 || OTA Magic, if the controller is Over-The-Air updated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FFC || L || 0x04 || Offset to OTA Firmware, if OTA Magic is valid.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6000 || Mixed || 0x1000 || Factory configuration (see [[#Factory Configuration Sector|Factory Configuration Sector]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8000 || Mixed || 0x1000 || User calibration (see [[#User Calibration Sector|User Calibration Sector]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Factory Configuration Sector ==&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || B || 0x10 || Serial number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ? || 0x02 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || B || 0x01 || Type descriptor (see [[#Type Descriptor|Type Descriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || ? || 0x3D || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || B || 0x03 || Body color of Controller in RGB Hex  (see [[Joy-Con#Colors|Joy-Con Colors]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || B || 0x03 || Button color of Controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || ? || 0xFAA || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Type Descriptor ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Type Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Joy-Con Left&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Joy-Con Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Pro Controller&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Calibration Sector ==&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || ? || 0x11 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || B || 0x0B || Left Stick Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || B || 0x0B || Right Stick Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || B || 0x1A || Sensor Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || ? || 0xFBF || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware Chunks =&lt;br /&gt;
&lt;br /&gt;
The firmware itself is stored in PatchRAM chunks, located at the Factory Offset or the OTA Offset. Each chunk has a Record Type, Size and Data.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x01 || Record type (see [[#Record Types|Record Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || L || 0x02 || Size of data (size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Mixed || (size) || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Record Types ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Record name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || REC8 || ROM1 Patches (See [[#Record 0x08|Record 0x08]] and [[#Memory Regions|Memory Regions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || RECA || RAM (Ram Low and Ram High) Patches (See [[#Record 0x0A|Record 0x0A]] and [[#Memory Regions|Memory Regions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || RECB || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xFE || END || End of chunk stream&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x08 ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x01 || Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || L || 0x04 || Address&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || B || 0x04 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || L || 0x02 || Unk1?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || L || 0x02 || Unk2?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || L || 0x02 || Body size???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x0A ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x04 || Address || -&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || B || (Note) || Data || To calculate the size do: chunk_datasize (See [[#Firmware Chunks|Firmware Chunks]])-4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x0B ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x04 || Address&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Regions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offsets&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00-0xC8000 || ROM 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x260000-0x26C000 || ROM 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0000-0x0x0DFFFF || RAM Low&lt;br /&gt;
|-&lt;br /&gt;
| 0x200000-0x247FFF || RAM High&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=3164</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=3164"/>
		<updated>2017-12-11T16:06:06Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Added color of Pro Controller&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Joy-Con use bluetooth or a wired connection to communicate with the console, depending if they are physically connected to it or not.&amp;lt;br&amp;gt;&lt;br /&gt;
dekuNukem has started RE on the protocols used [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering].&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Black Pro Controller || #323232 or #323231 || ?&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=3163</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=3163"/>
		<updated>2017-12-11T12:29:27Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Added link to the Joy-Con Firmware page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Joy-Con use bluetooth or a wired connection to communicate with the console, depending if they are physically connected to it or not.&amp;lt;br&amp;gt;&lt;br /&gt;
dekuNukem has started RE on the protocols used [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering].&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red || #E10F00 || #280A0A&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con_Firmware&amp;diff=3162</id>
		<title>Joy-Con Firmware</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con_Firmware&amp;diff=3162"/>
		<updated>2017-12-11T12:25:34Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Added general file info about the Joy-Con Firmware&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Joy-Con Firmware File =&lt;br /&gt;
&lt;br /&gt;
The length of the firmware must be 524288 bytes.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || B || 0x14 || Magic number??&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || L || 0x06 || Unique MAC Address of controller&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B3 || L || 0x04 || Offset to Factory Firmware&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FF4 || B || 0x08 || OTA Magic, if the controller is Over-The-Air updated.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1FFC || L || 0x04 || Offset to OTA Firmware, if OTA Magic is valid.&lt;br /&gt;
|-&lt;br /&gt;
| 0x6000 || Mixed || 0x1000 || Factory configuration (see [[#Factory Configuration Sector|Factory Configuration Sector]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x8000 || Mixed || 0x1000 || User calibration (see [[#User Calibration Sector|User Calibration Sector]])&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Factory Configuration Sector ==&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || B || 0x10 || Serial number&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || ? || 0x02 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || B || 0x01 || Type descriptor (see [[#Type Descriptor|Type Descriptor]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || ? || 0x3D || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x50 || B || 0x03 || Body color of Controller in RGB Hex  (see [[Joy-Con#Colors|Joy-Con Colors]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x53 || B || 0x03 || Button color of Controller in RGB Hex (see [[Joy-Con#Colors|Joy-Con Colors]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x56 || ? || 0xFAA || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Type Descriptor ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Type Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || Joy-Con Left&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || Joy-Con Right&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Pro Controller&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Calibration Sector ==&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || ? || 0x11 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || B || 0x0B || Left Stick Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || B || 0x0B || Right Stick Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || B || 0x1A || Sensor Calibration (Factory 0xFF?)&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || ? || 0xFBF || Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Firmware Chunks =&lt;br /&gt;
&lt;br /&gt;
The firmware itself is stored in PatchRAM chunks, located at the Factory Offset or the OTA Offset. Each chunk has a Record Type, Size and Data.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset&lt;br /&gt;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x01 || Record type (see [[#Record Types|Record Types]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || L || 0x02 || Size of data (size)&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || Mixed || (size) || Data&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Record Types ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Value&lt;br /&gt;
! Record name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || REC8 || ROM1 Patches (See [[#Record 0x08|Record 0x08]] and [[#Memory Regions|Memory Regions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || RECA || RAM (Ram Low and Ram High) Patches (See [[#Record 0x0A|Record 0x0A]] and [[#Memory Regions|Memory Regions]])&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || RECB || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0xFE || END || End of chunk stream&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x08 ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x01 || Index&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || L || 0x04 || Address&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || B || 0x04 || Data&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || L || 0x02 || Unk1?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || L || 0x02 || Unk2?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || L || 0x02 || Body size???&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x0A ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
! Note&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x04 || Address || -&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || B || (Note) || Data || To calculate the size do: chunk_datasize (See [[#Firmware Chunks|Firmware Chunks]])-4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Record 0x0B ===&lt;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;
! Endianness&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || L || 0x04 || Address&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Memory Regions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offsets&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00-0xC8000 || ROM 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x260000-0x26C000 || ROM 2&lt;br /&gt;
|-&lt;br /&gt;
| 0xD0000-0x0x0DFFFF || RAM Low&lt;br /&gt;
|-&lt;br /&gt;
| 0x200000-0x247FFF || RAM High&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=LAN_Adapter&amp;diff=3157</id>
		<title>LAN Adapter</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=LAN_Adapter&amp;diff=3157"/>
		<updated>2017-12-10T17:59:00Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: Added LAN Adapter chipset&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Ax88179.jpg|100px|thumb|right|The AX88179 Chipset]]&lt;br /&gt;
The Nintendo Switch supports Ethernet, but a USB LAN Adapter is required. The chipset of this LAN Adapter must be the [http://www.asix.com.tw/products.php?op=pItemdetail&amp;amp;PItemID=131;71;112 ASIX AX88179] chipset.&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=File:Ax88179.jpg&amp;diff=3156</id>
		<title>File:Ax88179.jpg</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=File:Ax88179.jpg&amp;diff=3156"/>
		<updated>2017-12-10T17:56:03Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3155</id>
		<title>Services API</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Services_API&amp;diff=3155"/>
		<updated>2017-12-10T11:19:24Z</updated>

		<summary type="html">&lt;p&gt;Sebastiaan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Services are system processes running in the background which wait for incoming requests. When a process wants to communicate with a service, it first needs to get a handle to the named service, and then it can communicate with the service via inter-process communication (each service has a name up to 8 characters).&lt;br /&gt;
&lt;br /&gt;
Handles for services are retrieved from the service manager port, &amp;quot;sm:&amp;quot;, and are released via svcCloseHandle or when a process is terminated or crashes. Manager service &amp;quot;sm:m&amp;quot; also exists. Services are an abstraction of ports, they operate the same way except regular ports can have their handles retrieved directly from a SVC. Services are also able to limit the number of handles given to other processes.&lt;br /&gt;
&lt;br /&gt;
= sm: =&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 || [[#GetService]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#RegisterService]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#UnregisterService]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Initialize ==&lt;br /&gt;
Takes a pid descriptor and a reserved input u64.&lt;br /&gt;
&lt;br /&gt;
== GetService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== RegisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer, an u8 bool, and an u32 at the next word. Returns a handle.&lt;br /&gt;
&lt;br /&gt;
== UnregisterService ==&lt;br /&gt;
Takes a zero-padded service name encoded as an u64 integer.&lt;br /&gt;
&lt;br /&gt;
= sm:m =&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 || [[#RegisterProcess]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UnregisterProcess]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== RegisterProcess ==&lt;br /&gt;
Takes a pid and two A descriptors with the ACID and ACI0 service lists. That data originates from [[NPDM]].&lt;br /&gt;
&lt;br /&gt;
== UnregisterProcess ==&lt;br /&gt;
Takes a pid.&lt;br /&gt;
&lt;br /&gt;
= Service List =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Service names&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Description&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; width=&amp;quot;200&amp;quot; | Notes&lt;br /&gt;
|-&lt;br /&gt;
| acc:u0, acc:u1, acc:aa, acc:su&lt;br /&gt;
| [[Account services]]&lt;br /&gt;
| u0: System, u1: User, su: Admin, aa: Baas&lt;br /&gt;
|-&lt;br /&gt;
| ahid:cd, ahid:hdr, hid, hid:dbg, hid:sys, irs, irs:sys, xcd:sys&lt;br /&gt;
| [[HID services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| appletAE, appletOE, idle:sys, omm, spsm&lt;br /&gt;
| [[AM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] aoc:u, mii:u, mii:e, ns:am, ns:su, ns:dev, pl:u, ovln:rcv, ovln:snd, pdm:ntfy, pdm:qry&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] aoc:u, ns:am2, ns:dev, ns:ec, ns:rid, ns:rt, ns:su, ns:vm, ns:web, ovln:rcv, ovln:snd&lt;br /&gt;
| [[NS Services]]&lt;br /&gt;
| am: Application Manager, su: System Update&lt;br /&gt;
|-&lt;br /&gt;
| apm, apm:p, apm:sys, fgm, fgm:0, fgm:9, (fgm:dbg?), (aoc:apm??)&lt;br /&gt;
| [[APM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| arp:r, arp:w, bgtc:t, bgtc:sc&lt;br /&gt;
| [[Glue services]]&lt;br /&gt;
| r: Reader, w: Writer&lt;br /&gt;
|-&lt;br /&gt;
| audin:a, audin:d, audin:u, audout:a, audout:d, audout:u, audren:a, audren:d, audren:u, audrec:a, audrec:d, audrec:u, audctl, codecctl, hwopus&lt;br /&gt;
| [[Audio services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;banana&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| ?&lt;br /&gt;
| Some games on [3.0.0+] have access to this service, but it doesn&#039;t appear to be present on retail devices.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;bcat:a, bcat:u, bcat:m, bcat:s, news:a, news:c, news:m, news:p, news:v, prepo:u, prepo:s, prepo:m, prepo:a&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| [[BCAT services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bpc, bpc:r, pcv, pcv:arb, pcv:imm, time:u, time:a, time:s&lt;br /&gt;
| [[PCV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| bsd:u, bsd:s, bsdcfg, ethc:c, ethc:i, nsd:u, nsd:a, sfdnsres&lt;br /&gt;
| [[Sockets services]], [[NSD services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| btdrv&lt;br /&gt;
| [[Bluetooth Driver services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| btm, btm:dbg, btm:sys&lt;br /&gt;
| Battery services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| caps:a, caps:c&lt;br /&gt;
| [[Capture services]]&lt;br /&gt;
| a: AlbumAccessor, c: AlbumControl&lt;br /&gt;
|-&lt;br /&gt;
| caps:sc, caps:ss, mm:u, vi:m, vi:s, vi:u, cec-mgr&lt;br /&gt;
| [[Display services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| dispdrv&lt;br /&gt;
| [[Nvnflinger services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| erpt:c, erpt:r&lt;br /&gt;
| [[Error Report services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| es&lt;br /&gt;
| ETicket services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fan, psm, tc, ts&lt;br /&gt;
| [[PTM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fatal:u, fatal:p&lt;br /&gt;
| [[Fatal services]]&lt;br /&gt;
| u: User, p: Privileged&lt;br /&gt;
|-&lt;br /&gt;
| friend:u, friend:v, friend:m, friend:s, friend:a&lt;br /&gt;
| Friend services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| fsp-srv, fsp-ldr, fsp-pr&lt;br /&gt;
| [[Filesystem services]]&lt;br /&gt;
| srv: Main, ldr: Loader, pr: Program Registry&lt;br /&gt;
|-&lt;br /&gt;
| gpio, i2c, i2c:pcv, pinmux, pwm, uart&lt;br /&gt;
| [[Bus services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| htc, htcs, htc:tenv&lt;br /&gt;
| [[TMA services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lbl&lt;br /&gt;
| [[Backlight services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ldn:m, ldn:s, ldn:u&lt;br /&gt;
| [[LDN services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0+] ldr:pm, ldr:ro, ldr:shel, ldr:dmnt&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] ldr:pm, ldr:shel, ldr:dmnt&lt;br /&gt;
| [[Loader services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| lm&lt;br /&gt;
| [[Log services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| manu&lt;br /&gt;
| [[Manu Services]]&lt;br /&gt;
| &amp;quot;Manufacturing&amp;quot;, present in factory firmware but not installed on retail systems.&lt;br /&gt;
|-&lt;br /&gt;
| lr, ncm, ncm:v&lt;br /&gt;
| [[NCM services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nfc:am, nfc:mf:u, nfc:user, nfc:sys&lt;br /&gt;
| NFC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nifm:u, nifm:a, nifm:s&lt;br /&gt;
| [[Network Interface services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| nim, nim:shp, ntc&lt;br /&gt;
| [[NIM services]]&lt;br /&gt;
| shp: eShop&lt;br /&gt;
|-&lt;br /&gt;
| npns:u, npns:s&lt;br /&gt;
| NPNS services&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| nvdrv:a, nvdrv:s, nvdrv:t, nvdrv, nvdrvdbg, nvgem:c, nvgem:cd, nvmemp&lt;br /&gt;
| [[NV services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pcie&lt;br /&gt;
| [[PCIe services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pctl, pctl:a, pctl:s, pctl:r&lt;br /&gt;
| [[Parental Control services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| pm:bm, pm:info, pm:shell&lt;br /&gt;
| [[Process Manager services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| psc:c, psc:m&lt;br /&gt;
| PSC services&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] ldr:ro, ro:dmnt&lt;br /&gt;
| [[Loader services|RO services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| set, set:fd, set:cal, set:sys&lt;br /&gt;
| [[Settings services]]&lt;br /&gt;
| cal: calibration, sys: System Settings&lt;br /&gt;
|-&lt;br /&gt;
| [3.0.0+] mii:u, mii:e, pdm:ntfy, pdm:qry, pl:u&lt;br /&gt;
| [[Shared Database services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ssl&lt;br /&gt;
| [[SSL services]]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| csrng, spl:&lt;br /&gt;
| [[SPL services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| usb:ds, usb:hs, usb:pd, usb:pd:c, usb:pm&lt;br /&gt;
| [[USB services]]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| wlan:inf, wlan:lcl, wlan:lg, wlan:lga, wlan:sg, wlan:soc&lt;br /&gt;
| WLAN services&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Sebastiaan</name></author>
	</entry>
</feed>