quisk-kc4upr/sdriqpkg/quisk_hardware.py

89 lines
3.0 KiB
Python
Executable File

# Please do not change this hardware control module.
# It provides support for the SDR-IQ by RfSpace.
from __future__ import print_function
from __future__ import absolute_import
from __future__ import division
import _quisk as QS
try:
import sdriq
except ImportError:
from sdriqpkg import sdriq
from quisk_hardware_model import Hardware as BaseHardware
class Hardware(BaseHardware):
decimations = [1250, 600, 500, 360]
def __init__(self, app, conf):
BaseHardware.__init__(self, app, conf)
self.clock = conf.sdriq_clock
self.rf_gain_labels = ('RF +30', 'RF +20', 'RF +10', 'RF 0 dB')
if conf.fft_size_multiplier == 0:
conf.fft_size_multiplier = 3 # Set size needed by VarDecim
def open(self):
return sdriq.open_samples() # Return a config message
def close(self):
sdriq.close_samples()
def OnButtonRfGain(self, event):
"""Set the SDR-IQ preamp gain and attenuator state.
sdriq.gain_sdriq(gstate, gain)
gstate == 0: Gain must be 0, -10, -20, or -30
gstate == 1: Attenuator is on and gain is 0 to 127 (7 bits)
gstate == 2: Attenuator is off and gain is 0 to 127 (7 bits)
gain for 34, 24, 14, 4 db is 127, 39, 12, 4.
"""
btn = event.GetEventObject()
n = btn.index
if n == 0:
sdriq.gain_sdriq(2, 127)
elif n == 1:
sdriq.gain_sdriq(2, 39)
elif n == 2:
sdriq.gain_sdriq(2, 12)
elif n == 3:
sdriq.gain_sdriq(1, 12)
else:
print ('Unknown RfGain')
def ChangeFrequency(self, tune, vfo, source='', band='', event=None):
if vfo:
sdriq.freq_sdriq(vfo - self.transverter_offset)
return tune, vfo
def ChangeBand(self, band):
# band is a string: "60", "40", "WWV", etc.
BaseHardware.ChangeBand(self, band)
btn = self.application.BtnRfGain
if btn:
if band in ('160', '80', '60', '40'):
btn.SetLabel('RF +10', True)
elif band in ('20',):
btn.SetLabel('RF +20', True)
else:
btn.SetLabel('RF +20', True)
def VarDecimGetChoices(self): # return text labels for the control
l = [] # a list of sample rates
for dec in self.decimations:
l.append(str(int(float(self.clock) / dec / 1e3 + 0.5)))
return l
def VarDecimGetLabel(self): # return a text label for the control
return "Sample rate ksps"
def VarDecimGetIndex(self): # return the current index
return self.index
def VarDecimSet(self, index=None): # set decimation, return sample rate
if index is None: # initial call to set decimation before the call to open()
rate = self.application.vardecim_set # May be None or from different hardware
try:
dec = int(float(self.clock / rate + 0.5))
self.index = self.decimations.index(dec)
except:
try:
self.index = self.decimations.index(self.conf.sdriq_decimation)
except:
self.index = 0
else:
self.index = index
dec = self.decimations[self.index]
sdriq.set_decimation(dec)
return int(float(self.clock) / dec + 0.5)