Conectei um receptor infravermelho a uma porta USB ... (a última linha do dmesg informa o arquivo do dispositivo)
$ dmesg
[10496.596063] usb 7-2: new full-speed USB device number 2 using uhci_hcd
[10496.751112] usb 7-2: New USB device found, idVendor=0df7, idProduct=0620
[10496.751117] usb 7-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10496.751120] usb 7-2: Product: USB-Serial Controller
[10496.751124] usb 7-2: Manufacturer: Prolific Technology Inc.
[10496.787441] usbcore: registered new interface driver usbserial
[10496.787467] usbcore: registered new interface driver usbserial_generic
[10496.787483] usbserial: USB Serial support registered for generic
[10496.795104] usbcore: registered new interface driver pl2303
[10496.795129] usbserial: USB Serial support registered for pl2303
[10496.795160] pl2303 7-2:1.0: pl2303 converter detected
[10496.807238] usb 7-2: pl2303 converter now attached to ttyUSB0
Então eu tentei ...
$ sudo cat /dev/ttyUSB0
mas nenhuma saída, simplesmente trava. Mesmo assim, ao pressionar qualquer botão no controle remoto, o LED do dispositivo receptor infravermelho pisca, o que parece funcionar.
Por que poderia ser isso?
notas:
o comando acima é encerrado quando eu removo o dispositivo da porta USB e imprimo "cat: ttyUSB0: Não existe esse dispositivo" e o dmesg imprime 3 linhas:
[13707.264086] usb 7-2: USB disconnect, device number 2 [13707.264894] pl2303 ttyUSB0: pl2303 converter now disconnected from ttyUSB0 [13707.264915] pl2303 7-2:1.0: device disconnected)
com os arquivos de dispositivo do teclado, isso funciona, por exemplo:
$ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
produz muitos caracteres estranhos no console enquanto pressiono qualquer tecla do teclado
- o mesmo acontece em outras portas USB também
stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
vez disso.Respostas:
Eu acho que para dispositivos seriais você precisa definir a taxa de transmissão antes que eles façam qualquer coisa. Não sei ao certo como fazer isso na linha de comando para começar
cat
a trabalhar, mas você pode usar um emulador de terminal que cuida disso.Tente
minicom
ouscreen
( ou seja,screen /dev/ttyUSB0 115200
substitua 115200 pela taxa de transmissão do seu receptor de IR).fonte
Desconsidere a resposta sobre a necessidade de iniciar a conexão USB - ela já foi iniciada quando você conectou o dispositivo.
Se você quiser apenas verificar se está funcionando, use
dd if=/dev/ttyUSB0
. Se você realmente deseja ler esses caracteres, precisa do terminal serial. Useminicom
(CLI, manual necessário),picocom
(pode descobrir por conta própria),cutecom
(interface gráfica agradável, fácil) ouscreen
(CLI, mas realmente fácil). Você precisará conhecer a taxa de transmissão. 90% é 115200 ou 9600, e pode ser 57600, 38400 ou 19200.A propósito, que tipo de receptor você está usando? Você poderia nos fornecer um link para uma página ou descrição de produto?
fonte
Isso pode não ajudar, mas aqui está um problema semelhante que tive no passado. Quando seleciono o arquivo do dispositivo para o mouse diretamente (ou seja, usando
cat /dev/input/by-id/usb-<mymouse>
), recebo uma saída semelhante à do teclado (ou seja, sem sentido). No entanto, alguns movimentos do mouse, como o clique esquerdo, não geram caracteres imprimíveis, portanto o terminal não mostra nada.Obviamente, o mouse ainda está fazendo algo, simplesmente não podemos vê-lo através
cat
do arquivo do dispositivo. Felizmente, o kernel possui um recurso interessante chamado usbmon, que é útil para espionar a saída binária bruta dos dispositivos usb. Usando isso, podemos ver exatamente o que está acontecendo quando executamos (digamos) um clique esquerdo, enquanto fazer o mesmo via/dev
muitas vezes não mostra nada.Novamente, isso pode não ajudar, mas eis como usar o usbmon:
Verifique se o seu kernel tem o usbmon ativado. A saída de:
zcat /proc/config.gz | grep USB_MON
deve ter um
=m
ou=y
nele.Se foi
=m
, carregue o módulo comsudo modprobe usbmon
Para garantir que todos os soquetes USB estejam aparecendo no lugar certo, execute:
ls /sys/kernel/debug/usb/usbmon
Você deve ver algo como:
0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u
Os números diferentes referem-se a diferentes portas USB, e aqueles com um 0 na frente fornecem a saída agregada de todas as portas USB. Por exemplo, a execução
cat /sys/kernel/debug/usb/usbmon/0u
mostra exatamente o que o dispositivo está fazendo, mesmo nos casos em quecat
o arquivo/dev
não mostrou nada.Se isso resolve o seu problema ou não, pode ser útil no futuro, já que geralmente é uma maneira mais útil de interceptar dispositivos USB do que
/dev
.Boa sorte :)
fonte
Para mim, a taxa de transmissão era muito baixa. A saída apareceu depois que eu reconfigurei o sistema (dispositivo e porta) para usar 300 em vez de 150.
fonte
Lembro-me de que o USB é um protocolo que requer que o computador inicie a comunicação. Não é permitido falar por conta própria. Portanto, o driver realmente fala no dispositivo bruto e captura a saída. No entanto, isso é apenas um palpite, também vou esperar por outra resposta para confirmar minhas suspeitas.
fonte