212 {
213 if (
data_ ==
nullptr) {
215 }
216
218 if (buffer_.empty()) {
220 buffer_.push_back(*
data_);
221 }
223 } else if (buffer_.size() == 1) {
225 buffer_.push_back(*
data_++);
226 } else {
227 buffer_.clear();
228 }
229 } else if (buffer_.size() == 2) {
232 buffer_.push_back(*
data_++);
233 header_length_ = sizeof(novatel::LongHeader);
234 break;
236 buffer_.push_back(*
data_++);
237 header_length_ = sizeof(novatel::ShortHeader);
238 break;
239 default:
240 buffer_.clear();
241 }
242 } else if (header_length_ > 0) {
243 if (buffer_.size() < header_length_) {
244 buffer_.push_back(*
data_++);
245 } else {
246 if (header_length_ == sizeof(novatel::LongHeader)) {
248 reinterpret_cast<novatel::LongHeader*>(buffer_.data())
249 ->message_length;
250 } else if (header_length_ == sizeof(novatel::ShortHeader)) {
251 total_length_ =
253 reinterpret_cast<novatel::ShortHeader*>(buffer_.data())
254 ->message_length;
255 } else {
256 AERROR <<
"Incorrect header_length_. Should never reach here.";
257 buffer_.clear();
258 }
259 header_length_ = 0;
260 }
261 } else if (total_length_ > 0) {
262 if (buffer_.size() < total_length_) {
263 buffer_.push_back(*
data_++);
264 continue;
265 }
267 buffer_.clear();
268 total_length_ = 0;
270 return type;
271 }
272 }
273 }
275}
const uint8_t * data_end_
constexpr uint16_t CRC_LENGTH