ulog_parser.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <iostream>
4 #include <vector>
5 #include <map>
6 #include <set>
7 #include <string.h>
8 #include <cstdint>
9 
10 #include "string_view.hpp"
11 
13 
15 {
16 public:
17  struct DataStream
18  {
19  const char* _data;
20  const size_t _length;
21  size_t offset;
22 
23  DataStream(char* data, int len) : _data(data), _length(len), offset(0)
24  {
25  }
26 
27  void read(char* dst, int len)
28  {
29  memcpy(dst, &_data[offset], len);
30  offset += len;
31  }
32 
33  operator bool()
34  {
35  return offset < _length;
36  }
37  };
38 
40  {
54  };
55 
56  struct Field
57  {
58  Field() : array_size(1)
59  {
60  }
62  std::string field_name;
63  std::string other_type_ID;
65  };
66 
67  struct Parameter
68  {
69  std::string name;
70  union
71  {
72  int32_t val_int;
73  float val_real;
74  } value;
76  };
77 
78  struct Format
79  {
80  Format() : padding(0)
81  {
82  }
83  std::string name;
84  std::vector<Field> fields;
85  int padding;
86  };
87 
88  struct MessageLog
89  {
90  char level;
91  uint64_t timestamp;
92  std::string msg;
93  };
94 
95  struct Subscription
96  {
97  Subscription() : msg_id(0), multi_id(0), format(nullptr)
98  {
99  }
100 
101  uint16_t msg_id;
102  uint8_t multi_id;
103  std::string message_name;
104  const Format* format;
105  };
106 
107  struct Timeseries
108  {
109  std::vector<uint64_t> timestamps;
110  std::vector<std::pair<std::string, std::vector<double>>> data;
111  };
112 
113 public:
114  ULogParser(DataStream& datastream);
115 
116  const std::map<std::string, Timeseries>& getTimeseriesMap() const;
117 
118  const std::vector<Parameter>& getParameters() const;
119 
120  const std::map<std::string, std::string>& getInfo() const;
121 
122  const std::vector<MessageLog>& getLogs() const;
123 
124 private:
125  bool readFileHeader(DataStream& datastream);
126 
127  bool readFileDefinitions(DataStream& datastream);
128 
129  bool readFormat(DataStream& datastream, uint16_t msg_size);
130 
131  bool readFlagBits(DataStream& datastream, uint16_t msg_size);
132 
133  bool readInfo(DataStream& datastream, uint16_t msg_size);
134 
135  bool readParameter(DataStream& datastream, uint16_t msg_size);
136 
137  bool readSubscription(DataStream& datastream, uint16_t msg_size);
138 
139  size_t fieldsCount(const Format& format) const;
140 
142 
144 
145  std::vector<Parameter> _parameters;
146 
147  std::vector<uint8_t> _read_buffer;
148 
149  std::streampos _data_section_start;
150 
152  1ULL << 60;
153 
154  std::set<std::string> _overridden_params;
155 
156  std::map<std::string, Format> _formats;
157 
158  std::map<std::string, std::string> _info;
159 
160  std::map<uint16_t, Subscription> _subscriptions;
161 
162  std::map<std::string, Timeseries> _timeseries;
163 
164  std::vector<StringView> splitString(const StringView& strToSplit, char delimeter);
165 
166  std::set<std::string> _message_name_with_multi_id;
167 
168  std::vector<MessageLog> _message_logs;
169 
170  void parseDataMessage(const Subscription& sub, char* message);
171 
172  char* parseSimpleDataMessage(Timeseries& timeseries, const Format* format,
173  char* message, size_t* index);
174 };
std::vector< uint64_t > timestamps
Definition: ulog_parser.h:109
Timeseries createTimeseries(const Format *format)
std::vector< Field > fields
Definition: ulog_parser.h:84
std::vector< MessageLog > _message_logs
Definition: ulog_parser.h:168
const std::map< std::string, std::string > & getInfo() const
#define nullptr
Definition: backward.hpp:386
std::streampos _data_section_start
first ADD_LOGGED_MSG message
Definition: ulog_parser.h:149
size_t fieldsCount(const Format &format) const
const std::map< std::string, Timeseries > & getTimeseriesMap() const
bool readParameter(DataStream &datastream, uint16_t msg_size)
uint64_t _file_start_time
Definition: ulog_parser.h:143
std::vector< Parameter > _parameters
Definition: ulog_parser.h:145
char * dst
Definition: lz4.h:724
std::map< std::string, Timeseries > _timeseries
Definition: ulog_parser.h:162
nonstd::string_view StringView
Definition: ulog_parser.h:12
std::string name
Definition: ulog_parser.h:83
const std::vector< Parameter > & getParameters() const
basic_string_view< char > string_view
Definition: core.h:522
const Format * format
Definition: ulog_parser.h:104
const char * _data
Definition: ulog_parser.h:19
std::vector< StringView > splitString(const StringView &strToSplit, char delimeter)
bool readSubscription(DataStream &datastream, uint16_t msg_size)
int64_t _read_until_file_position
read limit if log contains appended data
Definition: ulog_parser.h:151
std::set< std::string > _overridden_params
Definition: ulog_parser.h:154
std::map< std::string, std::string > _info
Definition: ulog_parser.h:158
const size_t _length
Definition: ulog_parser.h:20
const std::vector< MessageLog > & getLogs() const
DataStream(char *data, int len)
Definition: ulog_parser.h:23
std::vector< uint8_t > _read_buffer
Definition: ulog_parser.h:147
std::set< std::string > _message_name_with_multi_id
Definition: ulog_parser.h:166
void read(char *dst, int len)
Definition: ulog_parser.h:27
FormatType type
Definition: ulog_parser.h:61
ULogParser(DataStream &datastream)
Definition: ulog_parser.cpp:13
char * parseSimpleDataMessage(Timeseries &timeseries, const Format *format, char *message, size_t *index)
bool readInfo(DataStream &datastream, uint16_t msg_size)
bool readFormat(DataStream &datastream, uint16_t msg_size)
std::map< std::string, Format > _formats
Definition: ulog_parser.h:156
Definition: core.h:1131
std::vector< std::pair< std::string, std::vector< double > > > data
Definition: ulog_parser.h:110
void parseDataMessage(const Subscription &sub, char *message)
std::map< uint16_t, Subscription > _subscriptions
Definition: ulog_parser.h:160
bool readFlagBits(DataStream &datastream, uint16_t msg_size)
bool readFileHeader(DataStream &datastream)
bool readFileDefinitions(DataStream &datastream)
Definition: format.h:895
std::string field_name
Definition: ulog_parser.h:62
std::basic_string< Char > format(const text_style &ts, const S &format_str, const Args &... args)
Definition: color.h:583
std::string other_type_ID
Definition: ulog_parser.h:63


plotjuggler
Author(s): Davide Faconti
autogenerated on Mon Jun 19 2023 03:12:53