From 7121dacbbd2ecb5f5db85b76d0282500929ff6e9 Mon Sep 17 00:00:00 2001 From: "James C. Ahlstrom" Date: Sun, 12 Oct 2025 12:43:21 -0400 Subject: [PATCH] Quisk version 4.2.46 --- CHANGELOG.txt | 6 +++++ __init__.py | 2 +- n2adr/hl2_hardware.py | 9 ++----- n2adr/quisk_widgets.py | 54 +++------------------------------------ n2adr/station_hardware.py | 13 +++++----- quisk.py | 22 +++++----------- setup.py | 2 +- 7 files changed, 27 insertions(+), 81 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 2733dbf..aff43d3 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,3 +1,9 @@ +Quisk Version 4.2.46 October 2025 +================================== +I fixed a bug in Hamlib rig 2 which happens with the new Pure Signal code. The Hamlib "f" command +now always returns the main receiver frequency, not one of the added receiver frequencies. This is +consistent with the Flex ZZ commands. + Quisk Version 4.2.45 October 2025 ================================== The new FreeDV including RADE mode is now a built-in mode of Quisk. Just press "FDV" to talk FreeDV. diff --git a/__init__.py b/__init__.py index 24b9b9b..39bb04f 100644 --- a/__init__.py +++ b/__init__.py @@ -1,2 +1,2 @@ -#Quisk version 4.2.45 +#Quisk version 4.2.46 from .quisk import main diff --git a/n2adr/hl2_hardware.py b/n2adr/hl2_hardware.py index 4ad0ffb..1f6e2b3 100644 --- a/n2adr/hl2_hardware.py +++ b/n2adr/hl2_hardware.py @@ -1,8 +1,5 @@ # This is the hardware control file for my shack. -# It is for the Hermes-Lite2 5 watt output which uses only the antenna tuner. -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division +# It is for the Hermes-Lite2 RF1 output and Alt Rx input. from hermes.quisk_hardware import Hardware as BaseHw from n2adr import station_hardware @@ -17,7 +14,7 @@ class Hardware(BaseHw): self.controlbox = station_hardware.ControlBox(app, conf) # Control my Station Control Box self.v2filter = station_hardware.FilterBoxV2(app, conf) # Control V2 filter box def open(self): - if False: + if False: # Start the station control GUI from n2adr.station_hardware import StationControlGUI self.GUI = StationControlGUI(self.application.main_frame, self, self.application, self.conf) self.GUI.Show() @@ -42,8 +39,6 @@ class Hardware(BaseHw): # band is a string: "60", "40", "WWV", etc. ret = BaseHw.ChangeBand(self, band) self.anttuner.ChangeBand(band) - #self.lpfilter.ChangeBand(band) - #self.hpfilter.ChangeBand(band) self.v2filter.ChangeBand(band) self.CorrectSmeter() return ret diff --git a/n2adr/quisk_widgets.py b/n2adr/quisk_widgets.py index 1ed44fa..77a6df4 100644 --- a/n2adr/quisk_widgets.py +++ b/n2adr/quisk_widgets.py @@ -1,56 +1,10 @@ -# Please do not change this widgets module for Quisk. Instead copy -# it to your own quisk_widgets.py and make changes there. -# # This module is used to add extra widgets to the QUISK screen. -from __future__ import print_function -from __future__ import absolute_import -from __future__ import division - import wx, time import _quisk as QS -class BottomWidgets: # Add extra widgets to the bottom of the screen +from hermes.quisk_widgets import BottomWidgets as BaseWidgets + +class BottomWidgets(BaseWidgets): # Add extra widgets to the bottom of the screen def __init__(self, app, hardware, conf, frame, gbs, vertBox): - #self.config = conf - #self.hardware = hardware - #self.application = app - #start_row = app.widget_row # The first available row - #start_col = app.button_start_col # The start of the button columns - #b = app.QuiskCycleCheckbutton(frame, self.OnAntTuner, ('Antenna', 'Ant 0', 'Ant 1')) - #bw, bh = b.GetMinSize() - #gbs.Add(b, (start_row, start_col), (1, 2), flag=wx.EXPAND) - #b = app.QuiskPushbutton(frame, self.OnAntTuner, 'L+') - #b.Enable(0) - #gbs.Add(b, (start_row, start_col + 2), (1, 2), flag=wx.EXPAND) - #b = app.QuiskPushbutton(frame, self.OnAntTuner, 'L-') - #b.Enable(0) - #gbs.Add(b, (start_row, start_col + 4), (1, 2), flag=wx.EXPAND) - #b = app.QuiskPushbutton(frame, self.OnAntTuner, 'C+') - #b.Enable(0) - #gbs.Add(b, (start_row, start_col + 6), (1, 2), flag=wx.EXPAND) - #b = app.QuiskPushbutton(frame, self.OnAntTuner, 'C-') - #b.Enable(0) - #gbs.Add(b, (start_row, start_col + 8), (1, 2), flag=wx.EXPAND) - #b = app.QuiskPushbutton(frame, self.OnAntTuner, 'Save') - #b.Enable(0) - #gbs.Add(b, (start_row, start_col + 10), (1, 2), flag=wx.EXPAND) - #self.swr_label = app.QuiskText(frame, 'Watts 000 SWR 10.1 Zh Ind 22 Cap 33 Freq 28100 (7777)', bh) - #gbs.Add(self.swr_label, (start_row, start_col + 2), (1, 10), flag=wx.EXPAND) - #b = app.QuiskCheckbutton(frame, None, text='') - #gbs.Add(b, (start_row, start_col + 25), (1, 2), flag=wx.EXPAND) -# Example of a horizontal slider: -# lab = wx.StaticText(frame, -1, 'Preamp', style=wx.ALIGN_CENTER) -# gbs.Add(lab, (5,0), flag=wx.EXPAND) -# sl = wx.Slider(frame, -1, 1024, 0, 2048) # parent, -1, initial, min, max -# gbs.Add(sl, (5,1), (1, 5), flag=wx.EXPAND) -# sl.Bind(wx.EVT_SCROLL, self.OnPreamp) -# def OnPreamp(self, event): -# print event.GetPosition() - self.num_rows_added = 0 - #def OnAntTuner(self, event): - # btn = event.GetEventObject() - # text = btn.GetLabel() - # self.hardware.OnAntTuner(text) - #def UpdateText(self, text): - # self.swr_label.SetLabel(text) + BaseWidgets.__init__(self, app, hardware, conf, frame, gbs, vertBox) diff --git a/n2adr/station_hardware.py b/n2adr/station_hardware.py index 662f689..79a55b5 100644 --- a/n2adr/station_hardware.py +++ b/n2adr/station_hardware.py @@ -410,7 +410,7 @@ class AntennaTuner: # Control my homebrew antenna tuner and my KI8BV dipole self.set_C = 0 self.set_HighZ = 0 self.antnum = 0 # Antenna number 0 or 1 - self.dipole2 = AntennaControl(app, conf) # Control the KI8BV dipole + self.dipole2 = None #AntennaControl(app, conf) # Control the KI8BV dipole if False and conf.use_rx_udp == 10: # Hermes UDP protocol for Hermes-Lite2 path = 'TunerLCZ_HL2.txt' else: @@ -484,10 +484,10 @@ class AntennaTuner: # Control my homebrew antenna tuner and my KI8BV dipole if tx_freq < 17000000: if DEBUG and self.antnum == 1: print ("antnum 0") self.antnum = 0 - else: + elif self.dipole2: if DEBUG and self.antnum == 0: print ("antnum 1") self.antnum = 1 - if self.antnum == 1: + if self.antnum == 1 and self.dipole2: self.dipole2.SetTxFreq(tx_freq) if not self.socket: return @@ -521,7 +521,8 @@ class AntennaTuner: # Control my homebrew antenna tuner and my KI8BV dipole self.timer = 0 else: self.timer = 0 - self.dipole2.HeartBeat() + if self.dipole2: + self.dipole2.HeartBeat() def Send(self): try: self.socket.send(self.want_data) @@ -657,9 +658,9 @@ class StationControlGUI(wx.Frame): # Display a stand-alone control window for fff, anttuner.set_L, anttuner.set_C, anttuner.set_HighZ = tup if tx_freq < 17000000: anttuner.antnum = 0 - else: + elif anttuner.dipole2: anttuner.antnum = 1 - if anttuner.antnum == 1: + if anttuner.antnum == 1 and anttuner.dipole2: anttuner.dipole2.SetTxFreq(tx_freq) anttuner.WantData() def FindIndexTup(self, tx_freq): diff --git a/quisk.py b/quisk.py index a0c6b68..d8e397d 100644 --- a/quisk.py +++ b/quisk.py @@ -995,17 +995,12 @@ class HamlibHandlerRig2: # Test with telnet localhost 4532 else: self.Send('0\n') def GetFreq(self): # The Rx frequency - rx = self.app.multi_rx_screen.receiver_list - if rx: - rx = rx[0] - self.Reply('Frequency', rx.txFreq + rx.VFO, 0) - if HAMLIB_DEBUG: - print ("GetFreq rx", rx.txFreq, rx.VFO) - else: - self.Reply('Frequency', self.app.rxFreq + self.app.VFO, 0) - if HAMLIB_DEBUG: - print ("GetFreq app", self.app.rxFreq, self.app.txFreq, self.app.VFO) + # This is always the main Rx frequency without reference to added receivers. + self.Reply('Frequency', self.app.rxFreq + self.app.VFO, 0) + if HAMLIB_DEBUG: + print ("GetFreq app", self.app.rxFreq, self.app.txFreq, self.app.VFO) def SetFreq(self): # The Rx frequency + # This is always the main Rx frequency without reference to added receivers. freq = self.GetParamNumber() try: freq = float(freq) @@ -1014,12 +1009,7 @@ class HamlibHandlerRig2: # Test with telnet localhost 4532 self.ErrParam() else: freq = int(freq + 0.5) - # For multiple receivers this controls the first added receiver frequency; else it controls split Rx/Tx frequency. - rx = self.app.multi_rx_screen.receiver_list - if rx: - rx[0].ChangeRxTxFrequency(freq) - else: - self.app.ChangeRxTxFrequency(freq, None) + self.app.ChangeRxTxFrequency(freq, None) def GetSplitFreq(self): # The Tx Frequency self.Reply('TX Frequency', self.app.txFreq + self.app.VFO, 0) def SetSplitFreq(self): # The Tx Frequency diff --git a/setup.py b/setup.py index b7bbc16..d47ee29 100644 --- a/setup.py +++ b/setup.py @@ -7,7 +7,7 @@ import os # You must define the version here. A title string including # the version will be written to __init__.py and read by quisk.py. -Version = '4.2.45' +Version = '4.2.46' fp = open("__init__.py", "w") # write title string fp.write("#Quisk version %s\n" % Version)