sistemata conversione raw/simplified nella schermata di debug
This commit is contained in:
parent
1f6c86630d
commit
2921357834
@ -106,6 +106,10 @@ class SfpDebugWindow(tk.Toplevel):
|
||||
self.destroy()
|
||||
|
||||
def _process_gui_updates(self):
|
||||
"""
|
||||
This method runs on the GUI thread and processes all queued updates.
|
||||
"""
|
||||
# 1. Process target updates for the PPI
|
||||
try:
|
||||
while not self.debug_update_queue.empty():
|
||||
real_targets = self.debug_update_queue.get_nowait()
|
||||
@ -113,6 +117,7 @@ class SfpDebugWindow(tk.Toplevel):
|
||||
except Empty:
|
||||
pass
|
||||
|
||||
# 2. Process other buffered payloads (for text tabs)
|
||||
if self.payload_router:
|
||||
try:
|
||||
new_payloads = self.payload_router.get_and_clear_latest_payloads()
|
||||
@ -131,24 +136,81 @@ class SfpDebugWindow(tk.Toplevel):
|
||||
import json
|
||||
struct = json.loads(payload.decode("utf-8")) if isinstance(payload, (bytes, bytearray)) else payload
|
||||
|
||||
for iid in self.scenario_tree.get_children(): self.scenario_tree.delete(iid)
|
||||
# --- START OF NEW LOGIC ---
|
||||
|
||||
view_mode = self.scenario_view_mode.get()
|
||||
decimals = self.simplified_decimals.get()
|
||||
|
||||
# Helper functions for conversion
|
||||
def to_deg(rad): return rad * 180.0 / math.pi
|
||||
def m_s_to_ft_s(ms): return ms * 3.28084
|
||||
def m_to_ft(m): return m * 3.28084
|
||||
def decimal_deg_to_dms(deg, is_lat):
|
||||
d = abs(deg)
|
||||
degrees = int(d)
|
||||
minutes_full = (d - degrees) * 60
|
||||
minutes = int(minutes_full)
|
||||
seconds = (minutes_full - minutes) * 60
|
||||
direction = ""
|
||||
if is_lat:
|
||||
direction = 'N' if deg >= 0 else 'S'
|
||||
else:
|
||||
direction = 'E' if deg >= 0 else 'W'
|
||||
return f"{degrees}° {minutes}' {seconds:.2f}\" {direction}"
|
||||
|
||||
# 1. Update scenario tree
|
||||
self.scenario_tree.delete(*self.scenario_tree.get_children())
|
||||
scenario = struct.get("scenario", {})
|
||||
if scenario:
|
||||
for field_name, value in scenario.items():
|
||||
self.scenario_tree.insert("", tk.END, values=(field_name, str(value)))
|
||||
for field, value in scenario.items():
|
||||
display_value = value
|
||||
if view_mode == 'simplified':
|
||||
if field in ['platform_azimuth', 'true_heading', 'ant_nav_az', 'ant_nav_el']:
|
||||
display_value = f"{to_deg(value):.{decimals}f}°"
|
||||
elif field in ['vx', 'vy', 'vz']:
|
||||
display_value = f"{m_s_to_ft_s(value):.{decimals}f} ft/s"
|
||||
elif field == 'baro_altitude':
|
||||
display_value = f"{m_to_ft(value):.{decimals}f} ft"
|
||||
elif field in ['latitude', 'longitude']:
|
||||
display_value = decimal_deg_to_dms(value, is_lat=(field == 'latitude'))
|
||||
elif field == 'mode' and value < len(self._master_mode_names):
|
||||
display_value = f"{value} ({self._master_mode_names[value].replace('_master_mode', '')})"
|
||||
elif isinstance(value, list):
|
||||
display_value = str(value) # Keep arrays as string
|
||||
|
||||
for iid in self.ris_tree.get_children(): self.ris_tree.delete(iid)
|
||||
self.scenario_tree.insert("", tk.END, values=(field, display_value))
|
||||
|
||||
# 2. Update ris_tree (all targets)
|
||||
self.ris_tree.delete(*self.ris_tree.get_children())
|
||||
targets = struct.get("targets", [])
|
||||
for i, t in enumerate(targets):
|
||||
flags_val = t.get("flags", 0)
|
||||
flags_display = f"0x{flags_val:X}"
|
||||
vals = (i, flags_display, f"{t.get('heading', 0.0):.3f}", f"{t.get('x', 0.0):.3f}", f"{t.get('y', 0.0):.3f}", f"{t.get('z', 0.0):.3f}")
|
||||
|
||||
if view_mode == 'simplified':
|
||||
heading = f"{to_deg(t.get('heading', 0.0)):.{decimals}f}°"
|
||||
x_pos = f"{m_to_ft(t.get('x', 0.0)):.{decimals}f} ft"
|
||||
y_pos = f"{m_to_ft(t.get('y', 0.0)):.{decimals}f} ft"
|
||||
z_pos = f"{m_to_ft(t.get('z', 0.0)):.{decimals}f} ft"
|
||||
else: # Raw mode
|
||||
heading = f"{t.get('heading', 0.0):.6f}"
|
||||
x_pos = f"{t.get('x', 0.0):.3f}"
|
||||
y_pos = f"{t.get('y', 0.0):.3f}"
|
||||
z_pos = f"{t.get('z', 0.0):.3f}"
|
||||
|
||||
vals = (i, flags_display, heading, x_pos, y_pos, z_pos)
|
||||
self.ris_tree.insert("", tk.END, values=vals)
|
||||
|
||||
# --- END OF NEW LOGIC ---
|
||||
|
||||
except Exception:
|
||||
self.logger.exception("Failed to update RIS tables from JSON payload.")
|
||||
|
||||
except Exception:
|
||||
self.logger.exception("Error while fetching latest payloads from router")
|
||||
|
||||
# (raw packet display logic remains unchanged)
|
||||
if self.payload_router:
|
||||
try:
|
||||
raw_pkt = self.payload_router.get_and_clear_raw_packet()
|
||||
if raw_pkt:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user