Credo di aver trovato la soluzione ma credo solo in parte, il programma è questo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
#include <sys/file.h>
int main(){
int serial_port = open("/dev/ttyACM0",O_RDWR);
if (serial_port < 0) {
printf("Errore %i all'apertura: %s\n", errno, strerror(errno));
}
struct termios tty;
memset(&tty, 0, sizeof tty);
if(tcgetattr(serial_port, &tty) != 0) {
printf("Error %i from tcgetattr: %s\n", errno, strerror(errno));
}
FILE *fd;
char buf[21];
char *res;
//Apertura del file
fd = fopen("lettura","r");
if( fd==NULL){
perror ("Errore apertura del file \n");
exit(1);
}
tty.c_cflag &= ~PARENB; // disabilità bit di parità
//tty.c_cflag |= PARENB; //imposta bit di parità
tty.c_cflag &= ~CSTOPB; //cancella campo di stop, solo un bit di stop
//tty.c_cflag |= CSTOPB; //imposta campo d'arresto, due bit di arresto
tty.c_cflag |= CS8; //8 bits per byte.Quanti bit di dati per byte vengono trasmessi
tty.c_cflag &= ~CRTSCTS; // Disable RTS/CTS hardware flow control
//tty.c_cflag |= CRTSCTS; //abilita
tty.c_cflag |= CREAD | CLOCAL; //Attiva LEGGI e ignora le righe ctrl
tty.c_lflag &= ~ICANON; //modalità canonica disabilitata
tty.c_lflag &= ~ECHO; // Disable echo
tty.c_lflag &= ~ECHOE; // Disable erasure
tty.c_lflag &= ~ECHONL;
tty.c_lflag &= ~ISIG;
tty.c_iflag &= ~(IXON | IXOFF | IXANY);
tty.c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL);
tty.c_oflag &= ~OPOST;
tty.c_oflag &= ~ONLCR;
//tty.c_oflag &= ~OXTABS; // Non presente in linux
//tty.c_oflag &= ~ONOEOT; // NOn presente in linux
tty.c_cc[VTIME] = 10; //Attendi fino a 1 secondo,ritorna non appena vengono ricevo i dati.
tty.c_cc[VMIN] = 0;
cfsetispeed(&tty, B115200);
cfsetospeed(&tty, B115200);
if (tcsetattr(serial_port, TCSANOW, &tty) != 0) { //salva le impostazioni di tty
printf("Error %i from tcsetattr: %s\n", errno, strerror(errno));
}
//Leggere e stampa ogni riga
while(!feof(fd)){
// res = fgets(buf, 21, fd);
fscanf(fd,"%s",buf);
write(serial_port, buf, sizeof(buf));
}
close(serial_port);
//chiusura del file
fclose(fd);
}
e il file contiene:
136#000200000000001B
244#000000013C
188#02000000
136#000200000000001B
136#000200000000001B
136#000200000000001B
136#000200000000001B
136#000200000000001B
136#000200000000001B
136#000200000000001B
244#00000001DF
che si tratta di essere stringhe. Come risultato vedo la prima riga, ma le altre sono incomplete