mirror of
https://github.com/esphome/esphome.git
synced 2025-09-26 15:12:21 +01:00
preen
This commit is contained in:
@@ -124,7 +124,7 @@ message HelloResponse {
|
|||||||
// A string identifying the server (ESP); like client info this may be empty
|
// A string identifying the server (ESP); like client info this may be empty
|
||||||
// and only exists for debugging/logging purposes.
|
// and only exists for debugging/logging purposes.
|
||||||
// For example "ESPHome v1.10.0 on ESP8266"
|
// For example "ESPHome v1.10.0 on ESP8266"
|
||||||
string server_info = 3;
|
string server_info = 3 [(pointer_to_buffer) = true];
|
||||||
|
|
||||||
// The name of the server (App.get_name())
|
// The name of the server (App.get_name())
|
||||||
string name = 4;
|
string name = 4;
|
||||||
@@ -139,7 +139,7 @@ message AuthenticationRequest {
|
|||||||
option (ifdef) = "USE_API_PASSWORD";
|
option (ifdef) = "USE_API_PASSWORD";
|
||||||
|
|
||||||
// The password to log in with
|
// The password to log in with
|
||||||
string password = 1;
|
string password = 1 [(pointer_to_buffer) = true];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Confirmation of successful connection. After this the connection is available for all traffic.
|
// Confirmation of successful connection. After this the connection is available for all traffic.
|
||||||
@@ -824,7 +824,7 @@ message GetTimeResponse {
|
|||||||
option (no_delay) = true;
|
option (no_delay) = true;
|
||||||
|
|
||||||
fixed32 epoch_seconds = 1;
|
fixed32 epoch_seconds = 1;
|
||||||
string timezone = 2;
|
string timezone = 2 [(pointer_to_buffer) = true];
|
||||||
}
|
}
|
||||||
|
|
||||||
// ==================== USER-DEFINES SERVICES ====================
|
// ==================== USER-DEFINES SERVICES ====================
|
||||||
@@ -1571,7 +1571,7 @@ message BluetoothGATTWriteRequest {
|
|||||||
uint32 handle = 2;
|
uint32 handle = 2;
|
||||||
bool response = 3;
|
bool response = 3;
|
||||||
|
|
||||||
bytes data = 4 [(pointer_to_buffer) = true];
|
bytes data = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message BluetoothGATTReadDescriptorRequest {
|
message BluetoothGATTReadDescriptorRequest {
|
||||||
@@ -1591,7 +1591,7 @@ message BluetoothGATTWriteDescriptorRequest {
|
|||||||
uint64 address = 1;
|
uint64 address = 1;
|
||||||
uint32 handle = 2;
|
uint32 handle = 2;
|
||||||
|
|
||||||
bytes data = 3 [(pointer_to_buffer) = true];
|
bytes data = 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message BluetoothGATTNotifyRequest {
|
message BluetoothGATTNotifyRequest {
|
||||||
|
@@ -2028,12 +2028,9 @@ bool BluetoothGATTWriteRequest::decode_varint(uint32_t field_id, ProtoVarInt val
|
|||||||
}
|
}
|
||||||
bool BluetoothGATTWriteRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
bool BluetoothGATTWriteRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
||||||
switch (field_id) {
|
switch (field_id) {
|
||||||
case 4: {
|
case 4:
|
||||||
// Use raw data directly to avoid allocation
|
this->data = value.as_string();
|
||||||
this->data = value.data();
|
|
||||||
this->data_len = value.size();
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -2067,12 +2064,9 @@ bool BluetoothGATTWriteDescriptorRequest::decode_varint(uint32_t field_id, Proto
|
|||||||
}
|
}
|
||||||
bool BluetoothGATTWriteDescriptorRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
bool BluetoothGATTWriteDescriptorRequest::decode_length(uint32_t field_id, ProtoLengthDelimited value) {
|
||||||
switch (field_id) {
|
switch (field_id) {
|
||||||
case 3: {
|
case 3:
|
||||||
// Use raw data directly to avoid allocation
|
this->data = value.as_string();
|
||||||
this->data = value.data();
|
|
||||||
this->data_len = value.size();
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -1985,15 +1985,14 @@ class BluetoothGATTReadResponse final : public ProtoMessage {
|
|||||||
class BluetoothGATTWriteRequest final : public ProtoDecodableMessage {
|
class BluetoothGATTWriteRequest final : public ProtoDecodableMessage {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t MESSAGE_TYPE = 75;
|
static constexpr uint8_t MESSAGE_TYPE = 75;
|
||||||
static constexpr uint8_t ESTIMATED_SIZE = 29;
|
static constexpr uint8_t ESTIMATED_SIZE = 19;
|
||||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||||
const char *message_name() const override { return "bluetooth_gatt_write_request"; }
|
const char *message_name() const override { return "bluetooth_gatt_write_request"; }
|
||||||
#endif
|
#endif
|
||||||
uint64_t address{0};
|
uint64_t address{0};
|
||||||
uint32_t handle{0};
|
uint32_t handle{0};
|
||||||
bool response{false};
|
bool response{false};
|
||||||
const uint8_t *data{nullptr};
|
std::string data{};
|
||||||
uint16_t data_len{0};
|
|
||||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||||
void dump_to(std::string &out) const override;
|
void dump_to(std::string &out) const override;
|
||||||
#endif
|
#endif
|
||||||
@@ -2021,14 +2020,13 @@ class BluetoothGATTReadDescriptorRequest final : public ProtoDecodableMessage {
|
|||||||
class BluetoothGATTWriteDescriptorRequest final : public ProtoDecodableMessage {
|
class BluetoothGATTWriteDescriptorRequest final : public ProtoDecodableMessage {
|
||||||
public:
|
public:
|
||||||
static constexpr uint8_t MESSAGE_TYPE = 77;
|
static constexpr uint8_t MESSAGE_TYPE = 77;
|
||||||
static constexpr uint8_t ESTIMATED_SIZE = 27;
|
static constexpr uint8_t ESTIMATED_SIZE = 17;
|
||||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||||
const char *message_name() const override { return "bluetooth_gatt_write_descriptor_request"; }
|
const char *message_name() const override { return "bluetooth_gatt_write_descriptor_request"; }
|
||||||
#endif
|
#endif
|
||||||
uint64_t address{0};
|
uint64_t address{0};
|
||||||
uint32_t handle{0};
|
uint32_t handle{0};
|
||||||
const uint8_t *data{nullptr};
|
std::string data{};
|
||||||
uint16_t data_len{0};
|
|
||||||
#ifdef HAS_PROTO_MESSAGE_DUMP
|
#ifdef HAS_PROTO_MESSAGE_DUMP
|
||||||
void dump_to(std::string &out) const override;
|
void dump_to(std::string &out) const override;
|
||||||
#endif
|
#endif
|
||||||
|
@@ -1649,7 +1649,7 @@ void BluetoothGATTWriteRequest::dump_to(std::string &out) const {
|
|||||||
dump_field(out, "handle", this->handle);
|
dump_field(out, "handle", this->handle);
|
||||||
dump_field(out, "response", this->response);
|
dump_field(out, "response", this->response);
|
||||||
out.append(" data: ");
|
out.append(" data: ");
|
||||||
out.append(format_hex_pretty(this->data, this->data_len));
|
out.append(format_hex_pretty(reinterpret_cast<const uint8_t *>(this->data.data()), this->data.size()));
|
||||||
out.append("\n");
|
out.append("\n");
|
||||||
}
|
}
|
||||||
void BluetoothGATTReadDescriptorRequest::dump_to(std::string &out) const {
|
void BluetoothGATTReadDescriptorRequest::dump_to(std::string &out) const {
|
||||||
@@ -1662,7 +1662,7 @@ void BluetoothGATTWriteDescriptorRequest::dump_to(std::string &out) const {
|
|||||||
dump_field(out, "address", this->address);
|
dump_field(out, "address", this->address);
|
||||||
dump_field(out, "handle", this->handle);
|
dump_field(out, "handle", this->handle);
|
||||||
out.append(" data: ");
|
out.append(" data: ");
|
||||||
out.append(format_hex_pretty(this->data, this->data_len));
|
out.append(format_hex_pretty(reinterpret_cast<const uint8_t *>(this->data.data()), this->data.size()));
|
||||||
out.append("\n");
|
out.append("\n");
|
||||||
}
|
}
|
||||||
void BluetoothGATTNotifyRequest::dump_to(std::string &out) const {
|
void BluetoothGATTNotifyRequest::dump_to(std::string &out) const {
|
||||||
|
@@ -514,8 +514,7 @@ esp_err_t BluetoothConnection::read_characteristic(uint16_t handle) {
|
|||||||
return this->check_and_log_error_("esp_ble_gattc_read_char", err);
|
return this->check_and_log_error_("esp_ble_gattc_read_char", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t BluetoothConnection::write_characteristic(uint16_t handle, const uint8_t *data, size_t length,
|
esp_err_t BluetoothConnection::write_characteristic(uint16_t handle, const std::string &data, bool response) {
|
||||||
bool response) {
|
|
||||||
if (!this->connected()) {
|
if (!this->connected()) {
|
||||||
this->log_gatt_not_connected_("write", "characteristic");
|
this->log_gatt_not_connected_("write", "characteristic");
|
||||||
return ESP_GATT_NOT_CONNECTED;
|
return ESP_GATT_NOT_CONNECTED;
|
||||||
@@ -523,11 +522,8 @@ esp_err_t BluetoothConnection::write_characteristic(uint16_t handle, const uint8
|
|||||||
ESP_LOGV(TAG, "[%d] [%s] Writing GATT characteristic handle %d", this->connection_index_, this->address_str_.c_str(),
|
ESP_LOGV(TAG, "[%d] [%s] Writing GATT characteristic handle %d", this->connection_index_, this->address_str_.c_str(),
|
||||||
handle);
|
handle);
|
||||||
|
|
||||||
// ESP-IDF's API requires a non-const uint8_t* but it doesn't modify the data
|
|
||||||
// The BTC layer immediately copies the data to its own buffer (see btc_gattc.c)
|
|
||||||
// const_cast is safe here and was previously hidden by a C-style cast
|
|
||||||
esp_err_t err =
|
esp_err_t err =
|
||||||
esp_ble_gattc_write_char(this->gattc_if_, this->conn_id_, handle, length, const_cast<uint8_t *>(data),
|
esp_ble_gattc_write_char(this->gattc_if_, this->conn_id_, handle, data.size(), (uint8_t *) data.data(),
|
||||||
response ? ESP_GATT_WRITE_TYPE_RSP : ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE);
|
response ? ESP_GATT_WRITE_TYPE_RSP : ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE);
|
||||||
return this->check_and_log_error_("esp_ble_gattc_write_char", err);
|
return this->check_and_log_error_("esp_ble_gattc_write_char", err);
|
||||||
}
|
}
|
||||||
@@ -544,7 +540,7 @@ esp_err_t BluetoothConnection::read_descriptor(uint16_t handle) {
|
|||||||
return this->check_and_log_error_("esp_ble_gattc_read_char_descr", err);
|
return this->check_and_log_error_("esp_ble_gattc_read_char_descr", err);
|
||||||
}
|
}
|
||||||
|
|
||||||
esp_err_t BluetoothConnection::write_descriptor(uint16_t handle, const uint8_t *data, size_t length, bool response) {
|
esp_err_t BluetoothConnection::write_descriptor(uint16_t handle, const std::string &data, bool response) {
|
||||||
if (!this->connected()) {
|
if (!this->connected()) {
|
||||||
this->log_gatt_not_connected_("write", "descriptor");
|
this->log_gatt_not_connected_("write", "descriptor");
|
||||||
return ESP_GATT_NOT_CONNECTED;
|
return ESP_GATT_NOT_CONNECTED;
|
||||||
@@ -552,11 +548,8 @@ esp_err_t BluetoothConnection::write_descriptor(uint16_t handle, const uint8_t *
|
|||||||
ESP_LOGV(TAG, "[%d] [%s] Writing GATT descriptor handle %d", this->connection_index_, this->address_str_.c_str(),
|
ESP_LOGV(TAG, "[%d] [%s] Writing GATT descriptor handle %d", this->connection_index_, this->address_str_.c_str(),
|
||||||
handle);
|
handle);
|
||||||
|
|
||||||
// ESP-IDF's API requires a non-const uint8_t* but it doesn't modify the data
|
|
||||||
// The BTC layer immediately copies the data to its own buffer (see btc_gattc.c)
|
|
||||||
// const_cast is safe here and was previously hidden by a C-style cast
|
|
||||||
esp_err_t err = esp_ble_gattc_write_char_descr(
|
esp_err_t err = esp_ble_gattc_write_char_descr(
|
||||||
this->gattc_if_, this->conn_id_, handle, length, const_cast<uint8_t *>(data),
|
this->gattc_if_, this->conn_id_, handle, data.size(), (uint8_t *) data.data(),
|
||||||
response ? ESP_GATT_WRITE_TYPE_RSP : ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE);
|
response ? ESP_GATT_WRITE_TYPE_RSP : ESP_GATT_WRITE_TYPE_NO_RSP, ESP_GATT_AUTH_REQ_NONE);
|
||||||
return this->check_and_log_error_("esp_ble_gattc_write_char_descr", err);
|
return this->check_and_log_error_("esp_ble_gattc_write_char_descr", err);
|
||||||
}
|
}
|
||||||
|
@@ -18,9 +18,9 @@ class BluetoothConnection final : public esp32_ble_client::BLEClientBase {
|
|||||||
esp32_ble_tracker::AdvertisementParserType get_advertisement_parser_type() override;
|
esp32_ble_tracker::AdvertisementParserType get_advertisement_parser_type() override;
|
||||||
|
|
||||||
esp_err_t read_characteristic(uint16_t handle);
|
esp_err_t read_characteristic(uint16_t handle);
|
||||||
esp_err_t write_characteristic(uint16_t handle, const uint8_t *data, size_t length, bool response);
|
esp_err_t write_characteristic(uint16_t handle, const std::string &data, bool response);
|
||||||
esp_err_t read_descriptor(uint16_t handle);
|
esp_err_t read_descriptor(uint16_t handle);
|
||||||
esp_err_t write_descriptor(uint16_t handle, const uint8_t *data, size_t length, bool response);
|
esp_err_t write_descriptor(uint16_t handle, const std::string &data, bool response);
|
||||||
|
|
||||||
esp_err_t notify_characteristic(uint16_t handle, bool enable);
|
esp_err_t notify_characteristic(uint16_t handle, bool enable);
|
||||||
|
|
||||||
|
@@ -305,7 +305,7 @@ void BluetoothProxy::bluetooth_gatt_write(const api::BluetoothGATTWriteRequest &
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto err = connection->write_characteristic(msg.handle, msg.data, msg.data_len, msg.response);
|
auto err = connection->write_characteristic(msg.handle, msg.data, msg.response);
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
this->send_gatt_error(msg.address, msg.handle, err);
|
this->send_gatt_error(msg.address, msg.handle, err);
|
||||||
}
|
}
|
||||||
@@ -331,7 +331,7 @@ void BluetoothProxy::bluetooth_gatt_write_descriptor(const api::BluetoothGATTWri
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto err = connection->write_descriptor(msg.handle, msg.data, msg.data_len, true);
|
auto err = connection->write_descriptor(msg.handle, msg.data, true);
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
this->send_gatt_error(msg.address, msg.handle, err);
|
this->send_gatt_error(msg.address, msg.handle, err);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user