11 Commits

Author SHA1 Message Date
32ed13125d cafe-1.13.0 2021-03-22 12:41:12 +01:00
90d82bec7a cafe-1.12.5 release 2021-03-16 09:35:10 +01:00
0343a1e1e3 reformat mex file 2019-01-03 09:52:11 +01:00
09085d814c README 2018-12-19 12:18:19 +01:00
624d52d419 cleaned git cache 2018-12-19 12:15:59 +01:00
558222585f cleaned git cache 2018-12-19 12:09:53 +01:00
2e7abe48eb rm cached 2018-12-14 15:59:00 +01:00
f351a0d5bb new release 2018-12-14 15:55:17 +01:00
e31fed82be open methods refined - removed print statements 2017-11-23 10:36:53 +01:00
0aeb952d62 open methods refined 2017-11-22 14:15:37 +01:00
6dfd64a9a3 Connection time optimized 2017-11-14 09:24:20 +01:00
14 changed files with 9151 additions and 6956 deletions

5
.gitignore vendored
View File

@@ -1,5 +1,10 @@
*~
*.bak
*.*-
RHEL7-x86_64
SL6-x86_64
windows-x64
felix-cache
readme.txt
makefile_rel*
*.*.orig

2
README
View File

@@ -1,5 +1,3 @@
USE makefile_rel_2014_manual for release versio
## --------------------------------------------------------------------------
## makefile

Binary file not shown.

BIN
RHEL7-x86_64/2018a/mocha.mexa64 Executable file

Binary file not shown.

View File

@@ -1 +0,0 @@
exampleNew.m

1068
example.m Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -92,10 +92,10 @@ disp('Section (1) Establishing connections to EPICS Process Variables (PVs) ');
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
%returns an array of handles (object references)
hpv=mocha('open',pv);
%hpv=mocha('open',pv);
%When executing the 'open' message as above, the default behaviour
%is for each 'open' to wait for a fixed amount of time, given by:
%is for each 'open' to wait for a maximum amount of time, given by:
openTime = mocha ('getOpenWaitTime'); %currently 0.4s
%The 'open' wait time can, however, be configured by the user as follows:
mocha ('setOpenWaitTime', 0.2); %set to 0.2s
@@ -108,7 +108,7 @@ mocha ('setOpenWaitTime'); %reset to default (0.4s)
mocha('openPrepare');
hpv=mocha('open',pv);
% and more mocha 'open' messages would follow here...
% Finally send the messages and wait for 0.2s for connections to complete
% Finally send the messages and wait for a maximum of 0.2s for connections to complete
mocha('openNowAndWait', 0.2)
%There are a number of ways to extract information on the created handles
@@ -469,6 +469,8 @@ disp('Section (8) Multiple Struct operations on several PVS returning PVData Obj
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
%GET
%returns a sequence of pvData structs
%%
[pvData, isAllOK] = mocha ('getPVArray', pv)
disp('Display all pvData.val values and statuses:');
%pvData(i) corresponds to the data returned by pv(i)
@@ -484,41 +486,52 @@ disp('Display all pvData.val values and statuses:');
%returns a sequence of extended (x) pvData structs
[pvStruct, isAllOK] = mocha ('getStructArray', pv)
%%[pvStruct, isAllOK] = mocha ('getStructArray', pv)
%pvStruct(i) corresponds to the data returned by pv(i)
disp('Display all pvStruct as arrays:');
[pvStruct.handle]
{pvStruct.pv}
{pvStruct.val}
[pvStruct.status]
{pvStruct.status_str}
[pvStruct.alarmStatus]
[pvStruct.alarmStatus_str]
[pvStruct.alarmSeverity]
{pvStruct.alarmSeverity_str}
pvStruct.ts
pvStruct.epicsTS
[pvStruct.alarmSeverity]
{pvStruct.alarmSeverity_str}
%%disp('Display all pvStruct as arrays:');
%%[pvStruct.handle]
%%{pvStruct.pv}
%%{pvStruct.val}
%%[pvStruct.status]
%%{pvStruct.status_str}
%%[pvStruct.alarmStatus]
%%{pvStruct.alarmStatus_str}
%%[pvStruct.alarmSeverity]
%%{pvStruct.alarmSeverity_str}
%%pvStruct.ts
%%pvStruct.epicsTS
%%[pvStruct.alarmSeverity]
%%{pvStruct.alarmSeverity_str}
%pvStruct(1:6).ts %timestamps
%[pvStruct(1:6).alarmStatus]
%% %%%%
%Note: the following method is equivelent to the above
%as it will call getStructArray internally
[pvStruct, isAllOK] = mocha ('getStruct', pv);
%%%%%%%%
disp('Alternatively part data (values, statuses only) could also be retrieved with getCellArray:');
%% %%%%
[val, isAllOK, s] = mocha ('getCellArray', hpv)
%%%%%%%%%%%%%%
%SET
%SET -overwrite pvData
pvData(1).val =0.2345;
pvData(2).val =2.6789;
pvData(3).val =(256:512);
pvData(4).val = 'off';
%%%%%%
[isAllOK, s] = mocha ('set', hpv, pvData(1:6).val);
%%%%%%%%%%%%%%%%%%%
%Check values were set
[val, isAllOK, s] = mocha ('getCellArray', hpv)
%%%%%%%%%
disp('Recall we had previously set an offset for wf of value:');
offset=mocha('getOffset',hpv(3))
disp('Setting new offset/nelem for wf has value:');
@@ -712,7 +725,6 @@ disp('Show members of group gTest (as loaded from test.xml):');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%(11) Monitors, either with or without user supplied callbacks (in essence, matlab scripts)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -724,6 +736,8 @@ monitorID = mocha ('monitor', pv(1));
[monitorIDArray, isAllOK, statusArray] = mocha ('monitor', pv(1:6)); %start monitors for several pvs/handles
%Once the monitor is started, data may be retrieved via one of the cache methods
pause(0.1)
[val,s] = mocha('getCache', pv(1)); %Scalar or vector returned in native data type
[val,s] = mocha('getCache', pv(1), 'double'); %Scalar or vector returned as a MATLAB double
[val,s] = mocha('getCache', pv(1), 'uint8'); %Scalar or vector returned as a MATLAB uint8
@@ -769,7 +783,7 @@ start(obj.t);
disp ('Callback for monitors for 5 seconds')
for n=1:5
mocha('set', pv(1), n); %See the script be executed
pause(1);
pause(0.5);
end
stop(obj.t);
@@ -1033,7 +1047,7 @@ setValue=0.4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (17) Gracefully terminate CAFE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
@@ -1044,11 +1058,10 @@ disp('%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%');
%Stops all monitors (if any)
%Closes all channels
%Releases all CA resources
mocha ('close');
mocha ('close')
%
%END (17) Gracefully terminate CAFE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1 +1 @@
makefile_rel_1.3
makefile_rel_1.13-gcc-6.3.0

View File

@@ -1,124 +0,0 @@
#
# Jan Chrin
# New Version: June 2016
#
# makefile to build mocha mex file
# printenv | grep MATLAB to reveal your MATLAB Directory
#
# e.g. on sf-lc we have
# MATLAB=/afs/psi.ch/sys/linux/opt/matlab/2015a.x86_64
#
# local executables are built in ./${EPICS_HOST_ARCH}/$(MVER)
# where the MATLAB version is grepped from $(MATLAB)
MATLAB_ROOT=${MATLAB}
MATLAB_VERSION=$(notdir $(MATLAB_ROOT))
##### CHANGE AS APPROPRIATE #################
#Mocha Version to install
MOCHA_VERSION=mocha-1.3.0-final-2
#CAFE version to link to
CAFE_VERSION=cafe-1.3.0-final-2
EPICS_BASE=${EPICS}/base
#CAFE project base
CAFE_BASE=/opt/gfa/cafe
CAFE_MOCHA_BASE=${CAFE_BASE}/mocha
#CAFE_CPP_BASE=/afs/psi.ch/project/cafe/gitlab/CAFE/cpp
CAFE_CPP_BASE=$(CAFE_BASE)/cpp/$(CAFE_VERSION)
BOOST_BASE=${CAFE_BASE}/boost/boost_1_61_0/include
BOOST_LIB=/afs/psi.ch/project/zeromq/devl/mate/deps/boost/lib
QT_LIB=/usr/lib64
INSTALL_MOCHA_LIBDIR= $(CAFE_MOCHA_BASE)/$(MOCHA_VERSION)/lib/$(MATLAB_VERSION)
#############################################
#First deteremine if we are on a 32/64 bit machine
#as mex file extensions are named differently
pattern64=x86_64
pattern32=i386
PWD=$(shell pwd)
#hardware platform
HW=$(shell uname -i)
ifeq ($(pattern64),$(findstring $(pattern64), $(HW)))
MEXE=mexa64
MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa64
else
ifeq ($(pattern32),$(findstring $(pattern32), $(HW)))
MEXE=mexglx
MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa86
endif
endif
INSTALL_PATH?=$(INSTALL_MOCHA_LIBDIR)
OBJ_DIR= ${EPICS_HOST_ARCH}/$(MATLAB_VERSION)
INCLUDEPATH_MOCHA += -I$(MATLAB_ROOT)/extern/include \
-I$(CAFE_CPP_BASE)/include -I./ \
-I$(EPICS_BASE)/include -I$(EPICS_BASE)/include/os/Linux
INCLUDEPATH_MACHINETTA += $(INCLUDEPATH_MOCHA) -I$(BOOST_BASE) -I$(BOOST_BASE)/boost
LIB_DIR += \
-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \
-Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \
-L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) \
-L$(CAFE_CPP_BASE) \
-Wl,-rpath,$(CAFE_CPP_BASE) \
-L$(QT_LIB) -Wl,-rpath,$(QT_LIB)
LIBS += -ldl -lca -lCom -lmx -lmex -lmat -lQtCore -lQtXml
LIB_INSTALL = $(LIB_DIR) -L$(INSTALL_PATH) -Wl,-rpath,$(INSTALL_PATH)
LIB_LOCAL = $(LIB_DIR)
CAFE_OBJS_DIR = $(CAFE_BASE)/cpp/$(CAFE_VERSION)/lib/libcafe.a
# MATLAB Versions 2014 onwards, use
# LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_LOCAL) $(LIBS)
# LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_INSTALL) $(LIBS)
$(OBJ_DIR)/mocha.$(MEXE): mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o
mex -largeArrayDims GCC='/usr/bin/gcc' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(OBJ_DIR) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA) \
LDFLAGS='$(LIB_LOCAL) $(LIBS)'
$(OBJ_DIR)/macchinettaSwitch.o: macchinettaSwitch.cpp macchinettaHelper.h \
macchinetta.h containerMochaccino.h
mex GCC='/usr/bin/g++' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
-largeArrayDims -c macchinettaSwitch.cpp $(INCLUDEPATH_MACHINETTA) -outdir $(OBJ_DIR)
install: $(OBJ_DIR)/mocha.$(MEXE)
mkdir -p $(INSTALL_PATH)
mex -largeArrayDims GCC='/usr/bin/gcc' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(INSTALL_PATH) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA) \
LDFLAGS='$(LIB_INSTALL) $(LIBS)'
cp example.m $(INSTALL_PATH)
cp scripts/*.m $(INSTALL_PATH)
cp scripts/test.xml $(INSTALL_PATH)
install_lib: $(OBJ_DIR)/libmacchinetta.so
mkdir -p $(INSTALL_PATH)
cp $(OBJ_DIR)/libmacchinetta.so $(INSTALL_PATH)
clean:
rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.so $(OBJ_DIR)/*.$(MEXE)

View File

@@ -1,70 +0,0 @@
MATLAB_ROOT=C:\'Program Files'\MATLAB\R2016b_x64
MEXE=mexw64
#c:\local\boost_1_62_0\
INCLUDES = -IC:\CAFE\CAFE\cpp\include -IC:\CAFE\CAFE\cpp -IC:\local\boost_1_62_0 \
-IC:\local\boost_1_62_0\boost -IC:\epics\base-3.14.12.5\include -IC:\epics\base-3.14.12.5\include\os\WIN32 \
-I"C:\Program Files\MATLAB\R2016b_x64\extern\include" \
-Ic:\Qt\qt-4.8.6-x64-msvc2010\include -Ic:\Qt\qt-4.8.6-x64-msvc2010\include\QtCore -Ic:\Qt\qt-4.8.6-msvc2010\include\QtXml
CXX=cl
CXXFLAGS = /W4 /EHsc
OUTPUT_OPTION = /o $@
LIB_LOCAL = C:\epics\base-3.14.12.5\lib\windows-x64\Com.lib C:\epics\base-3.14.12.5\lib\windows-x64\ca.lib \
C:\CAFE\CAFE\cpp\cafe.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_thread-vc100-mt-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_system-vc100-mt-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_chrono-vc100-mt-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_date_time-vc100-mt-1_62.lib \
C:\Qt\Qt-4.8.6-msvc2010\lib\QtCore4.lib C:\Qt\tq-4.8.6-msvc2010\lib\QtXml4.lib
#"C:\Program Files\MATLAB\R2016b_x64\extern\lib\win64\microsoft\libmat.lib" \
#"C:\Program Files\MATLAB\R2016b_x64\extern\lib\win64\microsoft\libmex.lib" \
#"C:\Program Files\MATLAB\R2016b_x64\extern\lib\win64\microsoft\libmx.lib"
LIB_CAFE=C:\CAFE\CAFE\cpp\cafe.lib
LIB_BOOST =C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_date_time-vc100-mt-1_62.lib
LIB_BOOST2=C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_date_time-vc100-mt-s-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_thread-vc100-mt-s-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_system-vc100-mt-s-1_62.lib \
C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_chrono-vc100-mt-s-1_62.lib
#LIB_BOOST2=C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_thread-vc100-mt-s-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_system-vc100-mt-s-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_date_time-vc100-mt-s-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_chrono-vc100-mt-s-1_62.lib
#LIB_BOOST=C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_thread-vc100-mt-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_system-vc100-mt-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_date_time-vc100-mt-1_62.lib \
#C:\local\boost_1_62_0\lib64-msvc-10.0\libboost_chrono-vc100-mt-1_62.lib
LIB_QT=C:\Qt\Qt-4.8.6-x64-msvc2010\lib\QtCore4.lib C:\Qt\qt-4.8.6-x64-msvc2010\lib\QtXml4.lib
LIB_EPICS=C:\epics\base-3.14.12.5\lib\windows-x64\Com.lib C:\epics\base-3.14.12.5\lib\windows-x64\ca.lib
OBJ_DIR=windows-x64
CAFE_OBJS = C:\CAFE\CAFE\cpp\src\cafeCache.obj C:\CAFE\CAFE\cpp\src\cafeGroup.obj C:\CAFE\CAFE\cpp\src\cafe.obj C:\CAFE\CAFE\cpp\src\cafeVectors.obj \
C:\CAFE\CAFE\cpp\src\cafeXML.obj C:\CAFE\CAFE\cpp\src\callbackHandlerCreate.obj C:\CAFE\CAFE\cpp\src\callbackHandlerMonitor.obj \
C:\CAFE\CAFE\cpp\src\conduitGroup.obj C:\CAFE\CAFE\cpp\src\conduit.obj \
C:\CAFE\CAFE\cpp\src\connectCallbacks.obj C:\CAFE\CAFE\cpp\src\connectGroup.obj \
C:\CAFE\CAFE\cpp\src\connect.obj C:\CAFE\CAFE\cpp\src\exceptionsHelper.obj C:\CAFE\CAFE\cpp\src\granules.obj C:\CAFE\CAFE\cpp\src\handleHelper.obj \
C:\CAFE\CAFE\cpp\src\helper.obj \
C:\CAFE\CAFE\cpp\src\loadCollectionXMLParser.obj C:\CAFE\CAFE\cpp\src\loadGroupXMLParser.obj C:\CAFE\CAFE\cpp\src\methodCallbacks.obj \
C:\CAFE\CAFE\cpp\src\policyHelper.obj \
C:\CAFE\CAFE\cpp\src\restorePVGroupXMLParser.obj C:\CAFE\CAFE\cpp\src\transpose.obj
#\NODEFAULTLIB
$(OBJ_DIR)\mocha.$(MEXE): mocha.cpp $(OBJ_DIR)\macchinettaSwitch.obj
"C:\Program Files\MATLAB\R2016b_x64\bin\win64\mex" -v COMPFLAGS="$(COMPFLAGS) -Wall" mocha.cpp $(OBJ_DIR)/macchinettaSwitch.obj -DDB_TEXT_GLBLSOURCE -DMSCC -DWIN32 -DWIN64 -largeArrayDims $(INCLUDES) $(LIB_EPICS) $(LIB_CAFE) $(LIB_BOOST) $(LIB_BOOST2) $(LIB_QT) \
-outdir $(OBJ_DIR) -output mocha.$(MEXE)
$(OBJ_DIR)\macchinettaSwitch.obj: macchinettaSwitch.cpp macchinettaHelper.h \
macchinetta.h containerMochaccino.h
"C:\Program Files\MATLAB\R2016b_x64\bin\win64\mex" -largeArrayDims \
-c macchinettaSwitch.cpp $(INCLUDES) -outdir $(OBJ_DIR)
clean:
rm -f $(OBJ_DIR)/*.obj $(OBJ_DIR)/*.$(MEXE)

View File

@@ -1,124 +0,0 @@
#
# Jan Chrin
# New Version: June 2016
#
# makefile to build mocha mex file
# printenv | grep MATLAB to reveal your MATLAB Directory
#
# e.g. on sf-lc we have
# MATLAB=/afs/psi.ch/sys/linux/opt/matlab/2015a.x86_64
#
# local executables are built in ./${EPICS_HOST_ARCH}/$(MVER)
# where the MATLAB version is grepped from $(MATLAB)
MATLAB_ROOT=${MATLAB}
MATLAB_VERSION=$(notdir $(MATLAB_ROOT))
##### CHANGE AS APPROPRIATE #################
#Mocha Version to install
MOCHA_VERSION=mocha-1.3.0-final-1
#CAFE version to link to
CAFE_VERSION=cafe-1.3.0-final-1
EPICS_BASE=${EPICS}/base
#CAFE project base
CAFE_BASE=/opt/gfa/cafe
CAFE_MOCHA_BASE=${CAFE_BASE}/mocha
#CAFE_CPP_BASE=/afs/psi.ch/project/cafe/gitlab/CAFE/cpp
CAFE_CPP_BASE=$(CAFE_BASE)/cpp/$(CAFE_VERSION)
BOOST_BASE=${CAFE_BASE}/boost/boost_1_61_0/include
BOOST_LIB=/afs/psi.ch/project/zeromq/devl/mate/deps/boost/lib
QT_LIB=/usr/lib64
INSTALL_MOCHA_LIBDIR= $(CAFE_MOCHA_BASE)/$(MOCHA_VERSION)/lib/$(MATLAB_VERSION)
#############################################
#First deteremine if we are on a 32/64 bit machine
#as mex file extensions are named differently
pattern64=x86_64
pattern32=i386
PWD=$(shell pwd)
#hardware platform
HW=$(shell uname -i)
ifeq ($(pattern64),$(findstring $(pattern64), $(HW)))
MEXE=mexa64
MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa64
else
ifeq ($(pattern32),$(findstring $(pattern32), $(HW)))
MEXE=mexglx
MATLAB_LIB = $(MATLAB_ROOT)/bin/glnxa86
endif
endif
INSTALL_PATH?=$(INSTALL_MOCHA_LIBDIR)
OBJ_DIR= ${EPICS_HOST_ARCH}/$(MATLAB_VERSION)
INCLUDEPATH_MOCHA += -I$(MATLAB_ROOT)/extern/include \
-I$(CAFE_CPP_BASE)/include -I./ \
-I$(EPICS_BASE)/include -I$(EPICS_BASE)/include/os/Linux
INCLUDEPATH_MACHINETTA += $(INCLUDEPATH_MOCHA) -I$(BOOST_BASE) -I$(BOOST_BASE)/boost
LIB_DIR += \
-L$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \
-Wl,-rpath,$(EPICS_BASE)/lib/${EPICS_HOST_ARCH} \
-L$(MATLAB_LIB) -Wl,-rpath,$(MATLAB_LIB) \
-L$(CAFE_CPP_BASE) \
-Wl,-rpath,$(CAFE_CPP_BASE) \
-L$(QT_LIB) -Wl,-rpath,$(QT_LIB)
LIBS += -ldl -lca -lCom -lmx -lmex -lmat -lQtCore -lQtXml
LIB_INSTALL = $(LIB_DIR) -L$(INSTALL_PATH) -Wl,-rpath,$(INSTALL_PATH)
LIB_LOCAL = $(LIB_DIR)
CAFE_OBJS_DIR = $(CAFE_BASE)/cpp/$(CAFE_VERSION)/lib/libcafe.a
# MATLAB Versions 2014 onwards, use
# LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_LOCAL) $(LIBS)
# LDFLAGS='$(LIB_LOCAL) $(LIBS) instead of $(LIB_INSTALL) $(LIBS)
$(OBJ_DIR)/mocha.$(MEXE): mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o
mex -largeArrayDims GCC='/usr/bin/gcc' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(OBJ_DIR) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA) \
LDFLAGS='$(LIB_LOCAL) $(LIBS)'
$(OBJ_DIR)/macchinettaSwitch.o: macchinettaSwitch.cpp macchinettaHelper.h \
macchinetta.h containerMochaccino.h
mex GCC='/usr/bin/g++' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
-largeArrayDims -c macchinettaSwitch.cpp $(INCLUDEPATH_MACHINETTA) -outdir $(OBJ_DIR)
install: $(OBJ_DIR)/mocha.$(MEXE)
mkdir -p $(INSTALL_PATH)
mex -largeArrayDims GCC='/usr/bin/gcc' CXXFLAGS='-v -largeArrayDims -ansi -fexceptions -fPIC -fno-omit-frame-pointer -pthread' \
mocha.cpp $(OBJ_DIR)/macchinettaSwitch.o $(CAFE_OBJS_DIR) -outdir $(INSTALL_PATH) -output mocha.$(MEXE) \
$(INCLUDEPATH_MOCHA) \
LDFLAGS='$(LIB_INSTALL) $(LIBS)'
cp example.m $(INSTALL_PATH)
cp scripts/*.m $(INSTALL_PATH)
cp scripts/test.xml $(INSTALL_PATH)
install_lib: $(OBJ_DIR)/libmacchinetta.so
mkdir -p $(INSTALL_PATH)
cp $(OBJ_DIR)/libmacchinetta.so $(INSTALL_PATH)
clean:
rm -f $(OBJ_DIR)/*.o $(OBJ_DIR)/*.so $(OBJ_DIR)/*.$(MEXE)

View File

@@ -1,2 +0,0 @@
/opt/psi/Cafe/cafe-matlab.sh -v 2015a
matlab &

View File

@@ -1,109 +0,0 @@
function value = caget(channel,cached)
% caget('channel') returns current value and additional infos
% of given EPICS channel.
% caget('channel',1) returns last value and additional infos
% of given EPICS channel.
%
% channel can be a channel name or a handle as returned from mcaopen
%
% return value elements:
% val: value (scalar, vector or string)
% sevr: severity as a number
% sevr_str: severity as a string
% stat: status as a number
% stat_str: status as a string
% time: timestamp as a date vector
% units: units string
persistent severity_str
persistent status_str
persistent zerotime
persistent units
if ischar(channel)
pv = mocha('open',channel);
if mocha('isConnected', channel) == false
mocha('openNowAndWait', 0.5)
end
if mocha('isConnected', channel) == false
error('EPICS channel %s not found', channel);
end
elseif isnumeric(channel)
pv = channel;
else
error ('first argument must be channel name or handle');
end
if isvector(pv)
pv=pv(1); % truncate
end
if nargin > 1 && cached
pvStruct = mocha('getPVCache',pv);
else
pvStruct = mocha('getPV', pv);
end
val=pvStruct.val
pvCtrl = mocha('getCtrlCache',pv);
%pvCtrl
% initialize severity and status enums
if isempty(severity_str)
severity_str = {'NO_ALARM';'MINOR';'MAJOR';'INVALID'};
status_str = {'NO_ALARM';'READ';'WRITE';'HIHI';'HIGH';'LOLO';'LOW';'STATE';'COS';'COMM';'TIMEOUT';'HWLIMIT';'CALC';'SCAN';'LINK';'SOFT';'BAD_SUB';'UDF';'DISABLE';'SIMM';'READ_ACCESS';'WRITE_ACCESS'};
end
value.val = val;
units = pvCtrl.units;
string = pvCtrl.enumStrings;
if size(string) > 1
disp(size(string))
value.val_str = value.val;
value.val = mocha('getCache',pv,'int8');
end
%if ~isempty(units{1})
%value.units = units{1};
%end
value.units=units;
value.sevr = pvStruct.alarmSeverity;
indx=max(pvStruct.alarmSeverity, 0);
value.sevr_str = severity_str{indx+1};
value.stat = pvStruct.alarmStatus;
indx=max(pvStruct.alarmStatus, 0);
value.stat_str = status_str{ indx+1};
timestamp = mocha('getTimestamp',pv);
if (numel(timestamp) == 2)
% old mca version
% do not use mcatime here because 1. it is slow, 2. is returns UTC
% calculating zerotime only once is faster and takes localtime into account
% When daylight saving time begins or ends, restart the program!
if isempty(zerotime)
[status,timezone]=system('date +%z'); % get localtime offset
timeoffs=str2double(timezone);
houroffs=floor(timeoffs/100);
minoffs=(timeoffs-100*houroffs);
zerotime = datenum('1-Jan-1990') + (minoffs/60 + houroffs)/24;
end
time=timestamp(1)+timestamp(2)/1000000000;
if time
time = zerotime+time/24/3600;
end
value.time = datevec(time);
else
% new mca version
timestamp(6)=timestamp(6)+timestamp(7)/1000000000;
value.time = timestamp(1:6);
end