1 /* 2 * SPDX-FileCopyrightText: 2015-2024 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef __BLUFI_INT_H__ 8 #define __BLUFI_INT_H__ 9 10 #include "btc/btc_task.h" 11 #include "esp_blufi_api.h" 12 13 #ifdef __cplusplus 14 extern "C" { 15 #endif 16 17 #if (BLUFI_INCLUDED == TRUE) 18 19 #define BTC_BLUFI_GREAT_VER 0x01 //Version + Subversion 20 #define BTC_BLUFI_SUB_VER 0x03 //Version + Subversion 21 #define BTC_BLUFI_VERSION ((BTC_BLUFI_GREAT_VER<<8)|BTC_BLUFI_SUB_VER) //Version + Subversion 22 23 typedef UINT8 tGATT_IF; 24 /* service engine control block */ 25 typedef struct { 26 /* Protocol reference */ 27 tGATT_IF gatt_if; 28 UINT8 srvc_inst; 29 UINT16 handle_srvc; 30 UINT16 handle_char_p2e; 31 UINT16 handle_char_e2p; 32 UINT16 handle_descr_e2p; 33 UINT16 conn_id; 34 BOOLEAN is_connected; 35 BD_ADDR remote_bda; 36 UINT32 trans_id; 37 UINT8 congest; 38 UINT16 frag_size; 39 // Deprecated: This macro will be removed in the future 40 #define BLUFI_PREPAIR_BUF_MAX_SIZE 1024 41 #define BLUFI_PREPARE_BUF_MAX_SIZE 1024 42 uint8_t *prepare_buf; 43 int prepare_len; 44 /* Control reference */ 45 esp_blufi_callbacks_t *cbs; 46 BOOLEAN enabled; 47 uint8_t send_seq; 48 uint8_t recv_seq; 49 uint8_t sec_mode; 50 uint8_t *aggr_buf; 51 uint16_t total_len; 52 uint16_t offset; 53 } tBLUFI_ENV; 54 55 /* BLUFI protocol */ 56 struct blufi_hdr{ 57 uint8_t type; 58 uint8_t fc; 59 uint8_t seq; 60 uint8_t data_len; 61 uint8_t data[0]; 62 }; 63 typedef struct blufi_hdr blufi_hd_t; 64 65 struct blufi_frag_hdr { 66 uint8_t type; 67 uint8_t fc; 68 uint8_t seq; 69 uint8_t data_len; 70 uint16_t total_len; 71 uint8_t content[0]; 72 }; 73 typedef struct blufi_frag_hdr blufi_frag_hdr_t; 74 75 #if GATT_DYNAMIC_MEMORY == FALSE 76 extern tBLUFI_ENV blufi_env; 77 #else 78 extern tBLUFI_ENV *blufi_env_ptr; 79 #define blufi_env (*blufi_env_ptr) 80 #endif 81 82 #define BLUFI_DATA_SEC_MODE_CHECK_MASK 0x01 83 #define BLUFI_DATA_SEC_MODE_ENC_MASK 0x02 84 #define BLUFI_CTRL_SEC_MODE_CHECK_MASK 0x10 85 #define BLUFI_CTRL_SEC_MODE_ENC_MASK 0x20 86 #define BLUFI_MAX_DATA_LEN 255 87 88 // packet type 89 #define BLUFI_TYPE_MASK 0x03 90 #define BLUFI_TYPE_SHIFT 0 91 #define BLUFI_SUBTYPE_MASK 0xFC 92 #define BLUFI_SUBTYPE_SHIFT 2 93 94 #define BLUFI_GET_TYPE(type) ((type) & BLUFI_TYPE_MASK) 95 #define BLUFI_GET_SUBTYPE(type) (((type) & BLUFI_SUBTYPE_MASK) >>BLUFI_SUBTYPE_SHIFT) 96 #define BLUFI_BUILD_TYPE(type, subtype) (((type) & BLUFI_TYPE_MASK) | ((subtype)<<BLUFI_SUBTYPE_SHIFT)) 97 98 #define BLUFI_TYPE_CTRL 0x0 99 #define BLUFI_TYPE_CTRL_SUBTYPE_ACK 0x00 100 #define BLUFI_TYPE_CTRL_SUBTYPE_SET_SEC_MODE 0x01 101 #define BLUFI_TYPE_CTRL_SUBTYPE_SET_WIFI_OPMODE 0x02 102 #define BLUFI_TYPE_CTRL_SUBTYPE_CONN_TO_AP 0x03 103 #define BLUFI_TYPE_CTRL_SUBTYPE_DISCONN_FROM_AP 0x04 104 #define BLUFI_TYPE_CTRL_SUBTYPE_GET_WIFI_STATUS 0x05 105 #define BLUFI_TYPE_CTRL_SUBTYPE_DEAUTHENTICATE_STA 0x06 106 #define BLUFI_TYPE_CTRL_SUBTYPE_GET_VERSION 0x07 107 #define BLUFI_TYPE_CTRL_SUBTYPE_DISCONNECT_BLE 0x08 108 #define BLUFI_TYPE_CTRL_SUBTYPE_GET_WIFI_LIST 0x09 109 110 #define BLUFI_TYPE_DATA 0x1 111 #define BLUFI_TYPE_DATA_SUBTYPE_NEG 0x00 112 #define BLUFI_TYPE_DATA_SUBTYPE_STA_BSSID 0x01 113 #define BLUFI_TYPE_DATA_SUBTYPE_STA_SSID 0x02 114 #define BLUFI_TYPE_DATA_SUBTYPE_STA_PASSWD 0x03 115 #define BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_SSID 0x04 116 #define BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_PASSWD 0x05 117 #define BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM 0x06 118 #define BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_AUTH_MODE 0x07 119 #define BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL 0x08 120 #define BLUFI_TYPE_DATA_SUBTYPE_USERNAME 0x09 121 #define BLUFI_TYPE_DATA_SUBTYPE_CA 0x0a 122 #define BLUFI_TYPE_DATA_SUBTYPE_CLIENT_CERT 0x0b 123 #define BLUFI_TYPE_DATA_SUBTYPE_SERVER_CERT 0x0c 124 #define BLUFI_TYPE_DATA_SUBTYPE_CLIENT_PRIV_KEY 0x0d 125 #define BLUFI_TYPE_DATA_SUBTYPE_SERVER_PRIV_KEY 0x0e 126 #define BLUFI_TYPE_DATA_SUBTYPE_WIFI_REP 0x0f 127 #define BLUFI_TYPE_DATA_SUBTYPE_REPLY_VERSION 0x10 128 #define BLUFI_TYPE_DATA_SUBTYPE_WIFI_LIST 0x11 129 #define BLUFI_TYPE_DATA_SUBTYPE_ERROR_INFO 0x12 130 #define BLUFI_TYPE_DATA_SUBTYPE_CUSTOM_DATA 0x13 131 #define BLUFI_TYPE_DATA_SUBTYPE_STA_MAX_CONN_RETRY 0x14 132 #define BLUFI_TYPE_DATA_SUBTYPE_STA_CONN_END_REASON 0x15 133 #define BLUFI_TYPE_DATA_SUBTYPE_STA_CONN_RSSI 0x16 134 #define BLUFI_TYPE_IS_CTRL(type) (BLUFI_GET_TYPE((type)) == BLUFI_TYPE_CTRL) 135 #define BLUFI_TYPE_IS_DATA(type) (BLUFI_GET_TYPE((type)) == BLUFI_TYPE_DATA) 136 137 #define BLUFI_TYPE_IS_CTRL_ACK(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_ACK) 138 #define BLUFI_TYPE_IS_CTRL_START_NEG(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_START_NEG) 139 #define BLUFI_TYPE_IS_CTRL_STOP_NEG(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_STOP_NEG) 140 #define BLUFI_TYPE_IS_CTRL_SET_WIFI_OPMODE(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_SET_WIFI_OPMODE) 141 #define BLUFI_TYPE_IS_CTRL_CONN_WIFI(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_CONN_TO_AP) 142 #define BLUFI_TYPE_IS_CTRL_DISCONN_WIFI(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_DISCONN_FROM_AP) 143 #define BLUFI_TYPE_IS_CTRL_GET_WIFI_STATUS(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_GET_WIFI_STATUS) 144 #define BLUFI_TYPE_IS_CTRL_DEAUTHENTICATE_STA(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_DEAUTHENTICATE_STA) 145 #define BLUFI_TYPE_IS_CTRL_GET_VERSION(type) (BLUFI_TYPE_IS_CTRL((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_CTRL_SUBTYPE_GET_VERSION) 146 147 #define BLUFI_TYPE_IS_DATA_NEG(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_NEG) 148 #define BLUFI_TYPE_IS_DATA_STA_BSSID(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_STA_BSSID) 149 #define BLUFI_TYPE_IS_DATA_STA_SSID(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_STA_SSID) 150 #define BLUFI_TYPE_IS_DATA_STA_PASSWD(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_STA_PASSWD) 151 #define BLUFI_TYPE_IS_DATA_SOFTAP_SSID(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_SSID) 152 #define BLUFI_TYPE_IS_DATA_SOFTAP_PASSWD(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_PASSWD) 153 #define BLUFI_TYPE_IS_DATA_SOFTAP_MAX_CONN_NUM(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_MAX_CONN_NUM) 154 #define BLUFI_TYPE_IS_DATA_SOFTAP_AUTH_MODE(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_AUTH_MODE) 155 #define BLUFI_TYPE_IS_DATA_SOFTAP_CHANNEL(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SOFTAP_CHANNEL) 156 #define BLUFI_TYPE_IS_DATA_USERNAME(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_USERNAME) 157 #define BLUFI_TYPE_IS_DATA_CA(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_CA) 158 #define BLUFI_TYPE_IS_DATA_CLEINT_CERT(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_CLIENT_CERT) 159 #define BLUFI_TYPE_IS_DATA_SERVER_CERT(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SERVER_CERT) 160 #define BLUFI_TYPE_IS_DATA_CLIENT_PRIV_KEY(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_CLIENT_PRIV_KEY) 161 #define BLUFI_TYPE_IS_DATA_SERVER_PRIV_KEY(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_SERVER_PRIV_KEY) 162 #define BLUFI_TYPE_IS_DATA_ERROR_INFO(type) (BLUFI_TYPE_IS_DATA((type)) && BLUFI_GET_SUBTYPE((type)) == BLUFI_TYPE_DATA_SUBTYPE_ERROR_INFO) 163 164 // packet frame control 165 #define BLUFI_FC_ENC_MASK 0x01 166 #define BLUFI_FC_CHECK_MASK 0x02 167 #define BLUFI_FC_DIR_MASK 0x04 168 #define BLUFI_FC_REQ_ACK_MASK 0x08 169 #define BLUFI_FC_FRAG_MASK 0x10 170 171 #define BLUFI_FC_ENC 0x01 172 #define BLUFI_FC_CHECK 0x02 173 #define BLUFI_FC_DIR_P2E 0x00 174 #define BLUFI_FC_DIR_E2P 0x04 175 #define BLUFI_FC_REQ_ACK 0x08 176 #define BLUFI_FC_FRAG 0x10 177 178 #define BLUFI_FC_IS_ENC(fc) ((fc) & BLUFI_FC_ENC_MASK) 179 #define BLUFI_FC_IS_CHECK(fc) ((fc) & BLUFI_FC_CHECK_MASK) 180 #define BLUFI_FC_IS_DIR_P2E(fc) ((fc) & BLUFI_FC_DIR_P2E_MASK) 181 #define BLUFI_FC_IS_DIR_E2P(fc) (!((fc) & BLUFI_DIR_P2E_MASK)) 182 #define BLUFI_FC_IS_REQ_ACK(fc) ((fc) & BLUFI_FC_REQ_ACK_MASK) 183 #define BLUFI_FC_IS_FRAG(fc) ((fc) & BLUFI_FC_FRAG_MASK) 184 185 /* default GATT MTU size over LE link 186 */ 187 #define GATT_DEF_BLE_MTU_SIZE 23 188 /* BLUFI HEADER + TOTAL(REMAIN) LENGTH + CRC + L2CAP RESERVED */ 189 #define BLUFI_MTU_RESERVED_SIZE (sizeof(struct blufi_hdr) + 2 + 2 + 3) 190 #define BLUFI_FRAG_DATA_DEFAULT_LEN (GATT_DEF_BLE_MTU_SIZE - BLUFI_MTU_RESERVED_SIZE) 191 192 //function declare 193 void btc_blufi_protocol_handler(uint8_t type, uint8_t *data, int len); 194 195 void btc_blufi_send_encap(uint8_t type, uint8_t *data, int data_len); 196 197 void btc_blufi_set_callbacks(esp_blufi_callbacks_t *callbacks); 198 199 void btc_blufi_cb_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src); 200 201 void btc_blufi_cb_deep_free(btc_msg_t *msg); 202 203 #endif ///BLUFI_INCLUDED == TRUE 204 205 #ifdef __cplusplus 206 } 207 #endif 208 209 #endif /* __BLUFI_INT_H__ */ 210