()
| 127 | |
| 128 | |
| 129 | def main() -> int: |
| 130 | p = argparse.ArgumentParser() |
| 131 | p.add_argument("--port", default=DEFAULT_PORT) |
| 132 | p.add_argument("--baud", default=DEFAULT_BAUD, type=int) |
| 133 | p.add_argument( |
| 134 | "--tx-pin", |
| 135 | default=3, |
| 136 | type=int, |
| 137 | help="TX pin driven by analogWriteFrequency (default: 3)", |
| 138 | ) |
| 139 | p.add_argument( |
| 140 | "--rx-pin", |
| 141 | default=4, |
| 142 | type=int, |
| 143 | help="RX pin captured by FLEXIO1 (default: 4; " |
| 144 | "must be in kFlexIo1Pins[] in the firmware)", |
| 145 | ) |
| 146 | args = p.parse_args() |
| 147 | |
| 148 | if serial is None: |
| 149 | print( |
| 150 | "ERROR: pyserial not installed. Run: uv pip install pyserial", |
| 151 | file=sys.stderr, |
| 152 | ) |
| 153 | return 2 |
| 154 | |
| 155 | print(f"[flexio-rx-bench] opening {args.port} @ {args.baud}") |
| 156 | try: |
| 157 | s = serial.Serial(args.port, args.baud, timeout=0.1) |
| 158 | except serial.SerialException as e: |
| 159 | print(f"ERROR: could not open {args.port}: {e}", file=sys.stderr) |
| 160 | return 2 |
| 161 | with s: |
| 162 | s.dtr = True |
| 163 | s.rts = True |
| 164 | time.sleep(1.0) |
| 165 | s.reset_input_buffer() |
| 166 | |
| 167 | ping = send_rpc(s, "ping", request_id=1, timeout=5.0) |
| 168 | if not ping or "result" not in ping: |
| 169 | print( |
| 170 | "ERROR: ping failed; is AutoResearch flashed and running?", |
| 171 | file=sys.stderr, |
| 172 | ) |
| 173 | return 2 |
| 174 | print(f"[flexio-rx-bench] ping ok: uptime={ping['result'].get('uptimeMs')} ms") |
| 175 | |
| 176 | passes = 0 |
| 177 | fails = 0 |
| 178 | for i, case in enumerate(CASES, start=10): |
| 179 | print( |
| 180 | f"\n--- {case.label} ({case.frequency_hz} Hz / {case.duration_ms} ms) ---" |
| 181 | ) |
| 182 | resp = send_rpc( |
| 183 | s, |
| 184 | "flexioRxBenchmark", |
| 185 | args={ |
| 186 | "frequency_hz": case.frequency_hz, |
no test coverage detected