5 namespace remote_base {
7 static const char *
const TAG =
"remote.coolix";
9 static const int32_t TICK_US = 560;
10 static const int32_t HEADER_MARK_US = 8 * TICK_US;
11 static const int32_t HEADER_SPACE_US = 8 * TICK_US;
12 static const int32_t BIT_MARK_US = 1 * TICK_US;
13 static const int32_t BIT_ONE_SPACE_US = 3 * TICK_US;
14 static const int32_t BIT_ZERO_SPACE_US = 1 * TICK_US;
15 static const int32_t FOOTER_MARK_US = 1 * TICK_US;
16 static const int32_t FOOTER_SPACE_US = 10 * TICK_US;
18 static void encode_data(RemoteTransmitData *dst,
const CoolixData &src) {
21 for (
unsigned shift = 16;; shift -= 8) {
23 const uint8_t byte = src >> shift;
25 for (uint8_t mask = 1 << 7; mask; mask >>= 1)
26 dst->item(BIT_MARK_US, (byte & mask) ? BIT_ONE_SPACE_US : BIT_ZERO_SPACE_US);
28 for (uint8_t mask = 1 << 7; mask; mask >>= 1)
29 dst->item(BIT_MARK_US, (byte & mask) ? BIT_ZERO_SPACE_US : BIT_ONE_SPACE_US);
38 dst->
reserve(2 + 2 * 48 + 2 + 2 + 2 * 48 + 1);
39 dst->
item(HEADER_MARK_US, HEADER_SPACE_US);
40 encode_data(dst, data);
41 dst->
item(FOOTER_MARK_US, FOOTER_SPACE_US);
42 dst->
item(HEADER_MARK_US, HEADER_SPACE_US);
43 encode_data(dst, data);
44 dst->
mark(FOOTER_MARK_US);
49 for (
unsigned n = 3;; data <<= 8) {
51 for (uint32_t mask = 1 << 7; mask; mask >>= 1) {
61 for (uint32_t mask = 1 << 7; mask; mask >>= 1) {
62 if (!src.
expect_item(BIT_MARK_US, (data & mask) ? BIT_ZERO_SPACE_US : BIT_ONE_SPACE_US))
75 if (data.
expect_item(HEADER_MARK_US, HEADER_SPACE_US) && decode_data(data, first) &&
77 decode_data(data, second) && data.
expect_mark(FOOTER_MARK_US) && first == second)
optional< CoolixData > decode(RemoteReceiveData data) override
void set_carrier_frequency(uint32_t carrier_frequency)
void item(uint32_t mark, uint32_t space)
bool expect_space(uint32_t length)
bool expect_mark(uint32_t length)
void encode(RemoteTransmitData *dst, const CoolixData &data) override
void mark(uint32_t length)
void dump(const CoolixData &data) override
void reserve(uint32_t len)
bool expect_item(uint32_t mark, uint32_t space)