Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
884daef
Find my radio: settings handoff and config-file clues; dummy-rig cons…
Computer-Tsu Sep 21, 2026
756fe27
docs: update translation coverage
github-actions[bot] Sep 21, 2026
6caa99a
Find my radio: address CI-V rigs directly; verify by probe when Hamli…
Computer-Tsu Sep 21, 2026
f1ef4f5
docs: update translation coverage
github-actions[bot] Sep 21, 2026
b253636
Find my radio: state the answer in one plain sentence
Computer-Tsu Sep 21, 2026
bc4723b
docs: update translation coverage
github-actions[bot] Sep 21, 2026
5a6ce21
Scan PC: show the winget line for WSJT-X; tidy summary wording and co…
Computer-Tsu Sep 21, 2026
ac6532b
Find WSJT-X's Hamlib: rigctl-wsjtx.exe, Uninstall-key install folder
Computer-Tsu Sep 21, 2026
74ebe79
Open-connection test must send a command; decode WSJT-X Qt variants
Computer-Tsu Sep 21, 2026
4390f95
Run rigctl with -vv so failures carry a cause; name the port holder
Computer-Tsu Sep 21, 2026
4a7a48e
docs: update translation coverage
github-actions[bot] Sep 21, 2026
62ad734
Recognise Hamlib command errors at exit 0; unsupported query is a war…
Computer-Tsu Sep 21, 2026
bfb4b5a
docs: update translation coverage
github-actions[bot] Sep 21, 2026
cd2c9ea
Fix newline literal in FirstLine
Computer-Tsu Sep 21, 2026
4e2739a
Raw console accepts a pasted full command line; screenshots from the …
Computer-Tsu Sep 21, 2026
a112452
docs: update translation coverage
github-actions[bot] Sep 21, 2026
94d4caf
Version 0.7.0: environment checks and Find my radio, verified on an I…
Computer-Tsu Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions App.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,8 @@ private static void RegisterServices(IServiceCollection services, SettingsServic
services.AddTransient<EnvironmentCheckService>();
services.AddSingleton<DiscoveryDataService>();
services.AddTransient<DiscoveryEngine>();
services.AddTransient<ConfigClueService>();
services.AddTransient<HandoffBuilder>();
services.AddTransient<LogExportService>();

// ViewModels
Expand Down
4 changes: 2 additions & 2 deletions Assets/radio_presets.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
"Name": "Icom IC-7300",
"Manufacturer": "Icom",
"HamlibModelId": 3073,
"BaudRate": 19200,
"BaudRate": 115200,
"PttMethod": "CAT",
"Popularity": 100,
"Notes": "CI-V address default 0x94. USB cable to the radio's USB port; driver is Silicon Labs CP210x."
"Notes": "CI-V address default 0x94. USB cable to the radio's USB port; driver is Silicon Labs CP210x. CI-V USB baud rate is 115200 unless changed in the radio's menu (Set > Connectors > CI-V > CI-V USB Baud Rate); Echo Back is on by default."
},
{
"Name": "Icom IC-705",
Expand Down
4 changes: 2 additions & 2 deletions Assets/rig_families.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[
{
"_comment": "RigCheck by ShackDesk — protocol families for Find my radio. Each family names ONE probe operation from RigCheck's fixed, compiled, query-only set (KenwoodId, IcomReadId, IcomReadFreq, YaesuLegacyReadFreq) and the baud rates to sweep, most likely first. This file can never contain command bytes; it only chooses which built-in query to send. Weight orders families when nothing else hints; HamlibBackend is the thousands digit of the Hamlib model number (1 Yaesu, 2 Kenwood/Elecraft, 3 Icom). HandoffStopBits is what the operator should enter in WSJT-X — the probe itself always uses 8N1. Validate at jsonlint.com before submitting."
"_comment": "RigCheck by ShackDesk — protocol families for Find my radio. Each family names ONE probe operation from RigCheck's fixed, compiled, query-only set (KenwoodId, IcomReadId, IcomReadFreq, YaesuLegacyReadFreq) and the baud rates to sweep, most likely first. This file can never contain command bytes; it only chooses which built-in query to send. For Icom, the CI-V addresses tried after the broadcast attempt come from rig_ids.json. Weight orders families when nothing else hints; HamlibBackend is the thousands digit of the Hamlib model number (1 Yaesu, 2 Kenwood/Elecraft, 3 Icom). HandoffStopBits is what the operator should enter in WSJT-X — the probe itself always uses 8N1. Validate at jsonlint.com before submitting."
},
{
"Id": "Kenwood",
Expand All @@ -18,7 +18,7 @@
"Name": "Icom CI-V",
"Probe": "IcomReadId",
"FallbackProbe": "IcomReadFreq",
"Bauds": [ 19200, 9600, 115200, 4800 ],
"Bauds": [ 115200, 19200, 9600, 4800 ],
"HamlibBackends": [ 3 ],
"VendorHints": [ "Icom" ],
"HandoffStopBits": 1,
Expand Down
9 changes: 8 additions & 1 deletion BrandingInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public static class BrandingInfo
public const string AppName = "RigCheck";
public const string SuiteName = "ShackDesk";
public const string FullName = "RigCheck by ShackDesk";
public const string Version = "0.6.8";
public const string Version = "0.7.0";
public const string Tagline = "Know your rig is ready";

// ── Developer / publisher ────────────────────────────────────
Expand Down Expand Up @@ -48,6 +48,13 @@ public static class BrandingInfo

// ── Hamlib / rigctl resources ─────────────────────────────────
public const string HamlibDownloadUrl = "https://github.com/Hamlib/Hamlib/releases";

/// <summary>
/// winget command that installs WSJT-X, which bundles Hamlib. Shown to the
/// operator as a copyable line; RigCheck never runs it. Package ID
/// verified 2026-09-21 (installs WSJT-X 3.0.2).
/// </summary>
public const string WsjtxWingetCommand = "winget install JoeTaylor.WSJT-x";
public const string WsjtxDownloadUrl = "https://wsjt.sourceforge.io/wsjtx.html";
public const string HamlibDocsUrl = "https://hamlib.github.io";

Expand Down
124 changes: 124 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,130 @@ All notable changes to RigCheck are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
Version numbers: patch (x.x.1) for landed features and fixes, minor (x.1.0) for milestones.

## [0.7.0] - 2026-09-21

**Milestone: environment checks and Find my radio, proven on a real Icom IC-7300.**

Scan PC, Find my radio, and Run Tests all did their job on real hardware today. Everything the
bench found — CI-V broadcast never answers, WSJT-X names its Hamlib `rigctl-wsjtx.exe`, the
connection test hung in rigctl's interactive mode, Hamlib says nothing on failure without `-vv`,
`get_vfo` is not a fault on Icoms — is fixed in 0.6.10 through 0.6.17 below. This is the version
the first beta will be cut from.

## [0.6.17] - 2026-09-21

### Fixed
- Pasting a full command line from the results (`rigctl-wsjtx -m 3073 -r COM3 -s 115200 f`) into
the raw console sent the connection options twice; the exe name and connection options are now
stripped so only the subcommand runs, and the box shows a placeholder saying so

### Added
- Screenshots from the first IC-7300 run in the README

## [0.6.16] - 2026-09-21

First all-green run on an IC-7300; one false pass corrected.

### Fixed
- "Get VFO" reported a pass with a page of Hamlib trace as the VFO name. The IC-7300 (like most
Icoms) has no get_vfo in Hamlib; rigctl printed "Feature not available" but still exited 0.
Hamlib's own error line is now recognised whatever the exit code, and an unsupported query is a
warning that says so — the radio is fine, the command just does not exist for it
- Result messages show only the first line of rigctl's output, never a trace

## [0.6.15] - 2026-09-21

Failures now say why.

### Fixed
- Hamlib 4.7.1 prints nothing when rigctl fails at its default verbosity, so a port held by
WSJT-X, a missing rigctld, and a radio that is off all came out as "an unexpected error".
rigctl now runs with `-vv`, its banner line is stripped from the output, and its actual
messages ("serial port COM3 is already open", "does not exist", "failed to connect") drive the
diagnosis
- The "port in use" diagnosis names the program that is running right now (WSJT-X, Fldigi,
JS8Call, Flrig, rigctld, Winlink Express, VARA) — checked only when that failure occurs
- The suggested rigctld command uses the name that exists on the PC (`rigctld-wsjtx`) and omits
`-s` when the baud is Radio default
- The Quick preset picker shows the saved radio on startup instead of "Choose your radio…"

## [0.6.14] - 2026-09-21

Run Tests works against a real radio.

### Fixed
- The "Open connection" test ran rigctl with no command, which does not connect-and-exit — it
enters rigctl's interactive mode and waits for keyboard input until RigCheck's timeout, so
every run reported "the radio did not respond" and skipped the other six tests, even though
Hamlib could talk to the radio in 7 ms. The test now reads the frequency, which proves the
round trip; rigctl's input is also closed at launch so it can never wait on a keyboard again
- WSJT-X stores several settings as Qt variant blobs (`(...PTT_method_VOX...)`); the
configuration reader now decodes them instead of passing the blob through to the handoff

## [0.6.13] - 2026-09-21

WSJT-X's Hamlib is found.

### Fixed
- Hamlib was reported missing on a PC with WSJT-X installed: WSJT-X ships its copy as
`rigctl-wsjtx.exe` (and `rigctld-wsjtx.exe`), not `rigctl.exe`. Both names are now tried, the
install folder is also read from the Uninstall registry key, and either name is accepted on PATH
- Copyable commands start with the name that exists on the PC (`rigctl-wsjtx …` for WSJT-X users)
- Scan PC re-searches for Hamlib, so installing WSJT-X while RigCheck is open updates the banner
and enables Run Tests without a restart

## [0.6.12] - 2026-09-21

### Added
- When Scan PC finds no Hamlib, the diagnosis shows the one-line winget command that installs
WSJT-X (`winget install JoeTaylor.WSJT-x`) as a copyable fix — RigCheck never runs it

### Fixed
- Summary line reads "115200 baud, 8N1 (8 data bits, no parity, 1 stop)" instead of "1 stop bit(s)"
- Text copied from the results panel no longer carries a trailing space where a Copy button sat

## [0.6.11] - 2026-09-21

### Added
- Find my radio ends with the sentence the operator came for — "Your radio: Icom IC-7300 on COM3
— 115200 baud, 8 data bits, no parity, 1 stop bit" — in the results and in the status bar

## [0.6.10] - 2026-09-21

First lessons from a real IC-7300.

### Fixed
- Find my radio never got an answer from an Icom: the read-ID was sent to CI-V address 00
(broadcast), which rigs act on but by design never answer. When only our own echo comes
back (Echo Back is on by default on the IC-7300) or nothing at all, RigCheck now addresses
each CI-V address in `rig_ids.json` in turn, the selected radio's first
- Our own frame echoed back is now reported as what it is — a CI-V radio listening at that
speed — instead of "nothing recognisable"
- Without Hamlib installed, Find my radio reported a found radio as unverified because the
rigctl tests could not run. A radio that named itself over the serial port now counts as
verified, the Connection panel is filled in, and the handoff is shown; the note says to
install WSJT-X or Hamlib for the full tests
- The status bar now explains that Run Tests needs Hamlib because the tests are Hamlib
commands, and that Find my radio and Scan PC work without it

### Changed
- Icom baud order is now 115200 first (the IC-7300's USB default), then 19200, 9600, 4800; the
IC-7300 preset uses 115200
- The reply window waits a little longer for silence so an echo and the answer behind it are
read as one exchange

## [0.6.9] - 2026-09-21

Find my radio hands you the settings; Hamlib's dummy rig can no longer pass unnoticed.

### Added
- Settings handoff after a verified find: the exact fields for WSJT-X / JS8Call (File › Settings ›
Radio), Fldigi (Rig Control › Hamlib), and Winlink Express, each as one copyable line
- RigCheck reads what WSJT-X and JS8Call are configured to use (`WSJT-X.ini`, `JS8Call.ini`):
their port is probed first, their radio stands in when none is chosen, and after the sweep
each program gets a one-line verdict — already matches, or exactly which fields to change
- The raw console warns beside every command sent to Hamlib model 1, the dummy rig

## [0.6.8] - 2026-09-21

Find my radio — the second half of the 0.7.0 milestone, first cut.
Expand Down
18 changes: 18 additions & 0 deletions Models/Models.cs
Original file line number Diff line number Diff line change
Expand Up @@ -276,3 +276,21 @@ public record ProbeEvent(
string Message,
string? Bytes = null, // hex dump of what was sent or received
DiscoveredRig? Rig = null);

/// <summary>
/// What one of the operator's digital-mode programs is configured to use,
/// read from its own settings file. Values are the program's own strings
/// ("Eight", "Two", "Hardware"), not RigCheck's.
/// </summary>
public record ConfigClue(
string App, // "WSJT-X", "JS8Call"
string FilePath,
string RigName, // Hamlib display name, e.g. "Icom IC-7300"
int ModelId, // resolved Hamlib model, 0 if unknown
string Port, // "COM3", or "localhost:4532" for rigctl mode
int Baud, // 0 = not set
string DataBits,
string StopBits,
string Handshake,
string PttMethod,
bool UseRigctld);
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ RigCheck is the second ShackDesk suite application.

"Know your rig is ready."<br>

![RigCheck main window](docs/screenshots/Screenshot_RigCheck-0.6.4-Main.png)
![RigCheck — Find my radio found an IC-7300, verified it with Hamlib, and handed over the WSJT-X settings](docs/screenshots/Screenshot_RigCheck-0.6.16-FindMyRadio.png)

Serial CAT communication diagnostics using Hamlib. Verify your radio connection before it matters.

Expand Down Expand Up @@ -151,6 +151,9 @@ Target users:
is never a valid selection, so a passing result always means a real radio answered

### PC Scan (no radio needed)

![Scan PC results](docs/screenshots/Screenshot_RigCheck-0.6.16-ScanPC.png)

The **Scan PC** button checks the computer side before any radio is
involved, so "Run Tests is greyed out — why?" has an answer:

Expand Down Expand Up @@ -187,7 +190,7 @@ model to pick, **Find my radio** works it out:
frequency inside an amateur band is taken as its family's most likely model.
4. Every find is verified with the same Hamlib test suite as **Run Tests**, and the best
verified one is written into the Connection panel.
5. A rigctld already listening on 4532 is reported as a working connection; Flrig on 12345
6. A rigctld already listening on 4532 is reported as a working connection; Flrig on 12345
is noted.

Everything sent and received is shown in the results panel, with a Copy button per line, and
Expand All @@ -199,6 +202,9 @@ ticked ports. The data files (`rig_families.json`, `rig_ids.json`, `port_skip_pa
choose a built-in query by name and cannot contain command bytes. Design: `docs/discovery-flow.md`.

### Diagnostic Test Suite

![Run Tests against an IC-7300](docs/screenshots/Screenshot_RigCheck-0.6.16-RunTests.png)

Run a sequence of standard Hamlib queries and
display pass/fail results in plain English:

Expand Down
Loading
Loading