objdictgen/gen_cfile.py
changeset 639 27c0a025acf3
parent 619 96f84395154f
child 750 bfb63ff7106e
equal deleted inserted replaced
638:00bc03cb5606 639:27c0a025acf3
    37 
    37 
    38 generated_tag = """\n/* File generated by gen_cfile.py. Should not be modified. */\n"""
    38 generated_tag = """\n/* File generated by gen_cfile.py. Should not be modified. */\n"""
    39 
    39 
    40 internal_types = {}
    40 internal_types = {}
    41 default_string_size = 10
    41 default_string_size = 10
       
    42 
       
    43 #Verify that the name does not start with a digit
       
    44 def UnDigitName(name):
       
    45     start_with_digit = re.compile(r'^(\d.*)')
       
    46     if start_with_digit.match(name):
       
    47         return start_with_digit.sub(r'_\1', name)
       
    48     return name
       
    49 
    42 
    50 
    43 # Format a string for making a C++ variable
    51 # Format a string for making a C++ variable
    44 def FormatName(name):
    52 def FormatName(name):
    45     wordlist = [word for word in word_model.findall(name) if word != '']
    53     wordlist = [word for word in word_model.findall(name) if word != '']
    46     return "_".join(wordlist)
    54     return "_".join(wordlist)
   202                 texts["suffixe"] = "[%d]"%typeinfos[1]
   210                 texts["suffixe"] = "[%d]"%typeinfos[1]
   203             else:
   211             else:
   204                 texts["suffixe"] = ""
   212                 texts["suffixe"] = ""
   205             texts["value"], texts["comment"] = ComputeValue(typeinfos[2], values)
   213             texts["value"], texts["comment"] = ComputeValue(typeinfos[2], values)
   206             if index in variablelist:
   214             if index in variablelist:
   207                 texts["name"] = FormatName(subentry_infos["name"])
   215                 texts["name"] = UnDigitName(FormatName(subentry_infos["name"]))
   208                 strDeclareHeader += "extern %(subIndexType)s %(name)s%(suffixe)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00*/\n"%texts
   216                 strDeclareHeader += "extern %(subIndexType)s %(name)s%(suffixe)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00*/\n"%texts
   209                 mappedVariableContent += "%(subIndexType)s %(name)s%(suffixe)s = %(value)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00 */\n"%texts
   217                 mappedVariableContent += "%(subIndexType)s %(name)s%(suffixe)s = %(value)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00 */\n"%texts
   210             else:
   218             else:
   211                 strIndex += "                    %(subIndexType)s %(NodeName)s_obj%(index)04X%(suffixe)s = %(value)s;%(comment)s\n"%texts
   219                 strIndex += "                    %(subIndexType)s %(NodeName)s_obj%(index)04X%(suffixe)s = %(value)s;%(comment)s\n"%texts
   212             values = [values]
   220             values = [values]
   233                 else:
   241                 else:
   234                     texts["suffixe"] = ""
   242                     texts["suffixe"] = ""
   235                     texts["type_suffixe"] = ""
   243                     texts["type_suffixe"] = ""
   236                 texts["length"] = values[0]
   244                 texts["length"] = values[0]
   237                 if index in variablelist:
   245                 if index in variablelist:
   238                     texts["name"] = FormatName(entry_infos["name"])
   246                     texts["name"] = UnDigitName(FormatName(entry_infos["name"]))
   239                     texts["values_count"] =  str(len(values)-1)
   247                     texts["values_count"] =  str(len(values)-1)
   240                     strDeclareHeader += "extern %(subIndexType)s%(type_suffixe)s %(name)s[%(values_count)s];\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n"%texts
   248                     strDeclareHeader += "extern %(subIndexType)s%(type_suffixe)s %(name)s[%(values_count)s];\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n"%texts
   241                     mappedVariableContent += "%(subIndexType)s%(type_suffixe)s %(name)s[] =\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n  {\n"%texts
   249                     mappedVariableContent += "%(subIndexType)s%(type_suffixe)s %(name)s[] =\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n  {\n"%texts
   242                     for subIndex, value in enumerate(values):
   250                     for subIndex, value in enumerate(values):
   243                         sep = ","
   251                         sep = ","
   259                             value, comment = ComputeValue(typeinfos[2], value)
   267                             value, comment = ComputeValue(typeinfos[2], value)
   260                             strIndex += "                      %s%s%s\n"%(value, sep, comment)
   268                             strIndex += "                      %s%s%s\n"%(value, sep, comment)
   261                     strIndex += "                    };\n"
   269                     strIndex += "                    };\n"
   262             else:
   270             else:
   263                 
   271                 
   264                 texts["parent"] = FormatName(entry_infos["name"])
   272                 texts["parent"] = UnDigitName(FormatName(entry_infos["name"]))
   265                 # Entry type is ARRAY
   273                 # Entry type is ARRAY
   266                 for subIndex, value in enumerate(values):
   274                 for subIndex, value in enumerate(values):
   267                     texts["subIndex"] = subIndex
   275                     texts["subIndex"] = subIndex
   268                     if subIndex > 0:
   276                     if subIndex > 0:
   269                         subentry_infos = Node.GetSubentryInfos(index, subIndex)
   277                         subentry_infos = Node.GetSubentryInfos(index, subIndex)
   286         if callbacks:
   294         if callbacks:
   287             if index in variablelist:
   295             if index in variablelist:
   288                 name = FormatName(entry_infos["name"])
   296                 name = FormatName(entry_infos["name"])
   289             else:
   297             else:
   290                 name = "%(NodeName)s_Index%(index)04X"%texts
   298                 name = "%(NodeName)s_Index%(index)04X"%texts
       
   299             name=UnDigitName(name);
   291             strIndex += "                    ODCallback_t %s_callbacks[] = \n                     {\n"%name
   300             strIndex += "                    ODCallback_t %s_callbacks[] = \n                     {\n"%name
   292             for subIndex in xrange(len(values)):
   301             for subIndex in xrange(len(values)):
   293                 strIndex += "                       NULL,\n"
   302                 strIndex += "                       NULL,\n"
   294             strIndex += "                     };\n"
   303             strIndex += "                     };\n"
   295             indexCallbacks[index] = "*callbacks = %s_callbacks; "%name
   304             indexCallbacks[index] = "*callbacks = %s_callbacks; "%name
   335             params = Node.GetParamsEntry(index, subIndex)
   344             params = Node.GetParamsEntry(index, subIndex)
   336             if params["save"]:
   345             if params["save"]:
   337                 save = "|TO_BE_SAVE"
   346                 save = "|TO_BE_SAVE"
   338             else:
   347             else:
   339                 save = ""
   348                 save = ""
   340             strIndex += "                       { %s%s, %s, %s, (void*)&%s }%s\n"%(subentry_infos["access"].upper(),save,typeinfos[2],sizeof,name,sep)
   349             strIndex += "                       { %s%s, %s, %s, (void*)&%s }%s\n"%(subentry_infos["access"].upper(),save,typeinfos[2],sizeof,UnDigitName(name),sep)
   341             pointer_name = pointers_dict.get((index, subIndex), None)
   350             pointer_name = pointers_dict.get((index, subIndex), None)
   342             if pointer_name is not None:
   351             if pointer_name is not None:
   343                 pointedVariableContent += "%s* %s = &%s;\n"%(typeinfos[0], pointer_name, name)
   352                 pointedVariableContent += "%s* %s = &%s;\n"%(typeinfos[0], pointer_name, name)
   344         strIndex += "                     };\n"
   353         strIndex += "                     };\n"
   345         indexContents[index] = strIndex
   354         indexContents[index] = strIndex