29 ESP_LOGD(TAG,
"Sending Symphony: data=0x%0*X nbits=%u repeats=%u", (data.
nbits + 3) / 4, (uint32_t) data.
data,
35 for (uint8_t repeats = 0; repeats < data.
repeats; repeats++) {
37 for (uint32_t mask = 1UL << (data.
nbits - 1); mask != 0; mask >>= 1) {
38 const bool is_last_bit = (mask == 1);
39 const bool is_last_frame = (repeats == (data.
repeats - 1));
42 if (data.
data & mask) {
43 dst->
mark(BIT_ONE_HIGH_US);
45 dst->
mark(BIT_ZERO_HIGH_US);
47 dst->
space(is_last_frame ? FOOTER_GAP_US : INTER_FRAME_GAP_US);
49 if (data.
data & mask) {
50 dst->
item(BIT_ONE_HIGH_US, BIT_ONE_LOW_US);
52 dst->
item(BIT_ZERO_HIGH_US, BIT_ZERO_LOW_US);
60 auto is_valid_len = [](uint8_t nbits) ->
bool {
return nbits == 8 || nbits == 12 || nbits == 16; };
65 for (; out.nbits < 32; out.nbits++) {
70 uint8_t bits_with_this = out.nbits + 1;
71 if (is_valid_len(bits_with_this)) {
72 out.data = (out.data << 1UL) | 1UL;
73 out.nbits = bits_with_this;
80 out.data = (out.data << 1UL) | 1UL;
86 uint8_t bits_with_this = out.nbits + 1;
87 if (is_valid_len(bits_with_this)) {
88 out.data = (out.data << 1UL) | 0UL;
89 out.nbits = bits_with_this;
96 out.data = (out.data << 1UL) | 0UL;