363 if DLL_LIST is not None: |
363 if DLL_LIST is not None: |
364 child["type"] = DLL_LIST |
364 child["type"] = DLL_LIST |
365 return infos |
365 return infos |
366 |
366 |
367 def GetCanDriver(self): |
367 def GetCanDriver(self): |
368 return self.CanFestivalInstance.getCAN_Driver() |
368 can_driver = self.CanFestivalInstance.getCAN_Driver() |
|
369 if sys.platform == 'win32': |
|
370 if self.CanFestivalInstance.getDebug_mode() and os.path.isfile(os.path.join("%s"%(can_driver + '_DEBUG.dll'))): |
|
371 can_driver += '_DEBUG.dll' |
|
372 else: |
|
373 can_driver += '.dll' |
|
374 return can_driver |
369 |
375 |
370 def PlugGenerate_C(self, buildpath, locations): |
376 def PlugGenerate_C(self, buildpath, locations): |
371 |
377 |
372 format_dict = {"locstr" : "_".join(map(str,self.GetCurrentLocation())), |
378 format_dict = {"locstr" : "_".join(map(str,self.GetCurrentLocation())), |
373 "candriver" : self.GetCanDriver(), |
379 "candriver" : self.GetCanDriver(), |
401 format_dict["nodes_send_sync"] += 'NODE_SEND_SYNC(%s)\n '%(nodename) |
407 format_dict["nodes_send_sync"] += 'NODE_SEND_SYNC(%s)\n '%(nodename) |
402 format_dict["nodes_proceed_sync"] += 'NODE_PROCEED_SYNC(%s)\n '%(nodename) |
408 format_dict["nodes_proceed_sync"] += 'NODE_PROCEED_SYNC(%s)\n '%(nodename) |
403 |
409 |
404 # initialize and declare node boot status variables for post_SlaveBootup lookup |
410 # initialize and declare node boot status variables for post_SlaveBootup lookup |
405 SlaveIDs = child.GetSlaveIDs() |
411 SlaveIDs = child.GetSlaveIDs() |
406 for id in SlaveIDs: |
412 if len(SlaveIDs) == 0: |
|
413 # define post_SlaveBootup lookup functions |
407 format_dict["slavebootups"] += ( |
414 format_dict["slavebootups"] += ( |
408 "int %s_slave_%d_booted = 0;\n"%(nodename, id)) |
415 "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){}\n"%(nodename)) |
409 # define post_SlaveBootup lookup functions |
416 else: |
410 format_dict["slavebootups"] += ( |
417 for id in SlaveIDs: |
411 "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){\n"%(nodename)+ |
418 format_dict["slavebootups"] += ( |
412 " switch(nodeId){\n") |
419 "int %s_slave_%d_booted = 0;\n"%(nodename, id)) |
413 # one case per declared node, mark node as booted |
420 # define post_SlaveBootup lookup functions |
414 for id in SlaveIDs: |
|
415 format_dict["slavebootups"] += ( |
421 format_dict["slavebootups"] += ( |
416 " case %d:\n"%(id)+ |
422 "static void %s_post_SlaveBootup(CO_Data* d, UNS8 nodeId){\n"%(nodename)+ |
417 " %s_slave_%d_booted = 1;\n"%(nodename, id)+ |
423 " switch(nodeId){\n") |
418 " break;\n") |
424 # one case per declared node, mark node as booted |
419 format_dict["slavebootups"] += ( |
425 for id in SlaveIDs: |
420 " default:\n"+ |
426 format_dict["slavebootups"] += ( |
421 " break;\n"+ |
427 " case %d:\n"%(id)+ |
422 " }\n"+ |
428 " %s_slave_%d_booted = 1;\n"%(nodename, id)+ |
423 " if( ") |
429 " break;\n") |
424 # expression to test if all declared nodes booted |
430 format_dict["slavebootups"] += ( |
425 format_dict["slavebootups"] += " && ".join(["%s_slave_%d_booted"%(nodename, id) for id in SlaveIDs]) |
431 " default:\n"+ |
426 format_dict["slavebootups"] += " )\n" + ( |
432 " break;\n"+ |
427 " Master_post_SlaveBootup(d,nodeId);\n"+ |
433 " }\n"+ |
428 "}\n") |
434 " if( ") |
|
435 # expression to test if all declared nodes booted |
|
436 format_dict["slavebootups"] += " && ".join(["%s_slave_%d_booted"%(nodename, id) for id in SlaveIDs]) |
|
437 format_dict["slavebootups"] += " )\n" + ( |
|
438 " Master_post_SlaveBootup(d,nodeId);\n"+ |
|
439 "}\n") |
429 # register previously declared func as post_SlaveBootup callback for that node |
440 # register previously declared func as post_SlaveBootup callback for that node |
430 format_dict["slavebootup_register"] += ( |
441 format_dict["slavebootup_register"] += ( |
431 "%s_Data.post_SlaveBootup = %s_post_SlaveBootup;\n"%(nodename,nodename)) |
442 "%s_Data.post_SlaveBootup = %s_post_SlaveBootup;\n"%(nodename,nodename)) |
432 else: |
443 else: |
433 # Slave node |
444 # Slave node |
457 nodename, |
468 nodename, |
458 child.GetCanDevice(), |
469 child.GetCanDevice(), |
459 child_data.getCAN_Baudrate()) |
470 child_data.getCAN_Baudrate()) |
460 format_dict["nodes_open"] += 'NODE_OPEN(%s)\n '%(nodename) |
471 format_dict["nodes_open"] += 'NODE_OPEN(%s)\n '%(nodename) |
461 format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n '%(nodename) |
472 format_dict["nodes_close"] += 'NODE_CLOSE(%s)\n '%(nodename) |
462 format_dict["nodes_stop"] += 'NODE_STOP(%s)\n '%(nodename) |
473 format_dict["nodes_stop"] += 'NODE_STOP(%s)\n '%(nodename) |
463 if sys.platform == 'win32': |
|
464 if self.CanFestivalInstance.getDebug_mode() and os.path.isfile(os.path.join("%s"%(format_dict["candriver"] + '_DEBUG.dll'))): |
|
465 format_dict["candriver"] += '_DEBUG.dll' |
|
466 else: |
|
467 format_dict["candriver"] += '.dll' |
|
468 |
474 |
469 filename = os.path.join(os.path.split(__file__)[0],"cf_runtime.c") |
475 filename = os.path.join(os.path.split(__file__)[0],"cf_runtime.c") |
470 cf_main = open(filename).read() % format_dict |
476 cf_main = open(filename).read() % format_dict |
471 cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict) |
477 cf_main_path = os.path.join(buildpath, "CF_%(locstr)s.c"%format_dict) |
472 f = open(cf_main_path,'w') |
478 f = open(cf_main_path,'w') |