Add timeout while waiting for answer
This commit is contained in:
parent
189fd539f1
commit
f72e0ea591
12
tw7100.cpp
12
tw7100.cpp
|
@ -9,6 +9,7 @@ namespace esphome {
|
||||||
namespace tw7100 {
|
namespace tw7100 {
|
||||||
|
|
||||||
bool waiting_for_answer = false;
|
bool waiting_for_answer = false;
|
||||||
|
unsigned long waiting_for_answer_since = 0;
|
||||||
std::deque<std::string> cmd_queue;
|
std::deque<std::string> cmd_queue;
|
||||||
unsigned long last_set_cmd_timestamp;
|
unsigned long last_set_cmd_timestamp;
|
||||||
|
|
||||||
|
@ -136,11 +137,16 @@ void tw7100Component::loop() {
|
||||||
ESP_LOGV(TAG, "sending out command: %s", cmd.c_str());
|
ESP_LOGV(TAG, "sending out command: %s", cmd.c_str());
|
||||||
write_str((cmd + "\r\n").c_str());
|
write_str((cmd + "\r\n").c_str());
|
||||||
flush();
|
flush();
|
||||||
if (cmd.find("?") != std::string::npos) { // only wait for response on CMD? requests
|
if (cmd.find("?") != std::string::npos) { // only wait for response on CMD? requests
|
||||||
waiting_for_answer = true;
|
waiting_for_answer = true;
|
||||||
} else {
|
waiting_for_answer_since = millis();
|
||||||
|
} else {
|
||||||
last_set_cmd_timestamp = millis();
|
last_set_cmd_timestamp = millis();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (waiting_for_answer && (millis() - waiting_for_answer_since > 1000)) {
|
||||||
|
ESP_LOGE(TAG, "no response for last request since 1000ms, timing out!");
|
||||||
|
waiting_for_answer = false;
|
||||||
}
|
}
|
||||||
} else { // response found, handle eventual errors
|
} else { // response found, handle eventual errors
|
||||||
ESP_LOGV(TAG, "buffer content: %s", response.c_str());
|
ESP_LOGV(TAG, "buffer content: %s", response.c_str());
|
||||||
|
|
Loading…
Reference in a new issue