Skip to content

Commit

Permalink
Add signal group stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
christoph2 committed Jan 17, 2019
1 parent 8ea2f97 commit 9e7cc49
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 41 deletions.
3 changes: 3 additions & 0 deletions pydbc/cgen/templates/dbc.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,9 @@ ${int(desc['Value'])} "${desc['Value_Description']}" \
%endfor
;
%endfor
%for sigGroup in db.fetchSignalGroups():
SIG_GROUP_ ${sigGroup['Message_Id']} ${sigGroup['Name']} ${sigGroup['Value']} : ${' '.join(sigGroup['Signals'])};
%endfor
<% signalValueTypes = db.fetchExtendedSignalValueTypes() %>\
%if signalValueTypes:
%for item in signalValueTypes:
Expand Down
22 changes: 21 additions & 1 deletion pydbc/db/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,29 @@ def fetchMessageSignalByMessageIDandSignalName(self, messageID, signalName):
result = cur.fetchone()
return result

def fetchSignalGroups(self):
cur = self.getCursor()
cur.execute("""SELECT t1.RID, t1.Name, t1.Value,
(SELECT t2.Message_Id FROM Message AS t2 WHERE t2.RID = t1.Message) AS Message_Id FROM Signal_Group as t1
""")
while True:
row = cur.fetchone()
#print("HELLO SG:", row)
if row is None:
return
else:
result = self.db.createDictFromRow(row, cur.description)
cur2 = self.getCursor()
rid = row[0]
res2 = cur2.execute("""SELECT (SELECT t2.Name FROM Signal AS t2 WHERE t2.RID = t1.signal) AS Name
FROM Signal_Group_Signal AS t1 WHERE t1.Signal_Group = {}""".format(rid))
signals = [s[0] for s in cur2.fetchall()]
result.update(Signals = signals)
yield result

def fetchSignalReceivers(self, messageId, signalId):
cur = self.getCursor()
cur.execute("SELECT (SELECT name FROM Node WHERE RID=node) FROM Node_RxSignal WHERE message=? and signal=?", [messageId, signalId])
cur.execute("SELECT (SELECT name FROM Node WHERE RID = node) FROM Node_RxSignal WHERE message=? and signal=?", [messageId, signalId])
result = [x[0] for x in cur.fetchall()]
return result

Expand Down
7 changes: 4 additions & 3 deletions pydbc/db/load/ldf.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,13 @@
from pydbc.types import AttributeType, ValueType, CategoryType
from .base import BaseLoader

from pprint import pprint

class LdfLoader(BaseLoader):

def __init__(self, db, queryClass):
super(DbcLoader, self).__init__(db, queryClass)
self.comments = Comments()
super(LdfLoader, self).__init__(db, queryClass)

def _insertValues(self, cur, tree):
print(tree)
pprint(tree)

2 changes: 2 additions & 0 deletions pydbc/db/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@
"Node_TxMessage",
"Node_TxSig",
"Message",
"Signal_Group_Signal",
"Signal_Group",
"Signal",
"Attribute_Value",
"AttributeRel_Value",
Expand Down
1 change: 0 additions & 1 deletion pydbc/dbcListener.py
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,6 @@ def exitSignalGroup(self, ctx):
signals = [x.value for x in ctx.signals]
ctx.value = dict(messageID = messageID, groupName = groupName, gvalue = gvalue, signals = signals)


def exitCategoryDefinitions(self, ctx):
ctx.value = [x.value for x in ctx.items]

Expand Down
16 changes: 13 additions & 3 deletions pydbc/scripts/vndb_importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,24 @@ def execute(fun, name, *args):
else:
return True


class Importer: pass


class DbcImporter(Importer):
pass


class LdfImporter(Importer):
pass


def importFile(pth):
global ucout


fname = pth.parts[-1]
fnbase = pth.stem
fnext = pth.suffix
print("PTH-ABS:", pth.parent, fname, )

db = CanDatabase(r"{}.vndb".format(fnbase))

Expand All @@ -95,7 +105,7 @@ def importFile(pth):
print(hl.errorText(" Exiting import function due to exception while parsing: {}\n".format(str(e))), flush = True)
return

#print("Finished ANTLR parsing.", flush = True)
print("Finished ANTLR parsing.", flush = True)

loader = DbcLoader(db, Queries)

Expand Down
37 changes: 4 additions & 33 deletions pydbc/tests/test_signal_groups.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@


from pydbc import parser
from pydbc.parser import BaseListener, Parser

SG0 = """SIG_GROUP_ 288 Switches 1 : WindowSwitch DoorSwitch;"""

Expand All @@ -13,36 +12,8 @@
SIG_GROUP_ 2316304896 Coulomb_Count 1 : CC_low CC_high;
"""

class MyListener(parser.BaseListener):

def exitSignalGroups(self, ctx):
items = [x.value for x in ctx.items]
ctx.value = items
self.value = ctx.value

def exitSignalGroup(self, ctx):
messageID = ctx.messageID.value
groupName = ctx.groupName.value
gvalue = ctx.gvalue.value
signals = [x.value for x in ctx.signals]
ctx.value = dict(messageID = messageID, groupName = groupName, gvalue = gvalue, signals = signals)

class ParserTestCase(parser.BaseListener):

def __init__(self, grammar, startSymbol, listener, *args):
super(ParserTestCase, self).__init__()
parser.BaseListener.__init__(self)
self.pw = parser.ParserWrapper(grammar, startSymbol, listener)

def parse(self, data):
return self.pw.parseFromString(data)


class SignalGroups(ParserTestCase):

def __init__(self):
print("*** SignalGroups c-tor")
super(SignalGroups, self).__init__("dbc", "signalGroups", MyListener)
class SignalGroups(BaseListener):

def exitSignalGroups(self, ctx):
items = [x.value for x in ctx.items]
Expand All @@ -57,8 +28,8 @@ def exitSignalGroup(self, ctx):
ctx.value = dict(messageID = messageID, groupName = groupName, gvalue = gvalue, signals = signals)

def test_signal_groups():
tsg = SignalGroups()
res = tsg.parse(SG0)
tsg = Parser("dbc", "signalGroups", SignalGroups)
res = tsg.parseFromString(SG0)
print(res)
assert len(res) == 1
res = res[0]
Expand Down

0 comments on commit 9e7cc49

Please sign in to comment.