File tree Expand file tree Collapse file tree 7 files changed +103
-12
lines changed Expand file tree Collapse file tree 7 files changed +103
-12
lines changed Original file line number Diff line number Diff 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+
8190enum 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-
103103enum class Order
104104{
105105 BE,
106106 LE
107107};
108108
109+ enum class TranscodeErrorType
110+ {
111+ NONE
112+ };
113+
109114struct 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
Original file line number Diff line number Diff 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
6566private:
6667 std::string version_;
Original file line number Diff line number Diff 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
7071private:
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
Original file line number Diff line number Diff 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
8686private:
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
Original file line number Diff line number Diff 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+
172183void Database::generate (std::ostream & output) const
173184{
174185 std::vector<BusNodeComment> bus_node_comments;
Original file line number Diff line number Diff 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
Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments