refactor(host): remove FT601 references from radar_dashboard, smoke_test, and docs

Replace FT601Connection with FT2232HConnection in radar_dashboard.py and
smoke_test.py. Both files had broken imports after FT601Connection was
removed from radar_protocol.py. Also update requirements_dashboard.txt
(ftd3xx -> pyftdi) and GUI_versions.txt descriptions.
This commit is contained in:
Jason
2026-04-07 21:25:58 +03:00
parent c1d12c4130
commit 7c82d20306
4 changed files with 20 additions and 20 deletions
+2 -2
View File
@@ -8,6 +8,6 @@ GUI_V5 ==> Added Mercury Color
GUI_V6 ==> Added USB3 FT601 support GUI_V6 ==> Added USB3 FT601 support
radar_dashboard ==> Board bring-up dashboard (FT601 reader, real-time R-D heatmap, CFAR overlay, waterfall, host commands, HDF5 recording) radar_dashboard ==> Board bring-up dashboard (FT2232H reader, real-time R-D heatmap, CFAR overlay, waterfall, host commands, HDF5 recording)
radar_protocol ==> Protocol layer (packet parsing, command building, FT601 connection, data recorder, acquisition thread) radar_protocol ==> Protocol layer (packet parsing, command building, FT2232H connection, data recorder, acquisition thread)
smoke_test ==> Board bring-up smoke test host script (triggers FPGA self-test via opcode 0x30) smoke_test ==> Board bring-up smoke test host script (triggers FPGA self-test via opcode 0x30)
+9 -9
View File
@@ -3,10 +3,10 @@
AERIS-10 Radar Dashboard — Board Bring-Up Edition AERIS-10 Radar Dashboard — Board Bring-Up Edition
=================================================== ===================================================
Real-time visualization and control for the AERIS-10 phased-array radar Real-time visualization and control for the AERIS-10 phased-array radar
via FT601 USB 3.0 interface. via FT2232H USB 2.0 interface.
Features: Features:
- FT601 USB reader with packet parsing (matches usb_data_interface.v) - FT2232H USB reader with packet parsing (matches usb_data_interface_ft2232h.v)
- Real-time range-Doppler magnitude heatmap (64x32) - Real-time range-Doppler magnitude heatmap (64x32)
- CFAR detection overlay (flagged cells highlighted) - CFAR detection overlay (flagged cells highlighted)
- Range profile waterfall plot (range vs. time) - Range profile waterfall plot (range vs. time)
@@ -17,7 +17,7 @@ Features:
Usage: Usage:
python radar_dashboard.py # Launch with mock data python radar_dashboard.py # Launch with mock data
python radar_dashboard.py --live # Launch with FT601 hardware python radar_dashboard.py --live # Launch with FT2232H hardware
python radar_dashboard.py --record # Launch with HDF5 recording python radar_dashboard.py --record # Launch with HDF5 recording
""" """
@@ -43,7 +43,7 @@ from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
# Import protocol layer (no GUI deps) # Import protocol layer (no GUI deps)
from radar_protocol import ( from radar_protocol import (
RadarProtocol, FT601Connection, ReplayConnection, RadarProtocol, FT2232HConnection, ReplayConnection,
DataRecorder, RadarAcquisition, DataRecorder, RadarAcquisition,
RadarFrame, StatusResponse, Opcode, RadarFrame, StatusResponse, Opcode,
NUM_RANGE_BINS, NUM_DOPPLER_BINS, WATERFALL_DEPTH, NUM_RANGE_BINS, NUM_DOPPLER_BINS, WATERFALL_DEPTH,
@@ -82,7 +82,7 @@ class RadarDashboard:
BANDWIDTH = 500e6 # Hz — chirp bandwidth BANDWIDTH = 500e6 # Hz — chirp bandwidth
C = 3e8 # m/s — speed of light C = 3e8 # m/s — speed of light
def __init__(self, root: tk.Tk, connection: FT601Connection, def __init__(self, root: tk.Tk, connection: FT2232HConnection,
recorder: DataRecorder): recorder: DataRecorder):
self.root = root self.root = root
self.conn = connection self.conn = connection
@@ -552,7 +552,7 @@ class _TextHandler(logging.Handler):
def main(): def main():
parser = argparse.ArgumentParser(description="AERIS-10 Radar Dashboard") parser = argparse.ArgumentParser(description="AERIS-10 Radar Dashboard")
parser.add_argument("--live", action="store_true", parser.add_argument("--live", action="store_true",
help="Use real FT601 hardware (default: mock mode)") help="Use real FT2232H hardware (default: mock mode)")
parser.add_argument("--replay", type=str, metavar="NPY_DIR", parser.add_argument("--replay", type=str, metavar="NPY_DIR",
help="Replay real data from .npy directory " help="Replay real data from .npy directory "
"(e.g. tb/cosim/real_data/hex/)") "(e.g. tb/cosim/real_data/hex/)")
@@ -561,7 +561,7 @@ def main():
parser.add_argument("--record", action="store_true", parser.add_argument("--record", action="store_true",
help="Start HDF5 recording immediately") help="Start HDF5 recording immediately")
parser.add_argument("--device", type=int, default=0, parser.add_argument("--device", type=int, default=0,
help="FT601 device index (default: 0)") help="FT2232H device index (default: 0)")
args = parser.parse_args() args = parser.parse_args()
if args.replay: if args.replay:
@@ -569,10 +569,10 @@ def main():
conn = ReplayConnection(npy_dir, use_mti=not args.no_mti) conn = ReplayConnection(npy_dir, use_mti=not args.no_mti)
mode_str = f"REPLAY ({npy_dir}, MTI={'OFF' if args.no_mti else 'ON'})" mode_str = f"REPLAY ({npy_dir}, MTI={'OFF' if args.no_mti else 'ON'})"
elif args.live: elif args.live:
conn = FT601Connection(mock=False) conn = FT2232HConnection(mock=False)
mode_str = "LIVE" mode_str = "LIVE"
else: else:
conn = FT601Connection(mock=True) conn = FT2232HConnection(mock=True)
mode_str = "MOCK" mode_str = "MOCK"
recorder = DataRecorder() recorder = DataRecorder()
@@ -5,5 +5,5 @@ numpy>=1.24
matplotlib>=3.7 matplotlib>=3.7
h5py>=3.8 h5py>=3.8
# FT601 USB 3.0 driver (install from FTDI website if not on PyPI) # FT2232H USB 2.0 driver (pyftdi — pure Python, pip-installable)
# ftd3xx # Optional: only needed for --live mode with real hardware # pyftdi>=0.54 # Optional: only needed for --live mode with real hardware
+7 -7
View File
@@ -8,7 +8,7 @@ optionally captures raw ADC samples for offline analysis.
Usage: Usage:
python smoke_test.py # Mock mode (no hardware) python smoke_test.py # Mock mode (no hardware)
python smoke_test.py --live # Real FT601 hardware python smoke_test.py --live # Real FT2232H hardware
python smoke_test.py --live --adc-dump adc_raw.npy # Capture ADC data python smoke_test.py --live --adc-dump adc_raw.npy # Capture ADC data
Self-Test Subsystems: Self-Test Subsystems:
@@ -35,7 +35,7 @@ import numpy as np
# Add parent directory for radar_protocol import # Add parent directory for radar_protocol import
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from radar_protocol import RadarProtocol, FT601Connection from radar_protocol import RadarProtocol, FT2232HConnection
logging.basicConfig( logging.basicConfig(
level=logging.INFO, level=logging.INFO,
@@ -67,7 +67,7 @@ TEST_NAMES = {
class SmokeTest: class SmokeTest:
"""Host-side smoke test controller.""" """Host-side smoke test controller."""
def __init__(self, connection: FT601Connection, adc_dump_path: str = None): def __init__(self, connection: FT2232HConnection, adc_dump_path: str = None):
self.conn = connection self.conn = connection
self.adc_dump_path = adc_dump_path self.adc_dump_path = adc_dump_path
self._adc_samples = [] self._adc_samples = []
@@ -85,7 +85,7 @@ class SmokeTest:
# Step 1: Connect # Step 1: Connect
if not self.conn.is_open: if not self.conn.is_open:
if not self.conn.open(): if not self.conn.open():
log.error("Failed to open FT601 connection") log.error("Failed to open FT2232H connection")
return False return False
# Step 2: Send self-test trigger (opcode 0x30) # Step 2: Send self-test trigger (opcode 0x30)
@@ -205,15 +205,15 @@ class SmokeTest:
def main(): def main():
parser = argparse.ArgumentParser(description="AERIS-10 Board Smoke Test") parser = argparse.ArgumentParser(description="AERIS-10 Board Smoke Test")
parser.add_argument("--live", action="store_true", parser.add_argument("--live", action="store_true",
help="Use real FT601 hardware (default: mock)") help="Use real FT2232H hardware (default: mock)")
parser.add_argument("--device", type=int, default=0, parser.add_argument("--device", type=int, default=0,
help="FT601 device index") help="FT2232H device index")
parser.add_argument("--adc-dump", type=str, default=None, parser.add_argument("--adc-dump", type=str, default=None,
help="Save raw ADC samples to .npy file") help="Save raw ADC samples to .npy file")
args = parser.parse_args() args = parser.parse_args()
mock_mode = not args.live mock_mode = not args.live
conn = FT601Connection(mock=mock_mode) conn = FT2232HConnection(mock=mock_mode)
tester = SmokeTest(conn, adc_dump_path=args.adc_dump) tester = SmokeTest(conn, adc_dump_path=args.adc_dump)
success = tester.run() success = tester.run()