from __future__ import print_function from __future__ import absolute_import from __future__ import division import threading, time, math, socket, re from quisk_hardware_model import Hardware as BaseHardware DEBUG = 1 import _quisk as QS class Hardware(BaseHardware): def __init__(self, app, conf): BaseHardware.__init__(self, app, conf) self.vfo = None self.ptt_button = 0 self.usbsr_ip_address = conf.usbsr_ip_address self.usbsr_port = conf.usbsr_port def open(self): # Called once to open the Hardware freq = self.GetFreq() if freq: print ('Run freq', freq) text = "found usbsoftrock daemon" else: print ('cannot find usbsoftrock daemon') text = "cannot find usbsoftrock daemon" return text def close(self): pass def ChangeFrequency(self, tune, vfo, source='', band='', event=None): if self.vfo != vfo: self.SetFreq(vfo) self.vfo = vfo return tune, vfo def ReturnFrequency(self): # Return the current tuning and VFO frequency. If neither have changed, # you can return (None, None). This is called at about 10 Hz by the main. # return (tune, vfo) # return changed frequencies return None, None # frequencies have not changed def ChangeBand(self, band): # band is a string: "60", "40", "WWV", etc. pass def HeartBeat(self): # Called at about 10 Hz by the main pass def GetFreq(self): # return the running frequency MESSAGE = "get freq" srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) srsock.settimeout(1) srsock.sendto(MESSAGE.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port)) try: data, addr = srsock.recvfrom(1024) # buffer size is 1024 bytes data = data.decode('utf-8', errors='replace') except: srsock.close() print ('error') return None #maybe return None instead to simplify if statement else: srsock.close() print ('received data', data) freq = float(re.findall("\d+.\d+", data)[0]) freq = int(freq * 1.0e6) return freq def SetFreq(self, freq): if freq <= 0 or freq > 30000000: return freq = freq/float(1.0e6) MESSAGE = "set freq " + str(freq) srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) srsock.sendto(MESSAGE.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port)) print (MESSAGE) return True def OnButtonPTT(self, event=None): if event: if event.GetEventObject().GetValue(): self.ptt_button = 1 message = "set ptt on" else: self.ptt_button = 0 message = "set ptt off" srsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) srsock.settimeout(1) srsock.sendto(message.encode('utf-8', errors='ignore'), (self.usbsr_ip_address, self.usbsr_port)) data, addr = srsock.recvfrom(1024) # buffer size is 1024 bytes data = data.decode('utf-8', errors='replace') srsock.close() print (data) if data == "ok": QS.set_key_down(self.ptt_button) else: print ('error doing', message) text = "error setting ptt on or off!" self.config_text = text def OnSpot(self, level): self.spot_level = level