Difference between revisions of "BTM services"
(→btm) |
|||
Line 12: | Line 12: | ||
! Cmd || Name | ! Cmd || Name | ||
|- | |- | ||
− | | 0 || GetState | + | | 0 || [[#GetState]] |
|- | |- | ||
− | | 1 || GetHostDeviceProperty | + | | 1 || [[#GetHostDeviceProperty]] |
|- | |- | ||
− | | 2 || AcquireDeviceConditionEvent | + | | 2 || [[#AcquireDeviceConditionEvent]] |
|- | |- | ||
− | | 3 || GetDeviceCondition | + | | 3 || [[#GetDeviceCondition]] |
|- | |- | ||
− | | 4 || SetBurstMode | + | | 4 || [[#SetBurstMode]] |
|- | |- | ||
− | | 5 || SetSlotMode | + | | 5 || [[#SetSlotMode]] |
|- | |- | ||
− | | 6 || [1.0.0-8.1.0] SetBluetoothMode | + | | 6 || [1.0.0-8.1.0] [[#SetBluetoothMode]] |
|- | |- | ||
− | | 7 || SetWlanMode | + | | 7 || [[#SetWlanMode]] |
|- | |- | ||
− | | 8 || AcquireDeviceInfoEvent | + | | 8 || [[#AcquireDeviceInfoEvent]] |
|- | |- | ||
− | | 9 || GetDeviceInfo | + | | 9 || [[#GetDeviceInfo]] |
|- | |- | ||
− | | 10 || AddDeviceInfo | + | | 10 || [[#AddDeviceInfo]] |
|- | |- | ||
− | | 11 || RemoveDeviceInfo | + | | 11 || [[#RemoveDeviceInfo]] |
|- | |- | ||
− | | 12 || IncreaseDeviceInfoOrder | + | | 12 || [[#IncreaseDeviceInfoOrder]] |
|- | |- | ||
| 13 || [[#LlrNotify]] | | 13 || [[#LlrNotify]] | ||
|- | |- | ||
− | | 14 || EnableRadio | + | | 14 || [[#EnableRadio]] |
|- | |- | ||
− | | 15 || DisableRadio | + | | 15 || [[#DisableRadio]] |
|- | |- | ||
− | | 16 || HidDisconnect | + | | 16 || [[#HidDisconnect]] |
|- | |- | ||
− | | 17 || HidSetRetransmissionMode | + | | 17 || [[#HidSetRetransmissionMode]] |
|- | |- | ||
− | | 18 || [2.0.0+] AcquireAwakeReqEvent | + | | 18 || [2.0.0+] [[#AcquireAwakeReqEvent]] |
|- | |- | ||
| 19 || [4.0.0+] AcquireLlrStateEvent | | 19 || [4.0.0+] AcquireLlrStateEvent | ||
Line 143: | Line 143: | ||
|} | |} | ||
− | [3.0.0+] | + | With [5.1.0+] cmds 24-42 were moved/replaced/etc (input/output changed). |
+ | |||
+ | == GetState == | ||
+ | No input, returns an output [[#BtmState]]. | ||
+ | |||
+ | == GetHostDeviceProperty == | ||
+ | No input, returns an output [[#HostDeviceProperty]]. | ||
+ | |||
+ | == AcquireDeviceConditionEvent == | ||
+ | No input, returns an output Event handle with EventClearMode=1. | ||
+ | |||
+ | [3.0.0+] Now returns an additional output u8. | ||
+ | |||
+ | == GetDeviceCondition == | ||
+ | Takes a type-0x1A output buffer containing a 0x368-byte struct. | ||
+ | |||
+ | == SetBurstMode == | ||
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]] and a bool, no output. | ||
+ | |||
+ | == SetSlotMode == | ||
+ | Takes a type-0x19 input buffer containing a [[#DeviceSlotModeList]], no output. | ||
+ | |||
+ | == SetBluetoothMode == | ||
+ | Takes an input [[#BluetoothMode]], no output. | ||
+ | |||
+ | == SetWlanMode == | ||
+ | Takes an input [[#WlanMode]], no output. | ||
− | + | == AcquireDeviceInfoEvent == | |
+ | No input, returns an output Event handle with EventClearMode=1. | ||
+ | |||
+ | [3.0.0+] Now returns an additional output u8. | ||
+ | |||
+ | == GetDeviceInfo == | ||
+ | Takes a type-0x1A output buffer containing a [[#DeviceInfoList]]. | ||
+ | |||
+ | == AddDeviceInfo == | ||
+ | Takes an input [[#DeviceInfo]], no output. | ||
+ | |||
+ | == RemoveDeviceInfo == | ||
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | == IncreaseDeviceInfoOrder == | ||
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]], no output. | ||
== LlrNotify == | == LlrNotify == | ||
Line 151: | Line 192: | ||
[9.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]] and a s32, no output. | [9.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]] and a s32, no output. | ||
+ | |||
+ | == EnableRadio == | ||
+ | No input/output. | ||
+ | |||
+ | == DisableRadio == | ||
+ | No input/output. | ||
+ | |||
+ | == HidDisconnect == | ||
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | == HidSetRetransmissionMode == | ||
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]], no output. | ||
+ | |||
+ | == AcquireAwakeReqEvent == | ||
+ | No input, returns an output Event handle with EventClearMode=1. | ||
+ | |||
+ | [3.0.0+] Now returns an additional output u8. | ||
= btm:dbg = | = btm:dbg = | ||
Line 507: | Line 565: | ||
=== 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. | ||
+ | |||
+ | = BtmState = | ||
+ | This is "nn::btm::BtmState". This is an u32 enum. | ||
+ | |||
+ | = BluetoothMode = | ||
+ | This is "nn::btm::BluetoothMode". This is an u32 enum. | ||
+ | |||
+ | = WlanMode = | ||
+ | This is "nn::btm::WlanMode". This is an u32 enum. | ||
+ | |||
+ | = HostDeviceProperty = | ||
+ | This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct. | ||
+ | |||
+ | = DeviceSlotModeList = | ||
+ | This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct. | ||
+ | |||
+ | = DeviceInfoList = | ||
+ | This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct. | ||
+ | |||
+ | = DeviceInfo = | ||
+ | This is "nn::btm::DeviceInfo". This is a 0x60-byte struct. | ||
+ | |||
+ | = ZeroRetransmissionList = | ||
+ | This is "nn::btm::ZeroRetransmissionList". This is a 0x11-byte struct. | ||
= GattService = | = GattService = |
Revision as of 02:39, 6 August 2020
btm
This is "nn::btm::IBtm".
Support for "nn::btm::*" was added to sdknso with 6.x.
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.
Cmd | Name |
---|---|
0 | #GetState |
1 | #GetHostDeviceProperty |
2 | #AcquireDeviceConditionEvent |
3 | #GetDeviceCondition |
4 | #SetBurstMode |
5 | #SetSlotMode |
6 | [1.0.0-8.1.0] #SetBluetoothMode |
7 | #SetWlanMode |
8 | #AcquireDeviceInfoEvent |
9 | #GetDeviceInfo |
10 | #AddDeviceInfo |
11 | #RemoveDeviceInfo |
12 | #IncreaseDeviceInfoOrder |
13 | #LlrNotify |
14 | #EnableRadio |
15 | #DisableRadio |
16 | #HidDisconnect |
17 | #HidSetRetransmissionMode |
18 | [2.0.0+] #AcquireAwakeReqEvent |
19 | [4.0.0+] AcquireLlrStateEvent |
20 | [4.0.0+] IsLlrStarted |
21 | [4.0.0+] EnableSlotSaving |
22 | [5.0.0+] ProtectDeviceInfo |
23 | [5.0.0+] AcquireBleScanEvent |
24 | [5.0.0+] GetBleScanParameterGeneral |
25 | [5.0.0+] GetBleScanParameterSmartDevice |
26 | [5.0.0+] StartBleScanForGeneral |
27 | [5.0.0+] StopBleScanForGeneral |
28 | [5.0.0+] GetBleScanResultsForGeneral |
29 | [5.0.0+] StartBleScanForPairedDevice |
30 | [5.0.0+] StopBleScanForPairedDevice |
31 | [5.0.0+] StartBleScanForSmartDevice |
32 | [5.0.0+] StopBleScanForSmartDevice |
33 | [5.0.0+] GetBleScanResultsForSmartDevice |
34 | [5.0.0+] AcquireBleConnectionEvent |
35 | [5.0.0+] BleConnect |
36 | [5.0.0+] BleOverrideConnection |
37 | [5.0.0+] BleDisconnect |
38 | [5.0.0+] BleGetConnectionState |
39 | [5.0.0+] BleGetGattClientConditionList |
40 | [5.0.0+] AcquireBlePairingEvent |
41 | [5.0.0+] BlePairDevice |
42 | [5.0.0+] BleUnpairDeviceOnBoth |
43 | [5.1.0+] BleUnpairDevice |
44 | [5.1.0+] BleGetPairedAddresses |
45 | [5.1.0+] AcquireBleServiceDiscoveryEvent |
46 | [5.1.0+] GetGattServices |
47 | [5.1.0+] GetGattService |
48 | [5.1.0+] GetGattIncludedServices |
49 | [5.1.0+] GetBelongingService |
50 | [5.1.0+] GetGattCharacteristics |
51 | [5.1.0+] GetGattDescriptors |
52 | [5.1.0+] AcquireBleMtuConfigEvent |
53 | [5.1.0+] ConfigureBleMtu |
54 | [5.1.0+] GetBleMtu |
55 | [5.1.0+] RegisterBleGattDataPath |
56 | [5.1.0+] UnregisterBleGattDataPath |
57 | [5.1.0+] RegisterAppletResourceUserId |
58 | [5.1.0+] UnregisterAppletResourceUserId |
59 | [5.1.0+] SetAppletResourceUserId |
60 | [8.0.0+] |
61 | [8.0.0+] |
62 | [9.0.0+] |
63 | [9.0.0+] |
64 | [10.0.0+] |
With [5.1.0+] cmds 24-42 were moved/replaced/etc (input/output changed).
GetState
No input, returns an output #BtmState.
GetHostDeviceProperty
No input, returns an output #HostDeviceProperty.
AcquireDeviceConditionEvent
No input, returns an output Event handle with EventClearMode=1.
[3.0.0+] Now returns an additional output u8.
GetDeviceCondition
Takes a type-0x1A output buffer containing a 0x368-byte struct.
SetBurstMode
Takes an input Address and a bool, no output.
SetSlotMode
Takes a type-0x19 input buffer containing a #DeviceSlotModeList, no output.
SetBluetoothMode
Takes an input #BluetoothMode, no output.
SetWlanMode
Takes an input #WlanMode, no output.
AcquireDeviceInfoEvent
No input, returns an output Event handle with EventClearMode=1.
[3.0.0+] Now returns an additional output u8.
GetDeviceInfo
Takes a type-0x1A output buffer containing a #DeviceInfoList.
AddDeviceInfo
Takes an input #DeviceInfo, no output.
RemoveDeviceInfo
Takes an input Address, no output.
IncreaseDeviceInfoOrder
Takes an input Address, no output.
LlrNotify
Takes an input Address, no output.
[9.0.0+] Takes an input Address and a s32, no output.
EnableRadio
No input/output.
DisableRadio
No input/output.
HidDisconnect
Takes an input Address, no output.
HidSetRetransmissionMode
Takes an input Address and a type-0x19 input buffer containing a #ZeroRetransmissionList, no output.
AcquireAwakeReqEvent
No input, returns an output Event handle with EventClearMode=1.
[3.0.0+] Now returns an additional output u8.
btm:dbg
This is "nn::btm::IBtmDebug".
This has max_sessions 6. IPC is handled by 2 threads shared with all services.
Cmd | Name |
---|---|
0 | AcquireDiscoveryEvent |
1 | StartDiscovery |
2 | CancelDiscovery |
3 | GetDeviceProperty |
4 | CreateBond |
5 | CancelBond |
6 | SetTsiMode |
7 | GeneralTest |
8 | HidConnect |
9 | [5.0.0+] GeneralGet |
10 | [5.1.0+] GetGattClientDisconnectionReason |
11 | [5.1.0+] GetBleConnectionParameter |
12 | [5.1.0+] GetBleConnectionParameterRequest |
[3.0.0+] RegisterSystemEventForDiscovery now returns an output u8.
btm:sys
This is "nn::btm::IBtmSystem".
This has max_sessions 6. IPC is handled by 2 threads shared with all services.
Cmd | Name |
---|---|
0 | #GetCore |
GetCore
No input, returns an output #IBtmSystemCore.
IBtmSystemCore
This is "nn::btm::IBtmSystemCore".
Cmd | Name |
---|---|
0 | #StartGamepadPairing |
1 | #CancelGamepadPairing |
2 | #ClearGamepadPairingDatabase |
3 | #GetPairedGamepadCount |
4 | #EnableRadio |
5 | #DisableRadio |
6 | #GetRadioOnOff |
7 | [3.0.0+] #AcquireRadioEvent |
8 | [3.0.0+] #AcquireGamepadPairingEvent |
9 | [3.0.0+] #IsGamepadPairingStarted |
StartGamepadPairing
No input/output.
CancelGamepadPairing
No input/output.
ClearGamepadPairingDatabase
No input/output.
GetPairedGamepadCount
No input, returns an output u8.
EnableRadio
No input/output.
DisableRadio
No input/output.
GetRadioOnOff
No input, returns an output bool.
AcquireRadioEvent
No input, returns an output bool and handle.
AcquireGamepadPairingEvent
No input, returns an output bool and handle.
IsGamepadPairingStarted
No input, returns an output bool.
btm:u
This is "nn::btm::IBtmUser".
This was added with [5.0.0+].
This has max_sessions 6. IPC is handled by 2 threads shared with all services.
Cmd | Name |
---|---|
0 | GetCore |
GetCore
No input, returns an output #IBtmUserCore.
IBtmUserCore
This is "nn::btm::IBtmUserCore".
AcquireBleScanEvent
No input, returns an output u8 and an Event handle with EventClearMode=1.
sdknso will Abort if the output u8 is value 0.
GetBleScanFilterParameter
Takes an input u16, returns a BleAdvertisePacketParameter.
The u16 must be value 0x1 or 0xFFFF.
GetBleScanFilterParameter2
Takes an input u16, returns a GattAttributeUuid.
The u16 must be value 0x2. The first 4-bytes of output is always 0 since it's not set.
StartBleScanForGeneral
Takes a PID, a BleAdvertisePacketParameter, an AppletResourceUserId, no output.
StopBleScanForGeneral
No input/output.
GetBleScanResultsForGeneral
Takes a PID, a type-0x6 output buffer containing an array of BleScanResult, an AppletResourceUserId, returns an output u8 total_out.
The max array entries is 10.
StartBleScanForPaired
Takes a PID, a BleAdvertisePacketParameter, an AppletResourceUserId, no output.
StopBleScanForPaired
No input/output.
StartBleScanForSmartDevice
Takes a PID, a GattAttributeUuid, an AppletResourceUserId, no output.
StopBleScanForSmartDevice
No input/output.
GetBleScanResultsForSmartDevice
Takes a PID, a type-0x6 output buffer containing an array of BleScanResult, an AppletResourceUserId, returns an output u8 total_out.
The max array entries is 10.
AcquireBleConnectionEvent
No input, returns an output u8 and an Event handle with EventClearMode=1.
sdknso will Abort if the output u8 is value 0.
BleConnect
Takes a PID, an Address, an AppletResourceUserId, no output.
An error is thrown if the Address is already connected (listed in the BleConnectionInfo from #BleGetConnectionState). An error is thrown if 4 devices are already connected.
BleDisconnect
Takes an input u32, no output.
The u32 must match an Id in a BleConnectionInfo from #BleGetConnectionState (0xFFFFFFFF is invalid).
BleGetConnectionState
Takes a PID, a type-0xA output buffer containing an array of BleConnectionInfo, an AppletResourceUserId, returns an output u8 total_out.
Other cmds which use this internally use arraycount=4.
AcquireBlePairingEvent
No input, returns an output u8 and an Event handle with EventClearMode=1.
sdknso will Abort if the output u8 is value 0.
BlePairDevice
Takes an input BleAdvertisePacketParameter and an u32, no output.
The u32 is handled the same as #BleDisconnect.
BleUnPairDevice
Takes an input BleAdvertisePacketParameter and an u32, no output.
The u32 is handled the same as #BleDisconnect.
BleUnPairDevice2
Takes an input Address and a BleAdvertisePacketParameter, no output.
BleGetPairedDevices
Takes a type-0xA output buffer containing an array of Address, a BleAdvertisePacketParameter, returns an output u8 total_out.
The max array entries is 10.
AcquireBleServiceDiscoveryEvent
No input, returns an output u8 and an Event handle with EventClearMode=1.
sdknso will Abort if the output u8 is value 0.
GetGattServices
Takes a PID, a type-0x6 output buffer containing an array of #GattService, an u32, an AppletResourceUserId, returns an output u8 total_out.
The u32 is handled the same as #BleDisconnect. The max array entries is 100.
GetGattService
Takes a PID, a type-0x1A output buffer containing a #GattService, an u32, a GattAttributeUuid, an AppletResourceUserId, returns an output u8 total_out.
The u32 is handled the same as #BleDisconnect.
Same as #GetGattServices except this only returns the #GattService which matches the input GattAttributeUuid.
GetGattIncludedServices
Takes a PID, a type-0x6 output buffer containing an array of #GattService, an u16, an u32, an AppletResourceUserId, returns an output u8.
The u32 is handled the same as #BleDisconnect. The max array entries is 100.
Same as #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.
GetBelongingGattService
Takes a PID, a type-0x1A output buffer containing a #GattService, an u16, an u32, an AppletResourceUserId, returns an output u8 total_out.
The u32 is handled the same as #BleDisconnect.
This is similar to #GetGattIncludedServices except this only returns 1 #GattService.
GetGattCharacteristics
Takes a PID, a type-0x6 output buffer containing an array of #GattCharacteristic, an u16, an u32, an AppletResourceUserId, returns an output u8 total_out.
The u32 is handled the same as #BleDisconnect. The max array entries is 100.
The u16 controls which #GattCharacteristic entries to return.
GetGattDescriptors
Takes a PID, a type-0x6 output buffer containing an array of #GattDescriptor, an u16, an u32, an AppletResourceUserId, returns an output u8 total_out.
The u32 is handled the same as #BleDisconnect. The max array entries is 100.
The u16 controls which #GattDescriptor entries to return.
AcquireBleMtuConfigEvent
No input, returns an output u8 and an Event handle with EventClearMode=1.
sdknso will Abort if the output u8 is value 0.
ConfigureBleMtu
Takes a PID, an u16, an u32, an AppletResourceUserId, no output.
The u32 is handled the same as #BleDisconnect.
sdknso will Abort if the user-specified u16 is <0x18 or >0x200.
GetBleMtu
Takes a PID, an u32, an AppletResourceUserId, returns an output u16.
The u32 is handled the same as #BleDisconnect.
RegisterBleGattDataPath
Takes a PID, a #BleDataPath, an AppletResourceUserId, no output.
UnregisterBleGattDataPath
Takes a PID, a #BleDataPath, an AppletResourceUserId, no output.
BtmState
This is "nn::btm::BtmState". This is an u32 enum.
BluetoothMode
This is "nn::btm::BluetoothMode". This is an u32 enum.
WlanMode
This is "nn::btm::WlanMode". This is an u32 enum.
HostDeviceProperty
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
DeviceSlotModeList
This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct.
DeviceInfoList
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
DeviceInfo
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
ZeroRetransmissionList
This is "nn::btm::ZeroRetransmissionList". This is a 0x11-byte struct.
GattService
This is "nn::btm::user::GattService". This is a 0x24-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | |
0x4 | 0x14 | GattAttributeUuid |
0x18 | 0x2 | |
0x1A | 0x4 | |
0x1E | 0x2 | |
0x20 | 0x1 | |
0x21 | 0x3 | Padding |
GattCharacteristic
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
GattDescriptor
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
BleDataPath
This is "nn::btm::user::BleDataPath". This is a 0x18-byte struct with 4-byte alignment.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | |
0x1 | 0x3 | Padding |
0x4 | 0x14 | GattAttributeUuid |