Ordinateur de plongée D-TWIN
D-TWIN est un ordinateur de plongée conçu par BlueEdge. Une entreprise Italienne qui a aussi développé un logiciel (win/linux) qui permet de télécharger les fichiers de plongées, mettre à jour le firmware de l'ordi.
L'entreprise a cessé ses activités. J'ai toujours eu des problèmes à télécharger les plongées. C'était très long, arrêt du téléchargement au milieu d'une plongée, timeout.
Analyse du traffic
La communication se fait via bluetooth. J'ai décidé d'analyser le traffic réseau afin d'être en mesure de définir le protocole et refaire l'application.
La commande suivante a été lancé: btmon -w dtwin-capture.btsnoop
J'ai lancé leur application et j'ai cliqué sur Search devices.
HCI Event: Remote Name Req Complete (0x07) plen 255 #7 [hci0] 56.161354
Status: Success (0x00)
Address: 00:13:43:04:58:5C (Matsushita Electronic Components (Europe) GmbH)
Name: D-TwinPRI_85C
Status: Success (0x00)
Address: 00:13:43:04:58:5C (Matsushita Electronic Components (Europe) GmbH)
Name: D-TwinPRI_85C
L'ordinateur avait été détecté. J'ai cliqué sur Log
RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
Address: 0x0b cr 1 dlci 0x02
Control: 0xef poll/final 0
Length: 4
FCS: 0x9a
47 54 44 4c 9a GTDL.
Première trouvaille, GTDL
RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
Address: 0x09 cr 0 dlci 0x02
Control: 0xef poll/final 0
Length: 10
FCS: 0x40
44 56 54 4f 54 30 30 32 31 37 40 DVTOT00217@
Deuxième trouvaille DVTOT00217
RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
Address: 0x0b cr 1 dlci 0x02
Control: 0xef poll/final 0
Length: 4
FCS: 0x9a
47 54 4e 58 9a GTNX.
RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
Address: 0x09 cr 0 dlci 0x02
Control: 0xef poll/final 0
Length: 36
FCS: 0x40
44 56 30 30 32 39 33 32 30 32 36 31 30 31 30 31 DV00293202610101
34 30 36 31 37 30 31 36 38 30 30 33 30 30 32 31 4061701680030021
30 30 31 32 40 0012@
...
...
Commande du protocole
| Commande | Desscription | Réponse |
| GTDL | Demande le nombre de plongée | DVTOTxxxx :xxxx étant le nombre de plongée |
| GTNX | Demande le résumé de la plongée | DVxxxx : xxxx étant le num de plongée, sommaire de la plongée |
| GTNV | Met l'ordi en mode sélection | DVNUM : Attent un numéro de plongée |
| DV00267 | Demande la plongée 267 | DVSTART: info complète de la plongée |
| GTRN | Demande la prochaine plongée | DVLOG: sommaire de la plongée |
| DVG: gas switch | ||
| END: fin de la plongée |
Sommaire de plongée
DVLOG0145602151616124
L'information peut être décomposé comme ceci: DVLOG | 01456 | 0215 | 1616 | 124
01456 étant le nombre de seconde depuis le début de la plongée
0215 est la profondeur en mètre
1616 est la température, 16.16 degré celcius
124 l'utilité est encore inconnue
Info complète de plongée
DVSTART0026720260620101701+010310631105007002100000516640102
L'information peut être décomposé comme ceci: DVSTART | 00267 | 20260620101701 | +0103106311050070 | 021 | 00 | 000516640102
00267 étant le numéro de la plongée
20260620101701 est la date de départ de la plongée
0103106311050070 l'utilité est encore inconnue
021 est le gas de début en oxygène
00 est le gas de début en hélium
000516640102 l'utilité est encore inconnue
Les informations obtenues ont permis de comprendre la communication et de la reproduire dans une nouvelle application. Il reste encore du travail à faire concernant les champs inconnus.
La nouvelle application a été écrite en C++ avec le framework Qt. Elle est fonctionnelle sous Linux. Qt supporte RFCOMM via QBluetoothSocket, mais cela n'est pas supportté pour tous les os, backend.
Qt's Linux BlueZ D-Bus backend mentionne:
Connecting to port is not supported via Bluez DBus
L'approche de Linux sockets a été utilisé. Du travail doit être fait pour la faire fonctionner sous Windows. La nouvelle application est plus efficace pour télécharger les plongées.


