#include "btc_manage.h"
#include "btc_main.h"
#include "future.h"
+#include "btc_gatts.h"
esp_err_t esp_blufi_register_callbacks(esp_blufi_callbacks_t *callbacks)
{
return btc_blufi_get_version();
}
+esp_err_t esp_blufi_close(esp_gatt_if_t gatts_if, uint16_t conn_id)
+{
+ btc_msg_t msg;
+ btc_ble_gatts_args_t arg;
+ if (esp_bluedroid_get_status() != ESP_BLUEDROID_STATUS_ENABLED) {
+ return ESP_ERR_INVALID_STATE;
+ }
+ msg.sig = BTC_SIG_API_CALL;
+ msg.pid = BTC_PID_GATTS;
+ msg.act = BTC_GATTS_ACT_CLOSE;
+ arg.close.conn_id = conn_id;
+ return (btc_transfer_context(&msg, &arg, sizeof(btc_ble_gatts_args_t), NULL)
+ == BT_STATUS_SUCCESS ? ESP_OK : ESP_FAIL);
+}
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_cb_event_t;
/// BLUFI config status
*/
struct blufi_connect_evt_param {
esp_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 */
/**
*/
uint16_t esp_blufi_get_version(void);
+/**
+ * @brief Close a connection a remote device.
+ *
+ * @param[in] gatts_if: GATT server access interface
+ * @param[in] conn_id: connection ID to be closed.
+ *
+ * @return
+ * - ESP_OK : success
+ * - other : failed
+ *
+ */
+esp_err_t esp_blufi_close(esp_gatt_if_t gatts_if, uint16_t conn_id);
#ifdef __cplusplus
}
#endif
msg.pid = BTC_PID_BLUFI;
msg.act = ESP_BLUFI_EVENT_BLE_CONNECT;
memcpy(param.connect.remote_bda, p_data->conn.remote_bda, sizeof(esp_bd_addr_t));
+ param.connect.conn_id=p_data->conn.conn_id;
+ param.connect.server_if=p_data->conn.server_if;
btc_transfer_context(&msg, ¶m, sizeof(esp_blufi_cb_param_t), NULL);
break;
}
case ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY:
btc_blufi_cb_to_app(ESP_BLUFI_EVENT_RECV_SERVER_PRIV_KEY, param);
break;
+ case ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE:
+ btc_blufi_cb_to_app(ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE, param);
+ break;
default:
LOG_ERROR("%s UNKNOWN %d\n", __func__, msg->act);
break;
btc_blufi_send_encap(type, &data[0], sizeof(data));
break;
}
+ case BLUFI_TYPE_CTRL_SUBTYPE_DISCONNECT_BLE:
+ msg.sig = BTC_SIG_API_CB;
+ msg.pid = BTC_PID_BLUFI;
+ msg.act = ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE;
+ btc_transfer_context(&msg, NULL, 0, NULL);
+ break;
default:
LOG_ERROR("%s Unkown Ctrl pkt %02x\n", __func__, type);
break;
#define BLUFI_TYPE_CTRL_SUBTYPE_GET_WIFI_STATUS 0x05
#define BLUFI_TYPE_CTRL_SUBTYPE_DEAUTHENTICATE_STA 0x06
#define BLUFI_TYPE_CTRL_SUBTYPE_GET_VERSION 0x07
+#define BLUFI_TYPE_CTRL_SUBTYPE_DISCONNECT_BLE 0x08
#define BLUFI_TYPE_DATA 0x1
#define BLUFI_TYPE_DATA_SUBTYPE_NEG 0x00
.. doxygenfunction:: esp_blufi_profile_deinit
.. doxygenfunction:: esp_blufi_send_wifi_conn_report
.. doxygenfunction:: esp_blufi_get_version
+.. doxygenfunction:: esp_blufi_close
static uint8_t gl_sta_ssid[32];
static int gl_sta_ssid_len;
+/* connect infor*/
+static uint8_t server_if;
+static uint16_t conn_id;
static esp_err_t example_net_event_handler(void *ctx, system_event_t *event)
{
wifi_mode_t mode;
break;
case ESP_BLUFI_EVENT_BLE_CONNECT:
BLUFI_INFO("BLUFI ble connect\n");
+ server_if=param->connect.server_if;
+ conn_id=param->connect.conn_id;
esp_ble_gap_stop_advertising();
blufi_security_deinit();
blufi_security_init();
break;
}
+ case ESP_BLUFI_EVENT_RECV_SLAVE_DISCONNECT_BLE:
+ BLUFI_INFO("blufi close a gatt connection");
+ esp_blufi_close(server_if,conn_id);
+ break;
case ESP_BLUFI_EVENT_DEAUTHENTICATE_STA:
/* TODO */
break;