Skip to content

Commit ce97f5c

Browse files
author
Joshua Whitley
committed
Moving around some things. Starting to add Transcoders.
1 parent 01aba4c commit ce97f5c

File tree

7 files changed

+103
-12
lines changed

7 files changed

+103
-12
lines changed

include/common_defs.hpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,15 @@ static const std::array<std::string, 10> PREAMBLES =
7878
"BA_" // ATTRIBUTE VALUE
7979
};
8080

81+
enum class AttributeType
82+
{
83+
ENUM,
84+
FLOAT,
85+
HEX,
86+
INT,
87+
STRING
88+
};
89+
8190
enum class DbcObjType
8291
{
8392
VERSION,
@@ -91,21 +100,17 @@ enum class DbcObjType
91100
ATTRIBUTE_VAL
92101
};
93102

94-
enum class AttributeType
95-
{
96-
ENUM,
97-
FLOAT,
98-
HEX,
99-
INT,
100-
STRING
101-
};
102-
103103
enum class Order
104104
{
105105
BE,
106106
LE
107107
};
108108

109+
enum class TranscodeErrorType
110+
{
111+
NONE
112+
};
113+
109114
struct DbcReadException
110115
: public std::exception
111116
{
@@ -169,6 +174,14 @@ class AttrObj
169174
std::unordered_map<std::string, std::string> attribute_values_;
170175
};
171176

177+
struct TranscodeError
178+
{
179+
TranscodeError(TranscodeErrorType type, std::string desc)
180+
: type(type), desc(desc) {};
181+
TranscodeErrorType type;
182+
std::string desc;
183+
};
184+
172185
} // namespace DbcLoader
173186
} // namespace CAN
174187
} // namespace AS

include/database.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class Database
6161
std::vector<const Attribute *> getAttributeDefinitions() const;
6262
void writeDbcToFile(const std::string & dbc_path) const;
6363
void writeDbcToStream(std::ostream & mem_stream) const;
64+
std::unordered_map<unsigned int, MessageTranscoder> getTranscoders();
6465

6566
private:
6667
std::string version_;

include/message.hpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ class Message
6363
std::unordered_map<std::string, const Signal *> getSignals() const;
6464
const std::string * getComment() const;
6565

66-
unsigned char dlcToLength(const unsigned char & dlc) const;
66+
static unsigned char dlcToLength(const unsigned char & dlc);
6767

6868
friend class Database;
69+
friend class MessageTranscoder;
6970

7071
private:
7172
unsigned int id_;
@@ -79,6 +80,23 @@ class Message
7980
void parse() override;
8081
};
8182

83+
class MessageTranscoder
84+
{
85+
public:
86+
MessageTranscoder(Message * dbc_msg);
87+
88+
const Message * getMessageDef();
89+
void decode(std::vector<uint8_t> && raw_data, TranscodeError * err = nullptr);
90+
std::vector<uint8_t> encode(TranscodeError * err = nullptr);
91+
92+
private:
93+
void decodeRawData(TranscodeError * err);
94+
95+
Message * msg_def_;
96+
std::vector<uint8_t> data_;
97+
std::unordered_map<std::string, SignalTranscoder> signal_xcoders_;
98+
};
99+
82100
} // namespace DbcLoader
83101
} // namespace CAN
84102
} // namespace AS

include/signal.hpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,8 @@ class Signal
8080
std::map<unsigned int, const std::string *> getValueDescriptions() const;
8181
const std::string * getComment() const;
8282

83-
friend class Message;
8483
friend class Database;
84+
friend class Message;
8585

8686
private:
8787
std::string name_;
@@ -104,6 +104,15 @@ class Signal
104104
void parse() override;
105105
};
106106

107+
class SignalTranscoder
108+
{
109+
public:
110+
SignalTranscoder(Signal * dbc_sig);
111+
112+
private:
113+
Signal * sig_def_;
114+
};
115+
107116
} // namespace DbcLoader
108117
} // namespace CAN
109118
} // namespace AS

src/database.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,17 @@ void Database::writeDbcToStream(std::ostream & mem_stream) const
169169
generate(mem_stream);
170170
}
171171

172+
std::unordered_map<unsigned int, MessageTranscoder> Database::getTranscoders()
173+
{
174+
std::unordered_map<unsigned int, MessageTranscoder> xcoders;
175+
176+
for (auto msg = messages_.begin(); msg != messages_.end(); ++msg) {
177+
xcoders.emplace(msg->first, &(msg->second));
178+
}
179+
180+
return xcoders;
181+
}
182+
172183
void Database::generate(std::ostream & output) const
173184
{
174185
std::vector<BusNodeComment> bus_node_comments;

src/message.cpp

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,11 +146,45 @@ void Message::parse()
146146
name_ = name_.substr(0, name_.length() - 1);
147147
}
148148

149-
unsigned char Message::dlcToLength(const unsigned char & dlc) const
149+
unsigned char Message::dlcToLength(const unsigned char & dlc)
150150
{
151151
return DLC_LENGTH[dlc];
152152
}
153153

154+
MessageTranscoder::MessageTranscoder(Message * dbc_msg)
155+
: msg_def_(dbc_msg),
156+
data_()
157+
{
158+
data_.assign(Message::dlcToLength(dbc_msg->getDlc()), 0);
159+
160+
for (auto sig = msg_def_->signals_.begin(); sig != msg_def_->signals_.end(); ++sig) {
161+
signal_xcoders_.emplace(sig->first, &(sig->second));
162+
}
163+
}
164+
165+
const Message * MessageTranscoder::getMessageDef()
166+
{
167+
return msg_def_;
168+
}
169+
170+
void MessageTranscoder::decode(std::vector<uint8_t> && raw_data, TranscodeError * err)
171+
{
172+
data_ = std::move(raw_data);
173+
decodeRawData(err);
174+
}
175+
176+
void MessageTranscoder::decodeRawData(TranscodeError * err)
177+
{
178+
err = new TranscodeError(TranscodeErrorType::NONE, "");
179+
180+
// TODO(jwhitleyastuff): Do the thing.
181+
}
182+
183+
std::vector<uint8_t> MessageTranscoder::encode(TranscodeError * err)
184+
{
185+
return std::vector<uint8_t>(data_.begin(), data_.end());
186+
}
187+
154188
} // namespace DbcLoader
155189
} // namespace CAN
156190
} // namespace AS

src/signal.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,11 @@ void Signal::parse()
341341
}
342342
}
343343

344+
SignalTranscoder::SignalTranscoder(Signal * dbc_sig)
345+
: sig_def_(dbc_sig)
346+
{
347+
}
348+
344349
} // namespace DbcLoader
345350
} // namespace CAN
346351
} // namespace AS

0 commit comments

Comments
 (0)