88 uint16_t khz = CARRIER_KHZ;
93 for (
uint32_t mask = 1UL << (NBITS_PREAMBLE - 1); mask != 0; mask >>= 1) {
94 if (out_data & mask) {
95 dst->
mark(BIT_TIME_US);
97 dst->
space(BIT_TIME_US);
103 for (
uint32_t mask = 1UL << (NBITS_SYNC - 1); mask != 0; mask >>= 1) {
104 if (out_data & mask) {
105 dst->
mark(BIT_TIME_US);
107 dst->
space(BIT_TIME_US);
111 ESP_LOGD(TAG,
"Send Drayton: address=%04x channel=%03x cmd=%02x", data.address, data.channel, data.command);
113 out_data = data.address;
114 out_data <<= NBITS_COMMAND;
115 out_data |= data.command;
116 out_data <<= NBITS_CHANNEL;
117 out_data |= data.channel;
119 ESP_LOGV(TAG,
"Send Drayton: out_data %08" PRIx32, out_data);
121 for (
uint32_t mask = 1UL << (NDATABITS - 1); mask != 0; mask >>= 1) {
122 if (out_data & mask) {
123 dst->
mark(BIT_TIME_US);
124 dst->
space(BIT_TIME_US);
126 dst->
space(BIT_TIME_US);
127 dst->
mark(BIT_TIME_US);
139 while (
src.size() -
src.get_index() >= MIN_RX_SRC) {
141 "Decode Drayton: %" PRId32
", %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
142 " %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
143 " %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
" %" PRId32
"",
149 if (
src.peek_space_at_least(1)) {
154 while (
src.size() -
src.get_index() >= MIN_RX_SRC) {
155 ESP_LOGVV(TAG,
"Decode Drayton: sync search %" PRIu32
", %" PRId32
" %" PRId32,
src.size() -
src.get_index(),
157 if (
src.peek_mark(2 * BIT_TIME_US) &&
158 (
src.peek_space(2 * BIT_TIME_US, 1) ||
src.peek_space(3 * BIT_TIME_US, 1))) {
160 ESP_LOGVV(TAG,
"Decode Drayton: Found SYNC, - %" PRIu32,
src.get_index());
168 if (
src.size() -
src.get_index() < NDATABITS) {
169 ESP_LOGV(TAG,
"Decode Drayton: Fail 1, - %" PRIu32,
src.get_index());
177 uint8_t bit = NDATABITS - 1;
178 ESP_LOGVV(TAG,
"Decode Drayton: first bit %" PRId32
" %" PRId32
", %" PRId32,
src.peek(0),
src.peek(1),
180 if (
src.expect_space(3 * BIT_TIME_US) && (
src.expect_mark(BIT_TIME_US) ||
src.peek_mark(2 * BIT_TIME_US))) {
181 out_data |= 0 << bit;
182 }
else if (
src.expect_space(2 * BIT_TIME_US) &&
src.expect_mark(BIT_TIME_US) &&
183 (
src.expect_space(BIT_TIME_US) ||
src.peek_space(2 * BIT_TIME_US))) {
184 out_data |= 1 << bit;
186 ESP_LOGV(TAG,
"Decode Drayton: Fail 2, - %" PRId32
" %" PRId32
" %" PRId32,
src.peek(-1),
src.peek(0),
195 ESP_LOGVV(TAG,
"Decode Drayton: Data, %2d %08" PRIx32, bit, out_data);
196 if ((
src.expect_space(BIT_TIME_US) ||
src.expect_space(2 * BIT_TIME_US)) &&
197 (
src.expect_mark(BIT_TIME_US) ||
src.peek_mark(2 * BIT_TIME_US))) {
198 out_data |= 0 << bit;
199 }
else if ((
src.expect_mark(BIT_TIME_US) ||
src.expect_mark(2 * BIT_TIME_US)) &&
200 (
src.expect_space(BIT_TIME_US) ||
src.peek_space(2 * BIT_TIME_US))) {
201 out_data |= 1 << bit;
208 ESP_LOGVV(TAG,
"Decode Drayton: Fail 3, %" PRId32
" %" PRId32
" %" PRId32,
src.peek(-1),
src.peek(0),
213 if (
src.expect_space(BIT_TIME_US) ||
src.expect_space(2 * BIT_TIME_US)) {
215 }
else if (
src.expect_mark(BIT_TIME_US) ||
src.expect_mark(2 * BIT_TIME_US)) {
221 ESP_LOGV(TAG,
"Decode Drayton: Data, %2d %08" PRIx32, bit, out_data);
223 out.channel = (uint8_t) (out_data & 0x1F);
224 out_data >>= NBITS_CHANNEL;
225 out.command = (uint8_t) (out_data & 0x7F);
226 out_data >>= NBITS_COMMAND;
227 out.address = (uint16_t) (out_data & 0xFFFF);