154 def _OpenView(self, name=None, onlyopened=False): |
154 def _OpenView(self, name=None, onlyopened=False): |
155 ConfigTreeNode._OpenView(self, name, onlyopened) |
155 ConfigTreeNode._OpenView(self, name, onlyopened) |
156 if self._View is not None: |
156 if self._View is not None: |
157 self._View.SetBusId(self.GetCurrentLocation()) |
157 self._View.SetBusId(self.GetCurrentLocation()) |
158 return self._View |
158 return self._View |
159 |
159 |
160 def _ExportSlave(self): |
160 def _ExportSlave(self): |
161 dialog = wx.FileDialog(self.GetCTRoot().AppFrame, |
161 dialog = wx.FileDialog(self.GetCTRoot().AppFrame, |
162 _("Choose a file"), |
162 _("Choose a file"), |
163 os.path.expanduser("~"), |
163 os.path.expanduser("~"), |
164 "%s.eds" % self.CTNName(), |
164 "%s.eds" % self.CTNName(), |
165 _("EDS files (*.eds)|*.eds|All files|*.*"), |
165 _("EDS files (*.eds)|*.eds|All files|*.*"), |
166 wx.SAVE|wx.OVERWRITE_PROMPT) |
166 wx.SAVE|wx.OVERWRITE_PROMPT) |
167 if dialog.ShowModal() == wx.ID_OK: |
167 if dialog.ShowModal() == wx.ID_OK: |
168 result = eds_utils.GenerateEDSFile(dialog.GetPath(), self.GetCurrentNodeCopy()) |
168 result = eds_utils.GenerateEDSFile(dialog.GetPath(), self.GetCurrentNodeCopy()) |
169 if result: |
169 if result: |
170 self.GetCTRoot().logger.write_error(_("Error: Export slave failed\n")) |
170 self.GetCTRoot().logger.write_error(_("Error: Export slave failed\n")) |
171 dialog.Destroy() |
171 dialog.Destroy() |
172 |
172 |
173 ConfNodeMethods = [ |
173 ConfNodeMethods = [ |
174 {"bitmap" : "ExportSlave", |
174 {"bitmap" : "ExportSlave", |
175 "name" : _("Export slave"), |
175 "name" : _("Export slave"), |
176 "tooltip" : _("Export CanOpen slave to EDS file"), |
176 "tooltip" : _("Export CanOpen slave to EDS file"), |
177 "method" : "_ExportSlave"}, |
177 "method" : "_ExportSlave"}, |
178 ] |
178 ] |
179 |
179 |
180 def CTNTestModified(self): |
180 def CTNTestModified(self): |
181 return self.ChangesToSave or self.OneFileHasChanged() |
181 return self.ChangesToSave or self.OneFileHasChanged() |
182 |
182 |
183 def OnCTNSave(self, from_project_path=None): |
183 def OnCTNSave(self, from_project_path=None): |
184 return self.SaveCurrentInFile(self.GetSlaveODPath()) |
184 return self.SaveCurrentInFile(self.GetSlaveODPath()) |
185 |
185 |
186 def SetParamsAttribute(self, path, value): |
186 def SetParamsAttribute(self, path, value): |
187 result = ConfigTreeNode.SetParamsAttribute(self, path, value) |
187 result = ConfigTreeNode.SetParamsAttribute(self, path, value) |
188 |
188 |
189 # Filter IEC_Channel and Name, that have specific behavior |
189 # Filter IEC_Channel and Name, that have specific behavior |
190 if path == "BaseParams.IEC_Channel" and self._View is not None: |
190 if path == "BaseParams.IEC_Channel" and self._View is not None: |
191 self._View.SetBusId(self.GetCurrentLocation()) |
191 self._View.SetBusId(self.GetCurrentLocation()) |
192 |
192 |
193 return result |
193 return result |
194 |
194 |
195 def GetVariableLocationTree(self): |
195 def GetVariableLocationTree(self): |
196 current_location = self.GetCurrentLocation() |
196 current_location = self.GetCurrentLocation() |
197 return GetSlaveLocationTree(self.CurrentNode, |
197 return GetSlaveLocationTree(self.CurrentNode, |
198 self.GetCurrentLocation(), |
198 self.GetCurrentLocation(), |
199 self.BaseParams.getName()) |
199 self.BaseParams.getName()) |
200 |
200 |
201 def CTNGenerate_C(self, buildpath, locations): |
201 def CTNGenerate_C(self, buildpath, locations): |
202 """ |
202 """ |
203 Generate C code |
203 Generate C code |
204 @param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) |
204 @param current_location: Tupple containing confnode IEC location : %I0.0.4.5 => (0,0,4,5) |
205 @param locations: List of complete variables locations \ |
205 @param locations: List of complete variables locations \ |
228 raise Exception, res |
228 raise Exception, res |
229 return [(Gen_OD_path,local_canfestival_config.getCFLAGS(CanFestivalPath))],"",False |
229 return [(Gen_OD_path,local_canfestival_config.getCFLAGS(CanFestivalPath))],"",False |
230 |
230 |
231 def LoadPrevious(self): |
231 def LoadPrevious(self): |
232 self.LoadCurrentPrevious() |
232 self.LoadCurrentPrevious() |
233 |
233 |
234 def LoadNext(self): |
234 def LoadNext(self): |
235 self.LoadCurrentNext() |
235 self.LoadCurrentNext() |
236 |
236 |
237 def GetBufferState(self): |
237 def GetBufferState(self): |
238 return self.GetCurrentBufferState() |
238 return self.GetCurrentBufferState() |
239 |
239 |
240 #-------------------------------------------------- |
240 #-------------------------------------------------- |
241 # MASTER |
241 # MASTER |
242 #-------------------------------------------------- |
242 #-------------------------------------------------- |
243 |
243 |
244 class MiniNodeManager(NodeManager): |
244 class MiniNodeManager(NodeManager): |
245 |
245 |
246 def __init__(self, parent, filepath, fullname): |
246 def __init__(self, parent, filepath, fullname): |
247 NodeManager.__init__(self) |
247 NodeManager.__init__(self) |
248 |
248 |
249 self.OpenFileInCurrent(filepath) |
249 self.OpenFileInCurrent(filepath) |
250 |
250 |
251 self.Parent = parent |
251 self.Parent = parent |
252 self.Fullname = fullname |
252 self.Fullname = fullname |
253 |
253 |
254 def GetIconName(self): |
254 def GetIconName(self): |
255 return None |
255 return None |
256 |
256 |
257 def OnCloseEditor(self, view): |
257 def OnCloseEditor(self, view): |
258 self.Parent.OnCloseEditor(view) |
258 self.Parent.OnCloseEditor(view) |
259 |
259 |
260 def CTNFullName(self): |
260 def CTNFullName(self): |
261 return self.Fullname |
261 return self.Fullname |
262 |
262 |
263 def CTNTestModified(self): |
263 def CTNTestModified(self): |
264 return False |
264 return False |
265 |
265 |
266 def GetBufferState(self): |
266 def GetBufferState(self): |
267 return self.GetCurrentBufferState() |
267 return self.GetCurrentBufferState() |
268 |
268 |
269 ConfNodeMethods = [] |
269 ConfNodeMethods = [] |
270 |
270 |
271 class _NodeManager(NodeManager): |
271 class _NodeManager(NodeManager): |
272 |
272 |
273 def __init__(self, parent, *args, **kwargs): |
273 def __init__(self, parent, *args, **kwargs): |
274 NodeManager.__init__(self, *args, **kwargs) |
274 NodeManager.__init__(self, *args, **kwargs) |
275 self.Parent = parent |
275 self.Parent = parent |
276 |
276 |
277 def __del__(self): |
277 def __del__(self): |
278 self.Parent = None |
278 self.Parent = None |
279 |
279 |
280 def GetCurrentNodeName(self): |
280 def GetCurrentNodeName(self): |
281 return self.Parent.CTNName() |
281 return self.Parent.CTNName() |
282 |
282 |
283 def GetCurrentNodeID(self): |
283 def GetCurrentNodeID(self): |
284 return self.Parent.CanFestivalNode.getNodeId() |
284 return self.Parent.CanFestivalNode.getNodeId() |
285 |
285 |
286 class _NodeListCTN(NodeList): |
286 class _NodeListCTN(NodeList): |
287 XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
287 XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
288 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
288 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
289 <xsd:element name="CanFestivalNode"> |
289 <xsd:element name="CanFestivalNode"> |
290 <xsd:complexType> |
290 <xsd:complexType> |
293 <xsd:attribute name="NodeId" type="xsd:integer" use="optional" default="1"/> |
293 <xsd:attribute name="NodeId" type="xsd:integer" use="optional" default="1"/> |
294 <xsd:attribute name="Sync_TPDOs" type="xsd:boolean" use="optional" default="true"/> |
294 <xsd:attribute name="Sync_TPDOs" type="xsd:boolean" use="optional" default="true"/> |
295 </xsd:complexType> |
295 </xsd:complexType> |
296 </xsd:element> |
296 </xsd:element> |
297 </xsd:schema> |
297 </xsd:schema> |
298 """ |
298 """ |
299 |
299 |
300 EditorType = NetworkEditor |
300 EditorType = NetworkEditor |
301 IconPath = os.path.join(CanFestivalPath, "objdictgen", "networkedit.png") |
301 IconPath = os.path.join(CanFestivalPath, "objdictgen", "networkedit.png") |
302 |
302 |
303 def __init__(self): |
303 def __init__(self): |
304 manager = _NodeManager(self) |
304 manager = _NodeManager(self) |
305 NodeList.__init__(self, manager) |
305 NodeList.__init__(self, manager) |
306 self.LoadProject(self.CTNPath()) |
306 self.LoadProject(self.CTNPath()) |
307 self.SetNetworkName(self.BaseParams.getName()) |
307 self.SetNetworkName(self.BaseParams.getName()) |
308 |
308 |
309 def GetCanDevice(self): |
309 def GetCanDevice(self): |
310 return self.CanFestivalNode.getCAN_Device() |
310 return self.CanFestivalNode.getCAN_Device() |
311 |
311 |
312 def SetParamsAttribute(self, path, value): |
312 def SetParamsAttribute(self, path, value): |
313 if path == "CanFestivalNode.NodeId": |
313 if path == "CanFestivalNode.NodeId": |
314 nodeid = self.CanFestivalNode.getNodeId() |
314 nodeid = self.CanFestivalNode.getNodeId() |
315 if value != nodeid: |
315 if value != nodeid: |
316 slaves = self.GetSlaveIDs() |
316 slaves = self.GetSlaveIDs() |
317 dir = (value - nodeid) / abs(value - nodeid) |
317 dir = (value - nodeid) / abs(value - nodeid) |
318 while value in slaves and value >= 0: |
318 while value in slaves and value >= 0: |
319 value += dir |
319 value += dir |
320 if value < 0: |
320 if value < 0: |
321 value = nodeid |
321 value = nodeid |
322 |
322 |
323 value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value) |
323 value, refresh = ConfigTreeNode.SetParamsAttribute(self, path, value) |
324 refresh_network = False |
324 refresh_network = False |
325 |
325 |
326 # Filter IEC_Channel and Name, that have specific behavior |
326 # Filter IEC_Channel and Name, that have specific behavior |
327 if path == "BaseParams.IEC_Channel" and self._View is not None: |
327 if path == "BaseParams.IEC_Channel" and self._View is not None: |
328 self._View.SetBusId(self.GetCurrentLocation()) |
328 self._View.SetBusId(self.GetCurrentLocation()) |
329 elif path == "BaseParams.Name": |
329 elif path == "BaseParams.Name": |
330 self.SetNetworkName(value) |
330 self.SetNetworkName(value) |
331 refresh_network = True |
331 refresh_network = True |
332 elif path == "CanFestivalNode.NodeId": |
332 elif path == "CanFestivalNode.NodeId": |
333 refresh_network = True |
333 refresh_network = True |
334 |
334 |
335 if refresh_network and self._View is not None: |
335 if refresh_network and self._View is not None: |
336 wx.CallAfter(self._View.RefreshBufferState) |
336 wx.CallAfter(self._View.RefreshBufferState) |
337 return value, refresh |
337 return value, refresh |
338 |
338 |
339 def GetVariableLocationTree(self): |
339 def GetVariableLocationTree(self): |
340 current_location = self.GetCurrentLocation() |
340 current_location = self.GetCurrentLocation() |
341 nodeindexes = self.SlaveNodes.keys() |
341 nodeindexes = self.SlaveNodes.keys() |
342 nodeindexes.sort() |
342 nodeindexes.sort() |
343 return {"name": self.BaseParams.getName(), |
343 return {"name": self.BaseParams.getName(), |
344 "type": LOCATION_CONFNODE, |
344 "type": LOCATION_CONFNODE, |
345 "location": self.GetFullIEC_Channel(), |
345 "location": self.GetFullIEC_Channel(), |
346 "children": [GetSlaveLocationTree(self.Manager.GetCurrentNodeCopy(), |
346 "children": [GetSlaveLocationTree(self.Manager.GetCurrentNodeCopy(), |
347 current_location, |
347 current_location, |
348 _("Local entries"))] + |
348 _("Local entries"))] + |
349 [GetSlaveLocationTree(self.SlaveNodes[nodeid]["Node"], |
349 [GetSlaveLocationTree(self.SlaveNodes[nodeid]["Node"], |
350 current_location + (nodeid,), |
350 current_location + (nodeid,), |
351 self.SlaveNodes[nodeid]["Name"]) |
351 self.SlaveNodes[nodeid]["Name"]) |
352 for nodeid in nodeindexes] |
352 for nodeid in nodeindexes] |
353 } |
353 } |
354 |
354 |
355 _GeneratedMasterView = None |
355 _GeneratedMasterView = None |
356 def _ShowGeneratedMaster(self): |
356 def _ShowGeneratedMaster(self): |
357 self._OpenView("Generated master") |
357 self._OpenView("Generated master") |
358 |
358 |
359 def _OpenView(self, name=None, onlyopened=False): |
359 def _OpenView(self, name=None, onlyopened=False): |
360 if name == "Generated master": |
360 if name == "Generated master": |
361 app_frame = self.GetCTRoot().AppFrame |
361 app_frame = self.GetCTRoot().AppFrame |
362 if self._GeneratedMasterView is None: |
362 if self._GeneratedMasterView is None: |
363 buildpath = self._getBuildPath() |
363 buildpath = self._getBuildPath() |
364 # Eventually create build dir |
364 # Eventually create build dir |
365 if not os.path.exists(buildpath): |
365 if not os.path.exists(buildpath): |
366 self.GetCTRoot().logger.write_error(_("Error: No PLC built\n")) |
366 self.GetCTRoot().logger.write_error(_("Error: No PLC built\n")) |
367 return |
367 return |
368 |
368 |
369 masterpath = os.path.join(buildpath, "MasterGenerated.od") |
369 masterpath = os.path.join(buildpath, "MasterGenerated.od") |
370 if not os.path.exists(masterpath): |
370 if not os.path.exists(masterpath): |
371 self.GetCTRoot().logger.write_error(_("Error: No Master generated\n")) |
371 self.GetCTRoot().logger.write_error(_("Error: No Master generated\n")) |
372 return |
372 return |
373 |
373 |
374 manager = MiniNodeManager(self, masterpath, self.CTNFullName()) |
374 manager = MiniNodeManager(self, masterpath, self.CTNFullName()) |
375 self._GeneratedMasterView = MasterViewer(app_frame.TabsOpened, manager, app_frame, name) |
375 self._GeneratedMasterView = MasterViewer(app_frame.TabsOpened, manager, app_frame, name) |
376 |
376 |
377 if self._GeneratedMasterView is not None: |
377 if self._GeneratedMasterView is not None: |
378 app_frame.EditProjectElement(self._GeneratedMasterView, self._GeneratedMasterView.GetInstancePath()) |
378 app_frame.EditProjectElement(self._GeneratedMasterView, self._GeneratedMasterView.GetInstancePath()) |
379 |
379 |
380 return self._GeneratedMasterView |
380 return self._GeneratedMasterView |
381 else: |
381 else: |
382 ConfigTreeNode._OpenView(self, name, onlyopened) |
382 ConfigTreeNode._OpenView(self, name, onlyopened) |
383 if self._View is not None: |
383 if self._View is not None: |
384 self._View.SetBusId(self.GetCurrentLocation()) |
384 self._View.SetBusId(self.GetCurrentLocation()) |
385 return self._View |
385 return self._View |
386 |
386 |
387 ConfNodeMethods = [ |
387 ConfNodeMethods = [ |
388 {"bitmap" : "ShowMaster", |
388 {"bitmap" : "ShowMaster", |
389 "name" : _("Show Master"), |
389 "name" : _("Show Master"), |
390 "tooltip" : _("Show Master generated by config_utils"), |
390 "tooltip" : _("Show Master generated by config_utils"), |
391 "method" : "_ShowGeneratedMaster"} |
391 "method" : "_ShowGeneratedMaster"} |
392 ] |
392 ] |
393 |
393 |
394 def OnCloseEditor(self, view): |
394 def OnCloseEditor(self, view): |
395 ConfigTreeNode.OnCloseEditor(self, view) |
395 ConfigTreeNode.OnCloseEditor(self, view) |
396 if self._GeneratedMasterView == view: |
396 if self._GeneratedMasterView == view: |
397 self._GeneratedMasterView = None |
397 self._GeneratedMasterView = None |
398 |
398 |
399 def OnCTNClose(self): |
399 def OnCTNClose(self): |
400 ConfigTreeNode.OnCTNClose(self) |
400 ConfigTreeNode.OnCTNClose(self) |
401 self._CloseView(self._GeneratedMasterView) |
401 self._CloseView(self._GeneratedMasterView) |
402 return True |
402 return True |
403 |
403 |
404 def CTNTestModified(self): |
404 def CTNTestModified(self): |
405 return self.ChangesToSave or self.HasChanged() |
405 return self.ChangesToSave or self.HasChanged() |
406 |
406 |
407 def OnCTNSave(self, from_project_path=None): |
407 def OnCTNSave(self, from_project_path=None): |
408 self.SetRoot(self.CTNPath()) |
408 self.SetRoot(self.CTNPath()) |
409 if from_project_path is not None: |
409 if from_project_path is not None: |
410 shutil.copytree(self.GetEDSFolder(from_project_path), |
410 shutil.copytree(self.GetEDSFolder(from_project_path), |
411 self.GetEDSFolder()) |
411 self.GetEDSFolder()) |
412 return self.SaveProject() is None |
412 return self.SaveProject() is None |
413 |
413 |
414 def CTNGenerate_C(self, buildpath, locations): |
414 def CTNGenerate_C(self, buildpath, locations): |
415 """ |
415 """ |
436 raise Exception, e.message |
436 raise Exception, e.message |
437 # Do generate C file. |
437 # Do generate C file. |
438 res = gen_cfile.GenerateFile(Gen_OD_path, master, pointers) |
438 res = gen_cfile.GenerateFile(Gen_OD_path, master, pointers) |
439 if res : |
439 if res : |
440 raise Exception, res |
440 raise Exception, res |
441 |
441 |
442 file = open(os.path.join(buildpath, "MasterGenerated.od"), "w") |
442 file = open(os.path.join(buildpath, "MasterGenerated.od"), "w") |
443 dump(master, file) |
443 dump(master, file) |
444 file.close() |
444 file.close() |
445 |
445 |
446 return [(Gen_OD_path,local_canfestival_config.getCFLAGS(CanFestivalPath))],"",False |
446 return [(Gen_OD_path,local_canfestival_config.getCFLAGS(CanFestivalPath))],"",False |
447 |
447 |
448 def LoadPrevious(self): |
448 def LoadPrevious(self): |
449 self.Manager.LoadCurrentPrevious() |
449 self.Manager.LoadCurrentPrevious() |
450 |
450 |
451 def LoadNext(self): |
451 def LoadNext(self): |
452 self.Manager.LoadCurrentNext() |
452 self.Manager.LoadCurrentNext() |
453 |
453 |
454 def GetBufferState(self): |
454 def GetBufferState(self): |
455 return self.Manager.GetCurrentBufferState() |
455 return self.Manager.GetCurrentBufferState() |
456 |
456 |
457 class RootClass: |
457 class RootClass: |
458 XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
458 XSD = """<?xml version="1.0" encoding="ISO-8859-1" ?> |
459 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
459 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
460 <xsd:element name="CanFestivalInstance"> |
460 <xsd:element name="CanFestivalInstance"> |
461 <xsd:complexType> |
461 <xsd:complexType> |
462 <xsd:attribute name="CAN_Driver" type="xsd:string" use="optional"/> |
462 <xsd:attribute name="CAN_Driver" type="xsd:string" use="optional"/> |
463 </xsd:complexType> |
463 </xsd:complexType> |
464 </xsd:element> |
464 </xsd:element> |
465 </xsd:schema> |
465 </xsd:schema> |
466 """ |
466 """ |
467 |
467 |
468 CTNChildrenTypes = [("CanOpenNode",_NodeListCTN, "CanOpen Master"), |
468 CTNChildrenTypes = [("CanOpenNode",_NodeListCTN, "CanOpen Master"), |
469 ("CanOpenSlave",_SlaveCTN, "CanOpen Slave")] |
469 ("CanOpenSlave",_SlaveCTN, "CanOpen Slave")] |
470 def GetParamsAttributes(self, path = None): |
470 def GetParamsAttributes(self, path = None): |
471 infos = ConfigTreeNode.GetParamsAttributes(self, path = path) |
471 infos = ConfigTreeNode.GetParamsAttributes(self, path = path) |
472 for element in infos: |
472 for element in infos: |
473 if element["name"] == "CanFestivalInstance": |
473 if element["name"] == "CanFestivalInstance": |
474 for child in element["children"]: |
474 for child in element["children"]: |
475 if child["name"] == "CAN_Driver": |
475 if child["name"] == "CAN_Driver": |
476 child["type"] = local_canfestival_config.DLL_LIST |
476 child["type"] = local_canfestival_config.DLL_LIST |
477 return infos |
477 return infos |
478 |
478 |
479 def GetCanDriver(self): |
479 def GetCanDriver(self): |
480 res = self.CanFestivalInstance.getCAN_Driver() |
480 res = self.CanFestivalInstance.getCAN_Driver() |
481 if not res : |
481 if not res : |
482 return "" |
482 return "" |
483 return res |
483 return res |
484 |
484 |
485 def CTNGenerate_C(self, buildpath, locations): |
485 def CTNGenerate_C(self, buildpath, locations): |
486 can_driver = self.GetCanDriver() |
486 can_driver = self.GetCanDriver() |
487 if can_driver is not None: |
487 if can_driver is not None: |
488 can_drivers = local_canfestival_config.DLL_LIST |
488 can_drivers = local_canfestival_config.DLL_LIST |
489 if can_driver not in can_drivers : |
489 if can_driver not in can_drivers : |
567 format_dict["post_sync_register"] += ( |
567 format_dict["post_sync_register"] += ( |
568 "%s_Data.post_sync = %s_post_sync;\n"%(nodename,nodename)) |
568 "%s_Data.post_sync = %s_post_sync;\n"%(nodename,nodename)) |
569 format_dict["nodes_init"] += 'NODE_SLAVE_INIT(%s, %s)\n '%( |
569 format_dict["nodes_init"] += 'NODE_SLAVE_INIT(%s, %s)\n '%( |
570 nodename, |
570 nodename, |
571 child_data.getNodeId()) |
571 child_data.getNodeId()) |
572 |
572 |
573 # Include generated OD headers |
573 # Include generated OD headers |
574 format_dict["nodes_includes"] += '#include "%s.h"\n'%(nodename) |
574 format_dict["nodes_includes"] += '#include "%s.h"\n'%(nodename) |
575 # Declare CAN channels according user filled config |
575 # Declare CAN channels according user filled config |
576 format_dict["board_decls"] += 'BOARD_DECL(%s, "%s", "%s")\n'%( |
576 format_dict["board_decls"] += 'BOARD_DECL(%s, "%s", "%s")\n'%( |
577 nodename, |
577 nodename, |
578 child.GetCanDevice(), |
578 child.GetCanDevice(), |
579 child_data.getCAN_Baudrate()) |
579 child_data.getCAN_Baudrate()) |
580 format_dict["nodes_open"] += 'NODE_OPEN(%s)\n '%(nodename) |
580 format_dict["nodes_open"] += 'NODE_OPEN(%s)\n '%(nodename) |
581 format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n '%(nodename) |
581 format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n '%(nodename) |
582 format_dict["nodes_stop"] += 'NODE_STOP(%s)\n '%(nodename) |
582 format_dict["nodes_stop"] += 'NODE_STOP(%s)\n '%(nodename) |
583 |
583 |
584 filename = paths.AbsNeighbourFile(__file__,"cf_runtime.c") |
584 filename = paths.AbsNeighbourFile(__file__,"cf_runtime.c") |
585 cf_main = open(filename).read() % format_dict |
585 cf_main = open(filename).read() % format_dict |
586 cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict) |
586 cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict) |
587 f = open(cf_main_path,'w') |
587 f = open(cf_main_path,'w') |
588 f.write(cf_main) |
588 f.write(cf_main) |
589 f.close() |
589 f.close() |
590 |
590 |
591 res = [(cf_main_path, local_canfestival_config.getCFLAGS(CanFestivalPath))],local_canfestival_config.getLDFLAGS(CanFestivalPath), True |
591 res = [(cf_main_path, local_canfestival_config.getCFLAGS(CanFestivalPath))],local_canfestival_config.getLDFLAGS(CanFestivalPath), True |
592 |
592 |
593 if can_driver is not None: |
593 if can_driver is not None: |
594 can_driver_path = os.path.join(CanFestivalPath,"drivers",can_driver,can_driver_name) |
594 can_driver_path = os.path.join(CanFestivalPath,"drivers",can_driver,can_driver_name) |
595 if os.path.exists(can_driver_path): |
595 if os.path.exists(can_driver_path): |
596 res += ((can_driver_name, file(can_driver_path,"rb")),) |
596 res += ((can_driver_name, file(can_driver_path,"rb")),) |
597 |
597 |
598 return res |
598 return res |
599 |
|