bool IGCParser::readBRecord(const char *line, int len) { qreal lat, lon, ele; QTime time; if (len < 35) return false; if (!readTimestamp(line + 1, time)) { _errorString = "Invalid timestamp"; return false; } if (!readLat(line + 7, lat)) { _errorString = "Invalid latitude"; return false; } if (!readLon(line + 15, lon)) { _errorString = "Invalid longitude"; return false; } if (!readAltitude(line + 24, ele)) { _errorString = "Invalid altitude"; return false; } if (time < _time) _date = _date.addDays(1); _time = time; Trackpoint t(Coordinates(lon, lat)); t.setTimestamp(QDateTime(_date, _time, Qt::UTC)); t.setElevation(ele); _tracks.last().append(t); return true; }
PacketStreamReader::FrameInfo PacketStreamReader::Stream::peekFrameHeader(const PacketStreamReader& p) { if (_frame) return _frame; _frame.frame_streampos = tellg(); if (peekTag() == TAG_SRC_JSON) { readTag(TAG_SRC_JSON); _frame.src = readUINT(); json::parse(_frame.meta, *this); } _frame.packet_streampos = tellg(); readTag(TAG_SRC_PACKET); _frame.time = readTimestamp(); if (_frame) { if (readUINT() != _frame.src) throw std::runtime_error("Frame preceded by metadata for a mismatched source. Stream may be corrupt."); } else _frame.src = readUINT(); _frame.size = p.Sources()[_frame.src].data_size_bytes; if (!_frame.size) _frame.size = readUINT(); _frame.sequence_num = p.GetPacketIndex(_frame.src); _tag = TAG_SRC_PACKET; return _frame; }
time_t readTimestampUTC(char *timestampBuffer, time_t referenceTime) { return readTimestamp(timestampBuffer, referenceTime, 1); }
time_t readTimestampLocal(char *timestampBuffer, time_t referenceTime) { return readTimestamp(timestampBuffer, referenceTime, 0); }