 |
Pokie:TomTom (GPS) & Linux
Dans cette page je vous propose une astuce pour mettre à jour le fichier d'éphémérides pour le quickfix des gps tomtom sous linux et lire/ecrire les fichiers ov2 en php:
Mise à jour du QuickFix Sirf Star III GPS sous linux
Le nécessaire:
- wget, perl
- un lecteur de cartes mémoires SD, ou le TomTom avec le cable usb
Installation:
Script quickfix_update.sh
|
 |
#!/bin/sh -f
# script de mise a jour
mount /mnt/sda1
# Si la carte SD tomtom n'a pas de partition, alors remplacer la ligne précédente par:
# mount /mnt/sda
cd /mnt/sda1/ephem
wget -N http://service.mio-tech.com/eeservice/packedephemeris.ee
# Si vous possedez la version XL ou one v4 il vous faudra alors le ficher Long Term Orbit au lieu du precedent
wget -N http://gllto.glpals.com/7day/latest/lto.dat
# generate ee_meta.txt
FTIME=`stat -c '%Y' packedephemeris.ee`
FTIME=$(($FTIME+604800))
echo "Expiry=$FTIME" > ee_meta.txt
Description:
Le quickfix ne se met pas automatiquement a jour avec mon tomtom home sous windows et je n'aime pas utiliser les programmes proprietaire dont on ne sait pas ce qu'ils font ni pourquoi ils ne le font pas.
donc je telecharge sur le site de mio ou global locate (selon le chipset du GPS) les ephemerides pour 7 jours:
http://service.mio-tech.com/eeservice/packedephemeris.ee
http://gllto.glpals.com/7day/latest/lto.dat
Il semblerait que ce fichier sur le site de mio soit mis a jour a 19h. N'abusez pas en telechargant celui-ci plus d'une fois par semaine pour la sante de leur serveur. Cela ne change en rien les performances du quickfix.
puis je met a jour le fichier ee_meta.txt qui contient la date de validité
du pack d'ephemeride en temps universel:
Expiry=604800
Qui signifie une date de validite jusqu'au
08 January 1970, 01:01
et je jetes le tout dans le repertoire ephem de la carte SD du tomtom.
Cela permet au GPS de demarrer a froid en 5 secondes: Habituellement il
faut attendre 30 secondes pour que le satellite envoi sa position. Si on
rate se signal a cause d'un immeuble, il faut attendre encore 30 secondes
et ceci pour chaque satellite recu. Avec le fichier d'ephemeride, le gps
connait la position de tous les satellites donc pas besoin d'attendre ce
signal est dès qu'on recoit un signal on peut trianguler.
Structure d'un fichier ov2
| Type | Longueur | Longitude | Latitude | Description | Fin |
| 02 | 2B 00 00 00 | 8B F9 06 00 | C5 44 44 00 | 5b 42 4c ... 61 76 69 6c 6c 65 | 00 |
| 1 octet | 4 octets | 4 octets | 4 octets | variable | 1 octet |
Lecture d'un fichier ov2 en php
$nbov2 = 0;
$file="POI.ov2";
$fp = fopen($file, "rb");
$type = fread($fp, 1);
$type = bin2hex($type);
while ($type == "02") {
$len = unpack("V",fread($fp, 4));
$len = $len[1]-14;
$lon = unpack("V",fread($fp, 4));
$lon = $lon[1] / 100000;
$lat = unpack("V",fread($fp, 4));
$lat = $lat[1] / 100000;
$data = fread($fp, $len);
$nbov2 = $nbov2 + 1;
echo "type=$type lon=$lon lat=$lat data=$data\n";
$nil = fread($fp, 1);
$type = fread($fp, 1);
$type = bin2hex($type);
}
fclose($fp);
echo "Nombre de POIs dans le fichier: $nbov2";
Ecriture d'un fichier ov2 en php
$csv=file("fichier.csv");
$nbcsv=count($csv);
$file="tomtom.ov2";
$fp = fopen($file, "w");
for ($i = 0; $i < $nbcsv; $i++) {
$table = split(",",chop($csv[$i])); // Chaque ligne est du type: longitude,latitude,description
$lon = $table[0];
$lat = $table[1];
$des = $table[2];
$TT = chr(0x02).pack("V",strlen($des)+14).pack("V",round($lon*100000)).pack("V",round($lat*100000)).$des.chr(0x00);
@fwrite ($fp, "$TT");
}
fclose($fp);
|
 |