From 4b7b1613a90c395421d0691f333fa492c9b3f946 Mon Sep 17 00:00:00 2001 From: patrickrb <6586559+patrickrb@users.noreply.github.com> Date: Tue, 20 Oct 2026 16:50:40 -0500 Subject: [PATCH 1/2] Add Yaesu FTX-1 to the rig list (#931) FTX-1 owners had to guess which Yaesu entry works. A user confirmed CAT works with the FT-891/991(USB) profile (38400 baud, 9-digit Yaesu gen-3 command set), so add a named "YAESU FTX-1(USB)" entry with that profile. Appended at the end of rigaddress.txt because the selected rig is saved as a list index; extend the golden-order test and pin the new entry's profile to the FT-891/991(USB) one. Co-Authored-By: Claude Opus 5.5 --- ft8af/app/src/main/assets/rigaddress.txt | 1 + .../ft8af/database/RigAddressAssetTest.java | 24 ++++++++++++++++--- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/ft8af/app/src/main/assets/rigaddress.txt b/ft8af/app/src/main/assets/rigaddress.txt index a1a09823f..6020e90e2 100644 --- a/ft8af/app/src/main/assets/rigaddress.txt +++ b/ft8af/app/src/main/assets/rigaddress.txt @@ -75,3 +75,4 @@ UA3REO Wolf SDR(USB),00,4800,16 (tr)uSDX (TS-480),00,9600,7 Yaesu FT-891 (Hamlib),40C,38400,26 ICOM IC-7300MK2,B6,115200,0 +YAESU FTX-1(USB),00,38400,2 diff --git a/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java b/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java index 58210ff36..316d6d663 100644 --- a/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java +++ b/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java @@ -114,6 +114,7 @@ public class RigAddressAssetTest { "(tr)uSDX (TS-480)", "Yaesu FT-891 (Hamlib)", "ICOM IC-7300MK2", + "YAESU FTX-1(USB)", }; private RigNameList load() { @@ -158,11 +159,28 @@ public void rigList_matchesGoldenIndexOrder() { } @Test - public void ic7300mk2_isTheLastEntry() { - // New rigs are append-only (class javadoc); MK2 closed the list. + public void ftx1_isTheLastEntry() { + // New rigs are append-only (class javadoc); FTX-1 closed the list. RigNameList list = load(); assertThat(list.rigList.get(list.rigList.size() - 1).modelName) - .isEqualTo("ICOM IC-7300MK2"); + .isEqualTo("YAESU FTX-1(USB)"); + } + + @Test + public void ftx1_usesTheFt891991UsbProfile() { + // A user reported (issue #931) working CAT on the FTX-1 with the + // "FT-891/991(USB)" entry: same 38400 baud and 9-digit Yaesu gen-3 + // command set, so the named entry mirrors that profile exactly. + RigNameList list = load(); + RigNameList.RigName ftx1 = findByName(list, "YAESU FTX-1(USB)"); + RigNameList.RigName ft891 = findByName(list, "YAESU FT-891/991(USB)"); + assertThat(ftx1).isNotNull(); + assertThat(ft891).isNotNull(); + assertThat(ftx1.bauRate).isEqualTo(38400); + assertThat(ftx1.instructionSet).isEqualTo(2); // InstructionSet.YAESU_3_9 + assertThat(ftx1.address).isEqualTo(ft891.address); + assertThat(ftx1.bauRate).isEqualTo(ft891.bauRate); + assertThat(ftx1.instructionSet).isEqualTo(ft891.instructionSet); } @Test From 4327bed836dce60d29ed747f7939d88d772b2e0a Mon Sep 17 00:00:00 2001 From: Patrick Burns Date: Thu, 22 Oct 2026 10:12:38 -0500 Subject: [PATCH 2/2] Address review: pin last-entry test to GOLDEN_ORDER, refresh javadoc The last-entry check now compares against the final GOLDEN_ORDER name, so appending a rig no longer means renaming and rewriting it. The class javadoc covers the FTX-1 check alongside the IC-7300MK2 ones. Co-Authored-By: Claude Opus 5.5 --- .../k1af/ft8af/database/RigAddressAssetTest.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java b/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java index 316d6d663..94eb3f3fc 100644 --- a/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java +++ b/ft8af/app/src/test/java/com/k1af/ft8af/database/RigAddressAssetTest.java @@ -15,7 +15,8 @@ * exercises getRigNamesFromFile / getRigNameByIndex / getIndexByAddress, * which {@link RigNameListTest} can't reach without a Context). * - *

Two invariants matter here beyond the IC-7300MK2 entry itself: + *

Per-rig checks pin the profiles of recently added entries (IC-7300MK2, + * FTX-1). Two invariants matter beyond those: *

    *
  • New rigs must be appended, existing lines must not move: the * selected model is persisted as a raw index into this list @@ -24,7 +25,7 @@ * selected rig on upgrade. {@link #rigList_matchesGoldenIndexOrder} pins * every entry to its index; when you add a rig, append it to both the * asset file and the end of {@code GOLDEN_ORDER}.
  • - *
  • Its CI-V address (0xB6) is unique in the list, so + *
  • The IC-7300MK2's CI-V address (0xB6) is unique in the list, so * {@link RigNameList#getIndexByAddress(int)} maps it unambiguously.
  • *
*/ @@ -159,11 +160,13 @@ public void rigList_matchesGoldenIndexOrder() { } @Test - public void ftx1_isTheLastEntry() { - // New rigs are append-only (class javadoc); FTX-1 closed the list. + public void lastEntry_isTheLastGoldenName() { + // New rigs are append-only (class javadoc): the loaded list must end + // with the newest GOLDEN_ORDER entry. Pinned to the array rather than a + // model name so appending a rig doesn't mean rewriting this test. RigNameList list = load(); assertThat(list.rigList.get(list.rigList.size() - 1).modelName) - .isEqualTo("YAESU FTX-1(USB)"); + .isEqualTo(GOLDEN_ORDER[GOLDEN_ORDER.length - 1]); } @Test