blob: 08aa2e4cdebd96c885b5ebd55bdf5fc3527b4f83 [file]
######### Nodesets functions ####################################################
#Don't use this function. This is just a private one
FUNCTION(forte_opcua_add_nodeset_general namespaceName directoryName)
forte_add_sourcefile_with_path_hc(${directoryName}/ua_namespace_${namespaceName})
forte_add_include_directories(${directoryName})
set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_NODESETS_LIST ${namespaceName})
ENDFUNCTION()
#Use this function for nodesets which have a file called ua_types_NAMESPACE_generated.c file (DI for example). directoryName should point to the directory where the files are
FUNCTION(forte_opcua_add_nodeset namespaceName directoryName)
forte_add_sourcefile_with_path_hc(${directoryName}/ua_types_${namespaceName}_generated)
forte_opcua_add_nodeset_general(${namespaceName} ${directoryName})
ENDFUNCTION()
#Use this function for nodesets which DON'T have a file called ua_types_NAMESPACE_generated.c file (PLC for example). directoryName should point to the directory where the files are
FUNCTION(forte_opcua_add_nodeset_without_generated namespaceName directoryName)
forte_opcua_add_nodeset_general(${namespaceName} ${directoryName})
forte_add_include_directories(${directoryName})
ENDFUNCTION()
FUNCTION(forte_opcua_configure)
forte_opcua_configure_nodesets()
forte_opcua_configure_external_types()
ENDFUNCTION()
FUNCTION(forte_opcua_configure_nodesets)
SET(FORTE_OPCUA_NODESETS_INCLUDE "")
SET(FORTE_OPCUA_NODESETS_CODE "")
GET_PROPERTY(FORTE_OPCUA_NODESETS GLOBAL PROPERTY FORTE_OPCUA_NODESETS_LIST)
IF(NOT "${FORTE_OPCUA_NODESETS}" STREQUAL "")
LIST(LENGTH FORTE_OPCUA_NODESETS FORTE_OPCUA_NODESETS_LEN)
math(EXPR FORTE_OPCUA_NODESETS_LEN ${FORTE_OPCUA_NODESETS_LEN}-1)
FOREACH(POS RANGE ${FORTE_OPCUA_NODESETS_LEN})
LIST(GET FORTE_OPCUA_NODESETS ${POS} FORTE_OPCUA_NODESET)
SET(FORTE_OPCUA_NODESETS_INCLUDE "${FORTE_OPCUA_NODESETS_INCLUDE} #include \"ua_namespace_${FORTE_OPCUA_NODESET}.h\"\n")
SET(FORTE_OPCUA_NODESETS_CODE "${FORTE_OPCUA_NODESETS_CODE} if(UA_STATUSCODE_GOOD != ua_namespace_${FORTE_OPCUA_NODESET}(&paUaServer)) return false;\n")
ENDFOREACH(POS)
ELSE()
SET(FORTE_OPCUA_NODESETS_CODE "(void)paUaServer;\n") #to silence warning
ENDIF()
set(FORTE_OPCUA_MODULE_DIR "src/com/opc_ua")
CONFIGURE_FILE(${FORTE_OPCUA_MODULE_DIR}/opcua_nodesets.cpp.in ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_nodesets_new.cpp)
forte_replacefile_if_changed(${CMAKE_BINARY_DIR}/com/opc_ua/opcua_nodesets_new.cpp ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_nodesets.cpp)
file(REMOVE ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_nodesets_new.cpp)
ENDFUNCTION()
FUNCTION(forte_opcua_configure_external_types)
# Variables to be inserted in the generated file
SET(FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE "")
SET(FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT "")
GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_FILES GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_FILES_LIST)
IF(NOT "${FORTE_OPCUA_EXTERNAL_TYPES_FILES}" STREQUAL "")
GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_NAME GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAME_LIST)
GET_PROPERTY(FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE GLOBAL PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_LIST)
LIST(LENGTH FORTE_OPCUA_EXTERNAL_TYPES_FILES FORTE_OPCUA_TYPES_LEN)
SET(FORTE_OPCUA_EXTERNAL_TYPES_LENGTH ${FORTE_OPCUA_TYPES_LEN})
math(EXPR FORTE_OPCUA_TYPES_LEN ${FORTE_OPCUA_TYPES_LEN}-1)
FOREACH(POS RANGE ${FORTE_OPCUA_TYPES_LEN})
LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_FILES ${POS} FORTE_OPCUA_EXTERNAL_TYPES_FILES_ITERATOR)
LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_NAME ${POS} FORTE_OPCUA_EXTERNAL_TYPES_NAME_ITERATOR)
LIST(GET FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE ${POS} FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_ITERATOR)
string(TOUPPER ${FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_ITERATOR} FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_UPPER)
string(TOUPPER ${FORTE_OPCUA_EXTERNAL_TYPES_NAME_ITERATOR} FORTE_OPCUA_EXTERNAL_TYPES_NAME_UPPER)
if(${FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_UPPER} STREQUAL "UA")
SET(ARRAY_NAME "UA_TYPES")
SET(LOCATION_IN_ARRAY_NAME "UA_TYPES_${FORTE_OPCUA_EXTERNAL_TYPES_NAME_UPPER}")
SET(INCLUDE_TYPE "")
ELSE()
SET(ARRAY_NAME "UA_UA_TYPES_${FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_UPPER}") # the double UA_ comes from the output parameter when generating the datatypes
SET(LOCATION_IN_ARRAY_NAME "UA_UA_TYPES_${FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_UPPER}_${FORTE_OPCUA_EXTERNAL_TYPES_NAME_UPPER}")
SET(INCLUDE_TYPE "#include \"ua_types_${FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_ITERATOR}_generated.h\"")
ENDIF()
SET(FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE "${FORTE_OPCUA_EXTERNAL_TYPES_INCLUDE}#include \"${FORTE_OPCUA_EXTERNAL_TYPES_FILES_ITERATOR}.h\"\n${INCLUDE_TYPE}\n")
SET(FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT "${FORTE_OPCUA_EXTERNAL_TYPES_MAP_INSERT} \
UA_TypeConvert_external(&${ARRAY_NAME}[${LOCATION_IN_ARRAY_NAME}], \
g_nStringId${FORTE_OPCUA_EXTERNAL_TYPES_NAME_ITERATOR}),\n")
ENDFOREACH(POS)
ELSE()
#SET(FORTE_OPCUA_NODESETS_CODE "(void)paUaServer;\n") #to silence warning
ENDIF()
set(FORTE_OPCUA_MODULE_DIR "src/com/opc_ua")
CONFIGURE_FILE(${FORTE_OPCUA_MODULE_DIR}/opcua_types.cpp.in ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_types_new.cpp)
forte_replacefile_if_changed(${CMAKE_BINARY_DIR}/com/opc_ua/opcua_types_new.cpp ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_types.cpp)
file(REMOVE ${CMAKE_BINARY_DIR}/com/opc_ua/opcua_types_new.cpp)
ENDFUNCTION()
# Args:
# - fileName: Name of the file with the forte structure
# - forteName: Name of the structure in forte
# - namespace: Namespace name of the type. Empty string if the type is in the standard base namespace
FUNCTION(forte_opcua_add_type fileName forteName namespace)
set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_FILES_LIST ${fileName})
set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAME_LIST ${forteName})
set_property(GLOBAL APPEND PROPERTY FORTE_OPCUA_EXTERNAL_TYPES_NAMESPACE_LIST ${namespace})
ENDFUNCTION()
#################################################################################