Skip to content

Commit 60abfec

Browse files
committed
Added template ***-config.h generation.
1 parent cf4ac28 commit 60abfec

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

src/codegen/c-main-generator.cpp

Lines changed: 72 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ void CiMainGenerator::Generate(std::vector<MessageDescriptor_t*>& msgs, const Fs
4343

4444
// 5 step is to print fmon source file
4545
Gen_FMonSource();
46+
47+
// 6 step is to print template for drv-config.h
48+
Gen_ConfigHeader();
4649
}
4750

4851
void CiMainGenerator::Gen_MainHeader()
@@ -254,6 +257,73 @@ void CiMainGenerator::Gen_MainSource()
254257
fwriter->Flush(fdesc->core_c.fpath);
255258
}
256259

260+
void CiMainGenerator::Gen_ConfigHeader()
261+
{
262+
fwriter->AppendLine("#pragma once", 2);
263+
264+
fwriter->AppendLine("/* include common dbccode configurations */");
265+
fwriter->AppendLine("#include \"dbccodeconf.h\"", 3);
266+
fwriter->AppendLine("/* ----------------------------------------------------------------------------------- */");
267+
fwriter->AppendLine("/* To enable using messaged typedefs based on bit-fields");
268+
fwriter->AppendLine(" uncomment define below. (Note(!): bit-feild was not tested");
269+
fwriter->AppendLine(" properly, so using is up to user). */",2 );
270+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->usebits_def.c_str()), 3);
271+
fwriter->AppendLine("/* ----------------------------------------------------------------------------------- */");
272+
fwriter->AppendLine("/* By default signature of pack function intakes a few simple typed params");
273+
fwriter->AppendLine(" for loading data, len, etc. To enable specific struct based signature");
274+
fwriter->AppendLine(" uncomment define below. */", 2);
275+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->usesruct_def.c_str()), 3);
276+
fwriter->AppendLine("/* ----------------------------------------------------------------------------------- */");
277+
fwriter->AppendLine("/* To enable phys values handling uncomment define below. It will:");
278+
fwriter->AppendLine(" - adds additional members to message struct with name extension *_phys");
279+
fwriter->AppendLine(" which have user defined type @sigfloat_t (must be defined by user in");
280+
fwriter->AppendLine(" dbccodeconf.h)");
281+
fwriter->AppendLine(" - in unpack function these signal will be loaded by the converted ");
282+
fwriter->AppendLine(" value (with factor and offset)");
283+
fwriter->AppendLine(" - in pack function the CAN frame signal values will be loaded from");
284+
fwriter->AppendLine(" *_phys value with factor and offset conversion. */", 2);
285+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->usesigfloat_def.c_str()), 3);
286+
287+
fwriter->AppendLine("/* ----------------------------------------------------------------------------------- */");
288+
fwriter->AppendLine("/* To enable monitor functions uncomment define below.");
289+
fwriter->AppendLine("/* (Note(!): the \"canmonitorutil.h\" must be accessed in include path):");
290+
fwriter->AppendLine(" It will:");
291+
fwriter->AppendLine(" - bring to message struct special monitor member @mon1 ");
292+
fwriter->AppendLine(" - calling function FMon_*** function inside unpack function ");
293+
fwriter->AppendLine(" which is empty by default and must be filled by user code");
294+
fwriter->AppendLine(" to check if any fault state detected. */", 2);
295+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->usemon_def.c_str()), 3);
296+
297+
fwriter->AppendLine(StrPrint("/* When monitor using is enabled (%s)", fdesc->usemon_def.c_str()));
298+
fwriter->AppendLine(" and define below uncommented, additional signal will be added");
299+
fwriter->AppendLine(" to message struct. ***_expt - expected rolling counter, to ");
300+
fwriter->AppendLine(" perform monitoring rolling counter sequence automatically. */", 2);
301+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->useroll_def.c_str()), 3);
302+
303+
fwriter->AppendLine("/* ----------------------------------------------------------------------------------- */");
304+
fwriter->AppendLine(StrPrint("/* When monitor using is enabled (%s)", fdesc->usemon_def.c_str()));
305+
fwriter->AppendLine(" and define below uncommented, checksum calculation in unpack");
306+
fwriter->AppendLine(" function will be performed. in pack function checksum signal will");
307+
fwriter->AppendLine(" be calculated automatically too. ", 2);
308+
fwriter->AppendLine(" The signal that can be selected as checksum must have in comment substring with next format:");
309+
fwriter->AppendLine(" <Checksum:XOR8:3> where:");
310+
fwriter->AppendLine(" - Checksum : constant marker word");
311+
fwriter->AppendLine(" - XOR8 : type of method, this text will be passed to GetFrameHash function as is,");
312+
fwriter->AppendLine(" so the best use case is to pre-define enum collection which have value from this position");
313+
fwriter->AppendLine(" - 3 : optional value that will be passed to GetFrameHash as integer value", 2);
314+
fwriter->AppendLine(" To this case user must define specific function", 2);
315+
fwriter->AppendLine(" function: uint8_t GetFrameHash(data_ptr, len, msgid, type, option)", 2);
316+
fwriter->AppendLine(" where:");
317+
fwriter->AppendLine(" - data_ptr : pointer to payload");
318+
fwriter->AppendLine(" - len : message dlc or payload len");
319+
fwriter->AppendLine(" - msgid : CAN Message ID");
320+
fwriter->AppendLine(" - type : method of algorythm");
321+
fwriter->AppendLine(" - option : optional integer param */", 2);
322+
fwriter->AppendLine(StrPrint("// #define %s", fdesc->usecsm_def.c_str()), 2);
323+
324+
fwriter->Flush(fdesc->core_c.dir + '/' + fdesc->drvname + "-config.h");
325+
}
326+
257327
void CiMainGenerator::Gen_FMonHeader()
258328
{
259329
fwriter->AppendLine("#pragma once", 2);
@@ -461,7 +531,8 @@ void CiMainGenerator::WriteUnpackBody(const CiExpr_t* sgs)
461531
{
462532
// Put checksum check function call here
463533
fwriter->AppendLine(StrPrint("#ifdef %s", fdesc->usecsm_def.c_str()));
464-
fwriter->AppendLine(StrPrint(" _m->mon1.csm_error = ((uint8_t)GetFrameCRC(_d, %s_DLC, %s_CANID, %s, %d)) != (_m->%s))",
534+
fwriter->AppendLine(
535+
StrPrint(" _m->mon1.csm_error = ((uint8_t)GetFrameHash(_d, %s_DLC, %s_CANID, %s, %d)) != (_m->%s))",
465536
sgs->msg.Name.c_str(), sgs->msg.Name.c_str(), sgs->msg.CsmMethod.c_str(),
466537
sgs->msg.CsmOp, sgs->msg.CsmSig->Name.c_str()));
467538
fwriter->AppendLine(StrPrint("#endif // %s", fdesc->usecsm_def.c_str()), 2);

src/codegen/c-main-generator.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class CiMainGenerator {
1717

1818
void Gen_MainHeader();
1919
void Gen_MainSource();
20+
void Gen_ConfigHeader();
2021
void Gen_FMonHeader();
2122
void Gen_FMonSource();
2223

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy