diff options
feat: Track consecutive frame index
1 files changed, 8 insertions, 1 deletions
| -rw-r--r-- | src/message.cpp | 9 |
diff --git a/src/message.cpp b/src/message.cpp index 834fd87..0769533 100644 --- a/src/message.cpp +++ b/src/message.cpp @@ -11,6 +11,7 @@ void Message::copyFrom(const Message& other) { this->can_id = other.can_id; this->size = other.size; this->received = other.received; + this->latest_index = other.latest_index; this->msg = new unsigned char[this->size]; std::memcpy(this->msg, other.msg, this->size); @@ -18,7 +19,7 @@ void Message::copyFrom(const Message& other) { /* Public */ -Message::Message(unsigned int can_id, const Frame& first_frame) : can_id(can_id), received(0) { +Message::Message(unsigned int can_id, const Frame& first_frame) : can_id(can_id), received(0), latest_index(0) { this->size = first_frame.get_size(); this->msg = new unsigned char[this->size]; this->receive_frame(first_frame); @@ -41,6 +42,12 @@ Message& Message::operator=(const Message& other) { } void Message::receive_frame(const Frame& f) { + // This logic isn't really necessary, but I like to be thorough + if ((this->latest_index + 1) % 16 < f.get_index()) { + throw std::invalid_argument("A consecutive frame was lost!"); + } + this->latest_index = f.get_index(); + // For CFs we set the data size to 7 (the maximum), however, we may be expecting // to receive less data (in the last CF). size_t expects = std::min(this->size - this->received, f.get_data_size()); |
