size = max(size, int(values[1]))
typeinfos = ("UNS8", size, "visible_string", False)
elif values[0] == "DOMAIN":
- typeinfos = ("UNS8*", None, "domain", False)
+ size = 0
+ for item in items:
+ size = max(size, len(item))
+ typeinfos = ("UNS8*", size, "domain", False)
elif values[0] == "BOOLEAN":
typeinfos = ("UNS8", None, "boolean", False)
else:
raise ValueError, """!!! %s isn't a valid type for CanFestival."""%typename
return typeinfos
+def ComputeValue(type, value):
+ if type == "visible_string":
+ return "\"%s\""%value, ""
+ elif type == "domain":
+ return "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value]), ""
+ elif type.startswith("real"):
+ return "%f"%value, ""
+ else:
+ return "0x%X"%value, "\t/* %s */"%str(value)
+
def WriteFile(filepath, content):
cfile = open(filepath,"w")
cfile.write(content)
texts["suffixe"] = "[%d]"%typeinfos[1]
else:
texts["suffixe"] = ""
- if typeinfos[2] == "visible_string":
- texts["value"] = "\"%s\""%values
- texts["comment"] = ""
- elif typeinfos[2] == "domain":
- texts["value"] = "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value])
- texts["comment"] = ""
- else:
- texts["value"] = "0x%X"%values
- texts["comment"] = "\t/* %s */"%str(values)
+ texts["value"], texts["comment"] = ComputeValue(typeinfos[2], values)
if index in variablelist:
texts["name"] = FormatName(subentry_infos["name"])
strDeclareHeader += "extern %(subIndexType)s %(name)s%(suffixe)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00*/\n"%texts
- if callbacks:
- strDeclareHeader += "extern ODCallback_t %(name)s_callbacks[];\t\t/* Callbacks of index0x%(index)04X */\n"%texts
mappedVariableContent += "%(subIndexType)s %(name)s%(suffixe)s = %(value)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x00 */\n"%texts
else:
strIndex += " %(subIndexType)s %(NodeName)s_obj%(index)04X%(suffixe)s = %(value)s;%(comment)s\n"%texts
if index in variablelist:
texts["name"] = FormatName(entry_infos["name"])
strDeclareHeader += "extern %(subIndexType)s %(name)s[%(length)d]%(suffixe)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n"%texts
- if callbacks:
- strDeclareHeader += "extern ODCallback_t %(name)s_callbacks[];\t\t/* Callbacks of index0x%(index)04X */\n"%texts
mappedVariableContent += "%(subIndexType)s %(name)s[] =\t\t/* Mapped at index 0x%(index)04X, subindex 0x01 - 0x%(length)02X */\n {\n"%texts
for subIndex, value in enumerate(values):
sep = ","
- comment = ""
if subIndex > 0:
if subIndex == len(values)-1:
sep = ""
- if typeinfos[2] == "visible_string":
- value = "\"%s\""%value
- elif typeinfos[2] == "domain":
- value = "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value])
- else:
- comment = "\t/* %s */"%str(value)
- value = "0x%X"%value
+ value, comment = ComputeValue(typeinfos[2], value)
mappedVariableContent += " %s%s%s\n"%(value, sep, comment)
mappedVariableContent += " };\n"
else:
strIndex += " %(subIndexType)s %(NodeName)s_obj%(index)04X[] = \n {\n"%texts
for subIndex, value in enumerate(values):
sep = ","
- comment = ""
if subIndex > 0:
if subIndex == len(values)-1:
sep = ""
- if typeinfos[2] == "visible_string":
- value = "\"%s\""%value
- elif typeinfos[2] == "domain":
- value = "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value])
- else:
- comment = "\t/* %s */"%str(value)
- value = "0x%X"%value
+ value, comment = ComputeValue(typeinfos[2], value)
strIndex += " %s%s%s\n"%(value, sep, comment)
strIndex += " };\n"
else:
texts["suffixe"] = "[%d]"%typeinfos[1]
else:
texts["suffixe"] = ""
- if typeinfos[2] == "visible_string":
- texts["value"] = "\"%s\""%value
- texts["comment"] = ""
- elif typeinfos[2] == "domain":
- texts["value"] = "\"%s\""%''.join(["\\x%2.2x"%ord(char) for char in value])
- texts["comment"] = ""
- else:
- texts["value"] = "0x%X"%value
- texts["comment"] = "\t/* %s */"%str(value)
+ texts["value"], texts["comment"] = ComputeValue(typeinfos[2], value)
texts["name"] = FormatName(subentry_infos["name"])
if index in variablelist:
strDeclareHeader += "extern %(subIndexType)s %(parent)s_%(name)s%(suffixe)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x%(subIndex)02X */\n"%texts
mappedVariableContent += "%(subIndexType)s %(parent)s_%(name)s%(suffixe)s = %(value)s;\t\t/* Mapped at index 0x%(index)04X, subindex 0x%(subIndex)02X */\n"%texts
else:
strIndex += " %(subIndexType)s %(NodeName)s_obj%(index)04X_%(name)s%(suffixe)s = %(value)s;%(comment)s\n"%texts
- if callbacks:
- strDeclareHeader += "extern ODCallback_t %(parent)s_callbacks[];\t\t/* Callbacks of index0x%(index)04X */\n"%texts
# Generating Dictionary C++ entry
if callbacks:
name = FormatName("%s_%s"%(entry_infos["name"],subentry_infos["name"]))
else:
name = "%s_obj%04X_%s"%(texts["NodeName"], texts["index"], FormatName(subentry_infos["name"]))
- if typeinfos[2] in ["visible_string", "domain"]:
- sizeof = typeinfos[1]
+ if typeinfos[2] == "visible_string":
+ sizeof = str(max(len(values[subIndex]), default_string_size))
+ elif typeinfos[2] == "domain":
+ sizeof = str(len(values[subIndex]))
else:
sizeof = "sizeof (%s)"%typeinfos[0]
params = Node.GetParamsEntry(index, subIndex)
"""%texts
if texts["heartBeatTimers_number"] > 0:
- fileContent += "TIMER_HANDLE %(NodeName)s_heartBeatTimers[%(heartBeatTimers_number)d] = {TIMER_NONE,};\n"%texts
+ declaration = "TIMER_HANDLE %(NodeName)s_heartBeatTimers[%(heartBeatTimers_number)d]"%texts
+ initializer = "{TIMER_NONE" + ",TIMER_NONE" * (texts["heartBeatTimers_number"] - 1) + "}"
+ fileContent += declaration + " = " + initializer + ";\n"
else:
fileContent += "TIMER_HANDLE %(NodeName)s_heartBeatTimers[1];\n"%texts