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 92 93 94
| #include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <time.h>
#include <sys/time.h>
#include <time.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
#define OFFSET 47700
int main(void)
{
int port_serie=0;
int reception=0;
int i=0, calcul=0,rc=0,rv;
char buffer[36] = "";
char verif[7] ="";
struct timeval times;
struct timezone timezs;
struct timeval timeg;
struct timezone timezg;
struct termios options;
fd_set set;
FD_ZERO(&set); /* clear the set */
FD_SET(port_serie, &set); /* add our file descriptor to the set */
struct timeval timeout;
timeout.tv_sec = 5;
timeout.tv_usec = 0;
time_t timestamp = time(NULL);
// Paramètres concernant la zone géographique. On n'y touche pas.
timezs.tz_minuteswest=0;
timezs.tz_dsttime=0;
// lecture et ecriture | pas controlling terminal | ne pas attendre DCD
port_serie = open("/dev/ttySP4", O_RDWR | O_NOCTTY | O_NONBLOCK | O_NDELAY);
if(port_serie < 0 ) //cas d'erreur d'ouverture
{
perror("Erreur d'ouverture du port serie, veuillez verifier que l'antenne est bien branché :");
exit(-1);
}
else // cas ouverture réussie
{
tcgetattr(port_serie, &options);//chargement des données
cfsetospeed(&options, B4800);//B4800 bauds
options.c_cflag |= (CLOCAL | CREAD);//programme propriétaire du port
// structure en 8N1 !!
options.c_cflag &= ~PARENB; //pas de parité
options.c_cflag &= ~CSTOPB; // 1 bit de stop
options.c_cflag &= ~CSIZE; //option a 0
options.c_cflag |= CS8; //8 bits
tcsetattr(port_serie, TCSANOW, &options); //enregistrement des valeurs de configuration du port serie 1
printf("Configuration OK strcuture en 8N1 !. \n");
do
{
calcul =0; //On réinitialise la variable qui sert à calculer le checksum
tcflush(port_serie,TCIFLUSH);// On vide à chaque fois le buffer du port série en entrée
fcntl(port_serie,F_SETFL,10); //La fonction read est en mode bloquant. On attend tant qu'on ne reçoit pas de caractères.
rv = select(port_serie +1, &set,NULL,NULL, &timeout);
if(rv == -1)
perror("select"); /* an error accured */
else if(rv == 0)
printf("timeout"); /* a timeout occured */
else
{
reception=read(port_serie,buffer,34);// On vient lire 34 octets placés dans le buffer provenant du port série.
}
}while(1);
}
close(port_serie);
return 0;
} |
Partager