]> granicus.if.org Git - esp-idf/commitdiff
Update blufi.rst
authorJin Fang Cheng Cheng <jinfangchengcheng@espressif.com>
Mon, 4 Jun 2018 06:22:04 +0000 (14:22 +0800)
committerJin Fang Cheng Cheng <jinfangchengcheng@espressif.com>
Mon, 4 Jun 2018 06:22:04 +0000 (14:22 +0800)
docs/zh_CN/api-guides/blufi.rst

index 50b8d41f3100ae5b04122c046150977460bd208b..74f0689617cbff97ab829cf0b7c6a8e671cf2538 100644 (file)
@@ -83,7 +83,7 @@ BluFi 传输格式
 
 +------------+---------------+-----------------+-------------+----------------+----------------+
 | LSB - Type | Frame Control | Sequence Number | Data Length | Data           | MSB - CheckSum |
-+------------+---------------+-----------------+-------------+----------------+----------------+
++============+===============+=================+=============+================+================+
 | 1          | 1             | 1               | 1           | ${Data Length} | 2              |
 +------------+---------------+-----------------+-------------+----------------+----------------+
 
@@ -95,7 +95,7 @@ BluFi 传输格式
 | LSB - Type | FrameControl(Frag) | SequenceNumber | DataLength | Data                                      | MSB - CheckSum |
 +            +                    +                +            +----------------------+--------------------+                +
 |            |                    |                |            | Total Content Length | Content            |                |
-+------------+--------------------+----------------+------------+----------------------+--------------------+----------------+
++============+====================+================+============+======================+====================+================+
 | 1          | 1                  | 1              | 1          | 2                    | ${Data Length} - 2 | 2              |
 +------------+--------------------+----------------+------------+----------------------+--------------------+----------------+
 
@@ -107,13 +107,13 @@ Ack 帧格式(8 bit):
 | LSB - Type (Ack) | Frame Control | SequenceNumber  | Data Length | Data                  | MSB - CheckSum |
 +                  +               +                 +             +-----------------------+                +
 |                  |               |                 |             | Acked Sequence Number |                |
-+------------------+---------------+-----------------+-------------+-----------------------+----------------+
++==================+===============+=================+=============+=======================+================+
 | 1                | 1             | 1               | 1           | 1                     | 2              |
 +------------------+---------------+-----------------+-------------+-----------------------+----------------+
 
 1. Type
 
-   类型域,占 1 Byte。分为 Type 和 Subtype(子类型域)两部分, Type 占低 2 bit,Subtype 占高 6 bit。
+   类型域,占 1 byte。分为 Type 和 Subtype(子类型域)两部分, Type 占低 2 bit,Subtype 占高 6 bit。
    
    * 控制帧,暂不进行加密,可校验;
    
@@ -121,95 +121,228 @@ Ack 帧格式(8 bit):
 
  **1.1 控制帧 (0x0b’00)** 
 
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 控制帧      | 含义                                                      | 解释                                                                                                                                                                                        | 备注                                                                                                                                                                                           |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x0b’000000 | Ack                                                       | 用来回复对方发的帧,Ack 帧的 Data 域使用回复对象帧的 Sequence 值。                                                                                                                          | Data 域使用1 Byte Sequence 值,与恢复对象帧的Sequence 值相同。                                                                                                                                 |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x1b’000001 | Set ESP32 to the security mode.                           | 通知 ESP32 发送数据时使用的安全模式,在该过程中可设置多次,每次设置后影响后续安全模式。在不设置的情况下,ESP32 默认控制帧和数据帧均为无校验、无加密。手机到 ESP32 方向依赖于帧 Control 域。 | Data 域占用 1 Byte。高 4 bit 为控制帧的安全模式,低 4bit 为数据帧的安全模式。b’0000:无校验、无加密;b’0001:有校验、无加密;b’0010:无校验、有加密;b’0011:有校验、有加密。                  |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x2b’000010 | Set the Wi-Fi opmode of ESP32.                            | 设置 ESP32 的 Wi-Fi 模式,帧包含 opmode 信息。                                                                                                                                              | data[0] 用于表示 opmode 类型,包括:0x00: NULL;0x01: STA;0x02: SoftAP;0x03: SoftAP&STA.如果设置有包含 AP,请尽量优先设置 AP 模式的SSID/Password/Max Conn Number 等。                           |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x3b’000011 | Connect ESP32 to the AP.                                  | 通知 ESP32,必要的信息已经发送完毕,可以连接 AP。                                                                                                                                           | 不包含 Data 域。                                                                                                                                                                               |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x4b’000100 | Disconnect ESP32 from  the AP.                            | 通知 ESP32 断开与 AP 的连接                                                                                                                                                                 | 不包含 Data 域。                                                                                                                                                                               |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x5b’000101 | Get the status of Wi-Fi.                                  | 获取 ESP32 的 Wi-Fi 模式和状态等信息。                                                                                                                                                      | 不包含 Data 域。ESP32 收到此控制帧后,后续会通过 Wi-Fi 连接状态报告 (Wi-Fi Connection State Report) 数据帧来回复手机端当前所处的 opmode、连接状态、SSID 等信息。提供给手机端的信息由应用决定。 |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x6b’000110 | Disconnect the STA device from the SoftAP in SoftAP mode. | 处于 SoftAP 模式时,踢掉某个 STA 设备。                                                                                                                                                     | data[0~5] 为 STA 设备的 MAC 地址,如有多个 STA,则 [6-11] 为第二个,依次类推。                                                                                                                 |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x7b'000111 | Get the version.                                          |                                                                                                                                                                                             |                                                                                                                                                                                                |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x8b’001000 | Tell ESP32 to disconnect the BLE GATT link.               | 通知 ESP32 断开蓝牙连接。                                                                                                                                                                   | ESP32 收到该指令后主动断开蓝牙连接。                                                                                                                                                           |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x9b’001001 | Tell ESP32 to get the Wi-Fi list.                         | 通知 ESP32 扫描周围的 Wi-Fi 热点                                                                                                                                                            | 不包含 Data 域。ESP32 收到此控制帧后,会发送包含 Wi-Fi 热点报告 (Wi-Fi List Report) 的数据帧回复手机端 ESP32 周围的 Wi-Fi 热点。                                                               |
-+-------------+-----------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 控制帧 / 0x0b’00 | 含义                              | 解释                                                           | 备注                                                                 |
++==================+===================================+================================================================+======================================================================+
+| 0x0b’000000      | Ack                               | 用来回复对方发的帧,                                           | Data 域使用1 byte Sequence 值,                                      |
+|                  |                                   | Ack 帧的 Data 域使用回复对象帧的 Sequence 值。                 | 与恢复对象帧的Sequence 值相同。                                      |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x1b’000001      | Set ESP32 to the security mode.   | 通知 ESP32 发送数据时使用的安全模式,                          | Data 域占用 1 byte。                                                 |
+|                  |                                   | 在该过程中可设置多次,每次设置后影响后续安全模式。             | 高 4 bit 为控制帧的安全模式,低 4bit 为数据帧的安全模式。            |
++                  +                                   + 在不设置的情况下,ESP32 默认控制帧和数据帧均为无校验、无加密。 +----------------------------------------------------------------------+
+|                  |                                   | 手机到 ESP32 方向依赖于帧 Control 域。                         | b’0000:无校验、无加密;                                             |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | b’0001:有校验、无加密;                                             |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | b’0010:无校验、有加密;                                             |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | b’0011:有校验、有加密。                                             |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x2b’000010      | Set the Wi-Fi opmode of ESP32.    | 设置 ESP32 的 Wi-Fi 模式,帧包含 opmode 信息。                 | data[0] 用于表示 opmode 类型,包括:                                 |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | 0x00: NULL;                                                          |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | 0x01: STA;                                                           |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | 0x02: SoftAP;                                                        |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | 0x03: SoftAP&STA.                                                    |
++                  +                                   +                                                                +----------------------------------------------------------------------+
+|                  |                                   |                                                                | 如果设置有包含 AP,请尽量优先                                        |
+|                  |                                   |                                                                | 设置 AP 模式的SSID/Password/Max Conn Number 等。                     |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x3b’000011      | Connect ESP32 to the AP.          | 通知 ESP32,必要的信息已经发送完毕,可以连接 AP。              | 不包含 Data 域。                                                     |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x4b’000100      | Disconnect ESP32 from  the AP.    | 通知 ESP32 断开与 AP 的连接                                    | 不包含 Data 域。                                                     |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x5b’000101      | Get the status of Wi-Fi.          | 获取 ESP32 的 Wi-Fi 模式和状态等信息。                         | 不包含 Data 域。                                                     |
+|                  |                                   |                                                                | ESP32 收到此控制帧后,后续会通过 Wi-Fi 连接状态                      |
+|                  |                                   |                                                                | 报告 (Wi-Fi Connection State Report) 数据帧来回复手机端当前          |
+|                  |                                   |                                                                | 所处的 opmode、连接状态、SSID 等信息。提供给手机端的信息由应用决定。 |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x6b’000110      | Disconnect the STA device         | 处于 SoftAP 模式时,踢掉某个 STA 设备。                        | data[0~5] 为 STA 设备的 MAC 地址,                                   |
+|                  | from the SoftAP in SoftAP mode.   |                                                                | 如有多个 STA,则 [6-11] 为第二个,依次类推。                         |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x7b'000111      | Get the version.                  |                                                                |                                                                      |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x8b’001000      | Tell ESP32 to disconnect          | 通知 ESP32 断开蓝牙连接。                                      | ESP32 收到该指令后主动断开蓝牙连接。                                 |
+|                  | the BLE GATT link.                |                                                                |                                                                      |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
+| 0x9b’001001      | Tell ESP32 to get the Wi-Fi list. | 通知 ESP32 扫描周围的 Wi-Fi 热点                               | 不包含 Data 域。                                                     |
+|                  |                                   |                                                                | ESP32 收到此控制帧后,会发送包含 Wi-Fi 热点                          |
+|                  |                                   |                                                                | 报告 (Wi-Fi List Report) 的数据帧回复                                |
+|                  |                                   |                                                                | 手机端 ESP32 周围的 Wi-Fi 热点。                                     |
++------------------+-----------------------------------+----------------------------------------------------------------+----------------------------------------------------------------------+
 
  **1.2 数据帧 (0x1b’01)**
 
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 数据帧       | 含义                                   | 解释                                                                                                                                                                                        | 备注                                                                                                                                                                                                                                                              |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x0b’000000  | Negotiation data.                      | 用来发送协商数据,传输到应用层注册的回调函数。                                                                                                                                              | 数据长度与 Length 域有关。                                                                                                                                                                                                                                        |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x1b’000001  | BSSID for STA mode.                    | STA 将要连接的 AP 的 BSSID(用于隐藏SSID)。                                                                                                                                                | 数据长度与 Length 域有关。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                                     |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x2b’000010  | SSID for STA mode.                     | STA 将要连接的 AP 的 SSID。                                                                                                                                                                 | 数据长度与 Length 域有关。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                                     |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x3b’000011  | Password for STA mode.                 | STA 将要连接的 AP 的密码。                                                                                                                                                                  | 数据长度与 Length 域有关。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                                     |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x4b’000100  | SSID for SoftAP mode.                  | SoftAP 模式使用的 SSID。                                                                                                                                                                    | 数据长度与 Length 域有关。当传输方向为ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                                      |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x5b’000101  | Password for SoftAPmode.               | SoftAP 模式使用的密码。                                                                                                                                                                     | 数据长度与 Length 域有关。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                                     |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x6b’000110  | Max connection number for SoftAP mode. | AP 模式的最大连接数。                                                                                                                                                                       | data[0] 表示连接数的值,范围 1~4。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                             |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x7b’000111  | Authentication mode for SoftAP mode.   | AP 模式的认证模式。                                                                                                                                                                         | data[0]:0x00: OPEN;0x01: WEP;0x02: WPA_PSK;0x03: WPA2_PSK;0x04: WPA_WPA2_PSK.当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                 |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x8b’001000  | Channel for SoftAP mode.               | SoftAP 模式的通道数量。                                                                                                                                                                     | data[0] 表示通道的数量,范围 1~14。当传输方向为 ESP32 到手机时,表示向手机端提供信息。                                                                                                                                                                            |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x9b’001001  | Username.                              | 使用企业级加密时,Client 端的用户名。                                                                                                                                                       | 数据长度与 Length 域有关。                                                                                                                                                                                                                                        |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xab’001010  | CA certification.                      | 进行企业级加密时使用的 CA 证书。                                                                                                                                                            | 数据长度与 Length 域有关,长度不够,可用分片。                                                                                                                                                                                                                    |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xbb’001011  | Client certification.                  | 进行企业级加密时,Client 端的证书。可包含或不包含私钥,由证书内容决定。                                                                                                                     | 数据长度与 Length 域有关,长度不够,可用分片。                                                                                                                                                                                                                    |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xcb’001100  | Server certification.                  | 进行企业级加密时,Server 端的证书。可包含或不包含私钥,由证书内容决定。                                                                                                                     | 数据长度与 Length 域有关,长度不够,可用分片。                                                                                                                                                                                                                    |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xdb’001101  | Client private key.                    | 进行企业级加密时,Client 端的私钥。                                                                                                                                                         | 数据长度与 Length 域有关,长度不够,可用分片。                                                                                                                                                                                                                    |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xeb’001110  | Server private key.                    | 进行企业级加密时,Server 端的私钥。                                                                                                                                                         | 数据长度与 Length 域有关,长度不够,可用分片。                                                                                                                                                                                                                    |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0xfb’001111  | Wi-Fi connection state report.         | 通知手机 ESP32 的 Wi-Fi 状态,包括 STA状态和 SoftAP 状态,用于手机配置 STA 连接时的通知,或有 STA 连接上 SoftAP 时的通知。但收到手机询问 Wi-Fi 状态时,除了回复此帧外,还可回复其他数据帧。 | data[0] 表示 opmode,包括:0x00: NULL;0x01: STA;0x02: SoftAP;0x03: SoftAP&STAdata[1]:STA 的连接状态,0x0 表示处于连接状态, 其他表示处于非连接状态;data[2]:SoftAP 的连接状态,即表示有多少 STA 已经连接。data[3] 及以后:为按照本协议格式 SSID\BSSID 等信息。 |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x10b’010000 | Version.                               |                                                                                                                                                                                             | data[0]= great versiondata[1]=sub version                                                                                                                                                                                                                         |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x11B’010001 | Wi-Fi list.                            | 通知手机 ESP32 周围的 Wi-Fi 热点列表。                                                                                                                                                      | 数据帧数据格式为 Length + RSSI + SSID, 数据较长时可分片发送。                                                                                                                                                                                                     |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x12B’010010 | Report error.                          | 通知手机 BluFi 过程出现异常错误。                                                                                                                                                           | 0x00: sequence error;0x01: checksum error;0x02: decrypt error;0x03: encrypt error;0x04: init security error;0x05: dh malloc error;0x06: dh param error;0x07: read param  error;0x08: make public error.                                                           |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x13B’010011 | Custom data.                           | 用户发送或者接收自定义数据。                                                                                                                                                                | 数据较长时可分片发送。                                                                                                                                                                                                                                            |
-+--------------+----------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 数据帧        | 含义                                   | 解释                                           | 备注                                                 |
++===============+========================================+================================================+======================================================+
+| 0x0 b’000000  | Negotiation data.                      | 用来发送协商数据,传输到应用层注册的回调函数。 | 数据长度与 Length 域有关。                           |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x1 b’000001  | BSSID for STA mode.                    | STA 将要连接的 AP 的 BSSID(用于隐藏SSID)。   | 数据长度与 Length 域有关。                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x2 b’000010  | SSID for STA mode.                     | STA 将要连接的 AP 的 SSID。                    | 数据长度与 Length 域有关。                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x3 b’000011  | Password for STA mode.                 | STA 将要连接的 AP 的密码。                     | 数据长度与 Length 域有关。                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x4 b’000100  | SSID for SoftAP mode.                  | SoftAP 模式使用的 SSID。                       | 数据长度与 Length 域有关。                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x5 b’000101  | Password for SoftAPmode.               | SoftAP 模式使用的密码。                        | 数据长度与 Length 域有关。                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x6 b’000110  | Max connection number for SoftAP mode. | AP 模式的最大连接数。                          | data[0] 表示连接数的值,范围 1~4。                   |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x7b’000111   | Authentication mode for SoftAP mode.   | AP 模式的认证模式。                            | data[0]:                                            |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x00: OPEN;                                          |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x01: WEP;                                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x02: WPA_PSK;                                       |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x03: WPA2_PSK;                                      |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x04: WPA_WPA2_PSK.                                  |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x8b’001000   | Channel for SoftAP mode.               | SoftAP 模式的通道数量。                        | data[0] 表示通道的数量,范围 1~14。                  |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 当传输方向为 ESP32 到手机时,                        |
+|               |                                        |                                                | 表示向手机端提供信息。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x9b’001001   | Username.                              | 使用企业级加密时,Client 端的用户名。          | 数据长度与 Length 域有关。                           |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xab’001010   | CA certification.                      | 进行企业级加密时使用的 CA 证书。               | 数据长度与 Length 域有关,                           |
+|               |                                        |                                                | 长度不够,可用分片。                                 |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xbb’001011   | Client certification.                  | 进行企业级加密时,Client 端的证书。            | 数据长度与 Length 域有关,                           |
++               +                                        +------------------------------------------------+ 长度不够,可用分片。                                 +
+|               |                                        | 可包含或不包含私钥,由证书内容决定。           |                                                      |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xcb’001100   | Server certification.                  | 进行企业级加密时,Server 端的证书。            | 数据长度与 Length 域有关,                           |
++               +                                        +------------------------------------------------+ 长度不够,可用分片。                                 +
+|               |                                        | 可包含或不包含私钥,由证书内容决定。           |                                                      |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xdb’001101   | Client private key.                    | 进行企业级加密时,Client 端的私钥。            | 数据长度与 Length 域有关,                           |
+|               |                                        |                                                | 长度不够,可用分片。                                 |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xeb’001110   | Server private key.                    | 进行企业级加密时,Server 端的私钥。            | 数据长度与 Length 域有关,                           |
+|               |                                        |                                                | 长度不够,可用分片。                                 |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0xf b’001111  | Wi-Fi connection state report.         | 通知手机 ESP32 的 Wi-Fi 状态,                 | data[0] 表示 opmode,包括:                          |
+|               |                                        | 包括 STA状态和 SoftAP 状态,                   |                                                      |
+|               |                                        | 用于手机配置 STA 连接时的通知,                |                                                      |
+|               |                                        | 或有 STA 连接上 SoftAP 时的通知。              |                                                      |
++               +                                        +------------------------------------------------+------------------------------------------------------+
+|               |                                        | 但收到手机询问 Wi-Fi 状态时,                  | 0x00: NULL;                                         |
++               +                                        + 除了回复此帧外,还可回复其他数据帧。           +------------------------------------------------------+
+|               |                                        |                                                | 0x01: STA;                                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x02: SoftAP;                                        |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x03: SoftAP&STA                                     |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | data[1]:STA 的连接状态,                            |
+|               |                                        |                                                | 0x0 表示处于连接状态,                               |
+|               |                                        |                                                | 其他表示处于非连接状态;                             |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | data[2]:SoftAP 的连接状态,                         |
+|               |                                        |                                                | 即表示有多少 STA 已经连接。                          |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | data[3] 及以后:为按照本协议格式 SSID\BSSID 等信息。 |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x10 b’010000 | Version.                               |                                                | data[0]= great version                               |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | data[1]=sub version                                  |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x11 B’010001 | Wi-Fi list.                            | 通知手机 ESP32 周围的 Wi-Fi 热点列表。         | 数据帧数据格式为 Length + RSSI + SSID,               |
+|               |                                        |                                                | 数据较长时可分片发送。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x12 B’010010 | Report error.                          | 通知手机 BluFi 过程出现异常错误。              | 0x00: sequence error;                                |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x01: checksum error;                                |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x02: decrypt error;                                 |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x03: encrypt error;                                 |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x04: init security error;                           |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x05: dh malloc error;                               |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x06: dh param error;                                |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x07: read param  error;                             |
++               +                                        +                                                +------------------------------------------------------+
+|               |                                        |                                                | 0x08: make public error.                             |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
+| 0x13 B’010011 | Custom data.                           | 用户发送或者接收自定义数据。                   | 数据较长时可分片发送。                               |
++---------------+----------------------------------------+------------------------------------------------+------------------------------------------------------+
 
 2. Frame Control
 
-   帧控制域,占 1 Byte,每个 bit 表示不同含义。
+   帧控制域,占 1 byte,每个 bit 表示不同含义。
    
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| bit            | 含义                                                                                                                                                                                                                  |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x01           | 表示帧是否加密。1 表示加密,0 表示未加密。加密部分帧括完整的 Data 域加密之前的明文(不帧含末尾的校验)。控制帧暂不加密,故控制帧此位为 0。                                                                            |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x02           | 表示帧 Data 域结尾是否帧含校验(例如 SHA1、MD5、CRC等)需要校验的数据域包括『序列 + 数据长度 + 明文数据』。控制帧和数据帧都可以包含校验位或不包含。                                                                   |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x04           | 表示数据方向。0 表示手机发向 ESP32;1 表示 ESP32 发向手机。                                                                                                                                                           |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x08           | 表示是否要求对方回复 Ack。0 表示不要求;1 表示要求回复 Ack。                                                                                                                                                          |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x10           | 表示是否有后续的数据分片。0 表示此帧没有后续数据分片;1 表示还有后续数据分片。用来传输较长的数据。如果是 Frag 帧,则告知当前『内容部分+后续内容部分』的总长度,位于 Data 域的前 2 Byte (即最大支持 64K 的内容数据)。 |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 0x10~0x80 保留 |                                                                                                                                                                                                                       |
-+----------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++----------------+-------------------------------------------------------------------------+
+| 位             | 含义                                                                    |
++================+=========================================================================+
+| 0x01           | 表示帧是否加密。                                                        |
++                +-------------------------------------------------------------------------+
+|                | 1 表示加密,0 表示未加密。                                              |
++                +-------------------------------------------------------------------------+
+|                | 加密部分帧括完整的 DATA 域加密之前的明文(不帧含末尾的校验)。          |
++                +-------------------------------------------------------------------------+
+|                | 控制帧暂不加密,故控制帧此位为 0。                                      |
++----------------+-------------------------------------------------------------------------+
+| 0x02           | 表示帧 Data 域结尾是否帧含校验(例如 SHA1,MD5,CRC等)需要校验的数据域, |
+|                | 包括 sequcne + data length + 明文 data。                                |
++                +-------------------------------------------------------------------------+
+|                | 控制帧和数据帧都可以包含校验位或不包含。                                |
++----------------+-------------------------------------------------------------------------+
+| 0x04           | 表示数据方向。                                                          |
++                +-------------------------------------------------------------------------+
+|                | 0 表示手机发向 ESP32;                                                  |
++                +-------------------------------------------------------------------------+
+|                | 1 表示 ESP32 发向手机。                                                 |
++----------------+-------------------------------------------------------------------------+
+| 0x08           | 表示是否要求对方回复 ack。                                              |
++                +-------------------------------------------------------------------------+
+|                | 0 表示不要求;                                                          |
++                +-------------------------------------------------------------------------+
+|                | 1 表示要求回复 ack。                                                    |
++----------------+-------------------------------------------------------------------------+
+| 0x10           | 表示是否有后续的数据分片。                                              |
++                +-------------------------------------------------------------------------+
+|                | 0 表示此帧没有后续数据分片;                                            |
++                +-------------------------------------------------------------------------+
+|                | 1 表示还有后续数据分片,用来传输较长的数据。                            |
++                +-------------------------------------------------------------------------+
+|                | 如果是 Frag 帧,则告知当前 content 部分+后续 content 部分的总长度,     |
+|                | 位于 Data 域的前 2 字节(即最大支持 64K 的 content 数据)。              |
++----------------+-------------------------------------------------------------------------+
+| 0x10~0x80 保留 |                                                                         |
++----------------+-------------------------------------------------------------------------+
 
 3. Sequence Control
 
@@ -225,7 +358,7 @@ Ack 帧格式(8 bit):
 
 6. CheckSum
 
-   此域为 2 Byte 的校验,用来校验『序列 + 数据长度 + 明文数据』。
+   此域为 2 byte 的校验,用来校验『序列 + 数据长度 + 明文数据』。
    
 ESP32 端的安全实现
 ------------------