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. | | 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. |
Line 143: |
Line 143: |
| |- | | |- |
| | 64 || [10.0.0+] | | | 64 || [10.0.0+] |
| + | |- |
| + | | 65 || [13.0.0+] |
| + | |- |
| + | | 66 || [13.0.0+] |
| + | |- |
| + | | 67 || [13.0.0+] |
| + | |- |
| + | | 68 || [13.0.0+] |
| + | |- |
| + | | 69 || [13.0.0+] |
| + | |- |
| + | | 70 || [13.0.0+] |
| + | |- |
| + | | 71 || [13.0.0+] |
| + | |- |
| + | | 72 || [13.0.0+] |
| + | |- |
| + | | 73 || [13.0.0+] |
| + | |- |
| + | | 74 || [13.0.0+] |
| + | |- |
| + | | 75 || [13.0.0+] |
| + | |- |
| + | | 76 || [13.1.0+] |
| + | |- |
| + | | 100 || [13.0.0+] |
| + | |- |
| + | | 101 || [13.0.0+] |
| + | |- |
| + | | 110 || [13.0.0+] |
| + | |- |
| + | | 111 || [13.0.0+] |
| + | |- |
| + | | 112 || [14.0.0-14.1.2] |
| + | |- |
| + | | 113 || [14.0.0-14.1.2] |
| + | |- |
| + | | 114 || [14.0.0+] |
| + | |- |
| + | | 115 || [14.0.0+] |
| + | |- |
| + | | 116 || [15.0.0+] |
| + | |- |
| + | | 117 || [15.0.0+] |
| |} | | |} |
| | | |
Line 150: |
Line 194: |
| == 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]]. | | This gets the previously initialized [[#HostDeviceProperty]]. |
Line 160: |
Line 206: |
| == GetDeviceCondition == | | == GetDeviceCondition == |
| Takes a type-0x1A output buffer containing a 0x368-byte struct. | | Takes a type-0x1A output buffer containing a 0x368-byte struct. |
| + | |
| + | [13.0.0+] Takes an input u32 [[#Profile]], a type-0xA output buffer containing an array of a 0x148-byte struct, returns a s32 for total output entries. When [[#Profile]] is non-zero, entries are only returned with a matching [[#Profile]]. |
| | | |
| == SetBurstMode == | | == SetBurstMode == |
Line 182: |
Line 230: |
| ** It then goes through various arrays again for updating state. | | ** 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: | | The SetTsi wrapper func is implemented as follows: |
Line 200: |
Line 250: |
| == GetDeviceInfo == | | == GetDeviceInfo == |
| Takes a type-0x1A output buffer containing a [[#DeviceInfoList]]. | | Takes a type-0x1A output buffer containing a [[#DeviceInfoList]]. |
| + | |
| + | [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 == |
Line 251: |
Line 305: |
| | | |
| The u16 must be value 0x1 or 0xFFFF. | | 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 == | | == GetBleScanParameterSmartDevice == |
Line 259: |
Line 319: |
| == StartBleScanForGeneral == | | == StartBleScanForGeneral == |
| Takes a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output. | | 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 == | | == StopBleScanForGeneral == |
Line 270: |
Line 334: |
| == StartBleScanForPaired == | | == StartBleScanForPaired == |
| Takes a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output. | | 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 == | | == StopBleScanForPaired == |
Line 276: |
Line 344: |
| == StartBleScanForSmartDevice == | | == StartBleScanForSmartDevice == |
| Takes a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]], no output. | | 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 == | | == StopBleScanForSmartDevice == |
Line 463: |
Line 537: |
| | | |
| 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. |
| + | |
| + | [12.0.0+] Cmds input/output were changed / cmdids were moved around. |
| + | |
| + | [13.0.0+] Cmd4 now takes a type-0xA output buffer, returns a total of 4-bytes of output. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 493: |
Line 571: |
| |- | | |- |
| | 12 || [5.1.0+] [[#GetBleConnectionParameterRequest]] | | | 12 || [5.1.0+] [[#GetBleConnectionParameterRequest]] |
| + | |- |
| + | | 13 || [12.0.0+] |
| + | |- |
| + | | 14 || [15.0.0+] |
| + | |- |
| + | | 15 || [15.0.0+] |
| + | |- |
| + | | 16 || [15.0.0+] |
| + | |- |
| + | | 17 || [15.0.0+] |
| |} | | |} |
| | | |
Line 578: |
Line 666: |
| | 5 || [[#DisableRadio]] | | | 5 || [[#DisableRadio]] |
| |- | | |- |
− | | 6 || [[#GetRadioOnOff]] | + | | 6 || [[#IsRadioEnabled]] |
| |- | | |- |
| | 7 || [3.0.0+] [[#AcquireRadioEvent]] | | | 7 || [3.0.0+] [[#AcquireRadioEvent]] |
Line 585: |
Line 673: |
| |- | | |- |
| | 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 605: |
Line 721: |
| No input/output. | | No input/output. |
| | | |
− | === GetRadioOnOff === | + | === IsRadioEnabled === |
| No input, returns an output bool. | | No input, returns an output bool. |
| | | |
Line 1,010: |
Line 1,126: |
| = 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" | | {| class="wikitable" border="1" |
Line 1,060: |
Line 1,178: |
| = DeviceInfo = | | = DeviceInfo = |
| This is "nn::btm::DeviceInfo". This is a 0x60-byte struct. | | This is "nn::btm::DeviceInfo". This is a 0x60-byte struct. |
| + | |
| + | [13.0.0+] This is a 0x13C-byte struct. |
| | | |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
Line 1,097: |
Line 1,217: |
| | 0x1 || 0x3 || Reserved | | | 0x1 || 0x3 || Reserved |
| |- | | |- |
− | | 0x4 || 0xA * 60 || Array of [[#DeviceInfo|DeviceInfo]] | + | | 0x4 || 0xA * 0x60 || Array of [[#DeviceInfo|DeviceInfo]] |
| |} | | |} |
| | | |