def _merge_vfos(vfos): fixed = 0.0 variable = [] for vfo in vfos: p = vfo.type().get_single_point() if p is not None: fixed += p else: variable.append(vfo) if len(variable) == 0: if fixed == 0.0: return None else: return _ConstantVFOCell(fixed) elif len(variable) == 1: variable_one = variable[0] if fixed == 0.0: return variable_one else: return ViewCell( base=variable_one, get_transform=lambda x: x + fixed, set_transform=lambda x: x - fixed, type=variable_one.type().shifted_by(fixed), writable=True, persists=variable_one.metadata().persists) else: raise ValueError('Multiple non-stub VFOs not yet supported.')
def setUp(self): self.lc = LooseCell(value=0, type=RangeT([(-100, 100)])) self.delta = 1 self.vc = ViewCell(base=self.lc, get_transform=lambda x: x + self.delta, set_transform=lambda x: x - self.delta, type=int)
def __init_center_cell(self): base_freq_cell = self.__rx_main.state()[_FREQ_CELL_KEY] mode_cell = self.__rx_main.state()['MD'] sidetone_cell = self.state()['CW'] iq_offset_cell = LooseCell(key='iq_offset', value=0.0, type=float) self.__iq_center_cell = ViewCell( base=base_freq_cell, get_transform=lambda x: x + iq_offset_cell.get(), set_transform=lambda x: x - iq_offset_cell.get(), key=_FREQ_CELL_KEY, type=base_freq_cell.type(), # runtime variable... writable=True, persists=base_freq_cell.metadata().persists) def changed_iq(_value=None): # TODO this is KX3-specific mode = mode_cell.get() if mode == 'CW': iq_offset = sidetone_cell.get() elif mode == 'CW-REV': iq_offset = -sidetone_cell.get() elif mode == 'AM' or mode == 'FM': iq_offset = 11000.0 else: # USB, LSB, other iq_offset = 0.0 iq_offset_cell.set(iq_offset) self.__iq_center_cell.changed_transform() # TODO bad practice mode_cell._subscribe_immediate(changed_iq) sidetone_cell._subscribe_immediate(changed_iq) changed_iq()
def setUp(self): self.lc = LooseCell(value=0, key='a', ctor=int) self.vc = ViewCell(base=self.lc, get_transform=lambda x: x + 1, set_transform=lambda x: x - 1, key='b', ctor=int)
def setUp(self): self.lc = LooseCell(value=0, type=RangeT([(-100, 100)]), writable=True) self.delta = 1 self.vc = ViewCell(base=self.lc, get_transform=lambda x: x + self.delta, set_transform=lambda x: x - self.delta, type=int, writable=True, interest_tracker=LoopbackInterestTracker())
def __init_center_cell(self): base_freq_cell = self.__rx_main.state()[_FREQ_CELL_KEY] mode_cell = self.__rx_main.state()['MD'] sidetone_cell = self.state()['CW'] submode_cell = self.state()['DT'] iq_offset_cell = LooseCell(value=0.0, type=float, writable=True) self.__iq_center_cell = ViewCell( base=base_freq_cell, get_transform=lambda x: x + iq_offset_cell.get(), set_transform=lambda x: x - iq_offset_cell.get(), type=base_freq_cell.type(), # runtime variable... writable=True, persists=base_freq_cell.metadata().persists) def changed_iq(_value=None): # TODO this is KX3-specific mode = mode_cell.get() if mode == 'CW': iq_offset = sidetone_cell.get() elif mode == 'CW-REV': iq_offset = -sidetone_cell.get() elif mode == 'AM' or mode == 'FM': iq_offset = 11000.0 elif mode == 'DATA' or mode == 'DATA-REV': submode = submode_cell.get() if submode == 0: # "DATA A", SSB with less processing iq_offset = 0.0 # ??? elif submode == 1: # "AFSK A", SSB with RTTY style filter iq_offset = 0.0 # ??? elif submode == 2: # "FSK D", RTTY iq_offset = 900.0 elif submode == 3: # "PSK D", PSK31 iq_offset = 1000.0 # I think so... else: iq_offset = 0 # fallback if mode == 'DATA-REV': iq_offset = -iq_offset else: # USB, LSB, other iq_offset = 0.0 iq_offset_cell.set(iq_offset) self.__iq_center_cell.changed_transform() # TODO bad practice mode_cell._subscribe_immediate(changed_iq) sidetone_cell._subscribe_immediate(changed_iq) submode_cell._subscribe_immediate(changed_iq) changed_iq()