From 8a2da6b3c83bdf2706268706c6703f7e687f1a57 Mon Sep 17 00:00:00 2001 From: Baldwin Date: Fri, 13 Dec 2019 16:58:28 -0500 Subject: [PATCH 1/5] Initial changes for generator updates --- openxc/generator/coder.py | 6 +++--- openxc/generator/signals.cpp.footer | 8 ++++---- openxc/generator/signals.cpp.header | 1 + openxc/generator/structures.py | 2 +- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/openxc/generator/coder.py b/openxc/generator/coder.py index 0cf4aeed..5c5c897c 100644 --- a/openxc/generator/coder.py +++ b/openxc/generator/coder.py @@ -231,7 +231,7 @@ def _build_signals(self): lines = [] lines.append("const int MAX_SIGNAL_COUNT = %d;" % self._max_signal_count()) - lines.append("CanSignal SIGNALS[][MAX_SIGNAL_COUNT] = {") + lines.append("const CanSignal SIGNALS[][MAX_SIGNAL_COUNT] __attribute__ ((section(\".rodata._ZL7SIGNALS\"))) = {") def block(message_set): lines = [] @@ -322,8 +322,8 @@ def block(message_set): line += ("can::read::translateSignal(" "&SIGNALS[%d][%d], message, " % (message_set.index, signal.array_index)) - line += ("SIGNALS[%d], getSignalCount(), pipeline); // %s" % ( - message_set.index, signal.name)) + line += ("SIGNALS[%d], SIGNAL_MANAGERS[%d], getSignalCount(), pipeline); // %s" % ( + message_set.index, message_set.index, signal.name)) lines.append(line) lines.append(" " * 16 + "break;") lines.append(" " * 12 + "}") diff --git a/openxc/generator/signals.cpp.footer b/openxc/generator/signals.cpp.footer index f1431951..22ce68ee 100644 --- a/openxc/generator/signals.cpp.footer +++ b/openxc/generator/signals.cpp.footer @@ -6,7 +6,7 @@ int openxc::signals::getCommandCount() { return getActiveMessageSet()->commandCount; } -CanMessageDefinition* openxc::signals::getMessages() { +const CanMessageDefinition* openxc::signals::getMessages() { return CAN_MESSAGES[getActiveMessageSet()->index]; } @@ -14,7 +14,7 @@ int openxc::signals::getMessageCount() { return getActiveMessageSet()->messageCount; } -CanSignal* openxc::signals::getSignals() { +const CanSignal* openxc::signals::getSignals() { return SIGNALS[getActiveMessageSet()->index]; } @@ -30,11 +30,11 @@ int openxc::signals::getCanBusCount() { return getActiveMessageSet()->busCount; } -CanMessageSet* openxc::signals::getActiveMessageSet() { +const CanMessageSet* openxc::signals::getActiveMessageSet() { return &MESSAGE_SETS[getConfiguration()->messageSetIndex]; } -CanMessageSet* openxc::signals::getMessageSets() { +const CanMessageSet* openxc::signals::getMessageSets() { return MESSAGE_SETS; } diff --git a/openxc/generator/signals.cpp.header b/openxc/generator/signals.cpp.header index b9e42c14..7b5df371 100644 --- a/openxc/generator/signals.cpp.header +++ b/openxc/generator/signals.cpp.header @@ -16,6 +16,7 @@ namespace can = openxc::can; using openxc::util::log::debug; +using openxc::util::time::FrequencyClock; using openxc::pipeline::Pipeline; using openxc::config::getConfiguration; using openxc::can::read::booleanDecoder; diff --git a/openxc/generator/structures.py b/openxc/generator/structures.py index c46cfd7d..5145ffbb 100644 --- a/openxc/generator/structures.py +++ b/openxc/generator/structures.py @@ -487,7 +487,7 @@ def _invert_bit_index(cls, bit_index, length): return inverted_index def __str__(self): - result = ("{message: &CAN_MESSAGES[%d][%d], genericName: \"%s\", bitPosition: %s, bitSize: %d, factor: %f, offset: %f, minValue: %f, maxValue: %f, frequencyClock: {%f}, sendSame: %s, forceSendChanged: %s, " % ( + result = ("{message: &CAN_MESSAGES[%d][%d], genericName: \"%s\", bitPosition: %s, bitSize: %d, factor: %f, offset: %f, minValue: %f, maxValue: %f, frequency: %f, sendSame: %s, forceSendChanged: %s, " % ( self.message_set.index, self.message_set.lookup_message_index(self.message), self.generic_name, self.bit_position, self.bit_size, From 5547c6470729ac0d8a57be435c1bb17d4bf97105 Mon Sep 17 00:00:00 2001 From: Baldwin Date: Mon, 16 Dec 2019 10:30:04 -0500 Subject: [PATCH 2/5] Added builder for signal managers to code generator --- openxc/generator/coder.py | 32 ++++++++++++++++++++++++++--- openxc/generator/signals.cpp.footer | 4 ++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/openxc/generator/coder.py b/openxc/generator/coder.py index 5c5c897c..b69eec99 100644 --- a/openxc/generator/coder.py +++ b/openxc/generator/coder.py @@ -32,6 +32,7 @@ def build_source(self): lines.extend(self._build_messages()) lines.extend(self._build_signal_states()) lines.extend(self._build_signals()) + lines.extend(self._build_signal_managers()) lines.extend(self._build_initializers()) lines.extend(self._build_loop()) lines.extend(self._build_commands()) @@ -235,16 +236,41 @@ def _build_signals(self): def block(message_set): lines = [] - i = 1 + i = 0 for signal in message_set.all_signals(): if not signal.enabled: LOG.warning("Skipping disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) continue - signal.array_index = i - 1 + if signal.array_index is None: + signal.array_index = i++ lines.append(" " * 8 + "%s" % signal) LOG.info("Added signal '%s'" % signal.generic_name) - i += 1 + return lines + + lines.extend(self._message_set_lister(block)) + lines.append("};") + lines.append("") + + return lines + + def _build_signal_managers(self): + lines = [] + lines.append("SignalManager SIGNAL_MANAGERS[][MAX_SIGNAL_COUNT] = {") + + def block(message_set): + lines = [] + i = 0 + for signal in message_set.all_signals(); + if not signal.enabled: + LOG.warning("Skipping manager for disabled signal '%s' (in 0x%x)" % ( + signal.generic_name, signal.message.id)) + continue + if signal.array_index is None: + signal.array_index = i++ + signal_arr_str = "SIGNALS[%d][%d]" % (signal.message_set.index, signal.array_index) + lines.append(" " * 8 + "{signal: &%s, frequencyClock: {%s.frequency}}," % signal_arr_str) + LOG.info("Added signal manager '%s'" % signal.generic_name) return lines lines.extend(self._message_set_lister(block)) diff --git a/openxc/generator/signals.cpp.footer b/openxc/generator/signals.cpp.footer index 22ce68ee..df4ec6f2 100644 --- a/openxc/generator/signals.cpp.footer +++ b/openxc/generator/signals.cpp.footer @@ -18,6 +18,10 @@ const CanSignal* openxc::signals::getSignals() { return SIGNALS[getActiveMessageSet()->index]; } +SignalManager* openxc::signals::getSignalManagers() { + return SIGNAL_MANAGERS[getActiveMessageSet()->index]; +} + int openxc::signals::getSignalCount() { return getActiveMessageSet()->signalCount; } From f54786f70755400bfdb7f5eefa3297ad4417da2d Mon Sep 17 00:00:00 2001 From: Baldwin Date: Mon, 16 Dec 2019 10:40:04 -0500 Subject: [PATCH 3/5] Bug fix --- openxc/generator/coder.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/openxc/generator/coder.py b/openxc/generator/coder.py index b69eec99..3a71d09a 100644 --- a/openxc/generator/coder.py +++ b/openxc/generator/coder.py @@ -236,14 +236,13 @@ def _build_signals(self): def block(message_set): lines = [] - i = 0 - for signal in message_set.all_signals(): + for i, signal in enumerate(message_set.all_signals()): if not signal.enabled: LOG.warning("Skipping disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) continue if signal.array_index is None: - signal.array_index = i++ + signal.array_index = i lines.append(" " * 8 + "%s" % signal) LOG.info("Added signal '%s'" % signal.generic_name) return lines @@ -260,17 +259,18 @@ def _build_signal_managers(self): def block(message_set): lines = [] - i = 0 - for signal in message_set.all_signals(); + for i, signal in enumerate(message_set.all_signals()); if not signal.enabled: LOG.warning("Skipping manager for disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) continue if signal.array_index is None: - signal.array_index = i++ + signal.array_index = i + signal_arr_str = "SIGNALS[%d][%d]" % (signal.message_set.index, signal.array_index) lines.append(" " * 8 + "{signal: &%s, frequencyClock: {%s.frequency}}," % signal_arr_str) LOG.info("Added signal manager '%s'" % signal.generic_name) + return lines lines.extend(self._message_set_lister(block)) From 83d2a4381e7b3d4b1130252f58109d7865feeeea Mon Sep 17 00:00:00 2001 From: Baldwin Date: Mon, 16 Dec 2019 10:41:28 -0500 Subject: [PATCH 4/5] Fixed syntax error --- openxc/generator/coder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openxc/generator/coder.py b/openxc/generator/coder.py index 3a71d09a..bca5b20b 100644 --- a/openxc/generator/coder.py +++ b/openxc/generator/coder.py @@ -259,7 +259,7 @@ def _build_signal_managers(self): def block(message_set): lines = [] - for i, signal in enumerate(message_set.all_signals()); + for i, signal in enumerate(message_set.all_signals()): if not signal.enabled: LOG.warning("Skipping manager for disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) From a4d8aa818014760460163e56b6b211b050c3f52e Mon Sep 17 00:00:00 2001 From: Collin Baldwin Date: Mon, 16 Dec 2019 19:51:23 +0000 Subject: [PATCH 5/5] Bug fixes and updated handler generator --- openxc/generator/coder.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/openxc/generator/coder.py b/openxc/generator/coder.py index bca5b20b..628ff904 100644 --- a/openxc/generator/coder.py +++ b/openxc/generator/coder.py @@ -241,7 +241,7 @@ def block(message_set): LOG.warning("Skipping disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) continue - if signal.array_index is None: + if not hasattr(signal, "array_index") or signal.array_index is None: signal.array_index = i lines.append(" " * 8 + "%s" % signal) LOG.info("Added signal '%s'" % signal.generic_name) @@ -264,11 +264,11 @@ def block(message_set): LOG.warning("Skipping manager for disabled signal '%s' (in 0x%x)" % ( signal.generic_name, signal.message.id)) continue - if signal.array_index is None: + if not hasattr(signal, "array_index") or signal.array_index is None: signal.array_index = i signal_arr_str = "SIGNALS[%d][%d]" % (signal.message_set.index, signal.array_index) - lines.append(" " * 8 + "{signal: &%s, frequencyClock: {%s.frequency}}," % signal_arr_str) + lines.append(" " * 8 + "{signal: &%s, frequencyClock: {%s.frequency}}," % (signal_arr_str, signal_arr_str)) LOG.info("Added signal manager '%s'" % signal.generic_name) return lines @@ -340,9 +340,11 @@ def block(message_set): lines.append(" " * 12 + "case 0x%x: // %s" % (message.id, message.name)) for handler in message.handlers: - lines.append(" " * 16 + "%s(message, SIGNALS[%d], " % ( - handler, message_set.index) + - "getSignalCount(), pipeline);") + lines.append(" " * 16 + "%s(SIGNALS[%d], SIGNALS[%d], " % ( + handler, message_set.index, message_set.index) + + "SIGNAL_MANAGERS[%d], SIGNAL_MANAGERS[%d], " % ( + message_set.index, message_set.index) + + "getSignalCount(), message, pipeline);") for signal in message.active_signals(): line = " " * 16 line += ("can::read::translateSignal("