====== flink Userspace Library ======
* [[https://github.com/flink-project/flinklib | flink Userspace Library on Github]]
This is the user documentation for the flink userspace library in C. It provides a device and bus independent interface to the underlying driver modules. For more information about the inner workings see [[https://github.com/flink-project/flinklib | flink Userspace Library on Github]]. The API of the library can be found under [[http://api.flink-project.ch/doc/flinklib/html|API]]
===== Overview =====
* [[.:flink_lib:high_level_example | Use GPIO using high-level API]]
* [[.:flink_lib:low_level_example | Use low-level API for custom function]]
When flink is used on a Linux based system the flink userspace library offers an simple interface to communicate with the underlying kernel modules. The userspace library is split in two parts.
* High-Level API: Interface to predefined subdevices, such as PWM or GPIO.
* Low-Level API: Can be used to access user-defined subdevices.
[{{ libraryapis.png?220 | //High-level and low-level API//}}]
The library must be built for the desired target platform architecture.
===== Requirements =====
* Linux based operating system
* GCC 4.6 or newer
* CMake 2.8 or newer
* GNU make
===== Building =====
- Clone git repository and all submodules: git clone https://github.com/flink-project/flinklib.git --recursive
cd flinklib
git submodule init
git submodule update
- Checkout a stable versiongit checkout v1.1.2
- Create a build directory: mkdir build-local
- Change to the build directory and setup your build environment with CMake: cmake ..
Optional: you can specify an installation prefix path with cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/local/ ..
- Build the source code: make
===== Building for a different platform architecture =====
- Clone git repository and all submodules: git clone https://github.com/flink-project/flinklib.git --recursive
cd flinklib
git submodule init
git submodule update
- Checkout a stable version git checkout v1.1.2
- Create a build directory for the target platform, e.g.: mkdir build-powerpc
- Create a CMake toolchain file. For more informations, please have a look at the [[http://www.cmake.org/Wiki/CMake_Cross_Compiling|CMake Wiki]]. This file has to specify which compiler has to be used and where it can be found on the system.
- Change to the build directory and setup your build environment with CMake: cmake -DCMAKE_TOOLCHAIN_FILE:PATH=/path/to/your/toolchain/file.cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr/powerpc-linux-gnu/ ..
- Build the source code: make
===== Generating the documentation =====
Create the makefile with cmake (in the root directory): cmake .
After this generate the documentation as given in the ''Doxyfile'' by : make doc
===== Installation =====
Install the library and header files on your system: make install
===== Using a flink Device =====
A flink device must be opened before use (see [[flink_lib:high_level_example|Example using high-level API]]).
flink_dev* dev = flink_open("/dev/flink0");
As a next step one has to choose an appropriate subdevice. This could be done by
flink_subdev* subdev = flink_get_subdevice_by_id(dev, 2);
Here, the second subdevice is selected. You could also select a subdevice by its uniqe id. flink_subdev* subdev = flink_get_subdevice_by_unique_id(dev, 0x23a5);
Here, the subdevice with ''unique_id = 0x23a5'' is selected. This has the advantage that this unique_id does not change even in the case where subdevices are arranged differently in a FPGA design.
Now you can communicate with this selected subdevice. Assuming that it's of type GPIO you could configure it as an input or output.
flink_dio_set_direction(subdev, 0, true);
flink_dio_set_value(subdev, 0, false);
This sets channel 0 to output and writes a logical 0.As a last step you have to close the device.
flink_close(dev);