841 childs = [] |
841 childs = [] |
842 for child in self.IterChilds(): |
842 for child in self.IterChilds(): |
843 childs.append(child.GetPlugInfos()) |
843 childs.append(child.GetPlugInfos()) |
844 return {"name" : "PLC (%s)"%self.GetProjectName(), "type" : None, "values" : childs} |
844 return {"name" : "PLC (%s)"%self.GetProjectName(), "type" : None, "values" : childs} |
845 |
845 |
846 def GetDefaultTarget(self): |
846 def GetDefaultTargetName(self): |
847 target = self.Classes["BeremizRoot_TargetType"]() |
|
848 if wx.Platform == '__WXMSW__': |
847 if wx.Platform == '__WXMSW__': |
849 target.setcontent({"name": "Win32", "value": self.Classes["TargetType_Win32"]()}) |
848 return "Win32" |
850 else: |
849 else: |
851 target.setcontent({"name": "Linux", "value": self.Classes["TargetType_Linux"]()}) |
850 return "Linux" |
|
851 |
|
852 def GetTarget(self): |
|
853 target = self.BeremizRoot.getTargetType() |
|
854 if target.getcontent() is None: |
|
855 target = self.Classes["BeremizRoot_TargetType"]() |
|
856 target_name = self.GetDefaultTargetName() |
|
857 target.setcontent({"name": target_name, "value": self.Classes["TargetType_%s"%target_name]()}) |
852 return target |
858 return target |
853 |
859 |
854 def GetParamsAttributes(self, path = None): |
860 def GetParamsAttributes(self, path = None): |
855 params = PlugTemplate.GetParamsAttributes(self, path) |
861 params = PlugTemplate.GetParamsAttributes(self, path) |
856 if params[0]["name"] == "BeremizRoot": |
862 if params[0]["name"] == "BeremizRoot": |
857 for child in params[0]["children"]: |
863 for child in params[0]["children"]: |
858 if child["name"] == "TargetType" and child["value"] == '': |
864 if child["name"] == "TargetType" and child["value"] == '': |
859 child.update(self.GetDefaultTarget().getElementInfos("TargetType")) |
865 child.update(self.GetTarget().getElementInfos("TargetType")) |
860 return params |
866 return params |
861 |
867 |
862 def SetParamsAttribute(self, path, value): |
868 def SetParamsAttribute(self, path, value): |
863 if path.startswith("BeremizRoot.TargetType.") and self.BeremizRoot.getTargetType().getcontent() is None: |
869 if path.startswith("BeremizRoot.TargetType.") and self.BeremizRoot.getTargetType().getcontent() is None: |
864 self.BeremizRoot.setTargetType(self.GetDefaultTarget()) |
870 self.BeremizRoot.setTargetType(self.GetDefaultTarget()) |
1194 def GetBuilder(self): |
1200 def GetBuilder(self): |
1195 """ |
1201 """ |
1196 Return a Builder (compile C code into machine code) |
1202 Return a Builder (compile C code into machine code) |
1197 """ |
1203 """ |
1198 # Get target, module and class name |
1204 # Get target, module and class name |
1199 target = self.BeremizRoot.getTargetType() |
1205 targetname = self.GetTarget().getcontent()["name"] |
1200 if target.getcontent() is None: |
|
1201 target = self.GetDefaultTarget() |
|
1202 targetname = target.getcontent()["name"] |
|
1203 modulename = "targets." + targetname |
1206 modulename = "targets." + targetname |
1204 classname = targetname + "_target" |
1207 classname = targetname + "_target" |
1205 |
1208 |
1206 # Get module reference |
1209 # Get module reference |
1207 try : |
1210 try : |
1388 "retrieve_calls":"\n", |
1391 "retrieve_calls":"\n", |
1389 "publish_calls":"\n", |
1392 "publish_calls":"\n", |
1390 "init_calls":"\n", |
1393 "init_calls":"\n", |
1391 "cleanup_calls":"\n" |
1394 "cleanup_calls":"\n" |
1392 } |
1395 } |
1393 |
1396 plc_main_code += targets.targetcode(self.GetTarget().getcontent()["name"]) |
1394 target = self.BeremizRoot.getTargetType() |
|
1395 if target.getcontent() is None: |
|
1396 target = self.GetDefaultTarget() |
|
1397 target_name = target.getcontent()["name"] |
|
1398 plc_main_code += targets.targetcode(target_name) |
|
1399 return plc_main_code |
1397 return plc_main_code |
1400 |
1398 |
1401 |
1399 |
1402 def _build(self): |
1400 def _build(self): |
1403 """ |
1401 """ |
1452 for fname,fobject in ExtraFiles: |
1450 for fname,fobject in ExtraFiles: |
1453 fpath = os.path.join(extrafilespath,fname) |
1451 fpath = os.path.join(extrafilespath,fname) |
1454 open(fpath, "wb").write(fobject.read()) |
1452 open(fpath, "wb").write(fobject.read()) |
1455 # Now we can forget ExtraFiles (will close files object) |
1453 # Now we can forget ExtraFiles (will close files object) |
1456 del ExtraFiles |
1454 del ExtraFiles |
1457 |
1455 |
1458 # Template based part of C code generation |
1456 # Template based part of C code generation |
1459 # files are stacked at the beginning, as files of plugin tree root |
1457 # files are stacked at the beginning, as files of plugin tree root |
1460 for generator, filename, name in [ |
1458 for generator, filename, name in [ |
1461 # debugger code |
1459 # debugger code |
1462 (self.Generate_plc_debugger, "plc_debugger.c", "Debugger"), |
1460 (self.Generate_plc_debugger, "plc_debugger.c", "Debugger"), |