for_developers:wrapper_lib
Create new Wrapper Library
The following steps have to be taken in order to create a custom wrapper library. See also flink-eeros or comedi-eeros.
- Create new CMake project for a shared library.
- Include and link against EEROS:
find_package(EEROS REQUIRED) include_directories(${EEROS_INCLUDE_DIR}) link_directories(${EEROS_LIB_DIR})
- Include and link against necessary hardware library. If the required hardware library generates a CMake Package, use
find_package()
to search for the library:find_package(flink REQUIRED) include_directories(${FLINK_INCLUDE_DIR}) link_directories(${FLINK_LIB_DIR})
If you have no CMake Package you have to search for an installed header file or add it as additional include and library directory.
find_path(COMEDI_INCLUDE_DIR NAMES comedi.h comedilib.h) if(COMEDI_INCLUDE_DIR) include_directories(${COMEDI_INCLUDE_DIR}) endif() find_library(COMEDI_LIBRARY comedi) if(COMEDI_LIBRARY) message(STATUS "-> libcomedi available") set(COMEDI_LIBRARY_DIR ${COMEDI_LIBRARY_DIR} comedi) endif()
- Create classes for every type you intend to support (AnalogOut, DigitalIn, PWM, …):
- These classes have to derive from the EEROS HAL classes In- or Output respectively ScalableIn- or ScalableOutput. You can find these classes in the EEROS repository in folder
/includes/eeros/hal
. This allows you to access the member functions of the derived classes when they are loaded dynamically over the configuration file. - Implement the derived functions for every class. The
set()
andget()
functions have to access the hardware library and write or read from hardware according to their functionality. - For scalable channels
scale
andoffset
(member variables of ScalableIn- and ScalableOutput) have to be taken into account. Calculate the effective output value set to the hardware with these values. Check AnalogOut of comedi-eeros for an example. Scale and offset describe the scaling factors of the connected hardware. So you have to divide the output value by scale. - Create a C function
createType
, which will be called dynamically from EEROS for every supported type. This function has to create an object of the corresponding type and returns a pointer to it. - Create all necessary Feature Functions as C functions. These are intended to use for all actions which cannot be called with the derived functions like setting a PWM frequency.
- Create a class to handle the hardware device node (
open
,close
, …). Create a factory for the device. On every creation of a channel there will be an access togetDevice()
and you have to make sure that the device is opened only once.
for_developers/wrapper_lib.txt · Last modified: 2017/04/18 12:43 by kalberer