-
Notifications
You must be signed in to change notification settings - Fork 7.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'doc/add_timing_diagram_for_bt_l2cap_server_and_client_v…
…5.1' into 'release/v5.1' docs(examples/bluetooth): Add the sequence diagram for L2CAP connection and the discription for the diagram (backport v5.1) See merge request espressif/esp-idf!24661
- Loading branch information
Showing
5 changed files
with
50 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44 changes: 44 additions & 0 deletions
44
...les/bluetooth/bluedroid/classic_bt/bt_l2cap_client/tutorial/example_workflow.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Description of Bluetooth L2CAP Connection Example Sequence Diagram | ||
|
||
## Introduction | ||
This document describes the process of L2CAP initialization, connection, and data transfer established between Bluetooth L2CAP client and server provided in [bt_l2cap_server](../../bt_l2cap_server) example. | ||
|
||
## Initialization Process | ||
|
||
<div align="center"><img src="sequence_diagram/initialization_process.png" width = "500" align=center /> </div> | ||
|
||
The `BT_Profile_StackA` and `BT_Profile_StackB` in the above diagram represent the same Bluetooth protocol stacks (GAP, SDP, L2CAP in this example). StackA and StackB are to distinguish which device is interacting with the protocol stack. | ||
Both projects `BT_L2CAP_Server`([bt_l2cap_server](../../bt_l2cap_server)) and `BT_L2CAP_Client` have the same initialization process but are independent of each other. The entry point to the example is the `app_main()` function, and the main function starts by initializing the non-volatile storage library. Then, the L2CAP initialization both the `Server` and `Client` can be divided into the following steps: | ||
- Step1: esp_bt_controller_init() | ||
- Step2: esp_bt_controller_enable() | ||
- Step3: esp_bluedroid_init() | ||
- Step4: esp_bluedroid_enable() | ||
- Step5: esp_bt_gap_register_callback() | ||
|
||
## Connection Process | ||
|
||
<div align="center"><img src="sequence_diagram/connection_process.png" width = "800" align=center /> </div> | ||
|
||
|
||
Step `6` is the setting phase of L2CAP. There are two alternative paths: one for the server's L2CAP setup and the other for the client's L2CAP setup. | ||
- In the server path: | ||
- The L2CAP callback is registered by calling `esp_bt_l2cap_register_callback()`. | ||
- The `Server` performs the L2CAP initialization by calling the `esp_bt_l2cap_init()` function, and an asynchronous callback event `ESP_BT_L2CAP_INIT_EVT` is returned to indicate the initialization completion. | ||
- Then the `Server` proceeds to register the virtual file system using `esp_bt_l2cap_vfs_register()` and starts the server using function `esp_bt_l2cap_start_srv()`. The asynchronous callback event `ESP_BT_L2CAP_START_EVT` is also returned to indicate the server's start completion. | ||
|
||
- In the client path: | ||
- Compared with the server's path, the client path also calls functions `esp_bt_l2cap_register_callback()`, `esp_bt_l2cap_init()` and `esp_bt_l2cap_vfs_register()` to register L2CAP callback, initiate the L2CAP and register the the virtual file system. But the client does not need to start the service. | ||
|
||
Step `7` in sequence diagram is the setting of SDP and process of service discovery. Similar to the L2CAP setup, there are separate paths for `Server` and `Client`. | ||
- In the server path: | ||
- The SDP callback is registered by calling `esp_sdp_register_callback()`. | ||
- The `Server` initiates SDP by calling `esp_sdp_init()`, and the asynchronous callback event `ESP_SDP_INIT_EVT` is returned to indicate the initialization completion. | ||
- Then the `Server` creates an SDP record by calling `esp_sdp_create_record()`, and an asynchronous callback event `ESP_SDP_CREATE_RECORD_COMP_EVT` is returned to indicate the completion of the record creation. | ||
- The `Server` can also set the device name by calling `esp_bt_dev_set_device_name()` and make itself connectable and discoverable by calling `esp_bt_gap_set_scan_mode()`. | ||
- In the client path: | ||
- The `Client` also calls functions `esp_sdp_register_callback()`, `esp_sdp_init()`, `esp_sdp_create_record()`, `esp_bt_dev_set_device_name()` and `esp_bt_gap_set_scan_mode()` to register SDP callback, initiate the SDP, create sdp record, set device name and set the scan mode. | ||
- Additionally, the `Client` calls `esp_bt_gap_start_discovery()` to start `Inquiry`. When the `Inquiry` process is completed, the asynchronous callback event `ESP_BT_GAP_DISC_RES_EVT` will be returned. | ||
|
||
Once the event `ESP_BT_GAP_DISC_RES_EVT` is returned, the `Client` will try to make a L2CAP connection to the `BD Address` of `Server` by calling function `esp_bt_connect()` in step `8`. | ||
|
||
After the establishment of L2CAP connection, both the `Server` and `Client` will receive the asynchronous callback event `ESP_BT_L2CAP_OPEN_EVT`, and they can transfer data by calling the function `l2cap_wr_task_start_up()`. However, it is important to note that the data sender should call the function `l2cap_wr_task_start_up()` with handler `l2cap_write_handle`, while the data receiver should call the function with the handler `l2cap_read_handle`. Once the transmission of the data is completed, it's recommended to close the connection and deinitialize the bluetooth profile stack. |
Binary file added
BIN
+102 KB
...oid/classic_bt/bt_l2cap_client/tutorial/sequence_diagram/connection_process.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added
BIN
+19.6 KB
...classic_bt/bt_l2cap_client/tutorial/sequence_diagram/initialization_process.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters