sistemato trail sui target real, sistemato bug sui 15 target id, ora sono 32
This commit is contained in:
parent
4995c0743d
commit
17cd4ea79f
@ -11,7 +11,9 @@ from typing import Dict, List, Optional, Tuple
|
|||||||
|
|
||||||
# --- Constants ---
|
# --- Constants ---
|
||||||
MIN_TARGET_ID = 0
|
MIN_TARGET_ID = 0
|
||||||
MAX_TARGET_ID = 15
|
# Increase allowed max target id to 32 (inclusive). Historically this was 15
|
||||||
|
# but RIS/firmware can address up to 32 targets in current deployments.
|
||||||
|
MAX_TARGET_ID = 32
|
||||||
KNOTS_TO_FPS = 1.68781
|
KNOTS_TO_FPS = 1.68781
|
||||||
FPS_TO_KNOTS = 1 / KNOTS_TO_FPS
|
FPS_TO_KNOTS = 1 / KNOTS_TO_FPS
|
||||||
NM_TO_FT = 6076.12
|
NM_TO_FT = 6076.12
|
||||||
|
|||||||
@ -16,7 +16,7 @@ import json
|
|||||||
import ctypes
|
import ctypes
|
||||||
import time
|
import time
|
||||||
from queue import Queue, Full
|
from queue import Queue, Full
|
||||||
from typing import Dict, Optional, Any, List, Callable
|
from typing import Dict, Optional, Any, List, Callable, Tuple
|
||||||
|
|
||||||
from target_simulator.core.sfp_structures import SFPHeader, SfpRisStatusPayload
|
from target_simulator.core.sfp_structures import SFPHeader, SfpRisStatusPayload
|
||||||
from target_simulator.analysis.simulation_state_hub import SimulationStateHub
|
from target_simulator.analysis.simulation_state_hub import SimulationStateHub
|
||||||
@ -100,8 +100,14 @@ class DebugPayloadRouter:
|
|||||||
with self._lock:
|
with self._lock:
|
||||||
self._latest_payloads[flow_id] = payload
|
self._latest_payloads[flow_id] = payload
|
||||||
|
|
||||||
def _parse_ris_payload_to_targets(self, payload: bytearray) -> List[Target]:
|
def _parse_ris_payload_to_targets(self, payload: bytearray) -> Tuple[List[Target], List[int]]:
|
||||||
targets = []
|
"""
|
||||||
|
Parse RIS payload and return a tuple:
|
||||||
|
- list of Target objects for entries with flags != 0 (active targets)
|
||||||
|
- list of integer target IDs present with flags == 0 (inactive)
|
||||||
|
"""
|
||||||
|
targets: List[Target] = []
|
||||||
|
inactive_ids: List[int] = []
|
||||||
try:
|
try:
|
||||||
parsed_payload = SfpRisStatusPayload.from_buffer_copy(payload)
|
parsed_payload = SfpRisStatusPayload.from_buffer_copy(payload)
|
||||||
for i, ris_target in enumerate(parsed_payload.tgt.tgt):
|
for i, ris_target in enumerate(parsed_payload.tgt.tgt):
|
||||||
@ -140,14 +146,19 @@ class DebugPayloadRouter:
|
|||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
target.current_heading_deg = 0.0
|
target.current_heading_deg = 0.0
|
||||||
targets.append(target)
|
targets.append(target)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
inactive_ids.append(int(i))
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
except Exception:
|
except Exception:
|
||||||
self._logger.exception(
|
self._logger.exception(
|
||||||
f"{self._log_prefix} Failed to parse RIS payload into Target objects."
|
f"{self._log_prefix} Failed to parse RIS payload into Target objects."
|
||||||
)
|
)
|
||||||
return targets
|
return targets, inactive_ids
|
||||||
|
|
||||||
def _handle_ris_status(self, payload: bytearray):
|
def _handle_ris_status(self, payload: bytearray):
|
||||||
real_targets = self._parse_ris_payload_to_targets(payload)
|
real_targets, inactive_ids = self._parse_ris_payload_to_targets(payload)
|
||||||
|
|
||||||
if self._hub:
|
if self._hub:
|
||||||
try:
|
try:
|
||||||
@ -164,6 +175,15 @@ class DebugPayloadRouter:
|
|||||||
# Non-fatal: continue even if packet recording fails
|
# Non-fatal: continue even if packet recording fails
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# If payload included inactive targets (flags==0), clear their stored
|
||||||
|
# real data so they disappear from the PPI immediately.
|
||||||
|
try:
|
||||||
|
for tid in (inactive_ids or []):
|
||||||
|
if hasattr(self._hub, "clear_real_target_data"):
|
||||||
|
self._hub.clear_real_target_data(tid)
|
||||||
|
except Exception:
|
||||||
|
self._logger.debug("Failed to clear inactive target data in hub", exc_info=True)
|
||||||
|
|
||||||
# Add real states for active targets
|
# Add real states for active targets
|
||||||
for target in real_targets:
|
for target in real_targets:
|
||||||
state_tuple = (
|
state_tuple = (
|
||||||
|
|||||||
@ -58,7 +58,8 @@ class PPIDisplay(ttk.Frame):
|
|||||||
self.show_sim_points_var = tk.BooleanVar(value=True)
|
self.show_sim_points_var = tk.BooleanVar(value=True)
|
||||||
self.show_real_points_var = tk.BooleanVar(value=True)
|
self.show_real_points_var = tk.BooleanVar(value=True)
|
||||||
self.show_sim_trail_var = tk.BooleanVar(value=False)
|
self.show_sim_trail_var = tk.BooleanVar(value=False)
|
||||||
self.show_real_trail_var = tk.BooleanVar(value=True)
|
# Default: do not show real trails unless the user enables them.
|
||||||
|
self.show_real_trail_var = tk.BooleanVar(value=False)
|
||||||
self.canvas = None
|
self.canvas = None
|
||||||
self._create_controls()
|
self._create_controls()
|
||||||
self._create_plot()
|
self._create_plot()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user