Files
dynaPV/SATES20-CPCL-DYNA/cfg/python/pvs.py

62 lines
1.4 KiB
Python

from epics import get_pv as PV
from data import load_data, save_data, mk_db
from log import log
from utils import toggle
DTYPES = {
"float": "ai",
"int": "longin",
"bool": "bi",
"str": "stringin"
}
FN_ENTRIES = "/ioc/data/SATES20-CPCL-DYNA/entries"
FN_DB_TMPL = "/ioc/data/SATES20-CPCL-DYNA/dynamic.template"
pv_name = PV("SATES20-DYNA:NAME")
pv_dtyp = PV("SATES20-DYNA:TYPE")
pv_dtyp.get_ctrlvars() # without this, the enum returns only str(number)
@toggle
def cb_add(value=None, **kwargs):
name = pv_name.get()
if not name:
log.info(f"add: ignoring name={repr(name)}")
return
dtyp = pv_dtyp.get(as_string=True)
dtyp = DTYPES[dtyp]
log.info(f"add: name={repr(name)} type={repr(dtyp)} {kwargs}")
data = load_data(FN_ENTRIES)
data[name] = dtyp
save_data(data, FN_ENTRIES)
mk_db(data, FN_DB_TMPL)
log.info(f"data: {data}")
@toggle
def cb_remove(value=None, **kwargs):
name = pv_name.get()
if not name:
log.info(f"remove: ignoring name={repr(name)}")
return
log.info(f"remove: name={repr(name)} {kwargs}")
data = load_data(FN_ENTRIES)
data.pop(name, None)
save_data(data, FN_ENTRIES)
mk_db(data, FN_DB_TMPL)
log.info(f"data: {data}")
pv_add = PV("SATES20-DYNA:ADD")
pv_add.add_callback(cb_add)
pv_remove = PV("SATES20-DYNA:REMOVE")
pv_remove.add_callback(cb_remove)