23 ESP_LOGD(TAG,
"Sending NEC: address=0x%04X, command=0x%04X command_repeats=%d", data.address, data.command,
24 data.command_repeats);
27 const uint16_t repeats = clamp<uint16_t>(data.command_repeats, 1, MAX_COMMAND_REPEATS);
29 dst->
reserve(2 + 64 + 1 + (repeats - 1) * 4);
32 dst->
item(HEADER_HIGH_US, HEADER_LOW_US);
33 uint32_t frame_us = HEADER_HIGH_US + HEADER_LOW_US + BIT_HIGH_US;
35 for (uint16_t value : {data.address, data.command}) {
36 for (uint16_t mask = 1; mask; mask <<= 1) {
37 const uint32_t low_us = (value & mask) ? BIT_ONE_LOW_US : BIT_ZERO_LOW_US;
38 dst->
item(BIT_HIGH_US, low_us);
39 frame_us += BIT_HIGH_US + low_us;
43 dst->
mark(BIT_HIGH_US);
45 for (uint16_t repeat = 1; repeat < repeats; repeat++) {
46 dst->
space(repeat == 1 ? REPEAT_PERIOD_US - frame_us : REPEAT_GAP_US);
47 dst->
item(HEADER_HIGH_US, REPEAT_HEADER_LOW_US);
48 dst->
mark(BIT_HIGH_US);
57 if (!
src.expect_item(HEADER_HIGH_US, HEADER_LOW_US))
60 for (uint16_t mask = 1; mask; mask <<= 1) {
61 if (
src.expect_item(BIT_HIGH_US, BIT_ONE_LOW_US)) {
63 }
else if (
src.expect_item(BIT_HIGH_US, BIT_ZERO_LOW_US)) {
64 data.address &= ~mask;
70 for (uint16_t mask = 1; mask; mask <<= 1) {
71 if (
src.expect_item(BIT_HIGH_US, BIT_ONE_LOW_US)) {
73 }
else if (
src.expect_item(BIT_HIGH_US, BIT_ZERO_LOW_US)) {
74 data.command &= ~mask;
81 src.expect_mark(BIT_HIGH_US);