Skip to content

Commit

Permalink
Merge pull request #130 from openxc/generator-updates
Browse files Browse the repository at this point in the history
Generator updates
  • Loading branch information
pjt0620 committed Dec 16, 2019
2 parents 5001b54 + a4d8aa8 commit 99d1ebe
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 15 deletions.
48 changes: 38 additions & 10 deletions openxc/generator/coder.py
Original file line number Diff line number Diff line change
Expand Up @@ -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())
Expand Down Expand Up @@ -231,20 +232,45 @@ 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 = []
i = 1
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
signal.array_index = i - 1
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)
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 = []
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 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, signal_arr_str))
LOG.info("Added signal manager '%s'" % signal.generic_name)

return lines

lines.extend(self._message_set_lister(block))
Expand Down Expand Up @@ -314,16 +340,18 @@ 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("
"&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 + "}")
Expand Down
12 changes: 8 additions & 4 deletions openxc/generator/signals.cpp.footer
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,22 @@ int openxc::signals::getCommandCount() {
return getActiveMessageSet()->commandCount;
}

CanMessageDefinition* openxc::signals::getMessages() {
const CanMessageDefinition* openxc::signals::getMessages() {
return CAN_MESSAGES[getActiveMessageSet()->index];
}

int openxc::signals::getMessageCount() {
return getActiveMessageSet()->messageCount;
}

CanSignal* openxc::signals::getSignals() {
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;
}
Expand All @@ -30,11 +34,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;
}

Expand Down
1 change: 1 addition & 0 deletions openxc/generator/signals.cpp.header
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion openxc/generator/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down

0 comments on commit 99d1ebe

Please sign in to comment.