| ************* |
| Bluetooth HCI |
| ************* |
| |
| Role: device only. This driver transports Bluetooth HCI commands, events, and |
| ACL data over USB. It does not implement a Bluetooth controller, Link Manager, |
| or host stack; the application must provide that functionality. |
| |
| Configuration and descriptors |
| ============================= |
| |
| Enable ``CFG_TUD_BTH`` and use ``TUD_BTH_DESCRIPTOR`` in the configuration |
| descriptor. |
| |
| .. list-table:: |
| :header-rows: 1 |
| :widths: 38 17 45 |
| |
| * - Option |
| - Default |
| - What it controls |
| * - ``CFG_TUD_BTH_ISO_ALT_COUNT`` |
| - Required |
| - Number of isochronous voice alternate settings. Pass one paired |
| IN/OUT packet size per setting to ``TUD_BTH_DESCRIPTOR``. |
| * - ``CFG_TUD_BTH_EVENT_EPSIZE`` |
| - ``16`` bytes |
| - Maximum HCI event interrupt-IN packet. |
| * - ``CFG_TUD_BTH_DATA_EPSIZE`` |
| - ``64`` bytes |
| - ACL bulk endpoint packet size. Keep it consistent with the descriptor |
| and active bus speed. |
| * - ``CFG_TUD_BTH_HISTORICAL_COMPATIBLE`` |
| - ``0`` |
| - Uses the legacy HCI command request value required by some historical |
| controller implementations. |
| |
| Set ``CFG_TUD_BTH_HISTORICAL_COMPATIBLE`` only for a controller that requires |
| the legacy ``bRequest = 0xe0`` behavior described by the Bluetooth Core |
| specification. It is not a general compatibility switch. |
| |
| Data path |
| ========= |
| |
| .. list-table:: |
| :header-rows: 1 |
| :widths: 38 62 |
| |
| * - API or callback |
| - What it does |
| * - ``tud_bt_hci_cmd_cb()`` |
| - Delivers one host HCI command to the controller implementation. |
| * - ``tud_bt_acl_data_received_cb()`` |
| - Delivers received host-to-controller ACL bytes. |
| * - ``tud_bt_event_send()`` |
| - Queues a controller-to-host HCI event; ``false`` means it was not |
| accepted. |
| * - ``tud_bt_acl_data_send()`` |
| - Queues controller-to-host ACL data; ``false`` means it was not accepted. |
| * - ``tud_bt_event_sent_cb()`` / |
| ``tud_bt_acl_data_sent_cb()`` |
| - Reports completion and releases the corresponding application-owned |
| send buffer. |
| |
| The host delivers HCI commands through ``tud_bt_hci_cmd_cb()`` and ACL data |
| through ``tud_bt_acl_data_received_cb()``. The controller sends HCI events with |
| ``tud_bt_event_send()`` and ACL data with ``tud_bt_acl_data_send()``. |
| |
| The send APIs do not copy the whole packet. Keep each buffer valid and |
| unchanged until ``tud_bt_event_sent_cb()`` or ``tud_bt_acl_data_sent_cb()``. |
| Check the boolean return value before considering a packet queued. |
| |
| There is currently no dedicated Bluetooth device example. Use the public API |
| in ``src/class/bth/bth_device.h`` together with the Bluetooth Core USB |
| Transport and HCI packet formats. |