1 /* 2 * SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef __BTC_GATTS_H__ 8 #define __BTC_GATTS_H__ 9 10 #include "btc/btc_task.h" 11 #include "esp_bt_defs.h" 12 #include "esp_gatt_defs.h" 13 #include "esp_gatts_api.h" 14 #include "osi/future.h" 15 16 typedef enum { 17 BTC_GATTS_ACT_APP_REGISTER = 0, 18 BTC_GATTS_ACT_APP_UNREGISTER, 19 BTC_GATTS_ACT_CREATE_SERVICE, 20 BTC_GATTS_ACT_CREATE_ATTR_TAB, 21 BTC_GATTS_ACT_DELETE_SERVICE, 22 BTC_GATTS_ACT_START_SERVICE, 23 BTC_GATTS_ACT_STOP_SERVICE, 24 BTC_GATTS_ACT_ADD_INCLUDE_SERVICE, 25 BTC_GATTS_ACT_ADD_CHAR, 26 BTC_GATTS_ACT_ADD_CHAR_DESCR, 27 BTC_GATTS_ACT_SEND_INDICATE, 28 BTC_GATTS_ACT_SEND_RESPONSE, 29 BTC_GATTS_ACT_SET_ATTR_VALUE, 30 BTC_GATTS_ACT_OPEN, 31 BTC_GATTS_ACT_CLOSE, 32 BTC_GATTS_ACT_SEND_SERVICE_CHANGE, 33 BTC_GATTS_ACT_SHOW_LOCAL_DATABASE, 34 } btc_gatts_act_t; 35 36 /* btc_ble_gatts_args_t */ 37 typedef union { 38 //BTC_GATTS_ACT_APP_REGISTER = 0, 39 struct app_reg_args { 40 uint16_t app_id; 41 } app_reg; 42 43 //BTC_GATTS_ACT_APP_UNREGISTER, 44 struct app_unreg_args { 45 esp_gatt_if_t gatts_if; 46 } app_unreg; 47 48 //BTC_GATTS_ACT_CREATE_SERVICE, 49 struct create_srvc_args { 50 esp_gatt_if_t gatts_if; 51 esp_gatt_srvc_id_t service_id; 52 uint16_t num_handle; 53 } create_srvc; 54 55 //BTC_GATTS_ACT_CREATE_ATTR_TAB 56 struct create_attr_tab_args{ 57 esp_gatt_if_t gatts_if; 58 uint8_t srvc_inst_id; 59 uint16_t max_nb_attr; 60 esp_gatts_attr_db_t *gatts_attr_db; 61 }create_attr_tab; 62 63 //BTC_GATTS_ACT_DELETE_SERVICE, 64 struct delete_srvc_args { 65 uint16_t service_handle; 66 } delete_srvc; 67 68 //BTC_GATTS_ACT_START_SERVICE, 69 struct start_srvc_args { 70 uint16_t service_handle; 71 } start_srvc; 72 73 //BTC_GATTS_ACT_STOP_SERVICE, 74 struct stop_srvc_args { 75 uint16_t service_handle; 76 } stop_srvc; 77 78 //BTC_GATTS_ACT_ADD_INCLUDE_SERVICE, 79 struct add_incl_srvc_args { 80 uint16_t service_handle; 81 uint16_t included_service_handle; 82 } add_incl_srvc; 83 84 //BTC_GATTS_ACT_ADD_CHAR, 85 struct add_char_args { 86 uint16_t service_handle; 87 esp_bt_uuid_t char_uuid; 88 esp_gatt_perm_t perm; 89 esp_gatt_char_prop_t property; 90 esp_attr_control_t attr_control; 91 esp_attr_value_t char_val; 92 } add_char; 93 94 //BTC_GATTS_ACT_ADD_CHAR_DESCR, 95 struct add_descr_args { 96 uint16_t service_handle; 97 esp_bt_uuid_t descr_uuid; 98 esp_gatt_perm_t perm; 99 esp_attr_control_t attr_control; 100 esp_attr_value_t descr_val; 101 } add_descr; 102 103 //BTC_GATTS_ACT_SEND_INDICATE, 104 struct send_indicate_args { 105 uint16_t conn_id; 106 uint16_t attr_handle; 107 bool need_confirm; 108 uint16_t value_len; 109 uint8_t *value; 110 } send_ind; 111 112 //BTC_GATTS_ACT_SEND_RESPONSE, 113 struct send_rsp_args { 114 uint16_t conn_id; 115 uint32_t trans_id; 116 esp_gatt_status_t status; 117 esp_gatt_rsp_t *rsp; 118 } send_rsp; 119 120 //BTC_GATTS_SET_ATTR_VALUE 121 struct set_attr_val_args { 122 uint16_t handle; 123 uint16_t length; 124 uint8_t *value; 125 } set_attr_val; 126 127 //BTC_GATTS_ACT_OPEN, 128 struct open_args { 129 esp_gatt_if_t gatts_if; 130 esp_bd_addr_t remote_bda; 131 bool is_direct; 132 } open; 133 134 //BTC_GATTS_ACT_CLOSE, 135 struct close_args { 136 uint16_t conn_id; 137 } close; 138 139 //BTC_GATTS_ACT_SEND_SERVICE_CHANGE, 140 struct send_service_change_args { 141 esp_gatt_if_t gatts_if; 142 esp_bd_addr_t remote_bda; 143 } send_service_change; 144 145 } btc_ble_gatts_args_t; 146 147 typedef struct { 148 future_t *complete_future; 149 uint16_t svc_start_hdl; 150 esp_bt_uuid_t svc_uuid; 151 bool is_tab_creat_svc; 152 bool is_use_svc; 153 uint16_t num_handle; 154 uint16_t handle_idx; 155 uint16_t handles[ESP_GATT_ATTR_HANDLE_MAX]; 156 } esp_btc_creat_tab_t; 157 158 #if GATT_DYNAMIC_MEMORY == TRUE 159 extern esp_btc_creat_tab_t *btc_creat_tab_env_ptr; 160 #define btc_creat_tab_env (*btc_creat_tab_env_ptr) 161 #endif 162 163 void btc_gatts_call_handler(btc_msg_t *msg); 164 void btc_gatts_cb_handler(btc_msg_t *msg); 165 void btc_gatts_arg_deep_copy(btc_msg_t *msg, void *p_dest, void *p_src); 166 void btc_gatts_arg_deep_free(btc_msg_t *msg); 167 esp_gatt_status_t btc_gatts_get_attr_value(uint16_t attr_handle, uint16_t *length, uint8_t **value); 168 esp_gatt_status_t btc_gatts_show_local_database(void); 169 170 171 #endif /* __BTC_GATTS_H__ */ 172