diff --git a/.gitmodules b/.gitmodules index 9870fa4..e156538 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "lan_gpib_vxi11"] - path = lan_gpib_vxi11 - url = git@gitea.psi.ch:lin-midas-drivers/lan_gpib_vxi11.git +[submodule "midas_lan_gpib"] + path = midas_lan_gpib + url = git@gitea.psi.ch:lin-midas-drivers/midas_lan_gpib.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 6e4b27a..a3e2ab2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,7 +12,7 @@ add_compile_options( ) option( - BUILD_FRONTENDS + BUILD_FRONTEND "If ON, build the default frontend executable" OFF ) @@ -20,29 +20,10 @@ option( set(CMAKE_PREFIX_PATH "$ENV{MIDASSYS}") find_package(Midas REQUIRED) -set( - DRIVERS - $ENV{MIDASSYS}/drivers/class/generic.cxx -) - -set(SYS_LIBS - pthread - util - rt - dl -) - -set(MIDAS_LIBS - midas::mfe - midas::midas - midas::mscb -) - -set(LIBS ${SYS_LIBS} ${MIDAS_LIBS}) #guard against multiple include -if(NOT TARGET lan_gpib_vxi11_linux_64bit) - add_subdirectory(lan_gpib_vxi11) +if(NOT TARGET midas_lan_gpib) + add_subdirectory(midas_lan_gpib) endif() ################################################################################ @@ -50,37 +31,35 @@ endif() ################################################################################ function(add_keysight_library name) - - set(SOURCES - device/keysight_e3610xa.cxx - ${DRIVERS} - ) - - list(FIND ARGN VXI11_SUPPORT HAS_VXI11) - if(NOT HAS_VXI11 EQUAL -1) - list(APPEND SOURCES bus/midas_vxi11.cxx) - endif() - add_library(${name} - ${SOURCES} + device/keysight_e3610xa.cxx ) - - if(NOT HAS_VXI11 EQUAL -1) - target_link_libraries(${name} PUBLIC lan_gpib_vxi11_linux_64bit) + message(STATUS "All arguments: ${ARGN}") + if(VXI11_SUPPORT IN_LIST ARGN) + target_link_libraries(${name} PUBLIC midas_lan_gpib) endif() - target_compile_definitions(${name} PRIVATE ${ARGN}) + # Check remaining arguments for compile definitions + foreach(arg IN LISTS ARGN) + target_compile_definitions(${name} PRIVATE ${arg}) + endforeach() target_link_libraries(${name} PUBLIC - ${LIBS} - ${TIRPC_LIBRARIES} + pthread + util + rt + dl + midas::mfe + midas::midas + midas::mscb ) target_include_directories(${name} PUBLIC - $ - ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR} + PRIVATE + $ENV{MIDASSYS}/drivers ) endfunction() @@ -88,203 +67,227 @@ add_keysight_library(keysight_e3610xa) add_keysight_library(keysight_e3610xa_flow FLOW_SUPPORT) add_keysight_library(keysight_e3610xa_volt VOLT_SUPPORT) add_keysight_library(keysight_e3610xa_amp AMPERE_SUPPORT) -add_keysight_library(keysight_e3610xa_voltamp VOLTAMPERE_SUPPORT) -add_keysight_library(keysight_e3610xa_vxi11 VXI11_SUPPORT) +add_keysight_library(keysight_e3610xa_voltamp VOLTAMPERE_SUPPORT E3610XA_OUTPUT_CHAN VXI11_SUPPORT) ################################################################################ -## Test Frontends +## Default Frontends ################################################################################ -if(${BUILD_FRONTENDS}) +set(_DEFAULT_KEYSIGHT_E3610XA_FRONTEND_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE INTERNAL "") - # ============================================================================ - # Frontend keysight_e3610xa_heflowks0_fe - - add_executable( - keysight_e3610xa_heflowks0_fe - frontend/keysight_e3610xa_heflowks0_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_heflowks0_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_heflowks0_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_heflowks0_fe - keysight_e3610xa - keysight_e3610xa_flow - ) - - # ============================================================================ - # Frontend keysight_e3610xa_ksamp0_fe - - add_executable( - keysight_e3610xa_ksamp0_fe - frontend/keysight_e3610xa_ksamp0_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_ksamp0_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_ksamp0_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_ksamp0_fe - keysight_e3610xa - keysight_e3610xa_amp - keysight_e3610xa_vxi11 - ) - - # ============================================================================ - # Frontend keysight_e3610xa_ksva0_fe - - add_executable( - keysight_e3610xa_ksva0_fe - frontend/keysight_e3610xa_ksva0_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_ksva0_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_ksva0_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_ksva0_fe - keysight_e3610xa - keysight_e3610xa_voltamp - ) - - # ============================================================================ - # Frontend keysight_e3610xa_ksva1_fe - - add_executable( - keysight_e3610xa_ksva1_fe - frontend/keysight_e3610xa_ksva1_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_ksva1_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_ksva1_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_ksva1_fe - keysight_e3610xa - keysight_e3610xa_vxi11 - ) - - # ============================================================================ - # Frontend keysight_e3610xa_ksvolt0_fe - - add_executable( - keysight_e3610xa_ksvolt0_fe - frontend/keysight_e3610xa_ksvolt0_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_ksvolt0_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_ksvolt0_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_ksvolt0_fe - keysight_e3610xa - keysight_e3610xa_volt - ) - - # ============================================================================ - # Frontend keysight_e3610xa_ksvolt1_fe - - add_executable( - keysight_e3610xa_ksvolt1_fe - frontend/keysight_e3610xa_ksvolt1_scfe.cxx - ) - - set_property( - TARGET - keysight_e3610xa_ksvolt1_fe - PROPERTY - CXX_STANDARD 11 - ) - - target_include_directories( - keysight_e3610xa_ksvolt1_fe - PRIVATE - $ENV{MIDASSYS}/drivers - ) - - target_link_libraries( - keysight_e3610xa_ksvolt1_fe - keysight_e3610xa - keysight_e3610xa_vxi11 - ) +## The frontends below, if used anywhere, should be turned into functions +# +#if(${BUILD_FRONTEND}) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_heflowks0_fe +# +# add_executable( +# keysight_e3610xa_heflowks0_fe +# frontend/keysight_e3610xa_heflowks0_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_heflowks0_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_heflowks0_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_heflowks0_fe +# keysight_e3610xa +# keysight_e3610xa_flow +# ) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_ksamp0_fe +# +# add_executable( +# keysight_e3610xa_ksamp0_fe +# frontend/keysight_e3610xa_ksamp0_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_ksamp0_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_ksamp0_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_ksamp0_fe +# keysight_e3610xa +# keysight_e3610xa_amp +# ) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_ksva0_fe +# +# add_executable( +# keysight_e3610xa_ksva0_fe +# frontend/keysight_e3610xa_ksva0_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_ksva0_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_ksva0_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_ksva0_fe +# keysight_e3610xa +# keysight_e3610xa_voltamp +# ) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_ksva1_fe +# +# add_executable( +# keysight_e3610xa_ksva1_fe +# frontend/keysight_e3610xa_ksva1_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_ksva1_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_ksva1_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_ksva1_fe +# keysight_e3610xa +# ) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_ksvolt0_fe +# +# add_executable( +# keysight_e3610xa_ksvolt0_fe +# frontend/keysight_e3610xa_ksvolt0_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_ksvolt0_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_ksvolt0_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_ksvolt0_fe +# keysight_e3610xa +# keysight_e3610xa_volt +# ) +# +# # ============================================================================ +# # Frontend keysight_e3610xa_ksvolt1_fe +# +# add_executable( +# keysight_e3610xa_ksvolt1_fe +# frontend/keysight_e3610xa_ksvolt1_scfe.cxx +# $ENV{MIDASSYS}/drivers/class/generic.cxx +# ) +# +# set_property( +# TARGET +# keysight_e3610xa_ksvolt1_fe +# PROPERTY +# CXX_STANDARD 11 +# ) +# +# target_include_directories( +# keysight_e3610xa_ksvolt1_fe +# PRIVATE +# $ENV{MIDASSYS}/drivers +# ) +# +# target_link_libraries( +# keysight_e3610xa_ksvolt1_fe +# keysight_e3610xa +# ) +# +# +#endif() +function(default_keysight_e3610xa_tubeheater_frontend F_TARGET F_NAME F_EVENT_ID NUM_CH) # ============================================================================ # Frontend tubeheater_e3610xa_scfe add_executable( - tubeheater_e3610xa_scfe - frontend/keysight_e3610xa_tubehks_scfe.cxx + ${F_TARGET} + ${_DEFAULT_KEYSIGHT_E3610XA_FRONTEND_DIR}/frontend/keysight_e3610xa_tubehks_scfe.cxx + ${_DEFAULT_KEYSIGHT_E3610XA_FRONTEND_DIR}/bus/midas_vxi11.cxx + $ENV{MIDASSYS}/drivers/class/generic.cxx ) + target_compile_definitions(${F_TARGET} PRIVATE FRONTEND_NAME="${F_NAME}") + target_compile_definitions(${F_TARGET} PRIVATE FRONTEND_ID=${F_EVENT_ID}) + target_compile_definitions(${F_TARGET} PRIVATE FRONTEND_CHANNELS=${NUM_CH}) + set_property( TARGET - tubeheater_e3610xa_scfe + ${F_TARGET} PROPERTY CXX_STANDARD 11 ) target_include_directories( - tubeheater_e3610xa_scfe + ${F_TARGET} PRIVATE $ENV{MIDASSYS}/drivers + ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries( - tubeheater_e3610xa_scfe - keysight_e3610xa - keysight_e3610xa_vxi11 + ${F_TARGET} + keysight_e3610xa_voltamp + midas_lan_gpib ) -endif() + target_compile_definitions(${F_TARGET} PRIVATE VXI11_SUPPORT) + + install( + TARGETS + ${F_TARGET} + RUNTIME DESTINATION bin + ) +endfunction() diff --git a/README.md b/README.md index 496c9ac..55fe0bc 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ The following flags / parametrizations are available: - `VOLT_SUPPORT`: Use the device in "Voltage mode" mode - `VOLTAMPERE_SUPPORT`: Use the device in "Voltage / ampere mode" mode - `AMPERE_SUPPORT`: Use the device in "Ampere mode" mode +- `VXI11_SUPPORT`: Use VXI11, e.g. the tubeheater GPS only supports this Only one of these configurations can be activated at anytime (if more than one flag is defined, the first one in the list above is used and the rest is @@ -69,7 +70,7 @@ The commands below build a couple of different frontends which use the aforementioned "mode" flags. ```bash -cmake -S "$(pwd)" -B -DBUILD_FRONTENDS=ON +cmake -S "$(pwd)" -B cmake --build --clean-first -- -j8 ``` @@ -403,4 +404,4 @@ $(BIN_DIR)/KEYSIGHT_E3610XA_tubehkslan.o: $(E3610XA_DIR)/KEYSIGHT_E3610XA_tubehk $(BIN_DIR)/KEYSIGHT_E3610XA_tubehks_scfe: $(E3610XAkstubehlan_OBJS) $(MAKEFILE) $(CC) $(CFLAGS) $(OSFLAGS) -o $@ $(E3610XAkstubehlan_OBJS) $(OFORTC) $(LIB) $(LIBS) -lm $(TIRPC_LIB) -``` \ No newline at end of file +``` diff --git a/bus/midas_vxi11.cxx b/bus/midas_vxi11.cxx index e3ac174..d1f103c 100644 --- a/bus/midas_vxi11.cxx +++ b/bus/midas_vxi11.cxx @@ -740,6 +740,7 @@ INT midas_vxi11(INT cmd, ...) HNDLE hkey; INT status, size, size1, timeout, waitms, flag, *pstb; void *info; + void **pinfo; char *str, *str1, *pattern; va_start(argptr, cmd); @@ -752,8 +753,8 @@ INT midas_vxi11(INT cmd, ...) switch (cmd) { case CMD_INIT: hkey = va_arg(argptr, HNDLE); - info = va_arg(argptr, void *); - status = midas_vxi11_init(hkey, &info); + pinfo = va_arg(argptr, void **); + status = midas_vxi11_init(hkey, pinfo); break; case CMD_EXIT: @@ -867,4 +868,4 @@ INT midas_vxi11(INT cmd, ...) va_end(argptr); return status; -} \ No newline at end of file +} diff --git a/device/keysight_e3610xa.cxx b/device/keysight_e3610xa.cxx index c2e1a63..fb80f09 100644 --- a/device/keysight_e3610xa.cxx +++ b/device/keysight_e3610xa.cxx @@ -3184,6 +3184,7 @@ INT keysight_e3610xa(INT cmd, ...) DWORD flags; float value, *pvalue; void *info, *bd; + void **pinfo; KEYSIGHT_E3610XA_INFO *infos; char *name; @@ -3193,11 +3194,11 @@ INT keysight_e3610xa(INT cmd, ...) switch (cmd) { case CMD_INIT: hKey = va_arg(argptr, HNDLE); - info = va_arg(argptr, void *); + pinfo = va_arg(argptr, void **); channel = va_arg(argptr, INT); flags = va_arg(argptr, DWORD); bd = va_arg(argptr, void *); - status = keysight_e3610xa_init(hKey, &info, channel, (INT(*)(INT, ...)) bd); + status = keysight_e3610xa_init(hKey, pinfo, channel, (INT(*)(INT, ...)) bd); break; case CMD_EXIT: diff --git a/frontend/keysight_e3610xa_tubehks_scfe.cxx b/frontend/keysight_e3610xa_tubehks_scfe.cxx index 467f25c..463ffd9 100644 --- a/frontend/keysight_e3610xa_tubehks_scfe.cxx +++ b/frontend/keysight_e3610xa_tubehks_scfe.cxx @@ -23,7 +23,7 @@ /*-- Globals -------------------------------------------------------*/ /* The frontend name (client name) as seen by other MIDAS clients */ -char *frontend_name = "TubeHeater"; +char *frontend_name = FRONTEND_NAME; /* The frontend file name, don't change it */ char *frontend_file_name = __FILE__; @@ -61,7 +61,7 @@ BOOL equipment_common_overwrite = FALSE; DEVICE_DRIVER keysight_driver[] = { /* initial demand value taken from instrument */ #ifdef VXI11_SUPPORT - { "KEYSIGHT_E3610XA", keysight_e3610xa, 3, midas_vxi11, DF_PRIO_DEVICE}, + { "KEYSIGHT_E3610XA", keysight_e3610xa, FRONTEND_CHANNELS, midas_vxi11, DF_PRIO_DEVICE}, #else #endif { "" } @@ -70,8 +70,8 @@ DEVICE_DRIVER keysight_driver[] = { EQUIPMENT equipment[] = { - { "TubeHeater", /* equipment name */ - {186, 0, /* event ID, trigger mask */ + { FRONTEND_NAME, /* equipment name */ + {FRONTEND_ID, 0, /* event ID, trigger mask */ "SYSTEM", /* event buffer */ EQ_SLOW, /* equipment type */ 0, /* event source */ diff --git a/lan_gpib_vxi11 b/lan_gpib_vxi11 deleted file mode 160000 index 04a5865..0000000 --- a/lan_gpib_vxi11 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 04a5865598991359b3e0a2de1d0c4470b945b271 diff --git a/midas_lan_gpib b/midas_lan_gpib new file mode 160000 index 0000000..f00a681 --- /dev/null +++ b/midas_lan_gpib @@ -0,0 +1 @@ +Subproject commit f00a681652da60b79178de2109fa707094cb65f5