From 4cd9506f7d4c8d9d816437a5dd9b62da902c0ed3 Mon Sep 17 00:00:00 2001 From: Christoph Noetel <88427028+ChristophNoetel@users.noreply.github.com> Date: Thu, 16 Apr 2026 18:59:45 +0200 Subject: [PATCH] fix: handle hex string values in generate_profile.py (#19) --- tools/generate_profile.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/tools/generate_profile.py b/tools/generate_profile.py index a41355b..42e343c 100644 --- a/tools/generate_profile.py +++ b/tools/generate_profile.py @@ -145,7 +145,7 @@ def __str__(self): ) if self.enum: s += " enum={\n" - for value in sorted(self.enum, key=lambda x: x.value if isinstance(x.value, int) else int(x.value, 16)): + for value in sorted(self.enum, key=lambda x: x.value if isinstance(x.value, int) else int(str(x.value), 0)): s += " %s\n" % (value,) s += " },\n" s += ")" @@ -397,7 +397,7 @@ def parse_types(types_rows): else: # No first column means a value for this type - value = TypeValueInfo(name=row[2].decode(), value=maybe_decode(row[3]), comment=default_comment(row[4])) + value = TypeValueInfo(name=row[2].decode(), value=coerce_int(maybe_decode(row[3])), comment=default_comment(row[4])) if value.name and value.value is not None: # Don't add ignore keyed types @@ -417,6 +417,18 @@ def maybe_decode(o): return o +def coerce_int(value): + """Convert a value to int if it looks numeric (decimal or hex string).""" + if isinstance(value, int): + return value + if isinstance(value, str): + try: + return int(value, 0) + except (ValueError, TypeError): + pass + return value + + def default_comment(x): return (x or b'').decode() @@ -468,7 +480,7 @@ def parse_messages(messages_rows, type_list): # Not a subfield if first row has definition num if row[1] is not None and row[1] != b'': field = FieldInfo( - name=row[2].decode(), type=row[3].decode(), num=maybe_decode(row[1]), scale=fix_scale(row[6]), + name=row[2].decode(), type=row[3].decode(), num=coerce_int(maybe_decode(row[1])), scale=fix_scale(row[6]), offset=maybe_decode(row[7]), units=fix_units(default_comment(row[8])), components=[], subfields=[], comment=default_comment(row[13]), )