J'ai successivement disposé d'un garmin forerunner 205 que j'ai malheureusement perdu pendant une sortie en planche à voile. Puis d'une Garmin Forerunner 310XT qui a pris l'eau après 7 ans d'utilisation intensive.
![]() Garmin Forerunner 205 |
![]() Garmin Forerunner 310XT |
Je suis passé ensuite au Garmin
Forerunner 735XT qui présente l'intérêt de disposer d'un
environnement de développement permettant de la personnaliser comme
on peut le voir ci-dessous (voir ce
post pour plus de détails). Malheureusement c'est une montre assez fragile et j'ai cassé l'écran assez rapidement lors d'une session en planche à voile (voir ce post) et j'ai fait avec un écran fêlé pendant quasiment 4 avant qu'elle me lâche définitivement. |
![]() |
Je l'ai remplacé depuis par une Garmin instinct modèle surf que j'ai personnalisé avec l'environnement de développement Connect IQ.
dans la suite de cette page j'ai maintenu les détails de configuration propre aux précédentes montres GPS qui n'évoluent plus et que j'ai placés en fin de cette page.
[Retour vers le haut de la page]
Elle est vue comme un périmètre de stockage USB tout ce qui a de plus classique et est automatiquement montée.
nov. 24 10:37:36 predator.kervao.fr
kernel: usb 3-8: new full-speed USB device number 7 using xhci_hcd
nov. 24 10:37:36 predator.kervao.fr kernel: usb 3-8: New USB device
found, idVendor=091e, idProduct=0f30, bcdDevice= 5.09
nov. 24 10:37:36 predator.kervao.fr kernel: usb 3-8: New USB device
strings: Mfr=0, Product=0, SerialNumber=0
nov. 24 10:37:36 predator.kervao.fr kernel: usb-storage 3-8:1.0: USB
Mass Storage device detected
nov. 24 10:37:36 predator.kervao.fr kernel: scsi host7: usb-storage
3-8:1.0
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210266]: checking bus 3,
device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-8"
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210266]: bus: 3, device:
7 was not an MTP device
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210267]: checking bus 3,
device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-8"
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210267]: bus: 3, device:
7 was not an MTP device
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210280]: checking bus 3,
device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-8"
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210280]: bus: 3, device:
7 was not an MTP device
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210286]: checking bus 3,
device 7: "/sys/devices/pci0000:00/0000:00:14.0/usb3/3-8"
nov. 24 10:37:36 predator.kervao.fr mtp-probe[210286]: bus: 3, device:
7 was not an MTP device
nov. 24 10:37:36 predator.kervao.fr Thunar[210279]: thunar-volman:
Périphérique USB de type « usb » non pris en charge.
nov. 24 10:37:36 predator.kervao.fr Thunar[210294]: thunar-volman:
Périphérique USB de type « usb-storage » non pris en charge.
nov. 24 10:37:37 predator.kervao.fr kernel: scsi 7:0:0:0:
Direct-Access Garmin instinct2S
Flash PQ: 0 ANSI: 5
nov. 24 10:37:37 predator.kervao.fr kernel: sd 7:0:0:0: [sde] 37211
512-byte logical blocks: (19.1 MB/18.2 MiB)
nov. 24 10:37:37 predator.kervao.fr kernel: sd 7:0:0:0: [sde] Write
Protect is off
nov. 24 10:37:37 predator.kervao.fr kernel: sd 7:0:0:0: [sde] Mode
Sense: 23 00 00 00
nov. 24 10:37:37 predator.kervao.fr kernel: sd 7:0:0:0: [sde] Write
cache: enabled, read cache: enabled, doesn't support DPO or FUA
nov. 24 10:37:37 predator.kervao.fr kernel: sde:
nov. 24 10:37:37 predator.kervao.fr kernel: sd 7:0:0:0: [sde] Attached
SCSI removable disk
nov. 24 10:37:43 predator.kervao.fr udisksd[3491]: Mounted /dev/sde at
/run/media/olivier/GARMIN on behalf of uid 5001
Et dans le répertoire GARMIN qui est monté automatiquement on retrouve un repértoire GARMIN/ACTIVITY où on retrouvera nos activités au format FIT. La commande lsusb donnera
Bus 003 Device 007: ID 091e:0f30 Garmin
International
Contrairement à la 735XT qui est basée sur Eclipse, elle est basée sur l'environnement de développement Visual Studio Code.
Tous les détails de l’installation sont données en anglais là. Pour résumer on récupérera le SDK à cette adresse. Et on tapera les commandes suivantes pour l’installer et le lancer la première fois.
mkdir connectiq-sdk
unzip connectiq-sdk-manager-linux.zip
cd connectiq-sdk/
cd bin/
./sdkmanager
Au besoin il faudra éventuellement installer le package lib64webkit2gtk4.0_37
Il va falloir d’abord se loguer sur son compte Garmin ou le créer à défaut.
Ensuite il y a une fenêtre pour savoir si les mises à jour du SDK doivent être téléchargées automatiquement quand il y a une nouvelle version. Puis vient une fenêtre pour savoir si on effectue également les mises à jour de périphériques automatiquement. A ce moment vous pouvez sélectionner les périphériques concernés, je vous conseille de sélectionner strictement la catégorie de périphérique utile car sinon ça prend de la place inutilement.
Vient ensuite la fenêtre suivante avec un onglet SDK et DEVICES (périphériques), j’ai cliqué sur la dernière version du SDK et seulement les montres (watches and wearables).
Le SDK Connect IQ est basé sur Visual Studio Code qu’on téléchargera ici. On l’installe et on le lance en tapant:
tar tar xvfz
code-stable-x64-1739405584.tar.gz
cd VSCode-linux-x64/
bin/code
Il faudra maintenant installer l’extension Monkey C qui inclut un éditeur, un compilateur et un débogueur. Pour cela dans Visual Studio Code, on ira sur View->Extensions et on tapera Monkey C. Puis on clique sur le bouton Install en bleu. Il faudra ensuite relancer Visual Studio Code.
On génère maintenant une clé de développeur qui sera utile pour signer les applications, attention de bien la conserver dans un coin sans quoi, on ne pourra plus éditer les différents projets ! Pour la générer, on tapera la combinaison de touches Ctrl+Shift+P et dans la liste déroulante on choisit Monkey C: Generate a developper key.
Tant qu’à fait avec la même combinaison de touches on téléchargera des exemples de code Monkey C: Open Samples Folder. Ils se sont retrouvés sous .Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-7.3.1-2024-09-23-df7b5816a/samples. J’ai donc fait un lien de ce répertoire vers mon répertoire de travail de Connect IQ.
On peut passer à sa première application Hello Word ! Pour le code, c’est un peu la jungle, il faut naviguer à vue sur la page Connect IQ et pas mal tâtonner, on pourra commencer par la page pour construire sa première application. La page donnant le détail de l’API est un incontournable, pour mon Instinct 2, il y a une page spécifique mais je n’ai pas trouvé de codes spécifiques même dans les exemples téléchargés. Le forum dédié est également une bonne source d’informations et d’aide. Vous pouvez ensuite partager votre code ici mais force est de constater que peu de développeurs partagent leur code.
[Retour vers le haut de la page]
Au final ça m’a pris des heures pour essayer de comprendre comment coder tout ça et aboutir à ce résultat, tout cela à partir du projet originel Hello World. C’est assez galère car il y a globalement assez peu d’exemples commentés.
On testera l'application via le simulateur accessible via Run->Run without debugging, il faudra veiller également à tester l'application en mode sommeil car l'affichage peut être différent (case cochée Sleep Mode puis Display Mode -> Always Active)
Pour débugger on pourra mettre en place un point d'arrêt à partir du menu Run->toggle breakpoint, le point d'arrêt est matérialisé par un point rouge au nouveau du numéro de la ligne
On lance le simulateur en mode debug avec
Run->Start debugging, on retrouve à gauche l'état des
variables et juste en dessous du nom du projet, on retrouve les
commandes de debug pour se déplacer de
point d'arrêt en point d'arrêt ou de ligne en ligne.
On pourra également inscrire dans le code une commande du style System.println("ma variable"+variable); et on retrouvera l'affichage de la commande dans l'onglet en bas DEBUG CONSOLE.
On stoppe le mode simulation à partir du menu Run->Stop debugging.
Une fois que l’application fonctionne sur le simulateur, il faut construire le binaire, on y accède via la combinaison de touches Ctrl+Shift+P et on choisit Monkey C : Build for device. La compilation va générer un fichier .PRG, une fois la montre connectée en USB, on le placera sous GARMIN/APPS. Pour revenir en arrière il suffira de supprimer le dit fichier.
Et voilà ce que ça donne avec la montre en fonctionnement
![]() Version 0.1.0 version initiale avec une jauge en forme de rectangle pour la charge batterie |
![]() Version 0.2.0 avec des jauges en forme d'arc de cercle pour la batterie et le ratio pas et objectif des pas quotidien et fonts personnalisés |
J'ai particulièrement galéré pour l'affichage des secondes car par défaut il y a une mise à jour que toutes les minutes quand la montre est en mode basse consommation (la plupart du temps) et il faut se servir de la fonction onPartialUpdate qui permet un affichage local avec un rafraîchissement toutes les secondes.
j'ai également pris du temps à créer une jauge pour la batterie, je suis parti de cette page sur le forum Garmin.
J'ai également utilisé une font personnalisé car celles par défaut étant trop grosses même les plus petites. Je me suis aidé de cette page https://jeffchen.dev/posts/Garmin-Watch-Faces-Custom-Fonts-On-MacOS/ son auteur a forké le logiciel FontBuilder qui va permettre de générer des fonts à un format compréhensible pour Garmin à partir des fonts présentes sur un système linux sous /usr/share/fonts (ou ailleurs).
On télécharge le fork à l'adresse https://github.com/jchen1/fontbuilder. On décompresse ensuite l'archive en tapant
unzip fontbuilder-master.zip
Il faudra éventuellement installer les packages freetype2-devel, lib64qt5widgets-devel et lib64qt5xml-devel. On tape ensuite
cd fontbuilder-master/
qmake
make
et on lance le logiciel en tapant bin/FontBuilder
![]() Dans cet onglet on chargera la font |
![]() Et dans cet onglet on l'exporte au format BMFont |
On placera ensuite les fichiers générés .fnt et .PNG dans un répertoire resources/fonts du projet.
Le fonctionnement est parfois hasardeux et ça ne marche pas toujours, je vous recommande également l'outil fontbm qu'on peut trouver à cette adresse https://github.com/vladimirgamalyan/fontbm on décompresse en tapant
tar xvfz fontbm-0.6.1.tar.gz
et on tape le commande suivante
cd fontbm-0.6.1/
mkdir build
cd build/
cmake ..
make
puis en tant que root (chemin à modifier)
ln -s /usr/local/linux/system/fontbm-0.6.1/build/fontbm /usr/local/bin
Par exemple, j'ai récupéré une font Indigo Outline détournée sur le site https://www.fontsquirrel.com/fonts/indigo, je vais créer une font compatible de taille 32 en tapant
fontbm --font-size 32 --font-file Indigo\ Outline.otf --output IndigoOutline32
On placera les fonts sous resources/fonts du projets
Au final si vous souhaitez consulter les sources commentées, vous les trouverez à cette adresse https://github.com/funix83/Funix-Watch
J'ai également rédigé plusieurs posts à ce sujet sur mon blog où on peut trouver des informations complémentaires :
tar xvfj wxWidgets-3.2.6.tar.bz2
cela donne le répertoire wxWidgets-3.2.6 dans lequel on tape
./configure
make
puis en tant que root
make install
on installe maintenant les packages tinyxml-devel, lib64glew-devel, lib64archive-devel et lib64usb1.0-devel. Le site officiel d'OpenCPN est https://opencpn.org/ mais on récupèrera les sources par là https://github.com/OpenCPN/OpenCPN/releases on les décompresse en tapant
tar xvfz OpenCPN-Release_5.10.2.tar.gz
cela donne le répertoire OpenCPN-Release_5.10.2 dans lequel on tape
mkdir build
cd build
cmake ..
puis
make
maintenant ce n'est pas tout, il faut récupérer les cartes, on pourra commencer par les cartes cotières d'OpenSeaMap par là http://openseamap.org/index.php?id=kartendownload&L=1 ou mieux encore les cartes CM93 ici http://pierre.lavergne1.free.fr/special_voileux/OpenCPN.html (mais pas sûr que ça doit bien libres...). On dézippe tout ça dans un répertoire qu'on indiquera ensuite à OpenCPN.
Et voilà le résultat en tapant opencpn
mkdir build
cd build/
cmake ..
make
cd gui
make
puis en tant que root
cp gpsbabel /usr/local/bin
cp gui/GPSBabelFE/gpsbabelfe /usr/local/bin
Pour transformer un fichier .fit en .gpx on tapera ainsi
gpsbabel -i garmin_fit -f
2020-07-25-tracegps-fun-sainte-marguerite-2.FIT -o gpx -F
2020-07-25-tracegps-fun-sainte-marguerite-2.gpx
La commande suivante permet de télécharger les fichiers d'un forerunner 205 et de les sauver dans un fichier .gpx
gpsbabel -i garmin -f /dev/ttyUSB0 -o gpx -F fichier.gpxil dispose maintenant d'une interface graphique qu'on appellera en tapant gpsbabelfe
Tout d’abord des alternatives en ligne permettant d’importer des fichiers de points GPS. On commencera par GPS Visualizer qui permet d’afficher les valeurs en nœuds et miles nautiques et de coloriser la trace en fonction de la vitesse.
on notera la pointe de vitesse instantanée à 31,1 nœuds .
Il existe également My GPS Files qui donne quelque chose comme ça :
Attention il ne reconnait pas le format .FIT.
Il y a toutefois un petit bogue dans l’affichage de la vitesse marquée en nœuds mais qui est en km/h en fait. Le replay de la trace est possible.
Il existe maintenant des solutions qui permettent un archivage des sorties mais qui obligent à avoir un compte, c'est le cas de strava ou de Garmin Connect que j'utilise
[Retour vers la haut de la page]
En fait, il n'y a rien à faire, c'est un bête périphérique USB qui est parfaitement reconnu comme un périphérique de stockage, voici la trace avec journalctl
août 30 14:20:43 predator.kervao.fr
kernel: usb 2-9: new full-speed USB device number 10 using xhci_hcd
août 30 14:20:44 predator.kervao.fr kernel: usb 2-9: New USB device
found, idVendor=091e, idProduct=086e, bcdDevice= 5.09
août 30 14:20:44 predator.kervao.fr kernel: usb 2-9: New USB device
strings: Mfr=0, Product=0, SerialNumber=0
août 30 14:20:44 predator.kervao.fr kernel: usb-storage 2-9:1.0: USB
Mass Storage device detected
août 30 14:20:44 predator.kervao.fr kernel: scsi host8: usb-storage
2-9:1.0
août 30 14:20:44 predator.kervao.fr mtp-probe[15639]: checking bus 2,
device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-9"
août 30 14:20:44 predator.kervao.fr mtp-probe[15639]: bus: 2, device:
10 was not an MTP device
août 30 14:20:44 predator.kervao.fr baloo_file[4770]: UdevQt:
unhandled device action "bind"
août 30 14:20:44 predator.kervao.fr mtp-probe[15655]: checking bus 2,
device 10: "/sys/devices/pci0000:00/0000:00:14.0/usb2/2-9"
août 30 14:20:44 predator.kervao.fr mtp-probe[15655]: bus: 2, device:
10 was not an MTP device
août 30 14:20:44 predator.kervao.fr baloo_file[4770]: UdevQt:
unhandled device action "bind"
août 30 14:20:44 predator.kervao.fr Thunar[4571]: thunar-volman:
Périphérique USB de type « usb » non pris en charge.
août 30 14:20:44 predator.kervao.fr Thunar[4571]: thunar-volman:
Périphérique USB de type « usb-storage » non pris en charge.
août 30 14:20:45 predator.kervao.fr kernel: scsi 8:0:0:0:
Direct-Access Garmin FR735XT
Flash 1.00 PQ: 0 ANSI: 5
août 30 14:20:45 predator.kervao.fr kernel: sd 8:0:0:0: [sdf] 20646
512-byte logical blocks: (10.6 MB/10.1 MiB)
août 30 14:20:45 predator.kervao.fr kernel: sd 8:0:0:0: [sdf] Write
Protect is off
août 30 14:20:45 predator.kervao.fr kernel: sd 8:0:0:0: [sdf] Mode
Sense: 23 00 00 00
août 30 14:20:45 predator.kervao.fr kernel: sd 8:0:0:0: [sdf] Write
cache: enabled, read cache: enabled, doesn't support DPO or FUA
août 30 14:20:45 predator.kervao.fr kernel: sdf:
août 30 14:20:45 predator.kervao.fr kernel: sd 8:0:0:0: [sdf] Attached
SCSI removable disk
août 30 14:20:50 predator.kervao.fr udisksd[3008]: Mounted /dev/sdf at
/run/media/olivier/GARMIN on behalf of uid 5001
Et dans le répertoire GARMIN qui est monté automatiquement on retrouve un repértoire GARMIN/ACTIVITY où on retrouvera nos activités au format FIT. Sinon un lsusb donnera
Bus 002 Device 010: ID 091e:086e Garmin International Forerunner 735XT
[Retour page d'accueil FUNIX] | [retour haut de la page ] |