# Analisi Comparativa: Codice Albertook vs Nostro Codice

**Data:** 2026-02-04  
**Versione Albertook:** Funzionante e testata su hardware reale  
**Nostra Versione:** Riorganizzata con verifiche tellback e step sequenziali

---

## 🔍 FLUSSO DEL CODICE ALBERTOOK (Funzionante)

### Sequenza dopo Power ON:
```python
# 1. Power ON radar
power_grifo_on(1.5)  # Wait 1.5 secondi

# 2. Setup IMMEDIATO (senza attese o verifiche):
setValue(theGrifo1553, 127, "A1_MsgRdrSettingsAndParameters",
    "settings_RDROperationalSettings_rdr_symbology_intensity", commitChanges=True)
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","rdr_mode_command_RdrModeCommandWord_silence")

setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_azimuth_scan_width_selection")      
setValue(theGrifo1553, 2, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_range_scale_selection")      
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","param1_RdrFunAndParam1_number_of_bars_selection")      

setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand","rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)      

setValue(theGrifo1553, 1060, "A4_MsgNavDataAndCursor","z_acceleration_Acceleration_raw")      
setValue(theGrifo1553, 2500, "A4_MsgNavDataAndCursor","corrected_baro_altitude_BaroAltitude_raw")      
setValue(theGrifo1553, 2500, "A4_MsgNavDataAndCursor","radio_altitude_RadioAltitude_raw", commitChanges=True)      

setValue(theGrifo1553, 0xAA54, "A5_MsgInuHighSpeed","mode_word", commitChanges=True)

# 3. Inizia SUBITO loop PBIT (senza attese)
while remaining_time > 0:
    # ... aspetta bit_report_available
```

### Test Target (Molto Semplice):
```python
# 1. Rimuove STANDBY
setValue(theGrifo1553, 0, "A2_MsgRdrOperationCommand",
    "rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)

# 2. Esegue tgt_gen()
tgt_passed = tgt_gen(interface)

# 3. Rimette STANDBY
setValue(theGrifo1553, 1, "A2_MsgRdrOperationCommand",
    "rdr_mode_command_RdrModeCommandWord_stby", commitChanges=True)
```

---

## 🔴 DIFFERENZE CRITICHE CHE POTREBBERO CAUSARE PROBLEMI

### 1. **NESSUNA VERIFICA TELLBACK** 🔴🔴🔴
**Albertook:**
- NON verifica che STANDBY/SILENCE siano attivi
- NON controlla B7 per i tellback
- Procede "alla cieca" assumendo che i comandi siano stati accettati

**Noi:**
- Verifichiamo tellback STANDBY/SILENCE su B7
- Aspettiamo fino a 5 secondi per conferma
- **PROBLEMA:** Se il radar non risponde subito al tellback, andiamo in timeout!

**Impatto:** Il nostro codice potrebbe bloccarsi in attesa di tellback che il radar impiega tempo a settare.

---

### 2. **TIMING E ATTESE** 🔴🔴
**Albertook:**
```python
power_grifo_on(1.5)  # Solo 1.5 secondi
# Setup immediato senza altre attese
# Inizia PBIT subito
```

**Noi:**
```python
power_grifo_on(wait_after=0.100)
time.sleep(2.0)  # Attesa stabilizzazione
# ... setup comandi ...
time.sleep(TELLBACK_POST_SET_DELAY_SEC)  # 2 secondi
# ... verifica tellback (fino a 5 secondi) ...
time.sleep(2.0)  # Altri 2 secondi prima PBIT
```

**Totale attese:**
- Albertook: ~1.5 secondi
- Noi: 0.1 + 2.0 + 2.0 + (fino a 5.0) + 2.0 = **~11 secondi minimo**

**Impatto:** Troppa attesa potrebbe causare:
- Timeout radar
- Messaggi 1553 persi
- Stato radar inconsistente

---

### 3. **STRATEGIA commitChanges** 🔴
**Albertook:**
```python
# Imposta SILENCE senza commit
setValue(..., "silence")

# Imposta 3 param1 senza commit
setValue(..., "azimuth_scan_width_selection")
setValue(..., "range_scale_selection")
setValue(..., "number_of_bars_selection")

# Imposta STBY con commit (invia tutto insieme)
setValue(..., "stby", commitChanges=True)
```

**Noi:**
```python
# Ogni comando con commit immediato
setValue(..., "silence", commitChanges=True)
setValue(..., "stby", commitChanges=True)
# ... poi dopo ...
setValue(..., "azimuth_scan_width_selection", commitChanges=True)
setValue(..., "range_scale_selection", commitChanges=True)
setValue(..., "number_of_bars_selection", commitChanges=True)
```

**Impatto:** Inviare comandi separatamente potrebbe:
- Causare stati intermedi instabili
- Sovraccaricare il bus 1553
- Generare race condition

---

### 4. **ORDINE DI SETUP** 🔴
**Albertook:**
1. INTENSITY (A1)
2. SILENCE (A2) - senza commit
3. Scan params (A2)
4. STANDBY (A2) - con commit
5. Nav data (A4)
6. INU mode (A5)

**Noi:**
1. SILENCE (A2) - con commit
2. STANDBY (A2) - con commit
3. Verifica tellback (B7)
4. Scan params (A2)
5. Nav data (A4)
6. INU mode (A5)
7. INTENSITY (A1)

**Impatto:** L'ordine potrebbe essere importante per lo stato interno del radar.

---

### 5. **GESTIONE MESSAGGIO B6 vs B7** 🔴
**Albertook:**
- Usa solo B6 per bit_report_available ✅
- NON legge mai B7 ✅
- Non ha bisogno dei tellback

**Noi:**
- Leggiamo B7 per tellback (corretto per ICD)
- Ma questo richiede che il radar invii B7 attivamente
- **PROBLEMA:** Se B7 non arriva o è in ritardo, siamo bloccati

---

### 6. **TEST TARGET - SEMPLICITÀ** 🔴
**Albertook:**
```python
# Rimuove STANDBY
setValue(..., stby=0, commitChanges=True)
# Esegue test
tgt_gen(interface)
# Rimette STANDBY
setValue(..., stby=1, commitChanges=True)
```

**Noi:**
```python
# Rimuove STANDBY
setValue(..., stby=0, commitChanges=True)
time.sleep(STBY_POST_UNSET_DELAY_SEC)  # 2 secondi
# Verifica rimozione (B7, fino a 5 secondi)
# Attende 1 secondo
time.sleep(1.0)
# Esegue test
tgt_gen(...)
# Rimette STANDBY
setValue(..., stby=1, commitChanges=True)
time.sleep(TELLBACK_POST_SET_DELAY_SEC)  # 2 secondi
```

**Impatto:** Troppa attesa tra rimozione STANDBY e inizio test potrebbe far andare il radar in uno stato diverso da quello atteso.

---

### 7. **FUNZIONE tgt_gen() - PARAMETRI** 🔴
**Albertook:**
```python
def tgt_gen(interface):
    # Usa variabile globale only_bc
    if only_bc:
        setValue(theGrifo1553, 0, "A2...", "stby", commitChanges=True)
    # ... stimola A4/A5 ...
    # Monitora B9
```

**Noi:**
```python
def tgt_gen(interface, timeout_sec=..., expected_range=..., 
            range_tolerance=..., hit_threshold=..., 
            only_bc=True, enable_stim=True):
    # Logica più complessa
    # Rimuove STANDBY internamente se only_bc=True
```

**Impatto:** Il nostro tgt_gen rimuove STANDBY internamente, ma noi lo facciamo già prima! Possibile doppia rimozione.

---

### 8. **NESSUNA prepare_radar_for_target_test()** 🔴🔴
**Albertook:**
- NON chiama prepare_radar_for_target_test()
- Fa solo: rimuovi STBY → test → rimetti STBY

**Noi:**
- Chiamiamo prepare_radar_for_target_test() che:
  - Imposta SILENCE/STANDBY (già fatto!)
  - Configura scan params (già fatto!)
  - Verifica tellback (già fatto!)
- **PROBLEMA:** Stiamo duplicando tutto!

---

## 🎯 PROBLEMI PRINCIPALI NELLA NOSTRA VERSIONE

### PROBLEMA 1: Troppa Verifica Tellback
- Il radar potrebbe non rispondere subito ai tellback su B7
- Andiamo in timeout aspettando conferme non necessarie
- Albertook NON verifica e funziona!

### PROBLEMA 2: Troppa Attesa
- ~11 secondi di attese vs 1.5 secondi di Albertook
- Il radar potrebbe andare in timeout interno
- Il PBIT potrebbe non partire correttamente

### PROBLEMA 3: commitChanges Frammentato
- Albertook raggruppa i comandi A2 in un unico commit
- Noi committiamo ogni comando separatamente
- Possibili stati intermedi instabili

### PROBLEMA 4: Ordine Setup
- Albertook imposta INTENSITY per primo
- Noi lo impostiamo per ultimo
- Potrebbe essere importante per inizializzazione radar

### PROBLEMA 5: Doppia Configurazione Target Test
- Configuriamo tutto all'inizio
- Poi richiamiamo prepare_radar_for_target_test() che rifà tutto
- Chiamiamo tgt_gen() con only_bc=False ma lui vuole rimuovere STANDBY internamente

### PROBLEMA 6: Messaggio B7 Non Disponibile?
- Albertook non usa mai B7
- Noi lo usiamo per tellback
- Se B7 non arriva, siamo bloccati

---

## ✅ RACCOMANDAZIONI CORRETTIVE

### 1. **ELIMINARE VERIFICA TELLBACK** (CRITICO)
```python
# RIMUOVERE:
# - Verifica tellback STANDBY/SILENCE su B7
# - Attese per conferma tellback
# - Loop di polling B7

# LASCIARE:
# - Comandi setup
# - Attesa minima (1-2 secondi) per stabilizzazione HW
```

### 2. **RIDURRE ATTESE**
```python
# PRIMA:
power_grifo_on(wait_after=0.100)
time.sleep(2.0)  # stabilizzazione
# ... comandi ...
time.sleep(2.0)  # post-set
# ... verifica tellback 5s ...
time.sleep(2.0)  # pre-PBIT

# DOPO:
power_grifo_on(wait_after=1.5)  # come Albertook
# ... comandi immediati ...
# NESSUNA attesa aggiuntiva
# PBIT subito
```

### 3. **RAGGRUPPARE commitChanges**
```python
# Impostare tutti i comandi A2 insieme
setValue(..., "silence")  # NO commit
setValue(..., "azimuth_scan_width_selection")  # NO commit
setValue(..., "range_scale_selection")  # NO commit
setValue(..., "number_of_bars_selection")  # NO commit
setValue(..., "stby", commitChanges=True)  # commit TUTTO insieme
```

### 4. **RIORDINARE SETUP COME ALBERTOOK**
```python
# 1. INTENSITY per primo
setValue(..., "rdr_symbology_intensity", commitChanges=True)

# 2. SILENCE + scan params + STANDBY insieme
setValue(..., "silence")
setValue(..., "azimuth_scan_width_selection")
setValue(..., "range_scale_selection")
setValue(..., "number_of_bars_selection")
setValue(..., "stby", commitChanges=True)

# 3. Nav data
setValue(..., "z_acceleration_Acceleration_raw")
setValue(..., "corrected_baro_altitude_BaroAltitude_raw")
setValue(..., "radio_altitude_RadioAltitude_raw", commitChanges=True)

# 4. INU mode
setValue(..., "mode_word", commitChanges=True)
```

### 5. **SEMPLIFICARE TEST TARGET**
```python
# RIMUOVERE prepare_radar_for_target_test() prima del test

# Rimuovere STANDBY
setValue(..., stby=0, commitChanges=True)

# Eseguire test (senza attese)
tgt_result = tgt_gen(theGrifo1553, only_bc=False, enable_stim=True, ...)

# Rimettere STANDBY
setValue(..., stby=1, commitChanges=True)
```

### 6. **NON USARE B7**
- Non leggere B7_MsgRdrStatusTellback
- Fidarsi che i comandi siano accettati
- Come fa Albertook

---

## 📊 CONFRONTO TEMPORALE

| Fase | Albertook | Nostra Versione | Differenza |
|------|-----------|-----------------|------------|
| Power ON | 1.5s | 0.1s | -1.4s |
| Stabilizzazione | 0s | 2.0s | +2.0s |
| Setup comandi | ~0s | ~0s | 0s |
| Post-set delay | 0s | 2.0s | +2.0s |
| Verifica tellback | 0s | 0-5.0s | +0-5.0s |
| Pre-PBIT delay | 0s | 2.0s | +2.0s |
| **TOTALE** | **1.5s** | **6.1-11.1s** | **+4.6-9.6s** |

---

## 🎯 CONCLUSIONE

Il codice di Albertook funziona perché è **minimale e diretto**:
1. Nessuna verifica tellback
2. Attese minime
3. Comandi raggruppati
4. Nessuna duplicazione

La nostra versione ha **troppe precauzioni** che potrebbero causare:
- Timeout radar
- Stati inconsistenti
- Messaggi persi
- Configurazione duplicata

**Azione raccomandata:** Tornare ad un approccio più simile ad Albertook, eliminando le verifiche tellback e riducendo le attese.
