Liaison RS232 en C sous linux
Bonjour, je suis en fin de 2éme année de BTS IRIS (Informatique et Réseaux pour l'Industrie et les Services Techniques.)
Afin de cloturer mon rapport de projet, he fais appel à vous. Lors de mon projet, j'ai repris du code du projet commencé l'année précédesnte, il s'agit d'une liaisopn entre un systeme embarqué type foxboard avec linux et un écran tactile.
La partie qui me pose probleme est la configuration de la liaison rs232C entre le systeme et l'écran, le code fonctionne mais je ne le comprend pas.
Le voici :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "sys/fcntl.h"
#include "unistd.h"
#include "string.h"
#include "errno.h"
#include "termios.h"
#include "sys/types.h"
#include "ilcd.h"
extern int fd_ilcd; // Parametre de la liaison
extern struct termios old_attr; // Structure d'initialisation
/*======================================================================
** Nom : Init_Ilcd
** Description : initialise l'écran tactile
** ---------------------------------------------------------------------
** Parametres : 1[S]
** 1[S] : code erreur
**======================================================================*/
int Init_Ilcd ()
{
fd_ilcd = Open_Ilcd( PORT_ILCD );
return ILCD_OK;
}
/*======================================================================
** Nom : Open_Ilcd
** Description : ouvre la liaison avec l'cran tactile
** ---------------------------------------------------------------------
** Parametres : 1[E] 1[S]
** 1[E] : chemin du peripherique
** 1[S] : descripteur de la liaison
**======================================================================*/
int Open_Ilcd (char* port_dev)
{
struct termios new_attr;
int fd;
fd = open( port_dev, O_RDWR| O_NOCTTY | O_NONBLOCK );
if (fd < 0)
{
fprintf( stderr, "Ouverture impossible du port serie : %s\n", strerror(errno) );
exit( EXIT_FAILURE);
}
else
{
tcgetattr( fd, &old_attr );
tcgetattr( fd, &new_attr );
// Modification des paramtres du port serie
new_attr.c_cflag |= CREAD;
// Enable receiver
new_attr.c_cflag |= B115200;
// Set baud rate
new_attr.c_cflag |= CS8;
// 8 data bit
new_attr.c_iflag |= IGNPAR;
// Ignore framing errors and parity errors.
new_attr.c_lflag &= ~(ICANON);
// DISABLE canonical mode.
// Disables the special characters EOF, EOL, EOL2,
// ERASE, KILL, LNEXT, REPRINT, STATUS, and WERASE, and buffers by lines.
new_attr.c_lflag &= ~(ECHO);
// DISABLE this: Echo input characters.
new_attr.c_lflag &= ~(ECHOE);
// DISABLE this: If ICANON is also set, the ERASE character erases the preceding input
// character, and WERASE erases the preceding word.
new_attr.c_lflag &= ~(ISIG); // DISABLE this: When any of the characters INTR, QUIT, SUSP,
// or DSUSP are received, generate the corresponding signal.
new_attr.c_cc[VMIN]=1;
// Minimum number of characters for non-canonical read.
new_attr.c_cc[VTIME]=0;
// Timeout in deciseconds for non-canonical read.
tcsetattr( fd, TCSANOW, &new_attr );
}
return fd;
} |
Voilà, si quelqu un peut éclairer ma lanterne surtout sur la derniére méthode, sur le rôle et la signification des paramêtres, je l'en remercie d'avance