This commit is contained in:
wozz 2023-11-18 02:15:42 -05:00 committed by GitHub
parent cb90f577bf
commit 3d6d2457af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 45 deletions

View File

@ -93,61 +93,59 @@ void VictronComponent::loop() {
ESP_LOGW(TAG, "Last transmission too long ago");
state_ = 0;
}
if (!available())
return;
last_transmission_ = now;
while (available()) {
uint8_t c;
read_byte(&c);
if (state_ == 0) {
if (c == '\r' || c == '\n') {
continue;
}
label_.clear();
value_.clear();
state_ = 1;
uint8_t c;
read_byte(&c);
if (state_ == 0) {
if (c == '\r' || c == '\n') {
return;
}
if (state_ == 1) {
// Start of a ve.direct hex frame
if (c == ':') {
state_ = 3;
continue;
}
if (c == '\t') {
state_ = 2;
label_.clear();
value_.clear();
state_ = 1;
begin_frame_ = now;
}
if (state_ == 1) {
// Start of a ve.direct hex frame
if (c == ':') {
state_ = 3;
return;
}
if (c == '\t') {
state_ = 2;
} else {
label_.push_back(c);
}
return;
}
if (state_ == 2) {
if (label_ == "Checksum") {
state_ = 0;
// The checksum is used as end of frame indicator
if (begin_frame_ - this->last_publish_ >= this->throttle_) {
this->last_publish_ = begin_frame_;
this->publishing_ = true;
} else {
label_.push_back(c);
this->publishing_ = false;
}
continue;
return;
}
if (state_ == 2) {
if (label_ == "Checksum") {
state_ = 0;
// The checksum is used as end of frame indicator
if (now - this->last_publish_ >= this->throttle_) {
this->last_publish_ = now;
this->publishing_ = true;
} else {
this->publishing_ = false;
}
continue;
}
if (c == '\r' || c == '\n') {
if (this->publishing_) {
handle_value_();
}
state_ = 0;
} else {
value_.push_back(c);
if (c == '\r' || c == '\n') {
if (this->publishing_) {
handle_value_();
}
state_ = 0;
} else {
value_.push_back(c);
}
// Discard ve.direct hex frame
if (state_ == 3) {
if (c == '\r' || c == '\n') {
state_ = 0;
}
}
// Discard ve.direct hex frame
if (state_ == 3) {
if (c == '\r' || c == '\n') {
state_ = 0;
}
}
}

View File

@ -287,6 +287,7 @@ class VictronComponent : public uart::UARTDevice, public Component {
int state_{0};
std::string label_;
std::string value_;
uint32_t begin_frame_{0};
uint32_t last_transmission_{0};
uint32_t last_publish_{0};
uint32_t throttle_{0};