Skip to content

Commit e09a41c

Browse files
committed
implement parsing also std::array, because the blf library outputs this for CANMessages
1 parent ea8404c commit e09a41c

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

include/libdbc/dbc.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ namespace libdbc {
3535
std::vector<libdbc::Message> get_messages() const;
3636

3737
bool parseMessage(const uint32_t id, const std::vector<uint8_t>& data, std::vector<double>& out_values);
38+
bool parseMessage(const uint32_t id, const std::array<uint8_t, 8>& data, std::vector<double>& out_values);
3839

3940
private:
4041
std::string version;

include/libdbc/message.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <string>
55
#include <vector>
6+
#include <array>
67
#include <iostream>
78
#include <libdbc/signal.hpp>
89

@@ -17,7 +18,9 @@ namespace libdbc {
1718
* \param values
1819
* \return
1920
*/
20-
bool parseSignals(const std::vector<uint8_t> data, std::vector<double> &values) const;
21+
bool parseSignals(const std::vector<uint8_t>& data, std::vector<double> &values) const;
22+
bool parseSignals(const std::array<uint8_t,8>& data, std::vector<double>& values) const;
23+
bool parseSignals(const uint8_t* data, std::vector<double>& values) const;
2124

2225
void appendSignal(const Signal& signal);
2326
const std::vector<Signal> signals() const;

src/dbc.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ namespace libdbc {
104104
return false;
105105
}
106106

107+
bool DbcParser::parseMessage(const uint32_t id, const std::array<uint8_t, 8>& data, std::vector<double>& out_values) {
108+
for (const auto& message: messages) {
109+
if (message.id() == id)
110+
return message.parseSignals(data, out_values);
111+
}
112+
return false;
113+
}
114+
107115

108116
void DbcParser::parse_dbc_header(std::istream& file_stream) {
109117
std::string line;

src/message.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ namespace libdbc {
1212
(m_size == rhs.m_size) && (m_node == rhs.m_node);
1313
}
1414

15-
bool Message::parseSignals(const std::vector<uint8_t> data, std::vector<double>& values) const {
15+
bool Message::parseSignals(const uint8_t* data, std::vector<double>& values) const {
1616
if (!m_prepared)
1717
return false;
1818

1919
bitstream_reader_t reader;
20-
bitstream_reader_init(&reader, data.data());
20+
bitstream_reader_init(&reader, data);
2121

2222
double v;
2323
for (const auto& bs: bitstruct) {
@@ -122,6 +122,14 @@ namespace libdbc {
122122
return true;
123123
}
124124

125+
bool Message::parseSignals(const std::array<uint8_t,8>& data, std::vector<double>& values) const {
126+
return parseSignals(data.data(), values);
127+
}
128+
129+
bool Message::parseSignals(const std::vector<uint8_t> &data, std::vector<double>& values) const {
130+
return parseSignals(data.data(), values);
131+
}
132+
125133
void Message::appendSignal(const Signal& signal) {
126134
m_prepared = false;
127135
m_signals.push_back(signal);

0 commit comments

Comments
 (0)