Ceci est une ancienne révision du document !
This article describes asynchrous serial programming using signal handler.
The following code is very simple. There is just one function to initialize the serial communication.
Only serial port device, baudrate and if there is a parity checking can be set.
Everything else is hard coded, supposing we use 8 bits of data, 1 stop bit and a prefix on parity error.
Then it results in a very simple header file serialCom.h :
#ifndef _SERIALCOM_H_ #define _SERIALCOM_H_ #ifdef __cplusplus extern "C" { #endif #include <termios.h> /* Controls : CS8 = 8 bits * CREAD = Enable reading */ #define SERIAL_CONTROL (CS8 | CREAD) /* Input : PARMRK = If IGNPAR is not set, prefix a character with a parity error or framing error with \377 \0 */ #define SERIAL_INPUT PARMRK /* Handler type definition */ typedef void (*serial_handler)(int status); /* Serial port initialization function */ int serialConfiguration(serial_handler, const char* device, tcflag_t baudrate, char parity); #ifdef __cplusplus } #endif #endif
But the most important thing is the definition of a signal handler function type. All signal handlers return nothing and take one integer in parameter. This integer is the signal which throws the interruption. Here is a light description of how signals work :
As we can see further in the .cpp file, our serialConfiguration function will define the handler to call when a SIGIO signal is incoming.