EasyVR последовательное соединение с Linux
Я работаю на устройстве EasyVR (система распознавания голоса) и пытаюсь установить связь с моим компьютером через последовательное соединение. Если я отправлю b
Я должен получить o
,
Я написал программу на C, чтобы сделать это, и я могу отправить b
, но read
функция не работает. С помощью осциллографа я увидел, что отправляю хороший символ и получаю o
тоже. Я также тестировал с gtkterm, и мой EasyVR работал хорошо.
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
int main(void)
{
int port_serie;
struct termios options;
int reception=1;
/*char buffer[10];*/ char buffer ='m';
char data = 'b'; //message que tu veux envoyer
port_serie = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);//lecture et ecriture | pas controlling terminal | ne pas attendre DCD
//cas d'erreur d'ouverture
if(port_serie < 0)
{
perror("Erreur d'ouverture du port serie");
exit(EXIT_FAILURE);
}
else
{
printf("Port serie numero %d bien ouvert. \n", port_serie);
//chargement des données
tcgetattr(port_serie, &options);
//9600 bauds
cfsetospeed(&options, B9600);
cfsetispeed(&options, B9600);
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
options.c_cflag &= ~CRTSCTS;// pas de flow de controle
tcsetattr(port_serie, TCSANOW, &options); //enregistrement des valeurs de configuration
printf("Configuration OK strcuture en 8N1 !. \n");
//while(buffer !='o'){
// Envoie de donnees.
printf("Envoie des donnees en cours ... \n");
if (write(port_serie,&data, 1) < 0){perror("ERROR\n");}
printf("Envoie Termine. \n");
// Lecture des donnees.
printf("Lecture des donnees en cours ... \n");
fcntl(port_serie,F_SETFL,1);//mode bloquant pour la fonction read() si aucun caractere dispo, programme attend
reception=read(port_serie,buffer,sizeof(buffer));
printf("message recu : %c\n",buffer);
if (reception == -1){
printf("Erreur lecture port serie\n");
printf("Reception finie.\n" );sleep(1);
//}
}
close(port_serie);//fermeture du port serie
return 0;
}
отредактированный код: 01/22 10:50