5 namespace remote_base {
7 static const char *
const TAG =
"remote.byronsx";
9 static const uint32_t BIT_TIME_US = 333;
10 static const uint8_t NBITS_ADDRESS = 8;
11 static const uint8_t NBITS_COMMAND = 4;
12 static const uint8_t NBITS_START_BIT = 1;
13 static const uint8_t NBITS_DATA = NBITS_ADDRESS + NBITS_COMMAND ;
52 uint32_t out_data = 0x0;
54 ESP_LOGD(TAG,
"Send ByronSX: address=%04x command=%03x", data.
address, data.
command);
57 out_data <<= NBITS_COMMAND;
60 ESP_LOGV(TAG,
"Send ByronSX: out_data %03x", out_data);
63 dst->
mark(1 * BIT_TIME_US);
65 for (uint32_t mask = 1UL << (NBITS_DATA - 1); mask != 0; mask >>= 1) {
66 if (out_data & mask) {
67 dst->
space(2 * BIT_TIME_US);
68 dst->
mark(1 * BIT_TIME_US);
70 dst->
space(1 * BIT_TIME_US);
71 dst->
mark(2 * BIT_TIME_US);
75 dst->
space(17 * BIT_TIME_US);
84 if (src.
size() != (NBITS_DATA + NBITS_START_BIT) * 2) {
93 ESP_LOGVV(TAG,
"%3d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d", src.
size(), src.
peek(0),
98 ESP_LOGVV(TAG,
" %d %d %d %d %d %d", src.
peek(20), src.
peek(21), src.
peek(22), src.
peek(23), src.
peek(24),
102 uint32_t out_data = 0;
103 int8_t bit = NBITS_DATA;
106 out_data |= 1 << bit;
108 out_data |= 0 << bit;
110 ESP_LOGV(TAG,
"Decode ByronSX: Fail 2, %2d %08x", bit, out_data);
113 ESP_LOGVV(TAG,
"Decode ByronSX: Data, %2d %08x", bit, out_data);
118 ESP_LOGV(TAG,
"Decode ByronSX: Fail 4 ");
122 out.command = (uint8_t) (out_data & 0xF);
123 out_data >>= NBITS_COMMAND;
124 out.address = (uint16_t) (out_data & 0xFF);
130 ESP_LOGD(TAG,
"Received ByronSX: address=0x%08X, command=0x%02x", data.
address, data.
command);
bool expect_space(uint32_t length)
void dump(const ByronSXData &data) override
bool expect_mark(uint32_t length)
optional< ByronSXData > decode(RemoteReceiveData src) override
void mark(uint32_t length)
int32_t peek(uint32_t offset=0) const
void space(uint32_t length)
void encode(RemoteTransmitData *dst, const ByronSXData &data) override
This is a workaround until we can figure out a way to get the tflite-micro idf component code availab...
bool peek_space_at_least(uint32_t length, uint32_t offset=0) const