1 // Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 #ifndef __ESP_GATT_DEFS_H__ 16 #define __ESP_GATT_DEFS_H__ 17 18 #include "esp_bt_defs.h" 19 20 #ifdef __cplusplus 21 extern "C" { 22 #endif 23 24 /// GATT INVALID UUID 25 #define ESP_GATT_ILLEGAL_UUID 0 26 /// GATT INVALID HANDLE 27 #define ESP_GATT_ILLEGAL_HANDLE 0 28 /// GATT attribute max handle 29 #define ESP_GATT_ATTR_HANDLE_MAX 100 30 #define ESP_GATT_MAX_READ_MULTI_HANDLES 10 /* Max attributes to read in one request */ 31 32 33 /**@{ 34 * All "ESP_GATT_UUID_xxx" is attribute types 35 */ 36 #define ESP_GATT_UUID_IMMEDIATE_ALERT_SVC 0x1802 /* Immediate alert Service*/ 37 #define ESP_GATT_UUID_LINK_LOSS_SVC 0x1803 /* Link Loss Service*/ 38 #define ESP_GATT_UUID_TX_POWER_SVC 0x1804 /* TX Power Service*/ 39 #define ESP_GATT_UUID_CURRENT_TIME_SVC 0x1805 /* Current Time Service Service*/ 40 #define ESP_GATT_UUID_REF_TIME_UPDATE_SVC 0x1806 /* Reference Time Update Service*/ 41 #define ESP_GATT_UUID_NEXT_DST_CHANGE_SVC 0x1807 /* Next DST Change Service*/ 42 #define ESP_GATT_UUID_GLUCOSE_SVC 0x1808 /* Glucose Service*/ 43 #define ESP_GATT_UUID_HEALTH_THERMOM_SVC 0x1809 /* Health Thermometer Service*/ 44 #define ESP_GATT_UUID_DEVICE_INFO_SVC 0x180A /* Device Information Service*/ 45 #define ESP_GATT_UUID_HEART_RATE_SVC 0x180D /* Heart Rate Service*/ 46 #define ESP_GATT_UUID_PHONE_ALERT_STATUS_SVC 0x180E /* Phone Alert Status Service*/ 47 #define ESP_GATT_UUID_BATTERY_SERVICE_SVC 0x180F /* Battery Service*/ 48 #define ESP_GATT_UUID_BLOOD_PRESSURE_SVC 0x1810 /* Blood Pressure Service*/ 49 #define ESP_GATT_UUID_ALERT_NTF_SVC 0x1811 /* Alert Notification Service*/ 50 #define ESP_GATT_UUID_HID_SVC 0x1812 /* HID Service*/ 51 #define ESP_GATT_UUID_SCAN_PARAMETERS_SVC 0x1813 /* Scan Parameters Service*/ 52 #define ESP_GATT_UUID_RUNNING_SPEED_CADENCE_SVC 0x1814 /* Running Speed and Cadence Service*/ 53 #define ESP_GATT_UUID_Automation_IO_SVC 0x1815 /* Automation IO Service*/ 54 #define ESP_GATT_UUID_CYCLING_SPEED_CADENCE_SVC 0x1816 /* Cycling Speed and Cadence Service*/ 55 #define ESP_GATT_UUID_CYCLING_POWER_SVC 0x1818 /* Cycling Power Service*/ 56 #define ESP_GATT_UUID_LOCATION_AND_NAVIGATION_SVC 0x1819 /* Location and Navigation Service*/ 57 #define ESP_GATT_UUID_ENVIRONMENTAL_SENSING_SVC 0x181A /* Environmental Sensing Service*/ 58 #define ESP_GATT_UUID_BODY_COMPOSITION 0x181B /* Body Composition Service*/ 59 #define ESP_GATT_UUID_USER_DATA_SVC 0x181C /* User Data Service*/ 60 #define ESP_GATT_UUID_WEIGHT_SCALE_SVC 0x181D /* Weight Scale Service*/ 61 #define ESP_GATT_UUID_BOND_MANAGEMENT_SVC 0x181E /* Bond Management Service*/ 62 #define ESP_GATT_UUID_CONT_GLUCOSE_MONITOR_SVC 0x181F /* Continuous Glucose Monitoring Service*/ 63 64 #define ESP_GATT_UUID_PRI_SERVICE 0x2800 65 #define ESP_GATT_UUID_SEC_SERVICE 0x2801 66 #define ESP_GATT_UUID_INCLUDE_SERVICE 0x2802 67 #define ESP_GATT_UUID_CHAR_DECLARE 0x2803 /* Characteristic Declaration*/ 68 69 #define ESP_GATT_UUID_CHAR_EXT_PROP 0x2900 /* Characteristic Extended Properties */ 70 #define ESP_GATT_UUID_CHAR_DESCRIPTION 0x2901 /* Characteristic User Description*/ 71 #define ESP_GATT_UUID_CHAR_CLIENT_CONFIG 0x2902 /* Client Characteristic Configuration */ 72 #define ESP_GATT_UUID_CHAR_SRVR_CONFIG 0x2903 /* Server Characteristic Configuration */ 73 #define ESP_GATT_UUID_CHAR_PRESENT_FORMAT 0x2904 /* Characteristic Presentation Format*/ 74 #define ESP_GATT_UUID_CHAR_AGG_FORMAT 0x2905 /* Characteristic Aggregate Format*/ 75 #define ESP_GATT_UUID_CHAR_VALID_RANGE 0x2906 /* Characteristic Valid Range */ 76 #define ESP_GATT_UUID_EXT_RPT_REF_DESCR 0x2907 /* External Report Reference */ 77 #define ESP_GATT_UUID_RPT_REF_DESCR 0x2908 /* Report Reference */ 78 #define ESP_GATT_UUID_NUM_DIGITALS_DESCR 0x2909 /* Number of Digitals */ 79 #define ESP_GATT_UUID_VALUE_TRIGGER_DESCR 0x290A /* Value Trigger Setting */ 80 #define ESP_GATT_UUID_ENV_SENSING_CONFIG_DESCR 0x290B /* Environmental Sensing Configuration */ 81 #define ESP_GATT_UUID_ENV_SENSING_MEASUREMENT_DESCR 0x290C /* Environmental Sensing Measurement */ 82 #define ESP_GATT_UUID_ENV_SENSING_TRIGGER_DESCR 0x290D /* Environmental Sensing Trigger Setting */ 83 #define ESP_GATT_UUID_TIME_TRIGGER_DESCR 0x290E /* Time Trigger Setting */ 84 85 /* GAP Profile Attributes */ 86 #define ESP_GATT_UUID_GAP_DEVICE_NAME 0x2A00 87 #define ESP_GATT_UUID_GAP_ICON 0x2A01 88 #define ESP_GATT_UUID_GAP_PREF_CONN_PARAM 0x2A04 89 #define ESP_GATT_UUID_GAP_CENTRAL_ADDR_RESOL 0x2AA6 90 91 /* Attribute Profile Attribute UUID */ 92 #define ESP_GATT_UUID_GATT_SRV_CHGD 0x2A05 93 94 /* Link ESP_Loss Service */ 95 #define ESP_GATT_UUID_ALERT_LEVEL 0x2A06 /* Alert Level */ 96 #define ESP_GATT_UUID_TX_POWER_LEVEL 0x2A07 /* TX power level */ 97 98 /* Current Time Service */ 99 #define ESP_GATT_UUID_CURRENT_TIME 0x2A2B /* Current Time */ 100 #define ESP_GATT_UUID_LOCAL_TIME_INFO 0x2A0F /* Local time info */ 101 #define ESP_GATT_UUID_REF_TIME_INFO 0x2A14 /* reference time information */ 102 103 /* Network availability Profile */ 104 #define ESP_GATT_UUID_NW_STATUS 0x2A18 /* network availability status */ 105 #define ESP_GATT_UUID_NW_TRIGGER 0x2A1A /* Network availability trigger */ 106 107 /* Phone alert */ 108 #define ESP_GATT_UUID_ALERT_STATUS 0x2A3F /* alert status */ 109 #define ESP_GATT_UUID_RINGER_CP 0x2A40 /* ringer control point */ 110 #define ESP_GATT_UUID_RINGER_SETTING 0x2A41 /* ringer setting */ 111 112 /* Glucose Service */ 113 #define ESP_GATT_UUID_GM_MEASUREMENT 0x2A18 114 #define ESP_GATT_UUID_GM_CONTEXT 0x2A34 115 #define ESP_GATT_UUID_GM_CONTROL_POINT 0x2A52 116 #define ESP_GATT_UUID_GM_FEATURE 0x2A51 117 118 /* device information characteristic */ 119 #define ESP_GATT_UUID_SYSTEM_ID 0x2A23 120 #define ESP_GATT_UUID_MODEL_NUMBER_STR 0x2A24 121 #define ESP_GATT_UUID_SERIAL_NUMBER_STR 0x2A25 122 #define ESP_GATT_UUID_FW_VERSION_STR 0x2A26 123 #define ESP_GATT_UUID_HW_VERSION_STR 0x2A27 124 #define ESP_GATT_UUID_SW_VERSION_STR 0x2A28 125 #define ESP_GATT_UUID_MANU_NAME 0x2A29 126 #define ESP_GATT_UUID_IEEE_DATA 0x2A2A 127 #define ESP_GATT_UUID_PNP_ID 0x2A50 128 129 /* HID characteristics */ 130 #define ESP_GATT_UUID_HID_INFORMATION 0x2A4A 131 #define ESP_GATT_UUID_HID_REPORT_MAP 0x2A4B 132 #define ESP_GATT_UUID_HID_CONTROL_POINT 0x2A4C 133 #define ESP_GATT_UUID_HID_REPORT 0x2A4D 134 #define ESP_GATT_UUID_HID_PROTO_MODE 0x2A4E 135 #define ESP_GATT_UUID_HID_BT_KB_INPUT 0x2A22 136 #define ESP_GATT_UUID_HID_BT_KB_OUTPUT 0x2A32 137 #define ESP_GATT_UUID_HID_BT_MOUSE_INPUT 0x2A33 138 139 /// Heart Rate Measurement 140 #define ESP_GATT_HEART_RATE_MEAS 0x2A37 141 /// Body Sensor Location 142 #define ESP_GATT_BODY_SENSOR_LOCATION 0x2A38 143 /// Heart Rate Control Point 144 #define ESP_GATT_HEART_RATE_CNTL_POINT 0x2A39 145 146 /* Battery Service characteristics */ 147 #define ESP_GATT_UUID_BATTERY_LEVEL 0x2A19 148 149 /* Sensor Service */ 150 #define ESP_GATT_UUID_SC_CONTROL_POINT 0x2A55 151 #define ESP_GATT_UUID_SENSOR_LOCATION 0x2A5D 152 153 /* Runners speed and cadence service */ 154 #define ESP_GATT_UUID_RSC_MEASUREMENT 0x2A53 155 #define ESP_GATT_UUID_RSC_FEATURE 0x2A54 156 157 /* Cycling speed and cadence service */ 158 #define ESP_GATT_UUID_CSC_MEASUREMENT 0x2A5B 159 #define ESP_GATT_UUID_CSC_FEATURE 0x2A5C 160 161 /* Scan ESP_Parameter characteristics */ 162 #define ESP_GATT_UUID_SCAN_INT_WINDOW 0x2A4F 163 #define ESP_GATT_UUID_SCAN_REFRESH 0x2A31 164 /** 165 * @} 166 */ 167 168 /* relate to BTA_GATT_PREP_WRITE_xxx in bta/bta_gatt_api.h */ 169 /// Attribute write data type from the client 170 typedef enum { 171 ESP_GATT_PREP_WRITE_CANCEL = 0x00, /*!< Prepare write cancel */ /* relate to BTA_GATT_PREP_WRITE_CANCEL in bta/bta_gatt_api.h */ 172 ESP_GATT_PREP_WRITE_EXEC = 0x01, /*!< Prepare write execute */ /* relate to BTA_GATT_PREP_WRITE_EXEC in bta/bta_gatt_api.h */ 173 } esp_gatt_prep_write_type; 174 175 /* relate to BTA_GATT_xxx in bta/bta_gatt_api.h */ 176 /** 177 * @brief GATT success code and error codes 178 */ 179 typedef enum { 180 ESP_GATT_OK = 0x0, /* relate to BTA_GATT_OK in bta/bta_gatt_api.h */ 181 ESP_GATT_INVALID_HANDLE = 0x01, /* 0x0001 */ /* relate to BTA_GATT_INVALID_HANDLE in bta/bta_gatt_api.h */ 182 ESP_GATT_READ_NOT_PERMIT = 0x02, /* 0x0002 */ /* relate to BTA_GATT_READ_NOT_PERMIT in bta/bta_gatt_api.h */ 183 ESP_GATT_WRITE_NOT_PERMIT = 0x03, /* 0x0003 */ /* relate to BTA_GATT_WRITE_NOT_PERMIT in bta/bta_gatt_api.h */ 184 ESP_GATT_INVALID_PDU = 0x04, /* 0x0004 */ /* relate to BTA_GATT_INVALID_PDU in bta/bta_gatt_api.h */ 185 ESP_GATT_INSUF_AUTHENTICATION = 0x05, /* 0x0005 */ /* relate to BTA_GATT_INSUF_AUTHENTICATION in bta/bta_gatt_api.h */ 186 ESP_GATT_REQ_NOT_SUPPORTED = 0x06, /* 0x0006 */ /* relate to BTA_GATT_REQ_NOT_SUPPORTED in bta/bta_gatt_api.h */ 187 ESP_GATT_INVALID_OFFSET = 0x07, /* 0x0007 */ /* relate to BTA_GATT_INVALID_OFFSET in bta/bta_gatt_api.h */ 188 ESP_GATT_INSUF_AUTHORIZATION = 0x08, /* 0x0008 */ /* relate to BTA_GATT_INSUF_AUTHORIZATION in bta/bta_gatt_api.h */ 189 ESP_GATT_PREPARE_Q_FULL = 0x09, /* 0x0009 */ /* relate to BTA_GATT_PREPARE_Q_FULL in bta/bta_gatt_api.h */ 190 ESP_GATT_NOT_FOUND = 0x0a, /* 0x000a */ /* relate to BTA_GATT_NOT_FOUND in bta/bta_gatt_api.h */ 191 ESP_GATT_NOT_LONG = 0x0b, /* 0x000b */ /* relate to BTA_GATT_NOT_LONG in bta/bta_gatt_api.h */ 192 ESP_GATT_INSUF_KEY_SIZE = 0x0c, /* 0x000c */ /* relate to BTA_GATT_INSUF_KEY_SIZE in bta/bta_gatt_api.h */ 193 ESP_GATT_INVALID_ATTR_LEN = 0x0d, /* 0x000d */ /* relate to BTA_GATT_INVALID_ATTR_LEN in bta/bta_gatt_api.h */ 194 ESP_GATT_ERR_UNLIKELY = 0x0e, /* 0x000e */ /* relate to BTA_GATT_ERR_UNLIKELY in bta/bta_gatt_api.h */ 195 ESP_GATT_INSUF_ENCRYPTION = 0x0f, /* 0x000f */ /* relate to BTA_GATT_INSUF_ENCRYPTION in bta/bta_gatt_api.h */ 196 ESP_GATT_UNSUPPORT_GRP_TYPE = 0x10, /* 0x0010 */ /* relate to BTA_GATT_UNSUPPORT_GRP_TYPE in bta/bta_gatt_api.h */ 197 ESP_GATT_INSUF_RESOURCE = 0x11, /* 0x0011 */ /* relate to BTA_GATT_INSUF_RESOURCE in bta/bta_gatt_api.h */ 198 199 ESP_GATT_NO_RESOURCES = 0x80, /* 0x80 */ /* relate to BTA_GATT_NO_RESOURCES in bta/bta_gatt_api.h */ 200 ESP_GATT_INTERNAL_ERROR = 0x81, /* 0x81 */ /* relate to BTA_GATT_INTERNAL_ERROR in bta/bta_gatt_api.h */ 201 ESP_GATT_WRONG_STATE = 0x82, /* 0x82 */ /* relate to BTA_GATT_WRONG_STATE in bta/bta_gatt_api.h */ 202 ESP_GATT_DB_FULL = 0x83, /* 0x83 */ /* relate to BTA_GATT_DB_FULL in bta/bta_gatt_api.h */ 203 ESP_GATT_BUSY = 0x84, /* 0x84 */ /* relate to BTA_GATT_BUSY in bta/bta_gatt_api.h */ 204 ESP_GATT_ERROR = 0x85, /* 0x85 */ /* relate to BTA_GATT_ERROR in bta/bta_gatt_api.h */ 205 ESP_GATT_CMD_STARTED = 0x86, /* 0x86 */ /* relate to BTA_GATT_CMD_STARTED in bta/bta_gatt_api.h */ 206 ESP_GATT_ILLEGAL_PARAMETER = 0x87, /* 0x87 */ /* relate to BTA_GATT_ILLEGAL_PARAMETER in bta/bta_gatt_api.h */ 207 ESP_GATT_PENDING = 0x88, /* 0x88 */ /* relate to BTA_GATT_PENDING in bta/bta_gatt_api.h */ 208 ESP_GATT_AUTH_FAIL = 0x89, /* 0x89 */ /* relate to BTA_GATT_AUTH_FAIL in bta/bta_gatt_api.h */ 209 ESP_GATT_MORE = 0x8a, /* 0x8a */ /* relate to BTA_GATT_MORE in bta/bta_gatt_api.h */ 210 ESP_GATT_INVALID_CFG = 0x8b, /* 0x8b */ /* relate to BTA_GATT_INVALID_CFG in bta/bta_gatt_api.h */ 211 ESP_GATT_SERVICE_STARTED = 0x8c, /* 0x8c */ /* relate to BTA_GATT_SERVICE_STARTED in bta/bta_gatt_api.h */ 212 ESP_GATT_ENCRYPED_MITM = ESP_GATT_OK, /* relate to BTA_GATT_ENCRYPED_MITM in bta/bta_gatt_api.h */ 213 ESP_GATT_ENCRYPED_NO_MITM = 0x8d, /* 0x8d */ /* relate to BTA_GATT_ENCRYPED_NO_MITM in bta/bta_gatt_api.h */ 214 ESP_GATT_NOT_ENCRYPTED = 0x8e, /* 0x8e */ /* relate to BTA_GATT_NOT_ENCRYPTED in bta/bta_gatt_api.h */ 215 ESP_GATT_CONGESTED = 0x8f, /* 0x8f */ /* relate to BTA_GATT_CONGESTED in bta/bta_gatt_api.h */ 216 ESP_GATT_DUP_REG = 0x90, /* 0x90 */ /* relate to BTA_GATT_DUP_REG in bta/bta_gatt_api.h */ 217 ESP_GATT_ALREADY_OPEN = 0x91, /* 0x91 */ /* relate to BTA_GATT_ALREADY_OPEN in bta/bta_gatt_api.h */ 218 ESP_GATT_CANCEL = 0x92, /* 0x92 */ /* relate to BTA_GATT_CANCEL in bta/bta_gatt_api.h */ 219 /* 0xE0 ~ 0xFC reserved for future use */ 220 ESP_GATT_STACK_RSP = 0xe0, /* 0xe0 */ /* relate to BTA_GATT_STACK_RSP in bta/bta_gatt_api.h */ 221 ESP_GATT_APP_RSP = 0xe1, /* 0xe1 */ /* relate to BTA_GATT_APP_RSP in bta/bta_gatt_api.h */ 222 //Error caused by customer application or stack bug 223 ESP_GATT_UNKNOWN_ERROR = 0xef, /* 0xef */ /* relate to BTA_GATT_UNKNOWN_ERROR in bta/bta_gatt_api.h */ 224 ESP_GATT_CCC_CFG_ERR = 0xfd, /* 0xFD Client Characteristic Configuration Descriptor Improperly Configured */ /* relate to BTA_GATT_CCC_CFG_ERR in bta/bta_gatt_api.h */ 225 ESP_GATT_PRC_IN_PROGRESS = 0xfe, /* 0xFE Procedure Already in progress */ /* relate to BTA_GATT_PRC_IN_PROGRESS in bta/bta_gatt_api.h */ 226 ESP_GATT_OUT_OF_RANGE = 0xff, /* 0xFFAttribute value out of range */ /* relate to BTA_GATT_OUT_OF_RANGE in bta/bta_gatt_api.h */ 227 } esp_gatt_status_t; 228 229 /* relate to BTA_GATT_CONN_xxx in bta/bta_gatt_api.h */ 230 /** 231 * @brief Gatt Connection reason enum 232 */ 233 typedef enum { 234 ESP_GATT_CONN_UNKNOWN = 0, /*!< Gatt connection unknown */ /* relate to BTA_GATT_CONN_UNKNOWN in bta/bta_gatt_api.h */ 235 ESP_GATT_CONN_L2C_FAILURE = 1, /*!< General L2cap failure */ /* relate to BTA_GATT_CONN_L2C_FAILURE in bta/bta_gatt_api.h */ 236 ESP_GATT_CONN_TIMEOUT = 0x08, /*!< Connection timeout */ /* relate to BTA_GATT_CONN_TIMEOUT in bta/bta_gatt_api.h */ 237 ESP_GATT_CONN_TERMINATE_PEER_USER = 0x13, /*!< Connection terminate by peer user */ /* relate to BTA_GATT_CONN_TERMINATE_PEER_USER in bta/bta_gatt_api.h */ 238 ESP_GATT_CONN_TERMINATE_LOCAL_HOST = 0x16, /*!< Connection terminated by local host */ /* relate to BTA_GATT_CONN_TERMINATE_LOCAL_HOST in bta/bta_gatt_api.h */ 239 ESP_GATT_CONN_FAIL_ESTABLISH = 0x3e, /*!< Connection fail to establish */ /* relate to BTA_GATT_CONN_FAIL_ESTABLISH in bta/bta_gatt_api.h */ 240 ESP_GATT_CONN_LMP_TIMEOUT = 0x22, /*!< Connection fail for LMP response tout */ /* relate to BTA_GATT_CONN_LMP_TIMEOUT in bta/bta_gatt_api.h */ 241 ESP_GATT_CONN_CONN_CANCEL = 0x0100, /*!< L2CAP connection cancelled */ /* relate to BTA_GATT_CONN_CONN_CANCEL in bta/bta_gatt_api.h */ 242 ESP_GATT_CONN_NONE = 0x0101 /*!< No connection to cancel */ /* relate to BTA_GATT_CONN_NONE in bta/bta_gatt_api.h */ 243 } esp_gatt_conn_reason_t; 244 245 /** 246 * @brief Gatt id, include uuid and instance id 247 */ 248 typedef struct { 249 esp_bt_uuid_t uuid; /*!< UUID */ 250 uint8_t inst_id; /*!< Instance id */ 251 } __attribute__((packed)) esp_gatt_id_t; 252 253 /** 254 * @brief Gatt service id, include id 255 * (uuid and instance id) and primary flag 256 */ 257 typedef struct { 258 esp_gatt_id_t id; /*!< Gatt id, include uuid and instance */ 259 bool is_primary; /*!< This service is primary or not */ 260 } __attribute__((packed)) esp_gatt_srvc_id_t; 261 262 /* relate to BTA_GATT_AUTH_REQ_xxx in bta/bta_gatt_api.h */ 263 /** 264 * @brief Gatt authentication request type 265 */ 266 typedef enum { 267 ESP_GATT_AUTH_REQ_NONE = 0, /* relate to BTA_GATT_AUTH_REQ_NONE in bta/bta_gatt_api.h */ 268 ESP_GATT_AUTH_REQ_NO_MITM = 1, /* unauthenticated encryption */ /* relate to BTA_GATT_AUTH_REQ_NO_MITM in bta/bta_gatt_api.h */ 269 ESP_GATT_AUTH_REQ_MITM = 2, /* authenticated encryption */ /* relate to BTA_GATT_AUTH_REQ_MITM in bta/bta_gatt_api.h */ 270 ESP_GATT_AUTH_REQ_SIGNED_NO_MITM = 3, /* relate to BTA_GATT_AUTH_REQ_SIGNED_NO_MITM in bta/bta_gatt_api.h */ 271 ESP_GATT_AUTH_REQ_SIGNED_MITM = 4, /* relate to BTA_GATT_AUTH_REQ_SIGNED_MITM in bta/bta_gatt_api.h */ 272 } esp_gatt_auth_req_t; 273 274 /* relate to BTA_GATT_PERM_xxx in bta/bta_gatt_api.h */ 275 /** 276 * @brief Attribute permissions 277 */ 278 #define ESP_GATT_PERM_READ (1 << 0) /* bit 0 - 0x0001 */ /* relate to BTA_GATT_PERM_READ in bta/bta_gatt_api.h */ 279 #define ESP_GATT_PERM_READ_ENCRYPTED (1 << 1) /* bit 1 - 0x0002 */ /* relate to BTA_GATT_PERM_READ_ENCRYPTED in bta/bta_gatt_api.h */ 280 #define ESP_GATT_PERM_READ_ENC_MITM (1 << 2) /* bit 2 - 0x0004 */ /* relate to BTA_GATT_PERM_READ_ENC_MITM in bta/bta_gatt_api.h */ 281 #define ESP_GATT_PERM_WRITE (1 << 4) /* bit 4 - 0x0010 */ /* relate to BTA_GATT_PERM_WRITE in bta/bta_gatt_api.h */ 282 #define ESP_GATT_PERM_WRITE_ENCRYPTED (1 << 5) /* bit 5 - 0x0020 */ /* relate to BTA_GATT_PERM_WRITE_ENCRYPTED in bta/bta_gatt_api.h */ 283 #define ESP_GATT_PERM_WRITE_ENC_MITM (1 << 6) /* bit 6 - 0x0040 */ /* relate to BTA_GATT_PERM_WRITE_ENC_MITM in bta/bta_gatt_api.h */ 284 #define ESP_GATT_PERM_WRITE_SIGNED (1 << 7) /* bit 7 - 0x0080 */ /* relate to BTA_GATT_PERM_WRITE_SIGNED in bta/bta_gatt_api.h */ 285 #define ESP_GATT_PERM_WRITE_SIGNED_MITM (1 << 8) /* bit 8 - 0x0100 */ /* relate to BTA_GATT_PERM_WRITE_SIGNED_MITM in bta/bta_gatt_api.h */ 286 #define ESP_GATT_PERM_READ_AUTHORIZATION (1 << 9) /* bit 9 - 0x0200 */ 287 #define ESP_GATT_PERM_WRITE_AUTHORIZATION (1 << 10) /* bit 10 - 0x0400 */ 288 typedef uint16_t esp_gatt_perm_t; 289 290 /* relate to BTA_GATT_CHAR_PROP_BIT_xxx in bta/bta_gatt_api.h */ 291 /* definition of characteristic properties */ 292 #define ESP_GATT_CHAR_PROP_BIT_BROADCAST (1 << 0) /* 0x01 */ /* relate to BTA_GATT_CHAR_PROP_BIT_BROADCAST in bta/bta_gatt_api.h */ 293 #define ESP_GATT_CHAR_PROP_BIT_READ (1 << 1) /* 0x02 */ /* relate to BTA_GATT_CHAR_PROP_BIT_READ in bta/bta_gatt_api.h */ 294 #define ESP_GATT_CHAR_PROP_BIT_WRITE_NR (1 << 2) /* 0x04 */ /* relate to BTA_GATT_CHAR_PROP_BIT_WRITE_NR in bta/bta_gatt_api.h */ 295 #define ESP_GATT_CHAR_PROP_BIT_WRITE (1 << 3) /* 0x08 */ /* relate to BTA_GATT_CHAR_PROP_BIT_WRITE in bta/bta_gatt_api.h */ 296 #define ESP_GATT_CHAR_PROP_BIT_NOTIFY (1 << 4) /* 0x10 */ /* relate to BTA_GATT_CHAR_PROP_BIT_NOTIFY in bta/bta_gatt_api.h */ 297 #define ESP_GATT_CHAR_PROP_BIT_INDICATE (1 << 5) /* 0x20 */ /* relate to BTA_GATT_CHAR_PROP_BIT_INDICATE in bta/bta_gatt_api.h */ 298 #define ESP_GATT_CHAR_PROP_BIT_AUTH (1 << 6) /* 0x40 */ /* relate to BTA_GATT_CHAR_PROP_BIT_AUTH in bta/bta_gatt_api.h */ 299 #define ESP_GATT_CHAR_PROP_BIT_EXT_PROP (1 << 7) /* 0x80 */ /* relate to BTA_GATT_CHAR_PROP_BIT_EXT_PROP in bta/bta_gatt_api.h */ 300 typedef uint8_t esp_gatt_char_prop_t; 301 302 /// GATT maximum attribute length 303 #define ESP_GATT_MAX_ATTR_LEN 600 //as same as GATT_MAX_ATTR_LEN 304 305 typedef enum { 306 ESP_GATT_SERVICE_FROM_REMOTE_DEVICE = 0, /* relate to BTA_GATTC_SERVICE_INFO_FROM_REMOTE_DEVICE in bta_gattc_int.h */ 307 ESP_GATT_SERVICE_FROM_NVS_FLASH = 1, /* relate to BTA_GATTC_SERVICE_INFO_FROM_NVS_FLASH in bta_gattc_int.h */ 308 ESP_GATT_SERVICE_FROM_UNKNOWN = 2, /* relate to BTA_GATTC_SERVICE_INFO_FROM_UNKNOWN in bta_gattc_int.h */ 309 } esp_service_source_t; 310 311 /** 312 * @brief Attribute description (used to create database) 313 */ 314 typedef struct 315 { 316 uint16_t uuid_length; /*!< UUID length */ 317 uint8_t *uuid_p; /*!< UUID value */ 318 uint16_t perm; /*!< Attribute permission */ 319 uint16_t max_length; /*!< Maximum length of the element*/ 320 uint16_t length; /*!< Current length of the element*/ 321 uint8_t *value; /*!< Element value array*/ 322 } esp_attr_desc_t; 323 324 325 /** 326 * @brief attribute auto response flag 327 */ 328 typedef struct 329 { 330 #define ESP_GATT_RSP_BY_APP 0 331 #define ESP_GATT_AUTO_RSP 1 332 /** 333 * @brief if auto_rsp set to ESP_GATT_RSP_BY_APP, means the response of Write/Read operation will by replied by application. 334 if auto_rsp set to ESP_GATT_AUTO_RSP, means the response of Write/Read operation will be replied by GATT stack automatically. 335 */ 336 uint8_t auto_rsp; 337 } esp_attr_control_t; 338 339 340 /** 341 * @brief attribute type added to the gatt server database 342 */ 343 typedef struct 344 { 345 esp_attr_control_t attr_control; /*!< The attribute control type */ 346 esp_attr_desc_t att_desc; /*!< The attribute type */ 347 } esp_gatts_attr_db_t; 348 349 350 /** 351 * @brief set the attribute value type 352 */ 353 typedef struct 354 { 355 uint16_t attr_max_len; /*!< attribute max value length */ 356 uint16_t attr_len; /*!< attribute current value length */ 357 uint8_t *attr_value; /*!< the pointer to attribute value */ 358 } esp_attr_value_t; 359 360 361 /** 362 * @brief Gatt include service entry element 363 */ 364 typedef struct 365 { 366 uint16_t start_hdl; /*!< Gatt start handle value of included service */ 367 uint16_t end_hdl; /*!< Gatt end handle value of included service */ 368 uint16_t uuid; /*!< Gatt attribute value UUID of included service */ 369 } esp_gatts_incl_svc_desc_t; /*!< Gatt include service entry element */ 370 371 /** 372 * @brief Gatt include 128 bit service entry element 373 */ 374 typedef struct 375 { 376 uint16_t start_hdl; /*!< Gatt start handle value of included 128 bit service */ 377 uint16_t end_hdl; /*!< Gatt end handle value of included 128 bit service */ 378 } esp_gatts_incl128_svc_desc_t; /*!< Gatt include 128 bit service entry element */ 379 380 /// Gatt attribute value 381 typedef struct { 382 uint8_t value[ESP_GATT_MAX_ATTR_LEN]; /*!< Gatt attribute value */ 383 uint16_t handle; /*!< Gatt attribute handle */ 384 uint16_t offset; /*!< Gatt attribute value offset */ 385 uint16_t len; /*!< Gatt attribute value length */ 386 uint8_t auth_req; /*!< Gatt authentication request */ 387 } esp_gatt_value_t; 388 389 /// GATT remote read request response type 390 typedef union { 391 esp_gatt_value_t attr_value; /*!< Gatt attribute structure */ 392 uint16_t handle; /*!< Gatt attribute handle */ 393 } esp_gatt_rsp_t; 394 395 /** 396 * @brief Gatt write type 397 */ 398 typedef enum { 399 ESP_GATT_WRITE_TYPE_NO_RSP = 1, /*!< Gatt write attribute need no response */ 400 ESP_GATT_WRITE_TYPE_RSP, /*!< Gatt write attribute need remote response */ 401 } esp_gatt_write_type_t; 402 403 /** 404 * @brief Connection parameters information 405 */ 406 typedef struct { 407 uint16_t interval; /*!< connection interval */ 408 uint16_t latency; /*!< Slave latency for the connection in number of connection events. Range: 0x0000 to 0x01F3 */ 409 uint16_t timeout; /*!< Supervision timeout for the LE Link. Range: 0x000A to 0x0C80. 410 Mandatory Range: 0x000A to 0x0C80 Time = N * 10 msec 411 Time Range: 100 msec to 32 seconds */ 412 } esp_gatt_conn_params_t; 413 414 #define ESP_GATT_IF_NONE 0xff /*!< If callback report gattc_if/gatts_if as this macro, means this event is not correspond to any app */ 415 416 typedef uint8_t esp_gatt_if_t; /*!< Gatt interface type, different application on GATT client use different gatt_if */ 417 418 /** 419 * @brief the type of attribute element 420 */ 421 typedef enum { 422 ESP_GATT_DB_PRIMARY_SERVICE, /*!< Gattc primary service attribute type in the cache */ 423 ESP_GATT_DB_SECONDARY_SERVICE, /*!< Gattc secondary service attribute type in the cache */ 424 ESP_GATT_DB_CHARACTERISTIC, /*!< Gattc characteristic attribute type in the cache */ 425 ESP_GATT_DB_DESCRIPTOR, /*!< Gattc characteristic descriptor attribute type in the cache */ 426 ESP_GATT_DB_INCLUDED_SERVICE, /*!< Gattc include service attribute type in the cache */ 427 ESP_GATT_DB_ALL, /*!< Gattc all the attribute (primary service & secondary service & include service & char & descriptor) type in the cache */ 428 } esp_gatt_db_attr_type_t; /*!< Gattc attribute type element */ 429 430 /** 431 * @brief read multiple attribute 432 */ 433 typedef struct { 434 uint8_t num_attr; /*!< The number of the attribute */ 435 uint16_t handles[ESP_GATT_MAX_READ_MULTI_HANDLES]; /*!< The handles list */ 436 } esp_gattc_multi_t; /*!< The gattc multiple read element */ 437 438 /** 439 * @brief data base attribute element 440 */ 441 typedef struct { 442 esp_gatt_db_attr_type_t type; /*!< The attribute type */ 443 uint16_t attribute_handle; /*!< The attribute handle, it's valid for all of the type */ 444 uint16_t start_handle; /*!< The service start handle, it's valid only when the type = ESP_GATT_DB_PRIMARY_SERVICE or ESP_GATT_DB_SECONDARY_SERVICE */ 445 uint16_t end_handle; /*!< The service end handle, it's valid only when the type = ESP_GATT_DB_PRIMARY_SERVICE or ESP_GATT_DB_SECONDARY_SERVICE */ 446 esp_gatt_char_prop_t properties; /*!< The characteristic properties, it's valid only when the type = ESP_GATT_DB_CHARACTERISTIC */ 447 esp_bt_uuid_t uuid; /*!< The attribute uuid, it's valid for all of the type */ 448 } esp_gattc_db_elem_t; /*!< The gattc service data base element in the cache */ 449 450 /** 451 * @brief service element 452 */ 453 typedef struct { 454 bool is_primary; /*!< The service flag, true if the service is primary service, else is secondary service */ 455 uint16_t start_handle; /*!< The start handle of the service */ 456 uint16_t end_handle; /*!< The end handle of the service */ 457 esp_bt_uuid_t uuid; /*!< The uuid of the service */ 458 } esp_gattc_service_elem_t; /*!< The gattc service element */ 459 460 /** 461 * @brief characteristic element 462 */ 463 typedef struct { 464 uint16_t char_handle; /*!< The characteristic handle */ 465 esp_gatt_char_prop_t properties; /*!< The characteristic properties */ 466 esp_bt_uuid_t uuid; /*!< The characteristic uuid */ 467 } esp_gattc_char_elem_t; /*!< The gattc characteristic element */ 468 469 /** 470 * @brief descriptor element 471 */ 472 typedef struct { 473 uint16_t handle; /*!< The characteristic descriptor handle */ 474 esp_bt_uuid_t uuid; /*!< The characteristic descriptor uuid */ 475 } esp_gattc_descr_elem_t; /*!< The gattc descriptor type element */ 476 477 /** 478 * @brief include service element 479 */ 480 typedef struct { 481 uint16_t handle; /*!< The include service current attribute handle */ 482 uint16_t incl_srvc_s_handle; /*!< The start handle of the service which has been included */ 483 uint16_t incl_srvc_e_handle; /*!< The end handle of the service which has been included */ 484 esp_bt_uuid_t uuid; /*!< The include service uuid */ 485 } esp_gattc_incl_svc_elem_t; /*!< The gattc include service element */ 486 487 488 #ifdef __cplusplus 489 } 490 #endif 491 492 #endif /* __ESP_GATT_DEFS_H__ */ 493