J'ai connecté un récepteur infrarouge à un port USB ... (la dernière ligne de dmesg indique le fichier de l'appareil)
$ 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
Ensuite, j'ai continué à l'essayer ...
$ sudo cat /dev/ttyUSB0
mais pas de sortie, se bloque simplement. Même si, lorsque j'appuie sur n'importe quel bouton de ma télécommande, la LED du récepteur infrarouge clignote, ce qui semble fonctionner.
Pourquoi est-ce possible?
Remarques:
la commande ci-dessus se ferme lorsque je supprime le périphérique du port USB et imprime "cat: ttyUSB0: No such device", 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 fichiers de périphérique pour le clavier, cela fonctionne, par exemple:
$ sudo cat /dev/input/by-id/usb-USB_USB_Keykoard-event-kbd
produit de nombreux caractères étranges sur la console lorsque j'appuie sur n'importe quelle touche du clavier
- il en va de même sur d'autres ports USB
stty raw -echo < /dev/ttyUSB0; cat -vte /dev/ttyUSB0
plutôt.Réponses:
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 sais pas comment faire cela à partir de la ligne de commande afin de se mettre
cat
au travail, mais vous pouvez utiliser un émulateur de terminal qui s'en occupe.Essayez
minicom
ouscreen
(c'est-àscreen /dev/ttyUSB0 115200
- dire - remplacez 115200 par le débit en bauds de votre récepteur IR.)la source
Ne tenez pas compte de la nécessité d'établir une connexion USB - elle a déjà été lancée lorsque vous avez branché l'appareil.
Si vous voulez simplement 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. Utilisezminicom
(CLI, besoin d'un manuel),picocom
(pourrait le comprendre par vous-même),cutecom
(belle interface graphique, facile) ouscreen
(CLI, mais vraiment facile). Vous aurez besoin de connaître le débit en bauds. 90% c'est 115200 ou 9600, pourrait aussi bien être 57600, 38400 ou 19200.Au fait, quel type de récepteur utilisez-vous? Pourriez-vous nous donner un lien vers une page ou une description de produit?
la source
Cela peut ne pas aider, mais voici un problème similaire que j'ai eu dans le passé. Lorsque je récupère le fichier de périphérique pour ma souris directement (c'est-à-dire en utilisant
cat /dev/input/by-id/usb-<mymouse>
), j'obtiens une sortie similaire à ce que vous obtenez avec votre clavier (c'est-à-dire du charabia). Cependant, certains mouvements de la souris, comme le clic gauche, ne génèrent aucun caractère imprimable, donc le terminal n'affiche rien.Bien sûr, la souris fait encore quelque chose, nous ne pouvons tout simplement pas le voir en
cat
utilisant le fichier du périphérique. Heureusement, le noyau a une fonctionnalité intéressante appelée usbmon qui est utile pour l'écoute sur la sortie binaire brute des périphériques USB. En utilisant cela, nous pouvons voir exactement ce qui se passe lorsque nous effectuons (disons) un clic gauche, alors que faire la même chose via via/dev
ne montre souvent rien.Encore une fois, cela peut ne pas aider, mais voici comment utiliser usbmon:
Assurez-vous que votre noyau a activé usbmon. La sortie de:
zcat /proc/config.gz | grep USB_MON
devrait avoir soit
=m
ou=y
en elle.Si c'est le cas
=m
, chargez le module avecsudo modprobe usbmon
Pour vous assurer que toutes les sockets USB s'affichent 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 nombres se réfèrent à différents ports USB, et ceux avec un 0 devant donnent la sortie agrégée de tous les ports USB. Ainsi, par exemple, l'exécution
cat /sys/kernel/debug/usb/usbmon/0u
montre exactement ce que fait l'appareil, même dans les cas oùcat
le fichier/dev
ne montre rien.Que cela résout votre problème ou non, cela peut être utile à l'avenir, car c'est souvent un moyen plus utile d'écouter les périphériques USB que
/dev
.Bonne chance :)
la source
Pour moi, c'était la vitesse de transmission trop basse. 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.
la source
Il me semble que l'USB est un protocole qui nécessite que l'ordinateur initie la communication. Il n'est pas permis de parler seul. Ainsi, le pilote parle réellement dans le périphérique brut, puis capture la sortie. Cependant, ce n'est qu'une intuition, j'attendrai également une autre réponse pour confirmer mes suspensions.
la source