예제 #1
0
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.')
예제 #2
0
 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)
예제 #3
0
    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()
예제 #4
0
 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)
예제 #5
0
 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())
예제 #6
0
    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()