From eafbd37e8fd4010c24a834899668cc576dcaba4b Mon Sep 17 00:00:00 2001 From: Yi Ying Date: Thu, 27 Jul 2023 19:57:31 +0800 Subject: [PATCH] docs (Bluetooth): add bluetooth overview document --- .../bluetooth-architecture-no-ble-mesh.png | Bin 0 -> 31268 bytes .../bluetooth-architecture-no-blufi.png | Bin 0 -> 31461 bytes docs/_static/bluetooth-architecture.png | Bin 0 -> 31905 bytes docs/conf_common.py | 3 +- docs/en/api-guides/bluetooth.rst | 193 ++++++++++++++++++ docs/en/api-guides/index.rst | 1 + docs/zh_CN/api-guides/bluetooth.rst | 1 + docs/zh_CN/api-guides/index.rst | 1 + 8 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 docs/_static/bluetooth-architecture-no-ble-mesh.png create mode 100644 docs/_static/bluetooth-architecture-no-blufi.png create mode 100644 docs/_static/bluetooth-architecture.png create mode 100644 docs/en/api-guides/bluetooth.rst create mode 100644 docs/zh_CN/api-guides/bluetooth.rst diff --git a/docs/_static/bluetooth-architecture-no-ble-mesh.png b/docs/_static/bluetooth-architecture-no-ble-mesh.png new file mode 100644 index 0000000000000000000000000000000000000000..1924684fd6744e3318f463b04eeaca8fdf3cd122 GIT binary patch literal 31268 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 L&GkxjobLS}YXH|% literal 0 HcmV?d00001 diff --git a/docs/conf_common.py b/docs/conf_common.py index 9045718684..ce8c97ff43 100644 --- a/docs/conf_common.py +++ b/docs/conf_common.py @@ -19,7 +19,8 @@ from esp_docs.conf_docs import * # noqa: F403,F401 if os.environ.get('IDF_PATH') is None: raise RuntimeError('IDF_PATH should be set, run export.sh before building docs') -BT_DOCS = ['api-reference/bluetooth/bt_le.rst', +BT_DOCS = ['api-guides/bluetooth.rst', + 'api-reference/bluetooth/bt_le.rst', 'api-reference/bluetooth/esp_bt_defs.rst', 'api-reference/bluetooth/esp_bt_device.rst', 'api-reference/bluetooth/esp_bt_main.rst', diff --git a/docs/en/api-guides/bluetooth.rst b/docs/en/api-guides/bluetooth.rst new file mode 100644 index 0000000000..ac17c40b2c --- /dev/null +++ b/docs/en/api-guides/bluetooth.rst @@ -0,0 +1,193 @@ +Bluetooth® Overview +=================== + +:link_to_translation:`zh_CN:[中文]` + +This document provides an architecture overview of the Bluetooth stack in ESP-IDF and some quick links to related documents and application examples. + +.. only:: esp32 + + {IDF_TARGET_NAME} supports Dual-Mode Bluetooth 4.2 and is certified for Bluetooth 4.2. + +.. only:: esp32c3 or esp32s3 + + {IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.0. + +.. only:: esp32c2 or esp32c6 or esp32h2 + + {IDF_TARGET_NAME} supports Bluetooth 5.0 (LE) and is certified for Bluetooth LE 5.3. + +The Bluetooth stack in ESP-IDF is a layered architecture that enables Bluetooth functionality on {IDF_TARGET_NAME} chip series. The table below shows its architecture. + +.. only:: esp32 or esp32s3 or esp32c3 or esp32c6 + + .. figure:: ../../_static/bluetooth-architecture.png + :align: center + :scale: 90% + :alt: {IDF_TARGET_NAME} Bluetooth Stack Architecture + + {IDF_TARGET_NAME} Bluetooth Stack Architecture + +.. only:: esp32c2 + + .. figure:: ../../_static/bluetooth-architecture-no-ble-mesh.png + :align: center + :scale: 90% + :alt: {IDF_TARGET_NAME} Bluetooth Stack Architecture + + {IDF_TARGET_NAME} Bluetooth Stack Architecture + +.. only:: esp32h2 + + .. figure:: ../../_static/bluetooth-architecture-no-blufi.png + :align: center + :scale: 90% + :alt: {IDF_TARGET_NAME} Bluetooth Stack Architecture + + {IDF_TARGET_NAME} Bluetooth Stack Architecture + +The table below shows whether the Bluetooth modules are supported in a specific chip series. + +.. list-table:: + :width: 100% + :widths: auto + :header-rows: 1 + + * - Chip Series + - Controller + - ESP-Bluedroid + - ESP-NimBLE + - ESP-BLE-MESH + - BluFi + * - ESP32 + - Y + - Y + - Y + - Y + - Y + * - ESP32-S2 + - \– + - \– + - \– + - \– + - \– + * - ESP32-S3 + - Y + - Y + - Y + - Y + - Y + * - ESP32-C2 + - Y + - Y + - Y + - \– + - Y + * - ESP32-C3 + - Y + - Y + - Y + - Y + - Y + * - ESP32-C6 + - Y + - Y + - Y + - Y + - Y + * - ESP32-H2 + - Y + - Y + - Y + - Y + - \– + +The following sections briefly describe each layer and provide quick links to the related documents and application examples. + +ESP Bluetooth Controller +------------------------ + +At the bottom layer is ESP Bluetooth Controller, which encompasses various modules such as PHY, Baseband, Link Controller, Link Manager, Device Manager, and HCI. It handles hardware interface management and link management. It provides functions in the form of libraries and is accessible through APIs. This layer directly interacts with the hardware and low-level Bluetooth protocols. + +- :doc:`API reference <../api-reference/bluetooth/controller_vhci>` +- :example:`Application examples ` + +Hosts +----- + +There are two hosts, ESP-Bluedroid and ESP-NimBLE. The major difference between them is as follows: + +- Although both support Bluetooth LE, ESP-NimBLE requires less heap and flash size. + +.. only:: esp32 + + - ESP-Bluedroid supports both Classic Bluetooth and Bluetooth LE, while ESP-NimBLE only supports Bluetooth LE. + +ESP-Bluedroid +^^^^^^^^^^^^^ + +ESP-Bluedroid is a modified version of the native Android Bluetooth stack, Bluedroid. It consists of two layers: the Bluetooth Upper Layer (BTU) and the Bluetooth Transport Controller layer (BTC). The BTU layer is responsible for processing bottom layer Bluetooth protocols such as L2CAP, GATT/ATT, SMP, GAP, and other profiles. The BTU layer provides an interface prefixed with "bta". The BTC layer is mainly responsible for providing a supported interface, prefixed with “esp”, to the application layer, processing GATT-based profiles and handling miscellaneous tasks. All the APIs are located in the ESP_API layer. Developers should use the Bluetooth APIs prefixed with “esp". + +.. only:: esp32 + + ESP-Bluedroid for {IDF_TARGET_NAME} supports Classic Bluetooth and Bluetooth LE. + +.. only:: not esp32 + + ESP-Bluedroid for {IDF_TARGET_NAME} supports Bluetooth LE only. Classic Bluetooth is not supported. + +- API references + + - :doc:`../api-reference/bluetooth/bt_common` + - :doc:`Bluetooth LE <../api-reference/bluetooth/bt_le>` + + .. only:: esp32 + + - :doc:`../api-reference/bluetooth/classic_bt` + +- :example:`Application examples ` + +ESP-NimBLE +^^^^^^^^^^ + +ESP-NimBLE is a host stack built on top of the NimBLE host stack developed by Apache Mynewt. The NimBLE host stack is ported for {IDF_TARGET_NAME} chip series and FreeRTOS. The porting layer is kept clean by maintaining all the existing APIs of NimBLE along with a single ESP-NimBLE API for initialization, making it simpler for the application developers. + +ESP-NimBLE supports Bluetooth LE only. Classic Bluetooth is not supported. + +- `Apache Mynewt NimBLE User Guide `__ +- API references + + - `NimBLE API references `__ + - :doc:`ESP-NimBLE API references for initialization <../api-reference/bluetooth/nimble/index>` + +- :example:`Application examples ` + +Profiles +-------- + +Above the host stacks are the profile implementations by Espressif and some common profiles. Depending on your configuration, these profiles can run on ESP-Bluedroid or ESP-NimBLE. + +.. only:: SOC_BLE_MESH_SUPPORTED + + ESP-BLE-MESH + ^^^^^^^^^^^^ + + Built on top of Zephyr Bluetooth Mesh stack, the ESP-BLE-MESH implementation supports device provisioning and node control. It also supports such node features as Proxy, Relay, Low power and Friend. + + - :doc:`ESP-BLE-MESH documentation `: feature list, get started, architecture, description of application examples, frequently asked questions, etc. + - :example:`Application examples ` + +.. only:: SOC_BLUFI_SUPPORTED + + BluFi + ^^^^^ + + The BluFi for {IDF_TARGET_NAME} is a Wi-Fi network configuration function via Bluetooth channel. It provides a secure protocol to pass Wi-Fi configuration and credentials to {IDF_TARGET_NAME}. Using this information, {IDF_TARGET_NAME} can then connect to an AP or establish a softAP. + + - :doc:`BluFi documentation ` + - :example:`Application examples ` + +Applications +------------ + +At the uppermost layer are applications. You can build your own applications on top of the ESP-Bluedroid and ESP-NimBLE stacks, leveraging the provided APIs and profiles to create Bluetooth-enabled applications tailored to specific use cases. \ No newline at end of file diff --git a/docs/en/api-guides/index.rst b/docs/en/api-guides/index.rst index e716ec91a1..4ebda350c0 100644 --- a/docs/en/api-guides/index.rst +++ b/docs/en/api-guides/index.rst @@ -8,6 +8,7 @@ API Guides app_trace startup :SOC_BLUFI_SUPPORTED: blufi + :SOC_BT_SUPPORTED: bluetooth bootloader build-system :SOC_SUPPORT_COEXISTENCE: coexist diff --git a/docs/zh_CN/api-guides/bluetooth.rst b/docs/zh_CN/api-guides/bluetooth.rst new file mode 100644 index 0000000000..36795781ea --- /dev/null +++ b/docs/zh_CN/api-guides/bluetooth.rst @@ -0,0 +1 @@ +.. include:: ../../en/api-guides/bluetooth.rst \ No newline at end of file diff --git a/docs/zh_CN/api-guides/index.rst b/docs/zh_CN/api-guides/index.rst index d963866b71..60f1095c40 100644 --- a/docs/zh_CN/api-guides/index.rst +++ b/docs/zh_CN/api-guides/index.rst @@ -8,6 +8,7 @@ API 指南 app_trace startup :SOC_BLUFI_SUPPORTED: blufi + :SOC_BT_SUPPORTED: bluetooth bootloader build-system :SOC_SUPPORT_COEXISTENCE: coexist