====== Using the HAL with the GPIO Subsystem ======
In the EEROS library you will find a directory with examples. For this example see [[https://github.com/eeros-project/eeros-framework/blob/master/examples/hal/HalTest4.cpp|HalTest4.cpp]].
The system either uses real hardware inputs and output or makes use of a simulated gpio device. You need to install the necessary wrapper library for gpio, see [[getting_started:install_wrapper|]].
When using a simulated gpio device, make sure to load the kernel driver first and then create the device with
$ sudo modprobe gpio-sim
$ sudo mkdir /sys/kernel/config/gpio-sim/ofagpio
$ sudo mkdir /sys/kernel/config/gpio-sim/ofagpio/bank0
$ echo 32 | sudo tee /sys/kernel/config/gpio-sim/ofagpio/bank0/num_lines
$ echo 1 | sudo tee /sys/kernel/config/gpio-sim/ofagpio/live
Make sure that your local user has access to the device file.
$ sudo chown $USER:$USER /dev/gpiochip0
Open a shell in the build directory of your EEROS library and run
$ ./examples/hal/halTest4 -c HalTest4ConfigGpio.json
It will start in safety level //slOne// and mirror the digital input channel 1 to output channel 0. You can check this behavior with
$ echo pull-up | sudo tee /sys/devices/platform/gpio-sim.0/gpiochip0/sim_gpio1/pull
or
$ echo pull-down | sudo tee /sys/devices/platform/gpio-sim.0/gpiochip0/sim_gpio1/pull
while reading the state of channel 0 with
$ cat /sys/devices/platform/gpio-sim.0/gpiochip0/sim_gpio0/value
Next, change the state of channel 16. This is a critical input in the safety system and causes a transition to safety level //slTwo// when pulled up.
$ echo pull-up | sudo tee /sys/devices/platform/gpio-sim.0/gpiochip0/sim_gpio16/pull
To change back to //slOne// change the level back to '0'.
$ echo pull-down | sudo tee /sys/devices/platform/gpio-sim.0/gpiochip0/sim_gpio16/pull