Pourquoi "chat ttyUSB0" ne produit-il pas de sortie?

J'ai connecté un récepteur infrarouge à un port USB … (la dernière ligne de dmesg indique le file de périphérique)

$ 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 ssortingngs: 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 

Puis je suis allé l'essayer …

 $ sudo cat /dev/ttyUSB0 

mais pas de sortie, se bloque simplement. Même si, lorsque j'appuie sur un button de ma télécommand, le voyant du récepteur infrarouge clignote, cela semble fonctionner.

Pourquoi cela pourrait-il être?


Remarques:

  • la command ci-dessus se ferme lorsque je retire le périphérique du port USB et imprime "cat: ttyUSB0: Aucun périphérique de ce type", et dmesg imprime 3 lignes:

      [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) 
  • avec les files de périphérique pour le keyboard cela fonctionne, par exemple:

      $ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd 

    produit beaucoup de caractères bizarres sur la console que j'appuie sur n'importe quelle touche du keyboard

  • Même chose sur d'autres ports USB

Je pense que pour les périphériques série, vous devez définir le débit en bauds avant de faire quoi que ce soit. Je ne suis pas sûr de savoir comment faire cela à partir de la command line afin d'get le cat au travail, mais vous pouvez utiliser un émulateur de terminal qui prend soin d'elle.

Essayez le minicom ou l' screen (c.-à-d. screen /dev/ttyUSB0 115200 – remplacez 115200 par le débit en bauds de votre récepteur IR).

Ne tenez pas count de la nécessité d'établir une connection USB – elle a déjà été lancée lorsque vous avez branché l'appareil.

Si vous voulez juste vérifier si cela fonctionne, utilisez dd if=/dev/ttyUSB0 . Si vous voulez réellement lire ces caractères, vous avez besoin d'un terminal série. Utilisez minicom (CLI, besoin manuel), picocom (pourrait le comprendre par vous-même), cutecom (interface graphique agréable, facile) ou screen (CLI, mais vraiment facile). Vous aurez besoin de connaître la vitesse de transmission .. 90%, soit 115200 ou 9600, soit 57600, 38400 ou 19200.

Au fait, quel type de récepteur utilisez-vous? Pourriez-vous nous donner un lien vers une page de produit ou une description?

Cela peut ne pas aider, mais voici un problème similaire que j'ai eu dans le passé. Quand je cat /dev/input/by-id/usb-<mymouse> directement le file du périphérique pour ma souris (c.-à-d., En utilisant cat /dev/input/by-id/usb-<mymouse> ) je reçois un résultat semblable à celui obtenu avec votre keyboard. Cependant, certains mouvements de la souris, comme le clic gauche, ne génèrent aucun caractère imprimable, de sorte que le terminal ne montre rien.

Bien sûr, la souris est toujours en train de faire quelque chose, nous ne pouvons pas le voir en cat le file du périphérique. Heureusement, le kernel dispose d'une fonctionnalité ordonnée appelée usbmon qui est utile pour l'écoute sur la sortie binary brute des périphériques USB. En utilisant cela, nous pouvons voir exactement ce qui se passe lorsque nous effectuons (par exemple) un clic gauche, alors que faire la même chose via /dev ne montre souvent rien.

Encore une fois, cela peut ne pas aider, mais voici comment utiliser usbmon:

  1. Assurez-vous que votre kernel a usbmon activé. La sortie de:
    zcat /proc/config.gz | grep USB_MON
    devrait avoir soit =m ou =y dedans.

  2. Si c'était =m , chargez le module avec sudo modprobe usbmon

  3. Pour vous assurer que toutes les sockets usb apparaissent au bon endroit, exécutez:
    ls /sys/kernel/debug/usb/usbmon
    Vous devriez voir quelque chose comme:
    0s 0u 1s 1t 1u 2s 2t 2u 3s 3t 3u 4s 4t 4u

Les différents numéros se réfèrent à différents ports USB, et ceux avec un 0 à l'avant donnent la sortie agrégée de tous les ports USB. Ainsi, par exemple, exécuter cat /sys/kernel/debug/usb/usbmon/0u montre exactement ce que fait le périphérique, même dans les cas où le cat dans le file /dev ne montre rien.

Que cela résoud votre problème ou non, il peut être utile à l'avenir, car c'est souvent un moyen plus utile d'espionner les périphériques USB que /dev .

Bonne chance 🙂

Pour moi, c'était le débit en bauds trop bas. La sortie est apparue une fois que j'ai reconfiguré le système (périphérique et port) pour utiliser 300 au lieu de 150.

Il me semble callbacker que l'USB est un protocole qui nécessite que l'ordinateur initie la communication. Il n'est pas permis de parler tout seul. Ainsi, le conducteur parle réellement dans le périphérique brut et capture ensuite la sortie. Cependant, ce n'est qu'une intuition, j'attendrai une autre réponse pour confirmer mes suspensions.