etherlab/etherlab.py
changeset 2152 e6946c298a42
parent 2149 7f473761c932
child 2157 a2385e535cf5
equal deleted inserted replaced
2151:015dab6a915f 2152:e6946c298a42
   157                              "Name": entry_name,
   157                              "Name": entry_name,
   158                              "Type": entry_type,
   158                              "Type": entry_type,
   159                              "BitSize": object.getBitSize(),
   159                              "BitSize": object.getBitSize(),
   160                              "Access": entry_access,
   160                              "Access": entry_access,
   161                              "PDOMapping": entry_pdomapping}
   161                              "PDOMapping": entry_pdomapping}
   162         
   162 
   163         for TxPdo in self.getTxPdo():
   163         for TxPdo in self.getTxPdo():
   164             ExtractPdoInfos(TxPdo, "Transmit", entries, limits)
   164             ExtractPdoInfos(TxPdo, "Transmit", entries, limits)
   165         for RxPdo in self.getRxPdo():
   165         for RxPdo in self.getRxPdo():
   166             ExtractPdoInfos(RxPdo, "Receive", entries, limits)
   166             ExtractPdoInfos(RxPdo, "Receive", entries, limits)
   167         
   167         
   168         return entries
   168         return entries
   169     setattr(cls, "GetEntriesList", GetEntriesList)
   169     setattr(cls, "GetEntriesList", GetEntriesList)
   170 
   170     
   171     def GetSyncManagers(self):
   171     def GetSyncManagers(self):
   172         sync_managers = []
   172         sync_managers = []
   173         for sync_manager in self.getSm():
   173         for sync_manager in self.getSm():
   174             sync_manager_infos = {}
   174             sync_manager_infos = {}
   175             for name, value in [("Name", sync_manager.getcontent()),
   175             for name, value in [("Name", sync_manager.getcontent()),
   285             if os.path.isfile(filepath) and os.path.splitext(filepath)[-1] == ".xml":
   285             if os.path.isfile(filepath) and os.path.splitext(filepath)[-1] == ".xml":
   286                 xmlfile = open(filepath, 'r')
   286                 xmlfile = open(filepath, 'r')
   287                 xml_tree = minidom.parse(xmlfile)
   287                 xml_tree = minidom.parse(xmlfile)
   288                 xmlfile.close()
   288                 xmlfile.close()
   289                 
   289                 
   290                 modules_infos = None
   290                 self.modules_infos = None
   291                 for child in xml_tree.childNodes:
   291                 for child in xml_tree.childNodes:
   292                     if child.nodeType == xml_tree.ELEMENT_NODE and child.nodeName == "EtherCATInfo":
   292                     if child.nodeType == xml_tree.ELEMENT_NODE and child.nodeName == "EtherCATInfo":
   293                         modules_infos = EtherCATInfoClasses["EtherCATInfo.xsd"]["EtherCATInfo"]()
   293                         self.modules_infos = EtherCATInfoClasses["EtherCATInfo.xsd"]["EtherCATInfo"]()
   294                         modules_infos.loadXMLTree(child)
   294                         self.modules_infos.loadXMLTree(child)
   295                 
   295                 
   296                 if modules_infos is not None:
   296                 if self.modules_infos is not None:
   297                     vendor = modules_infos.getVendor()
   297                     vendor = self.modules_infos.getVendor()
   298                     
   298                     
   299                     vendor_category = self.Library.setdefault(ExtractHexDecValue(vendor.getId()), 
   299                     vendor_category = self.Library.setdefault(ExtractHexDecValue(vendor.getId()), 
   300                                                               {"name": ExtractName(vendor.getName(), _("Miscellaneous")), 
   300                                                               {"name": ExtractName(vendor.getName(), _("Miscellaneous")), 
   301                                                                "groups": {}})
   301                                                                "groups": {}})
   302                     
   302                     
   303                     for group in modules_infos.getDescriptions().getGroups().getGroup():
   303                     for group in self.modules_infos.getDescriptions().getGroups().getGroup():
   304                         group_type = group.getType()
   304                         group_type = group.getType()
   305                         
   305                         
   306                         vendor_category["groups"].setdefault(group_type, {"name": ExtractName(group.getName(), group_type), 
   306                         vendor_category["groups"].setdefault(group_type, {"name": ExtractName(group.getName(), group_type), 
   307                                                                           "parent": group.getParentGroup(),
   307                                                                           "parent": group.getParentGroup(),
   308                                                                           "order": group.getSortOrder(), 
   308                                                                           "order": group.getSortOrder(), 
       
   309                                                                           "value": group.getcontent()["value"],
   309                                                                           "devices": []})
   310                                                                           "devices": []})
   310                     
   311                     
   311                     for device in modules_infos.getDescriptions().getDevices().getDevice():
   312                     for device in self.modules_infos.getDescriptions().getDevices().getDevice():
   312                         device_group = device.getGroupType()
   313                         device_group = device.getGroupType()
   313                         if not vendor_category["groups"].has_key(device_group):
   314                         if not vendor_category["groups"].has_key(device_group):
   314                             raise ValueError, "Not such group \"%\"" % device_group
   315                             raise ValueError, "Not such group \"%\"" % device_group
   315                         vendor_category["groups"][device_group]["devices"].append((device.getType().getcontent(), device))
   316                         vendor_category["groups"][device_group]["devices"].append((device.getType().getcontent(), device))
       
   317 
       
   318         return self.Library 
   316 
   319 
   317     def GetModulesLibrary(self, profile_filter=None):
   320     def GetModulesLibrary(self, profile_filter=None):
   318         if self.Library is None:
   321         if self.Library is None:
   319             self.LoadModules()
   322             self.LoadModules()
   320         library = []
   323         library = []
   373                 for device_type, device_infos in group_infos["devices"]:
   376                 for device_type, device_infos in group_infos["devices"]:
   374                     product_code = ExtractHexDecValue(device_infos.getType().getProductCode())
   377                     product_code = ExtractHexDecValue(device_infos.getType().getProductCode())
   375                     revision_number = ExtractHexDecValue(device_infos.getType().getRevisionNo())
   378                     revision_number = ExtractHexDecValue(device_infos.getType().getRevisionNo())
   376                     if (product_code == ExtractHexDecValue(module_infos["product_code"]) and
   379                     if (product_code == ExtractHexDecValue(module_infos["product_code"]) and
   377                         revision_number == ExtractHexDecValue(module_infos["revision_number"])):
   380                         revision_number == ExtractHexDecValue(module_infos["revision_number"])):
       
   381                         self.cntdevice = device_infos 
       
   382                         self.cntdeviceType = device_type  
   378                         return device_infos, self.GetModuleExtraParams(vendor, product_code, revision_number)
   383                         return device_infos, self.GetModuleExtraParams(vendor, product_code, revision_number)
   379         return None, None
   384         return None, None
   380     
   385     
   381     def ImportModuleLibrary(self, filepath):
   386     def ImportModuleLibrary(self, filepath):
   382         if os.path.isfile(filepath):
   387         if os.path.isfile(filepath):
   457 
   462 
   458 class RootClass:
   463 class RootClass:
   459     
   464     
   460     CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")]
   465     CTNChildrenTypes = [("EthercatNode",_EthercatCTN,"Ethercat Master")]
   461     EditorType = LibraryEditor
   466     EditorType = LibraryEditor
       
   467        
   462     
   468     
   463     def __init__(self):
   469     def __init__(self):
   464         self.ModulesLibrary = None
   470         self.ModulesLibrary = None
   465         self.LoadModulesLibrary()
   471         self.LoadModulesLibrary()
   466     
   472     
   500         return self.ModulesLibrary.GetVendors()
   506         return self.ModulesLibrary.GetVendors()
   501     
   507     
   502     def GetModuleInfos(self, module_infos):
   508     def GetModuleInfos(self, module_infos):
   503         return self.ModulesLibrary.GetModuleInfos(module_infos)
   509         return self.ModulesLibrary.GetModuleInfos(module_infos)
   504 
   510 
   505