31 ESP_LOGD(TAG,
"Sending Symphony: data=0x%0*" PRIX32
" nbits=%" PRIu8
" repeats=%" PRIu8, (data.nbits + 3) / 4,
32 (
uint32_t) data.data, data.nbits, data.repeats);
35 dst->
reserve(data.nbits * 2u * data.repeats);
37 for (uint8_t repeats = 0; repeats < data.repeats; repeats++) {
39 for (
uint32_t mask = 1UL << (data.nbits - 1); mask != 0; mask >>= 1) {
40 const bool is_last_bit = (mask == 1);
41 const bool is_last_frame = (repeats == (data.repeats - 1));
44 if (data.data & mask) {
45 dst->
mark(BIT_ONE_HIGH_US);
47 dst->
mark(BIT_ZERO_HIGH_US);
49 dst->
space(is_last_frame ? FOOTER_GAP_US : INTER_FRAME_GAP_US);
51 if (data.data & mask) {
52 dst->
item(BIT_ONE_HIGH_US, BIT_ONE_LOW_US);
54 dst->
item(BIT_ZERO_HIGH_US, BIT_ZERO_LOW_US);
62 auto is_valid_len = [](uint8_t nbits) ->
bool {
return nbits == 8 || nbits == 12 || nbits == 16; };
67 for (; out.nbits < 32; out.nbits++) {
72 uint8_t bits_with_this = out.nbits + 1;
73 if (is_valid_len(bits_with_this)) {
74 out.data = (out.data << 1UL) | 1UL;
75 out.nbits = bits_with_this;
82 out.data = (out.data << 1UL) | 1UL;
88 uint8_t bits_with_this = out.nbits + 1;
89 if (is_valid_len(bits_with_this)) {
90 out.data = (out.data << 1UL) | 0UL;
91 out.nbits = bits_with_this;
98 out.data = (out.data << 1UL) | 0UL;