Tomtom et linux

1. Présentation

J'ai acquis depuis peu un tomtom avec son appli TomTomHome et... aucun outils pour Linux. En cherchant sur internet, j'ai trouvé un site ( TomTomHome sous linux c'est possible grâce à wine) qui explique comment utiliser TomTomHome sous linux avec wine. C'est bien (quoi que beaucoup de magouille) mais c'est lourd. Mes besoins sont essentiellement mettre à jour le fichier ephemeride (GPSQUICKFIX) de façon régulière. Avec l'aide de membres du forums de gpspassion, j'ai pu faire cette doc qui utilise udev pour lancer la mise à jour automatique du GPSQUICKFIX lors de la connexion du tomtom (et ce sans besoin de TomTomHome)

2. Références

3. Ma configuration

4. TomTomHome sous linux c'est possible grâce à wine

(Merci Stéphane HUC)

5. Mise à jour GPSQUICKFIX

5.1. Script faisant la mise à jour automatique

#!/bin/sh

function atexit {
rm /tmp/ephe$$
umount /tmp/mnt$$
rmdir /tmp/mnt$$
}

trap atexit EXIT

mkdir /tmp/mnt$$ || exit 1
mount -t vfat /dev/tomtom /tmp/mnt$$ || exit 1

[ -f /tmp/mnt$$/ephem/packedephemeris.ee ] && find
/tmp/mnt$$/ephem/packedephemeris.ee -mtime -1 | grep . && exit 0

wget -T 5 -t 2 -q -O /tmp/ephe$$ http://service.mio-tech.com/eeservice/packedephemeris.ee || exit 1
perl -e 'print "Expiry=" . scalar time() + 3600 * 24 * 7' >/tmp/mnt$$/ephem/ee_meta.txt
cp /tmp/ephe$$ /tmp/mnt$$/ephem/packedephemeris.ee

exit 0

5.2. Configuration d'une règle udev

5.2.1. Récupération de données de reconnaissance du matériel Tomtom par udev

5.2.1.1. Recherche du nom du device

Lorsque vous connectez le tomtom au système par le cable usb, le noyau linux détecte le matériel et y affecte un device. Il s'agit de savoir de quel device il s'agit.

Connecter votre Tomtom au système et laissez le connecter. Editer ensuite le fichier /var/log/messages. Vous devriez trouver, à l'heure de la connexion du tomtom des lignes de ce type :

kernel: scsi12 : SCSI emulation for USB Mass Storage devices
kernel:   Vendor: TomTom    Model: GO XXXXXXXXXXXX   Rev: 0100
kernel:   Type:   Direct-Access                      ANSI SCSI revision: 02
kernel: SCSI device sdb: 39063024 512-byte hdwr sectors (20000 MB)

Sur la dernière ligne, on peut identifier le devise reconnu par linux : sdb (soit /dev/sdb).

5.2.1.2. Utilisation de udevinfo

On récupère les données de reconnaissance du matériel avec la commande udevinfo. Dans mon exemple, le tomtom était reconnu par /dev/sdb. Sachant le tomtom connecté au système taper :

udevinfo -a -p $(udevinfo -q path -n /dev/sdb) > /tmp/tomtom.txt

Editer ensuite le fichier /tmp/tomtom.txt et repérer les lignes :

ATTRS{vendor}=="TomTom"
ATTRS{model}=="GO"

On peut décider (dans la même section de device cf. http://doc.ubuntu-fr.org/udev) de récupérer d'autres données du genre :

SUBSYSTEMS=="scsi"
DRIVERS=="sd"

Attention toutefois les données présentes dans le résultat de la commande udevinfo est totalement dépendante du système. Il est important de savoir que le résultat de udevinfo est séparé par des blocs. Chaque bloc commence par "looking at device....". A vous de choisir dans un et un seul bloc les éléments qui vont identifier votre Tomtom à coup sûr. Sur ma machine, j'ai effectivement relevé les informations ATTRS{vendor}, ATTRS{model}, SUBSYSTEMS, DRIVERS. Sur d'autres système on peut trouver BUS=="scsi", SYSFS{vendor}=="TomTom", SYSFS{model}=="ONE (v3)", ... C'est à vous de choisir. Cependant les valeurs sûr, à mon avis, sont :

Certains aimeront peut-être prendre le numéro de série (ATTRS{serial} ou SYSFS{serial}). En fait, plus vous mettez de critères, plus vous réduisez le nombre de matériel reconnu par la ligne dans udev.

Par exemple, si vous désignez le numéro de série et que vous branchez un autre Tomtom, le matériel ne sera pas reconnu par la ligne car le numéro de série ne correspondra pas. De même, si vous ne précisez que le vendeur (Tomtom) alors, tous les tomtoms seront reconnus par la ligne udev. A vous de choisir...

5.2.2. Nouvelle règle pour le tomtom

Créer un fichier de règle dans /etc/udev/rules.d (moi je l'ai appellé /etc/udev/rules.d/zzmyrules.rules) :

SUBSYSTEMS=="scsi",DRIVERS=="sd",ATTRS{vendor}=="TomTom",ATTRS{model}=="GO",SYMLINK+="tomtom"
SUBSYSTEMS=="scsi",DRIVERS=="sd",ATTRS{vendor}=="TomTom",ATTRS{model}=="GO",ACTION=="add",RUN+="/usr/local/bin/updephem.sh"

La première ligne crée simplement un device (un lien symbolique vers le vrai device) /dev/tomtom. La deuxième ligne permet de lancer le script écrit dans le point 5.1.


Si vous désirez faire une remarque sur ce document, écrivez moi un mail : eloew@eloew.org.

Eric Loew

Date du document : 23 mai 2007