13static bool checksum(std::span<const uint8_t> data) {
return sum_bytes(data.data(), data.size()) == 0; }
31 if (message_type != MESSAGE_TYPE_AQUA_SENSOR_DATA) {
32 ESP_LOGV(TAG,
"Unknown message type 0x%04x", message_type);
40 if (this->
buffer_.
size() < this->buffer_[1] + FRAME_OVERHEAD)
43 ESP_LOGW(TAG,
"Checksum failed");
47#ifdef SYSTA_BUS_LISTENER_COUNT
49 listener->handle_message(this->
buffer_);
57 std::array<uint8_t, MAX_MESSAGE_SIZE> failed;
59 std::copy(this->
buffer_.
begin(), this->buffer_.end(), failed.begin());
61 for (
size_t i = 1; i <
count; i++)
void push_back(const T &value)
void dump_config() override
void handle_byte_(uint8_t c)
StaticVector< uint8_t, MAX_MESSAGE_SIZE > buffer_
StaticVector< SystaBusListener *, SYSTA_BUS_LISTENER_COUNT > listeners_
bool read_byte(uint8_t *data)
uint16_t get_message_type(std::span< const uint8_t > message)
ESPHOME_LOG_TAG(TAG, "systa_bus.sensor")
constexpr uint8_t sum_bytes(const uint8_t *data, size_t len, uint8_t sum=0)
Add up the bytes of data with size len, truncated to 8 bits: the checksum many serial and IR protocol...