]>
git.gir.st - tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/USB_Host_Shield_2.0/BTD.h
1 /* Copyright (C) 2012 Kristian Lauszus, TKJ Electronics. All rights reserved.
3 This software may be distributed and modified under the terms of the GNU
4 General Public License version 2 (GPL2) as published by the Free Software
5 Foundation and appearing in the file GPL2.TXT included in the packaging of
6 this file. Please note that GPL2 Section 2[b] requires that all works based
7 on this software must also be made publicly available under the terms of
13 Kristian Lauszus, TKJ Electronics
14 Web : http://www.tkjelectronics.com
15 e-mail : kristianl@tkjelectronics.com
24 //PID and VID of the Sony PS3 devices
25 #define PS3_VID 0x054C // Sony Corporation
26 #define PS3_PID 0x0268 // PS3 Controller DualShock 3
27 #define PS3NAVIGATION_PID 0x042F // Navigation controller
28 #define PS3MOVE_PID 0x03D5 // Motion controller
30 #define IOGEAR_GBU521_VID 0x0A5C // The IOGEAR GBU521 dongle does not presents itself correctly, so we have to check for it manually
31 #define IOGEAR_GBU521_PID 0x21E8
33 /* Bluetooth dongle data taken from descriptors */
34 #define BULK_MAXPKTSIZE 64 // Max size for ACL data
36 // Used in control endpoint header for HCI Commands
37 #define bmREQ_HCI_OUT USB_SETUP_HOST_TO_DEVICE|USB_SETUP_TYPE_CLASS|USB_SETUP_RECIPIENT_DEVICE
39 /* Bluetooth HCI states for hci_task() */
40 #define HCI_INIT_STATE 0
41 #define HCI_RESET_STATE 1
42 #define HCI_CLASS_STATE 2
43 #define HCI_BDADDR_STATE 3
44 #define HCI_LOCAL_VERSION_STATE 4
45 #define HCI_SET_NAME_STATE 5
46 #define HCI_CHECK_DEVICE_SERVICE 6
48 #define HCI_INQUIRY_STATE 7 // These three states are only used if it should pair and connect to a device
49 #define HCI_CONNECT_DEVICE_STATE 8
50 #define HCI_CONNECTED_DEVICE_STATE 9
52 #define HCI_SCANNING_STATE 10
53 #define HCI_CONNECT_IN_STATE 11
54 #define HCI_REMOTE_NAME_STATE 12
55 #define HCI_CONNECTED_STATE 13
56 #define HCI_DISABLE_SCAN_STATE 14
57 #define HCI_DONE_STATE 15
58 #define HCI_DISCONNECT_STATE 16
61 #define HCI_FLAG_CMD_COMPLETE (1UL << 0)
62 #define HCI_FLAG_CONNECT_COMPLETE (1UL << 1)
63 #define HCI_FLAG_DISCONNECT_COMPLETE (1UL << 2)
64 #define HCI_FLAG_REMOTE_NAME_COMPLETE (1UL << 3)
65 #define HCI_FLAG_INCOMING_REQUEST (1UL << 4)
66 #define HCI_FLAG_READ_BDADDR (1UL << 5)
67 #define HCI_FLAG_READ_VERSION (1UL << 6)
68 #define HCI_FLAG_DEVICE_FOUND (1UL << 7)
69 #define HCI_FLAG_CONNECT_EVENT (1UL << 8)
71 /* Macros for HCI event flag tests */
72 #define hci_check_flag(flag) (hci_event_flag & (flag))
73 #define hci_set_flag(flag) (hci_event_flag |= (flag))
74 #define hci_clear_flag(flag) (hci_event_flag &= ~(flag))
76 /* HCI Events managed */
77 #define EV_INQUIRY_COMPLETE 0x01
78 #define EV_INQUIRY_RESULT 0x02
79 #define EV_CONNECT_COMPLETE 0x03
80 #define EV_INCOMING_CONNECT 0x04
81 #define EV_DISCONNECT_COMPLETE 0x05
82 #define EV_AUTHENTICATION_COMPLETE 0x06
83 #define EV_REMOTE_NAME_COMPLETE 0x07
84 #define EV_ENCRYPTION_CHANGE 0x08
85 #define EV_CHANGE_CONNECTION_LINK 0x09
86 #define EV_ROLE_CHANGED 0x12
87 #define EV_NUM_COMPLETE_PKT 0x13
88 #define EV_PIN_CODE_REQUEST 0x16
89 #define EV_LINK_KEY_REQUEST 0x17
90 #define EV_LINK_KEY_NOTIFICATION 0x18
91 #define EV_DATA_BUFFER_OVERFLOW 0x1A
92 #define EV_MAX_SLOTS_CHANGE 0x1B
93 #define EV_READ_REMOTE_VERSION_INFORMATION_COMPLETE 0x0C
94 #define EV_QOS_SETUP_COMPLETE 0x0D
95 #define EV_COMMAND_COMPLETE 0x0E
96 #define EV_COMMAND_STATUS 0x0F
97 #define EV_LOOPBACK_COMMAND 0x19
98 #define EV_PAGE_SCAN_REP_MODE 0x20
100 /* Bluetooth states for the different Bluetooth drivers */
104 /* Used for HID Control channel */
105 #define L2CAP_CONTROL_CONNECT_REQUEST 2
106 #define L2CAP_CONTROL_CONFIG_REQUEST 3
107 #define L2CAP_CONTROL_SUCCESS 4
108 #define L2CAP_CONTROL_DISCONNECT 5
110 /* Used for HID Interrupt channel */
111 #define L2CAP_INTERRUPT_SETUP 6
112 #define L2CAP_INTERRUPT_CONNECT_REQUEST 7
113 #define L2CAP_INTERRUPT_CONFIG_REQUEST 8
114 #define L2CAP_INTERRUPT_DISCONNECT 9
116 /* Used for SDP channel */
117 #define L2CAP_SDP_WAIT 10
118 #define L2CAP_SDP_SUCCESS 11
120 /* Used for RFCOMM channel */
121 #define L2CAP_RFCOMM_WAIT 12
122 #define L2CAP_RFCOMM_SUCCESS 13
124 #define L2CAP_DISCONNECT_RESPONSE 14 // Used for both SDP and RFCOMM channel
126 /* Bluetooth states used by some drivers */
127 #define TURN_ON_LED 17
128 #define PS3_ENABLE_SIXAXIS 18
129 #define WII_CHECK_MOTION_PLUS_STATE 19
130 #define WII_CHECK_EXTENSION_STATE 20
131 #define WII_INIT_MOTION_PLUS_STATE 21
133 /* L2CAP event flags for HID Control channel */
134 #define L2CAP_FLAG_CONNECTION_CONTROL_REQUEST (1UL << 0)
135 #define L2CAP_FLAG_CONFIG_CONTROL_SUCCESS (1UL << 1)
136 #define L2CAP_FLAG_CONTROL_CONNECTED (1UL << 2)
137 #define L2CAP_FLAG_DISCONNECT_CONTROL_RESPONSE (1UL << 3)
139 /* L2CAP event flags for HID Interrupt channel */
140 #define L2CAP_FLAG_CONNECTION_INTERRUPT_REQUEST (1UL << 4)
141 #define L2CAP_FLAG_CONFIG_INTERRUPT_SUCCESS (1UL << 5)
142 #define L2CAP_FLAG_INTERRUPT_CONNECTED (1UL << 6)
143 #define L2CAP_FLAG_DISCONNECT_INTERRUPT_RESPONSE (1UL << 7)
145 /* L2CAP event flags for SDP channel */
146 #define L2CAP_FLAG_CONNECTION_SDP_REQUEST (1UL << 8)
147 #define L2CAP_FLAG_CONFIG_SDP_SUCCESS (1UL << 9)
148 #define L2CAP_FLAG_DISCONNECT_SDP_REQUEST (1UL << 10)
150 /* L2CAP event flags for RFCOMM channel */
151 #define L2CAP_FLAG_CONNECTION_RFCOMM_REQUEST (1UL << 11)
152 #define L2CAP_FLAG_CONFIG_RFCOMM_SUCCESS (1UL << 12)
153 #define L2CAP_FLAG_DISCONNECT_RFCOMM_REQUEST (1UL << 13)
155 #define L2CAP_FLAG_DISCONNECT_RESPONSE (1UL << 14)
157 /* Macros for L2CAP event flag tests */
158 #define l2cap_check_flag(flag) (l2cap_event_flag & (flag))
159 #define l2cap_set_flag(flag) (l2cap_event_flag |= (flag))
160 #define l2cap_clear_flag(flag) (l2cap_event_flag &= ~(flag))
162 /* L2CAP signaling commands */
163 #define L2CAP_CMD_COMMAND_REJECT 0x01
164 #define L2CAP_CMD_CONNECTION_REQUEST 0x02
165 #define L2CAP_CMD_CONNECTION_RESPONSE 0x03
166 #define L2CAP_CMD_CONFIG_REQUEST 0x04
167 #define L2CAP_CMD_CONFIG_RESPONSE 0x05
168 #define L2CAP_CMD_DISCONNECT_REQUEST 0x06
169 #define L2CAP_CMD_DISCONNECT_RESPONSE 0x07
170 #define L2CAP_CMD_INFORMATION_REQUEST 0x0A
171 #define L2CAP_CMD_INFORMATION_RESPONSE 0x0B
173 // Used For Connection Response - Remember to Include High Byte
175 #define SUCCESSFUL 0x00
177 /* Bluetooth L2CAP PSM - see http://www.bluetooth.org/Technical/AssignedNumbers/logical_link.htm */
178 #define SDP_PSM 0x01 // Service Discovery Protocol PSM Value
179 #define RFCOMM_PSM 0x03 // RFCOMM PSM Value
180 #define HID_CTRL_PSM 0x11 // HID_Control PSM Value
181 #define HID_INTR_PSM 0x13 // HID_Interrupt PSM Value
183 // Used to determine if it is a Bluetooth dongle
184 #define WI_SUBCLASS_RF 0x01 // RF Controller
185 #define WI_PROTOCOL_BT 0x01 // Bluetooth Programming Interface
187 #define BTD_MAX_ENDPOINTS 4
188 #define BTD_NUM_SERVICES 4 // Max number of Bluetooth services - if you need more than 4 simply increase this number
192 class BluetoothService
;
195 * The Bluetooth Dongle class will take care of all the USB communication
196 * and then pass the data to the BluetoothService classes.
198 class BTD
: public USBDeviceConfig
, public UsbConfigXtracter
{
201 * Constructor for the BTD class.
202 * @param p Pointer to USB class instance.
206 /** @name USBDeviceConfig implementation */
208 * Address assignment and basic initialization is done here.
209 * @param parent Hub number.
210 * @param port Port number on the hub.
211 * @param lowspeed Speed of the device.
212 * @return 0 on success.
214 uint8_t ConfigureDevice ( uint8_t parent
, uint8_t port
, bool lowspeed
);
216 * Initialize the Bluetooth dongle.
217 * @param parent Hub number.
218 * @param port Port number on the hub.
219 * @param lowspeed Speed of the device.
220 * @return 0 on success.
222 uint8_t Init ( uint8_t parent
, uint8_t port
, bool lowspeed
);
224 * Release the USB device.
225 * @return 0 on success.
229 * Poll the USB Input endpoints and run the state machines.
230 * @return 0 on success.
235 * Get the device address.
236 * @return The device address.
238 virtual uint8_t GetAddress () {
243 * Used to check if the dongle has been initialized.
244 * @return True if it's ready.
246 virtual bool isReady () {
251 * Used by the USB core to check what this driver support.
252 * @param klass The device's USB class.
253 * @return Returns true if the device's USB class matches this driver.
255 virtual bool DEVCLASSOK ( uint8_t klass
) {
256 return ( klass
== USB_CLASS_WIRELESS_CTRL
);
260 * Used by the USB core to check what this driver support.
261 * Used to set the Bluetooth address into the PS3 controllers.
262 * @param vid The device's VID.
263 * @param pid The device's PID.
264 * @return Returns true if the device's VID and PID matches this driver.
266 virtual bool VIDPIDOK ( uint16_t vid
, uint16_t pid
) {
267 if ( vid
== IOGEAR_GBU521_VID
&& pid
== IOGEAR_GBU521_PID
)
269 if ( my_bdaddr
[ 0 ] != 0x00 || my_bdaddr
[ 1 ] != 0x00 || my_bdaddr
[ 2 ] != 0x00 || my_bdaddr
[ 3 ] != 0x00 || my_bdaddr
[ 4 ] != 0x00 || my_bdaddr
[ 5 ] != 0x00 ) { // Check if Bluetooth address is set
270 if ( vid
== PS3_VID
&& ( pid
== PS3_PID
|| pid
== PS3NAVIGATION_PID
|| pid
== PS3MOVE_PID
))
277 /** @name UsbConfigXtracter implementation */
279 * UsbConfigXtracter implementation, used to extract endpoint information.
280 * @param conf Configuration value.
281 * @param iface Interface number.
282 * @param alt Alternate setting.
283 * @param proto Interface Protocol.
284 * @param ep Endpoint Descriptor.
286 void EndpointXtract ( uint8_t conf
, uint8_t iface
, uint8_t alt
, uint8_t proto
, const USB_ENDPOINT_DESCRIPTOR
* ep
);
289 /** Disconnects both the L2CAP Channel and the HCI Connection for all Bluetooth services. */
293 * Register Bluetooth dongle members/services.
294 * @param pService Pointer to BluetoothService class instance.
295 * @return The service ID on success or -1 on fail.
297 int8_t registerBluetoothService ( BluetoothService
* pService
) {
298 for ( uint8_t i
= 0 ; i
< BTD_NUM_SERVICES
; i
++) {
300 btService
[ i
] = pService
;
301 return i
; // Return ID
304 return - 1 ; // Error registering BluetoothService
307 /** @name HCI Commands */
309 * Used to send a HCI Command.
310 * @param data Data to send.
311 * @param nbytes Number of bytes to send.
313 void HCI_Command ( uint8_t * data
, uint16_t nbytes
);
314 /** Reset the Bluetooth dongle. */
316 /** Read the Bluetooth address of the dongle. */
317 void hci_read_bdaddr ();
318 /** Read the HCI Version of the Bluetooth dongle. */
319 void hci_read_local_version_information ();
321 * Set the local name of the Bluetooth dongle.
322 * @param name Desired name.
324 void hci_set_local_name ( const char * name
);
325 /** Enable visibility to other Bluetooth devices. */
326 void hci_write_scan_enable ();
327 /** Disable visibility to other Bluetooth devices. */
328 void hci_write_scan_disable ();
329 /** Read the remote devices name. */
330 void hci_remote_name ();
331 /** Accept the connection with the Bluetooth device. */
332 void hci_accept_connection ();
334 * Disconnect the HCI connection.
335 * @param handle The HCI Handle for the connection.
337 void hci_disconnect ( uint16_t handle
);
339 * Respond with the pin for the connection.
340 * The pin is automatically set for the Wii library,
341 * but can be customized for the SPP library.
343 void hci_pin_code_request_reply ();
344 /** Respons when no pin was set. */
345 void hci_pin_code_negative_request_reply ();
347 * Command is used to reply to a Link Key Request event from the BR/EDR Controller
348 * if the Host does not have a stored Link Key for the connection.
350 void hci_link_key_request_negative_reply ();
351 /** Used to try to authenticate with the remote device. */
352 void hci_authentication_request ();
353 /** Start a HCI inquiry. */
355 /** Cancel a HCI inquiry. */
356 void hci_inquiry_cancel ();
357 /** Connect to last device communicated with. */
361 * @param bdaddr Bluetooth address of the device.
363 void hci_connect ( uint8_t * bdaddr
);
364 /** Used to a set the class of the device. */
365 void hci_write_class_of_device ();
368 /** @name L2CAP Commands */
370 * Used to send L2CAP Commands.
371 * @param handle HCI Handle.
372 * @param data Data to send.
373 * @param nbytes Number of bytes to send.
374 * @param channelLow,channelHigh Low and high byte of channel to send to.
375 * If argument is omitted then the Standard L2CAP header: Channel ID (0x01) for ACL-U will be used.
377 void L2CAP_Command ( uint16_t handle
, uint8_t * data
, uint8_t nbytes
, uint8_t channelLow
= 0x01 , uint8_t channelHigh
= 0x00 );
379 * L2CAP Connection Request.
380 * @param handle HCI handle.
381 * @param rxid Identifier.
382 * @param scid Source Channel Identifier.
383 * @param psm Protocol/Service Multiplexer - see: https://www.bluetooth.org/Technical/AssignedNumbers/logical_link.htm.
385 void l2cap_connection_request ( uint16_t handle
, uint8_t rxid
, uint8_t * scid
, uint16_t psm
);
387 * L2CAP Connection Response.
388 * @param handle HCI handle.
389 * @param rxid Identifier.
390 * @param dcid Destination Channel Identifier.
391 * @param scid Source Channel Identifier.
392 * @param result Result - First send ::PENDING and then ::SUCCESSFUL.
394 void l2cap_connection_response ( uint16_t handle
, uint8_t rxid
, uint8_t * dcid
, uint8_t * scid
, uint8_t result
);
396 * L2CAP Config Request.
397 * @param handle HCI Handle.
398 * @param rxid Identifier.
399 * @param dcid Destination Channel Identifier.
401 void l2cap_config_request ( uint16_t handle
, uint8_t rxid
, uint8_t * dcid
);
403 * L2CAP Config Response.
404 * @param handle HCI Handle.
405 * @param rxid Identifier.
406 * @param scid Source Channel Identifier.
408 void l2cap_config_response ( uint16_t handle
, uint8_t rxid
, uint8_t * scid
);
410 * L2CAP Disconnection Request.
411 * @param handle HCI Handle.
412 * @param rxid Identifier.
413 * @param dcid Device Channel Identifier.
414 * @param scid Source Channel Identifier.
416 void l2cap_disconnection_request ( uint16_t handle
, uint8_t rxid
, uint8_t * dcid
, uint8_t * scid
);
418 * L2CAP Disconnection Response.
419 * @param handle HCI Handle.
420 * @param rxid Identifier.
421 * @param dcid Device Channel Identifier.
422 * @param scid Source Channel Identifier.
424 void l2cap_disconnection_response ( uint16_t handle
, uint8_t rxid
, uint8_t * dcid
, uint8_t * scid
);
426 * L2CAP Information Response.
427 * @param handle HCI Handle.
428 * @param rxid Identifier.
429 * @param infoTypeLow,infoTypeHigh Infotype.
431 void l2cap_information_response ( uint16_t handle
, uint8_t rxid
, uint8_t infoTypeLow
, uint8_t infoTypeHigh
);
434 /** Use this to see if it is waiting for a incoming connection. */
435 bool watingForConnection
;
436 /** This is used by the service to know when to store the device information. */
437 bool l2capConnectionClaimed
;
438 /** This is used by the SPP library to claim the current SDP incoming request. */
439 bool sdpConnectionClaimed
;
440 /** This is used by the SPP library to claim the current RFCOMM incoming request. */
441 bool rfcommConnectionClaimed
;
443 /** The name you wish to make the dongle show up as. It is set automatically by the SPP library. */
445 /** The pin you wish to make the dongle use for authentication. It is set automatically by the SPP and BTHID library. */
448 /** The bluetooth dongles Bluetooth address. */
449 uint8_t my_bdaddr
[ 6 ];
450 /** HCI handle for the last connection. */
452 /** Last incoming devices Bluetooth address. */
453 uint8_t disc_bdaddr
[ 6 ];
454 /** First 30 chars of last remote name. */
455 char remote_name
[ 30 ];
457 * The supported HCI Version read from the Bluetooth dongle.
458 * Used by the PS3BT library to check the HCI Version of the Bluetooth dongle,
459 * it should be at least 3 to work properly with the library.
463 /** Call this function to pair with a Wiimote */
464 void pairWithWiimote () {
466 hci_state
= HCI_CHECK_DEVICE_SERVICE
;
468 /** Used to only send the ACL data to the Wiimote. */
470 /** True if a Wiimote is connecting. */
472 /** True when it should pair with a Wiimote. */
474 /** True if it's the new Wiimote with the Motion Plus Inside or a Wii U Pro Controller. */
475 bool motionPlusInside
;
476 /** True if it's a Wii U Pro Controller. */
477 bool wiiUProController
;
479 /** Call this function to pair with a Wiimote */
481 pairWithHIDDevice
= true ;
482 hci_state
= HCI_CHECK_DEVICE_SERVICE
;
484 /** Used to only send the ACL data to the Wiimote. */
485 bool connectToHIDDevice
;
486 /** True if a Wiimote is connecting. */
487 bool incomingHIDDevice
;
488 /** True when it should pair with a device like a mouse or keyboard. */
489 bool pairWithHIDDevice
;
492 * Read the poll interval taken from the endpoint descriptors.
493 * @return The poll interval in ms.
495 uint8_t readPollInterval () {
500 /** Pointer to USB class instance. */
502 /** Device address. */
504 /** Endpoint info structure. */
505 EpInfo epInfo
[ BTD_MAX_ENDPOINTS
];
507 /** Configuration number. */
509 /** Total number of endpoints in the configuration. */
511 /** Next poll time based on poll interval taken from the USB descriptor. */
512 uint32_t qNextPollTime
;
514 /** Bluetooth dongle control endpoint. */
515 static const uint8_t BTD_CONTROL_PIPE
;
516 /** HCI event endpoint index. */
517 static const uint8_t BTD_EVENT_PIPE
;
518 /** ACL In endpoint index. */
519 static const uint8_t BTD_DATAIN_PIPE
;
520 /** ACL Out endpoint index. */
521 static const uint8_t BTD_DATAOUT_PIPE
;
524 * Used to print the USB Endpoint Descriptor.
525 * @param ep_ptr Pointer to USB Endpoint Descriptor.
527 void PrintEndpointDescriptor ( const USB_ENDPOINT_DESCRIPTOR
* ep_ptr
);
530 void Initialize (); // Set all variables, endpoint structs etc. to default values
531 BluetoothService
* btService
[ BTD_NUM_SERVICES
];
533 uint16_t PID
, VID
; // PID and VID of device connected
535 uint8_t pollInterval
;
538 bool pairWiiUsingSync
; // True if paring was done using the Wii SYNC button.
539 bool checkRemoteName
; // Used to check remote device's name before connecting.
540 bool incomingPS4
; // True if a PS4 controller is connecting
541 uint8_t classOfDevice
[ 3 ]; // Class of device of last device
543 /* Variables used by high level HCI task */
544 uint8_t hci_state
; // Current state of Bluetooth HCI connection
545 uint16_t hci_counter
; // Counter used for Bluetooth HCI reset loops
546 uint16_t hci_num_reset_loops
; // This value indicate how many times it should read before trying to reset
547 uint16_t hci_event_flag
; // HCI flags of received Bluetooth events
548 uint8_t inquiry_counter
;
550 uint8_t hcibuf
[ BULK_MAXPKTSIZE
]; // General purpose buffer for HCI data
551 uint8_t l2capinbuf
[ BULK_MAXPKTSIZE
]; // General purpose buffer for L2CAP in data
552 uint8_t l2capoutbuf
[ 14 ]; // General purpose buffer for L2CAP out data
555 void HCI_event_task (); // Poll the HCI event pipe
556 void HCI_task (); // HCI state machine
557 void ACL_event_task (); // ACL input pipe
559 /* Used to set the Bluetooth Address internally to the PS3 Controllers */
560 void setBdaddr ( uint8_t * BDADDR
);
561 void setMoveBdaddr ( uint8_t * BDADDR
);
564 /** All Bluetooth services should inherit this class. */
565 class BluetoothService
{
567 BluetoothService ( BTD
* p
) : pBtd ( p
) {
569 pBtd
-> registerBluetoothService ( this ); // Register it as a Bluetooth service
572 * Used to pass acldata to the Bluetooth service.
573 * @param ACLData Pointer to the incoming acldata.
575 virtual void ACLData ( uint8_t * ACLData
) = 0 ;
576 /** Used to run the different state machines in the Bluetooth service. */
577 virtual void Run () = 0 ;
578 /** Used to reset the Bluetooth service. */
579 virtual void Reset () = 0 ;
580 /** Used to disconnect both the L2CAP Channel and the HCI Connection for the Bluetooth service. */
581 virtual void disconnect () = 0 ;
584 * Used to call your own function when the device is successfully initialized.
585 * @param funcOnInit Function to call.
587 void attachOnInit ( void (* funcOnInit
)( void )) {
588 pFuncOnInit
= funcOnInit
; // TODO: This really belong in a class of it's own as it is repeated several times
593 * Called when a device is successfully initialized.
594 * Use attachOnInit(void (*funcOnInit)(void)) to call your own function.
595 * This is useful for instance if you want to set the LEDs in a specific way.
597 virtual void onInit () = 0 ;
599 /** Used to check if the incoming L2CAP data matches the HCI Handle */
600 bool checkHciHandle ( uint8_t * buf
, uint16_t handle
) {
601 return ( buf
[ 0 ] == ( handle
& 0xFF )) && ( buf
[ 1 ] == (( handle
>> 8 ) | 0x20 ));
604 /** Pointer to function called in onInit(). */
605 void (* pFuncOnInit
)( void );
607 /** Pointer to BTD instance. */
610 /** The HCI Handle for the connection. */
613 /** L2CAP flags of received Bluetooth events. */
614 uint32_t l2cap_event_flag
;
616 /** Identifier for L2CAP commands. */