pacemaker is a lightweight C++ wrapper around the ETAS INCA COM API. It lets you programmatically register the calibration parameters, set their values in real time, and control measurement recordings, without touching INCA's GUI.
To start, clone the repository and move into the root directory
git clone https://github.com/marcope-98/pacemaker.git
cd pacemakerNote
An MSVC compiler must be avaible on your system. For a portable alternative, see PortableBuildTools by Data-Oriented-House.
cmake -B build -S . ^
-DETAS_INCACOM_TLB="<path/to/incacom.tlb>" ^
-DCMAKE_BUILD_TYPE="<Release|Debug|RelWithDebInfo|MinSizeRel>"
cmake --build build --target pacemakerYou can supply a incacom.tlb file via ETAS_INCACOM_TLB CMake variable, by specifying its absolute path. Otherwise a find module will take care of finding its location in regedit.
Due to backward compatibility issues, only ETAS INCA 7.4 and later installations are supported.
Build the tests target and then run the test suite via CTest:
cmake -B build -S . ^
-DPACEMAKER_BUILD_TESTS=ON
cmake --build build --target tests
ctest --test-dir build --output-on-failureThe CMake option PACEMAKER_BUILD_TESTS is ON by default in case the project is the top level project.
To run a specific test by name or pattern, use the -R flag
ctest --test-dir build --output-on-failure -R <test-name>Tip
Add -j <N> to run up to N tests in parallel, or --rerun-failed to only re-execute tests that failed in the previous run
The Software Requirements Specification (SRS) and Test Specification (TS) documents are written in LaTeX and built using latexmk perl script via MiKTeX.
Dependencies:
- MiKTeX: LaTeX distribution (install
latexmkvia its package manager) - Strawberry perl: Perl runtime for Windows
cmake -B build -S . ^
-DMIKTEX_BINARY_PATH="<path/tp/miktex/bin>" ^
-DPACEMAKER_BUILD_REQUIREMENTS=ON
cmake --build build --target requirementsMIKTEX_BINARY_PATH is only required for portable MiKTeX installations.
The CMake option PACEMAKER_BUILD_REQUIREMENTS is ON by default in case the project is the top level project.
API documentation is generated with Doxygen and Graphviz.
cmake -B build -S . ^
-DDOXYGEN_EXECUTABLE="<path/to/doxygen>" ^
-DDOXYGEN_DOT_EXECUTABLE="<path/to/dot>" ^
-DPACEMAKER_BUILD_DOCS=ON
cmake --build build --target docsNote
DOXYGEN_EXECUTABLE and DOXYGEN_DOT_EXECUTABLE are only required for portable installations
The CMake option PACEMAKER_BUILD_REQUIREMENTS is ON by default in case the project is the top level project.
A Command Line Interface example is provided that uses all the implemented components of the pacemaker library.
cmake -B build -S . ^
-DPACEMAKER_BUILD_EXAMPLES=ON
cmake --build build --target examples
.\build\examples\pacemaker-cli <period> <csv_file> [<output file or folder>]The CMake option PACEMAKER_BUILD_EXAMPLES is ON by default in case the project is the top level project.
The CLI reads the csv file that has the following form:
- Header: comma separated names of the INCA parameters to change (quoted or unquoted)
- Values: comma separated double values to set the INCA parameters to
Each row of the Values refers to a different sample. The period of execution of each row is dictated by the first CLI argument that has to be the period in milliseconds.
Putting all things together, suppose I would like to execute every row of a csv file called thefile.csv at 10ms intervals, I would call the CLI with the following syntax:
.\build\examples\pacemaker-cli 10ms .\thefile.csvOptionally, once can specify the output file or folder for the recording:
- If one omit the argument, the recording will be saved in the default location with the default name
- If one provides a folder location, the recording will be saved at the specified location with the default name
- If one provides the full path and filename, the recording will be saved with the provided name and location.
We welcome contributions from everyone in the community! To get started, please read our CONTRIBUTING.md guide. Whether you're adding a new feature, improving documentation, or fixing a bug, your help and feedback are invaluable.
- Marco Peressutti - @marcope-98