Difference between revisions of "BTM services"
(→btm) |
|||
Line 38: | Line 38: | ||
| 12 || IncreaseDeviceInfoOrder | | 12 || IncreaseDeviceInfoOrder | ||
|- | |- | ||
− | | 13 || LlrNotify | + | | 13 || [[#LlrNotify]] |
|- | |- | ||
| 14 || EnableRadio | | 14 || EnableRadio | ||
Line 147: | Line 147: | ||
With [5.1.0+] cmds 24-42 were moved/replaced/etc (input/output changed). | With [5.1.0+] cmds 24-42 were moved/replaced/etc (input/output changed). | ||
− | [9.0.0+] | + | == LlrNotify == |
+ | Takes an input [[Bluetooth_Driver_services#Address|Address]], no output. | ||
+ | |||
+ | [9.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]] and a s32, no output. | ||
= btm:dbg = | = btm:dbg = |
Revision as of 15:59, 5 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+] |
[3.0.0+] RegisterSystemEventForConnectedDeviceCondition, RegisterSystemEventForRegisteredDeviceInfo, and cmd18 now returns an output u8.
With [5.1.0+] cmds 24-42 were moved/replaced/etc (input/output changed).
LlrNotify
Takes an input Address, no output.
[9.0.0+] Takes an input Address and a s32, no output.
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.
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 |