BTM services: Difference between revisions
No edit summary |
No edit summary |
||
Line 162: | Line 162: | ||
== SetBurstMode == | == SetBurstMode == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and a bool, no output. | ||
== SetSlotMode == | == SetSlotMode == | ||
Line 185: | Line 185: | ||
== RemoveDeviceInfo == | == RemoveDeviceInfo == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== IncreaseDeviceInfoOrder == | == IncreaseDeviceInfoOrder == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== LlrNotify == | == LlrNotify == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
[9.0.0+] Takes an input [[ | [9.0.0+] Takes an input [[#BdAddress|BdAddress]] and a s32, no output. | ||
== EnableRadio == | == EnableRadio == | ||
Line 202: | Line 202: | ||
== HidDisconnect == | == HidDisconnect == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== HidSetRetransmissionMode == | == HidSetRetransmissionMode == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]], no output. | ||
== AcquireAwakeReqEvent == | == AcquireAwakeReqEvent == | ||
Line 222: | Line 222: | ||
== ProtectDeviceInfo == | == ProtectDeviceInfo == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and a bool, no output. | ||
== AcquireBleScanEvent == | == AcquireBleScanEvent == | ||
Line 269: | Line 269: | ||
== BleConnect == | == BleConnect == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
An error is thrown if the [[ | 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 == | == BleOverrideConnection == | ||
Line 305: | Line 305: | ||
== BleUnpairDevice == | == BleUnpairDevice == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output. | ||
== BleGetPairedAddresses == | == BleGetPairedAddresses == | ||
Takes a type-0xA output buffer containing an array of [[ | 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. | The max array entries is 10. | ||
Line 394: | Line 394: | ||
Sends a request which is then handled as follows: | Sends a request which is then handled as follows: | ||
* Goes through multiple arrays of [[ | * Goes through multiple arrays of [[#BdAddress|BdAddress]]. | ||
** First array: | ** First array: | ||
*** Validates the [[ | *** Validates the [[#BdAddress|BdAddress]] with state, skipping it if not found. | ||
*** Calls the SetTsi wrapper func described below, with the above [[ | *** 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: | ** Second array: | ||
*** Validates the [[ | *** 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, {...}. | *** 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: | ** Then it goes through the first array again, except here it does the following: | ||
*** Calls the same func for validating the [[ | *** 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. | *** 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 [[ | *** 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. | ** It then goes through various arrays again for updating state. | ||
** {...} | ** {...} | ||
Line 478: | Line 478: | ||
== CreateBond == | == CreateBond == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== CancelBond == | == CancelBond == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== SetTsiMode == | == SetTsiMode == | ||
Takes an input [[ | 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. | Sends a request which is handled as follows: uses [[Bluetooth_Driver_services#SetTsi|SetTsi]] directly with the specified params. | ||
Line 492: | Line 492: | ||
== HidConnect == | == HidConnect == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]], no output. | ||
== GeneralGet == | == GeneralGet == | ||
Line 498: | Line 498: | ||
== GetGattClientDisconnectionReason == | == GetGattClientDisconnectionReason == | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and an u32, returns an output bool and u16. | ||
The bool indicates whether the cmd is successful. | The bool indicates whether the cmd is successful. | ||
Line 735: | Line 735: | ||
=== BleConnect === | === BleConnect === | ||
Takes a PID, an [[ | Takes a PID, an [[#BdAddress|BdAddress]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output. | ||
This is similar to the [[#BleConnect|btm]] cmd. | This is similar to the [[#BleConnect|btm]] cmd. | ||
Line 765: | Line 765: | ||
=== BleUnPairDevice2 === | === BleUnPairDevice2 === | ||
Takes an input [[ | Takes an input [[#BdAddress|BdAddress]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output. | ||
This is similar to the [[#BleUnPairDevice|btm]] cmd. | This is similar to the [[#BleUnPairDevice|btm]] cmd. | ||
=== BleGetPairedDevices === | === BleGetPairedDevices === | ||
Takes a type-0xA output buffer containing an array of [[ | Takes a type-0xA output buffer containing an array of [[#BdAddress|BdAddress]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], returns an output u8 total_out. | ||
This is the same as the [[#BleGetPairedAddresses|btm]] cmd. | This is the same as the [[#BleGetPairedAddresses|btm]] cmd. | ||
Line 839: | Line 839: | ||
This is similar to the [[#UnregisterBleGattDataPath|btm]] cmd. | 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 "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 "nn::btm::BluetoothMode". | ||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Dynamic2Slot | |||
|- | |||
| 1 || StaticJoy | |||
|} | |||
= WlanMode = | = WlanMode = | ||
This is "nn::btm::WlanMode". | This is "nn::btm::WlanMode". | ||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || Local4 | |||
|- | |||
| 1 || Local8 | |||
|- | |||
| 2 || None | |||
|} | |||
= TsiMode = | = TsiMode = | ||
This is "nn::btm::TsiMode" | This is "nn::btm::TsiMode". | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 879: | Line 932: | ||
|- | |- | ||
| 255 || Active | | 255 || Active | ||
|} | |||
= SlotMode = | |||
This is "nn::btm::SlotMode". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || 2 | |||
|- | |||
| 1 || 4 | |||
|- | |||
| 2 || 6 | |||
|- | |||
| 3 || Active | |||
|} | |||
= Profile = | |||
This is "nn::btm::Profile". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Value || Description | |||
|- | |||
| 0 || None | |||
|- | |||
| 1 || Hid | |||
|} | |||
= HidDeviceInfo = | |||
This is "nn::btm::HidDeviceInfo". | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x2 || Vid | |||
|- | |||
| 0x2 || 0x2 || Pid | |||
|} | |} | ||
Line 890: | Line 985: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || | | 0x0 || 0x6 || [[#BdAddress|BdAddress]] | ||
|- | |- | ||
| | | 0x6 || 0x3 || [[#ClassOfDevice|ClassOfDevice]] | ||
|- | |- | ||
| | | 0x9 || 0x20 || [[#BdName|BdName]] | ||
|- | |- | ||
| 0x29 || 0x1 || | | 0x29 || 0x1 || FeatureSet | ||
|} | |||
= DeviceSlotMode = | |||
This is "nn::btm::DeviceSlotMode". This is a 0xC-byte struct. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 || 0x6 || [[#BdAddress|BdAddress]] | |||
|- | |||
| 0x6 || 0x2 || Reserved | |||
|- | |||
| 0x8 || 0xC || [[#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]] | |||
|} | |||
= DeviceInfo = | |||
This is "nn::btm::DeviceInfo". This is a 0x60-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 | |||
|} | |||
= DeviceInfoList = | = DeviceInfoList = | ||
Line 911: | Line 1,061: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x1 || | | 0x0 || 0x1 || DeviceCount | ||
|- | |- | ||
| 0x1 || 0x3 || | | 0x1 || 0x3 || Reserved | ||
|- | |- | ||
| 0x4 || 0xA*60 | | 0x4 || 0xA * 60 || Array of [[#DeviceInfo|DeviceInfo]] | ||
|} | |} | ||
= | = DeviceProperty = | ||
This is "nn::btm:: | 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 = | = DevicePropertyList = | ||
This is "nn::btm::DevicePropertyList". This is a 0x268-byte struct. | 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]] | |||
|} | |||
= 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 = |