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

0 ответов

Другие вопросы по тегам