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
|
// | Recupere la configuration du port serie
tcgetattr(port_serie, &options);
// | Vitesse de transmission en Baud (9600 Baud => B9600)
cfsetospeed(&options, B38400);
/* Description des flags dans Termios.h :
options . c_iflag; modes d'entrée
options . c_oflag; modes de sortie
options . c_cflag; modes de contrôle
options . c_lflag; modes locaux
options . c_cc[NCCS]; caractères de contrôle */
// | Declare l'ecoute du port
options.c_cflag |= CREAD;
/* | Desactivation de certaines fonctionnatlitees. Demande un affichage brut des informations
" man termios " pour + d'informations !*/
options.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | ICRNL | IXON );
// ~~ Ces options ne sont pas utile dans notre cas, donc par defaut tous desactiver
options.c_oflag = 0;
// | La valeur du bit canon ICANON de c_lflag détermine si le terminal opère en mode canonique
// (ICANON positionné) ou en mode non canonique (ICANON non positionné). Par défaut, ICANON est positionné.
options.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN);
// | Structure de la liaison rs232 (7 bit, 1 stop, paire)
options.c_cflag &= ~CSTOPB; // Desactive l'utilisation de deux bits de stop plutôt qu'un.
options.c_cflag &= ~CSIZE; // Masque de longueur des caractères.
options.c_cflag |= PARENB; // Valider le codage de parité en sortie, et la vérification de parité en entrée.
options.c_cflag |= PARODD; // S'il est positionné, la parité en entrée et en sortie sera impaire ; sinon, une parité paire sera utilisée.
options.c_cflag |= CS7; // 7 Bits | Les valeurs sont CS5, CS6, CS7 ou CS8.
/*
Fonction | tcsetattr() :
fixe les paramètres du terminal (à moins que le matériel sous-jacent ne le prenne pas en charge) en lisant la structure termios
pointée par termios_p. optional_actions précise quand les changements auront lieu :
Option : TCSANOW
Les modifications sont effectuées immédiatement. */
if ( tcsetattr(port_serie, TCSANOW, &options) == -1)
{
fprintf(stderr, "%s\n", strerror(errno));
}
printf("~~ | Reception des donnees..\n");
// | Mode bloquant pour la fonction read(), attend jusqu'a reception d'une donnee
sock_non_bloquante(port_serie, false);
memset(tmpstr, '\0', sizeof(tmpstr));
do
{
memset(buffer, '\0', sizeof(buffer));
// | Ecoute par block :
// size_read = read(port_serie, buffer, sizeof(buffer)-1);
// | Ecoute par caractere :
size_read = read(port_serie, buffer, sizeof(char));
if ( size_read <= 0 )
{
fprintf(stderr, "%s", strerror(errno));
}
else
{
printf("%c", *buffer);
}
}
while ( 1 );
// | Fermeture du port serie
if (close(port_serie) < 0)
fprintf(stderr, "%s\n", strerror(errno)); |
Partager