Line 6:
Line 6:
This has max_sessions 6. IPC is handled by 2 threads shared with all services.
This has max_sessions 6. IPC is handled by 2 threads shared with all services.
−
These btm services with BLE only allow connecting to devices which have a [[#GattService]] with a certain custom UUID present.
+
With BLE connections, the remote device may receive ATT_READ_BY_GROUP_TYPE_REQ before the BLE connection-complete HCI event. One workaround for this is manually sending the response with HCI, after the connection is ready.
+
+
The output bool from all of these btm* service get-event cmds indicates whether the Event was successfully returned, user-processes will Abort when this is 0.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 24:
Line 26:
| 5 || [[#SetSlotMode]]
| 5 || [[#SetSlotMode]]
|-
|-
−
| 6 || [1.0.0-8.1.0] [[#SetBluetoothMode]]
+
| 6 || [1.0.0-8.1.1] [[#SetBluetoothMode]]
|-
|-
| 7 || [[#SetWlanMode]]
| 7 || [[#SetWlanMode]]
Line 38:
Line 40:
| 12 || [[#IncreaseDeviceInfoOrder]]
| 12 || [[#IncreaseDeviceInfoOrder]]
|-
|-
−
| 13 || [[#LlrNotify]]
+
| 13 || [9.0.0+] TriggerConnection ([1.0.0-8.1.1] [[#LlrNotify]])
|-
|-
| 14 || [[#EnableRadio]]
| 14 || [[#EnableRadio]]
Line 50:
Line 52:
| 18 || [2.0.0+] [[#AcquireAwakeReqEvent]]
| 18 || [2.0.0+] [[#AcquireAwakeReqEvent]]
|-
|-
−
| 19 || [4.0.0+] [[#AcquireLlrStateEvent]]
+
| 19 || [9.0.0+] AcquireConnectionTriggerEvent ([4.0.0-8.1.1] [[#AcquireLlrStateEvent]])
|-
|-
−
| 20 || [4.0.0+] [[#IsLlrStarted]]
+
| 20 || [9.0.0+] IsConnectionTriggered ([4.0.0-8.1.1] [[#IsLlrStarted]])
|-
|-
| 21 || [4.0.0+] [[#EnableSlotSaving]]
| 21 || [4.0.0+] [[#EnableSlotSaving]]
Line 60:
Line 62:
| 23 || [5.0.0+] [[#AcquireBleScanEvent]]
| 23 || [5.0.0+] [[#AcquireBleScanEvent]]
|-
|-
−
| 24 || [5.1.0+] GetBleScanParameterGeneral
+
| 24 || [5.1.0+] [[#GetBleScanParameterGeneral]]
|-
|-
−
| 25 || [5.1.0+] GetBleScanParameterSmartDevice
+
| 25 || [5.1.0+] [[#GetBleScanParameterSmartDevice]]
|-
|-
−
| 26 || [5.1.0+] StartBleScanForGeneral
+
| 26 || [5.1.0+] [[#StartBleScanForGeneral]]
|-
|-
−
| 27 || [5.1.0+] StopBleScanForGeneral
+
| 27 || [5.1.0+] [[#StopBleScanForGeneral]]
|-
|-
−
| 28 || [5.1.0+] GetBleScanResultsForGeneral
+
| 28 || [5.1.0+] [[#GetBleScanResultsForGeneral]]
|-
|-
−
| 29 || [5.1.0+] StartBleScanForPairedDevice
+
| 29 || [5.1.0+] [[#StartBleScanForPairedDevice]]
|-
|-
−
| 30 || [5.1.0+] StopBleScanForPairedDevice
+
| 30 || [5.1.0+] [[#StopBleScanForPairedDevice]]
|-
|-
−
| 31 || [5.1.0+] StartBleScanForSmartDevice
+
| 31 || [5.1.0+] [[#StartBleScanForSmartDevice]]
|-
|-
−
| 32 || [5.1.0+] StopBleScanForSmartDevice
+
| 32 || [5.1.0+] [[#StopBleScanForSmartDevice]]
|-
|-
−
| 33 || [5.1.0+] GetBleScanResultsForSmartDevice
+
| 33 || [5.1.0+] [[#GetBleScanResultsForSmartDevice]]
|-
|-
−
| 34 || [5.1.0+] AcquireBleConnectionEvent
+
| 34 || [5.1.0+] [[#AcquireBleConnectionEvent]]
|-
|-
| 35 ([5.0.0-5.0.2] 24) || [5.0.0+] [[#BleConnect]]
| 35 ([5.0.0-5.0.2] 24) || [5.0.0+] [[#BleConnect]]
|-
|-
−
| 36 || [5.1.0+] BleOverrideConnection
+
| 36 || [5.1.0+] [[#BleOverrideConnection]]
|-
|-
| 37 ([5.0.0-5.0.2] 25) || [5.0.0+] [[#BleDisconnect]]
| 37 ([5.0.0-5.0.2] 25) || [5.0.0+] [[#BleDisconnect]]
Line 94:
Line 96:
| 40 ([5.0.0-5.0.2] 28) || [5.0.0+] [[#AcquireBlePairingEvent]]
| 40 ([5.0.0-5.0.2] 28) || [5.0.0+] [[#AcquireBlePairingEvent]]
|-
|-
−
| 41 || [5.1.0+] BlePairDevice
+
| 41 || [5.1.0+] [[#BlePairDevice]]
|-
|-
−
| 42 || [5.1.0+] BleUnpairDeviceOnBoth
+
| 42 || [5.1.0+] [[#BleUnpairDeviceOnBoth]]
|-
|-
−
| 43 || [5.1.0+] BleUnpairDevice
+
| 43 || [5.1.0+] [[#BleUnpairDevice]]
|-
|-
−
| 44 || [5.1.0+] BleGetPairedAddresses
+
| 44 || [5.1.0+] [[#BleGetPairedAddresses]]
|-
|-
−
| 45 || [5.1.0+] AcquireBleServiceDiscoveryEvent
+
| 45 || [5.1.0+] [[#AcquireBleServiceDiscoveryEvent]]
|-
|-
| 46 ([5.0.0-5.0.2] 29) || [5.0.0+] [[#GetGattServices]]
| 46 ([5.0.0-5.0.2] 29) || [5.0.0+] [[#GetGattServices]]
Line 132:
Line 134:
| 59 ([5.0.0-5.0.2] 42) || [5.0.0+] [[#SetAppletResourceUserId]]
| 59 ([5.0.0-5.0.2] 42) || [5.0.0+] [[#SetAppletResourceUserId]]
|-
|-
−
| 60 || [8.0.0+]
+
| 60 || [8.0.0+] [[#AcquireBleConnectionParameterUpdateEvent]]
+
|-
+
| 61 || [8.0.0+] [[#SetCeLength]]
+
|-
+
| 62 || [9.0.0+] [[#EnsureSlotExpansion]]
+
|-
+
| 63 || [9.0.0+] [[#IsSlotExpansionEnsured]]
+
|-
+
| 64 || [10.0.0+] [[#CancelConnectionTrigger]]
+
|-
+
| 65 || [13.0.0+] GetConnectionCapacity
+
|-
+
| 66 || [13.0.0+] GetWlanMode
+
|-
+
| 67 || [13.0.0+] IsSlotSavingEnabled
+
|-
+
| 68 || [13.0.0+] IsSlotSavingForPairingEnabled
+
|-
+
| 69 || [13.0.0+] AcquireAudioDeviceConnectionEvent
+
|-
+
| 70 || [13.0.0+] GetConnectedAudioDevices
+
|-
+
| 71 || [13.0.0+] SetAudioSourceVolume
+
|-
+
| 72 || [13.0.0+] GetAudioSourceVolume
+
|-
+
| 73 || [13.0.0+] RequestAudioDeviceConnectionRejection
+
|-
+
| 74 || [13.0.0+] CancelAudioDeviceConnectionRejection
+
|-
+
| 75 || [13.0.0+] GetPairedAudioDevices
+
|-
+
| 76 || [13.1.0+] SetWlanModeWithOption
+
|-
+
| 100 || [13.0.0+] AcquireConnectionDisallowedEvent
+
|-
+
| 101 || [13.0.0+] GetUsecaseViolationFactor
+
|-
+
| 110 || [13.0.0+] GetShortenedDeviceInfo
+
|-
+
| 111 || [13.0.0+] AcquirePairingCountUpdateEvent
+
|-
+
| 112 || [14.0.0-14.1.2]
+
|-
+
| 113 || [14.0.0-14.1.2]
|-
|-
−
| 61 || [8.0.0+]
+
| 114 || [14.0.0+] IsFirstAudioControlConnection
|-
|-
−
| 62 || [9.0.0+]
+
| 115 || [14.0.0+] GetShortenedDeviceCondition
|-
|-
−
| 63 || [9.0.0+]
+
| 116 || [15.0.0+] SetAudioSinkVolume
|-
|-
−
| 64 || [10.0.0+]
+
| 117 || [15.0.0+] GetAudioSinkVolume
|}
|}
== GetState ==
== GetState ==
−
No input, returns an output [[#BtmState]].
+
No input. Returns an output [[#BtmState]].
== GetHostDeviceProperty ==
== GetHostDeviceProperty ==
−
No input, returns an output [[#HostDeviceProperty]].
+
No input. Returns an output [[#HostDeviceProperty]].
+
+
[13.0.0+] Takes a type-0x1A output buffer containing a [[#HostDeviceProperty]]. No output.
+
+
This gets the previously initialized [[#HostDeviceProperty]].
== AcquireDeviceConditionEvent ==
== AcquireDeviceConditionEvent ==
−
No input, returns an output Event handle with EventClearMode=1.
+
No input. Returns an output Event handle with EventClearMode=1.
−
[3.0.0+] Now returns an additional output u8.
+
[3.0.0+] Now returns an additional output bool.
== GetDeviceCondition ==
== GetDeviceCondition ==
−
Takes a type-0x1A output buffer containing a 0x368-byte struct.
+
Takes a type-0x1A output buffer containing a [[#DeviceConditionList]]. No output.
+
+
[13.0.0+] Takes an input u32 [[#Profile]], a type-0xA output buffer containing an array of [[#DeviceCondition]], returns a s32 for total output entries. When [[#Profile]] is non-zero, entries are only returned with a matching [[#Profile]].
== SetBurstMode ==
== SetBurstMode ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a bool, no output.
+
Takes an input [[#BdAddress|BdAddress]] and a bool. No output.
== SetSlotMode ==
== SetSlotMode ==
−
Takes a type-0x19 input buffer containing a [[#DeviceSlotModeList]], no output.
+
Takes a type-0x19 input buffer containing a [[#DeviceSlotModeList]]. No output.
+
+
Sends a request which is then handled as follows:
+
* Calls a func for getting the data from [[#DeviceSlotModeList]] etc for passing to another func, that func then does the following:
+
* Goes through multiple arrays of [[#BdAddress|BdAddress]].
+
** First array:
+
*** Validates the [[#BdAddress|BdAddress]] with state, skipping it if not found.
+
*** Calls the SetTsi wrapper func described below, with the above [[#BdAddress|BdAddress]] and tsi=0xFF (Exit). If this returns false, [[Bluetooth_Driver_services#CloseHidConnection|CloseHidConnection]] is used with the [[#BdAddress|BdAddress]].
+
** Second array:
+
*** Validates the [[#BdAddress|BdAddress]] with state, skipping it if not found.
+
*** Uses [[Bluetooth_Driver_services#SetBleConnectionParameter|SetBleConnectionParameter]] with bool=true. Then the required EventInfo is loaded, {...}.
+
** Then it goes through the first array again, except here it does the following:
+
*** Calls the same func for validating the [[#BdAddress|BdAddress]] with state, skipping it if not found. It is also skipped if the u32 at Address+0x8 is value 0x3.
+
*** Determines what Tsi value to use, on failure [[Bluetooth_Driver_services#CloseHidConnection|CloseHidConnection]] is used and the loop is continued.
+
*** Calls the SetTsi wrapper func described below, with the [[#BdAddress|BdAddress]] and the above Tsi value. If this returns false, [[Bluetooth_Driver_services#CloseHidConnection|CloseHidConnection]] is used with the [[#BdAddress|BdAddress]].
+
** It then goes through various arrays again for updating state.
+
** {...}
+
+
Note that the above func is also called from various other funcs as well. An [[Bluetooth_Driver_services#HidEventType|event]] for opening a hid connection also triggers it in some cases.
+
+
The SetTsi wrapper func is implemented as follows:
+
* Uses [[Bluetooth_Driver_services#SetTsi|SetTsi]], on failure true is returned.
+
* Gets the required EventInfo, returning false if a match wasn't found / EventInfo status indicates failure. True is returned for success.
== SetBluetoothMode ==
== SetBluetoothMode ==
−
Takes an input [[#BluetoothMode]], no output.
+
Takes an input [[#BluetoothMode]]. No output.
== SetWlanMode ==
== SetWlanMode ==
−
Takes an input [[#WlanMode]], no output.
+
Takes an input [[#WlanMode]]. No output.
== AcquireDeviceInfoEvent ==
== AcquireDeviceInfoEvent ==
−
No input, returns an output Event handle with EventClearMode=1.
+
No input. Returns an output Event handle with EventClearMode=1.
−
[3.0.0+] Now returns an additional output u8.
+
[3.0.0+] Now returns an additional output bool.
== GetDeviceInfo ==
== GetDeviceInfo ==
−
Takes a type-0x1A output buffer containing a [[#DeviceInfoList]].
+
Takes a type-0x1A output buffer containing a [[#DeviceInfoList]]. No output.
+
+
[13.0.0+] Takes an input u32 [[#Profile]], a type-0xA output buffer containing an array of [[#DeviceInfo]], returns a s32 for total output entries. When [[#Profile]] is non-zero, entries are only returned with a matching [[#Profile]].
== AddDeviceInfo ==
== AddDeviceInfo ==
−
Takes an input [[#DeviceInfo]], no output.
+
Takes an input [[#DeviceInfo]]. No output.
+
+
[13.0.0+] Takes a type-0x19 input buffer containing a [[#DeviceInfo]], no output.
== RemoveDeviceInfo ==
== RemoveDeviceInfo ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
+
Takes an input [[#BdAddress|BdAddress]]. No output.
== IncreaseDeviceInfoOrder ==
== IncreaseDeviceInfoOrder ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
+
Takes an input [[#BdAddress|BdAddress]]. No output.
== LlrNotify ==
== LlrNotify ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
+
Takes an input [[#BdAddress|BdAddress]]. No output.
−
[9.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]] and a s32, no output.
+
[9.0.0+] Takes an input [[#BdAddress|BdAddress]] and a s32, no output.
== EnableRadio ==
== EnableRadio ==
Line 198:
Line 276:
== HidDisconnect ==
== HidDisconnect ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
+
Takes an input [[#BdAddress|BdAddress]]. No output.
== HidSetRetransmissionMode ==
== HidSetRetransmissionMode ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]], no output.
+
Takes an input [[#BdAddress|BdAddress]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]]. No output.
== AcquireAwakeReqEvent ==
== AcquireAwakeReqEvent ==
−
No input, returns an output Event handle with EventClearMode=1.
+
No input. Returns an output Event handle with EventClearMode=1.
−
[3.0.0+] Now returns an additional output u8.
+
[3.0.0+] Now returns an additional output bool.
== AcquireLlrStateEvent ==
== AcquireLlrStateEvent ==
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
== IsLlrStarted ==
== IsLlrStarted ==
−
No input, returns an output bool.
+
No input. Returns an output bool.
== EnableSlotSaving ==
== EnableSlotSaving ==
−
Takes an input bool, no output.
+
Takes an input bool. No output.
== ProtectDeviceInfo ==
== ProtectDeviceInfo ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a bool, no output.
+
Takes an input [[#BdAddress|BdAddress]] and a bool. No output.
== AcquireBleScanEvent ==
== AcquireBleScanEvent ==
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
+
+
== GetBleScanParameterGeneral ==
+
Takes an input u16 ParameterId. Returns a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]].
+
+
The u16 must be value 0x1 or 0xFFFF.
+
+
[[HID_services|hid]] uses value 0x1 for Palma.
+
+
The output BleAdvertisePacketParameter starting at +0x2 contains (CompanyId is 0x0553 for Nintendo for both of these):
+
* ParameterId 0x1: <code>000100000100</code>
+
* ParameterId 0xFFFF: <code>ADDE00EFBE00</code>
+
+
== GetBleScanParameterSmartDevice ==
+
Takes an input u16 ParameterId. Returns a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
+
+
The u16 must be value 0x2. The first 4-bytes of output is always 0 since it's not set.
+
+
== StartBleScanForGeneral ==
+
Takes a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. No output.
+
+
This eventually uses [[Bluetooth_Driver_services#AddBleScanFilterCondition|AddBleScanFilterCondition]], where the the passed BleAdvertiseFilter is generated from the input BleAdvertisePacketParameter.
+
+
This also uses [[Bluetooth_Driver_services#SetBleScanParameter|SetBleScanParameter]].
+
+
== StopBleScanForGeneral ==
+
No input/output.
+
+
== GetBleScanResultsForGeneral ==
+
Takes a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]]. Returns an output u8 total_out.
+
+
The max array entries is 10.
+
+
== StartBleScanForPaired ==
+
Takes a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. No output.
+
+
This eventually uses [[Bluetooth_Driver_services#AddBleScanFilterCondition|AddBleScanFilterCondition]], where the the passed BleAdvertiseFilter is generated from the input BleAdvertisePacketParameter.
+
+
This also uses [[Bluetooth_Driver_services#SetBleScanParameter|SetBleScanParameter]].
+
+
== StopBleScanForPaired ==
+
No input/output.
+
+
== StartBleScanForSmartDevice ==
+
Takes a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]. No output.
+
+
This eventually uses [[Bluetooth_Driver_services#AddBleScanFilterCondition|AddBleScanFilterCondition]], where the the passed BleAdvertiseFilter is generated from the input GattAttributeUuid.
+
+
This also uses [[Bluetooth_Driver_services#SetBleScanParameter|SetBleScanParameter]].
+
+
The [[Bluetooth_Driver_services#BleAdvertiseFilter|BleAdvertiseFilter]] is generated as follows: CondType = 7(ServiceUuid128), CondDataSize = 0x11. CondData: {128bit UUID copied from the [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]] (size field ignored), then an u8 with value 0x0 (unused)}. MaskSize = 0x10, Mask = {all 0xFF}.
+
+
== StopBleScanForSmartDevice ==
+
No input/output.
+
+
== GetBleScanResultsForSmartDevice ==
+
Takes a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]]. Returns an output u8 total_out.
+
+
The max array entries is 10.
+
+
== AcquireBleConnectionEvent ==
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
== BleConnect ==
== BleConnect ==
−
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
+
Takes an input [[#BdAddress|BdAddress]]. No output.
+
+
An error is thrown if the [[#BdAddress|BdAddress]] is already connected (listed in the [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]). An error is thrown if 4 [[#BleGetConnectionState|devices]] are already connected.
+
+
== BleOverrideConnection ==
+
Takes an input u32 ConnectionHandle. No output.
+
+
The u32 is the same as the param for [[#BleDisconnect]].
== BleDisconnect ==
== BleDisconnect ==
−
Takes an input u32, no output.
+
Takes an input u32 ConnectionHandle. No output.
+
+
The u32 must match a ConnectionHandle in a [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]. [5.1.0+] 0xFFFFFFFF is invalid.
== BleGetConnectionState ==
== BleGetConnectionState ==
−
Takes a type-0xA output buffer containing an array of [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]], returns an output u8 total_out.
+
Takes a type-0xA output buffer containing an array of [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]]. Returns an output u8 total_out.
+
+
Other cmds which use this internally use arraycount=4.
== BleGetGattClientConditionList ==
== BleGetGattClientConditionList ==
Line 236:
Line 386:
== AcquireBlePairingEvent ==
== AcquireBlePairingEvent ==
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
+
+
== BlePairDevice ==
+
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] and an input u32 ConnectionHandle. No output.
+
+
The u32 is the same as the param for [[#BleDisconnect]].
+
+
== BleUnpairDeviceOnBoth ==
+
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] an input u32 ConnectionHandle. No output.
+
+
The u32 is the same as the param for [[#BleDisconnect]].
+
+
== BleUnpairDevice ==
+
Takes an input [[#BdAddress|BdAddress]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. No output.
+
+
== BleGetPairedAddresses ==
+
Takes a type-0xA output buffer containing an array of [[#BdAddress|BdAddress]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. Returns an output u8 total_out.
+
+
The max array entries is 10.
+
+
== AcquireBleServiceDiscoveryEvent ==
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
== GetGattServices ==
== GetGattServices ==
−
Takes a type-0x6 output buffer containing an array of [[#GattService]], an u32, returns an output u8 total_out.
+
Takes a type-0x6 output buffer containing an array of [[#GattService]] and an input u32 ConnectionHandle. Returns an output u8 total_out.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
== GetGattService ==
== GetGattService ==
−
Takes a type-0x1A output buffer containing a [[#GattService]], an u32, a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], returns an output u8 total_out.
+
Takes a type-0x1A output buffer containing a [[#GattService]], an input u32 ConnectionHandle and a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]. Returns an output bool.
−
The u32 is the same as the param for [[#BleDisconnect]].
+
The u32 is the same as the param for [[#BleDisconnect]]. The output bool indicates whether a [[#GattService]] was returned.
Same as [[#GetGattServices]] except this only returns the [[#GattService]] which matches the input [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
Same as [[#GetGattServices]] except this only returns the [[#GattService]] which matches the input [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
== GetGattIncludedServices ==
== GetGattIncludedServices ==
−
Takes a type-0x6 output buffer containing an array of [[#GattService]], an u16, an u32, returns an output u8.
+
Takes a type-0x6 output buffer containing an array of [[#GattService]], an u16 ServiceHandle and an input u32 ConnectionHandle. Returns an output u8.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
Line 260:
Line 431:
== GetBelongingService ==
== GetBelongingService ==
−
Takes a type-0x1A output buffer containing a [[#GattService]], an u16, an u32, returns an output u8 total_out.
+
Takes a type-0x1A output buffer containing a [[#GattService]], an u16 AttributeHandle and an input u32 ConnectionHandle. Returns an output bool.
−
The u32 is the same as the param for [[#BleDisconnect]].
+
The u32 is the same as the param for [[#BleDisconnect]]. The output bool indicates whether a [[#GattService]] was returned.
This is similar to [[#GetGattIncludedServices]] except this only returns 1 [[#GattService]].
This is similar to [[#GetGattIncludedServices]] except this only returns 1 [[#GattService]].
== GetGattCharacteristics ==
== GetGattCharacteristics ==
−
Takes a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16, an u32, returns an output u8 total_out.
+
Takes a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16 ServiceHandle and an input u32 ConnectionHandle. Returns an output u8 total_out.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
+
+
The u16 controls which [[#GattCharacteristic]] entries to return.
== GetGattDescriptors ==
== GetGattDescriptors ==
−
Takes a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16, an u32, returns an output u8 total_out.
+
Takes a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16 CharHandle and an input u32 ConnectionHandle. Returns an output u8 total_out.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100.
+
+
The u16 controls which [[#GattDescriptor]] entries to return.
== AcquireBleMtuConfigEvent ==
== AcquireBleMtuConfigEvent ==
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
== ConfigureBleMtu ==
== ConfigureBleMtu ==
−
Takes an u16, an u32, no output.
+
Takes an u16 mtu and an input u32 ConnectionHandle. No output.
The u32 is the same as the param for [[#BleDisconnect]].
The u32 is the same as the param for [[#BleDisconnect]].
== GetBleMtu ==
== GetBleMtu ==
−
Takes an u32, returns an output u16.
+
Takes an input u32 ConnectionHandle. Returns an output u16 mtu.
The u32 is the same as the param for [[#BleDisconnect]].
The u32 is the same as the param for [[#BleDisconnect]].
== RegisterBleGattDataPath ==
== RegisterBleGattDataPath ==
−
Takes a [[#BleDataPath]], no output.
+
Takes a [[#BleDataPath]]. No output.
== UnregisterBleGattDataPath ==
== UnregisterBleGattDataPath ==
−
Takes a [[#BleDataPath]], no output.
+
Takes a [[#BleDataPath]]. No output.
== RegisterAppletResourceUserId ==
== RegisterAppletResourceUserId ==
−
Takes an input u32 and an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes an input u32 and an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
== UnregisterAppletResourceUserId ==
== UnregisterAppletResourceUserId ==
−
Takes an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
== SetAppletResourceUserId ==
== SetAppletResourceUserId ==
−
Takes an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes an input [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
== AcquireBleConnectionParameterUpdateEvent ==
+
No input. Returns an output Event handle with EventClearMode=1.
+
+
== SetCeLength ==
+
Takes an input [[#DeviceCeLengthList|DeviceCeLengthList]]. No output.
+
+
Sends a request which is then handled as follows:
+
* Calls a func for getting the data from the input struct etc for passing to another func, that func is the same one called by [[#SetSlotMode]].
−
== Cmd60 ==
+
== EnsureSlotExpansion ==
−
No input, returns an output Event handle with EventClearMode=1.
+
Takes an input bool. No output.
−
== Cmd61 ==
+
Sends a request which is handled as follows: writes the flag into state if needed.
−
Takes a 0x44-byte input struct, no output.
−
== Cmd62 ==
+
== IsSlotExpansionEnsured ==
−
Takes an input bool, no output.
+
No input. Returns an output bool.
−
== Cmd63 ==
+
This gets the flag used by [[#EnsureSlotExpansion]].
−
No input, returns an output bool.
−
== Cmd64 ==
+
== CancelConnectionTrigger ==
No input/output.
No input/output.
+
+
Sends a request which is handled as follows: if a state field is set, another state field is set to value 1.
= btm:dbg =
= btm:dbg =
Line 328:
Line 512:
! Cmd || Name
! Cmd || Name
|-
|-
−
| 0 || AcquireDiscoveryEvent
+
| 0 || [[#AcquireDiscoveryEvent]]
+
|-
+
| 1 || [[#StartDiscovery]]
+
|-
+
| 2 || [[#CancelDiscovery]]
|-
|-
−
| 1 || StartDiscovery
+
| 3 || [12.0.0+] IsDiscoveryEnabled ([1.0.0-11.0.1] [[#GetDeviceProperty]])
|-
|-
−
| 2 || CancelDiscovery
+
| 4 || [[#CreateBond]]
|-
|-
−
| 3 || GetDeviceProperty
+
| 5 || [[#CancelBond]]
|-
|-
−
| 4 || CreateBond
+
| 6 || [[#SetTsiMode]]
|-
|-
−
| 5 || CancelBond
+
| 7 || [[#GeneralTest]]
|-
|-
−
| 6 || SetTsiMode
+
| 8 || [[#HidConnect]]
|-
|-
−
| 7 || GeneralTest
+
| 9 || [5.0.0+] [[#GeneralGet]]
|-
|-
−
| 8 || HidConnect
+
| 10 || [5.1.0+] [[#GetGattClientDisconnectionReason]]
|-
|-
−
| 9 || [5.0.0+] GeneralGet
+
| 11 || [5.1.0+] [[#GetBleConnectionParameter]]
|-
|-
−
| 10 || [5.1.0+] GetGattClientDisconnectionReason
+
| 12 || [5.1.0+] [[#GetBleConnectionParameterRequest]]
|-
|-
−
| 11 || [5.1.0+] GetBleConnectionParameter
+
| 13 || [12.0.0+] GetDiscoveredDevice
|-
|-
−
| 12 || [5.1.0+] GetBleConnectionParameterRequest
+
| 14 || [15.0.0+] SleepAwakeLoopTest
+
|-
+
| 15 || [15.0.0+] SleepTest
+
|-
+
| 16 || [15.0.0+] MinimumAwakeTest
+
|-
+
| 17 || [15.0.0+] ForceEnableBtm
|}
|}
−
[3.0.0+] RegisterSystemEventForDiscovery now returns an output u8.
+
== AcquireDiscoveryEvent ==
+
No input. Returns output an Event handle with EventClearMode=1.
+
+
[3.0.0+] Now returns an additional output bool.
+
+
== StartDiscovery ==
+
No input/output.
+
+
== CancelDiscovery ==
+
No input/output.
+
+
== GetDeviceProperty ==
+
Takes a type-0x1A output buffer containing a [[#DevicePropertyList]]. No output.
+
+
== CreateBond ==
+
Takes an input [[#BdAddress|BdAddress]]. No output.
+
+
[13.0.0+] Now takes a type-0xA output buffer, returns a total of 4-bytes of output.
+
+
== CancelBond ==
+
Takes an input [[#BdAddress|BdAddress]]. No output.
+
+
== SetTsiMode ==
+
Takes an input [[#BdAddress|BdAddress]] and a [[#TsiMode]]. No output.
+
+
Sends a request which is handled as follows: uses [[Bluetooth_Driver_services#SetTsi|SetTsi]] directly with the specified params.
+
+
== GeneralTest ==
+
Takes an input s32. No output.
+
+
== HidConnect ==
+
Takes an input [[#BdAddress|BdAddress]]. No output.
+
+
== GeneralGet ==
+
Takes an input u32 and a type-0x1A output buffer containing a 0x11-byte struct. No output.
+
+
== GetGattClientDisconnectionReason ==
+
Takes an input [[#BdAddress|BdAddress]] and an u32. Returns an output bool and u16.
+
+
The bool indicates whether the cmd is successful.
+
+
== GetBleConnectionParameter ==
+
Takes an input u32. Returns an output bool and 3 u16s.
+
+
The bool indicates whether the cmd is successful, the output u16s are only set when this bool is set.
+
+
== GetBleConnectionParameterRequest ==
+
Takes an input u32. Returns an output bool and 4 u16s.
+
+
The bool indicates whether the cmd is successful, the output u16s are only set when this bool is set.
= btm:sys =
= btm:sys =
Line 370:
Line 613:
== GetCore ==
== GetCore ==
−
No input, returns an output [[#IBtmSystemCore]].
+
No input. Returns an output [[#IBtmSystemCore]].
== IBtmSystemCore ==
== IBtmSystemCore ==
Line 391:
Line 634:
| 5 || [[#DisableRadio]]
| 5 || [[#DisableRadio]]
|-
|-
−
| 6 || [[#GetRadioOnOff]]
+
| 6 || [[#IsRadioEnabled]]
|-
|-
| 7 || [3.0.0+] [[#AcquireRadioEvent]]
| 7 || [3.0.0+] [[#AcquireRadioEvent]]
Line 398:
Line 641:
|-
|-
| 9 || [3.0.0+] [[#IsGamepadPairingStarted]]
| 9 || [3.0.0+] [[#IsGamepadPairingStarted]]
+
|-
+
| 10 || [13.0.0+] StartAudioDeviceDiscovery
+
|-
+
| 11 || [13.0.0+] StopAudioDeviceDiscovery
+
|-
+
| 12 || [13.0.0+] IsDiscoveryingAudioDevice
+
|-
+
| 13 || [13.0.0+] GetDiscoveredAudioDevice
+
|-
+
| 14 || [13.0.0+] AcquireAudioDeviceConnectionEvent
+
|-
+
| 15 || [13.0.0+] ConnectAudioDevice
+
|-
+
| 16 || [13.0.0+] IsConnectingAudioDevice
+
|-
+
| 17 || [13.0.0+] GetConnectedAudioDevices
+
|-
+
| 18 || [13.0.0+] DisconnectAudioDevice
+
|-
+
| 19 || [13.0.0+] AcquirePairedAudioDeviceInfoChangedEvent
+
|-
+
| 20 || [13.0.0+] GetPairedAudioDevices
+
|-
+
| 21 || [13.0.0+] RemoveAudioDevicePairing
+
|-
+
| 22 || [13.0.0+] RequestAudioDeviceConnectionRejection
+
|-
+
| 23 || [13.0.0+] CancelAudioDeviceConnectionRejection
|}
|}
Line 410:
Line 681:
=== GetPairedGamepadCount ===
=== GetPairedGamepadCount ===
−
No input, returns an output u8.
+
No input. Returns an output u8.
=== EnableRadio ===
=== EnableRadio ===
Line 418:
Line 689:
No input/output.
No input/output.
−
=== GetRadioOnOff ===
+
=== IsRadioEnabled ===
−
No input, returns an output bool.
+
No input. Returns an output bool.
=== AcquireRadioEvent ===
=== AcquireRadioEvent ===
−
No input, returns an output bool and handle.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
=== AcquireGamepadPairingEvent ===
=== AcquireGamepadPairingEvent ===
−
No input, returns an output bool and handle.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
=== IsGamepadPairingStarted ===
=== IsGamepadPairingStarted ===
−
No input, returns an output bool.
+
No input. Returns an output bool.
= btm:u =
= btm:u =
Line 445:
Line 716:
== GetCore ==
== GetCore ==
−
No input, returns an output [[#IBtmUserCore]].
+
No input. Returns an output [[#IBtmUserCore]].
== IBtmUserCore ==
== IBtmUserCore ==
Line 456:
Line 727:
| 0 || [[#AcquireBleScanEvent_2|AcquireBleScanEvent]]
| 0 || [[#AcquireBleScanEvent_2|AcquireBleScanEvent]]
|-
|-
−
| 1 || [[#GetBleScanFilterParameter]]
+
| 1 || [[#GetBleScanFilterParameter|GetBleScanFilterParameter]]
|-
|-
−
| 2 || [[#GetBleScanFilterParameter2]]
+
| 2 || [[#GetBleScanFilterParameter2|GetBleScanFilterParameter2]]
|-
|-
−
| 3 || [[#StartBleScanForGeneral]]
+
| 3 || [[#StartBleScanForGeneral_2|StartBleScanForGeneral]]
|-
|-
−
| 4 || [[#StopBleScanForGeneral]]
+
| 4 || [[#StopBleScanForGeneral_2|StopBleScanForGeneral]]
|-
|-
−
| 5 || [[#GetBleScanResultsForGeneral]]
+
| 5 || [[#GetBleScanResultsForGeneral_2|GetBleScanResultsForGeneral]]
|-
|-
−
| 6 || [[#StartBleScanForPaired]]
+
| 6 || [[#StartBleScanForPaired_2|StartBleScanForPaired]]
|-
|-
−
| 7 || [[#StopBleScanForPaired]]
+
| 7 || [[#StopBleScanForPaired_2|StopBleScanForPaired]]
|-
|-
−
| 8 || [[#StartBleScanForSmartDevice]]
+
| 8 || [[#StartBleScanForSmartDevice_2|StartBleScanForSmartDevice]]
|-
|-
−
| 9 || [[#StopBleScanForSmartDevice]]
+
| 9 || [[#StopBleScanForSmartDevice_2|StopBleScanForSmartDevice]]
|-
|-
−
| 10 || [[#GetBleScanResultsForSmartDevice]]
+
| 10 || [[#GetBleScanResultsForSmartDevice_2|GetBleScanResultsForSmartDevice]]
|-
|-
−
| 17 || [[#AcquireBleConnectionEvent]]
+
| 17 || [[#AcquireBleConnectionEvent_2|AcquireBleConnectionEvent]]
|-
|-
| 18 || [[#BleConnect_2|BleConnect]]
| 18 || [[#BleConnect_2|BleConnect]]
Line 486:
Line 757:
| 21 || [[#AcquireBlePairingEvent_2|AcquireBlePairingEvent]]
| 21 || [[#AcquireBlePairingEvent_2|AcquireBlePairingEvent]]
|-
|-
−
| 22 || [[#BlePairDevice]]
+
| 22 || [[#BlePairDevice_2|BlePairDevice]]
|-
|-
−
| 23 || [[#BleUnPairDevice]]
+
| 23 || [[#BleUnPairDevice_2|BleUnPairDevice]]
|-
|-
−
| 24 || [[#BleUnPairDevice2]]
+
| 24 || [[#BleUnPairDevice2|BleUnPairDevice2]]
|-
|-
−
| 25 || [[#BleGetPairedDevices]]
+
| 25 || [[#BleGetPairedDevices|BleGetPairedDevices]]
|-
|-
−
| 26 || [[#AcquireBleServiceDiscoveryEvent]]
+
| 26 || [[#AcquireBleServiceDiscoveryEvent_2|AcquireBleServiceDiscoveryEvent]]
|-
|-
| 27 || [[#GetGattServices_2|GetGattServices]]
| 27 || [[#GetGattServices_2|GetGattServices]]
Line 502:
Line 773:
| 29 || [[#GetGattIncludedServices_2|GetGattIncludedServices]]
| 29 || [[#GetGattIncludedServices_2|GetGattIncludedServices]]
|-
|-
−
| 30 || [[#GetBelongingGattService]]
+
| 30 || [[#GetBelongingGattService|GetBelongingGattService]]
|-
|-
| 31 || [[#GetGattCharacteristics_2|GetGattCharacteristics]]
| 31 || [[#GetGattCharacteristics_2|GetGattCharacteristics]]
Line 520:
Line 791:
=== AcquireBleScanEvent ===
=== AcquireBleScanEvent ===
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
−
sdknso will Abort if the output u8 is value 0.
+
This is similar to the [[#AcquireBleScanEvent|btm]] cmd.
=== GetBleScanFilterParameter ===
=== GetBleScanFilterParameter ===
−
Takes an input u16, returns a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]].
+
Takes an input u16. Returns a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]].
−
The u16 must be value 0x1 or 0xFFFF.
+
This is the same as [[#GetBleScanParameterGeneral]].
=== GetBleScanFilterParameter2 ===
=== GetBleScanFilterParameter2 ===
−
Takes an input u16, returns a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
+
Takes an input u16. Returns a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
−
The u16 must be value 0x2. The first 4-bytes of output is always 0 since it's not set.
+
This is the same as [[#GetBleScanParameterSmartDevice]].
=== StartBleScanForGeneral ===
=== StartBleScanForGeneral ===
−
Takes a PID, a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
This is similar to the [[#StartBleScanForGeneral|btm]] cmd.
=== StopBleScanForGeneral ===
=== StopBleScanForGeneral ===
No input/output.
No input/output.
+
+
This is similar to the [[#StopBleScanForGeneral|btm]] cmd.
=== GetBleScanResultsForGeneral ===
=== GetBleScanResultsForGeneral ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
The max array entries is 10.
+
This is similar to the [[#GetBleScanResultsForGeneral|btm]] cmd.
=== StartBleScanForPaired ===
=== StartBleScanForPaired ===
−
Takes a PID, a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
This is similar to the [[#StartBleScanForPaired|btm]] cmd.
=== StopBleScanForPaired ===
=== StopBleScanForPaired ===
No input/output.
No input/output.
+
+
This is similar to the [[#StopBleScanForPaired|btm]] cmd.
=== StartBleScanForSmartDevice ===
=== StartBleScanForSmartDevice ===
−
Takes a PID, a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
This is similar to the [[#StartBleScanForSmartDevice|btm]] cmd.
=== StopBleScanForSmartDevice ===
=== StopBleScanForSmartDevice ===
No input/output.
No input/output.
+
+
This is similar to the [[#StopBleScanForSmartDevice|btm]] cmd.
=== GetBleScanResultsForSmartDevice ===
=== GetBleScanResultsForSmartDevice ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x6 output buffer containing an array of [[Bluetooth_Driver_services#BleScanResult|BleScanResult]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
The max array entries is 10.
+
This is similar to the [[#GetBleScanResultsForSmartDevice|btm]] cmd.
=== AcquireBleConnectionEvent ===
=== AcquireBleConnectionEvent ===
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
−
sdknso will Abort if the output u8 is value 0.
+
This is similar to the [[#AcquireBleConnectionEvent|btm]] cmd.
=== BleConnect ===
=== BleConnect ===
−
Takes a PID, an [[Bluetooth_Driver_services#Address|Address]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, an [[#BdAddress|BdAddress]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
−
An error is thrown if the [[Bluetooth_Driver_services#Address|Address]] is already connected (listed in the [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]). An error is thrown if 4 [[#BleGetConnectionState|devices]] are already connected.
+
This is similar to the [[#BleConnect|btm]] cmd.
=== BleDisconnect ===
=== BleDisconnect ===
−
Takes an input u32, no output.
+
Takes an input u32. No output.
−
The u32 must match an Id in a [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]] (0xFFFFFFFF is invalid).
+
This is similar to the [[#BleDisconnect|btm]] cmd.
=== BleGetConnectionState ===
=== BleGetConnectionState ===
−
Takes a PID, a type-0xA output buffer containing an array of [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0xA output buffer containing an array of [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
Other cmds which use this internally use arraycount=4.
+
This is similar to the [[#BleGetConnectionState|btm]] cmd.
=== AcquireBlePairingEvent ===
=== AcquireBlePairingEvent ===
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
−
sdknso will Abort if the output u8 is value 0.
+
This is similar to the [[#AcquireBlePairingEvent|btm]] cmd.
=== BlePairDevice ===
=== BlePairDevice ===
−
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] and an u32, no output.
+
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] and an u32. No output.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#BlePairDevice|btm]] cmd.
=== BleUnPairDevice ===
=== BleUnPairDevice ===
−
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] and an u32, no output.
+
Takes an input [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]] and an u32. No output.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#BleUnpairDeviceOnBoth|btm]] cmd.
=== BleUnPairDevice2 ===
=== BleUnPairDevice2 ===
−
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output.
+
Takes an input [[#BdAddress|BdAddress]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. No output.
+
+
This is similar to the [[#BleUnPairDevice|btm]] cmd.
=== BleGetPairedDevices ===
=== BleGetPairedDevices ===
−
Takes a type-0xA output buffer containing an array of [[Bluetooth_Driver_services#Address|Address]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], returns an output u8 total_out.
+
Takes a type-0xA output buffer containing an array of [[#BdAddress|BdAddress]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]]. Returns an output u8 total_out.
−
The max array entries is 10.
+
This is the same as the [[#BleGetPairedAddresses|btm]] cmd.
=== AcquireBleServiceDiscoveryEvent ===
=== AcquireBleServiceDiscoveryEvent ===
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
+
+
This is similar to the [[#AcquireBleServiceDiscoveryEvent|btm]] cmd.
sdknso will Abort if the output u8 is value 0.
sdknso will Abort if the output u8 is value 0.
=== GetGattServices ===
=== GetGattServices ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[#GattService]], an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x6 output buffer containing an array of [[#GattService]], an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]]. The max array entries is 100.
+
This is similar to the [[#GetGattServices|btm]] cmd.
=== GetGattService ===
=== GetGattService ===
−
Takes a PID, a type-0x1A output buffer containing a [[#GattService]], an u32, a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x1A output buffer containing a [[#GattService]], an u32, a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output bool.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#GetGattService|btm]] cmd.
−
−
Same as [[#GetGattServices_2|GetGattServices]] except this only returns the [[#GattService]] which matches the input [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
=== GetGattIncludedServices ===
=== GetGattIncludedServices ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[#GattService]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8.
+
Takes a PID, a type-0x6 output buffer containing an array of [[#GattService]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]]. The max array entries is 100.
+
This is similar to the [[#GetGattIncludedServices|btm]] cmd.
−
−
Same as [[#GetGattServices_2|GetGattServices]] except this only returns [[#GattService]] entries where various checks pass with u16 fields.
The param for the output u8 is unused by the sysmodule, hence the output is always 0. However, a sdknso func which calls the nn::btm::* func for this expects this u8 to be set.
The param for the output u8 is unused by the sysmodule, hence the output is always 0. However, a sdknso func which calls the nn::btm::* func for this expects this u8 to be set.
=== GetBelongingGattService ===
=== GetBelongingGattService ===
−
Takes a PID, a type-0x1A output buffer containing a [[#GattService]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x1A output buffer containing a [[#GattService]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output bool.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#GetBelongingService|btm]] cmd.
−
−
This is similar to [[#GetGattIncludedServices_2|GetGattIncludedServices]] except this only returns 1 [[#GattService]].
=== GetGattCharacteristics ===
=== GetGattCharacteristics ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]]. The max array entries is 100.
+
This is similar to the [[#GetGattCharacteristics|btm]] cmd.
−
−
The u16 controls which [[#GattCharacteristic]] entries to return.
=== GetGattDescriptors ===
=== GetGattDescriptors ===
−
Takes a PID, a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u8 total_out.
+
Takes a PID, a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u8 total_out.
−
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]]. The max array entries is 100.
−
The u16 controls which [[#GattDescriptor]] entries to return.
+
This is similar to the [[#GetGattDescriptors|btm]] cmd.
=== AcquireBleMtuConfigEvent ===
=== AcquireBleMtuConfigEvent ===
−
No input, returns an output u8 and an Event handle with EventClearMode=1.
+
No input. Returns an output bool and an Event handle with EventClearMode=1.
−
sdknso will Abort if the output u8 is value 0.
+
This is similar to the [[#AcquireBleMtuConfigEvent|btm]] cmd.
=== ConfigureBleMtu ===
=== ConfigureBleMtu ===
−
Takes a PID, an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, an u16, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#ConfigureBleMtu|btm]] cmd.
−
sdknso will Abort if the user-specified u16 is <0x18 or >0x200.
+
sdknso will Abort if the user-specified u16 is <0x18 or >0x200 (this doesn't apply to the [[#ConfigureBleMtu|btm]] cmd).
=== GetBleMtu ===
=== GetBleMtu ===
−
Takes a PID, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], returns an output u16.
+
Takes a PID, an u32, an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. Returns an output u16.
−
The u32 is handled the same as [[#BleDisconnect_2|BleDisconnect]].
+
This is similar to the [[#GetBleMtu|btm]] cmd.
=== RegisterBleGattDataPath ===
=== RegisterBleGattDataPath ===
−
Takes a PID, a [[#BleDataPath]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, a [[#BleDataPath]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
This is similar to the [[#RegisterBleGattDataPath|btm]] cmd.
=== UnregisterBleGattDataPath ===
=== UnregisterBleGattDataPath ===
−
Takes a PID, a [[#BleDataPath]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
+
Takes a PID, a [[#BleDataPath]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]]. No output.
+
+
This is similar to the [[#UnregisterBleGattDataPath|btm]] cmd.
+
+
= BdAddress =
+
This is "nn::btm::BdAddress". This is a 0x6-byte struct with 1-byte alignment.
+
+
= BdName =
+
This is "nn::btm::BdName". This is a 0x20-byte struct with 1-byte alignment.
+
+
= ClassOfDevice =
+
This is "nn::btm::ClassOfDevice". This is a 0x3-byte struct with 1-byte alignment.
+
+
= LinkKey =
+
This is "nn::btm::LinkKey". This is a 0x10-byte struct with 1-byte alignment.
= BtmState =
= BtmState =
−
This is "nn::btm::BtmState". This is an u32 enum.
+
This is "nn::btm::BtmState".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || NotInitialized
+
|-
+
| 1 || RadioOff
+
|-
+
| 2 || MinorSlept
+
|-
+
| 3 || RadioOffMinorSlept
+
|-
+
| 4 || Slept
+
|-
+
| 5 || RadioOffSlept
+
|-
+
| 6 || Initialized
+
|-
+
| 7 || Working
+
|}
= BluetoothMode =
= BluetoothMode =
−
This is "nn::btm::BluetoothMode". This is an u32 enum.
+
This is "nn::btm::BluetoothMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || Dynamic2Slot
+
|-
+
| 1 || StaticJoy
+
|}
= WlanMode =
= WlanMode =
−
This is "nn::btm::WlanMode". This is an u32 enum.
+
This is "nn::btm::WlanMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || Local4
+
|-
+
| 1 || Local8
+
|-
+
| 2 || None
+
|}
+
+
= TsiMode =
+
This is "nn::btm::TsiMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || 0Fd3Td3Si10
+
|-
+
| 1 || 1Fd1Td1Si5
+
|-
+
| 2 || 2Fd1Td3Si10
+
|-
+
| 3 || 3Fd1Td5Si15
+
|-
+
| 4 || 4Fd3Td1Si10
+
|-
+
| 5 || 5Fd3Td3Si15
+
|-
+
| 6 || 6Fd5Td1Si15
+
|-
+
| 7 || 7Fd1Td3Si15
+
|-
+
| 8 || 8Fd3Td1Si15
+
|-
+
| 9 || 9Fd1Td1Si10
+
|-
+
| 10 || 10Fd1Td1Si15
+
|-
+
| 255 || Active
+
|}
+
+
= SlotMode =
+
This is "nn::btm::SlotMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || 2
+
|-
+
| 1 || 4
+
|-
+
| 2 || 6
+
|-
+
| 3 || Active
+
|}
+
+
= SniffMode =
+
This is "nn::btm::SniffMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || 5ms
+
|-
+
| 1 || 10ms
+
|-
+
| 2 || 15ms
+
|-
+
| 3 || Active
+
|}
+
+
= Profile =
+
This is "nn::btm::Profile".
+
+
{| class="wikitable" border="1"
+
|-
+
! Value || Description
+
|-
+
| 0 || None
+
|-
+
| 1 || Hid
+
|-
+
| 2 || [13.0.0+] Audio
+
|}
+
+
= HidDeviceInfo =
+
This is "nn::btm::HidDeviceInfo".
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x2 || Vid
+
|-
+
| 0x2 || 0x2 || Pid
+
|}
+
+
= HidDeviceCondition =
+
This is "nn::btm::HidDeviceCondition".
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x4 || [[#SniffMode|SniffMode]]
+
|-
+
| 0x4 || 0x4 || [[#SlotMode|SlotMode]]
+
|-
+
| 0x8 || 0x1 || IsBurstMode
+
|-
+
| 0x9 || 0x11 || [[#ZeroRetransmissionList|ZeroRetransmissionList]]
+
|-
+
| 0x1A || 0x2 || Vid
+
|-
+
| 0x1C || 0x2 || Pid
+
|}
= HostDeviceProperty =
= HostDeviceProperty =
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
+
+
[13.0.0+] This is a 0x103-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x3 || [[#ClassOfDevice|ClassOfDevice]]
+
|-
+
| 0x9 || 0x20 || [[#BdName|BdName]]
+
|-
+
| 0x29 || 0x1 || FeatureSet
+
|-
+
| 0x2A || 0xD9 || [13.0.0+]
+
|}
+
+
= DeviceSlotMode =
+
This is "nn::btm::DeviceSlotMode".
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x2 || Reserved
+
|-
+
| 0x8 || 0x4 || [[#SlotMode|SlotMode]]
+
|}
= DeviceSlotModeList =
= DeviceSlotModeList =
This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct.
This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x1 || DeviceCount
+
|-
+
| 0x1 || 0x3 || Reserved
+
|-
+
| 0x4 || 0xC * 8 || Array of [[#DeviceSlotMode|DeviceSlotMode]]
+
|}
+
+
= DeviceCondition =
+
This is "nn::btm::DeviceCondition". This is a 0x6C-byte struct.
+
+
[13.0.0+] This is a 0x148-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x2 || Reserved
+
|-
+
| 0x8 || 0x4 || [[#Profile|Profile]]
+
|-
+
| 0xC || 0x20 || [[#BdName|BdName]]
+
|-
+
| 0x2C || 0x20 || Empty (Profile = None) or [[#HidDeviceCondition|HidDeviceCondition]] (Profile = Hid)
+
|-
+
| 0x4C || 0x20 || Reserved
+
|-
+
| 0x6C || 0xDC || [13.0.0+]
+
|}
+
+
= DeviceConditionList =
+
This is "nn::btm::DeviceConditionList". This is a 0x36C-byte struct.
+
+
[13.0.0+] This is a 0xA4C-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x4 || [[#BluetoothMode|BluetoothMode]]
+
|-
+
| 0x4 || 0x4 || [[#WlanMode|WlanMode]]
+
|-
+
| 0x8 || 0x1 || IsSlotSavingForPairing
+
|-
+
| 0x9 || 0x1 || DeviceCount
+
|-
+
| 0xA || 0x2 || Reserved
+
|-
+
| 0xC || 0x148 * 8 ([1.0.0-12.1.0] 0x6C * 8) || Array of [[#DeviceCondition|DeviceCondition]]
+
|}
+
+
= DeviceInfo =
+
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
+
+
[13.0.0+] This is a 0x13C-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x3 || [[#ClassOfDevice|ClassOfDevice]]
+
|-
+
| 0x9 || 0x20 || [[#BdName|BdName]]
+
|-
+
| 0x29 || 0x10 || [[#LinkKey|LinkKey]]
+
|-
+
| 0x39 || 0x3 || Reserved
+
|-
+
| 0x3C || 0x4 || [[#Profile|Profile]]
+
|-
+
| 0x40 || 0x4 || Empty (Profile = None) or [[#HidDeviceInfo|HidDeviceInfo]] (Profile = Hid)
+
|-
+
| 0x44 || 0x1C || Reserved
+
|-
+
| 0x60 || 0xDC || [13.0.0+]
+
|}
= DeviceInfoList =
= DeviceInfoList =
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
−
= DeviceInfo =
+
[13.0.0+] This is a 0xC5C-byte struct.
−
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x1 || DeviceCount
+
|-
+
| 0x1 || 0x3 || Reserved
+
|-
+
| 0x4 || 0x13C * 10 ([1.0.0-12.1.0] 0x60 * 10) || Array of [[#DeviceInfo|DeviceInfo]]
+
|}
+
+
= DeviceProperty =
+
This is "nn::btm::DeviceProperty". This is a 0x29-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x3 || [[#ClassOfDevice|ClassOfDevice]]
+
|-
+
| 0x9 || 0x20 || [[#BdName|BdName]]
+
|}
+
+
= DevicePropertyList =
+
This is "nn::btm::DevicePropertyList". This is a 0x268-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x1 || DeviceCount
+
|-
+
| 0x1 || 0x29 * 15 || Array of [[#DeviceProperty|DeviceProperty]]
+
|}
+
+
= DeviceCeLength =
+
This is "nn::btm::DeviceCeLength". This is a 0x10-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
+
|-
+
| 0x6 || 0x6 || Reserved
+
|-
+
| 0xC || 0x1 || CeLength (used for [[Bluetooth_Driver_services#BleConnectionParameter|BleConnectionParameter]])
+
|-
+
| 0xD || 0x3 || Reserved
+
|}
+
+
= DeviceCeLengthList =
+
This is "nn::btm::DeviceCeLengthList". This is a 0x44-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x10 * 4 || Array of [[#DeviceCeLength|DeviceCeLength]]
+
|-
+
| 0x40 || 0x4 || DeviceCount
+
|}
= ZeroRetransmissionList =
= ZeroRetransmissionList =
This is "nn::btm::ZeroRetransmissionList". This is a 0x11-byte struct.
This is "nn::btm::ZeroRetransmissionList". This is a 0x11-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x1 || EnabledReportIdCount
+
|-
+
| 0x1 || 0x1 * 16 || Array of EnabledReportId
+
|}
= GattService =
= GattService =
Line 712:
Line 1,373:
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|-
|-
−
| 0x18 || 0x2 ||
+
| 0x18 || 0x2 || Handle
|-
|-
−
| 0x1A || 0x4 ||
+
| 0x1A || 0x2 ||
|-
|-
−
| 0x1E || 0x2 ||
+
| 0x1C || 0x2 || InstanceId
|-
|-
−
| 0x20 || 0x1 ||
+
| 0x1E || 0x2 || EndGroupHandle
+
|-
+
| 0x20 || 0x1 || PrimaryService flag
|-
|-
| 0x21 || 0x3 || Padding
| 0x21 || 0x3 || Padding
Line 725:
Line 1,388:
= GattCharacteristic =
= GattCharacteristic =
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x4 ||
+
|-
+
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
+
|-
+
| 0x18 || 0x2 || Handle
+
|-
+
| 0x1A || 0x2 ||
+
|-
+
| 0x1C || 0x2 || InstanceId
+
|-
+
| 0x1E || 0x1 || Properties
+
|-
+
| 0x1F || 0x5 ||
+
|}
= GattDescriptor =
= GattDescriptor =
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
+
+
{| class="wikitable" border="1"
+
|-
+
! Offset
+
! Size
+
! Description
+
|-
+
| 0x0 || 0x4 ||
+
|-
+
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
+
|-
+
| 0x18 || 0x2 || Handle
+
|-
+
| 0x1A || 0x6 ||
+
|}
= BleDataPath =
= BleDataPath =
Line 744:
Line 1,443:
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|}
|}
+
+
= Logging =
+
A func which uses [[PSC_services|srepo]] is called in certain conditions (access to srepo:u was added to btm with [7.0.0+]). This is implemented as follows (as of 11.0.0):
+
+
* Loads the data for the below fields.
+
* Creates the report with EventId "bluetooth_crash". The ApplicationId is set to {btm ProgramId}.
+
* The following fields are added to the report:
+
** "reason": Set to an input param for this func.
+
** "radio"
+
** "gamepad_pairing"
+
** "llr_notify"
+
** "ble_scan"
+
** "bluetooth_mode": Set to hard-coded value 0.
+
** "wlan_mode"
+
** "classic_device_count"
+
** "slot_mode_active_count"
+
** "slot_mode_4_count"
+
** "slot_mode_6_count"
+
** "sniff_mode"
+
** "ble_device_count"
+
** "ce_length_2_count"
+
** "ce_length_4_count"
+
** "ce_length_8_count"
+
* Saves the report and returns.
[[Category:Services]]
[[Category:Services]]