summaryrefslogtreecommitdiff
path: root/lib/bt/common/api
diff options
context:
space:
mode:
Diffstat (limited to 'lib/bt/common/api')
-rw-r--r--lib/bt/common/api/esp_blufi_api.c126
-rw-r--r--lib/bt/common/api/include/api/esp_blufi_api.h436
2 files changed, 562 insertions, 0 deletions
diff --git a/lib/bt/common/api/esp_blufi_api.c b/lib/bt/common/api/esp_blufi_api.c
new file mode 100644
index 00000000..b2475537
--- /dev/null
+++ b/lib/bt/common/api/esp_blufi_api.c
@@ -0,0 +1,126 @@
+/*
+ * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+
+#include "esp_blufi_api.h"
+#include "btc/btc_task.h"
+#include "btc_blufi_prf.h"
+#include "btc/btc_manage.h"
+#include "osi/future.h"
+#if (BLUFI_INCLUDED == TRUE)
+esp_err_t esp_blufi_register_callbacks(esp_blufi_callbacks_t *callbacks)
+{
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ if (callbacks == NULL) {
+ return ESP_FAIL;
+ }
+
+ btc_blufi_set_callbacks(callbacks);
+ return (btc_profile_cb_set(BTC_PID_BLUFI, callbacks->event_cb) == 0 ? ESP_OK : ESP_FAIL);
+}
+
+esp_err_t esp_blufi_send_wifi_conn_report(wifi_mode_t opmode, esp_blufi_sta_conn_state_t sta_conn_state, uint8_t softap_conn_num, esp_blufi_extra_info_t *extra_info)
+{
+ btc_msg_t msg;
+ btc_blufi_args_t arg;
+
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_SEND_CFG_REPORT;
+ arg.wifi_conn_report.opmode = opmode;
+ arg.wifi_conn_report.sta_conn_state = sta_conn_state;
+ arg.wifi_conn_report.softap_conn_num = softap_conn_num;
+ arg.wifi_conn_report.extra_info = extra_info;
+
+ return (btc_transfer_context(&msg, &arg, sizeof(btc_blufi_args_t), btc_blufi_call_deep_copy,
+ btc_blufi_call_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+
+esp_err_t esp_blufi_send_wifi_list(uint16_t apCount, esp_blufi_ap_record_t *list)
+{
+ btc_msg_t msg;
+ btc_blufi_args_t arg;
+
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_SEND_WIFI_LIST;
+ arg.wifi_list.apCount = apCount;
+ arg.wifi_list.list = list;
+
+ return (btc_transfer_context(&msg, &arg, sizeof(btc_blufi_args_t), btc_blufi_call_deep_copy,
+ btc_blufi_call_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+
+esp_err_t esp_blufi_profile_init(void)
+{
+ btc_msg_t msg;
+
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_INIT;
+
+ return (btc_transfer_context(&msg, NULL, 0, NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+
+esp_err_t esp_blufi_profile_deinit(void)
+{
+ btc_msg_t msg;
+
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_DEINIT;
+
+ return (btc_transfer_context(&msg, NULL, 0, NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+
+uint16_t esp_blufi_get_version(void)
+{
+ return btc_blufi_get_version();
+}
+
+esp_err_t esp_blufi_send_error_info(esp_blufi_error_state_t state)
+{
+ btc_msg_t msg;
+ btc_blufi_args_t arg;
+
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_SEND_ERR_INFO;
+ arg.blufi_err_infor.state = state;
+
+ return (btc_transfer_context(&msg, &arg, sizeof(btc_blufi_args_t), NULL, NULL) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+
+esp_err_t esp_blufi_send_custom_data(uint8_t *data, uint32_t data_len)
+{
+ btc_msg_t msg;
+ btc_blufi_args_t arg;
+ if(data == NULL || data_len == 0) {
+ return ESP_ERR_INVALID_ARG;
+ }
+ ESP_BLE_HOST_STATUS_CHECK(ESP_BLE_HOST_STATUS_ENABLED);
+
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = BTC_BLUFI_ACT_SEND_CUSTOM_DATA;
+ arg.custom_data.data = data;
+ arg.custom_data.data_len = data_len;
+
+ return (btc_transfer_context(&msg, &arg, sizeof(btc_blufi_args_t), btc_blufi_call_deep_copy,
+ btc_blufi_call_deep_free) == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
+#endif ///BLUFI_INCLUDED == TRUE
diff --git a/lib/bt/common/api/include/api/esp_blufi_api.h b/lib/bt/common/api/include/api/esp_blufi_api.h
new file mode 100644
index 00000000..8e1807f5
--- /dev/null
+++ b/lib/bt/common/api/include/api/esp_blufi_api.h
@@ -0,0 +1,436 @@
+/*
+ * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#ifndef __ESP_BLUFI_API_H__
+#define __ESP_BLUFI_API_H__
+
+#include "esp_err.h"
+#include "esp_wifi_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef enum {
+ ESP_BLUFI_EVENT_INIT_FINISH = 0, /*<! When BLUFI init complete, this event happen */
+ ESP_BLUFI_EVENT_DEINIT_FINISH, /*<! When BLUFI deinit complete, this event happen */
+ ESP_BLUFI_EVENT_SET_WIFI_OPMODE, /*<! When Phone set ESP32 wifi operation mode(AP/STA/AP_STA), this event happen */
+ ESP_BLUFI_EVENT_BLE_CONNECT, /*<! When Phone connect to ESP32 with BLE, this event happen */
+ ESP_BLUFI_EVENT_BLE_DISCONNECT, /*<! When Phone disconnect with BLE, this event happen */
+ ESP_BLUFI_EVENT_REQ_CONNECT_TO_AP, /*<! When Phone request ESP32's STA connect to AP, this event happen */
+ ESP_BLUFI_EVENT_REQ_DISCONNECT_FROM_AP, /*<! When Phone request ESP32's STA disconnect from AP, this event happen */
+ ESP_BLUFI_EVENT_GET_WIFI_STATUS, /*<! When Phone get ESP32 wifi status, this event happen */
+ ESP_BLUFI_EVENT_DEAUTHENTICATE_STA, /*<! When Phone deauthenticate sta from SOFTAP, this event happen */
+ /* recv data */
+ ESP_BLUFI_EVENT_RECV_STA_BSSID, /*<! When Phone send STA BSSID to ESP32 to connect, this event happen */
+ ESP_BLUFI_EVENT_RECV_STA_SSID, /*<! When Phone send STA SSID to ESP32 to connect, this event happen */
+ ESP_BLUFI_EVENT_RECV_STA_PASSWD, /*<! When Phone send STA PASSWORD to ESP32 to connect, this event happen */
+ ESP_BLUFI_EVENT_RECV_SOFTAP_SSID, /*<! When Phone send SOFTAP SSID to ESP32 to start SOFTAP, this event happen */
+ ESP_BLUFI_EVENT_RECV_SOFTAP_PASSWD, /*<! When Phone send SOFTAP PASSWORD to ESP32 to start SOFTAP, this event happen */
+ ESP_BLUFI_EVENT_RECV_SOFTAP_MAX_CONN_NUM, /*<! When Phone send SOFTAP max connection number to ESP32 to start SOFTAP, this event happen */
+ ESP_BLUFI_EVENT_RECV_SOFTAP_AUTH_MODE, /*<! When Phone send SOFTAP authentication mode to ESP32 to start SOFTAP, this event happen */
+ ESP_BLUFI_EVENT_RECV_SOFTAP_CHANNEL, /*<! When Phone send SOFTAP channel to ESP32 to start SOFTAP, this event happen */
+ ESP_BLUFI_EVENT_RECV_USERNAME, /*<! When Phone send username to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_CA_CERT, /*<! When Phone send CA certificate to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_CLIENT_CERT, /*<! When Phone send Client certificate to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_SERVER_CERT, /*<! When Phone send Server certificate to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_CLIENT_PRIV_KEY, /*<! When Phone send Client Private key to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY, /*<! When Phone send Server Private key to ESP32, this event happen */
+ ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE, /*<! When Phone send Disconnect key to ESP32, this event happen */
+ ESP_BLUFI_EVENT_GET_WIFI_LIST, /*<! When Phone send get wifi list command to ESP32, this event happen */
+ ESP_BLUFI_EVENT_REPORT_ERROR, /*<! When Blufi report error, this event happen */
+ ESP_BLUFI_EVENT_RECV_CUSTOM_DATA, /*<! When Phone send custom data to ESP32, this event happen */
+} esp_blufi_cb_event_t;
+
+/// BLUFI config status
+typedef enum {
+ ESP_BLUFI_STA_CONN_SUCCESS = 0x00,
+ ESP_BLUFI_STA_CONN_FAIL = 0x01,
+ ESP_BLUFI_STA_CONNECTING = 0x02,
+ ESP_BLUFI_STA_NO_IP = 0x03,
+} esp_blufi_sta_conn_state_t;
+
+/// BLUFI init status
+typedef enum {
+ ESP_BLUFI_INIT_OK = 0,
+ ESP_BLUFI_INIT_FAILED,
+} esp_blufi_init_state_t;
+
+/// BLUFI deinit status
+typedef enum {
+ ESP_BLUFI_DEINIT_OK = 0,
+ ESP_BLUFI_DEINIT_FAILED,
+} esp_blufi_deinit_state_t;
+
+typedef enum {
+ ESP_BLUFI_SEQUENCE_ERROR = 0,
+ ESP_BLUFI_CHECKSUM_ERROR,
+ ESP_BLUFI_DECRYPT_ERROR,
+ ESP_BLUFI_ENCRYPT_ERROR,
+ ESP_BLUFI_INIT_SECURITY_ERROR,
+ ESP_BLUFI_DH_MALLOC_ERROR,
+ ESP_BLUFI_DH_PARAM_ERROR,
+ ESP_BLUFI_READ_PARAM_ERROR,
+ ESP_BLUFI_MAKE_PUBLIC_ERROR,
+ ESP_BLUFI_DATA_FORMAT_ERROR,
+ ESP_BLUFI_CALC_MD5_ERROR,
+ ESP_BLUFI_WIFI_SCAN_FAIL,
+ ESP_BLUFI_MSG_STATE_ERROR,
+} esp_blufi_error_state_t;
+
+/**
+ * @brief BLUFI extra information structure
+ */
+typedef struct {
+ //station
+ uint8_t sta_bssid[6]; /*!< BSSID of station interface */
+ bool sta_bssid_set; /*!< is BSSID of station interface set */
+ uint8_t *sta_ssid; /*!< SSID of station interface */
+ int sta_ssid_len; /*!< length of SSID of station interface */
+ uint8_t *sta_passwd; /*!< password of station interface */
+ int sta_passwd_len; /*!< length of password of station interface */
+ uint8_t *softap_ssid; /*!< SSID of softap interface */
+ int softap_ssid_len; /*!< length of SSID of softap interface */
+ uint8_t *softap_passwd; /*!< password of station interface */
+ int softap_passwd_len; /*!< length of password of station interface */
+ uint8_t softap_authmode; /*!< authentication mode of softap interface */
+ bool softap_authmode_set; /*!< is authentication mode of softap interface set */
+ uint8_t softap_max_conn_num; /*!< max connection number of softap interface */
+ bool softap_max_conn_num_set; /*!< is max connection number of softap interface set */
+ uint8_t softap_channel; /*!< channel of softap interface */
+ bool softap_channel_set; /*!< is channel of softap interface set */
+ uint8_t sta_max_conn_retry; /*!< max retry of sta establish connection */
+ bool sta_max_conn_retry_set; /*!< is max retry of sta establish connection set */
+ uint8_t sta_conn_end_reason; /*!< reason of sta connection end */
+ bool sta_conn_end_reason_set; /*!< is reason of sta connection end set */
+ int8_t sta_conn_rssi; /*!< rssi of sta connection */
+ bool sta_conn_rssi_set; /*!< is rssi of sta connection set */
+} esp_blufi_extra_info_t;
+
+/** @brief Description of an WiFi AP */
+typedef struct {
+ uint8_t ssid[33]; /**< SSID of AP */
+ int8_t rssi; /**< signal strength of AP */
+} esp_blufi_ap_record_t;
+
+/// Bluetooth address length
+#define ESP_BLUFI_BD_ADDR_LEN 6
+/// Bluetooth device address
+typedef uint8_t esp_blufi_bd_addr_t[ESP_BLUFI_BD_ADDR_LEN];
+
+/**
+ * @brief BLUFI callback parameters union
+ */
+typedef union {
+ /**
+ * @brief ESP_BLUFI_EVENT_INIT_FINISH
+ */
+ struct blufi_init_finish_evt_param {
+ esp_blufi_init_state_t state; /*!< Initial status */
+ } init_finish; /*!< Blufi callback param of ESP_BLUFI_EVENT_INIT_FINISH */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_DEINIT_FINISH
+ */
+ struct blufi_deinit_finish_evt_param {
+ esp_blufi_deinit_state_t state; /*!< De-initial status */
+ } deinit_finish; /*!< Blufi callback param of ESP_BLUFI_EVENT_DEINIT_FINISH */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_SET_WIFI_MODE
+ */
+ struct blufi_set_wifi_mode_evt_param {
+ wifi_mode_t op_mode; /*!< Wifi operation mode */
+ } wifi_mode; /*!< Blufi callback param of ESP_BLUFI_EVENT_INIT_FINISH */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_CONNECT
+ */
+ struct blufi_connect_evt_param {
+ esp_blufi_bd_addr_t remote_bda; /*!< Blufi Remote bluetooth device address */
+ uint8_t server_if; /*!< server interface */
+ uint16_t conn_id; /*!< Connection id */
+ } connect; /*!< Blufi callback param of ESP_BLUFI_EVENT_CONNECT */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_DISCONNECT
+ */
+ struct blufi_disconnect_evt_param {
+ esp_blufi_bd_addr_t remote_bda; /*!< Blufi Remote bluetooth device address */
+ } disconnect; /*!< Blufi callback param of ESP_BLUFI_EVENT_DISCONNECT */
+
+ /* ESP_BLUFI_EVENT_REQ_WIFI_CONNECT */ /* No callback param */
+ /* ESP_BLUFI_EVENT_REQ_WIFI_DISCONNECT */ /* No callback param */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_STA_BSSID
+ */
+ struct blufi_recv_sta_bssid_evt_param {
+ uint8_t bssid[6]; /*!< BSSID */
+ } sta_bssid; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_STA_BSSID */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_STA_SSID
+ */
+ struct blufi_recv_sta_ssid_evt_param {
+ uint8_t *ssid; /*!< SSID */
+ int ssid_len; /*!< SSID length */
+ } sta_ssid; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_STA_SSID */
+
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_RECV_STA_PASSWD
+ */
+ struct blufi_recv_sta_passwd_evt_param {
+ uint8_t *passwd; /*!< Password */
+ int passwd_len; /*!< Password Length */
+ } sta_passwd; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_STA_PASSWD */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_SOFTAP_SSID
+ */
+ struct blufi_recv_softap_ssid_evt_param {
+ uint8_t *ssid; /*!< SSID */
+ int ssid_len; /*!< SSID length */
+ } softap_ssid; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SOFTAP_SSID */
+
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_RECV_SOFTAP_PASSWD
+ */
+ struct blufi_recv_softap_passwd_evt_param {
+ uint8_t *passwd; /*!< Password */
+ int passwd_len; /*!< Password Length */
+ } softap_passwd; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SOFTAP_PASSWD */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_SOFTAP_MAX_CONN_NUM
+ */
+ struct blufi_recv_softap_max_conn_num_evt_param {
+ int max_conn_num; /*!< SSID */
+ } softap_max_conn_num; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SOFTAP_MAX_CONN_NUM */
+
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_RECV_SOFTAP_AUTH_MODE
+ */
+ struct blufi_recv_softap_auth_mode_evt_param {
+ wifi_auth_mode_t auth_mode; /*!< Authentication mode */
+ } softap_auth_mode; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SOFTAP_AUTH_MODE */
+
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_RECV_SOFTAP_CHANNEL
+ */
+ struct blufi_recv_softap_channel_evt_param {
+ uint8_t channel; /*!< Authentication mode */
+ } softap_channel; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SOFTAP_CHANNEL */
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_USERNAME
+ */
+ struct blufi_recv_username_evt_param {
+ uint8_t *name; /*!< Username point */
+ int name_len; /*!< Username length */
+ } username; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_USERNAME*/
+
+ /**
+ * @brief ESP_BLUFI_EVENT_RECV_CA_CERT
+ */
+ struct blufi_recv_ca_evt_param {
+ uint8_t *cert; /*!< CA certificate point */
+ int cert_len; /*!< CA certificate length */
+ } ca; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_CA_CERT */
+
+ /**
+ * ESP_BLUFI_EVENT_RECV_CLIENT_CERT
+ */
+ struct blufi_recv_client_cert_evt_param {
+ uint8_t *cert; /*!< Client certificate point */
+ int cert_len; /*!< Client certificate length */
+ } client_cert; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_CLIENT_CERT */
+
+ /**
+ * ESP_BLUFI_EVENT_RECV_SERVER_CERT
+ */
+ struct blufi_recv_server_cert_evt_param {
+ uint8_t *cert; /*!< Client certificate point */
+ int cert_len; /*!< Client certificate length */
+ } server_cert; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SERVER_CERT */
+
+ /**
+ * ESP_BLUFI_EVENT_RECV_CLIENT_PRIV_KEY
+ */
+ struct blufi_recv_client_pkey_evt_param {
+ uint8_t *pkey; /*!< Client Private Key point, if Client certificate not contain Key */
+ int pkey_len; /*!< Client Private key length */
+ } client_pkey; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_CLIENT_PRIV_KEY */
+ /**
+ * ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY
+ */
+ struct blufi_recv_server_pkey_evt_param {
+ uint8_t *pkey; /*!< Client Private Key point, if Client certificate not contain Key */
+ int pkey_len; /*!< Client Private key length */
+ } server_pkey; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY */
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_REPORT_ERROR
+ */
+ struct blufi_get_error_evt_param {
+ esp_blufi_error_state_t state; /*!< Blufi error state */
+ } report_error; /*!< Blufi callback param of ESP_BLUFI_EVENT_REPORT_ERROR */
+ /**
+ * @brief
+ * ESP_BLUFI_EVENT_RECV_CUSTOM_DATA
+ */
+ struct blufi_recv_custom_data_evt_param {
+ uint8_t *data; /*!< Custom data */
+ uint32_t data_len; /*!< Custom data Length */
+ } custom_data; /*!< Blufi callback param of ESP_BLUFI_EVENT_RECV_CUSTOM_DATA */
+} esp_blufi_cb_param_t;
+
+/**
+ * @brief BLUFI event callback function type
+ * @param event : Event type
+ * @param param : Point to callback parameter, currently is union type
+ */
+typedef void (* esp_blufi_event_cb_t)(esp_blufi_cb_event_t event, esp_blufi_cb_param_t *param);
+
+/* security function declare */
+
+/**
+ * @brief BLUFI negotiate data handler
+ * @param data : data from phone
+ * @param len : length of data from phone
+ * @param output_data : data want to send to phone
+ * @param output_len : length of data want to send to phone
+ * @param need_free : output reporting if memory needs to be freed or not *
+ */
+typedef void (*esp_blufi_negotiate_data_handler_t)(uint8_t *data, int len, uint8_t **output_data, int *output_len, bool *need_free);
+
+/**
+ * @brief BLUFI encrypt the data after negotiate a share key
+ * @param iv8 : initial vector(8bit), normally, blufi core will input packet sequence number
+ * @param crypt_data : plain text and encrypted data, the encrypt function must support autochthonous encrypt
+ * @param crypt_len : length of plain text
+ * @return Nonnegative number is encrypted length, if error, return negative number;
+ */
+typedef int (* esp_blufi_encrypt_func_t)(uint8_t iv8, uint8_t *crypt_data, int crypt_len);
+
+/**
+ * @brief BLUFI decrypt the data after negotiate a share key
+ * @param iv8 : initial vector(8bit), normally, blufi core will input packet sequence number
+ * @param crypt_data : encrypted data and plain text, the encrypt function must support autochthonous decrypt
+ * @param crypt_len : length of encrypted text
+ * @return Nonnegative number is decrypted length, if error, return negative number;
+ */
+typedef int (* esp_blufi_decrypt_func_t)(uint8_t iv8, uint8_t *crypt_data, int crypt_len);
+
+/**
+ * @brief BLUFI checksum
+ * @param iv8 : initial vector(8bit), normally, blufi core will input packet sequence number
+ * @param data : data need to checksum
+ * @param len : length of data
+ */
+typedef uint16_t (*esp_blufi_checksum_func_t)(uint8_t iv8, uint8_t *data, int len);
+
+/**
+ * @brief BLUFI callback functions type
+ */
+typedef struct {
+ esp_blufi_event_cb_t event_cb; /*!< BLUFI event callback */
+ esp_blufi_negotiate_data_handler_t negotiate_data_handler; /*!< BLUFI negotiate data function for negotiate share key */
+ esp_blufi_encrypt_func_t encrypt_func; /*!< BLUFI encrypt data function with share key generated by negotiate_data_handler */
+ esp_blufi_decrypt_func_t decrypt_func; /*!< BLUFI decrypt data function with share key generated by negotiate_data_handler */
+ esp_blufi_checksum_func_t checksum_func; /*!< BLUFI check sum function (FCS) */
+} esp_blufi_callbacks_t;
+
+/**
+ *
+ * @brief This function is called to receive blufi callback event
+ *
+ * @param[in] callbacks: callback functions
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_register_callbacks(esp_blufi_callbacks_t *callbacks);
+
+/**
+ *
+ * @brief This function is called to initialize blufi_profile
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_profile_init(void);
+
+/**
+ *
+ * @brief This function is called to de-initialize blufi_profile
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_profile_deinit(void);
+
+/**
+ *
+ * @brief This function is called to send wifi connection report
+ * @param opmode : wifi opmode
+ * @param sta_conn_state : station is already in connection or not
+ * @param softap_conn_num : softap connection number
+ * @param extra_info : extra information, such as sta_ssid, softap_ssid and etc.
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_send_wifi_conn_report(wifi_mode_t opmode, esp_blufi_sta_conn_state_t sta_conn_state, uint8_t softap_conn_num, esp_blufi_extra_info_t *extra_info);
+
+/**
+ *
+ * @brief This function is called to send wifi list
+ * @param apCount : wifi list count
+ * @param list : wifi list
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_send_wifi_list(uint16_t apCount, esp_blufi_ap_record_t *list);
+
+/**
+ *
+ * @brief Get BLUFI profile version
+ *
+ * @return Most 8bit significant is Great version, Least 8bit is Sub version
+ *
+ */
+uint16_t esp_blufi_get_version(void);
+
+/**
+ *
+ * @brief This function is called to send blufi error information
+ * @param state : error state
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_send_error_info(esp_blufi_error_state_t state);
+/**
+ *
+ * @brief This function is called to custom data
+ * @param data : custom data value
+ * @param data_len : the length of custom data
+ *
+ * @return ESP_OK - success, other - failed
+ *
+ */
+esp_err_t esp_blufi_send_custom_data(uint8_t *data, uint32_t data_len);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ESP_BLUFI_API_ */