55  for (uint8_t i = 0; i < client_count; i++) {
 
   56    uint16_t client = clients[i];
 
   62    bool require_ack = entry->indicate;
 
   65      ESP_LOGW(TAG, 
"INDICATE acknowledgment is not yet supported (i.e. it works as a NOTIFY)");
 
   69                                                length, this->value_.data(), require_ack);
 
   71      ESP_LOGE(TAG, 
"esp_ble_gatts_send_indicate failed %d", err);
 
 
  174                                            esp_ble_gatts_cb_param_t *param) {
 
  176    case ESP_GATTS_ADD_CHAR_EVT: {
 
  178        this->
handle_ = param->add_char.attr_handle;
 
  181          descriptor->do_create(
this);
 
  188    case ESP_GATTS_READ_EVT: {
 
  189      if (param->read.handle != this->handle_)
 
  192      if (!param->read.need_rsp)
 
  199      uint16_t max_offset = 22;
 
  201      esp_gatt_rsp_t response;
 
  202      if (param->read.is_long) {
 
  203        if (this->
value_.size() - this->value_read_offset_ < max_offset) {
 
  207          memcpy(response.attr_value.value, this->value_.data() + response.attr_value.offset, response.attr_value.len);
 
  210          response.attr_value.len = max_offset;
 
  212          memcpy(response.attr_value.value, this->value_.data() + response.attr_value.offset, response.attr_value.len);
 
  216        response.attr_value.offset = 0;
 
  217        if (this->
value_.size() + 1 > max_offset) {
 
  218          response.attr_value.len = max_offset;
 
  221          response.attr_value.len = this->
value_.size();
 
  223        memcpy(response.attr_value.value, this->value_.data(), response.attr_value.len);
 
  226      response.attr_value.handle = this->
handle_;
 
  227      response.attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE;
 
  230          esp_ble_gatts_send_response(gatts_if, param->read.conn_id, param->read.trans_id, ESP_GATT_OK, &response);
 
  232        ESP_LOGE(TAG, 
"esp_ble_gatts_send_response failed: %d", err);
 
  236    case ESP_GATTS_WRITE_EVT: {
 
  237      if (this->
handle_ != param->write.handle)
 
  240      if (param->write.is_prep) {
 
  241        this->
value_.insert(this->
value_.end(), param->write.value, param->write.value + param->write.len);
 
  247      if (param->write.need_rsp) {
 
  248        esp_gatt_rsp_t response;
 
  250        response.attr_value.len = param->write.len;
 
  251        response.attr_value.handle = this->
handle_;
 
  252        response.attr_value.offset = param->write.offset;
 
  253        response.attr_value.auth_req = ESP_GATT_AUTH_REQ_NONE;
 
  254        memcpy(response.attr_value.value, param->write.value, param->write.len);
 
  257            esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, &response);
 
  260          ESP_LOGE(TAG, 
"esp_ble_gatts_send_response failed: %d", err);
 
  264      if (!param->write.is_prep) {
 
  273    case ESP_GATTS_EXEC_WRITE_EVT: {
 
  277      if (param->exec_write.exec_write_flag == ESP_GATT_PREP_WRITE_EXEC) {
 
  283          esp_ble_gatts_send_response(gatts_if, param->write.conn_id, param->write.trans_id, ESP_GATT_OK, 
nullptr);
 
  285        ESP_LOGE(TAG, 
"esp_ble_gatts_send_response failed: %d", err);
 
  294    descriptor->gatts_event_handler(event, gatts_if, param);