Outils pour utilisateurs

Outils du site


robotics:computing:linux_asynchronous_serial_programming_how_to

Ceci est une ancienne révision du document !


Introduction

This article describes asynchrous serial programming using signal handler.

References
Hardware used :
Softwares :
  • Ubuntu 10.10 installed on both Roboard and desktop PC : http://www.ubuntu.com/
  • Package build-essential already installed on your Ubuntu operating system.

Asynchronous serial I/O library

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 works :

  • Data are available on the serial port
  • A signal SIGIO is send to applications waiting for it
  • These applications stop their actual work
  • And they call the signal handler

As we can see further in the .cpp file, our serialConfiguration function will define the handler to call when a SIGIO signal is incoming.

robotics/computing/linux_asynchronous_serial_programming_how_to.1297036045.txt.gz · Dernière modification: 2012/09/20 10:52 (modification externe)