Bonjour,
J'ai un petit problème pour lire/érire dans un périphérique usb.
Ce périphérique est reconu via le device /dev/ttyACM0
Quand j'essaye de lire et écrire en même temps via mon programme ça plante car la ressource est déjà utilisé par une des 2 méthodes (lecture ou écriture).
Je cherche donc à créer un port série virtuel via socat ou créer des devices différents via udev. Mais sans résultat d'où ce post...
Ce que j'ai fait:
J'ai testé en créant des devices de type char et bloc en respectant bien la disponibilité des minors et majors. Je me suis dit qu'il fallait bien que les device existent pour faire du socat ou de l'udev
mknod /dev/ttyrx char 4 64
mknod /dev/ttytx char 4 65
ou
mknod -m 0666 /dev/rfxrx b 166 1
mknod -m 0666 /dev/rfxtx b 166 2
En essayant avec socat voilà les messages d'erreurs :
# socat -d -d /dev/ttyACM0,raw,echo=0 /dev/ttytx,raw,echo=0
2012/02/21 11:53:23 socat[25188] N opening character device "/dev/ttyACM0" for reading and writing
2012/02/21 11:53:23 socat[25188] N opening directory "/dev/ttytx" for reading and writing
2012/02/21 11:53:24 socat[25188] E open("/dev/ttytx", 02002, 0666): No such device or address
2012/02/21 11:53:24 socat[25188] N exit(1)
J'ai essayé avec udev en identifiant l'ID de mon périphérique usb via lsusb et j'ai rajouté les lignes adéquats dans /etc/udev/rules.d/50-udev.rules :
KERNEL=="ttyUSB*", SYSFS{idProduct}=="00df", MODE=="666", SYMLINK="ttyrx"
KERNEL=="ttyUSB*", SYSFS{idProduct}=="00df", MODE=="666", SYMLINK="ttytx"
Mais pareil ca marche pas :
stty: /dev/ttytx: Input/output error
Auriez vous la syntaxe exacte de socat que je dois utiliser ? Les types de devices que je dois utiliser ? La méthodologie à suivre (car là je suis parti dans tous les sens pour essayer de faire marcher mon truc, tout via udev ? ou tout via socat ? ou les 2 ?)?? Je voudrais que ces devices soient créés quand je branche ma carte USB (en mode udev) et je voudrais que les devices virtuels soient créés dans la foulée (via socat j'imagine)
Merci d'avance pour toute l'aide que vous pourrez m'apporter
Cordialement
# ttyACM
Posté par NeoX . Évalué à 2.
je crois que la reponse se trouve dans le ttyACM
si je ne m'abuse c'est un modem ou un telephone/modem branché en USB.
ca se comporte donc comme un port Serie, tu fais soit une lecture, soit une ecriture
mais pas les deux en meme temps.
du coup, meme avec socat, je ne suis pas sur que le peripherique derriere ttyACM accepte de gerer une lecture/ecriture en meme temps.
[^] # Re: ttyACM
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à 4.
Référence ? Le série, c'est bidirectionnel il me semble, et socat permet justement cela, contrairement à cat.
[^] # Re: ttyACM
Posté par NeoX . Évalué à 4. Dernière modification le 22 février 2012 à 14:02.
bi-directionnel veut dire "dans les deux sens", tu peux donc lire OU ecrire
je suis d'accord avec toi.
seulement ca ne dit pas qu'on peut faire les deux en meme temps (lire ET ecrire).
Pour les cartes reseaux (il a quelques années deja), ou certaines cartes son.
On precisait alors le mode de "duplex" :
- half duplex : on alterne envoie et reception
- full duplex : on peut recevoir en meme temps qu'on envoie
il faut donc deja verifier qu'un port serie soit full-duplex
pour le coup, je dirais que ca depend des controleurs de chaque coté du cable.
ensuite voir comment ttyACM est censé se comporter (half ou full duplex)
[^] # Re: ttyACM
Posté par webextension . Évalué à 0.
Est-ce qu'un lsusb -v sur le périphérique te permettrait de m'en dire plus (bidirectionnel) ??
[^] # Re: ttyACM
Posté par NeoX . Évalué à 2.
des pistes :
tu es donc censé parler le langage AT (typique des modems) pour causer sur ce peripherique.
il ne te reste plus qu'à voir si le protocole AT-commands permet le full-duplex (lire ET ecrire en meme temps)
[^] # Re: ttyACM
Posté par webextension . Évalué à 0.
Ceci correspond il à ta remarque ?
Port redirector correspond il a ce mode full-duplex ?
[^] # Re: ttyACM
Posté par NeoX . Évalué à 2. Dernière modification le 22 février 2012 à 18:14.
ca te dit juste que ca te fait un port Serie 38400bps/8bits/no parity/1 stop
m'est avis qu'il faut que tu programmes comme si tu avais un port serie à ta disposition.
# [CLOSED] trouvé !!
Posté par webextension . Évalué à 1.
Salut !
Grâce à l'aide d'un pote qui est passé par là, on a trouvé comment faire en utilisant socat :
Via mon programme je suis capable de lire sans que ça plante... J'utilise plus un device mais un port en local. Je ne suis pas encore expert dans l'utilisation de socat, mais ça a l'air méchamment puissant !!
Maintenant faut que je décode ce que je lis et bien sur il faudra que j'écrive dans ce tube...
La suite au prochain numéro, merci à tous pour votre aide et à bientôt pour de nouvelle aventure sous linux ;-)
Webextension
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.