33 esp_attr_control_t control;
34 control.auto_rsp = ESP_GATT_AUTO_RSP;
36#if ESPHOME_LOG_LEVEL >= ESPHOME_LOG_LEVEL_VERBOSE
37 char uuid_buf[esp32_ble::UUID_STR_LEN];
39 ESP_LOGV(TAG,
"Creating descriptor - %s", uuid_buf);
43 this->permissions_, &this->value_, &control);
45 ESP_LOGE(TAG,
"esp_ble_gatts_add_char_descr failed: %d", err);
66 esp_ble_gatts_cb_param_t *param) {
68 case ESP_GATTS_ADD_CHAR_DESCR_EVT: {
70 this->characteristic_->get_service()->get_handle() == param->add_char_descr.service_handle &&
71 this->characteristic_ == this->characteristic_->get_service()->get_last_created_characteristic()) {
72 this->
handle_ = param->add_char_descr.attr_handle;
77 case ESP_GATTS_WRITE_EVT: {
78 if (this->
handle_ != param->write.handle)
80 if (param->write.len > this->value_.attr_max_len) {
81 ESP_LOGE(TAG,
"Size %d too large, must be no bigger than %d", param->write.len, this->value_.attr_max_len);
84 this->
value_.attr_len = param->write.len;
85 memcpy(this->
value_.attr_value, param->write.value, param->write.len);
87 (*this->
on_write_callback_)(std::span<const uint8_t>(param->write.value, param->write.len),
88 param->write.conn_id);