BTM services: Difference between revisions

No edit summary
(19 intermediate revisions by 2 users not shown)
Line 26: Line 26:
| 5 || [[#SetSlotMode]]
| 5 || [[#SetSlotMode]]
|-
|-
| 6 || [1.0.0-8.1.0] [[#SetBluetoothMode]]
| 6 || [1.0.0-8.1.1] [[#SetBluetoothMode]]
|-
|-
| 7 || [[#SetWlanMode]]
| 7 || [[#SetWlanMode]]
Line 150: Line 150:
== GetHostDeviceProperty ==
== GetHostDeviceProperty ==
No input, returns an output [[#HostDeviceProperty]].
No input, returns an output [[#HostDeviceProperty]].
This gets the previously initialized [[#HostDeviceProperty]].


== AcquireDeviceConditionEvent ==
== AcquireDeviceConditionEvent ==
Line 160: Line 162:


== SetBurstMode ==
== SetBurstMode ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a bool, no output.
Takes an input [[#BdAddress|BdAddress]] and a bool, no output.


== SetSlotMode ==
== SetSlotMode ==
Takes a type-0x19 input buffer containing a [[#DeviceSlotModeList]], no output.
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|BdAddress]].
** First array:
*** Validates the [[#BdAddress|BdAddress]] with state, skipping it if not found.
*** 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:
*** 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, {...}.
** Then it goes through the first array again, except here it does the following:
*** 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.
*** 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.
** {...}
Note that the above func is also called from various other funcs as well. An [[Bluetooth_Driver_services#HidEventType|event]] for opening a hid connection also triggers it in some cases.
The SetTsi wrapper func is implemented as follows:
* Uses [[Bluetooth_Driver_services#SetTsi|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 ==
== SetBluetoothMode ==
Line 183: Line 207:


== RemoveDeviceInfo ==
== RemoveDeviceInfo ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== IncreaseDeviceInfoOrder ==
== IncreaseDeviceInfoOrder ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== LlrNotify ==
== LlrNotify ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


[9.0.0+] Takes an input [[Bluetooth_Driver_services#Address|Address]] and a s32, no output.
[9.0.0+] Takes an input [[#BdAddress|BdAddress]] and a s32, no output.


== EnableRadio ==
== EnableRadio ==
Line 200: Line 224:


== HidDisconnect ==
== HidDisconnect ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== HidSetRetransmissionMode ==
== HidSetRetransmissionMode ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]], no output.
Takes an input [[#BdAddress|BdAddress]] and a type-0x19 input buffer containing a [[#ZeroRetransmissionList]], no output.


== AcquireAwakeReqEvent ==
== AcquireAwakeReqEvent ==
Line 220: Line 244:


== ProtectDeviceInfo ==
== ProtectDeviceInfo ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a bool, no output.
Takes an input [[#BdAddress|BdAddress]] and a bool, no output.


== AcquireBleScanEvent ==
== AcquireBleScanEvent ==
Line 226: Line 250:


== GetBleScanParameterGeneral ==
== GetBleScanParameterGeneral ==
Takes an input u16, returns a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]].
Takes an input u16 ParameterId, returns a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]].


The u16 must be value 0x1 or 0xFFFF.
The u16 must be value 0x1 or 0xFFFF.


== GetBleScanParameterSmartDevice ==
== GetBleScanParameterSmartDevice ==
Takes an input u16, returns a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].
Takes an input u16 ParameterId, returns a [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]].


The u16 must be value 0x2. The first 4-bytes of output is always 0 since it's not set.
The u16 must be value 0x2. The first 4-bytes of output is always 0 since it's not set.
Line 267: Line 291:


== BleConnect ==
== BleConnect ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


An error is thrown if the [[Bluetooth_Driver_services#Address|Address]] is already connected (listed in the [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]). An error is thrown if 4 [[#BleGetConnectionState|devices]] are already connected.
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 277: Line 301:


== BleDisconnect ==
== BleDisconnect ==
Takes an input u32, no output.
Takes an input u32 ConnectionHandle, no output.


The u32 must match an Id in a [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]. [5.1.0+] 0xFFFFFFFF is invalid.
The u32 must match a ConnectionHandle in a [[Bluetooth_Driver_services#BleConnectionInfo|BleConnectionInfo]] from [[#BleGetConnectionState]]. [5.1.0+] 0xFFFFFFFF is invalid.


== BleGetConnectionState ==
== BleGetConnectionState ==
Line 303: Line 327:


== BleUnpairDevice ==
== BleUnpairDevice ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output.
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 [[Bluetooth_Driver_services#Address|Address]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], returns an output u8 total_out.
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 326: Line 350:


== GetGattIncludedServices ==
== GetGattIncludedServices ==
Takes a type-0x6 output buffer containing an array of [[#GattService]], an u16, an u32, returns an output u8.
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 335: Line 359:


== GetBelongingService ==
== GetBelongingService ==
Takes a type-0x1A output buffer containing a [[#GattService]], an u16, an u32, returns an output bool.
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 342: Line 366:


== GetGattCharacteristics ==
== GetGattCharacteristics ==
Takes a type-0x6 output buffer containing an array of [[#GattCharacteristic]], an u16, an u32, returns an output u8 total_out.
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 349: Line 373:


== GetGattDescriptors ==
== GetGattDescriptors ==
Takes a type-0x6 output buffer containing an array of [[#GattDescriptor]], an u16, an u32, returns an output u8 total_out.
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 359: Line 383:


== 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]].
Line 388: Line 412:
== Cmd61 ==
== Cmd61 ==
Takes a 0x44-byte input struct, no output.
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:
{| class="wikitable" border="1"
|-
! 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:
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
|-
| 0x6 || 0x6 || Unused
|-
| 0xC || 0x1 || Used to determine data which is then used for [[Bluetooth_Driver_services#BleConnectionParameter|BleConnectionParameter]].
|-
| 0xD || 0x3 || Padding
|}


== Cmd62 ==
== Cmd62 ==
Takes an input bool, no output.
Takes an input bool, no output.
Sends a request which is handled as follows: writes the flag into state if needed.


== Cmd63 ==
== Cmd63 ==
No input, returns an output bool.
No input, returns an output bool.
This gets the flag used by [[#Cmd62]].


== Cmd64 ==
== Cmd64 ==
No input/output.
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 =
= btm:dbg =
Line 402: Line 465:


This has max_sessions 6. IPC is handled by 2 threads shared with all services.
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.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 432: Line 497:
|-
|-
| 12 || [5.1.0+] [[#GetBleConnectionParameterRequest]]
| 12 || [5.1.0+] [[#GetBleConnectionParameterRequest]]
|-
| 13 || [12.0.0+]
|}
|}


Line 449: Line 516:


== CreateBond ==
== CreateBond ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== CancelBond ==
== CancelBond ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== SetTsiMode ==
== SetTsiMode ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a [[#TsiMode]], no output.
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.


== GeneralTest ==
== GeneralTest ==
Line 461: Line 530:


== HidConnect ==
== HidConnect ==
Takes an input [[Bluetooth_Driver_services#Address|Address]], no output.
Takes an input [[#BdAddress|BdAddress]], no output.


== GeneralGet ==
== GeneralGet ==
Line 467: Line 536:


== GetGattClientDisconnectionReason ==
== GetGattClientDisconnectionReason ==
Takes an input [[Bluetooth_Driver_services#Address|Address]] and an u32, returns an output bool and u16.
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 704: Line 773:


=== BleConnect ===
=== BleConnect ===
Takes a PID, an [[Bluetooth_Driver_services#Address|Address]], an [[Applet_Manager_services#AppletResourceUserId|AppletResourceUserId]], no output.
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 734: Line 803:


=== BleUnPairDevice2 ===
=== BleUnPairDevice2 ===
Takes an input [[Bluetooth_Driver_services#Address|Address]] and a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], no output.
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 [[Bluetooth_Driver_services#Address|Address]], a [[Bluetooth_Driver_services#BleAdvertisePacketParameter|BleAdvertisePacketParameter]], returns an output u8 total_out.
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 808: Line 877:


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 an u32 enum.
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 an u32 enum.
This is "nn::btm::BluetoothMode".
 
{| class="wikitable" border="1"
|-
! Value || Description
|-
| 0 || Dynamic2Slot
|-
| 1 || StaticJoy
|}


= WlanMode =
= WlanMode =
This is "nn::btm::WlanMode". This is an u32 enum.
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 an u32 enum.
This is "nn::btm::TsiMode".
 
{| class="wikitable" border="1"
|-
! 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".
 
{| 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
|}


= HostDeviceProperty =
= HostDeviceProperty =
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
This is "nn::btm::HostDeviceProperty". This is a 0x2A-byte struct.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x6 || [[#BdAddress|BdAddress]]
|-
| 0x6 || 0x3 || [[#ClassOfDevice|ClassOfDevice]]
|-
| 0x9 || 0x20 || [[#BdName|BdName]]
|-
| 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 || 0x4 || [[#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 =
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.
This is "nn::btm::DeviceInfoList". This is a 0x3C4-byte struct.


= DeviceInfo =
{| class="wikitable" border="1"
This is "nn::btm::DeviceInfo". This is a 0x60-byte struct.
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x1 || DeviceCount
|-
| 0x1 || 0x3 || Reserved
|-
| 0x4 || 0xA * 0x60 || Array of [[#DeviceInfo|DeviceInfo]]
|}
 
= DeviceProperty =
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 =
Line 852: Line 1,163:
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|-
|-
| 0x18 || 0x2 ||  
| 0x18 || 0x2 || Handle
|-
|-
| 0x1A || 0x4 ||  
| 0x1A || 0x2 ||  
|-
|-
| 0x1E || 0x2 ||  
| 0x1C || 0x2 || InstanceId
|-
|-
| 0x20 || 0x1 ||  
| 0x1E || 0x2 || EndGroupHandle
|-
| 0x20 || 0x1 || PrimaryService flag
|-
|-
| 0x21 || 0x3 || Padding
| 0x21 || 0x3 || Padding
Line 865: Line 1,178:
= GattCharacteristic =
= GattCharacteristic =
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
This is "nn::btm::user::GattCharacteristic". This is a 0x24-byte struct.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x4 ||
|-
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|-
| 0x18 || 0x2 || Handle
|-
| 0x1A || 0x2 ||
|-
| 0x1C || 0x2 || InstanceId
|-
| 0x1E || 0x1 || Properties
|-
| 0x1F || 0x5 ||
|}


= GattDescriptor =
= GattDescriptor =
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
This is "nn::btm::user::GattDescriptor". This is a 0x20-byte struct.
{| class="wikitable" border="1"
|-
! Offset
! Size
! Description
|-
| 0x0 || 0x4 ||
|-
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|-
| 0x18 || 0x2 || Handle
|-
| 0x1A || 0x6 ||
|}


= BleDataPath =
= BleDataPath =
Line 884: Line 1,233:
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
| 0x4 || 0x14 || [[Bluetooth_Driver_services#GattAttributeUuid|GattAttributeUuid]]
|}
|}
= Logging =
A func which uses [[PSC_services|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.


[[Category:Services]]
[[Category:Services]]