1376 lines
54 KiB
Cython
1376 lines
54 KiB
Cython
|
|
# define threshold
|
|
cdef int PYCAFE_PRINT_HIGH = 9
|
|
cdef int PYCAFE_PRINT_MED = 5
|
|
cdef int PYCAFE_PRINT_LOW = 1
|
|
cdef int PYCAFE_PRINT_NONE = 0
|
|
|
|
cdef int PYCAFE_PRINT_LEVEL = PYCAFE_PRINT_NONE
|
|
|
|
|
|
#ctypedef shared_ptr[vector[double]] vdouble_ptr
|
|
#ctypedef shared_ptr[vector[float]] vfloat_ptr
|
|
|
|
IF PY_EXT_C:
|
|
include "PyCafeDefs_pub.pxi"
|
|
ELSE:
|
|
include "PyCafeDefs_api.pxi"
|
|
|
|
'''
|
|
|
|
#Correct memory management a la KWSmith p.190
|
|
cdef class _finalizer:
|
|
cdef void *_data
|
|
def __dealloc__(self):
|
|
if self._data is not NULL:
|
|
free(self._data)
|
|
return
|
|
|
|
cdef void set_base(cnp.ndarray arr, void * carr):
|
|
cdef _finalizer fin = _finalizer()
|
|
fin._data = <void *> carr
|
|
cnp.set_array_base(arr, fin)
|
|
return
|
|
'''
|
|
|
|
cdef class CyCa:
|
|
cpdef readonly unsigned int CY_DBE_VALUE
|
|
cpdef readonly unsigned int CY_DBE_LOG
|
|
cpdef readonly unsigned int CY_DBE_ARCHIVE
|
|
cpdef readonly unsigned int CY_DBE_ALARM
|
|
cpdef readonly unsigned int CY_DBE_PROPERTY
|
|
cpdef readonly unsigned int CY_DBR_PRIMITIVE
|
|
cpdef readonly unsigned int CY_DBR_PLAIN
|
|
cpdef readonly unsigned int CY_DBR_STS
|
|
cpdef readonly unsigned int CY_DBR_TIME
|
|
cpdef readonly unsigned int CY_DBR_GR
|
|
cpdef readonly unsigned int CY_DBR_CTRL
|
|
cpdef readonly unsigned int CY_DBR_PUT
|
|
cpdef readonly unsigned int CY_DBR_STSACK
|
|
cpdef readonly unsigned int CY_DBR_CLASS
|
|
cpdef readonly unsigned int CY_DBR_NONE
|
|
cpdef readonly unsigned int CY_DBR_STRING # returns a NULL terminated string
|
|
cpdef readonly unsigned int CY_DBR_SHORT # returns an unsigned short
|
|
cpdef readonly unsigned int CY_DBR_INT # returns an unsigned short
|
|
# returns an IEEE floating point value
|
|
cpdef readonly unsigned int CY_DBR_FLOAT
|
|
# returns an unsigned short which is the enum item
|
|
cpdef readonly unsigned int CY_DBR_ENUM
|
|
cpdef readonly unsigned int CY_DBR_CHAR # returns an unsigned char
|
|
cpdef readonly unsigned int CY_DBR_LONG # returns an unsigned long
|
|
# returns a double precision floating point number
|
|
cpdef readonly unsigned int CY_DBR_DOUBLE
|
|
# returns a string status structure (dbr_sts_string)
|
|
cpdef readonly unsigned int CY_DBR_STS_STRING
|
|
# returns a short status structure (dbr_sts_short)
|
|
cpdef readonly unsigned int CY_DBR_STS_SHORT
|
|
# returns a short status structure (dbr_sts_int)
|
|
cpdef readonly unsigned int CY_DBR_STS_INT
|
|
# returns a float status structure (dbr_sts_float)
|
|
cpdef readonly unsigned int CY_DBR_STS_FLOAT
|
|
# returns an enum status structure (dbr_sts_enum)
|
|
cpdef readonly unsigned int CY_DBR_STS_ENUM
|
|
# returns a char status structure (dbr_sts_char)
|
|
cpdef readonly unsigned int CY_DBR_STS_CHAR
|
|
# returns a long status structure (dbr_sts_long)
|
|
cpdef readonly unsigned int CY_DBR_STS_LONG
|
|
# returns a double status structure (dbr_sts_double)
|
|
cpdef readonly unsigned int CY_DBR_STS_DOUBLE
|
|
# returns a string time structure (dbr_time_string)
|
|
cpdef readonly unsigned int CY_DBR_TIME_STRING
|
|
# returns a short time structure (dbr_time_short)
|
|
cpdef readonly unsigned int CY_DBR_TIME_SHORT
|
|
# returns a short time structure (dbr_time_short)
|
|
cpdef readonly unsigned int CY_DBR_TIME_INT
|
|
# returns a float time structure (dbr_time_float)
|
|
cpdef readonly unsigned int CY_DBR_TIME_FLOAT
|
|
# returns an enum time structure (dbr_time_enum)
|
|
cpdef readonly unsigned int CY_DBR_TIME_ENUM
|
|
# returns a char time structure (dbr_time_char)
|
|
cpdef readonly unsigned int CY_DBR_TIME_CHAR
|
|
# returns a long time structure (dbr_time_long)
|
|
cpdef readonly unsigned int CY_DBR_TIME_LONG
|
|
# returns a double time structure (dbr_time_double)
|
|
cpdef readonly unsigned int CY_DBR_TIME_DOUBLE
|
|
# returns a graphic string structure (dbr_gr_string)
|
|
cpdef readonly unsigned int CY_DBR_GR_STRING
|
|
# returns a graphic short structure (dbr_gr_short)
|
|
cpdef readonly unsigned int CY_DBR_GR_SHORT
|
|
# returns a graphic short structure (dbr_gr_int)
|
|
cpdef readonly unsigned int CY_DBR_GR_INT
|
|
# returns a graphic float structure (dbr_gr_float)
|
|
cpdef readonly unsigned int CY_DBR_GR_FLOAT
|
|
# returns a graphic enum structure (dbr_gr_enum)
|
|
cpdef readonly unsigned int CY_DBR_GR_ENUM
|
|
# returns a graphic char structure (dbr_gr_char)
|
|
cpdef readonly unsigned int CY_DBR_GR_CHAR
|
|
# returns a graphic long structure (dbr_gr_long)
|
|
cpdef readonly unsigned int CY_DBR_GR_LONG
|
|
# returns a graphic double structure (dbr_gr_double)
|
|
cpdef readonly unsigned int CY_DBR_GR_DOUBLE
|
|
# returns a control string structure (dbr_ctrl_int)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_STRING
|
|
# returns a control short structure (dbr_ctrl_short)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_SHORT
|
|
# returns a control short structure (dbr_ctrl_int)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_INT
|
|
# returns a control float structure (dbr_ctrl_float)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_FLOAT
|
|
# returns a control enum structure (dbr_ctrl_enum)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_ENUM
|
|
# returns a control char structure (dbr_ctrl_char)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_CHAR
|
|
# returns a control long structure (dbr_ctrl_long)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_LONG
|
|
# returns a control double structure (dbr_ctrl_double)
|
|
cpdef readonly unsigned int CY_DBR_CTRL_DOUBLE
|
|
|
|
# cpdef readonly int CY_ECA_TIMEOUT
|
|
|
|
cpdef readonly int CY_ECA_NORMAL # 1
|
|
cpdef readonly int CY_ECA_ALLOCMEM # 48
|
|
cpdef readonly int CY_ECA_TOLARGE # 72
|
|
cpdef readonly int CY_ECA_TIMEOUT # 80
|
|
cpdef readonly int CY_ECA_BADTYPE # 114
|
|
cpdef readonly int CY_ECA_INTERNAL # 142
|
|
cpdef readonly int CY_ECA_GETFAIL # 152
|
|
cpdef readonly int CY_ECA_PUTFAIL # 160
|
|
cpdef readonly int CY_ECA_BADCOUNT # 176
|
|
cpdef readonly int CY_ECA_BADSTR # 186
|
|
cpdef readonly int CY_ECA_DISCONN # 192
|
|
cpdef readonly int CY_ECA_DBLCHNL # 200
|
|
cpdef readonly int CY_ECA_EVDISALLOW # 210
|
|
cpdef readonly int CY_ECA_BADMONID # 242
|
|
cpdef readonly int CY_ECA_BADMASK # 330
|
|
cpdef readonly int CY_ECA_IODONE # 339
|
|
cpdef readonly int CY_ECA_IOINPROGRESS # 347
|
|
cpdef readonly int CY_ECA_BADSYNCGRP # 354
|
|
cpdef readonly int CY_ECA_PUTCBINPROG # 362
|
|
cpdef readonly int CY_ECA_NORDACCESS # 368
|
|
cpdef readonly int CY_ECA_NOWTACCESS # 376
|
|
cpdef readonly int CY_ECA_ANACHRONISM # 386
|
|
cpdef readonly int CY_ECA_NOSEARCHADDR # 392
|
|
cpdef readonly int CY_ECA_NOCONVERT # 400
|
|
cpdef readonly int CY_ECA_BADCHID # 410
|
|
cpdef readonly int CY_ECA_BADFUNCPTR # 418
|
|
cpdef readonly int CY_ECA_ISATTACHED # 424
|
|
cpdef readonly int CY_ECA_UNAVAILINSERV # 432
|
|
cpdef readonly int CY_ECA_CHANDESTROY # 440
|
|
cpdef readonly int CY_ECA_BADPRIORITY # 450
|
|
cpdef readonly int CY_ECA_NOTTHREADED # 458
|
|
cpdef readonly int CY_ECA_16KARRAYCLIENT # 464
|
|
cpdef readonly int CY_ECA_CONNSEQTMO # 472
|
|
cpdef readonly int CY_ECA_UNRESPTMO # 480
|
|
|
|
cpdef readonly int ICAFE_CS_NEVER_CONN
|
|
cpdef readonly int ICAFE_CS_PREV_CONN
|
|
cpdef readonly int ICAFE_CS_CONN
|
|
cpdef readonly int ICAFE_CS_CLOSED
|
|
cpdef readonly int ICAFE_CS_DISCONN
|
|
cpdef readonly int ICAFE_CS_UNKNOWN
|
|
|
|
cpdef readonly int ICAFE_TYPENOTCONN
|
|
cpdef readonly int ICAFE_RULE_FALSE
|
|
cpdef readonly int ICAFE_BADCOUNT
|
|
cpdef readonly int ICAFE_CALLBACK_NOT_YET_INVOKED
|
|
cpdef readonly int ICAFE_WAITING_FOR_PREV_CALLBACK
|
|
cpdef readonly int ICAFE_CACHE_EMPTY
|
|
cpdef readonly int ICAFE_CHANNEL_BLOCKING_POLICY_CONFLICT
|
|
cpdef readonly int ICAFE_MONITOR_DELAYED_AS_CONN_DOWN
|
|
cpdef readonly int ICAFE_HAS_MONITOR_GET_DONE_FROM_CACHE
|
|
cpdef readonly int ICAFE_SET_AND_GET_MISMATCH
|
|
|
|
cpdef readonly int ICAFE_CA_OP_GET
|
|
cpdef readonly int ICAFE_CA_OP_PUT
|
|
cpdef readonly int ICAFE_CA_OP_CREATE_CHANNEL
|
|
cpdef readonly int ICAFE_CA_OP_ADD_EVENT
|
|
cpdef readonly int ICAFE_CA_OP_CLEAR_EVENT
|
|
cpdef readonly int ICAFE_CA_OP_OTHER
|
|
cpdef readonly int ICAFE_CA_OP_CONN_DOWN
|
|
cpdef readonly int ICAFE_CA_OP_CONN_UP
|
|
|
|
cpdef readonly int ICAFE_DAQ_RUN
|
|
cpdef readonly int ICAFE_DAQ_PAUSED
|
|
cpdef readonly int ICAFE_DAQ_STOPPED
|
|
|
|
cpdef readonly int ECAFE_LOAD_COLLECTION
|
|
cpdef readonly int ECAFE_LOAD_GROUP
|
|
|
|
cpdef readonly int ICAFE_NORMAL
|
|
cpdef readonly int ICAFE_SUCCESS
|
|
|
|
cpdef readonly int ECAFE_NODATA
|
|
cpdef readonly int ECAFE_INVALID_TYPE
|
|
cpdef readonly int ECAFE_BADCOUNT
|
|
cpdef readonly int ECAFE_BADSTR
|
|
cpdef readonly int ECAFE_BADTYPE
|
|
cpdef readonly int ECAFE_NO_CONVERT
|
|
cpdef readonly int ECAFE_NULLCONTEXT
|
|
cpdef readonly int ECAFE_NULLCHID
|
|
cpdef readonly int ECAFE_NULLEVID
|
|
cpdef readonly int ECAFE_UNKNOWN_COLLECTION
|
|
cpdef readonly int ECAFE_EMPTY_COLLECTION
|
|
cpdef readonly int ECAFE_COLLECTION_PREV_DEF
|
|
cpdef readonly int ECAFE_COLLECTION_INVALID_MEMBER
|
|
cpdef readonly int ECAFE_RULE_FALSE
|
|
cpdef readonly int ECAFE_UNKNOWN_GROUP
|
|
cpdef readonly int ECAFE_EMPTY_GROUP
|
|
cpdef readonly int ECAFE_GROUP_PREV_DEF
|
|
cpdef readonly int ECAFE_INVALID_HANDLE
|
|
cpdef readonly int ECAFE_INVALID_GROUP_HANDLE
|
|
cpdef readonly int ECAFE_NORDACCESS
|
|
cpdef readonly int ECAFE_NOWTACCESS
|
|
cpdef readonly int ECAFE_TIMEOUT
|
|
cpdef readonly int ECAFE_CANNOT_OPEN_FILE
|
|
cpdef readonly int ECAFE_INVALID_SWITCH_CASE
|
|
cpdef readonly int ECAFE_PVALIAS_PREV_DEF
|
|
cpdef readonly int ECAFE_PVALIAS_INVALID
|
|
cpdef readonly int ECAFE_PVNAME_PREV_DEF_AS_PVALIAS
|
|
cpdef readonly int ECAFE_DEVICE_ATTRIB_NOT_FOUND
|
|
cpdef readonly int ECAFE_HASH_UNIQUEID_EXISTS
|
|
cpdef readonly int ECAFE_WRONG_CA_CONTEXT
|
|
cpdef readonly int ECAFE_INVALID_CAFENUM_POLICY_TYPE
|
|
cpdef readonly int ECAFE_MAX_MONITORS_PER_CHAN_EXCEEDED
|
|
cpdef readonly int ECAFE_INVALID_ENUM_INDEX
|
|
cpdef readonly int ECAFE_PVGROUP_GROUPHANDLE_MISMATCH
|
|
cpdef readonly int ECAFE_TIMEOUT_SET_AND_MATCH
|
|
cpdef readonly int ECAFE_HANDLE_MISMATCH_SET_AND_MATCH
|
|
cpdef readonly int ECAFE_INCONSISTENT_CONTAINER_CORRECTED
|
|
|
|
cpdef readonly int ECAFE_BPM_DATA_IS_INVALID
|
|
|
|
cpdef readonly int ECAFE_BITSHUFF_DECOMPRESS
|
|
cpdef readonly int ECAFE_BITSHUFF_ALLOCMEM
|
|
cpdef readonly int ECAFE_BITSHUFF_REALLOCMEM
|
|
cpdef readonly int ECAFE_BITSHUFF_BADCOUNT
|
|
|
|
cpdef readonly int ECAFE_BSREAD_MULTIPART_MESS_NODATA
|
|
cpdef readonly int ECAFE_BSREAD_PARSEFAIL_MAINHEADER
|
|
cpdef readonly int ECAFE_BSREAD_PARSEFAIL_DATAHEADER
|
|
cpdef readonly int ECAFE_BSREAD_ZMQSTREAM_NULL
|
|
|
|
cpdef readonly int ERRNO_EINTR
|
|
cpdef readonly int ERRNO_EAGAIN
|
|
cpdef readonly int ERRNO_EFAULT
|
|
cpdef readonly int ERRNO_EINVAL
|
|
cpdef readonly int ERRNO_ENOTSOCK
|
|
cpdef readonly int ERRNO_EPROTONOSUPPORT
|
|
|
|
cpdef readonly int SEV_NO_ALARM
|
|
cpdef readonly int SEV_MINOR
|
|
cpdef readonly int SEV_MAJOR
|
|
cpdef readonly int SEV_INVALID
|
|
|
|
cpdef readonly int STAT_NO_ALARM
|
|
cpdef readonly int STAT_READ
|
|
cpdef readonly int STAT_WRITE
|
|
cpdef readonly int STAT_HIHI
|
|
cpdef readonly int STAT_HIGH
|
|
cpdef readonly int STAT_LOLO
|
|
cpdef readonly int STAT_LOW
|
|
cpdef readonly int STAT_STATE
|
|
cpdef readonly int STAT_COS
|
|
cpdef readonly int STAT_COMM
|
|
cpdef readonly int STAT_TIMEOUT
|
|
cpdef readonly int STAT_HWLIMIT
|
|
cpdef readonly int STAT_CALC
|
|
cpdef readonly int STAT_SCAN
|
|
cpdef readonly int STAT_LINK
|
|
cpdef readonly int STAT_SOFT
|
|
cpdef readonly int STAT_BAD_SUB
|
|
cpdef readonly int STAT_UDF
|
|
cpdef readonly int STAT_DISABLE
|
|
cpdef readonly int STAT_SIMM
|
|
cpdef readonly int STAT_READ_ACCESS
|
|
cpdef readonly int STAT_WRITE_ACCESS
|
|
|
|
# ctypedef enum ChannelRequestPolicyKind:
|
|
cpdef readonly unsigned int WITHOUT_CALLBACK
|
|
cpdef readonly unsigned int WITH_CALLBACK_DEFAULT
|
|
cpdef readonly unsigned int WITH_CALLBACK_USER_SUPPLIED
|
|
|
|
# ChannelFlushSendBufferPolicyKind:
|
|
cpdef readonly unsigned int WITH_FLUSH_IO
|
|
cpdef readonly unsigned int WITH_PEND_IO
|
|
cpdef readonly unsigned int WITH_PEND_EVENT
|
|
cpdef readonly unsigned int WITH_POLL
|
|
|
|
# ChannelWhenToFlushSendBufferPolicyKind:
|
|
cpdef readonly unsigned int FLUSH_AUTOMATIC
|
|
cpdef readonly unsigned int FLUSH_NOW
|
|
cpdef readonly unsigned int FLUSH_AFTER_EACH_CHANNEL_CREATION
|
|
cpdef readonly unsigned int FLUSH_AFTER_EACH_CHANNEL_SUBSCRIPTION
|
|
cpdef readonly unsigned int FLUSH_AFTER_EACH_MESSAGE
|
|
cpdef readonly unsigned int FLUSH_AFTER_EACH_GROUP_CREATION
|
|
cpdef readonly unsigned int FLUSH_DESIGNATED_TO_CLIENT
|
|
|
|
# ChannelGetCacheWaitPolicyKind:
|
|
cpdef readonly unsigned int GET_CACHE_NO_CHECK
|
|
cpdef readonly unsigned int GET_CACHE_NO_WAIT
|
|
cpdef readonly unsigned int GET_CACHE_NOW
|
|
cpdef readonly unsigned int GET_CACHE_WAIT
|
|
|
|
# ChannelGetActionWhenMonitorPolicyKind:
|
|
cpdef readonly unsigned int GET_FROM_CACHE
|
|
cpdef readonly unsigned int GET_FROM_IOC
|
|
|
|
# ChannelRequestDataTypePolicyKind:
|
|
cpdef readonly unsigned int NATIVE_DATATYPE
|
|
# The smaller in byte size of type requested and native datatype
|
|
cpdef readonly unsigned int LOWEST_DATATYPE
|
|
|
|
# ChannelWaitForResponsePolicyKind:
|
|
cpdef readonly unsigned int BLOCKING
|
|
cpdef readonly unsigned int WAIT
|
|
cpdef readonly unsigned int NON_BLOCKING
|
|
cpdef readonly unsigned int NO_WAIT
|
|
|
|
# StatusMessageKind:
|
|
cpdef readonly unsigned int NO_MESSAGE
|
|
cpdef readonly unsigned int PRE_REQUEST
|
|
cpdef readonly unsigned int FROM_REQUEST
|
|
cpdef readonly unsigned int FROM_PEND
|
|
cpdef readonly unsigned int FROM_CALLBACK
|
|
cpdef readonly unsigned int FROM_MESSAGE
|
|
|
|
# CallbackProgressKind:
|
|
cpdef readonly unsigned int NOT_INITIATED
|
|
cpdef readonly unsigned int PENDING
|
|
cpdef readonly unsigned int COMPLETE
|
|
|
|
# deines.h:
|
|
cpdef readonly double DEFAULT_TIMEOUT_PEND_EVENT
|
|
cpdef readonly double DEFAULT_TIMEOUT_PEND_IO
|
|
|
|
cpdef readonly string INVALID_ENUM_RETURN_STRING
|
|
cpdef readonly short INVALID_ENUM_RETURN_VALUE
|
|
|
|
cpdef readonly unsigned short BSREAD_ZEROMQ_HIGH_WATER_MARK
|
|
cpdef readonly short BSREAD_ZEROMQ_TIMEOUT_MS
|
|
|
|
def __cinit__(self):
|
|
|
|
#self.CY_ECA_TIMEOUT =ECA_TIMEOUT
|
|
self.CY_ECA_NORMAL = ECA_NORMAL
|
|
self.CY_ECA_ALLOCMEM = ECA_ALLOCMEM
|
|
self.CY_ECA_TOLARGE = ECA_TOLARGE
|
|
self.CY_ECA_TIMEOUT = ECA_TIMEOUT
|
|
self.CY_ECA_BADTYPE = ECA_BADTYPE
|
|
self.CY_ECA_INTERNAL = ECA_INTERNAL
|
|
self.CY_ECA_GETFAIL = ECA_GETFAIL
|
|
self.CY_ECA_PUTFAIL = ECA_PUTFAIL
|
|
self.CY_ECA_BADCOUNT = ECA_BADCOUNT
|
|
self.CY_ECA_BADSTR = ECA_BADSTR
|
|
self.CY_ECA_DISCONN = ECA_DISCONN
|
|
self.CY_ECA_DBLCHNL = ECA_DBLCHNL
|
|
self.CY_ECA_EVDISALLOW = ECA_EVDISALLOW
|
|
self.CY_ECA_BADMONID = ECA_BADMONID
|
|
self.CY_ECA_BADMASK = ECA_BADMASK
|
|
self.CY_ECA_IODONE = ECA_IODONE
|
|
self.CY_ECA_IOINPROGRESS = ECA_IOINPROGRESS
|
|
self.CY_ECA_BADSYNCGRP = ECA_BADSYNCGRP
|
|
self.CY_ECA_PUTCBINPROG = ECA_PUTCBINPROG
|
|
self.CY_ECA_NORDACCESS = ECA_NORDACCESS
|
|
self.CY_ECA_NOWTACCESS = ECA_NOWTACCESS
|
|
self.CY_ECA_ANACHRONISM = ECA_ANACHRONISM
|
|
self.CY_ECA_NOSEARCHADDR = ECA_NOSEARCHADDR
|
|
self.CY_ECA_NOCONVERT = ECA_NOCONVERT
|
|
self.CY_ECA_BADCHID = ECA_BADCHID
|
|
self.CY_ECA_BADFUNCPTR = ECA_BADFUNCPTR
|
|
self.CY_ECA_ISATTACHED = ECA_ISATTACHED
|
|
self.CY_ECA_UNAVAILINSERV = ECA_UNAVAILINSERV
|
|
self.CY_ECA_CHANDESTROY = ECA_CHANDESTROY
|
|
self.CY_ECA_BADPRIORITY = ECA_BADPRIORITY
|
|
self.CY_ECA_NOTTHREADED = ECA_NOTTHREADED
|
|
self.CY_ECA_16KARRAYCLIENT = ECA_16KARRAYCLIENT
|
|
self.CY_ECA_CONNSEQTMO = ECA_CONNSEQTMO
|
|
self.CY_ECA_UNRESPTMO = ECA_UNRESPTMO
|
|
|
|
self.ICAFE_NORMAL = ICAFE_NORMAL
|
|
self.ICAFE_SUCCESS = ICAFE_SUCCESS
|
|
|
|
self.ICAFE_CS_NEVER_CONN = ICAFE_CS_NEVER_CONN
|
|
self.ICAFE_CS_PREV_CONN = ICAFE_CS_PREV_CONN
|
|
self.ICAFE_CS_CONN = ICAFE_CS_CONN
|
|
self.ICAFE_CS_CLOSED = ICAFE_CS_CLOSED
|
|
self.ICAFE_CS_DISCONN = ICAFE_CS_DISCONN
|
|
self.ICAFE_CS_UNKNOWN = ICAFE_CS_UNKNOWN
|
|
|
|
self.ICAFE_TYPENOTCONN = ICAFE_TYPENOTCONN
|
|
self.ICAFE_RULE_FALSE = ICAFE_RULE_FALSE
|
|
self.ICAFE_BADCOUNT = ICAFE_BADCOUNT
|
|
self.ICAFE_CALLBACK_NOT_YET_INVOKED = ICAFE_CALLBACK_NOT_YET_INVOKED
|
|
self.ICAFE_WAITING_FOR_PREV_CALLBACK = ICAFE_WAITING_FOR_PREV_CALLBACK
|
|
self.ICAFE_CACHE_EMPTY = ICAFE_CACHE_EMPTY
|
|
self.ICAFE_CHANNEL_BLOCKING_POLICY_CONFLICT = ICAFE_CHANNEL_BLOCKING_POLICY_CONFLICT
|
|
self.ICAFE_MONITOR_DELAYED_AS_CONN_DOWN = ICAFE_MONITOR_DELAYED_AS_CONN_DOWN
|
|
self.ICAFE_HAS_MONITOR_GET_DONE_FROM_CACHE = ICAFE_HAS_MONITOR_GET_DONE_FROM_CACHE
|
|
self.ICAFE_SET_AND_GET_MISMATCH = ICAFE_SET_AND_GET_MISMATCH
|
|
|
|
self.ICAFE_DAQ_RUN = ICAFE_DAQ_RUN
|
|
self.ICAFE_DAQ_PAUSED = ICAFE_DAQ_PAUSED
|
|
self.ICAFE_DAQ_STOPPED = ICAFE_DAQ_STOPPED
|
|
|
|
self.ICAFE_CA_OP_GET = ICAFE_CA_OP_GET
|
|
self.ICAFE_CA_OP_PUT = ICAFE_CA_OP_PUT
|
|
self.ICAFE_CA_OP_CREATE_CHANNEL = ICAFE_CA_OP_CREATE_CHANNEL
|
|
self.ICAFE_CA_OP_ADD_EVENT = ICAFE_CA_OP_ADD_EVENT
|
|
self.ICAFE_CA_OP_CLEAR_EVENT = ICAFE_CA_OP_CLEAR_EVENT
|
|
self.ICAFE_CA_OP_OTHER = ICAFE_CA_OP_OTHER
|
|
self.ICAFE_CA_OP_CONN_DOWN = ICAFE_CA_OP_CONN_DOWN
|
|
self.ICAFE_CA_OP_CONN_UP = ICAFE_CA_OP_CONN_UP
|
|
|
|
self.ECAFE_LOAD_COLLECTION = ECAFE_LOAD_COLLECTION
|
|
self.ECAFE_LOAD_GROUP = ECAFE_LOAD_GROUP
|
|
|
|
self.ECAFE_NODATA = ECAFE_NODATA
|
|
self.ECAFE_INVALID_TYPE = ECAFE_INVALID_TYPE
|
|
self.ECAFE_BADCOUNT = ECAFE_BADCOUNT
|
|
self.ECAFE_BADSTR = ECAFE_BADSTR
|
|
self.ECAFE_BADTYPE = ECAFE_BADTYPE
|
|
self.ECAFE_NO_CONVERT = ECAFE_NO_CONVERT
|
|
self.ECAFE_NULLCONTEXT = ECAFE_NULLCONTEXT
|
|
self.ECAFE_NULLCHID = ECAFE_NULLCHID
|
|
self.ECAFE_NULLEVID = ECAFE_NULLEVID
|
|
self.ECAFE_UNKNOWN_COLLECTION = ECAFE_UNKNOWN_COLLECTION
|
|
self.ECAFE_EMPTY_COLLECTION = ECAFE_EMPTY_COLLECTION
|
|
self.ECAFE_COLLECTION_PREV_DEF = ECAFE_COLLECTION_PREV_DEF
|
|
self.ECAFE_COLLECTION_INVALID_MEMBER = ECAFE_COLLECTION_INVALID_MEMBER
|
|
self.ECAFE_RULE_FALSE = ECAFE_RULE_FALSE
|
|
self.ECAFE_UNKNOWN_GROUP = ECAFE_UNKNOWN_GROUP
|
|
self.ECAFE_EMPTY_GROUP = ECAFE_EMPTY_GROUP
|
|
self.ECAFE_GROUP_PREV_DEF = ECAFE_GROUP_PREV_DEF
|
|
self.ECAFE_INVALID_HANDLE = ECAFE_INVALID_HANDLE
|
|
self.ECAFE_INVALID_GROUP_HANDLE = ECAFE_INVALID_GROUP_HANDLE
|
|
self.ECAFE_NORDACCESS = ECAFE_NORDACCESS
|
|
self.ECAFE_NOWTACCESS = ECAFE_NOWTACCESS
|
|
self.ECAFE_TIMEOUT = ECAFE_TIMEOUT
|
|
self.ECAFE_CANNOT_OPEN_FILE = ECAFE_CANNOT_OPEN_FILE
|
|
self.ECAFE_INVALID_SWITCH_CASE = ECAFE_INVALID_SWITCH_CASE
|
|
self.ECAFE_PVALIAS_PREV_DEF = ECAFE_PVALIAS_PREV_DEF
|
|
self.ECAFE_PVALIAS_INVALID = ECAFE_PVALIAS_INVALID
|
|
self.ECAFE_PVNAME_PREV_DEF_AS_PVALIAS = ECAFE_PVNAME_PREV_DEF_AS_PVALIAS
|
|
self.ECAFE_DEVICE_ATTRIB_NOT_FOUND = ECAFE_DEVICE_ATTRIB_NOT_FOUND
|
|
self.ECAFE_HASH_UNIQUEID_EXISTS = ECAFE_HASH_UNIQUEID_EXISTS
|
|
self.ECAFE_WRONG_CA_CONTEXT = ECAFE_WRONG_CA_CONTEXT
|
|
self.ECAFE_INVALID_CAFENUM_POLICY_TYPE = ECAFE_INVALID_CAFENUM_POLICY_TYPE
|
|
self.ECAFE_MAX_MONITORS_PER_CHAN_EXCEEDED = ECAFE_MAX_MONITORS_PER_CHAN_EXCEEDED
|
|
self.ECAFE_INVALID_ENUM_INDEX = ECAFE_INVALID_ENUM_INDEX
|
|
self.ECAFE_PVGROUP_GROUPHANDLE_MISMATCH = ECAFE_PVGROUP_GROUPHANDLE_MISMATCH
|
|
self.ECAFE_TIMEOUT_SET_AND_MATCH = ECAFE_TIMEOUT_SET_AND_MATCH
|
|
self.ECAFE_HANDLE_MISMATCH_SET_AND_MATCH = ECAFE_HANDLE_MISMATCH_SET_AND_MATCH
|
|
self.ECAFE_INCONSISTENT_CONTAINER_CORRECTED = ECAFE_INCONSISTENT_CONTAINER_CORRECTED
|
|
|
|
self.ECAFE_BPM_DATA_IS_INVALID = ECAFE_BPM_DATA_IS_INVALID
|
|
self.ECAFE_BITSHUFF_DECOMPRESS = ECAFE_BITSHUFF_DECOMPRESS
|
|
self.ECAFE_BITSHUFF_ALLOCMEM = ECAFE_BITSHUFF_ALLOCMEM
|
|
self.ECAFE_BITSHUFF_REALLOCMEM = ECAFE_BITSHUFF_REALLOCMEM
|
|
self.ECAFE_BITSHUFF_BADCOUNT = ECAFE_BITSHUFF_BADCOUNT
|
|
|
|
self.ECAFE_BSREAD_MULTIPART_MESS_NODATA = ECAFE_BSREAD_MULTIPART_MESS_NODATA
|
|
self.ECAFE_BSREAD_PARSEFAIL_MAINHEADER = ECAFE_BSREAD_PARSEFAIL_MAINHEADER
|
|
self.ECAFE_BSREAD_PARSEFAIL_DATAHEADER = ECAFE_BSREAD_PARSEFAIL_DATAHEADER
|
|
self.ECAFE_BSREAD_ZMQSTREAM_NULL = ECAFE_BSREAD_ZMQSTREAM_NULL
|
|
|
|
self.ERRNO_EINTR = ERRNO_EINTR
|
|
self.ERRNO_EAGAIN = ERRNO_EAGAIN
|
|
self.ERRNO_EFAULT = ERRNO_EFAULT
|
|
self.ERRNO_EINVAL = ERRNO_EINVAL
|
|
self.ERRNO_ENOTSOCK = ERRNO_ENOTSOCK
|
|
self.ERRNO_EPROTONOSUPPORT = ERRNO_EPROTONOSUPPORT
|
|
|
|
self.SEV_NO_ALARM = SEV_NO_ALARM
|
|
self.SEV_MINOR = SEV_MINOR
|
|
self.SEV_MAJOR = SEV_MAJOR
|
|
self.SEV_INVALID = SEV_INVALID
|
|
|
|
self.STAT_NO_ALARM = STAT_NO_ALARM
|
|
self.STAT_READ = STAT_READ
|
|
self.STAT_WRITE = STAT_WRITE
|
|
self.STAT_HIHI = STAT_HIHI
|
|
self.STAT_HIGH = STAT_HIGH
|
|
self.STAT_LOLO = STAT_LOLO
|
|
self.STAT_LOW = STAT_LOW
|
|
self.STAT_STATE = STAT_STATE
|
|
self.STAT_COS = STAT_COS
|
|
self.STAT_COMM = STAT_COMM
|
|
self.STAT_TIMEOUT = STAT_TIMEOUT
|
|
self.STAT_HWLIMIT = STAT_HWLIMIT
|
|
self.STAT_CALC = STAT_CALC
|
|
self.STAT_SCAN = STAT_SCAN
|
|
self.STAT_LINK = STAT_LINK
|
|
self.STAT_SOFT = STAT_SOFT
|
|
self.STAT_BAD_SUB = STAT_BAD_SUB
|
|
self.STAT_UDF = STAT_UDF
|
|
self.STAT_DISABLE = STAT_DISABLE
|
|
self.STAT_SIMM = STAT_SIMM
|
|
self.STAT_READ_ACCESS = STAT_READ_ACCESS
|
|
self.STAT_WRITE_ACCESS = STAT_WRITE_ACCESS
|
|
|
|
self.CY_DBE_VALUE = DBE_VALUE
|
|
self.CY_DBE_LOG = DBE_LOG
|
|
self.CY_DBE_ARCHIVE = DBE_ARCHIVE
|
|
self.CY_DBE_ALARM = DBE_ALARM
|
|
self.CY_DBE_PROPERTY = DBE_PROPERTY
|
|
self.CY_DBR_PRIMITIVE = DBR_PRIMITIVE
|
|
self.CY_DBR_PLAIN = DBR_PLAIN
|
|
self.CY_DBR_STS = DBR_STS
|
|
self.CY_DBR_TIME = DBR_TIME
|
|
self.CY_DBR_GR = DBR_GR
|
|
self.CY_DBR_CTRL = DBR_CTRL
|
|
# DBR_PUT_ACKT and DBR_PUT_ACKS Write only - used from global alarm acknowledge.
|
|
self.CY_DBR_PUT = DBR_PUT
|
|
self.CY_DBR_STSACK = DBR_STSACK # is DBR_STSACK_STRING
|
|
self.CY_DBR_CLASS = DBR_CLASS # is DBR_CLASS_NAME,
|
|
self.CY_DBR_NONE = DBR_NONE
|
|
self.CY_DBR_STRING = DBR_STRING
|
|
self.CY_DBR_SHORT = DBR_SHORT # returns an unsigned short
|
|
self.CY_DBR_INT = DBR_INT # returns an unsigned short
|
|
self.CY_DBR_FLOAT = DBR_FLOAT # returns an IEEE floating point value
|
|
self.CY_DBR_ENUM = DBR_ENUM # returns an unsigned short which is the enum item
|
|
self.CY_DBR_CHAR = DBR_CHAR # returns an unsigned char
|
|
self.CY_DBR_LONG = DBR_LONG # returns an unsigned long
|
|
self.CY_DBR_DOUBLE = DBR_DOUBLE # returns a double precision floating point number
|
|
# returns a string status structure (dbr_sts_string)
|
|
self.CY_DBR_STS_STRING = DBR_STS_STRING
|
|
# returns a short status structure (dbr_sts_short)
|
|
self.CY_DBR_STS_SHORT = DBR_STS_SHORT
|
|
# returns a short status structure (dbr_sts_int)
|
|
self.CY_DBR_STS_INT = DBR_STS_INT
|
|
# returns a float status structure (dbr_sts_float)
|
|
self.CY_DBR_STS_FLOAT = DBR_STS_FLOAT
|
|
# returns an enum status structure (dbr_sts_enum)
|
|
self.CY_DBR_STS_ENUM = DBR_STS_ENUM
|
|
# returns a char status structure (dbr_sts_char)
|
|
self.CY_DBR_STS_CHAR = DBR_STS_CHAR
|
|
# returns a long status structure (dbr_sts_long)
|
|
self.CY_DBR_STS_LONG = DBR_STS_LONG
|
|
# returns a double status structure (dbr_sts_double)
|
|
self.CY_DBR_STS_DOUBLE = DBR_STS_DOUBLE
|
|
# returns a string time structure (dbr_time_string)
|
|
self.CY_DBR_TIME_STRING = DBR_TIME_STRING
|
|
# returns a short time structure (dbr_time_short)
|
|
self.CY_DBR_TIME_SHORT = DBR_TIME_SHORT
|
|
# returns a short time structure (dbr_time_short)
|
|
self.CY_DBR_TIME_INT = DBR_TIME_INT
|
|
# returns a float time structure (dbr_time_float)
|
|
self.CY_DBR_TIME_FLOAT = DBR_TIME_FLOAT
|
|
# returns an enum time structure (dbr_time_enum)
|
|
self.CY_DBR_TIME_ENUM = DBR_TIME_ENUM
|
|
# returns a char time structure (dbr_time_char)
|
|
self.CY_DBR_TIME_CHAR = DBR_TIME_CHAR
|
|
# returns a long time structure (dbr_time_long)
|
|
self.CY_DBR_TIME_LONG = DBR_TIME_LONG
|
|
# returns a double time structure (dbr_time_double)
|
|
self.CY_DBR_TIME_DOUBLE = DBR_TIME_DOUBLE
|
|
# returns a graphic string structure (dbr_gr_string)
|
|
self.CY_DBR_GR_STRING = DBR_GR_STRING
|
|
# returns a graphic short structure (dbr_gr_short)
|
|
self.CY_DBR_GR_SHORT = DBR_GR_SHORT
|
|
# returns a graphic short structure (dbr_gr_int)
|
|
self.CY_DBR_GR_INT = DBR_GR_INT
|
|
# returns a graphic float structure (dbr_gr_float)
|
|
self.CY_DBR_GR_FLOAT = DBR_GR_FLOAT
|
|
# returns a graphic enum structure (dbr_gr_enum)
|
|
self.CY_DBR_GR_ENUM = DBR_GR_ENUM
|
|
# returns a graphic char structure (dbr_gr_char)
|
|
self.CY_DBR_GR_CHAR = DBR_GR_CHAR
|
|
# returns a graphic long structure (dbr_gr_long)
|
|
self.CY_DBR_GR_LONG = DBR_GR_LONG
|
|
# returns a graphic double structure (dbr_gr_double)
|
|
self.CY_DBR_GR_DOUBLE = DBR_GR_DOUBLE
|
|
# returns a control string structure (dbr_ctrl_int)
|
|
self.CY_DBR_CTRL_STRING = DBR_CTRL_STRING
|
|
# returns a control short structure (dbr_ctrl_short)
|
|
self.CY_DBR_CTRL_SHORT = DBR_CTRL_SHORT
|
|
# returns a control short structure (dbr_ctrl_int)
|
|
self.CY_DBR_CTRL_INT = DBR_CTRL_INT
|
|
# returns a control float structure (dbr_ctrl_float)
|
|
self.CY_DBR_CTRL_FLOAT = DBR_CTRL_FLOAT
|
|
# returns a control enum structure (dbr_ctrl_enum)
|
|
self.CY_DBR_CTRL_ENUM = DBR_CTRL_ENUM
|
|
# returns a control char structure (dbr_ctrl_char)
|
|
self.CY_DBR_CTRL_CHAR = DBR_CTRL_CHAR
|
|
# returns a control long structure (dbr_ctrl_long)
|
|
self.CY_DBR_CTRL_LONG = DBR_CTRL_LONG
|
|
# returns a control double structure (dbr_ctrl_double)
|
|
self.CY_DBR_CTRL_DOUBLE = DBR_CTRL_DOUBLE
|
|
|
|
# ctypedef enum ChannelRequestPolicyKind:
|
|
self.WITHOUT_CALLBACK = WITHOUT_CALLBACK
|
|
self.WITH_CALLBACK_DEFAULT = WITH_CALLBACK_DEFAULT
|
|
self.WITH_CALLBACK_USER_SUPPLIED = WITH_CALLBACK_USER_SUPPLIED
|
|
|
|
# ChannelFlushSendBufferPolicyKind:
|
|
self.WITH_FLUSH_IO = WITH_FLUSH_IO
|
|
self.WITH_PEND_IO = WITH_PEND_IO
|
|
self.WITH_PEND_EVENT = WITH_PEND_EVENT
|
|
self.WITH_POLL = WITH_POLL
|
|
|
|
# ChannelWhenToFlushSendBufferPolicyKind:
|
|
self.FLUSH_AUTOMATIC = FLUSH_AUTOMATIC
|
|
self.FLUSH_NOW = FLUSH_NOW
|
|
self.FLUSH_AFTER_EACH_CHANNEL_CREATION = FLUSH_AFTER_EACH_CHANNEL_CREATION
|
|
self.FLUSH_AFTER_EACH_CHANNEL_SUBSCRIPTION = FLUSH_AFTER_EACH_CHANNEL_SUBSCRIPTION
|
|
self.FLUSH_AFTER_EACH_MESSAGE = FLUSH_AFTER_EACH_MESSAGE
|
|
self.FLUSH_AFTER_EACH_GROUP_CREATION = FLUSH_AFTER_EACH_GROUP_CREATION
|
|
self.FLUSH_DESIGNATED_TO_CLIENT = FLUSH_DESIGNATED_TO_CLIENT
|
|
|
|
# ChannelGetCacheWaitPolicyKind:
|
|
self.GET_CACHE_NO_CHECK = GET_CACHE_NO_CHECK
|
|
self.GET_CACHE_NO_WAIT = GET_CACHE_NO_WAIT
|
|
self.GET_CACHE_NOW = GET_CACHE_NOW
|
|
self.GET_CACHE_WAIT = GET_CACHE_WAIT
|
|
|
|
# ChannelGetActionWhenMonitorPolicyKind:
|
|
self.GET_FROM_CACHE = GET_FROM_CACHE
|
|
self.GET_FROM_IOC = GET_FROM_IOC
|
|
|
|
# ChannelRequestDataTypePolicyKind:
|
|
self.NATIVE_DATATYPE = NATIVE_DATATYPE
|
|
# The smaller in byte size of type requested and native datatype
|
|
self.LOWEST_DATATYPE = LOWEST_DATATYPE
|
|
|
|
# ChannelWaitForResponsePolicyKind:
|
|
self.BLOCKING = BLOCKING
|
|
self.WAIT = WAIT
|
|
self.NON_BLOCKING = NON_BLOCKING
|
|
self.NO_WAIT = NO_WAIT
|
|
|
|
# StatusMessageKind:
|
|
self.NO_MESSAGE = NO_MESSAGE
|
|
self.PRE_REQUEST = PRE_REQUEST
|
|
self.FROM_REQUEST = FROM_REQUEST
|
|
self.FROM_PEND = FROM_PEND
|
|
self.FROM_CALLBACK = FROM_CALLBACK
|
|
self.FROM_MESSAGE = FROM_MESSAGE
|
|
|
|
# CallbackProgressKind:
|
|
self.NOT_INITIATED = NOT_INITIATED
|
|
self.PENDING = PENDING
|
|
self.COMPLETE = COMPLETE
|
|
|
|
# deines.h:
|
|
self.DEFAULT_TIMEOUT_PEND_EVENT = DEFAULT_TIMEOUT_PEND_EVENT
|
|
self.DEFAULT_TIMEOUT_PEND_IO = DEFAULT_TIMEOUT_PEND_IO
|
|
self.INVALID_ENUM_RETURN_STRING = INVALID_ENUM_RETURN_STRING
|
|
self.INVALID_ENUM_RETURN_VALUE = INVALID_ENUM_RETURN_VALUE
|
|
self.BSREAD_ZEROMQ_HIGH_WATER_MARK = BSREAD_ZEROMQ_HIGH_WATER_MARK
|
|
self.BSREAD_ZEROMQ_TIMEOUT_MS = BSREAD_ZEROMQ_TIMEOUT_MS
|
|
|
|
|
|
|
|
cdef class channelInfo:
|
|
cdef readonly long channelID
|
|
cdef readonly bint connectFlag
|
|
cdef readonly string hostName
|
|
cdef readonly unsigned int nelem # native
|
|
cdef readonly int dataType # native
|
|
cdef readonly string dataTypeAsString # native
|
|
cdef readonly unsigned short accessRead # 0 or 1
|
|
cdef readonly unsigned short accessWrite # 0 or 1
|
|
cdef readonly string className # dbr_class_name_t
|
|
cdef readonly int connectionState # as given by CA_OP_
|
|
cdef readonly int cafeConnectionState # as given by cafe_cs_state
|
|
cdef readonly string connectionStateAsString # as given by CA_OP_
|
|
# as given by cafe_cs_state
|
|
cdef readonly string cafeConnectionStateAsString
|
|
cdef CAFEDataTypeCode cdt
|
|
cdef CAFEStatusCode csc
|
|
cdef CAOPCodes caop
|
|
|
|
def __cinit__(self):
|
|
self.channelID = 0
|
|
self.connectFlag = False
|
|
self.hostName = (< bytes > ("")).encode('UTF-8')
|
|
self.nelem = 0
|
|
self.dataType = ICAFE_TYPENOTCONN
|
|
self.dataTypeAsString = (< bytes > ("ICAFE_TYPENOTCONN")).encode('UTF-8')
|
|
self.accessRead = 0
|
|
self.accessWrite = 0
|
|
self.className = (< bytes > ("")).encode('UTF-8')
|
|
self.connectionState = ICAFE_CA_OP_CONN_DOWN
|
|
self.cafeConnectionState = ICAFE_CS_NEVER_CONN
|
|
self.connectionStateAsString = (< bytes > ('ICAFE_CA_OP_CONN_DOWN')).encode('UTF-8')
|
|
self.cafeConnectionStateAsString = (< bytes > ('ICAFE_CS_NEVER_CONN')).encode('UTF-8')
|
|
|
|
def show(self):
|
|
print("channelID = %s" % hex(self.channelID))
|
|
print("connectFlag = %d" % self.connectFlag)
|
|
print("hostName = %s" % self.hostName)
|
|
print("nelem = %d" % self.nelem)
|
|
print("dataType = %s (%d)" %
|
|
(self.cdt.message(self.dataType), self.dataType))
|
|
print("accessRead = %d" % self.accessRead)
|
|
print("accessWrite = %d" % self.accessWrite)
|
|
print("className = %s" % self.className)
|
|
#print ("connectionState = %s (%d)" % (self.connectionStateAsString, self.connectionState))
|
|
#print ("cafeConnectionState = %s (%d)" % (self.cafeConnectionStateAsString,self.cafeConnectionState))
|
|
print("connectionState = %s (%d)" %
|
|
(self.caop.message(self.connectionState), self.connectionState))
|
|
print("cafeConnectionState = %s (%d)" % (self.csc.message(
|
|
self.cafeConnectionState), self.cafeConnectionState))
|
|
return
|
|
|
|
|
|
##################################################################################
|
|
'''
|
|
cdef class _epicsTimeStampAsDate:
|
|
cdef epicsTime * _time
|
|
cdef local_tm_nano_sec local
|
|
cdef list etsDate
|
|
def __cinit__(self, epicsTimeStamp ts):
|
|
|
|
self._time = new epicsTime(ts)
|
|
#This gives warning: dereferencing type-punned pointer will break strict-aliasing rules
|
|
self.local = <local_tm_nano_sec &> self._time
|
|
##April 2020 to avoid above warning
|
|
##cdef local_tm_nano_sec * _local = <local_tm_nano_sec *>malloc(sizeof(epicsTime))
|
|
##_local = <local_tm_nano_sec *> self._time
|
|
##self.local = _local[0] #<local_tm_nano_sec &> self._time
|
|
|
|
print ("ts===== ", ts.secPastEpoch, ts.nsec)
|
|
print ("year=== ", ( ( (&(&self.local).ansi_tm).tm_year) + 1900))
|
|
|
|
self.etsDate=[]
|
|
self.etsDate.append( (self.local.ansi_tm.tm_year + 1900))
|
|
self.etsDate.append( (self.local.ansi_tm.tm_mon + 1))
|
|
self.etsDate.append( self.local.ansi_tm.tm_mday)
|
|
self.etsDate.append( self.local.ansi_tm.tm_hour)
|
|
self.etsDate.append( self.local.ansi_tm.tm_min)
|
|
self.etsDate.append( self.local.ansi_tm.tm_sec)
|
|
self.etsDate.append( <unsigned int> ts.nsec)
|
|
self.etsDate.append( self.local.nSec)
|
|
del self._time
|
|
###free(_local)
|
|
def get(self):
|
|
return self.etsDate
|
|
'''
|
|
|
|
##################################################################################
|
|
|
|
##################################################################################
|
|
cdef class pvctrl:
|
|
cdef readonly unsigned int nelem
|
|
cdef readonly int alarmStatus
|
|
cdef readonly int alarmSeverity
|
|
cdef readonly unsigned short precision
|
|
cdef readonly str units
|
|
cdef readonly unsigned short noEnumStrings
|
|
cdef readonly list enumStrings
|
|
cdef readonly upperDisplayLimit
|
|
cdef readonly lowerDisplayLimit
|
|
cdef readonly upperAlarmLimit
|
|
cdef readonly upperWarningLimit
|
|
cdef readonly lowerWarningLimit
|
|
cdef readonly lowerAlarmLimit
|
|
cdef readonly upperControlLimit
|
|
cdef readonly lowerControlLimit
|
|
cdef readonly list value
|
|
cdef readonly int status
|
|
|
|
def __cinit__(self):
|
|
self.nelem = 1
|
|
self.alarmStatus = -1
|
|
self.alarmSeverity = -1
|
|
self.precision = 0
|
|
self.units = str("") #(< bytes > ("")).encode('UTF-8')
|
|
self.noEnumStrings = 0
|
|
self.enumStrings = []
|
|
self.upperDisplayLimit = 0
|
|
self.lowerDisplayLimit = 0
|
|
self.upperAlarmLimit = 0
|
|
self.lowerAlarmLimit = 0
|
|
self.upperControlLimit = 0
|
|
self.lowerControlLimit = 0
|
|
self.value = []
|
|
self.status = 1
|
|
|
|
|
|
def show(self):
|
|
self.showPrint(self.nelem)
|
|
return
|
|
|
|
def showMax(self, nelem):
|
|
if nelem > self.nelem:
|
|
# print ("----------------------"
|
|
# print ("Note: Max. Nelem =", self.nelem
|
|
# print ("----------------------"
|
|
nelem = self.nelem
|
|
self.showPrint(nelem)
|
|
return
|
|
|
|
cdef showPrint(self, nelem):
|
|
cdef unsigned int i
|
|
# is self.value[0] a list
|
|
if nelem == 1:
|
|
if isinstance(self.value[0], list):
|
|
print("value = ", self.value[0][0], end="")
|
|
else:
|
|
print("value =", self.value[0], end="" )
|
|
else:
|
|
print("value = ", end="")
|
|
|
|
if isinstance(self.value[0], list):
|
|
for i in range(0, nelem):
|
|
print(self.value[0][i], "[%d]" % i, end=" ")
|
|
else:
|
|
for i in range(0, nelem):
|
|
print(self.value[i], "[%d]" % i, end=" ")
|
|
|
|
print("")
|
|
print("status = %d" % self.status)
|
|
print("alarmStatus = %d" % self.alarmStatus)
|
|
print("alarmSeverity = %d" % self.alarmSeverity)
|
|
|
|
if self.noEnumStrings > 0:
|
|
print("noEnumStrings = %d" % self.noEnumStrings)
|
|
print("enumStrings =", end=" ") # end for same line
|
|
for i in range(0, self.noEnumStrings):
|
|
print(self.enumStrings[i], "[%s]" % i, end=" ")
|
|
print("")
|
|
else:
|
|
print("precision = %d" % self.precision)
|
|
print("units = %s" % self.units)
|
|
print("upperDisplayLimit = %f" % self.upperDisplayLimit)
|
|
print("lowerDisplayLimit = %f" % self.lowerDisplayLimit)
|
|
print("upperAlarmLimit = %f" % self.upperAlarmLimit)
|
|
print("lowerAlarmLimit = %f" % self.lowerAlarmLimit)
|
|
print("upperWarningLimit = %f" % self.upperWarningLimit)
|
|
print("lowerWarningLimit = %f" % self.lowerWarningLimit)
|
|
print("upperControlLimit = %f" % self.upperControlLimit)
|
|
print("lowerControlLimit = %f" % self.lowerControlLimit)
|
|
|
|
|
|
##################################################################################
|
|
|
|
cdef class CafeException(Exception):
|
|
cdef readonly str type
|
|
cdef readonly str source
|
|
cdef readonly unsigned int handle
|
|
cdef readonly str name
|
|
cdef readonly int error_code
|
|
cdef readonly str error_text
|
|
cdef readonly str error_info
|
|
|
|
#Inheriting from base clas requires __init__; __cinit__ is ignored.
|
|
def __init__(
|
|
self, _type="CafePVError", _source=None, _handle=0,
|
|
_pv_name=None, _error_code=-1, _error_text=None, _error_info=None):
|
|
self.type = _type
|
|
self.source = _source
|
|
self.handle = _handle
|
|
self.name = _pv_name
|
|
self.error_code = _error_code
|
|
self.error_text = _error_text
|
|
self.error_info = _error_info
|
|
|
|
def show(self):
|
|
print("------CafeException-----------------------------------------------------")
|
|
if self.type is not None:
|
|
print(self.type)
|
|
print("Exception raised from CyCafe method:", self.source)
|
|
|
|
if self.handle != 0:
|
|
print("name =", self.name, "( handle =",
|
|
self.handle, ") reports the following error:")
|
|
if (self.error_code != -1):
|
|
print("error_code:", self.error_code, "error_text:", self.error_text)
|
|
print("error_info:", self.error_info)
|
|
elif self.type == 'CafePVError':
|
|
print("name =", self.name, "( handle =",
|
|
self.handle, ") reports the following error:")
|
|
if self.error_code != -1:
|
|
print("error_code:", self.error_code, "error_text:", self.error_text)
|
|
print("error_info:", self.error_info)
|
|
else:
|
|
print("error_info:", self.error_info)
|
|
print("------------------------------------------------------------------------")
|
|
return
|
|
|
|
def reveal(self):
|
|
print("------CafeException-----------------------------------------------------")
|
|
if self.type is not None:
|
|
print(".type =", self.type)
|
|
print(".source =", self.source)
|
|
if self.handle != 0:
|
|
print(".handle =", self.handle)
|
|
if self.name is not None:
|
|
print(".name =", self.name)
|
|
if self.error_code != -1:
|
|
print(".error_code =", self.error_code)
|
|
if self.error_text is not None:
|
|
print(".error_text =", self.error_text)
|
|
print(".error_info =", self.error_info)
|
|
print("------------------------------------------------------------------------")
|
|
return
|
|
|
|
|
|
cdef class monitorpolicy:
|
|
cdef readonly chtype dataType
|
|
cdef readonly chtype dbrDataType
|
|
cdef readonly DBR_TYPE cafeDbrType
|
|
cdef readonly unsigned int nelem
|
|
cdef readonly unsigned int mask
|
|
# cdef readonly pCallback handler
|
|
cdef readonly unsigned int userArgs
|
|
# cdef readonly evid eventID
|
|
cdef readonly int status
|
|
cdef readonly unsigned int monid
|
|
cdef readonly bint maskHasDBE_PROPERTY
|
|
cdef readonly bint maskHasDBE_VALUE
|
|
cdef readonly bint maskHasDBE_LOG
|
|
cdef readonly bint maskHasDBE_ALARM
|
|
|
|
def __cinit__(self):
|
|
self.monid = 0
|
|
# self.dataType=None
|
|
# self.dbrDataType=None
|
|
# self.cafeDbrType=None
|
|
self.nelem = 1
|
|
# self.mask=None
|
|
# self.userArgs=None
|
|
self.status = ICAFE_NORMAL
|
|
self.maskHasDBE_PROPERTY = False
|
|
self.maskHasDBE_VALUE = False
|
|
self.maskHasDBE_LOG = False
|
|
self.maskHasDBE_ALARM = False
|
|
|
|
def show(self):
|
|
print("monid =", self.monid)
|
|
print("datatype =", self.dataType)
|
|
print("dbrDataType=", self.dbrDataType)
|
|
print("cafeDbrType=", self.cafeDbrType)
|
|
print("nelem =", self.nelem)
|
|
print("mask =", self.mask)
|
|
print("userArgs =", < long > self.userArgs)
|
|
print("status =", self.status)
|
|
print("maskHasDBE_PROPERTY=", self.maskHasDBE_PROPERTY)
|
|
print("maskHasDBE_VALUE =", self.maskHasDBE_VALUE)
|
|
print("maskHasDBE_LOG =", self.maskHasDBE_LOG)
|
|
print("maskHasDBE_ALARM =", self.maskHasDBE_ALARM)
|
|
return
|
|
|
|
|
|
##################################################################################
|
|
cdef class pvdata:
|
|
cdef readonly unsigned int nelem
|
|
cdef readonly int alarmStatus
|
|
cdef readonly int alarmSeverity
|
|
cdef readonly str alarmStatusAsString
|
|
cdef readonly str alarmSeverityAsString
|
|
cdef readonly list ts
|
|
cdef readonly list tsDate
|
|
cdef readonly str tsDateAsString
|
|
cdef readonly str bsDateAsString
|
|
cdef readonly list value
|
|
cdef public int status
|
|
cdef public str statusAsString
|
|
cdef readonly unsigned long long pulseID
|
|
cdef readonly int dataType
|
|
cdef readonly str dataTypeAsString
|
|
|
|
|
|
def __cinit__(self):
|
|
self.nelem = 1
|
|
self.alarmStatus = -1
|
|
self.alarmSeverity = -1
|
|
self.ts = []
|
|
self.tsDate = []
|
|
self.tsDateAsString = ''
|
|
self.bsDateAsString = ''
|
|
self.value = []
|
|
self.status = 1
|
|
self.statusAsString = 'ICAFE_NORMAL'
|
|
self.pulseID = 0
|
|
self.dataType = -1
|
|
self.dataTypeAsString = ""
|
|
|
|
def show(self):
|
|
self.showPrint(self.nelem)
|
|
return
|
|
|
|
def showMax(self, nelem):
|
|
if nelem > self.nelem:
|
|
# print ("----------------------"
|
|
# print ("Note: Max. Nelem =", self.nelem
|
|
# print ("----------------------"
|
|
nelem = self.nelem
|
|
|
|
self.showPrint(nelem)
|
|
return
|
|
|
|
cdef showPrint(self, nelem):
|
|
cdef unsigned int i
|
|
# is self.value[0] a list
|
|
|
|
if nelem == 1:
|
|
if isinstance(self.value[0], list):
|
|
print("value = {} ({})".format(
|
|
self.value[0][0], self.dataTypeAsString), end="")
|
|
else:
|
|
print("value = {} ({})".format(
|
|
self.value[0], self.dataTypeAsString), end="")
|
|
print("")
|
|
else:
|
|
print("value = ", end="")
|
|
|
|
if isinstance(self.value[0], list):
|
|
for i in range(0, nelem):
|
|
print(self.value[0][i], "[%d]" % i, end=" ")
|
|
else:
|
|
for i in range(0, nelem):
|
|
print(self.value[i], "[%d]" % i, end=" ")
|
|
print("({0})".format(self.dataTypeAsString))
|
|
|
|
|
|
print("status = %d (%s)" % (self.status, self.statusAsString))
|
|
if self.alarmStatus != -1:
|
|
print("alarmStatus = %d (%s)" %
|
|
(self.alarmStatus, self.alarmStatusAsString))
|
|
print("alarmSeverity = %d (%s)" %
|
|
(self.alarmSeverity, self.alarmSeverityAsString))
|
|
print("ts =", self.ts[0], self.ts[1])
|
|
print("tsDate =", self.tsDate[0], self.tsDate[1],
|
|
self.tsDate[2], self.tsDate[3],
|
|
self.tsDate[4], self.tsDate[5], self.tsDate[6])
|
|
if self.pulseID > 0:
|
|
print("pulseID =", self.pulseID)
|
|
return
|
|
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
cdef class pvgroup:
|
|
cdef public list pvdata
|
|
cdef public unsigned int npv
|
|
cdef public string name
|
|
cdef readonly int groupStatus
|
|
cdef public unsigned int groupHandle
|
|
cpdef public bint rule
|
|
cpdef public bint hasAlarm
|
|
cpdef public bint hasTS
|
|
|
|
def __cinit__(self):
|
|
self.groupStatus = ICAFE_NORMAL
|
|
self.rule = True
|
|
self.hasAlarm = True
|
|
self.hasTS = True
|
|
|
|
return
|
|
|
|
def show(self):
|
|
self.showPrint(npv=self.npv, grouplist=None)
|
|
return
|
|
|
|
def showWithPV(self, glist):
|
|
if len(glist) != self.npv:
|
|
print("ERROR: GROUP MEMBER MISMATCH!!")
|
|
print(glist, "has", len(glist),
|
|
"members while group has", self.npv, "!!")
|
|
return
|
|
self.showPrint(self.npv, grouplist=glist)
|
|
return
|
|
|
|
def showMax(self, _npv):
|
|
if _npv > self.npv:
|
|
# print ("----------------------"
|
|
# print ("Note: Max. Npv =", self.npv
|
|
# print ("----------------------"
|
|
_npv = self.npv
|
|
self.showPrint(npv=_npv, grouplist=None)
|
|
return
|
|
|
|
cdef showPrint(self, npv, grouplist):
|
|
print("GROUP NAME = ", self.name)
|
|
print("GROUP HANDLE = ", self.groupHandle)
|
|
print("GROUP STATUS = ", self.groupStatus)
|
|
print("No. Members = ", self.npv)
|
|
cdef unsigned int i, j
|
|
|
|
for i in range(0, npv):
|
|
print("Member: ", i, "---------------------------------")
|
|
if grouplist:
|
|
print("PV =", grouplist[i])
|
|
|
|
print("value = ", end="")
|
|
for j in range(0, len(self.pvdata[i].value)):
|
|
print(self.pvdata[i].value[j], "[%d]" % j, end=" ")
|
|
|
|
print("")
|
|
print("status = %d (%s)" %
|
|
(self.pvdata[i].status, self.pvdata[i].statusAsString))
|
|
print("alarmStatus = %d (%s)" % (
|
|
self.pvdata[i].alarmStatus, self.pvdata[i].alarmStatusAsString))
|
|
print("alarmSeverity = %d (%s)" % (
|
|
self.pvdata[i].alarmSeverity, self.pvdata[i].alarmSeverityAsString))
|
|
print("ts =",
|
|
self.pvdata[i].ts[0], self.pvdata[i].ts[1])
|
|
print("tsDate =", self.pvdata[i].tsDate[0], self.pvdata[i].tsDate[1],
|
|
self.pvdata[i].tsDate[2], self.pvdata[i].tsDate[3],
|
|
self.pvdata[i].tsDate[4], self.pvdata[i].tsDate[5], self.pvdata[i].tsDate[6])
|
|
print("--------------------------------------------")
|
|
return
|
|
|
|
|
|
##################################################################################
|
|
|
|
|
|
##################################################################################
|
|
cdef getMatchedDataType(dt, dtn):
|
|
# dt: input from user
|
|
# dtn: native type
|
|
# dtcheck: matching data type for pvd convert method
|
|
|
|
cdef unsigned int dtcheck = dtn
|
|
|
|
if dt in ['uchar', 'uint8']:
|
|
dtcheck = CAFE_CHAR
|
|
elif dt in ['np.uint8']:
|
|
dtcheck = CAFE_CHAR
|
|
elif dt in ['ushort', 'uint16']:
|
|
dtcheck = CAFE_USHORT
|
|
elif dt in ['np.ushort', 'np.uint16']:
|
|
dtcheck = CAFE_USHORT
|
|
elif dt in ['short', 'int16', 'int8', 'bool', 'byte']:
|
|
dtcheck = CAFE_SHORT
|
|
elif dt in ['np.short', 'np.int16', 'np.int8', 'np.bool_', 'np.byte']:
|
|
dtcheck = CAFE_SHORT
|
|
elif dt in ['int', 'int_', 'uint', 'ushort', 'int32', 'uint32']:
|
|
dtcheck = CAFE_LONG
|
|
elif dt in ['np.intc', 'np.int_', 'np.long', 'np.ushort', 'np.int32', 'np.uint32']:
|
|
dtcheck = CAFE_LONG
|
|
elif dt in ['double', 'float', 'float_', 'float64', 'int64', 'uint64']:
|
|
dtcheck = CAFE_DOUBLE
|
|
elif dt in ['np.float_', 'np.float64', 'np.long', 'np.ulong', 'np.int64', 'np.uint64']:
|
|
dtcheck = CAFE_DOUBLE
|
|
elif dt in ['float16', 'float32']:
|
|
dtcheck = CAFE_FLOAT
|
|
elif dt in ['np.float16', 'np.float32']:
|
|
dtcheck = CAFE_FLOAT
|
|
elif dt in ['string', 'str', 'unicode', 'string_', 'str_', 'unicode_']:
|
|
dtcheck = CAFE_STRING
|
|
elif dt in ['np.string', 'np.str', 'np.unicode', 'np.string_', 'np.str_', 'np.unicode_']:
|
|
dtcheck = CAFE_STRING
|
|
elif dt in ['native', '']:
|
|
dtcheck = dtn # need a line here
|
|
else:
|
|
print("Valid input parameters for data type are variations of: 'int', 'float', 'str', or 'native'")
|
|
print("Data to be presented in native data type")
|
|
|
|
return dtcheck
|
|
##################################################################################
|
|
|
|
|
|
#################################################################################
|
|
|
|
# cdef pvdata p1 = pvdata()
|
|
# cdef pvctrl c1 = pvctrl()
|
|
|
|
|
|
#################################################################################
|
|
|
|
cdef pvdata PVDataHolderToStruct(PVDataHolder pvd, dt=None):
|
|
|
|
cdef CAFEDataTypeCode cdt
|
|
#global p1
|
|
cdef pvdata p1 = pvdata()
|
|
|
|
cdef unsigned int dtn = pvd.getDataType()
|
|
cdef unsigned int dtcheck = dtn
|
|
cdef localList = []
|
|
|
|
if dt:
|
|
dtcheck = getMatchedDataType(dt, dtn)
|
|
|
|
if dtcheck == CAFE_STRING:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsString(i))
|
|
elif dtcheck == CAFE_SHORT:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsLong(i)) # getAsShort(i)
|
|
elif dtcheck == CAFE_FLOAT:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsDouble(i)) # getAsFloat(i)
|
|
elif dtcheck == CAFE_ENUM:
|
|
# if enum, string taken as native
|
|
# if self._c_cafe.isEnum(handle)==1:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsString(i))
|
|
# else:
|
|
# for i in range(0, pvd.getNelem()):
|
|
# localList.append(pvd.getAsLong(i)) #getAsUShort(i)
|
|
elif dtcheck == CAFE_CHAR:
|
|
for i in range(0, pvd.getNelem()):
|
|
# <unsigned char> pvd.getAsChar(i)
|
|
localList.append(pvd.getAsLong(i))
|
|
elif dtcheck == CAFE_LONG:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsLong(i))
|
|
elif dtcheck == CAFE_DOUBLE:
|
|
for i in range(0, pvd.getNelem()):
|
|
localList.append(pvd.getAsDouble(i))
|
|
else:
|
|
localList.append(0)
|
|
# print ("This line in PyCafe def getDataHolderToStruct should never appear!"
|
|
# print ("No Data! Error. Is channel connected?"
|
|
|
|
p1.value = localList
|
|
p1.status = pvd.getStatus()
|
|
p1.statusAsString = pvd.getStatusAsString()
|
|
p1.nelem = pvd.getNelem()
|
|
p1.alarmStatus = pvd.getAlarmStatus()
|
|
p1.alarmSeverity = pvd.getAlarmSeverity()
|
|
|
|
p1.alarmStatusAsString = pvd.getAlarmStatusAsString()
|
|
p1.alarmSeverityAsString = pvd.getAlarmSeverityAsString()
|
|
|
|
p1.pulseID = pvd.getPulseID()
|
|
|
|
p1.dataType = pvd.getDataType()
|
|
p1.dataTypeAsString = cdt.message(pvd.getDataType())
|
|
|
|
p1.tsDateAsString = pvd.getEpicsTimeStampAsString()
|
|
p1.bsDateAsString = pvd.getBSTimeStampAsString()
|
|
|
|
pvd._etsNorm = pvd.getEpicsTimeStampAsUInt32()
|
|
|
|
cpdef ll = []
|
|
ll.append((pvd._etsNorm).secPastEpoch)
|
|
ll.append((pvd._etsNorm).nsec)
|
|
p1.ts = ll
|
|
|
|
pvd._etsDate = pvd.getEpicsTimeStampAsDate()
|
|
|
|
cpdef ld = []
|
|
ld.append((pvd._etsDate).year)
|
|
ld.append((pvd._etsDate).mon)
|
|
ld.append((pvd._etsDate).day)
|
|
ld.append((pvd._etsDate).hour)
|
|
ld.append((pvd._etsDate).min)
|
|
ld.append((pvd._etsDate).sec)
|
|
ld.append((pvd._etsDate).nsec)
|
|
p1.tsDate = ld
|
|
|
|
return p1
|
|
##################################################################################
|
|
|
|
|
|
#################################################################################
|
|
|
|
cdef pvctrl PVCtrlHolderToStruct(PVCtrlHolder pvc, dt=None):
|
|
|
|
#global c1
|
|
cdef pvctrl c1 = pvctrl()
|
|
|
|
|
|
|
|
cdef unsigned int dtn = pvc.getDataType()
|
|
|
|
cdef unsigned int dtcheck = dtn
|
|
|
|
cdef localList = []
|
|
|
|
if dt:
|
|
dtcheck = getMatchedDataType(dt, dtn)
|
|
|
|
if dtcheck == CAFE_STRING:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsString(i))
|
|
elif dtcheck == CAFE_SHORT:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsLong(i)) # getAsShort(i)
|
|
elif dtcheck == CAFE_FLOAT:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsDouble(i)) # getAsFloat(i)
|
|
elif dtcheck == CAFE_ENUM:
|
|
# if enum, string taken as native
|
|
# if self._c_cafe.isEnum(handle)==1:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsString(i))
|
|
# else:
|
|
# for i in range(0, pvd.getNelem()):
|
|
# localList.append(pvd.getAsLong(i)) #getAsUShort(i)
|
|
elif dtcheck == CAFE_CHAR:
|
|
for i in range(0, pvc.getNelem()):
|
|
# <unsigned char> pvd.getAsChar(i)
|
|
localList.append(pvc.getAsLong(i))
|
|
elif dtcheck == CAFE_LONG:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsLong(i))
|
|
elif dtcheck == CAFE_DOUBLE:
|
|
for i in range(0, pvc.getNelem()):
|
|
localList.append(pvc.getAsDouble(i))
|
|
else:
|
|
localList.append(0)
|
|
# print ("This line in PyCafe def getDataHolderToStruct should never appear!"
|
|
# print ("No Data! Error. Is channel connected?"
|
|
c1.value = localList
|
|
c1.status = pvc.getStatus()
|
|
c1.nelem = pvc.getNelem()
|
|
c1.alarmStatus = pvc.getAlarmStatus()
|
|
c1.alarmSeverity = pvc.getAlarmSeverity()
|
|
|
|
c1.precision = pvc.getPrecision()
|
|
c1.noEnumStrings = pvc.getNoEnumStrings()
|
|
|
|
enumList = []
|
|
for i in range(0, pvc.getNoEnumStrings()):
|
|
enumList.append(pvc.getEnumStrings()[i])
|
|
|
|
c1.enumStrings = enumList
|
|
|
|
try:
|
|
c1.units = pvc.getUnits()
|
|
except UnicodeDecodeError:
|
|
c1.units = str("")
|
|
|
|
'''
|
|
result = isinstance(pvc.getUnits(), (bytes,))
|
|
|
|
if result:
|
|
c1.units = pvc.getUnits().decode('utf-8')
|
|
print(str(c1.units + " is bytes"))
|
|
else:
|
|
c1.units = pvc.getUnits() #AsString()
|
|
print(str(c1.units + " has type " + str(type(pvc.getUnits()))))
|
|
print(c1.units)
|
|
'''
|
|
|
|
c1.upperDisplayLimit = pvc.getUpperDispLimit_AsDouble()
|
|
c1.lowerDisplayLimit = pvc.getLowerDispLimit_AsDouble()
|
|
c1.upperAlarmLimit = pvc.getUpperAlarmLimit_AsDouble()
|
|
c1.upperWarningLimit = pvc.getUpperWarningLimit_AsDouble()
|
|
c1.lowerWarningLimit = pvc.getLowerWarningLimit_AsDouble()
|
|
c1.lowerAlarmLimit = pvc.getLowerAlarmLimit_AsDouble()
|
|
c1.upperControlLimit = pvc.getUpperCtrlLimit_AsDouble()
|
|
c1.lowerControlLimit = pvc.getLowerCtrlLimit_AsDouble()
|
|
|
|
return c1
|
|
##################################################################################
|
|
|
|
|
|
#################################################################################
|
|
|
|
cdef channelInfo channelRegaliaToStruct(ChannelRegalia cr):
|
|
|
|
cdef channelInfo ci = channelInfo()
|
|
cdef CAFEDataTypeCode cdt
|
|
|
|
ci.channelID = ( < long > cr.getChannelID())
|
|
ci.connectFlag = cr.getConnectFlag()
|
|
ci.hostName = cr.getHostNameAsString()
|
|
ci.dataType = cr.getDataType()
|
|
ci.dataTypeAsString = cdt.message(cr.getDataType())
|
|
ci.className = cr.getClassNameAsString()
|
|
ci.accessRead = cr.getAccessRead()
|
|
ci.accessWrite = cr.getAccessWrite()
|
|
ci.nelem = cr.getNelem()
|
|
ci.connectionState = cr.getConnectionState()
|
|
ci.cafeConnectionState = cr.getCafeConnectionState()
|
|
ci.connectionStateAsString = cr.getConnectionStateAsString()
|
|
ci.cafeConnectionStateAsString = cr.getCafeConnectionStateAsString()
|
|
return ci
|
|
#################################################################################
|