URL: https://linuxfr.org/users/happypeng/journaux/gnulinux-et-irda Title: GNU/Linux et IRDA Authors: HappyPeng Date: 2004年08月03日T09:28:19+02:00 Tags: Score: 0 Si j'écris ce journal c'est parce qu'avec mes (faibles) capacités il m'a fallu des heures et des heures pour parvenir à faire fonctionner une toute petite partie des capacités de communication entre mon téléphone et mon PC par IRDA, et donc j'ai pensé qu'une telle documentation de base aurait pu m'être utile et donc peut l'être à certains. Bien entendu cette documentation n'est pas exhaustive, et les différents HOWTO que vous pouvez trouver sur le sujet sont bien plus complets (et malheureusement à mon avis plus complexes). J'espère dans tous les cas que si vous vous intéressez au sujet vous trouverez dans ce journal au moins une information utile. Dans tous les cas vos commentaires sont les bienvenus, surtout si vous connaissez un logiciel permettant d'explorer les fichiers du téléphone (le protocole OBEX devrait permettre cela) et si vous savez vous en servir (moi je n'y arrive pas) ou si vous connaissez des GUI agréables pour faire de telles choses (autres qu'un programme Tk impossible à installer qui vous apostrophe en allemand une fois lancé). La première chose pour faire fonctionner l'IRDA sur votre machine est bien entendu de trouver et de charger le module correspondant à votre chipset. Vous en avez toute une panoplie, sur mon laptop Acer Travelmate série 290 il s'agit de smsc-ircc2 (tous les modules se trouve dans la rubrique réseau de la configuration du noyau ; quelque part vous verrez IRDA). Chose importante : l'IRDA doit bien entendu être activé dans votre BIOS, les conflits d'IRQ doivent comme d'habitude être résolus. Mais surtout, sur la plupart des laptops, le chipset qui gère l'IRDA est capable d'émuler un port série et le fait dès que l'IRDA est activé dans le BIOS. Il est donc important que le driver des ports séries ordinaires n'interfère pas. Vous pouvez essayer de régler ça avec setserial, à priori comme ça : setserial /dev/ttySX uart none où /dev/ttySX représente le port série émulé. Ceci dit il paraît que ça peut créer des problèmes, le plus simple par conséquent si vous avez comme moi un laptop ne possédant aucun port série est de décharger le driver du port série standard, dans mon cas je décharge 8250_pci, 8250 et serial. Si vous utilisez hotplug, blacklistez :-) Je charge donc mon module : modprobe smsc-ircc2 Je vois apparaître dans /var/log/syslog : Aug 2 17:44:09 Thor2 kernel: irda_init() Aug 2 17:44:09 Thor2 kernel: NET: Registered protocol family 23 Aug 2 17:44:09 Thor2 kernel: found SMC SuperIO Chip (devid=0x5a rev=00 base=0x002e): LPC47N227 Aug 2 17:44:09 Thor2 kernel: smsc_superio_flat(): fir: 0x230, sir: 0x3f8, dma: 03, irq: 4, mode: 0x0e Aug 2 17:44:09 Thor2 kernel: SMsC IrDA Controller found Aug 2 17:44:09 Thor2 kernel: IrCC version 2.0, firport 0x230, sirport 0x3f8 dma=3, irq=4 Aug 2 17:44:09 Thor2 kernel: smsc_ircc_set_sir_speed(), Setting speed to: 9600 Aug 2 17:44:09 Thor2 kernel: No transceiver found. Defaulting to Fast pin select Aug 2 17:44:09 Thor2 kernel: IrDA: Registered device irda0 S'il vous dit que l'IRDA est désactivé, activez-le dans votre BIOS. Il paraît que certains laptops doivent l'activer hors du BIOS qui ne contient pas cette option ; cherchez sur Google, les outils nécessaires semblent exister. Il est ensuite nécessaire d'activer l'interface correspondante : ifconfig irda0 up Maintenant que l'interface est prête, vous pouvez tenter un transfert de fichiers entre votre périphérique IRDA (compatible avec le protocole OBEX, par exemple mon Sagem MyX 5-2) et votre PC. D'un côté, lancez irdadump (irda-utils), qui va vous permettre de surveiller le trafic de l'interface IRDA, de l'autre, irobex_palm3 (openobex-apps), qui va attendre un transfert de fichier en provenance de votre périphérique. Note : sous Debian, si vous installez irda-utils et que vous n'utilisez pas l'émulation de port série pour l'IRDA, c'est-à-dire si vous utilisez un module tel que celui que je viens de vous indiquer, changez ENABLE="TRUE" pour ENABLE="FALSE" dans /etc/default/irda-utils, cela vous évitera de voir un message d'erreur à chaque démarrage. Ensuite, lancez l'envoi d'un fichier par IRDA sur votre périphérique (sur mon téléphone, je choisis une photo dans l'album, je fais envoyer, je choisis IRDA) et approchez-le du port infrarouge de votre PC. Si cela marche, vous voyez irdadump afficher tout un tas de messages, contenant notamment l'indication OBEX (le dernier étant OBEX SUCCESS), et irobex_palm3 enregistre le fichier transféré dans /tmp et affiche ceci : Send and receive files to Palm3 Waiting for files ..........................................................................................HEADER_LENGTH = 43924 put_done() Skipped header 42 Filename = PC.JPG Wrote /tmp/PC.JPG (43924 bytes) Vous pouvez également faire l'opération inverse en envoyant depuis votre PC un fichier à votre périphérique, en tapant : irobex_palm3 fichier Vous verrez ainsi irdadump s'agiter à nouveau et irobex_palm3 afficher : Send and receive files to Palm3 name=/tmp/Photo 0002.JPG, size=43924 ........................................................................................ PUT successful La réception dépend du périphérique en question. Dans /var/log/syslog, vous voyez des indications de changement de vitesse du port (de 9600 à 115200). Si vous avez un téléphone compatible avec IRCOMM, vous pouvez utiliser gsmctl (gsm-utils) pour récupérer différentes informations et effectuer différentres opérations. Vous devez d'abord charger ircomm-tty. Ensuite, par exemple pour savoir à quel réseau est actuellement relié le téléphone, vous pouvez faire : gsmctl -d /dev/ircomm0 CURROP Vous voyez alors par exemple : Long name: 'Orange F' Short name: 'Orange F' Numeric name: 20801 Mode: automatic Pour récupérer des informations générales sur le téléphone : gsmctl -d /dev/ircomm0 ME Vous voyez par exemple : Manufacturer: SAGEM Model: myX5-2 GPRS Revision: SAGEM KB3,MF ... Et vous pouvez lire vos SMS grâce à la commande suivante : gsmsmsstore -s /dev/ircomm0 -t SM -l Vous pouvez également activer le mode Discovery pour pouvoir laisser votre PC et votre périphérique établir un lien, comme ceci : echo 1 > /proc/sys/net/irda/discovery Vous verrez alors votre irdadump s'agiter avec des messages comme ceux-ci : 16:44:12.819915 xid:cmd 060eda9f > ffffffff S=6 s=* Linux hint=4400 [ Computer LAN Access ] (21) 16:44:15.279549 xid:cmd 060eda9f > ffffffff S=6 s=0 (14) 16:44:15.369527 xid:cmd 060eda9f > ffffffff S=6 s=1 (14) 16:44:15.459511 xid:cmd 060eda9f > ffffffff S=6 s=2 (14) 16:44:15.549502 xid:cmd 060eda9f > ffffffff S=6 s=3 (14) 16:44:15.639491 xid:cmd 060eda9f > ffffffff S=6 s=4 (14) 16:44:15.729475 xid:cmd 060eda9f > ffffffff S=6 s=5 (14) /proc/net/irda/discovery contient le rapport du mode Discovery. Vous ne verrez rien dedans si aucun périphérique n'est à portée du port. Si maintenant vous approchez un périphérique, vous pouvez voir dans votre irdadump des réponses, comme ceci : 16:45:57.784522 xid:rsp 060eda9f < 33ef0bd1 S=6 s=5 SAGEM hint=9025 [ Modem Telephony IrCOMM IrOBEX ] (22) Et vous voyez apparaître votre périphérique dans le rapport : IrLMP: Discovery log: nickname: SAGEM, hint: 0x9025, saddr: 0x060eda9f, daddr: 0x33ef0bd1 Sachez que le mode Discovery consomme de l'électricité, activez-le sur les laptops uniquement lorsque vous avez besoin (c'est également le cas sur les téléphones et autres, lorsque vous ne vous servez pas de l'IRDA, désactivez-le).