10constexpr uint32_t HEADER_LOW_US = 3100;
11constexpr uint32_t HEADER_HIGH_US = 4400;
13constexpr uint32_t BIT_ONE_SPACE_US = 1650;
14constexpr uint32_t BIT_ZERO_SPACE_US = 580;
23 for (uint8_t mask = 1 << 7; mask != 0; mask >>= 1) {
25 dst->
space(BIT_ONE_SPACE_US);
27 dst->
space(BIT_ZERO_SPACE_US);
29 dst->
mark(BIT_MARK_US);
36 dst->
mark(HEADER_LOW_US);
37 dst->
space(HEADER_LOW_US);
38 dst->
mark(HEADER_LOW_US);
39 dst->
space(HEADER_HIGH_US);
40 dst->
mark(BIT_MARK_US);
42 for (
size_t i = 0; i <
len; i++) {
51 if (!
src.expect_item(HEADER_LOW_US, HEADER_LOW_US) || !
src.expect_item(HEADER_LOW_US, HEADER_HIGH_US)) {
54 if (!
src.expect_mark(BIT_MARK_US)) {
57 size_t size =
src.size() -
src.get_index() - 1;
67 out.data.reserve(
size / 16 - 1);
70 for (uint8_t mask = 0x80; mask != 0; mask >>= 1) {
71 if (
src.expect_space(BIT_ONE_SPACE_US)) {
73 }
else if (!
src.expect_space(BIT_ZERO_SPACE_US)) {
76 if (!
src.expect_mark(BIT_MARK_US)) {
83 out.data.push_back(data);
93 ESP_LOGI(TAG,
"Received Haier: %s",
format_hex_pretty_to(hex_buf, data.data.data(), data.data.size()));
void encode_byte_(RemoteTransmitData *dst, uint8_t item)
void encode(RemoteTransmitData *dst, const HaierData &data)
void dump(const HaierData &data)
optional< HaierData > decode(RemoteReceiveData src)
void space(uint32_t length)
void set_carrier_frequency(uint32_t carrier_frequency)
void mark(uint32_t length)
void reserve(uint32_t len)
std::vector< uint8_t > & out
ESPHOME_LOG_TAG(TAG, "remote.abbwelcome")
constexpr size_t HAIER_MAX_DATA_BYTES
constexpr unsigned int HAIER_IR_PACKET_BIT_SIZE_SHORT
constexpr unsigned int HAIER_IR_PACKET_BIT_SIZE_LONG
char * format_hex_pretty_to(char *buffer, size_t buffer_size, const uint8_t *data, size_t length, char separator)
Format byte array as uppercase hex to buffer (base implementation).
constexpr size_t format_hex_pretty_size(size_t byte_count)
Calculate buffer size needed for format_hex_pretty_to with separator: "XX:XX:...:XX\0".
uint8_t progmem_read_byte(const uint8_t *addr)