Lê dados seriais continuamente e armazena-os em um arquivo ou buffer

1

Estou tentando ler dados continuamente da porta serial e salvá-los em um arquivo e / ou em um arquivo. Além disso, esses dados são um fluxo de caracteres HEX e não ASCII. Eu estou usando um chip que é executado debian. Eu conectei a porta serial (UART) em /dev/ttyS0 (é onde e como eu lerei os dados). Estou tentando codificá-lo em C.

Eu sou capaz de ler uma parte dos dados, mas não tenho certeza do que é, pois não consigo gravar em um arquivo de texto e também quando tento imprimir no console, os dados não estão em formato legível os dados estão em HEX e consola as cadeias de caracteres. É possível imprimir caracteres hexadecimais?

Além disso, quando eu tento ler a porta continuamente, o buffer apenas mantém o primeiro valor e exibe (imprime) o mesmo valor para todas as leituras, mas quando eu conecto a saída de dados a uma janela putty, posso ver o fluxo de dados e também pode ver caracteres hexadecimais ao visualizar dados brutos usando a ferramenta de monitoramento de dispositivos.

Como posso armazenar os dados recebidos continuamente na porta serial?

#debian version
$ cat /etc/issue
Debian GNU/Linux 8 \n \l

$ cat /etc/debian_version
8.6

Snippet de código:

main()
{
char *portname = "/dev/ttyS0" //Serial port connected(UART)
int fd = open (portname, O_RDWR | O_NOCTTY | O_NONBLOCK);
if (fd < 0)
{
        perror ("error %d opening %s: %s", errno, portname, strerror (errno));
        return;
}
// *these two functions are used to set attributes for serial communication.*
set_interface_attribs (fd, B115200, 0);  // set speed to 115,200 bps, 8n1 (no parity)
set_blocking (fd, 0);                // set no blocking

char buf [100];
printf("Reading data on serial port");
int n;
while(1)
{
    n = read (fd, &buf, sizeof(buf));  // read up to 100 characters if ready to read
    puts(buf);
}
return 0;
}

configuração de interface

    tty.c_cflag = (tty.c_cflag & ~CSIZE) | CS8;     // 8-bit chars
    // disable IGNBRK for mismatched speed tests; otherwise receive break
    // as 
#debian version
$ cat /etc/issue
Debian GNU/Linux 8 \n \l

$ cat /etc/debian_version
8.6
0 chars tty.c_iflag &= ~IGNBRK; // disable break processing tty.c_lflag = 0; // no signaling chars, no echo, // no canonical processing tty.c_oflag = 0; // no remapping, no delays tty.c_cc[VMIN] = 0; // read doesn't block tty.c_cc[VTIME] = 5; // 0.5 seconds read timeout tty.c_iflag &= ~(IXON | IXOFF | IXANY); // shut off xon/xoff ctrl tty.c_cflag |= (CLOCAL | CREAD);// ignore modem controls, // enable reading tty.c_cflag &= ~(PARENB | PARODD); // shut off parity tty.c_cflag |= parity; tty.c_cflag &= ~CSTOPB; //one stop bit tty.c_cflag &= ~CRTSCTS;

Alguém pode ajudar !!!!!

Obrigado antecipadamente ...

    
por sachin 28.02.2017 / 18:12

0 respostas