Lendo da porta serial da maneira mais simples?

7

Eu tenho um RNG de hardware baseado em USB TrueRNG e estou tentando ler sua saída no Mac OS X 10.9.2. Eu preciso apenas de comunicação unidirecional.

O dispositivo diz que ele aparece como "Porta Serial Virtual do CDC" e, na verdade, eu o vejo como /dev/tty.usbmodem1411 .

Eu nunca consegui cat /dev/tty.usbmodem1411 ; quando eu faço, não recebo nenhuma saída. No entanto, posso usar minicom ou picocom para ler a partir dele. Com picocom , funciona mesmo com --noinit --noreset opções, sugerindo que devo ser capaz de cat desse dispositivo.

Então, meus problemas / perguntas:

  1. Por que não posso cat desse dispositivo?
  2. Embora funcione com minicom e picocom , ele funciona apenas na primeira sessão: se eu fechar um desses programas, reabri-los, eles lerão cerca de 300 bytes e bloquearão para sempre. Se eu fechar e reabrir novamente , eles não poderão ler nada. Quando eu desconectar e reconectar o dispositivo USB, porém, é novamente legível para sempre na primeira tentativa. Por que isso seria, e isso tem a ver com essa citação da documentação do TrueRNG? "Ao limpar o sinalizador DTR na porta serial virtual, o fluxo de dados será interrompido. O fluxo de dados será retomado quando o DTR for definido."
  3. Eu quero ver os dados aleatórios em hexadecimal. Então eu tento este comando: picocom /dev/tty.usbmodem1411 | xxd -p . A saída, no entanto, não parece respeitar o caractere de nova linha; apenas o retorno do carro. Ele se move para a próxima linha sem voltar ao início da linha. Eu preferiria que fosse contínuo.

Veja alguns diagnósticos:

% stty -a -f /dev/tty.usbmodem1411
speed 9600 baud; 0 rows; 0 columns;
lflags: -icanon -isig -iexten -echo -echoe -echok -echoke -echonl
        -echoctl -echoprt -altwerase -noflsh -tostop -flusho -pendin
        -nokerninfo -extproc
iflags: -istrip -icrnl -inlcr -igncr -ixon -ixoff -ixany -imaxbel -iutf8
        -ignbrk -brkint -inpck -ignpar -parmrk
oflags: -opost -onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb crtscts -dsrflow
        -dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
    
por Philip 26.04.2014 / 23:36

1 resposta

1

Aparentemente, eu precisava usar /dev/cu.usbmodem1234 em vez de dev/tty.usbmodem1234 . Obrigado pela solução para a empresa que fabrica este dispositivo .

    
por 29.04.2014 / 08:46