SXXXXXXX_PyBusMonitor1553/doc/Refactoring-Messages-Split.md
2026-01-20 12:31:23 +01:00

162 lines
5.9 KiB
Markdown

# Refactoring Messaggi 1553 - Riepilogo
**Data**: 20 Gennaio 2026
**Obiettivo**: Separare i messaggi 1553 in file individuali per facilitare il versioning futuro (v1/v2)
## ✅ Refactoring Completato
### 📁 Struttura Creata
```
pybusmonitor1553/Grifo_E_1553lib/messages/
├── _base.py # Infrastruttura comune (MessageDB, Message, MessageNew, MajorFrame)
├── recv_messages.py # Gestore ricezione messaggi UDP
├── __init__.py # Export unificato di tutti i messaggi
├── msg_a1.py # A1: Radar Settings and Parameters (10 Hz, SubAddr 1)
├── msg_a2.py # A2: Radar Operation Command (25 Hz, SubAddr 2)
├── msg_a3.py # A3: Graphic Setting (10 Hz, SubAddr 3)
├── msg_a4.py # A4: Nav Data and Cursor (50 Hz, SubAddr 4)
├── msg_a5.py # A5: INU High Speed (50 Hz, SubAddr 5)
├── msg_a7.py # A7: Data Link Target #1 (20 Hz, SubAddr 7)
├── msg_a8.py # A8: Data Link Target #2 (20 Hz, SubAddr 8)
├── msg_b4.py # B4: Tracked Target 02-10 Request (50 Hz, SubAddr 14)
├── msg_b5.py # B5: Tracked Target 01 Request (50 Hz, SubAddr 15)
├── msg_b7.py # B7: Radar Status Tellback Request (25 Hz, SubAddr 17)
├── msg_b11.py # B11: Tracked Target 02-10 Request (50 Hz, SubAddr 21)
├── msg_b12.py # B12: Tracked Target 02-10 Request (50 Hz, SubAddr 22)
├── msg_b13.py # B13: Tracked Target 02-10 Request (50 Hz, SubAddr 23)
├── msg_b14.py # B14: Tracked Target 02-10 Request (50 Hz, SubAddr 24)
├── msg_b15.py # B15: Tracked Target 02-10 Request (50 Hz, SubAddr 25)
├── msg_b16.py # B16: Tracked Target 02-10 Request (50 Hz, SubAddr 26)
├── msg_b17.py # B17: Tracked Target 02-10 Request (50 Hz, SubAddr 27)
├── msg_b18.py # B18: Tracked Target 02-10 Request (50 Hz, SubAddr 28)
└── messages_old.py # ⚠️ BACKUP del file originale (non più usato)
```
---
## 🔧 Modifiche Effettuate
### 1. **Creato `_base.py`**
Contiene le classi infrastrutturali:
- `MessageDB`: Database runtime per messaggi
- `Message`: Wrapper legacy con singleton pattern
- `MessageNew`: Wrapper new-style con label
- `MajorFrame`: Scheduler per organizzazione frame temporali
### 2. **Creati 18 file messaggio individuali**
Ogni file `msg_XX.py` contiene:
- Classe wrapper singleton (A1-A8, B4-B18)
- Documentazione (descrizione, SubAddr, frequenza)
- Import specifici solo per quel messaggio
- Logica di inizializzazione e registrazione
### 3. **Aggiornato `__init__.py`**
- Import di tutti i messaggi individuali
- Export unificato tramite `__all__`
- Separazione chiara tra:
- Infrastruttura (`MessageDB`, `Message`, ecc.)
- Strutture dati protocollo (`MsgRdrSettingsAndParameters`, ecc.)
- Wrapper messaggi (`A1`, `A2`, ecc.)
### 4. **Creato `recv_messages.py`**
- Estratto dal vecchio `messages.py`
- Gestisce la ricezione UDP e dispatch per SubAddress
### 5. **Aggiornato `connection/start.py`**
```python
# PRIMA
from Grifo_E_1553lib.messages.messages import *
# DOPO
from Grifo_E_1553lib.messages import *
```
### 6. **Rinominato `messages.py` → `messages_old.py`**
File originale mantenuto come backup (può essere eliminato dopo verifica completa)
---
## ✅ Verifica Funzionamento
```python
from Grifo_E_1553lib.messages import A1, A2, MessageDB, MajorFrame
# ✅ Import funzionanti
a1 = A1() # 10 Hz, SubAddr 1
a2 = A2() # 25 Hz, SubAddr 2
# ✅ Singleton pattern preservato
assert A1() is a1 # True
# ✅ Frequenze e scheduling corretti
assert a1.freq == 10
assert a2.freq == 25
assert len(MajorFrame.get_majorFrame()) == 2 # 2 time slots (100ms, 40ms)
```
---
## 📋 Prossimi Passi per Versioning
### Fase 2: Organizzazione per Versioni ICD
**Struttura target:**
```
messages/
├── _base.py # Comune a tutte le versioni
├── recv_messages.py # Comune
├── common/ # 📁 Messaggi identici tra v1 e v2
│ ├── msg_a1.py
│ ├── msg_a3.py
│ └── ...
├── v1/ # 📁 ICD GRIFO-F/TH Rev-A (attuale)
│ ├── msg_a2.py # des_control: 3 bit @ pos 9
│ └── msg_b7.py
└── v2/ # 📁 ICD GRIFO-F/TH Rev-B (nuovo)
├── msg_a2.py # des_control: 4 bit @ pos 6
└── msg_b7.py
```
**Workflow:**
1. Analizzare ICD v2 e identificare differenze con v1
2. Spostare messaggi **identici** in `common/`
3. Copiare messaggi **diversi** in `v1/` (base attuale)
4. Creare versioni modificate in `v2/` con le differenze ICD
5. Aggiornare `__init__.py` con import condizionale basato su `ICD_VERSION`
---
## 📊 Statistiche
- **File creati**: 20 nuovi file
- **File modificati**: 2 (`__init__.py`, `connection/start.py`)
- **File backup**: 1 (`messages_old.py`)
- **Righe codice refactorizzate**: ~760 linee
- **Import modificati**: 1 (connection/start.py)
- **Breaking changes**: ❌ NESSUNO (compatibilità retroattiva 100%)
---
## 🎯 Vantaggi Ottenuti
1.**File piccoli e focalizzati** - ogni messaggio ~30 righe
2.**Git diff più puliti** - modifiche isolate per messaggio
3.**Facile identificazione differenze v1/v2**
4.**Test più mirati** - possibile testare singoli messaggi
5.**Documentazione inline** - ogni file autodocumentato
6.**Preparazione perfetta per versioning** - struttura pronta
---
## ⚠️ Note Importanti
- Il file `messages_old.py` è un backup e **non viene più usato**
- Tutti gli import ora puntano a `from Grifo_E_1553lib.messages import ...`
- Pattern singleton preservato in tutti i messaggi
- Frequenze e SubAddr verificati contro ICD
- Nessun breaking change: codice esistente funziona senza modifiche