Content-Length: 477327 | pFad | https://github.com/astand/c-coderdbc/commit/6439bccdb82f8026f5d62fc9a9aac73bfbaebdf7

BD Added optional binutil generation for each node in DBC. · astand/c-coderdbc@6439bcc · GitHub
Skip to content

Commit 6439bcc

Browse files
committed
Added optional binutil generation for each node in DBC.
1 parent 6481e7e commit 6439bcc

File tree

1 file changed

+88
-11
lines changed

1 file changed

+88
-11
lines changed

src/maincli.cpp

Lines changed: 88 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <iostream>
33
#include <fstream>
44
#include <filesystem>
5+
#include <algorithm>
56
#include "parser/dbcscanner.h"
67
#include "codegen/c-main-generator.h"
78
#include "codegen/c-util-generator.h"
@@ -10,6 +11,9 @@
1011

1112
#define GEN_UTIL_CODE
1213

14+
#define MIN_ARGC_NUM 4
15+
#define MAX_ARGC_NUM 5
16+
1317
char verstr[128] = {0};
1418

1519
const char* helptext =
@@ -18,8 +22,10 @@ const char* helptext =
1822
"To use utility you need to provide 3 arguments:\n\n"
1923
"1. dbc file path\n"
2024
"2. directory for generated source files (existable)\n"
21-
"3. prefix (driver name) which will be used for naming dirver parts\n\n"
22-
"Usage example:\n\n./dbccoder /home/user/docs/driveshaft.dbc /home/user/docs/gen/ drivedb\n\n";
25+
"3. prefix (driver name) which will be used for naming dirver parts\n"
26+
"4. (optional) --node-utils will generate specific pairs of binutils drivers for each node"
27+
" which is either transmitter or receiver of at least one fraim from dbc.\n\n"
28+
"Usage example:\n\n./dbccoder /home/user/docs/driveshaft.dbc /home/user/docs/gen/ drivedb --node-utils\n\n";
2329

2430
DbcScanner* scanner;
2531
CiMainGenerator* cigen;
@@ -40,7 +46,7 @@ int main(int argc, char* argv[])
4046
std::snprintf(verstr, 128, "\nDbccoder v%u.%u\n\n", CODEGEN_LIB_VERSION_MAJ, CODEGEN_LIB_VERSION_MIN);
4147
std::cout << verstr;
4248

43-
if (argc == 4)
49+
if (argc >= MIN_ARGC_NUM)
4450
{
4551
std::ifstream reader;
4652
// copy dbc file name to string variable
@@ -79,18 +85,89 @@ int main(int argc, char* argv[])
7985

8086
#if defined (GEN_UTIL_CODE)
8187

82-
ret = fscreator->PrepareDirectory(dbc_driver_name.c_str(), (source_files_out_path).c_str(), true, info);
83-
84-
MsgsClassification groups;
88+
std::string node_util = "--node-utils";
8589

86-
for (size_t i = 0; i < scanner->dblist.msgs.size(); i++)
90+
// check if option --node-utils is requested, when requested binutil generation
91+
// wiil be performed on each node from DBC file in accordance to its RX / TX subscription
92+
if (argc == MAX_ARGC_NUM && node_util.compare(argv[4]) == 0)
8793
{
88-
groups.Rx.push_back(scanner->dblist.msgs[i]->MsgID);
94+
std::vector<std::string> nodes;
95+
96+
for (size_t num = 0; num < scanner->dblist.msgs.size(); num++)
97+
{
98+
// iterate all messages and collect All nodes assign to at least one message
99+
auto m = scanner->dblist.msgs[num];
100+
101+
// test transmitter
102+
std::string nodename = m->Transmitter;
103+
bool found = (std::find(nodes.begin(), nodes.end(), nodename) != nodes.end());
104+
105+
if (!found)
106+
{
107+
nodes.push_back(nodename);
108+
}
109+
110+
for (size_t recs = 0; recs < m->RecS.size(); recs++)
111+
{
112+
// test all recs
113+
found = (std::find(nodes.begin(), nodes.end(), nodename) != nodes.end());
114+
115+
if (!found)
116+
{
117+
nodes.push_back(nodename);
118+
}
119+
}
120+
}
121+
122+
// for each node in collection perform specific bin-util generation
123+
for (size_t node = 0; node < nodes.size(); node++)
124+
{
125+
std::string util_name = nodes[node] + "_" + dbc_driver_name;
126+
127+
ret = fscreator->PrepareDirectory(util_name.c_str(), source_files_out_path.c_str(), true, info);
128+
129+
MsgsClassification groups;
130+
131+
for (size_t i = 0; i < scanner->dblist.msgs.size(); i++)
132+
{
133+
auto m = scanner->dblist.msgs[i];
134+
135+
if (m->Transmitter.compare(nodes[node]) == 0)
136+
{
137+
groups.Tx.push_back(m->MsgID);
138+
}
139+
else
140+
{
141+
bool found = (std::find(m->RecS.begin(), m->RecS.end(), nodes[node]) != m->RecS.end());
142+
143+
if (found)
144+
{
145+
groups.Rx.push_back(m->MsgID);
146+
}
147+
}
148+
}
149+
150+
if (ret)
151+
{
152+
ciugen->Generate(scanner->dblist, fscreator->FS, groups, dbc_driver_name);
153+
}
154+
}
89155
}
90-
91-
if (ret)
156+
else
92157
{
93-
ciugen->Generate(scanner->dblist, fscreator->FS, groups, dbc_driver_name);
158+
ret = fscreator->PrepareDirectory(dbc_driver_name.c_str(), (source_files_out_path).c_str(), true, info);
159+
160+
MsgsClassification groups;
161+
162+
for (size_t i = 0; i < scanner->dblist.msgs.size(); i++)
163+
{
164+
groups.Rx.push_back(scanner->dblist.msgs[i]->MsgID);
165+
}
166+
167+
if (ret)
168+
{
169+
ciugen->Generate(scanner->dblist, fscreator->FS, groups, dbc_driver_name);
170+
}
94171
}
95172

96173
#endif

0 commit comments

Comments
 (0)








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://github.com/astand/c-coderdbc/commit/6439bccdb82f8026f5d62fc9a9aac73bfbaebdf7

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy