102 lines
2.7 KiB
Python
102 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
|
|
import wx
|
|
import wx.propgrid
|
|
|
|
import gettext
|
|
|
|
import cantools
|
|
|
|
db = cantools.database.load_file('res/EBUS_Host.dbc')
|
|
|
|
from BmsView import BmsMonitorFrame
|
|
|
|
def parse_can_id (arbitration_id):
|
|
mtag = (arbitration_id & 0xfffff000) >> 12
|
|
mid = (arbitration_id & 0xf00) >> 8
|
|
mtype = arbitration_id & 0xff
|
|
return mtag, mid, mtype
|
|
|
|
def findCategory (imsg, isignal):
|
|
tag, id, type = parse_can_id(imsg)
|
|
if tag != 0x14180:
|
|
return None
|
|
|
|
if 0x00 <= type <= 0x06:
|
|
return "bmsprofile"
|
|
|
|
elif type == 0x11:
|
|
return "packprofile"
|
|
|
|
elif type == 0x10:
|
|
if isignal < 4:
|
|
return "packprofile"
|
|
else:
|
|
return "packalarms"
|
|
|
|
elif type == 0x15:
|
|
if isignal < 3:
|
|
return "packdata"
|
|
else:
|
|
return "packalarms"
|
|
|
|
elif type == 0x14:
|
|
return "packdata"
|
|
|
|
elif 0x16 <= type <= 0x20:
|
|
return "packdata"
|
|
|
|
elif 0x07 <= type <= 0x0B:
|
|
return "moduledata"
|
|
|
|
else:
|
|
return "undefined"
|
|
|
|
|
|
class BmsMonitorView(BmsMonitorFrame):
|
|
def __init__(self, *args, **kwds):
|
|
BmsMonitorFrame.__init__(self, *args, **kwds)
|
|
|
|
self.property_grid_page_info = self.property_grid_1.AddPage("Info")
|
|
|
|
for cat_name in ["bmsprofile", "packprofile", "packdata"]:
|
|
cat = wx.propgrid.PropertyCategory(label=cat_name)
|
|
self.property_grid_page_info.Append(cat)
|
|
|
|
# bms_model = wx.propgrid.StringProperty(label="Model", name="bms_model", value="B3DWER32EW")
|
|
# self.property_grid_page_info.AppendIn("packdata", bms_model)
|
|
|
|
for msg in db.messages:
|
|
tag, id, type = parse_can_id(msg.frame_id)
|
|
|
|
for signal in msg.signals:
|
|
if signal.is_float:
|
|
prop = wx.propgrid.FloatProperty(label=signal.name)
|
|
else:
|
|
prop = wx.propgrid.IntProperty(label=signal.name)
|
|
prop.SetHelpString(signal.comment)
|
|
|
|
if tag == 0x14180 and id == 0x2 and 0x00 <= type <= 0x06: # BMS Profile
|
|
self.property_grid_page_info.AppendIn("bmsprofile", prop)
|
|
|
|
if tag == 0x14180 and id == 0x2 and 0x10 <= type <= 0x20: # Pack Profile and Data
|
|
self.property_grid_page_info.AppendIn("packdata", prop)
|
|
|
|
|
|
# end of class BmsMonitorFrame
|
|
|
|
class BmsApp(wx.App):
|
|
def OnInit(self):
|
|
self.frame = BmsMonitorView(None, wx.ID_ANY, "")
|
|
self.SetTopWindow(self.frame)
|
|
self.frame.Show()
|
|
return True
|
|
|
|
# end of class BmsApp
|
|
|
|
if __name__ == "__main__":
|
|
gettext.install("app") # replace with the appropriate catalog name
|
|
|
|
app = BmsApp(0)
|
|
app.MainLoop()
|