96 lines
3.3 KiB
Python
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()
|