#%TITLE% XNAP44.MAC
#
#%NAME%
# XNAP44.MAC - Macros for defining xnapp44 pixel as pseudocounters
#
#%OVERVIEW%
# Pixel counters are channels 0 to 15
# channel 16 = total number of counts (in pixel counters)
# channel 17 = total number of events (LIST mode)
# channel 18 = pileup events (LIST mode)
# channel 19 = lost events (LIST mode)
#
#%EXAMPLE%
# %DL%
# %DT%deepdev_add(\"mydev\", 2, 0, 0)
# %DD%Configures the first device connected IP ... and assigns
# the name \"mydev\" to it.
# %XDL%
#
#%DEPENDENCIES%
# These macros make use of the following macro sets:
# %UL%
# %LI%deepdevice.mac
# %XUL%
#%END%
#$Log: xnap44.mac,v $
#Revision 1.0 2012/04/23 11:42:42 perez
#PF macros, used on Apr 2012 xlab tests
#
#
#%UU%(<name>, <comdev>, <type>, <id>)
#%MDESC%
# Checks ...
def xnap44_add(name, comdev, type, id) '{
}'
#%IU%
def xnap44_par(mne, key, cmd, val) '{
if (cmd == "get")
print "getting parameter " key
else if (cmd == "set")
print "setting parameter ", key " to value ", val
}'
#%IU%
def xnap44__get_status(addr) '{
return(deepdev_comm(addr, "?STATE") != "IDLE")
}'
#%IU%
def motxnap44_config(chan, cmd, p1, p2, p3) '{
if (cmd == "ctrl")
return(motxnap44__ctrl_config(motxnap44_ADDR, p1, p2))
else if (cmd == "mot")
return(motxnap44__mot_config(motxnap44_ADDR, chan))
}'
#%IU%
def motxnap44__ctrl_config(addr, unit, nchan) '{
if (!deepdev_add(addr, addr, 3, "XNAP44"))
return(".error.")
if (deepdev_comm(addr, "?STATE") != "IDLE") {
print "XNAP device not idle (use FAKE?)"
return(".error.")
}
}'
#%IU%
def motxnap44__mot_config(addr, mne) '{
local parname querypar
parname = motor_mne(mne)
querypar = "?" parname
answ = deepdev_comm(addr, querypar)
if (answ == DEEPDEV_ERR) {
print "Communication problem with XNAP device", addr
return(".error.")
} else if (answ == DEEPDEV_ERRANSW) {
print parname, "is not a valid XNAP parameter"
return(".error.")
} else {
print "setting xnap pseudomotor", parname, "in", addr
}
}'
#%IU%
def motxnap44_cmd(mne, cmd, p1, p2, unit) '{
if (cmd == "position")
return(motxnap44__get_value(motxnap44_ADDR, mne))
else if (cmd == "set_position")
return(motxnap44__set_value(motxnap44_ADDR, mne, p1))
else if (cmd == "start_one")
return(motxnap44__set_value(motxnap44_ADDR, mne, p1))
else if (cmd == "get_status")
return(xnap44__get_status(motxnap44_ADDR))
else {
# print "Not implemented ", cmd
# print A
}
}'
#%IU%
def motxnap44__get_value(addr, mot) '{
local comm value
comm = "?" motor_mne(mot)
value = deepdev_comm(addr, comm)
if (value == DEEPDEV_ERR || value == DEEPDEV_ERRANSW) {
return(".error.")
} else {
value += 0
return(value)
}
}'
#%IU%
def motxnap44__set_value(addr, mot, value) '{
local comm answ
comm = sprintf("%s %d", motor_mne(mot), value)
answ = deepdev_comm(addr, comm)
if (answ == DEEPDEV_ERR || answ == DEEPDEV_ERRANSW) {
return(".error.")
}
}'
#%IU%
def cntxnap44_config(chan, cmd, p1, p2, p3) '{
global XNAP_CNT[]
global XNAP_CNTMNE[]
if (cmd == "ctrl")
return(cntxnap44__ctrl_config(cntxnap44_ADDR, p1, p2))
else if (cmd == "cnt")
return(cntxnap44__cnt_config(cntxnap44_ADDR, p3, chan))
}'
#%IU%
def cntxnap44__ctrl_config(addr, unit, nchan) '{
for (i in XNAP_CNTMNE)
delete XNAP_CNTMNE[i]
if (!deepdev_add(addr, addr, 3, "XNAP44"))
return(".error.")
if (nchan != 23) {
print "Number of xnap channels is not 23"
return(".error.")
}
if (deepdev_comm(addr, "?STATE") != "IDLE") {
print "XNAP device not idle (use FAKE?)"
return(".error.")
}
}'
#%IU%
def cntxnap44__cnt_config(addr, chan, mne) '{
# print cnt_mne(mne), "is xnap channel", chan, "in", addr
XNAP_CNTMNE[chan + 0] = mne
}'
#%IU%
def cntxnap44_cmd(mne, cmd, p1, p2, unit) '{
if (cmd == "get_status")
return(cntxnap44__get_status(cntxnap44_ADDR))
else if (cmd == "prestart_all")
return(cntxnap44__cntstart(cntxnap44_ADDR, p1, p2))
else if (cmd == "counts")
return(cntxnap44__get_counts(cntxnap44_ADDR, mne, p1, p2))
else if (cmd == "halt_all")
return(cntxnap44__cntstop(cntxnap44_ADDR))
else {
# print "Not implemented ", cmd
# print A
}
}'
#%IU%
def cntxnap44__get_status(addr) '{
if (xnap44__get_status(addr))
return(1)
else {
XNAP_CNT["cntdone"] = 1
return(0)
}
}'
#%IU%
def cntxnap44__cntstart(addr, ctime, mode) '{
# print "XNAP start", ctime, mode
if (mode != 2) {
print "XNAP cannot run in mode", mode
return(".error.")
}
deepdev_comm(addr, sprintf("COUNT %g", ctime))
XNAP_CNT["cntdone"] = 0
for (i in XNAP_CNT)
XNAP_CNT[i] = 0
}'
#%IU%
def cntxnap44__cntstop(addr) '{
# print "XNAP stop"
deepdev_comm(addr, "STOP")
}'
#%IU%
def cntxnap44__get_counts(addr, mne, nct, p2) '{
local n listmodeon
# if (nct > 0 && deepdev_comm(addr, "?STATE") == "IDLE") {
if (XNAP_CNT["cntdone"] == 1) {
XNAP_CNT["cntdone"] = 2
answ = deepdev_comm(addr, "?COUNTS")
if (answ != DEEPDEV_ERR && answ != DEEPDEV_ERRANSW) {
local xcnts[]
n = split(answ, xcnts)
# print "XNAP reading counts:", n
listmodeon = (n != 16 && n!= 32)
totcnt = 0
for (i = 0; i < n; i++) {
#print i, xcnts[i]
if (listmodeon) {
if (i < 3)
XNAP_CNT[XNAP_CNTMNE[17 + i]] = xcnts[i]
else {
pxcnt = xcnts[i]
XNAP_CNT[XNAP_CNTMNE[i - 3]] = pxcnt
totcnt += pxcnt
}
} else {
pxcnt = xcnts[i]
XNAP_CNT[XNAP_CNTMNE[i]] = pxcnt
totcnt += pxcnt
}
}
XNAP_CNT[XNAP_CNTMNE[16]] = totcnt
}
answ = deepdev_comm(addr, "?TEMP0")
if (answ != DEEPDEV_ERR && answ != DEEPDEV_ERRANSW) {
XNAP_CNT[XNAP_CNTMNE[20]] = answ + 0
}
answ = deepdev_comm(addr, "?TEMP")
if (answ != DEEPDEV_ERR && answ != DEEPDEV_ERRANSW) {
split(answ, xcnts)
XNAP_CNT[XNAP_CNTMNE[21]] = xcnts[0] + 0
XNAP_CNT[XNAP_CNTMNE[22]] = xcnts[1] + 0
}
}
return(XNAP_CNT[mne])
}'
#%UU%
def xnap44setup '{
local addr macrodef
addr = "$1"
if ($# == 0 || !deepdev_add(addr, addr, 3, "XNAP44")) {
if (SETUP) print "Error in line: $0 $*"
print "Usage: $0 xnap44_addr"
if (yesno("\nDisplay online help", 0)) eval("help local xnap44")
}
macrodef = sprintf("xnap44_Fheader %s\n", addr)
cdef("user_Fheader", macrodef, addr)
setup_tail("xnap44", addr)
}'
#%IU%
def xnap44unsetup '{
local addr key
addr = "$1"
cdef("", "", addr, "delete")
}'
#%UU%
def xnap44_Fheader '{
local answ nlines list[] i
answ = deepdev_comm("$1", "?CONFIG")
nlines = split(answ, list, "\n")
if (DATAFILE != "") {
local i
for(i = 0; i < nlines - 1; i++)
printf("#C %s\n", list[i])
}
}'
#%MACROS%
#%AUTHOR% P.Fajardo, (Original 6/10).
# $Revision: 1.0 $ / $Date: 2012/04/23 11:42:42 $
#%TOC%
|