Contents
Pacpus tutorials
Foreword
Before reading these tutorials, please have a look at the GettingStarted page in order to install the framework.
Don't forget to check that the environment variable PACPUS_ROOT is well defined in your setup.
The repository containing the tutorials is accessible through the URL in this command:
cd ~ mkdir dev && mkdir pacpus cd dev/pacpus svn co https://devel.hds.utc.fr/svn/pacpustutorials
The repository contains several folders:
- template: you will find here some source codes (CMakeLists.txt, .cpp and .h) useful for the exercises.
- exercises: the wording of each tutorial. The wordings are available below too.
- solutions: the solutions of the exercises (coming soon)
Basic Concepts
Tutorial n°1: Creating your first PACPUS project
Exercise 1.1: your first component
The objective of this exercise is to understand the build process of a PACPUS project. The utility 'cmake' is used to create the Makefile of the project, and finally we use the GNU Compiler Collection to build the plugins.
Goal of this exercise:
Thanks to the different source codes (.cpp, .h and CMakeLists.txt) in the folder 'template', create a new PACPUS project containing just 1 component.
This component may generate a message in the terminal at a user selectable frequency.
Once you have built your plugin, run it in /opt/pacpus/x.y.z/bin folder with the PacpusSensor executable.
Indications:
- You can use QTimer to generate the timer.
- A component can be parametrized in a XML file, it might be useful to change the message display frequency.
- The tree of your project may be something like that:
pacpustutorials | |--> project_exercises | |--> plugin_exercise_1 | |--> CMakeLists.txt |--> component_message |--> MessageComponent.h |--> MessageComponent.cpp | |--> build | |--> build_linux.sh | |--> CMakeLists.txt
Exercise 1.2: FizzBuzz component
todo
pacpustutorials | |--> project_exercises | |--> plugin_exercise_1 | |--> CMakeLists.txt |--> component_message |--> MessageComponent.h |--> MessageComponent.cpp |--> component_fizzbuzz |--> FizzBuzzComponent.h |--> FizzBuzzComponent.cpp | |--> build | |--> build_linux.sh | |--> CMakeLists.txt
Tutorial n°2: Managing the communication of components
Exercise 2.1: communication between components
In this exercise we will develop a new component with one input and one output. The component should add a specific number defined as a parameter to the input value and provide the result as output. Before sending the result on the output it must wait for 1 second. The component will print to the terminal the result of the addition too.
Write the code of this component in a new plugin but use the same pacpus project as the exercise 1. Build and install the plugin in the PACPUS_ROOT/bin folder and execute the plugin with the PacpusSensor application.
Indication:
- Now, the tree of your project may be something like that:
pacpustutorials | |--> project_exercises | |--> plugin_exercise_1 | |--> CMakeLists.txt |--> component_message |--> MessageComponent.h |--> MessageComponent.cpp |--> component_fizzbuzz |--> FizzBuzzComponent.h |--> FizzBuzzComponent.cpp | |--> plugin_exercise_2 | |--> CMakeLists.txt |--> component_addition |--> AdditionComponent.h |--> AdditionComponent.cpp | |--> build | |--> build_linux.sh | |--> CMakeLists.txt
Exercise 2.2: communication of variable size data
Create a new component in the same plugin as the previous one (exercise 2.1). It will have the same functionnality with the difference that it can do an addition on a vector of input values.
Build, install and run this new component.
Indication :
- you can use the QVector class as input/output type.
Exercise 2.3: Threaded component
From the component written in exercise 2.2 create a new component with the same interface. The addition must be done in a separate thread.
Build, install and run this new component.
Indication :
- Your component must inherit from the QThread class.
- Take care of the protection of the data to guarantee a thread safe execution.
Advanced concepts
Soon available...