SXXXXXXX_PyBusMonitor1553/tools/export_message_fields.py
2026-01-20 12:31:23 +01:00

96 lines
3.3 KiB
Python

"""
Export Message Fields - Esporta i metadati dei campi di tutti i messaggi 1553.
Questo script genera file JSON e XML con le informazioni complete sui campi:
- Name: nome del campo
- Offset: indice della word (0-based)
- OffsetValue: bit di partenza (LSB = 0)
- Width: numero di bit
- Type: tipo del campo
- EnumType: tipo enum se applicabile
"""
import sys
import os
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'pybusmonitor1553')))
from Grifo_E_1553lib.messages.message_inspector import MessageInspector, inspect_all_messages
import json
def main():
print("=" * 80)
print("MESSAGE FIELD INSPECTOR - Export completo campi messaggi 1553")
print("=" * 80)
# Ispeziona tutti i messaggi
print("\nIspezione messaggi in corso...")
all_messages = inspect_all_messages()
# Statistiche
total_fields = sum(len(fields) for fields in all_messages.values())
print(f"\n[OK] Ispezionati {len(all_messages)} messaggi")
print(f"[OK] Totale campi trovati: {total_fields}")
# Export JSON
json_output = {}
for msg_name, fields in all_messages.items():
json_output[msg_name] = MessageInspector.export_to_dict(fields)
json_file = "message_fields_export.json"
with open(json_file, 'w', encoding='utf-8') as f:
json.dump(json_output, f, indent=2)
print(f"\n[OK] Export JSON: {json_file}")
# Export XML per ogni messaggio
xml_dir = "message_fields_xml"
os.makedirs(xml_dir, exist_ok=True)
for msg_name, fields in all_messages.items():
xml_content = f'<?xml version="1.0" encoding="UTF-8"?>\n'
xml_content += f'<Message name="{msg_name}">\n'
xml_content += f' <Fields count="{len(fields)}">\n'
for field in fields:
xml_content += ' <Field>\n'
xml_content += f' <Name>{field.name}</Name>\n'
xml_content += f' <Offset>{field.word_offset}</Offset>\n'
xml_content += f' <OffsetValue>{field.bit_offset}</OffsetValue>\n'
xml_content += f' <Width>{field.width}</Width>\n'
xml_content += f' <Type>{field.field_type}</Type>\n'
if field.enum_type:
xml_content += f' <EnumType>{field.enum_type}</EnumType>\n'
xml_content += ' </Field>\n'
xml_content += ' </Fields>\n'
xml_content += '</Message>\n'
xml_file = os.path.join(xml_dir, f"{msg_name}.xml")
with open(xml_file, 'w', encoding='utf-8') as f:
f.write(xml_content)
print(f"[OK] Export XML: {xml_dir}/ ({len(all_messages)} file)")
# Stampa riepilogo per ogni messaggio
print("\n" + "=" * 80)
print("RIEPILOGO CAMPI PER MESSAGGIO")
print("=" * 80)
for msg_name, fields in sorted(all_messages.items()):
print(f"\n{msg_name} ({len(fields)} campi):")
print("-" * 80)
print(f"{'Campo':<50} {'Word':>6} {'Bit':>6} {'Width':>6}")
print("-" * 80)
for field in fields:
print(f"{field.name:<50} {field.word_offset:>6} {field.bit_offset:>6} {field.width:>6}")
print("\n" + "=" * 80)
print("[OK] Export completato!")
print("=" * 80)
if __name__ == "__main__":
main()