Difference between revisions of "BTM services"
Line 328: | Line 328: | ||
== GetGattIncludedServices == | == GetGattIncludedServices == | ||
− | Takes a type-0x6 output buffer containing an array of [[#GattService]], an u16 | + | 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. | The u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100. | ||
Line 337: | Line 337: | ||
== GetBelongingService == | == GetBelongingService == | ||
− | Takes a type-0x1A output buffer containing a [[#GattService]], an u16 | + | 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. | The u32 is the same as the param for [[#BleDisconnect]]. The output bool indicates whether a [[#GattService]] was returned. | ||
Line 344: | Line 344: | ||
== GetGattCharacteristics == | == GetGattCharacteristics == | ||
− | Takes a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16 | + | 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 u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100. | ||
Line 351: | Line 351: | ||
== GetGattDescriptors == | == GetGattDescriptors == | ||
− | Takes a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16 | + | 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 u32 is the same as the param for [[#BleDisconnect]]. The max array entries is 100. | ||
Line 361: | Line 361: | ||
== ConfigureBleMtu == | == ConfigureBleMtu == | ||
− | Takes an u16, an u32, no output. | + | Takes an u16 mtu, an u32, no output. |
The u32 is the same as the param for [[#BleDisconnect]]. | The u32 is the same as the param for [[#BleDisconnect]]. | ||
== GetBleMtu == | == GetBleMtu == | ||
− | Takes an u32, returns an output u16. | + | Takes an u32, returns an output u16 mtu. |
The u32 is the same as the param for [[#BleDisconnect]]. | The u32 is the same as the param for [[#BleDisconnect]]. |
Revision as of 18:10, 29 December 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.
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.
GetState
No input, returns an output #BtmState.
GetHostDeviceProperty
No input, returns an output #HostDeviceProperty.
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.
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 bool.
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 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 Address and a bool, no output.
AcquireBleScanEvent
No input, returns an output bool and an Event handle with EventClearMode=1.
GetBleScanParameterGeneral
Takes an input u16, returns a BleAdvertisePacketParameter.
The u16 must be value 0x1 or 0xFFFF.
GetBleScanParameterSmartDevice
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 BleAdvertisePacketParameter, no output.
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.
StopBleScanForPaired
No input/output.
StartBleScanForSmartDevice
Takes a GattAttributeUuid, no output.
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 Address, 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.
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 Address and a BleAdvertisePacketParameter, no output.
BleGetPairedAddresses
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 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.
Cmd62
Takes an input bool, no output.
Cmd63
No input, returns an output bool.
Cmd64
No input/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 |
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 Address, no output.
CancelBond
Takes an input Address, no output.
SetTsiMode
Takes an input Address and a #TsiMode, no output.
GeneralTest
Takes an input s32, no output.
HidConnect
Takes an input Address, no output.
GeneralGet
Takes an input u32 and a type-0x1A output buffer containing a 0x11-byte struct.
GetGattClientDisconnectionReason
Takes an input Address 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 | #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 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 Address, 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 Address and a BleAdvertisePacketParameter, no output.
This is similar to the btm cmd.
BleGetPairedDevices
Takes a type-0xA output buffer containing an array of Address, 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.
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.
TsiMode
This is "nn::btm::TsiMode". This is an u32 enum.
HostDeviceProperty
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x9 | Same as AdapterProperty+0x0. |
0x9 | 0x1F | Same as AdapterProperty+0x9. |
0x28 | 0x1 | Always zero. |
0x29 | 0x1 | Same as AdapterProperty+0x102. |
DeviceSlotModeList
This is "nn::btm::DeviceSlotModeList". This is a 0x64-byte struct.
DeviceInfoList
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
Offset | Size | Description |
---|---|---|
0x0 | 0x1 | Total entries. |
0x1 | 0x3 | Padding |
0x4 | 0xA*60(0x3C0) | Array of #DeviceInfo. |
DeviceInfo
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
DevicePropertyList
This is "nn::btm::DevicePropertyList". This is a 0x268-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 | 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 |