BTM services
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.
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.
Cmd | Name |
---|---|
0 | #GetState |
1 | #GetHostDeviceProperty |
2 | #AcquireDeviceConditionEvent |
3 | #GetDeviceCondition |
4 | #SetBurstMode |
5 | #SetSlotMode |
6 | [1.0.0-8.1.1] #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.1.0+] #GetBleScanParameterGeneral |
25 | [5.1.0+] #GetBleScanParameterSmartDevice |
26 | [5.1.0+] #StartBleScanForGeneral |
27 | [5.1.0+] #StopBleScanForGeneral |
28 | [5.1.0+] #GetBleScanResultsForGeneral |
29 | [5.1.0+] #StartBleScanForPairedDevice |
30 | [5.1.0+] #StopBleScanForPairedDevice |
31 | [5.1.0+] #StartBleScanForSmartDevice |
32 | [5.1.0+] #StopBleScanForSmartDevice |
33 | [5.1.0+] #GetBleScanResultsForSmartDevice |
34 | [5.1.0+] #AcquireBleConnectionEvent |
35 ([5.0.0-5.0.2] 24) | [5.0.0+] #BleConnect |
36 | [5.1.0+] #BleOverrideConnection |
37 ([5.0.0-5.0.2] 25) | [5.0.0+] #BleDisconnect |
38 ([5.0.0-5.0.2] 26) | [5.0.0+] #BleGetConnectionState |
39 ([5.0.0-5.0.2] 27) | [5.0.0+] #BleGetGattClientConditionList |
40 ([5.0.0-5.0.2] 28) | [5.0.0+] #AcquireBlePairingEvent |
41 | [5.1.0+] #BlePairDevice |
42 | [5.1.0+] #BleUnpairDeviceOnBoth |
43 | [5.1.0+] #BleUnpairDevice |
44 | [5.1.0+] #BleGetPairedAddresses |
45 | [5.1.0+] #AcquireBleServiceDiscoveryEvent |
46 ([5.0.0-5.0.2] 29) | [5.0.0+] #GetGattServices |
47 ([5.0.0-5.0.2] 30) | [5.0.0+] #GetGattService |
48 ([5.0.0-5.0.2] 31) | [5.0.0+] #GetGattIncludedServices |
49 ([5.0.0-5.0.2] 32) | [5.0.0+] #GetBelongingService |
50 ([5.0.0-5.0.2] 33) | [5.0.0+] #GetGattCharacteristics |
51 ([5.0.0-5.0.2] 34) | [5.0.0+] #GetGattDescriptors |
52 ([5.0.0-5.0.2] 35) | [5.0.0+] #AcquireBleMtuConfigEvent |
53 ([5.0.0-5.0.2] 36) | [5.0.0+] #ConfigureBleMtu |
54 ([5.0.0-5.0.2] 37) | [5.0.0+] #GetBleMtu |
55 ([5.0.0-5.0.2] 38) | [5.0.0+] #RegisterBleGattDataPath |
56 ([5.0.0-5.0.2] 39) | [5.0.0+] #UnregisterBleGattDataPath |
57 ([5.0.0-5.0.2] 40) | [5.0.0+] #RegisterAppletResourceUserId |
58 ([5.0.0-5.0.2] 41) | [5.0.0+] #UnregisterAppletResourceUserId |
59 ([5.0.0-5.0.2] 42) | [5.0.0+] #SetAppletResourceUserId |
60 | [8.0.0+] |
61 | [8.0.0+] |
62 | [9.0.0+] |
63 | [9.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+] |
113 | [14.0.0+] |
114 | [14.0.0+] |
115 | [14.0.0+] |
GetState
No input, returns an output #BtmState.
GetHostDeviceProperty
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
No input, returns an output Event handle with EventClearMode=1.
[3.0.0+] Now returns an additional output bool.
GetDeviceCondition
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
Takes an input BdAddress and a bool, no output.
SetSlotMode
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.
- First array:
- Validates the BdAddress with state, skipping it if not found.
- Calls the SetTsi wrapper func described below, with the above BdAddress and tsi=0xFF (Exit). If this returns false, CloseHidConnection is used with the BdAddress.
- Second array:
- Validates the BdAddress with state, skipping it if not found.
- Uses 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 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 CloseHidConnection is used and the loop is continued.
- Calls the SetTsi wrapper func described below, with the BdAddress and the above Tsi value. If this returns false, CloseHidConnection is used with the BdAddress.
- It then goes through various arrays again for updating state.
- {...}
- First array:
Note that the above func is also called from various other funcs as well. An event for opening a hid connection also triggers it in some cases.
The SetTsi wrapper func is implemented as follows:
- Uses 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
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 bool.
GetDeviceInfo
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
Takes an input #DeviceInfo, no output.
[13.0.0+] Takes a type-0x19 input buffer containing a #DeviceInfo, no output.
RemoveDeviceInfo
Takes an input BdAddress, no output.
IncreaseDeviceInfoOrder
Takes an input BdAddress, no output.
LlrNotify
Takes an input BdAddress, no output.
[9.0.0+] Takes an input BdAddress and a s32, no output.
EnableRadio
No input/output.
DisableRadio
No input/output.
HidDisconnect
Takes an input BdAddress, no output.
HidSetRetransmissionMode
Takes an input BdAddress 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 bool.
AcquireLlrStateEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
IsLlrStarted
No input, returns an output bool.
EnableSlotSaving
Takes an input bool, no output.
ProtectDeviceInfo
Takes an input BdAddress and a bool, no output.
AcquireBleScanEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
GetBleScanParameterGeneral
Takes an input u16 ParameterId, returns a BleAdvertisePacketParameter.
The u16 must be value 0x1 or 0xFFFF.
hid uses value 0x1 for Palma.
The output BleAdvertisePacketParameter starting at +0x2 contains (CompanyId is 0x0553 for Nintendo for both of these):
- ParameterId 0x1:
000100000100
- ParameterId 0xFFFF:
ADDE00EFBE00
GetBleScanParameterSmartDevice
Takes an input u16 ParameterId, 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 BleAdvertisePacketParameter, no output.
This eventually uses AddBleScanFilterCondition, where the the passed BleAdvertiseFilter is generated from the input BleAdvertisePacketParameter.
This also uses SetBleScanParameter.
StopBleScanForGeneral
No input/output.
GetBleScanResultsForGeneral
Takes a type-0x6 output buffer containing an array of BleScanResult, returns an output u8 total_out.
The max array entries is 10.
StartBleScanForPaired
Takes a BleAdvertisePacketParameter, no output.
This eventually uses AddBleScanFilterCondition, where the the passed BleAdvertiseFilter is generated from the input BleAdvertisePacketParameter.
This also uses SetBleScanParameter.
StopBleScanForPaired
No input/output.
StartBleScanForSmartDevice
Takes a GattAttributeUuid, no output.
This eventually uses AddBleScanFilterCondition, where the the passed BleAdvertiseFilter is generated from the input GattAttributeUuid.
This also uses SetBleScanParameter.
The BleAdvertiseFilter is generated as follows: CondType = 7(ServiceUuid128), CondDataSize = 0x11. CondData: {128bit UUID copied from the 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 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
Takes an input BdAddress, no output.
An error is thrown if the BdAddress is already connected (listed in the BleConnectionInfo from #BleGetConnectionState). An error is thrown if 4 devices are already connected.
BleOverrideConnection
Takes an input u32, no output.
The u32 is the same as the param for #BleDisconnect.
BleDisconnect
Takes an input u32 ConnectionHandle, no output.
The u32 must match a ConnectionHandle in a BleConnectionInfo from #BleGetConnectionState. [5.1.0+] 0xFFFFFFFF is invalid.
BleGetConnectionState
Takes a type-0xA output buffer containing an array of BleConnectionInfo, returns an output u8 total_out.
Other cmds which use this internally use arraycount=4.
BleGetGattClientConditionList
Takes a type-0x1A output buffer containing a 0x74-byte struct.
AcquireBlePairingEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
BlePairDevice
Takes an input BleAdvertisePacketParameter and an u32, no output.
The u32 is the same as the param for #BleDisconnect.
BleUnpairDeviceOnBoth
Takes an input BleAdvertisePacketParameter and an u32, no output.
The u32 is the same as the param for #BleDisconnect.
BleUnpairDevice
Takes an input BdAddress and a BleAdvertisePacketParameter, no output.
BleGetPairedAddresses
Takes a type-0xA output buffer containing an array of BdAddress, a 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
Takes a type-0x6 output buffer containing an array of #GattService, an u32, returns an output u8 total_out.
The u32 is the same as the param for #BleDisconnect. The max array entries is 100.
GetGattService
Takes a type-0x1A output buffer containing a #GattService, an u32, a GattAttributeUuid, returns an output bool.
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 GattAttributeUuid.
GetGattIncludedServices
Takes a type-0x6 output buffer containing an array of #GattService, an u16 ServiceHandle, an u32, returns an output u8.
The u32 is the same as the param for #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.
GetBelongingService
Takes a type-0x1A output buffer containing a #GattService, an u16 AttributeHandle, an u32, returns an output bool.
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.
GetGattCharacteristics
Takes a type-0x6 output buffer containing an array of #GattCharacteristic, an u16 ServiceHandle, an u32, returns an output u8 total_out.
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
Takes a type-0x6 output buffer containing an array of #GattDescriptor, an u16 CharHandle, an u32, returns an output u8 total_out.
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
No input, returns an output bool and an Event handle with EventClearMode=1.
ConfigureBleMtu
Takes an u16 mtu, an u32, no output.
The u32 is the same as the param for #BleDisconnect.
GetBleMtu
Takes an u32, returns an output u16 mtu.
The u32 is the same as the param for #BleDisconnect.
RegisterBleGattDataPath
Takes a #BleDataPath, no output.
UnregisterBleGattDataPath
Takes a #BleDataPath, no output.
RegisterAppletResourceUserId
Takes an input u32 and an AppletResourceUserId, no output.
UnregisterAppletResourceUserId
Takes an input AppletResourceUserId, no output.
SetAppletResourceUserId
Takes an input AppletResourceUserId, no output.
Cmd60
No input, returns an output Event handle with EventClearMode=1.
Cmd61
Takes a 0x44-byte input struct, 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.
The input struct has the following structure:
Offset | Size | Description |
---|---|---|
0x0 | 0x10 * 4 | Array of the below struct. |
0x40 | 0x4 | s32 count, for the array at +0. |
Struct for the above array:
Offset | Size | Description |
---|---|---|
0x0 | 0x6 | BdAddress |
0x6 | 0x6 | Unused |
0xC | 0x1 | Used to determine data which is then used for BleConnectionParameter. |
0xD | 0x3 | Padding |
Cmd62
Takes an input bool, no output.
Sends a request which is handled as follows: writes the flag into state if needed.
Cmd63
No input, returns an output bool.
This gets the flag used by #Cmd62.
Cmd64
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
This is "nn::btm::IBtmDebug".
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.
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 |
13 | [12.0.0+] |
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.
CreateBond
Takes an input BdAddress, no output.
CancelBond
Takes an input BdAddress, no output.
SetTsiMode
Takes an input BdAddress and a #TsiMode, no output.
Sends a request which is handled as follows: uses SetTsi directly with the specified params.
GeneralTest
Takes an input s32, no output.
HidConnect
Takes an input BdAddress, no output.
GeneralGet
Takes an input u32 and a type-0x1A output buffer containing a 0x11-byte struct.
GetGattClientDisconnectionReason
Takes an input 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
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 | #IsRadioEnabled |
7 | [3.0.0+] #AcquireRadioEvent |
8 | [3.0.0+] #AcquireGamepadPairingEvent |
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 |
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.
IsRadioEnabled
No input, returns an output bool.
AcquireRadioEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
AcquireGamepadPairingEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
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 bool and an Event handle with EventClearMode=1.
This is similar to the btm cmd.
GetBleScanFilterParameter
Takes an input u16, returns a BleAdvertisePacketParameter.
This is the same as #GetBleScanParameterGeneral.
GetBleScanFilterParameter2
Takes an input u16, returns a GattAttributeUuid.
This is the same as #GetBleScanParameterSmartDevice.
StartBleScanForGeneral
Takes a PID, a BleAdvertisePacketParameter, an AppletResourceUserId, no output.
This is similar to the btm cmd.
StopBleScanForGeneral
No input/output.
This is similar to the btm cmd.
GetBleScanResultsForGeneral
Takes a PID, a type-0x6 output buffer containing an array of BleScanResult, an AppletResourceUserId, returns an output u8 total_out.
This is similar to the btm cmd.
StartBleScanForPaired
Takes a PID, a BleAdvertisePacketParameter, an AppletResourceUserId, no output.
This is similar to the btm cmd.
StopBleScanForPaired
No input/output.
This is similar to the btm cmd.
StartBleScanForSmartDevice
Takes a PID, a GattAttributeUuid, an AppletResourceUserId, no output.
This is similar to the btm cmd.
StopBleScanForSmartDevice
No input/output.
This is similar to the btm cmd.
GetBleScanResultsForSmartDevice
Takes a PID, a type-0x6 output buffer containing an array of BleScanResult, an AppletResourceUserId, returns an output u8 total_out.
This is similar to the btm cmd.
AcquireBleConnectionEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
This is similar to the btm cmd.
BleConnect
Takes a PID, an BdAddress, an AppletResourceUserId, no output.
This is similar to the btm cmd.
BleDisconnect
Takes an input u32, no output.
This is similar to the btm cmd.
BleGetConnectionState
Takes a PID, a type-0xA output buffer containing an array of BleConnectionInfo, an AppletResourceUserId, returns an output u8 total_out.
This is similar to the btm cmd.
AcquireBlePairingEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
This is similar to the btm cmd.
BlePairDevice
Takes an input BleAdvertisePacketParameter and an u32, no output.
This is similar to the btm cmd.
BleUnPairDevice
Takes an input BleAdvertisePacketParameter and an u32, no output.
This is similar to the btm cmd.
BleUnPairDevice2
Takes an input BdAddress and a BleAdvertisePacketParameter, no output.
This is similar to the btm cmd.
BleGetPairedDevices
Takes a type-0xA output buffer containing an array of BdAddress, a BleAdvertisePacketParameter, returns an output u8 total_out.
This is the same as the btm cmd.
AcquireBleServiceDiscoveryEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
This is similar to the btm cmd.
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.
This is similar to the btm cmd.
GetGattService
Takes a PID, a type-0x1A output buffer containing a #GattService, an u32, a GattAttributeUuid, an AppletResourceUserId, returns an output bool.
This is similar to the btm cmd.
GetGattIncludedServices
Takes a PID, a type-0x6 output buffer containing an array of #GattService, an u16, an u32, an AppletResourceUserId, returns an output u8.
This is similar to the btm cmd.
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 bool.
This is similar to the btm cmd.
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.
This is similar to the btm cmd.
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.
This is similar to the btm cmd.
AcquireBleMtuConfigEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
This is similar to the btm cmd.
ConfigureBleMtu
Takes a PID, an u16, an u32, an AppletResourceUserId, no output.
This is similar to the btm cmd.
sdknso will Abort if the user-specified u16 is <0x18 or >0x200 (this doesn't apply to the btm cmd).
GetBleMtu
Takes a PID, an u32, an AppletResourceUserId, returns an output u16.
This is similar to the btm cmd.
RegisterBleGattDataPath
Takes a PID, a #BleDataPath, an AppletResourceUserId, no output.
This is similar to the btm cmd.
UnregisterBleGattDataPath
Takes a PID, a #BleDataPath, an AppletResourceUserId, no output.
This is similar to the 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
This is "nn::btm::BtmState".
Value | Description |
---|---|
0 | NotInitialized |
1 | RadioOff |
2 | MinorSlept |
3 | RadioOffMinorSlept |
4 | Slept |
5 | RadioOffSlept |
6 | Initialized |
7 | Working |
BluetoothMode
This is "nn::btm::BluetoothMode".
Value | Description |
---|---|
0 | Dynamic2Slot |
1 | StaticJoy |
WlanMode
This is "nn::btm::WlanMode".
Value | Description |
---|---|
0 | Local4 |
1 | Local8 |
2 | None |
TsiMode
This is "nn::btm::TsiMode".
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".
Value | Description |
---|---|
0 | 2 |
1 | 4 |
2 | 6 |
3 | Active |
Profile
This is "nn::btm::Profile".
Value | Description |
---|---|
0 | None |
1 | Hid |
HidDeviceInfo
This is "nn::btm::HidDeviceInfo".
Offset | Size | Description |
---|---|---|
0x0 | 0x2 | Vid |
0x2 | 0x2 | Pid |
HostDeviceProperty
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
[13.0.0+] This is a 0x103-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x6 | BdAddress |
0x6 | 0x3 | ClassOfDevice |
0x9 | 0x20 | BdName |
0x29 | 0x1 | FeatureSet |
DeviceSlotMode
This is "nn::btm::DeviceSlotMode". This is a 0xC-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x6 | BdAddress |
0x6 | 0x2 | Reserved |
0x8 | 0x4 | SlotMode |
DeviceSlotModeList
This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | DeviceCount |
0x1 | 0x3 | Reserved |
0x4 | 0xC * 8 | Array of DeviceSlotMode |
DeviceInfo
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
[13.0.0+] This is a 0x13C-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x6 | BdAddress |
0x6 | 0x3 | ClassOfDevice |
0x9 | 0x20 | BdName |
0x29 | 0x10 | LinkKey |
0x39 | 0x3 | Reserved |
0x3C | 0x4 | Profile |
0x40 | 0x4 | Empty (Profile = None) or HidDeviceInfo (Profile = Hid) |
0x44 | 0x1C | Reserved |
DeviceInfoList
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | DeviceCount |
0x1 | 0x3 | Reserved |
0x4 | 0xA * 0x60 | Array of DeviceInfo |
DeviceProperty
This is "nn::btm::DeviceProperty". This is a 0x29-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x6 | BdAddress |
0x6 | 0x3 | ClassOfDevice |
0x9 | 0x20 | BdName |
DevicePropertyList
This is "nn::btm::DevicePropertyList". This is a 0x268-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | DeviceCount |
0x1 | 0x29 * 15 | Array of DeviceProperty |
ZeroRetransmissionList
This is "nn::btm::ZeroRetransmissionList". This is a 0x11-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | EnabledReportIdCount |
0x1 | 0x1 * 16 | Array of EnabledReportId |
GattService
This is "nn::btm::user::GattService". This is a 0x24-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | |
0x4 | 0x14 | GattAttributeUuid |
0x18 | 0x2 | Handle |
0x1A | 0x2 | |
0x1C | 0x2 | InstanceId |
0x1E | 0x2 | EndGroupHandle |
0x20 | 0x1 | PrimaryService flag |
0x21 | 0x3 | Padding |
GattCharacteristic
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | |
0x4 | 0x14 | GattAttributeUuid |
0x18 | 0x2 | Handle |
0x1A | 0x2 | |
0x1C | 0x2 | InstanceId |
0x1E | 0x1 | Properties |
0x1F | 0x5 |
GattDescriptor
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | |
0x4 | 0x14 | GattAttributeUuid |
0x18 | 0x2 | Handle |
0x1A | 0x6 |
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 |
Logging
A func which uses 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.