9static constexpr uint16_t MAX_PACKET_SIZE = 508;
10static constexpr uint8_t FLAG_BYTE = 0x7E;
11static constexpr uint8_t CONTROL_BYTE = 0x7D;
14 PacketTransport::loop();
19 ESP_LOGW(TAG,
"Failed to read byte from UART");
22 if (
byte == FLAG_BYTE) {
27 ESP_LOGD(TAG,
"CRC mismatch, discarding packet");
44 if (
byte == CONTROL_BYTE) {
53 ESP_LOGD(TAG,
"Packet too large, discarding");
67 if (
byte == FLAG_BYTE ||
byte == CONTROL_BYTE) {
76 for (uint8_t
byte : buf) {
79 auto crc =
crc16(buf.data(), buf.size());
void process_(std::span< const uint8_t > data)
Process a received packet.
void write_byte(uint8_t data)
bool read_byte(uint8_t *data)
virtual size_t available()=0
std::vector< uint8_t > receive_buffer_
size_t get_max_packet_size() override
void send_packet(const std::vector< uint8_t > &buf) const override
void write_byte_(uint8_t byte) const
Write a byte to the UART bus.
ESPHOME_LOG_TAG(TAG, "uart.binary_sensor")
uint16_t crc16(const uint8_t *data, uint16_t len, uint16_t crc, uint16_t reverse_poly, bool refin, bool refout)
Calculate a CRC-16 checksum of data with size len.