Nokia 3650 & IrDA Linux sur Toshiba Satellite Pro 4200 Series (4220 xcdt)

Préambule...

Cette page n'a pas la prétention d'avoir la qualité d'un HOWTO ou d'un document de référence. C'est seulement une "recette" - je n'ai pas tellement le temps de faire mieux malheureusement. Cette "recette" fonctionne (pour moi !) pour le Toshiba Satellite Pro 4200 Series (4220 xcdt) sous Mandrake Linux 9.1 [Mise à jour 2005 cette page est toujours valide avec les versions les plus récentes Mandrakelinux 10.1 et Mandriva LE2005] avec le fabuleux Nokia 3650 (fabuleux car il intègre plein de technos intéressantes comme Bluetooth, GPRS, un appareil photo numerique très correct, le support des applis Java... et qu'on peut l'avoir pour pas trop cher avec un renouvellement de forfait). Tout ça pour dire que la recette qui a fonctionné ici ne va pas forcément fonctionner pour vous, par contre vous pouvez vous en inspirer.

Avant tout, quelques considérations et quelques infos précieuses pour ceux qui comme moi ont un portable dont le modèle n'est pas si répandu que ça: le Toshiba Satellite Pro 4200 Series (4220 xcdt). Tout d'abord il faut être clair : IrDA sous Linux c'est franchement pas la joie. En gros, il y a environ un cas particulier pour chaque modèle de portable. Donc en général les configs par défaut, comme dans la Mandrake 9.1, ne fonctionnent pas - et méme la lecture du Linux IrDA HOWTO ou de IrDA quick tutorial ne sont pas suffisantes pour arriver à ses fins. On a vite fait de penser que son matériel ne fonctionnera jamais, même si il y a toujours une solution (sous Linux ;)).

Tout d'abord, chers possesseurs de Toshiba Satellite Pro 4200 (4220 xcdt) vous devez savoir une chose : votre équipement IrDA fonctionne bel et bien sous Mandrake Linux, sans même avoir besoin de recompiler votre noyau. C'est juste une question de configuration !

Par ailleurs, il faut savoir que l'équipement infrarouge utilisé sur ce portable est du FIR (Fast Infra Red), et non pas SIR. Il semble également que cet équipement se retrouve sur la plupart des portables Toshiba sortis dans les années 2000/2001/2002 (et peut-être encore actuellement). Où est-ce que je veux en venir ? Et bien ça veut dire que la "recette" que je vais vous donner sur cette page va vraisemblablement pouvoir servir à beaucoup d'utilisateurs de laptops Toshiba sous Linux :-)

On commence...

Tout d'abord il peut être intéressant de constater que vous avez bel et bien un équipement infrarouge sur votre portable, et quel est-il. Pour celà il y a un moyen qui s'appelle "lspci". Lspci liste tous les périphériques PCI (Lspci est dans le package "pciutils" - s'il n'est pas installé, installez-le : "urpmi pciutils") Voici ce que donne cette commande sur mon portable :


[root@europe gael]# lspci -v

(...)

00:09.0 IRDA controller: Toshiba America Info Systems FIR Port Type-DO
        Subsystem: Toshiba America Info Systems FIR Port Type-DO
        Flags: bus master, slow devsel, latency 64, IRQ 11
        I/O ports at ff60 [size=32]
        Capabilities: [80] Power Management version 2


Là on constate que 1) il y a bien un controlleur IrDA sur la machine 2) qu'il est bien listé dans les périphériques PCI 3) qu'il s'agit bien d'un périphérique de type "FIR" (Fast Infra Red) 4) qu'il s'agit d'un modèle "Type-DO" (sur les anciens Toshiba, ce sont des "Type-O" 4) qu'il est sur l'IRQ 11 etc.

A ce stade, il faut quand même avant toutes choses installer le package "irda-utils" (urpmi irda-utils). Ce package contient en particulier les utilitaires "irattach" qui permet de lancer IrDA, et "irdadump" qui permet de chercher des sources IR.

Alors pour rigoler, étant donné que 1) vous avez un périphérique IrDA 2) vous avez les utilitaires IrDA installés et que 3) vous avez la rolls des distribs Linux bien en mains : essayez de lancer IrDA !

Pour cela, la commande magique c'est "/etc/rc.d/init.d/irda start". Si tout se passe bien vous devriez maintenant voir une nouvelle interface irda0 apparaître en lançant ifconfig:


[root@europe gael]# ifconfig

(...)

irda0     Lien encap:IrLAP  HWaddr 2e:74:93:28
          UP RUNNING NOARP  MTU:2048  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:8
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
        
(...)

C'est très beau et on se dit qu'on n'est pas loin de faire marcher le bazard ! Sauf qu'on n'y est pas du tout, et pour ça il suffit de faire deux petits tests :

1) le test logique...

  • Mettez un périphérique IrDA bien en vue du port infrarouge qui se situe derrière le Toshiba. Pas la peine de passer deux heures à vérifier que c'est bien aligné, c'est comme de la lumière sauf qu'on ne la voit pas donc même avec un angle ça marchera (si ça doit marcher).
  • Actionnez IrDA sur ce périphérique. Exemple sur un Nokia 6100, il faut aller dans le menu, sélectionner "Infrarouge" et "Entrer". On voit alors sur l'écran du portable une petite icone symbolisant des ondes, et cette icone va clignoter pendant quelques dizaines de secondes. Sur le 3650, il faut aller dans "Connectivité" et sélectionner "Infrarouge". Comme avec le 6100 il y a alors un petit témoin IR qui va clignoter pendant quelques secondes.
  • Maintenant tapez la commande magique qui permet de détecter les copains qui parlent en IrDA : irdadump

    Résultat... Si vous avez ça ou similaire :

    
    [root@europe gael]# irdadump
    12:50:41.787433 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    12:50:41.877431 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    12:50:41.967431 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    12:50:42.057432 xid:cmd 2e749328 > ffffffff S=6 s=3 (14)
    12:50:42.147848 xid:cmd 2e749328 > ffffffff S=6 s=4 (14)
    12:50:42.237400 xid:cmd 2e749328 > ffffffff S=6 s=5 (14)
    12:50:42.327400 xid:cmd 2e749328 > ffffffff S=6 s=* europe hint=c420 [ Computer LAN Access IrOBEX ] (23)
    12:50:44.787434 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    12:50:44.877431 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    12:50:44.967399 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    12:50:45.057402 xid:cmd 2e749328 > ffffffff S=6 s=3 (14)
    12:50:45.147813 xid:cmd 2e749328 > ffffffff S=6 s=4 (14)
    12:50:45.237400 xid:cmd 2e749328 > ffffffff S=6 s=5 (14)
    12:50:45.327401 xid:cmd 2e749328 > ffffffff S=6 s=* europe hint=c420 [ Computer LAN Access IrOBEX ] (23)
    12:50:47.787403 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    12:50:47.877398 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    12:50:47.967400 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    12:50:48.057400 xid:cmd 2e749328 > ffffffff S=6 s=3 (14)
    12:50:48.147819 xid:cmd 2e749328 > ffffffff S=6 s=4 (14)
    12:50:48.237400 xid:cmd 2e749328 > ffffffff S=6 s=5 (14)
    

    C'est que ça ne... fonctionne pas (rien n'est détecté).

    Par contre si vous voyez quelquechose comme ça :

    
    [root@europe gael]# irdadump
    12:52:47.787405 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    12:52:47.877401 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    12:52:47.967399 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    12:52:48.050774 xid:rsp 2e749328 < f3780000 S=6 s=2 Nokia 6100 hint=8101 [ PnP Telephony ] (28)
    12:52:48.057399 xid:cmd 2e749328 > ffffffff S=6 s=3 (14)
    12:52:48.147820 xid:cmd 2e749328 > ffffffff S=6 s=4 (14)
    12:52:48.237400 xid:cmd 2e749328 > ffffffff S=6 s=5 (14)
    12:52:48.327401 xid:cmd 2e749328 > ffffffff S=6 s=* europe hint=c420 [ Computer LAN Access IrOBEX ] (23)
    12:52:50.787432 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    12:52:50.877430 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    12:52:50.957682 xid:rsp 2e749328 < f3780000 S=6 s=1 Nokia 6100 hint=8101 [ PnP Telephony ] (28)
    12:52:50.967433 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    
    

    C'est que votre Nokia 6100 a été détecté, donc que vous avez du bol et que vous pouvez directement passer à la fin de cette page :-)

    2) le test physique...

    Maintenant que vous êtes énervé parceque le test logique ne fonctionne pas, on va enfoncer le clou et vérifier qu'il n'y a vraiment aucun traffic IR !

    Pour ça vous allez devoir utiliser : un appareil photo numérique (par exemple le Nokia 3650 ;-)), ou une caméra vidéo, enfin tout appareil avec un capteur CCD devrait convenir. Mais pourquoi me direz-vous ? C'est assez simple : l'oeil ne voit pas la lumière infrarouge, mais les capteurs CCD oui :-)

    Exemple : la télécommande de (ma) télévision.

    Maintenant on va aller chercher derrière le portable Toshiba. Lancez irdadump et regardez :

    Quand ça ne fonctionne pas... et quand ça fonctionne !

    Attention: à l'oeil nu on ne voit rien...

    Maintenant on travaille...

    D'abord, on édite /etc/modules.conf et on rajoute :

    
    # IrDA stuff...
    alias tty-ldisc-11 irtty
    alias char-major-161 ircomm-tty
    

    Et on lance un depmod -a pour que ça soit pris en compte (sous Windows, on rebooterait).

    Ensuite on va aller rajouter quelques entrées dans /dev :

    
    [root@europe gael]# mknod /dev/ircomm0 c 161 0
    [root@europe gael]# mknod /dev/ircomm1 c 161 1
    [root@europe gael]# mknod /dev/irlpt0 c 161 16
    [root@europe gael]# mknod /dev/irlpt1 c 161 17
    [root@europe gael]# mknod /dev/irnet c 10 187
    [root@europe gael]# chmod 666 /dev/ir*
    

    (Je ne suis pas certain que ces deux premières étapes soient vraiment nécessaires : elles l'étaient par le passé, mais ça a pu évoluer...)

    Ensuite on édite /etc/sysconfig/irda et on remplace ttyS2 par ttyS0 (attention, ça peut être différent pour votre machine !).

    Ensuite on va charger le module donauboe (et non pas le module toshoboe...). Pour cela :

    
    [root@europe gael]# modprobe donauboe
    

    Attention : c'est un module super récalcitrant à charger [mise à jour 2005 ce n'est plus le cas sous Mandrakelinux 10.1/LE2005]. Il y a toutes les chances pour que vous ayez à refaire cette dernière manip 4, 5 ou 10 fois de suite avant que ça passe ! C'est un bug connu de ce module, et ça le rend impropre à mettre dans /etc/modules.conf puisqu'au chargement ça a 90% de chances d'échouer.

    Maintenant il ne reste plus qu'à lancer IrDA. Pour ça on oublie (pour l'instant) /etc/rc.d/init.d/irda. A la place on fait un :

    
    irattach irda0 -s
    

    A ce stade, vous devriez voir apparaître une entrée irda0 dans la liste des interfaces (avec la commande ifconfig).

    Par ailleurs, allez jetter un oeil dans vos logs (/var/log/messages), vous devriez y trouver des choses intéressantes.

    Maintenant normalement ça doit fonctionner (enfin pour moi ;-)). Pour s'en rendre compte, la commande magique irdadump va vous servir... Prennez votre 3650, activez l'infrarouge, placez-le en vue du port IR du Toshiba et lancez irdadump...

    
    root@europe gael]# irdadump
    13:48:21.962734 rr:cmd < ca=a6 pf=1 nr=5 (2)
    13:48:21.962760 rr:rsp > ca=a6 pf=1 nr=7 (2)
    13:48:22.347665 rr:cmd < ca=a6 pf=1 nr=5 (2)
    13:48:22.347692 rr:rsp > ca=a6 pf=1 nr=7 (2)
    13:48:22.797578 rr:cmd < ca=a6 pf=1 nr=5 (2)
    13:48:22.797605 rr:rsp > ca=a6 pf=1 nr=7 (2)
    13:48:23.297672 rr:cmd < ca=a6 pf=1 nr=5 (2)
    rd:rsp > ca=0xa6 pf=1 (2)
    13:48:23.307808 disc:cmd < ca=0xa6 pf=1 (2)
    13:48:23.307823 ua:rsp ca=a6 pf=1 2e749328 > 585b65f5 (10)
    13:48:26.787441 xid:cmd 2e749328 > ffffffff S=6 s=0 (14)
    13:48:26.877431 xid:cmd 2e749328 > ffffffff S=6 s=1 (14)
    13:48:26.967398 xid:cmd 2e749328 > ffffffff S=6 s=2 (14)
    13:48:27.057398 xid:cmd 2e749328 > ffffffff S=6 s=3 (14)
    13:48:27.147818 xid:cmd 2e749328 > ffffffff S=6 s=4 (14)
    13:48:27.226772 xid:rsp 2e749328 < 585b65f5 S=6 s=4 Nokia 3650 hint=9225 [ PDA/Palmtop Modem Telephony IrCOMM IrOBEX ] (28)
    13:48:27.237399 xid:cmd 2e749328 > ffffffff S=6 s=5 (14)
    13:48:27.327400 xid:cmd 2e749328 > ffffffff S=6 s=* europe hint=c420 [ Computer LAN Access IrOBEX ] (23)
    13:48:29.537567 xid:cmd ffffffff < 585b65f5 S=1 s=0 (14)
    13:48:29.537596 xid:rsp 2e749328 > 585b65f5 S=1 s=0 europe hint=c420 [ Computer LAN Access IrOBEX ] (23)
    13:48:29.667730 xid:cmd ffffffff < 585b65f5 S=1 s=* Nokia 3650 hint=9225 [ PDA/Palmtop Modem Telephony IrCOMM IrOBEX ] (28)
    

    Et là par magie on voit que le Toshiba a reçu et décodé des trames IR venant du Nokia :-)

    A partir de là, tout fonctionne correctement et vous devez pouvoir utiliser tous les services décrits dans les Linux IrDA HOWTOs...

    Maintenant on s'amuse !

    Juste un petit truc tout simple pour commencer : pour échanger des images, vous allez utiliser les utilitaires "OBEX". Il faut pour cela installer les packages openobex-apps et libopenobex1 qui sont dispos dans les contribs de Mandrake 9.1 (si vous avez ajouté une source contribs, tapez simplement "urpmi openobex-apps" pour installer les packages).

    Maintenant, pour envoyer une image vers le 3650, c'est très simple... Activez l'infrarouge, placez le 3650 et tapez :

    
    [gael@europe tmp]$ irobex_palm3 /tmp/mon-image.jpg
    Send and receive files to Palm3
    
    name=/tmp/mon-image.jpg, size=1619
    .
    
    PUT successful
    

    Je vous laisse découvrir ce que ça donne sur sur le 3650 - Voilà !

    Maintenant, pour récupérer des images prises avec le 3650, il sufft 1) de se mettre en attente d'image sur le PC :

    
    gael@europe tmp]$ irobex_palm3
    Send and receive files to Palm3
    Waiting for files
    
    .......................................................HEADER_LENGTH = 55740
    put_done() Skipped header 42
    put_done() Skipped header 44
    Filename = Photo(30).jpg
    Wrote /tmp/Photo(30).jpg (55740 bytes)
    

    Et 2) Sur le Nokia sélectionner une image dans "photos", et faire "envoyer->par infrarouge" (et on voit ce que ça donne juste au dessus).

    Magnifique non ?

    Allez, un dernier pour la route : "irobex_palm3" charge une photo et quitte. Ce n'est pas pratique de le relancer à chaque fois. Donc vous pouvez laisser une petite boucle en tâche de fond pour faire ça tranquille :

    
    gael@europe gael]$ while (2>1) do irobex_palm3; done
    Send and receive files to Palm3
    Waiting for files
    
    ................................................HEADER_LENGTH = 48643
    put_done() Skipped header 42
    put_done() Skipped header 44
    Filename = Photo(28).jpg
    Wrote /tmp/Photo(28).jpg (48643 bytes)
    
    
    Send and receive files to Palm3
    Waiting for files
    
    .....................................HEADER_LENGTH = 37549
    put_done() Skipped header 42
    put_done() Skipped header 44
    Filename = Photo(27).jpg
    Wrote /tmp/Photo(27).jpg (37549 bytes)
    
    
    Send and receive files to Palm3
    Waiting for files
    
    (...)
    
    

    Note : désolé, le while (1) ne fonctionne pas en Bash ;)

    Voici un exemple de photo faite avec le 3650 (cliquer pour l'avoir en pleine resolution) :

    Si vous avez d'autres trucs, ou des suggestions sur cette page, écrivez-moi à gael@indidea.org et je les mettrai ici avec votre accord. Au fait : les vidéos enregistrées par le 3650 sont au format H.263. Malheureusement elles ne sont pas lisibles en standard avec les lecteurs Linux habituels. Par contre avec Xine et quelques extensions "PLF" oui :-) et aussi avec mplayer très facilement en rajoutant :

    
    format 0x33363273
    

    A la fin de la section videocodec ffh263, dans le fichier /etc/mplayer/codecs.conf

    Retour à ma page perso