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()
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)