Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/mbridak/not1mm
Browse files Browse the repository at this point in the history
  • Loading branch information
mbridak committed Oct 19, 2024
2 parents f954aa6 + 708cc7c commit bb51db0
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 63 deletions.
68 changes: 47 additions & 21 deletions not1mm/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1710,6 +1710,15 @@ def closeEvent(self, _event) -> None:
self.settings.setValue("windowState", self.saveState())
self.settings.sync()

try: # Shutdown the radio thread.
if self.radio_thread.isRunning():
self.rig_control.time_to_quit = True
self.radio_thread.quit()
self.radio_thread.wait(1000)

except (RuntimeError, AttributeError):
...

cmd = {}
cmd["cmd"] = "HALT"
cmd["station"] = platform.node()
Expand Down Expand Up @@ -2661,7 +2670,7 @@ def readpreferences(self) -> None:
self.rig_control.poll_callback.connect(self.poll_radio)
self.radio_thread.start()

if self.pref.get("userigctld", False):
elif self.pref.get("userigctld", False):
logger.debug(
"Using rigctld: %s",
f"{self.pref.get('CAT_ip')} {self.pref.get('CAT_port')}",
Expand All @@ -2676,6 +2685,17 @@ def readpreferences(self) -> None:
self.radio_thread.finished.connect(self.rig_control.deleteLater)
self.rig_control.poll_callback.connect(self.poll_radio)
self.radio_thread.start()
else:
self.rig_control = Radio(
"fake",
self.pref.get("CAT_ip", "127.0.0.1"),
int(self.pref.get("CAT_port", 0000)),
)
self.rig_control.moveToThread(self.radio_thread)
self.radio_thread.started.connect(self.rig_control.run)
self.radio_thread.finished.connect(self.rig_control.deleteLater)
self.rig_control.poll_callback.connect(self.poll_radio)
self.radio_thread.start()

self.cw = None
if (
Expand Down Expand Up @@ -3077,17 +3097,18 @@ def callsign_changed(self) -> None:
self.show_help_dialog()
self.clearinputs()
return
if stripped_text == "TEST":
result = self.database.get_calls_and_bands()
cmd = {}
cmd["cmd"] = "WORKED"
cmd["station"] = platform.node()
cmd["worked"] = result
self.multicast_interface.send_as_json(cmd)
self.clearinputs()
return
# if stripped_text == "TEST":
# result = self.database.get_calls_and_bands()
# cmd = {}
# cmd["cmd"] = "WORKED"
# cmd["station"] = platform.node()
# cmd["worked"] = result
# self.multicast_interface.send_as_json(cmd)
# self.clearinputs()
# return
if self.is_floatable(stripped_text):
self.change_freq(stripped_text)
self.clearinputs()
return

cmd = {}
Expand Down Expand Up @@ -3125,16 +3146,19 @@ def change_freq(self, stripped_text: str) -> None:

vfo = float(stripped_text)
vfo = int(vfo * 1000)

if self.rig_control:
self.rig_control.set_vfo(vfo)
return

band = getband(str(vfo))
self.set_band_indicator(band)
self.radio_state["vfoa"] = vfo
self.radio_state["band"] = band
self.contact["Band"] = get_logged_band(str(vfo))
self.set_window_title()
self.clearinputs()
if self.rig_control:
self.rig_control.set_vfo(vfo)
return

cmd = {}
cmd["cmd"] = "RADIO_STATE"
cmd["station"] = platform.node()
Expand Down Expand Up @@ -3168,10 +3192,11 @@ def change_mode(self, mode: str) -> None:
if self.rig_control.interface == "flrig":
self.cwspeed_spinbox_changed()
self.rig_control.cat.set_flrig_cw_send(True)
self.setmode("CW")
self.radio_state["mode"] = "CW"
band = getband(str(self.radio_state.get("vfoa", "0.0")))
self.set_band_indicator(band)
else:
self.setmode("CW")
self.radio_state["mode"] = "CW"
band = getband(str(self.radio_state.get("vfoa", "0.0")))
self.set_band_indicator(band)
self.set_window_title()
self.clearinputs()
self.read_cw_macros()
Expand All @@ -3193,11 +3218,12 @@ def change_mode(self, mode: str) -> None:
self.radio_state["mode"] = "USB"
else:
self.radio_state["mode"] = "LSB"
if self.rig_control:
if self.rig_control and self.rig_control.online:
self.rig_control.set_mode(self.radio_state.get("mode"))
self.setmode("SSB")
band = getband(str(self.radio_state.get("vfoa", "0.0")))
self.set_band_indicator(band)
else:
self.setmode("SSB")
band = getband(str(self.radio_state.get("vfoa", "0.0")))
self.set_band_indicator(band)
self.set_window_title()
self.clearinputs()
self.read_cw_macros()
Expand Down
70 changes: 50 additions & 20 deletions not1mm/lib/cat_interface.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,15 @@ def __init__(self, interface: str, host: str, port: int) -> None:
self.host = host
self.port = port
self.online = False
self.fake_radio = {
"vfo": "14032000",
"mode": "CW",
"bw": "500",
"power": "100",
"modes": ["CW", "USB", "LSB", "RTTY"],
"ptt": False,
}

if self.interface == "flrig":
target = f"http://{host}:{port}"
logger.debug("%s", target)
Expand All @@ -84,8 +93,11 @@ def __init__(self, interface: str, host: str, port: int) -> None:
http.client.BadStatusLine,
):
self.online = False
if self.interface == "rigctld":
elif self.interface == "rigctld":
self.__initialize_rigctrld()
elif self.interface == "fake":
self.online = True
return

def __initialize_rigctrld(self):
try:
Expand Down Expand Up @@ -121,8 +133,7 @@ def sendcw(self, texttosend):
logger.debug(f"{texttosend=} {self.interface=}")
if self.interface == "flrig":
self.sendcwxmlrpc(texttosend)
return
if self.interface == "rigctld":
elif self.interface == "rigctld":
self.sendcwrigctl(texttosend)

def sendcwrigctl(self, texttosend):
Expand Down Expand Up @@ -200,10 +211,12 @@ def get_vfo(self) -> str:
vfo = ""
if self.interface == "flrig":
vfo = self.__getvfo_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
vfo = self.__getvfo_rigctld()
if "RPRT -" in vfo:
vfo = ""
else:
vfo = self.fake_radio.get("vfo", "")
return vfo

def __getvfo_flrig(self) -> str:
Expand Down Expand Up @@ -243,8 +256,10 @@ def get_mode(self) -> str:
mode = ""
if self.interface == "flrig":
mode = self.__getmode_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
mode = self.__getmode_rigctld()
else:
mode = self.fake_radio.get("mode")
return mode

def __getmode_flrig(self) -> str:
Expand Down Expand Up @@ -291,9 +306,10 @@ def get_bw(self):
"""Get current vfo bandwidth"""
if self.interface == "flrig":
return self.__getbw_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__getbw_rigctld()
return False
else:
return self.fake_radio.get("bw")

def __getbw_flrig(self):
"""return bandwidth"""
Expand Down Expand Up @@ -336,9 +352,10 @@ def get_power(self):
"""Get power level from rig"""
if self.interface == "flrig":
return self.__getpower_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__getpower_rigctld()
return False
else:
return self.fake_radio.get("power", "100")

def __getpower_flrig(self):
try:
Expand Down Expand Up @@ -371,7 +388,7 @@ def get_ptt(self):
"""Get PTT state"""
if self.interface == "flrig":
return self.__getptt_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__getptt_rigctld()
return False

Expand Down Expand Up @@ -411,8 +428,10 @@ def get_mode_list(self):
"Get a list of modes supported by the radio"
if self.interface == "flrig":
return self.__get_mode_list_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__get_mode_list_rigctld()
else:
return self.fake_radio.get("modes")
return False

def __get_mode_list_flrig(self):
Expand Down Expand Up @@ -455,8 +474,11 @@ def set_vfo(self, freq: str) -> bool:
try:
if self.interface == "flrig":
return self.__setvfo_flrig(freq)
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__setvfo_rigctld(freq)
else:
self.fake_radio["vfo"] = str(freq)
return True
except ValueError:
...
return False
Expand Down Expand Up @@ -497,9 +519,11 @@ def set_mode(self, mode: str) -> bool:
"""Sets the radios mode"""
if self.interface == "flrig":
return self.__setmode_flrig(mode)
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__setmode_rigctld(mode)
return False
else:
self.fake_radio["mode"] = mode
return True

def __setmode_flrig(self, mode: str) -> bool:
"""Sets the radios mode"""
Expand Down Expand Up @@ -539,9 +563,11 @@ def set_power(self, power):
"""Sets the radios power"""
if self.interface == "flrig":
return self.__setpower_flrig(power)
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__setpower_rigctld(power)
return False
else:
self.fake_radio["power"] = str(power)
return True

def __setpower_flrig(self, power):
try:
Expand Down Expand Up @@ -573,9 +599,11 @@ def ptt_on(self):
"""turn ptt on/off"""
if self.interface == "flrig":
return self.__ptt_on_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__ptt_on_rigctld()
return False
else:
self.fake_radio["ptt"] = True
return True

def __ptt_on_rigctld(self):
"""Toggle PTT state on"""
Expand Down Expand Up @@ -618,9 +646,11 @@ def ptt_off(self):
"""turn ptt on/off"""
if self.interface == "flrig":
return self.__ptt_off_flrig()
if self.interface == "rigctld":
elif self.interface == "rigctld":
return self.__ptt_off_rigctld()
return False
else:
self.fake_radio["ptt"] = False
return True

def __ptt_off_rigctld(self):
"""Toggle PTT state off"""
Expand Down
48 changes: 26 additions & 22 deletions not1mm/radio.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ def __init__(self, interface: str, host: str, port: int) -> None:
def run(self):
try:
self.cat = CAT(self.interface, self.host, self.port)
self.online = self.cat.online
self.modes = self.cat.get_mode_list()
except ConnectionResetError:
...
Expand Down Expand Up @@ -116,35 +117,38 @@ def set_vfo(self, vfo):

if self.cat:
self.cat.set_vfo(vfo)
try:
self.poll_callback.emit(
{
"vfoa": self.vfoa,
"mode": self.mode,
"bw": self.bw,
"online": self.online,
}
)
except RuntimeError:
...

self.poll_time = datetime.datetime.now()
# try:
# self.poll_callback.emit(
# {
# "vfoa": str(self.vfoa),
# "mode": self.mode,
# "bw": self.bw,
# "online": self.online,
# }
# )
# except RuntimeError:
# ...

def set_mode(self, mode):
self.mode = mode

if self.cat:
self.cat.set_mode(mode)

try:
self.poll_callback.emit(
{
"vfoa": self.vfoa,
"mode": self.mode,
"bw": self.bw,
"online": self.online,
}
)
except RuntimeError:
...
self.poll_time = datetime.datetime.now()
# try:
# self.poll_callback.emit(
# {
# "vfoa": str(self.vfoa),
# "mode": self.mode,
# "bw": self.bw,
# "online": self.online,
# }
# )
# except RuntimeError:
# ...

def get_modes(self):
"""get list of modes"""
Expand Down

0 comments on commit bb51db0

Please sign in to comment.