Example #1
0
    def __init__(self, zmq_ctx, host_addr, resource):
        Channel.__init__(self, zmq_ctx, host_addr, resource)

        self._system_control_reg = Register(0)

        self._system_condition_reg = Register(30)
        self._system_condition_reg.changed.connect(self._condition_reg_changed)
        self._cond_mask_to_error = {
            0b1: ErrorCondition('ADC_RANGE', 'Analog input out of range')
        }

        self._widget_name_to_reg = {
            'centerSpinBox': Register(1, True),
            'rangeSpinBox': Register(2),
            'frequencySpinBox': Register(3),
            'inputOffsetSpinBox': Register(4, True),
            'outputOffsetSpinBox': Register(5, True),
            'pGainSpinBox': Register(6),
            'iGainSpinBox': Register(7),
            'dGainSpinBox': Register(8),
            'filterResponseSpinBox': Register(9, True),
            'thresholdSpinBox': Register(10),
            'ttlExpSpinBox': Register(11)
        }

        self._current_status = Channel.Status.idle
        self._system_control_reg.changed.connect(self._update_status)
        self._widget_name_to_reg['rangeSpinBox'].changed.connect(
            self._update_status)
        self._update_status()
Example #2
0
class Evil2Channel(Channel):
    def __init__(self, zmq_ctx, host_addr, resource):
        Channel.__init__(self, zmq_ctx, host_addr, resource)

        self._system_control_reg = Register(0)

        self._system_condition_reg = Register(30)
        self._system_condition_reg.changed.connect(self._condition_reg_changed)
        self._cond_mask_to_error = {
            0b1: ErrorCondition('ADC_RANGE', 'Analog input out of range')
        }

        self._widget_name_to_reg = {
            'centerSpinBox': Register(1, True),
            'rangeSpinBox': Register(2),
            'frequencySpinBox': Register(3),
            'inputOffsetSpinBox': Register(4, True),
            'outputOffsetSpinBox': Register(5, True),
            'pGainSpinBox': Register(6),
            'iGainSpinBox': Register(7),
            'dGainSpinBox': Register(8),
            'filterResponseSpinBox': Register(9, True),
            'thresholdSpinBox': Register(10),
            'ttlExpSpinBox': Register(11)
        }

        self._current_status = Channel.Status.idle
        self._system_control_reg.changed.connect(self._update_status)
        self._widget_name_to_reg['rangeSpinBox'].changed.connect(
            self._update_status)
        self._update_status()

    def unlock(self):
        self._widget_name_to_reg['rangeSpinBox'].set_from_local_change(0)
        self._system_control_reg.set_from_local_change(
            (self._system_control_reg.sval & ~SWEEPING_MASK) | SWEEPING_STATE)

    def current_error_conditions(self):
        return [e for m, e in self._cond_mask_to_error.items()
                if self._system_condition_reg.sval & m]

    def current_status(self):
        return self._current_status

    def registers(self):
        regs = list(self._widget_name_to_reg.values())
        regs.append(self._system_control_reg)
        regs.append(self._system_condition_reg)
        return regs

    def _condition_reg_changed(self):
        self.error_conditions_changed.emit(self.current_error_conditions())

    def _update_status(self):
        new_status = _decode_status(self._system_control_reg.sval,
                                    self._widget_name_to_reg[
                                        'rangeSpinBox'].sval)
        if self._current_status == new_status:
            return
        self._current_status = new_status
        self.status_changed.emit(new_status)