plugins/canfestival/canfestival.py
changeset 684 d376a8b0b602
parent 680 61746934df41
parent 682 9d20df7c144a
equal deleted inserted replaced
681:383864958dac 684:d376a8b0b602
   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')