#!/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()