89 lines
3.0 KiB
Python
Executable File
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)
|