47 bool halfbits[NHALFBITS + 2];
49 for (
uint32_t i = 0; n <= NHALFBITS &&
src.is_valid(i); i++) {
50 if (
src.peek_mark(BIT_TIME_US, i)) {
52 }
else if (
src.peek_space(BIT_TIME_US, i)) {
53 halfbits[n++] =
false;
54 }
else if (
src.peek_mark(2 * BIT_TIME_US, i)) {
57 }
else if (
src.peek_space(2 * BIT_TIME_US, i)) {
58 halfbits[n++] =
false;
59 halfbits[n++] =
false;
70 if (n != NHALFBITS && n != NHALFBITS - 1) {
73 halfbits[0] = !halfbits[1];
74 if (n == NHALFBITS - 1) {
75 halfbits[n] = !halfbits[n - 1];
78 const bool carrier = halfbits[1];
80 for (uint8_t i = 0; i < NBITS; i++) {
81 const bool first = halfbits[2 * i];
82 const bool second = halfbits[2 * i + 1];
86 bits = (bits << 1) | (
second == carrier ? 1 : 0);
89 const bool field_bit = bits & (1 << 12);
91 .address =
static_cast<uint8_t
>((bits >> 6) & 0x1F),
92 .command =
static_cast<uint8_t
>((bits & 0x3F) | (field_bit ? 0 : 0x40)),