Difference between revisions of "Bluetooth Driver services"

From Nintendo Switch Brew
Jump to navigation Jump to search
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
= btdrv =
 
= btdrv =
 +
This is "nn::bluetooth::IBluetoothDriver".
 +
 
The bluetooth driver implements the bluetooth protocol over h4/uart.
 
The bluetooth driver implements the bluetooth protocol over h4/uart.
  
Line 10: Line 12:
 
! Cmd || Name
 
! Cmd || Name
 
|-
 
|-
| 0 ||  
+
| 0 || InitializeBluetoothDriver
 +
|-
 +
| 1 || InitializeBluetooth
 +
|-
 +
| 2 || EnableBluetooth
 +
|-
 +
| 3 || DisableBluetooth
 +
|-
 +
| 4 || CleanupBluetooth
 +
|-
 +
| 5 || GetAdapterProperties
 +
|-
 +
| 6 || GetAdapterProperty
 +
|-
 +
| 7 || SetAdapterProperty
 +
|-
 +
| 8 || StartDiscovery
 +
|-
 +
| 9 || CancelDiscovery
 +
|-
 +
| 10 || [[#CreateBond]]
 +
|-
 +
| 11 || RemoveBond
 +
|-
 +
| 12 || CancelBond
 +
|-
 +
| 13 || PinReply
 +
|-
 +
| 14 || SspReply
 +
|-
 +
| 15 || GetEventInfo
 +
|-
 +
| 16 || InitializeHid
 +
|-
 +
| 17 || HidConnect
 +
|-
 +
| 18 || HidDisconnect
 +
|-
 +
| 19 || HidSendData
 +
|-
 +
| 20 || HidSendData2
 +
|-
 +
| 21 || HidSetReport
 +
|-
 +
| 22 || HidGetReport
 +
|-
 +
| 23 || [[#HidWakeController]]
 +
|-
 +
| 24 || HidAddPairedDevice
 +
|-
 +
| 25 || HidGetPairedDevice
 +
|-
 +
| 26 || CleanupHid
 +
|-
 +
| 27 || HidGetEventInfo
 +
|-
 +
| 28 || ExtSetTsi
 +
|-
 +
| 29 || ExtSetBurstMode
 +
|-
 +
| 30 || ExtSetZeroRetran
 +
|-
 +
| 31 || ExtSetMcMode
 +
|-
 +
| 32 || ExtStartLlrMode
 +
|-
 +
| 33 || ExtExitLlrMode
 +
|-
 +
| 34 || ExtSetRadio
 +
|-
 +
| 35 || ExtSetVisibility
 +
|-
 +
| 36 || ExtSetTbfcScan
 +
|-
 +
| 37 || RegisterHidReportEvent
 +
|-
 +
| 38 || [[#HidGetReportEventInfo]]
 +
|-
 +
| 39 || GetLatestPlr
 +
|-
 +
| 40 || [3.0.0+] ExtGetPendingConnections
 +
|-
 +
| 41 || [3.0.0+] GetChannelMap
 +
|-
 +
| 42 || [3.0.0+] EnableBluetoothBoostSetting
 +
|-
 +
| 43 || [3.0.0+] IsBluetoothBoostSettingEnabled
 +
|-
 +
| 44 || [3.0.0+] EnableBluetoothAfhSetting
 +
|-
 +
| 45 || IsBluetoothAfhSettingEnabled
 +
|-
 +
| 46 || [5.0.0+] InitializeBluetoothLe
 +
|-
 +
| 47 || [5.0.0+] EnableBluetoothLe
 +
|-
 +
| 48 || [5.0.0+] DisableBluetoothLe
 +
|-
 +
| 49 || [5.0.0+] CleanupBluetoothLe
 +
|-
 +
| 50 || [5.0.0+] SetLeVisibility
 +
|-
 +
| 51 || [5.0.0+] SetLeConnectionParameter
 +
|-
 +
| 52 || [5.0.0+] [[#SetLeDefaultConnectionParameter]]
 +
|-
 +
| 53 || [5.0.0+] SetLeAdvertiseData
 +
|-
 +
| 54 || [5.0.0+] SetLeAdvertiseParameter
 +
|-
 +
| 55 || [5.0.0+] StartLeScan
 +
|-
 +
| 56 || [5.0.0+] StopLeScan
 +
|-
 +
| 57 || [5.0.0+] AddLeScanFilterCondition
 +
|-
 +
| 58 || [5.0.0+] DeleteLeScanFilterCondition
 +
|-
 +
| 59 || [5.0.0+] DeleteLeScanFilter
 +
|-
 +
| 60 || [5.0.0+] ClearLeScanFilters
 +
|-
 +
| 61 || [5.0.0+] EnableLeScanFilter
 +
|-
 +
| 62 || [5.0.0+] RegisterLeClient
 
|-
 
|-
| 1 ||  
+
| 63 || [5.0.0+] UnregisterLeClient
 
|-
 
|-
| 2 ||  
+
| 64 || [5.0.0+] UnregisterLeClientAll
 
|-
 
|-
| 3 ||  
+
| 65 || [5.0.0+] LeClientConnect
 
|-
 
|-
| 4 ||  
+
| 66 || [5.1.0+]
 
|-
 
|-
| 5 ||  
+
| 67 ([5.0.0-5.0.2] 66) || LeClientCancelConnection
 
|-
 
|-
| 6 ||  
+
| 68 ([5.0.0-5.0.2] 67) || [5.0.0+] [[#LeClientDisconnect]]
 
|-
 
|-
| 7 ||  
+
| 69 ([5.0.0-5.0.2] 68) || [5.0.0+] LeClientGetAttributes
 
|-
 
|-
| 8 ||  
+
| 70 ([5.0.0-5.0.2] 69) || [5.0.0+] LeClientDiscoverService
 
|-
 
|-
| 9 ||  
+
| 71 ([5.0.0-5.0.2] 70) || [5.0.0+] LeClientConfigureMtu
 
|-
 
|-
| 10 ||  
+
| 72 ([5.0.0-5.0.2] 71) || [5.0.0+] RegisterLeServer
 
|-
 
|-
| 11 ||  
+
| 73 ([5.0.0-5.0.2] 72) || [5.0.0+] UnregisterLeServer
 
|-
 
|-
| 12 ||  
+
| 74 ([5.0.0-5.0.2] 73) || [5.0.0+] [[#LeServerConnect]]
 
|-
 
|-
| 13 ||  
+
| 75 || [5.0.0+] CreateLeService
 
|-
 
|-
| 14 ||  
+
| 76 ([5.0.0-5.0.2] 74) || [5.0.0+] LeServerDisconnect
 
|-
 
|-
| 15 ||  
+
| 77 || [5.0.0+] AddLeCharacteristic
 
|-
 
|-
| 16 ||  
+
| 78 ([5.0.0-5.0.2] 76) || [5.0.0+] StartLeService
 
|-
 
|-
| 17 ||  
+
| 79 ([5.0.0-5.0.2] 78) || [5.0.0+] AddLeDescriptor
 
|-
 
|-
| 18 ||  
+
| 80 ([5.0.0-5.0.2] 79) || [5.0.0+] GetLeCoreEventInfo
 
|-
 
|-
| 19 || SendData
+
| 81 ([5.0.0-5.0.2] 80) || [5.0.0+] LeGetFirstCharacteristic
 
|-
 
|-
| 20 ||  
+
| 82 ([5.0.0-5.0.2] 81) || [5.0.0+] LeGetNextCharacteristic
 
|-
 
|-
| 21 || SetReport
+
| 83 ([5.0.0-5.0.2] 82) || [5.0.0+] LeGetFirstDescriptor
 
|-
 
|-
| 22 || GetReport
+
| 84 || [5.0.0+] RegisterLeCoreDataPath
 
|-
 
|-
| 23 ||  
+
| 85 || [5.0.0+] UnregisterLeCoreDataPath
 
|-
 
|-
| 24 ||  
+
| 86 || [5.0.0+] RegisterLeHidDataPath
 
|-
 
|-
| 25 ||  
+
| 87 || [5.0.0+] UnregisterLeHidDataPath
 
|-
 
|-
| 26 ||  
+
| 88 || [5.0.0+] RegisterLeDataPath
 
|-
 
|-
| 27 ||  
+
| 89 ([5.0.0-5.0.2] 83) || [5.0.0+] LeGetNextDescriptor
 
|-
 
|-
| 28 ||  
+
| 90 ([5.0.0-5.0.2] 89) || [5.0.0+] UnregisterLeDataPath
 
|-
 
|-
| 29 ||  
+
| 91 ([5.0.0-5.0.2] 90) || [5.0.0+] LeClientReadCharacteristic
 
|-
 
|-
| 30 ||  
+
| 92 ([5.0.0-5.0.2] 91) || [5.0.0+] LeClientReadDescriptor
 
|-
 
|-
| 31 ||  
+
| 93 ([5.0.0-5.0.2] 92) || [5.0.0+] LeClientWriteCharacteristic
 
|-
 
|-
| 32 ||  
+
| 94 || [5.0.0+] LeClientRegisterNotification
 
|-
 
|-
| 33 ||  
+
| 95 ([5.0.0-5.0.2] 93) || [5.0.0+] LeClientWriteDescriptor
 
|-
 
|-
| 34 ||  
+
| 96 ([5.0.0-5.0.2] 95) || [5.0.0+] LeClientDeregisterNotification
 
|-
 
|-
| 35 ||  
+
| 97 ([5.0.0-5.0.2] 96) || [5.0.0+] GetLeHidEventInfo
 
|-
 
|-
| 36 ||  
+
| 97 || [5.0.0-5.0.2] RegisterBleHidEvent
 
|-
 
|-
| 37 ||  
+
| 98 || [5.1.0+] SetLeScanParameter
 
|-
 
|-
| 38 ||  
+
| 256 || [5.0.0+] GetIsManufacturingMode
 
|-
 
|-
| 39 ||  
+
| 257 || [7.0.0+] EmulateBluetoothCrash
 +
|-
 +
| 258 || [9.0.0+] GetBleChannelMap
 
|}
 
|}
 +
 +
Various cmdids were moved with [4.0.0+] and [5.0.0+].
 +
 +
== CreateBond ==
 +
Takes a total of 0x6-bytes of input and a type-0x19 input buffer, no output.
 +
 +
[9.0.0+] Now only takes a total of 0xC-bytes of input without a buffer, no output.
 +
 +
== HidWakeController ==
 +
Takes a total of 0x6-bytes of input, no output.
 +
 +
[9.0.0+] Now takes a total of 0x8-bytes of input, no output.
 +
 +
== HidGetReportEventInfo ==
 +
No input, takes a type-0xA output buffer and returns 4-bytes of output.
 +
 +
[7.0.0+] No longer takes a buffer or returns output, now returns an output handle.
 +
 +
== SetLeDefaultConnectionParameter ==
 +
Takes a total of 0x14-bytes of input, no output.
 +
 +
[9.0.0+] Now takes a total of 0xC-bytes of input, no output.
 +
 +
== LeClientDisconnect ==
 +
Takes a total of 0xC-bytes of input, no output.
 +
 +
[9.0.0+] Now takes a total of 0x4-bytes of input, no output.
 +
 +
== LeServerConnect ==
 +
Takes a total of 0x7-bytes of input, no output.
 +
 +
[9.0.0+] Now takes a total of 1-byte of input, no output.
 +
 +
= bt =
 +
This is "nn::bluetooth::IBluetoothUser".
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
! Cmd || Name
 +
|-
 +
| 0 || LeClientReadCharacteristic
 +
|-
 +
| 1 || LeClientReadDescriptor
 +
|-
 +
| 2 || LeClientWriteCharacteristic
 +
|-
 +
| 3 || LeClientWriteDescriptor
 +
|-
 +
| 4 || LeClientRegisterNotification
 +
|-
 +
| 5 || LeClientDeregisterNotification
 +
|-
 +
| 6 || SetLeResponse
 +
|-
 +
| 7 || LeSendIndication
 +
|-
 +
| 8 || GetLeEventInfo
 +
|-
 +
| 9 || RegisterBleEvent
 +
|}
 +
 +
[[Category:Services]]

Revision as of 01:10, 11 September 2019

btdrv

This is "nn::bluetooth::IBluetoothDriver".

The bluetooth driver implements the bluetooth protocol over h4/uart.

It interfaces with the uart service to actually talk with the bluetooth hardware.

The code seems to be derived from a broadcom stack. A good starting point for similar source code can be found in the MICO project: https://github.com/yinhongxing/mico/tree/ea67ff3659f12d730d4dc3b8d547b093bd2ee2ee/MICO/bluetooth_bte Note that the library files contain many (symbolized) functions which match btdrv.

Cmd Name
0 InitializeBluetoothDriver
1 InitializeBluetooth
2 EnableBluetooth
3 DisableBluetooth
4 CleanupBluetooth
5 GetAdapterProperties
6 GetAdapterProperty
7 SetAdapterProperty
8 StartDiscovery
9 CancelDiscovery
10 #CreateBond
11 RemoveBond
12 CancelBond
13 PinReply
14 SspReply
15 GetEventInfo
16 InitializeHid
17 HidConnect
18 HidDisconnect
19 HidSendData
20 HidSendData2
21 HidSetReport
22 HidGetReport
23 #HidWakeController
24 HidAddPairedDevice
25 HidGetPairedDevice
26 CleanupHid
27 HidGetEventInfo
28 ExtSetTsi
29 ExtSetBurstMode
30 ExtSetZeroRetran
31 ExtSetMcMode
32 ExtStartLlrMode
33 ExtExitLlrMode
34 ExtSetRadio
35 ExtSetVisibility
36 ExtSetTbfcScan
37 RegisterHidReportEvent
38 #HidGetReportEventInfo
39 GetLatestPlr
40 [3.0.0+] ExtGetPendingConnections
41 [3.0.0+] GetChannelMap
42 [3.0.0+] EnableBluetoothBoostSetting
43 [3.0.0+] IsBluetoothBoostSettingEnabled
44 [3.0.0+] EnableBluetoothAfhSetting
45 IsBluetoothAfhSettingEnabled
46 [5.0.0+] InitializeBluetoothLe
47 [5.0.0+] EnableBluetoothLe
48 [5.0.0+] DisableBluetoothLe
49 [5.0.0+] CleanupBluetoothLe
50 [5.0.0+] SetLeVisibility
51 [5.0.0+] SetLeConnectionParameter
52 [5.0.0+] #SetLeDefaultConnectionParameter
53 [5.0.0+] SetLeAdvertiseData
54 [5.0.0+] SetLeAdvertiseParameter
55 [5.0.0+] StartLeScan
56 [5.0.0+] StopLeScan
57 [5.0.0+] AddLeScanFilterCondition
58 [5.0.0+] DeleteLeScanFilterCondition
59 [5.0.0+] DeleteLeScanFilter
60 [5.0.0+] ClearLeScanFilters
61 [5.0.0+] EnableLeScanFilter
62 [5.0.0+] RegisterLeClient
63 [5.0.0+] UnregisterLeClient
64 [5.0.0+] UnregisterLeClientAll
65 [5.0.0+] LeClientConnect
66 [5.1.0+]
67 ([5.0.0-5.0.2] 66) LeClientCancelConnection
68 ([5.0.0-5.0.2] 67) [5.0.0+] #LeClientDisconnect
69 ([5.0.0-5.0.2] 68) [5.0.0+] LeClientGetAttributes
70 ([5.0.0-5.0.2] 69) [5.0.0+] LeClientDiscoverService
71 ([5.0.0-5.0.2] 70) [5.0.0+] LeClientConfigureMtu
72 ([5.0.0-5.0.2] 71) [5.0.0+] RegisterLeServer
73 ([5.0.0-5.0.2] 72) [5.0.0+] UnregisterLeServer
74 ([5.0.0-5.0.2] 73) [5.0.0+] #LeServerConnect
75 [5.0.0+] CreateLeService
76 ([5.0.0-5.0.2] 74) [5.0.0+] LeServerDisconnect
77 [5.0.0+] AddLeCharacteristic
78 ([5.0.0-5.0.2] 76) [5.0.0+] StartLeService
79 ([5.0.0-5.0.2] 78) [5.0.0+] AddLeDescriptor
80 ([5.0.0-5.0.2] 79) [5.0.0+] GetLeCoreEventInfo
81 ([5.0.0-5.0.2] 80) [5.0.0+] LeGetFirstCharacteristic
82 ([5.0.0-5.0.2] 81) [5.0.0+] LeGetNextCharacteristic
83 ([5.0.0-5.0.2] 82) [5.0.0+] LeGetFirstDescriptor
84 [5.0.0+] RegisterLeCoreDataPath
85 [5.0.0+] UnregisterLeCoreDataPath
86 [5.0.0+] RegisterLeHidDataPath
87 [5.0.0+] UnregisterLeHidDataPath
88 [5.0.0+] RegisterLeDataPath
89 ([5.0.0-5.0.2] 83) [5.0.0+] LeGetNextDescriptor
90 ([5.0.0-5.0.2] 89) [5.0.0+] UnregisterLeDataPath
91 ([5.0.0-5.0.2] 90) [5.0.0+] LeClientReadCharacteristic
92 ([5.0.0-5.0.2] 91) [5.0.0+] LeClientReadDescriptor
93 ([5.0.0-5.0.2] 92) [5.0.0+] LeClientWriteCharacteristic
94 [5.0.0+] LeClientRegisterNotification
95 ([5.0.0-5.0.2] 93) [5.0.0+] LeClientWriteDescriptor
96 ([5.0.0-5.0.2] 95) [5.0.0+] LeClientDeregisterNotification
97 ([5.0.0-5.0.2] 96) [5.0.0+] GetLeHidEventInfo
97 [5.0.0-5.0.2] RegisterBleHidEvent
98 [5.1.0+] SetLeScanParameter
256 [5.0.0+] GetIsManufacturingMode
257 [7.0.0+] EmulateBluetoothCrash
258 [9.0.0+] GetBleChannelMap

Various cmdids were moved with [4.0.0+] and [5.0.0+].

CreateBond

Takes a total of 0x6-bytes of input and a type-0x19 input buffer, no output.

[9.0.0+] Now only takes a total of 0xC-bytes of input without a buffer, no output.

HidWakeController

Takes a total of 0x6-bytes of input, no output.

[9.0.0+] Now takes a total of 0x8-bytes of input, no output.

HidGetReportEventInfo

No input, takes a type-0xA output buffer and returns 4-bytes of output.

[7.0.0+] No longer takes a buffer or returns output, now returns an output handle.

SetLeDefaultConnectionParameter

Takes a total of 0x14-bytes of input, no output.

[9.0.0+] Now takes a total of 0xC-bytes of input, no output.

LeClientDisconnect

Takes a total of 0xC-bytes of input, no output.

[9.0.0+] Now takes a total of 0x4-bytes of input, no output.

LeServerConnect

Takes a total of 0x7-bytes of input, no output.

[9.0.0+] Now takes a total of 1-byte of input, no output.

bt

This is "nn::bluetooth::IBluetoothUser".

Cmd Name
0 LeClientReadCharacteristic
1 LeClientReadDescriptor
2 LeClientWriteCharacteristic
3 LeClientWriteDescriptor
4 LeClientRegisterNotification
5 LeClientDeregisterNotification
6 SetLeResponse
7 LeSendIndication
8 GetLeEventInfo
9 RegisterBleEvent