6static const int STOVE_REPLY_DELAY = 60;
7static const uint8_t WRITE_BIT = 1 << 7;
11 " Memory Location: %02X\n"
12 " Memory Address: %02X",
18 LOG_UPDATE_INTERVAL(
this);
35 ESP_LOGCONFIG(TAG,
"MicroNova:");
42 ESP_LOGD(TAG,
"Schedule listener update");
44 mv_listener->set_needs_update(
true);
63 if (mv_listener->get_needs_update()) {
64 mv_listener->set_needs_update(
false);
74 uint8_t write_data[2] = {0, 0};
82 ESP_LOGW(TAG,
"Reading excess byte 0x%02X", trash_rx);
85 write_data[0] = location;
87 ESP_LOGV(TAG,
"Request from stove [%02X,%02X]", write_data[0], write_data[1]);
100 ESP_LOGE(TAG,
"Reply is pending, skipping read request");
105 uint8_t reply_data[2] = {0, 0};
112 ESP_LOGV(TAG,
"Reply from stove [%02X,%02X]", reply_data[0], reply_data[1]);
118 ESP_LOGE(TAG,
"Checksum missmatch! From [0x%02X:0x%02X] received [0x%02X,0x%02X]. Expected 0x%02X, got 0x%02X",
120 reply_data[1],
checksum, reply_data[0]);
123 return ((
int) reply_data[1]);
127 uint8_t write_data[4] = {0, 0, 0, 0};
131 uint8_t write_location = location | WRITE_BIT;
132 write_data[0] = write_location;
134 write_data[2] = data;
136 checksum = ((uint16_t) write_data[0] + (uint16_t) write_data[1] + (uint16_t) write_data[2]) & 0xFF;
139 ESP_LOGV(TAG,
"Write 4 bytes [%02X,%02X,%02X,%02X]", write_data[0], write_data[1], write_data[2], write_data[3]);
152 ESP_LOGE(TAG,
"Reply is pending, skipping write");
virtual void pin_mode(gpio::Flags flags)=0
virtual void digital_write(bool value)=0
void dump_config() override
std::vector< MicroNovaListener * > micronova_listeners_
void write_address(uint8_t location, uint8_t address, uint8_t data)
MicroNovaSerialTransmission current_transmission_
Mutex reply_pending_mutex_
void request_address(uint8_t location, uint8_t address, MicroNovaListener *listener)
void request_update_listeners()
virtual void request_value_from_stove()=0
virtual void process_value_from_stove(int value_from_stove)=0
optional< std::array< uint8_t, N > > read_array()
bool read_byte(uint8_t *data)
void write_array(const uint8_t *data, size_t len)
uint32_t IRAM_ATTR HOT millis()
MicroNovaListener * initiating_listener
uint32_t request_transmission_time