FreeDATA/tnc/rigctl.py

182 lines
5 KiB
Python
Raw Normal View History

2021-12-28 16:05:48 +00:00
#!/usr/bin/env python3
# Intially created by Franco Spinelli, IW2DHW, 01/2022
# Updated by DJ2LS
#
2021-12-28 16:05:48 +00:00
# versione mia di rig.py per gestire Ft897D tramite rigctl e senza
# fare alcun riferimento alla configurazione
#
# e' una pezza clamorosa ma serve per poter provare on-air il modem
#
import os
2021-12-28 16:05:48 +00:00
import subprocess
import sys
import time
import structlog
2021-12-28 16:05:48 +00:00
# for rig_model -> rig_number only
# set global hamlib version
hamlib_version = 0
2022-05-09 00:41:49 +00:00
2022-05-09 01:27:24 +00:00
2021-12-28 16:05:48 +00:00
class radio:
""" """
2021-12-28 16:05:48 +00:00
def __init__(self):
self.devicename = ""
self.devicenumber = ""
self.deviceport = ""
self.serialspeed = ""
self.hamlib_ptt_type = ""
self.my_rig = ""
self.pttport = ""
self.data_bits = ""
self.stop_bits = ""
self.handshake = ""
self.cmd = ""
2022-05-09 00:41:49 +00:00
def open_rig(self, devicename, deviceport, hamlib_ptt_type, serialspeed, pttport, data_bits, stop_bits, handshake, rigctld_ip, rigctld_port):
"""
Args:
2022-05-09 00:41:49 +00:00
devicename:
deviceport:
hamlib_ptt_type:
serialspeed:
pttport:
data_bits:
stop_bits:
handshake:
rigctld_ip:
rigctld_port:
Returns:
"""
2021-12-28 16:05:48 +00:00
self.devicename = devicename
self.deviceport = deviceport
2022-05-23 11:11:16 +00:00
self.serialspeed = str(serialspeed) # we need to ensure this is a str, otherwise set_conf functions are crashing
2021-12-28 16:05:48 +00:00
self.hamlib_ptt_type = hamlib_ptt_type
self.pttport = pttport
self.data_bits = data_bits
self.stop_bits = stop_bits
self.handshake = handshake
2022-05-09 00:41:49 +00:00
2022-05-23 11:11:16 +00:00
# check if we are running in a pyinstaller environment
if hasattr(sys, "_MEIPASS"):
sys.path.append(getattr(sys, "_MEIPASS"))
else:
sys.path.append(os.path.abspath("."))
2022-05-09 00:41:49 +00:00
2021-12-28 16:05:48 +00:00
# get devicenumber by looking for deviceobject in Hamlib module
try:
import Hamlib
self.devicenumber = int(getattr(Hamlib, self.devicename))
except Exception as err:
2021-12-28 16:05:48 +00:00
if int(self.devicename):
self.devicenumber = int(self.devicename)
else:
2022-05-23 11:11:16 +00:00
self.devicenumber = 6 # dummy
structlog.get_logger("structlog").warning("[RIGCTL] Radio not found. Using DUMMY!", error=err)
2022-05-09 00:41:49 +00:00
# set deviceport to dummy port, if we selected dummy model
2022-05-23 12:02:22 +00:00
if self.devicenumber in {1, 6}:
self.deviceport = "/dev/ttyUSB0"
2022-05-09 00:41:49 +00:00
2022-04-11 09:03:54 +00:00
print(self.devicenumber, self.deviceport, self.serialspeed)
# select precompiled executable for win32/win64 rigctl
# this is really a hack...somewhen we need a native hamlib integration for windows
if sys.platform in ["win32", "win64"]:
self.cmd = app_path + "lib\\hamlib\\" + sys.platform + "\\rigctl -m %d -r %s -s %d " % (int(self.devicenumber), self.deviceport, int(self.serialspeed))
2022-05-09 00:41:49 +00:00
else:
self.cmd = "rigctl -m %d -r %s -s %d " % (int(self.devicenumber), self.deviceport, int(self.serialspeed))
2021-12-28 16:05:48 +00:00
# eseguo semplicemente rigctl con il solo comando T 1 o T 0 per
2022-05-09 00:41:49 +00:00
# il set e t per il get
2021-12-28 16:05:48 +00:00
# set ptt to false if ptt is stuck for some reason
self.set_ptt(False)
return True
2022-05-09 00:41:49 +00:00
2021-12-28 16:05:48 +00:00
def get_frequency(self):
""" """
cmd = f"{self.cmd} f"
sw_proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
2021-12-28 20:37:38 +00:00
time.sleep(0.5)
freq = sw_proc.communicate()[0]
# print("get_frequency", freq, sw_proc.communicate())
try:
return int(freq)
2022-05-23 12:02:22 +00:00
except Exception:
return False
2021-12-28 16:05:48 +00:00
def get_mode(self):
""" """
# (hamlib_mode, bandwith) = self.my_rig.get_mode()
# return Hamlib.rig_strrmode(hamlib_mode)
try:
return "PKTUSB"
2022-05-23 12:02:22 +00:00
except Exception:
return False
2021-12-28 16:05:48 +00:00
def get_bandwith(self):
""" """
# (hamlib_mode, bandwith) = self.my_rig.get_mode()
bandwidth = 2700
try:
return bandwidth
2022-05-23 12:02:22 +00:00
except Exception:
return False
2021-12-28 16:05:48 +00:00
def set_mode(self, mode):
"""
Args:
2022-05-09 00:41:49 +00:00
mode:
Returns:
"""
2021-12-28 16:05:48 +00:00
# non usata
return 0
2022-05-09 00:41:49 +00:00
2021-12-28 16:05:48 +00:00
def get_ptt(self):
""" """
cmd = f"{self.cmd} t"
2022-05-09 00:41:49 +00:00
sw_proc = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, text=True)
2021-12-28 20:37:38 +00:00
time.sleep(0.5)
status = sw_proc.communicate()[0]
try:
return status
2022-05-23 12:02:22 +00:00
except Exception:
return False
2022-05-09 00:41:49 +00:00
2021-12-28 16:05:48 +00:00
def set_ptt(self, state):
"""
Args:
2022-05-09 00:41:49 +00:00
state:
Returns:
"""
cmd = f"{self.cmd} T "
print("set_ptt", state)
cmd = f"{cmd}1" if state else f"{cmd}0"
print("set_ptt", cmd)
2021-12-28 16:05:48 +00:00
2022-05-09 00:41:49 +00:00
sw_proc = subprocess.Popen(cmd, shell=True, text=True)
try:
return state
2022-05-23 12:02:22 +00:00
except Exception:
return False
2022-05-09 00:41:49 +00:00
2021-12-28 16:05:48 +00:00
def close_rig(self):
""" """
2022-05-23 11:11:16 +00:00
# self.my_rig.close()
2021-12-28 16:05:48 +00:00
return