diff --git a/src/main/java/kst4contest/controller/ChatController.java b/src/main/java/kst4contest/controller/ChatController.java index 49c0c38..73e774a 100644 --- a/src/main/java/kst4contest/controller/ChatController.java +++ b/src/main/java/kst4contest/controller/ChatController.java @@ -883,23 +883,29 @@ public class ChatController implements ThreadStatusCallback, PstRotatorEventList ); } - String modeText = + String configuredMode = chatPreferences.getLogsynch_wintestSkedMode(); - int modeOverride = -1; - - if ("CW".equalsIgnoreCase(modeText)) { - modeOverride = 0; - } else if ("SSB".equalsIgnoreCase(modeText)) { - modeOverride = 1; - } + /* + * Win-Test mode IDs: + * 0 = CW + * 1 = SSB + * + * SSB is the safe fallback for missing or obsolete settings. + * The former AUTO mode was frequency-based and could not produce + * reliable results on every supported VHF, UHF and SHF band. + */ + int winTestMode = + "CW".equalsIgnoreCase(configuredMode) + ? 0 + : 1; sender.pushSkedToWinTest( sked, winTestCallsign, frequencyKHz, notes, - modeOverride + winTestMode ); } catch (Exception exception) { diff --git a/src/main/java/kst4contest/controller/WinTestSkedSender.java b/src/main/java/kst4contest/controller/WinTestSkedSender.java index 1c87fd3..0f8a08b 100644 --- a/src/main/java/kst4contest/controller/WinTestSkedSender.java +++ b/src/main/java/kst4contest/controller/WinTestSkedSender.java @@ -46,13 +46,13 @@ public class WinTestSkedSender { * @param targetCallsign callsign prepared for Win-Test * @param frequencyKHz operating frequency in kHz * @param notes optional notes - * @param modeOverride -1 for AUTO, 0 for CW, 1 for SSB + * @param mode Win-Test mode ID: 0 for CW, 1 for SSB */ public void pushSkedToWinTest(ContestSked sked, String targetCallsign, double frequencyKHz, String notes, - int modeOverride) { + int mode) { try { sendLockSked(); @@ -62,7 +62,7 @@ public class WinTestSkedSender { targetCallsign, frequencyKHz, notes, - modeOverride + mode ); sendUnlockSked(); @@ -79,6 +79,8 @@ public class WinTestSkedSender { + frequencyKHz + " kHz, band=" + sked.getBand() + + ", mode=" + + mode ); } catch (Exception exception) { @@ -131,7 +133,7 @@ public class WinTestSkedSender { String targetCallsign, double frequencyKHz, String notes, - int modeOverride) throws Exception { + int mode) throws Exception { long wtTimestamp = sked.getSkedTimeEpoch() / 1000L; @@ -143,21 +145,20 @@ public class WinTestSkedSender { int bandId = toWinTestBandId(sked.getBand()); - int mode; - - if (modeOverride >= 0) { - mode = modeOverride; - } else { - mode = isInSsbSegment(frequencyKHz) - ? 1 - : 0; - } + /* + * Accept only the mode IDs supported by this UI. + * Any unexpected value falls back to SSB. + */ + int winTestMode = + mode == 0 + ? 0 + : 1; String data = wtTimestamp + " " + frequencyTenthKHz + " " + bandId - + " " + mode + + " " + winTestMode + " \"" + targetCallsign + "\"" + " \"" + (notes != null ? notes : "") + "\""; @@ -211,18 +212,6 @@ public class WinTestSkedSender { }; } - /** - * Very simple SSB segment heuristic. - * A more complete implementation would check actual mode from Win-Test STATUS. - */ - private boolean isInSsbSegment(double frequencyKHz) { - // SSB segments (kHz ranges) - if (frequencyKHz >= 144300 && frequencyKHz <= 144399) return true; // 2m SSB - if (frequencyKHz >= 432200 && frequencyKHz <= 432399) return true; // 70cm SSB - if (frequencyKHz >= 1296200 && frequencyKHz <= 1296399) return true; // 23cm SSB - return false; - } - private void reportStatus(String text, boolean isError) { if (callback != null) { callback.onThreadStatus(THREAD_NICKNAME, diff --git a/src/main/java/kst4contest/model/ChatPreferences.java b/src/main/java/kst4contest/model/ChatPreferences.java index c780f5a..fbe4163 100644 --- a/src/main/java/kst4contest/model/ChatPreferences.java +++ b/src/main/java/kst4contest/model/ChatPreferences.java @@ -224,7 +224,7 @@ public class ChatPreferences { boolean logsynch_wintestNetworkListenerEnabled = true; // default true = bisheriges Verhalten String logsynch_wintestNetworkBroadcastAddress = "255.255.255.255"; // UDP broadcast address for sending to Win-Test boolean logsynch_wintestNetworkSkedPushEnabled = false; // push SKEDs to Win-Test via UDP - String logsynch_wintestSkedMode = "SSB"; // CW, SSB or AUTO + String logsynch_wintestSkedMode = "SSB"; // Supported values: SSB or CW boolean logsynch_wintestQrgSyncEnabled = true; // sync QRG from Win-Test STATUS packet boolean logsynch_wintestUsePassQrg = false; // use pass frequency instead of main QRG from STATUS packet diff --git a/src/main/java/kst4contest/view/Kst4ContestApplication.java b/src/main/java/kst4contest/view/Kst4ContestApplication.java index ca36685..89acba7 100644 --- a/src/main/java/kst4contest/view/Kst4ContestApplication.java +++ b/src/main/java/kst4contest/view/Kst4ContestApplication.java @@ -792,30 +792,33 @@ public class Kst4ContestApplication extends Application implements StatusUpdateL } ChoiceBox cbSkedMode = new ChoiceBox<>( - FXCollections.observableArrayList("AUTO", "SSB", "CW") + FXCollections.observableArrayList("SSB", "CW") ); String configuredSkedMode = - chatcontroller.getChatPreferences().getLogsynch_wintestSkedMode(); + chatcontroller.getChatPreferences() + .getLogsynch_wintestSkedMode(); - if (configuredSkedMode == null || configuredSkedMode.isBlank()) { - configuredSkedMode = "AUTO"; + if (configuredSkedMode == null + || (!"SSB".equalsIgnoreCase(configuredSkedMode) + && !"CW".equalsIgnoreCase(configuredSkedMode))) { + + configuredSkedMode = "SSB"; } - String configuredSkedModeUpper = - configuredSkedMode.trim().toUpperCase(Locale.ROOT); + cbSkedMode.setValue( + configuredSkedMode.trim().toUpperCase(Locale.ROOT) + ); - if (!"AUTO".equals(configuredSkedModeUpper) - && !"SSB".equals(configuredSkedModeUpper) - && !"CW".equals(configuredSkedModeUpper)) { - configuredSkedModeUpper = "AUTO"; - } + cbSkedMode.setTooltip(new Tooltip( + "Mode transferred to Win-Test with the ADDSKED packet" + )); - cbSkedMode.setValue(configuredSkedModeUpper); - cbSkedMode.setTooltip(new Tooltip("Mode for Win-Test ADDSKED packets")); cbSkedMode.setOnAction(e -> chatcontroller.getChatPreferences() - .setLogsynch_wintestSkedMode(cbSkedMode.getValue()) + .setLogsynch_wintestSkedMode( + cbSkedMode.getValue() + ) ); ChoiceBox cbReminderOffsets = new ChoiceBox<>( @@ -7869,52 +7872,6 @@ public class Kst4ContestApplication extends Application implements StatusUpdateL chatMemberTableFilterTextField.setPromptText("Find..."); chatMemberTableFilterTextField.setFocusTraversable(false); -// chatMemberTableFilterTextField.focusedProperty().addListener(new ChangeListener() { -// @Override -// public void changed(ObservableValue observableValue, Boolean aBoolean, Boolean t1) { -// if (chatMemberTableFilterTextField.focusedProperty().getValue()) { -// -// chatMemberTableFilterTextField.clear(); -// } else { -// if (!chatMemberTableFilterTextField.focusedProperty().getValue() && chatMemberTableFilterTextField.textProperty().equals("")) { -// -// chatMemberTableFilterTextField.setText("Find..."); -// } -// } -//// System.out.println(chatMemberTableFilterTextField.focusedProperty().getValue()); -// } -// }); -// chatMemberTableFilterTextField.textProperty().addListener(new ChangeListener() { -// -// Predicate searchTextPredicate = new Predicate() { -// @Override -// public boolean test(ChatMember chatMember) { -// if (chatMember.getCallSign().toUpperCase().contains(chatMemberTableFilterTextField.getText().toUpperCase()) || -// chatMember.getCallSign().toUpperCase().contains(chatMemberTableFilterTextField.getText().toLowerCase())) { -// return true; -// } else -// -// return false; -// } -// -// }; -// -// @Override -// public void changed(ObservableValue observableValue, String s, String t1) { -// -// if (chatMemberTableFilterTextField.textProperty().getValue().equals("") && !chatMemberTableFilterTextField.focusedProperty().getValue()) { -// chatMemberTableFilterTextField.setText("Find..."); -// chatcontroller.getLst_chatMemberListFilterPredicates().remove(searchTextPredicate); -// } -// else { -// if (!chatcontroller.getLst_chatMemberListFilterPredicates().contains(searchTextPredicate)) { -// chatcontroller.getLst_chatMemberListFilterPredicates().add(searchTextPredicate); -// } -// } -// -// System.out.println("KST4CApp " + chatMemberTableFilterTextField.textProperty().getValue().equals("") + " / " + !chatMemberTableFilterTextField.focusedProperty().getValue()); -// } -// }); chatMemberTableFilterTextField.textProperty().addListener(new ChangeListener() { diff --git a/src/main/java/kst4contest/view/TimelineView.java b/src/main/java/kst4contest/view/TimelineView.java index 838ae35..c4379e5 100644 --- a/src/main/java/kst4contest/view/TimelineView.java +++ b/src/main/java/kst4contest/view/TimelineView.java @@ -208,7 +208,12 @@ public class TimelineView extends Pane { diamond.setFill(colorForPotential(sked.getOpportunityPotentialPercent())); - String baseToolTipFallBack = sked.getTargetCallsign() + " (" + sked.getBand() + ")\nAz: " + sked.getTargetAzimuth(); + String baseToolTipFallBack = + sked.getTargetChatCallsign() + + " (" + + sked.getBand() + + ")\nAz: " + + sked.getTargetAzimuth(); if (skedTooltipExtraTextProvider != null) { String extra = skedTooltipExtraTextProvider.apply(sked); @@ -220,7 +225,9 @@ public class TimelineView extends Pane { Tooltip t = new Tooltip(baseToolTipFallBack); Tooltip.install(diamond, t); - Label lbl = new Label("SKED: " + sked.getTargetCallsign()); + Label lbl = new Label( + "SKED: " + sked.getTargetChatCallsign() + ); // lbl.setFont(new Font(9)); // lbl.setTextFill(Color.WHITE); lbl.setLayoutY(14);