def __init__(self, channel, prefix): """Initialize the Low Level object. callback is the callable to be called each time a low level PV changes its value. """ super().__init__() self.channel = _PVName(channel) self.prefix = prefix self._dict_functs_for_write = self._define_dict_for_write() self._dict_functs_for_update = self._define_dict_for_update() self._dict_functs_for_read = self._define_dict_for_read() self._dict_convert_prop2pv = self._define_convertion_prop2pv() self._dict_convert_pv2prop = { val: key for key, val in self._dict_convert_prop2pv.items() } self._config_ok_values = dict() self._base_freq = _RFFREQ / _RFDIV self._writepvs = dict() self._readpvs = dict() self._locked = False evg_name = _LLTimeSearch.get_evg_name() self._base_freq_pv = _PV(LL_PREFIX + evg_name + ':FPGAClk-Cte') self._update_base_freq() self._base_freq_pv.add_callback(self._update_base_freq) _log.info(self.channel + ': Creating PVs.') for prop, pvname in self._dict_convert_prop2pv.items(): pvnamerb = pvnamesp = None if not _PVName.is_write_pv(pvname): pvnamerb = pvname pvnamesp = _PVName.from_rb2sp(pvname) elif _PVName.is_cmd_pv(pvname): # -Cmd is different!! self._writepvs[prop] = _PV(pvname) if pvnamerb is not None: self._readpvs[prop] = _PV(pvnamerb) if pvnamesp != pvnamerb and not prop.endswith('DevEnbl'): self._writepvs[prop] = _PV(pvnamesp) self._writepvs[prop]._initialized = False for prop, pv in self._writepvs.items(): if not pv.wait_for_connection(): _log.info(pv.pvname + ' not connected.') for prop, pv in self._readpvs.items(): if not pv.wait_for_connection(): _log.info(pv.pvname + ' not connected.') for prop, pv in self._writepvs.items(): if _PVName.is_cmd_pv(pv.pvname): continue pv.add_callback(self._on_change_writepv) pv.connection_callbacks.append(self._on_connection_writepv) for prop, pv in self._readpvs.items(): pv.add_callback(self._on_change_readpv) pv.connection_callbacks.append(self._on_connection)
def _get_pv_name(self, prop, is_sp=False): pvname = self.prefix + prop + self._all_props_suffix[prop] if is_sp: pvname = _PVName.from_rb2sp(pvname) return pvname