Line 527: |
Line 527: |
| | | |
| This is used by [[BTM_services|btm]]. | | This is used by [[BTM_services|btm]]. |
| + | |
| + | [12.0.0+] If [[Settings_services#BluetoothDevicesSettings|TrustedServices]] is 0, value 0x100000 is used. When bit20 is set, HID is initialized for this device, otherwise when bitmask 0xC0000 is set (<code>if((TrustedServices & 0xC0000) != 0)</code>) [[#OpenAudioConnection|audio]] is initialized for this device. |
| | | |
| == GetPairedDeviceInfo == | | == GetPairedDeviceInfo == |
Line 962: |
Line 964: |
| | | |
| This is essentially the same as the other [12.0.0+] Get*EventInfo cmds, however in this case the output type is set to value 0 when no event is available. | | This is essentially the same as the other [12.0.0+] Get*EventInfo cmds, however in this case the output type is set to value 0 when no event is available. |
| + | |
| + | See [[#AudioEventInfo]]. |
| | | |
| == OpenAudioConnection == | | == OpenAudioConnection == |
Line 985: |
Line 989: |
| | | |
| == StartAudioOut == | | == StartAudioOut == |
− | Takes an input u32, a [[#PcmParameter]], a nn::TimeSpan, returns an output nn::TimeSpan and u64. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], a [[#PcmParameter]], a nn::TimeSpan latency, returns an output nn::TimeSpan latency and u64. |
| + | |
| + | This eventually uses BSA to start an AV stream. The codec is "Raw PCM". Synchronous feeding mode is used. |
| | | |
| == StopAudioOut == | | == StopAudioOut == |
− | Takes an input u32, no output. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], no output. |
| + | |
| + | This eventually uses BSA to stop an AV stream. The pause flag is set to false. |
| | | |
| == GetAudioOutState == | | == GetAudioOutState == |
− | Takes an input u32, returns an output [[#AudioOutState]]. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioOutState]]. |
| | | |
| == GetAudioOutFeedingCodec == | | == GetAudioOutFeedingCodec == |
− | Takes an input u32, returns an output [[#AudioCodec]]. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#AudioCodec]]. |
| | | |
| == GetAudioOutFeedingParameter == | | == GetAudioOutFeedingParameter == |
− | Takes an input u32, returns an output [[#PcmParameter]]. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output [[#PcmParameter]]. |
| | | |
| == AcquireAudioOutBufferAvailableEvent == | | == AcquireAudioOutBufferAvailableEvent == |
− | Takes an input u32, returns an output Event handle. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], returns an output Event handle. |
| | | |
| sdknso uses an user-specified EventClearMode. | | sdknso uses an user-specified EventClearMode. |
| + | |
| + | This gets an Event which was previously initialized. |
| | | |
| == SendAudioData == | | == SendAudioData == |
− | Takes an input u32, a type-0x9 input buffer, returns an output u64. | + | Takes an input u32 [[#OpenAudioOut|audio_handle]], a type-0x9 input buffer, returns an output u64 transferred_size. |
| + | |
| + | This eventually uses BSA to send the specified buffer to the required UIPC channel. If transferred_size doesn't match the buffer size, error 0x177A71 is returned. transferred_size is always either 0 (error occured) or the buffer size. |
| | | |
| == AcquireAudioControlInputStateChangedEvent == | | == AcquireAudioControlInputStateChangedEvent == |
Line 1,011: |
Line 1,023: |
| | | |
| sdknso uses an user-specified EventClearMode. | | sdknso uses an user-specified EventClearMode. |
| + | |
| + | This gets an Event which was previously initialized. |
| | | |
| == GetAudioControlInputState == | | == GetAudioControlInputState == |
− | Takes a type-0xA output buffer containing an array of [[#AudioControlButtonState]], returns an output s32. | + | Takes a type-0xA output buffer containing an array of [[#AudioControlButtonState]], returns an output s32 total_out. |
| + | |
| + | A maximum of 0xF entries can be returned. |
| | | |
| == AcquireAudioConnectionStateChangedEvent == | | == AcquireAudioConnectionStateChangedEvent == |
Line 1,019: |
Line 1,035: |
| | | |
| sdknso uses an user-specified EventClearMode. | | sdknso uses an user-specified EventClearMode. |
| + | |
| + | This gets an Event which was previously initialized. |
| | | |
| == GetConnectedAudioDevice == | | == GetConnectedAudioDevice == |
− | Takes a type-0xA output buffer containing an array of [[#Address]], returns an output s32. | + | Takes a type-0xA output buffer containing an array of [[#Address]], returns an output s32 total_out. |
| + | |
| + | A maximum of 0x8 entries can be returned. |
| | | |
| == IsManufacturingMode == | | == IsManufacturingMode == |
Line 1,491: |
Line 1,511: |
| |} | | |} |
| | | |
− | [1.0.0-11.0.1] [[#EventType|Type7]]: | + | [1.0.0-8.1.1] [[#EventType|Type7]]: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,498: |
Line 1,518: |
| ! Size | | ! Size |
| ! Description | | ! Description |
| + | |
| |- | | |- |
− | | 0x0 || 0x4 || Status, always 0 except with [[#ConnectionEventType|event0]]: 2 = ACL Link is now Resumed (BSA_SEC_RESUMED_EVT), 9 = connection failed (pairing/authentication failed, or opening the hid connection failed). | + | | 0x0 || 0x6 || Device [[#Address|address]]. |
| |- | | |- |
− | | 0x4 || 0x6 || Device [[#Address|address]]. | + | | 0x6 || 0x2 || Padding |
| |- | | |- |
− | | 0xA || 0x2 || Padding | + | | 0x8 || 0x4 || Status, always 0 except with [[#ConnectionEventType|event0]]: 2 = ACL Link is now Resumed (BSA_SEC_RESUMED_EVT), 9 = connection failed (pairing/authentication failed, or opening the hid connection failed). |
| |- | | |- |
| | 0xC || 0x4 || [[#ConnectionEventType]] | | | 0xC || 0x4 || [[#ConnectionEventType]] |
| |} | | |} |
| | | |
− | [12.0.0+] [[#EventType|Type4]]: | + | [9.0.0-11.0.1] [[#EventType|Type7]]: |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,516: |
Line 1,537: |
| ! Description | | ! Description |
| |- | | |- |
− | | 0x0 || 0x4 || [[#ConnectionEventType]] | + | | 0x0 || 0x4 || Status, always 0 except with [[#ConnectionEventType|event0]]: 2 = ACL Link is now Resumed (BSA_SEC_RESUMED_EVT), 9 = connection failed (pairing/authentication failed, or opening the hid connection failed). |
| |- | | |- |
| | 0x4 || 0x6 || Device [[#Address|address]]. | | | 0x4 || 0x6 || Device [[#Address|address]]. |
| |- | | |- |
− | | 0xA || 0xFE || Reserved | + | | 0xA || 0x2 || Padding |
| + | |- |
| + | | 0xC || 0x4 || [[#ConnectionEventType]] |
| + | |} |
| + | |
| + | [12.0.0+] [[#EventType|Type4]]: |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x4 || [[#ConnectionEventType]] |
| + | |- |
| + | | 0x4 || 0x6 || Device [[#Address|address]]. |
| + | |- |
| + | | 0xA || 0xFE || Reserved |
| |} | | |} |
| | | |
Line 1,614: |
Line 1,652: |
| [[#HidEventType|Type0]], for [[#GetHidEventInfo]]: | | [[#HidEventType|Type0]], for [[#GetHidEventInfo]]: |
| | | |
| + | [1.0.0-11.0.1] |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| |- | | |- |
Line 1,624: |
Line 1,663: |
| | 0x6 || 0x2 || Padding | | | 0x6 || 0x2 || Padding |
| |- | | |- |
− | | 0x8 || 0x4 || Status: | + | | 0x8 || 0x4 || Status: 0 = hid connection opened, 2 = hid connection closed, 8 = failed to open hid connection. |
− | [1.0.0-11.0.1] 0 = hid connection opened, 2 = hid connection closed, 8 = failed to open hid connection.
| + | |} |
| | | |
− | [12.0.0+] 0 = hid connection closed, 1 = hid connection opened, 2 = failed to open hid connection. | + | [12.0.0+] |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x4 || Status: 0 = hid connection closed, 1 = hid connection opened, 2 = failed to open hid connection. |
| + | |- |
| + | | 0x4 || 0x6 || Device [[#Address|address]]. |
| |} | | |} |
| | | |
Line 1,889: |
Line 1,937: |
| This is "nn::bluetooth::hal::AudioEventType". This is an u32 enum. | | This is "nn::bluetooth::hal::AudioEventType". This is an u32 enum. |
| | | |
− | = PcmParameter = | + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Name |
| + | ! Description |
| + | |- |
| + | | 0 || || None |
| + | |- |
| + | | 1 || || Connection |
| + | |} |
| + | |
| + | = AudioEventInfo = |
| + | This is the output buffer for [[#GetAudioEventInfo]]. The data stored here depends on the [[#AudioEventType]]. |
| + | |
| + | [[#AudioEventType|Type1]]: |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x4 || Status: 0 = AV connection closed, 1 = AV connection opened, 2 = failed to open AV connection. |
| + | |- |
| + | | 0x4 || 0x6 || Device [[#Address|address]]. |
| + | |- |
| + | | 0xA || 0x2 || Padding |
| + | |} |
| + | |
| + | = PcmParameter = |
| This is "nn::bluetooth::system::PcmParameter". This is a 0xC-byte struct with 4-byte alignment. | | This is "nn::bluetooth::system::PcmParameter". This is a 0xC-byte struct with 4-byte alignment. |
| + | |
| + | The sysmodule will Abort if any of these fields are invalid. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Offset |
| + | ! Size |
| + | ! Description |
| + | |- |
| + | | 0x0 || 0x4 || Must be 0-3. Controls number of channels: 0 = mono, non-zero = stereo. |
| + | |- |
| + | | 0x4 || 0x4 || s32 SampleRate. Must be one of the following: 16000, 32000, 44100, 48000. |
| + | |- |
| + | | 0x8 || 0x4 || Bits per sample. Must be 8 or 16. |
| + | |} |
| | | |
| = AudioOutState = | | = AudioOutState = |
| This is "nn::bluetooth::system::AudioOutState". This is an u32 enum. | | This is "nn::bluetooth::system::AudioOutState". This is an u32 enum. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Stopped |
| + | |- |
| + | | 1 || Started |
| + | |} |
| | | |
| = AudioCodec = | | = AudioCodec = |
| This is "nn::bluetooth::system::AudioCodec". This is an u32 enum. | | This is "nn::bluetooth::system::AudioCodec". This is an u32 enum. |
| + | |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Value |
| + | ! Description |
| + | |- |
| + | | 0 || Raw PCM |
| + | |} |
| | | |
| = AudioControlButtonState = | | = AudioControlButtonState = |
Line 1,999: |
Line 2,109: |
| | CYW4356A3_001.004.009.0092.0095 | | | CYW4356A3_001.004.009.0092.0095 |
| |- | | |- |
− | | [12.0.0] | + | | [12.0.0-12.0.2] |
| | BSA0106_01.60.00_ | | | BSA0106_01.60.00_ |
| | Hayward_T3_RC_20210224 | | | Hayward_T3_RC_20210224 |