From 37d2a69b919b5dded37c7c2179373565f5144ca1 Mon Sep 17 00:00:00 2001 From: "yorick.geoffre" Date: Fri, 23 Jun 2023 16:55:42 +0200 Subject: [PATCH] fixed readme --- .vscode/settings.json | 5 +++++ README.md | 41 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..1180c1e --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "EF_Analysis.C": "cpp" + } +} \ No newline at end of file diff --git a/README.md b/README.md index 0b9de9b..66b5462 100644 --- a/README.md +++ b/README.md @@ -77,4 +77,43 @@ As for the SDK setup, you'll need the sailfish SDK (latest), **and this is impor ## Licensing this app uses the standard GPL V3 licence found here: -https://www.gnu.org/licenses/gpl-3.0.en.html#license-text \ No newline at end of file +https://www.gnu.org/licenses/gpl-3.0.en.html#license-text + +### formatted readme +this part of the readme if formatted following an evalutation grid, ignore it if you just want to use the app: + +### Descriptif +Thermi2c est une application qui utilise la fonctionnalité TOH du jolla 1 pour connecter, contrôler et afficher la vue d'une caméra thermique MLX90640 + +### Usage +Il suffit de démarrer l'application, elle s'occupe automatiquement d'activer le VDD de la TOH et de se mettre en mode démo si elle ne trouve pas la caméra thermique. + +# Techniques de programmation utilisées +## Modèle +### boucles +Les boucles dans cette application n'utilisent pas de QTimer déjà faits mais utilisent un timer threadé custom. Ce timer prend une durée de timeout et une `Command` abstraite à exécuter à l'issue du timeout. Si le timeout est dépassé le timer exécute la `Command` en flux tendu (pas de délai, mais pas de sur-exécution). + +### driver melexis +La caméra dispose d'un driver en C offert part melexis, ila été objectifié et retravaillé pour fonctionner avec le téléphone. + +### driver I2C +Le driver I2C est largement inspiré de celui de l'outil communautaire de contrôle de la TOH `I2C toolkit`. Le code a été quasiment entièrement refait pour être plus efficace, supporter le chunking et l'écriture random dans un environnement d'adressage 16 bits (la caméra utilise des registres 16 bits). Les méthodes `Read` et `Write` d'`i2cif` ont ainsi été refaites. + +## UI +### thêmes +Une liste sillica pull-down est utilisée pour changer les couleurs de la vue thermique, ces couleurs sont définies par des `ColorAttributer` dans le modèle qui contiennent plusieurs `QColor` liées à une valeur entre 0.0 et 1.0. Post-normalisation des valeurs de la caméra thermique (X-> y à 0.0 -> 1.0), ces couleurs sont interpolées pour créer la vue finale à travers le `thermalRenderer`, qui va utiliser le `colorAttributer` actif pour colorer les données. + +### Capture +Il est possible de capturer la vue graphique actuelle via un bouton, elle sera alors upscale à 160x120 pixels avant d'être sauvegardée dans la gallerie (bouton appareil photo) + +### paramètres +Une fenêtre de paramètres peut être ouverte en appuyant sur le bouton ⚙️. Cette fenêtre modifie les paramètres de FPS max (10 conseillé), taux "d'aplatissement" des données thermique (0->50%), et ceux de génératiuon de bruit (mode démo). On n'utilise pas les QSettings pour éviter qu'une mauvaise config rende l'application inutilisable même après un redémarrage (paramètres de fps > 20...). + +### Bugs connus +pas vraiment un bug mais la performance côté UI est vraiment mauvaise, 32x24 rectangles à mettre à jour à chaque frame c'est trop, j'aurais dû créer une image de 32x24 pixels, et l'upscale à 320x240 avant de l'afficher, c'est très efficace et je sais que ça marche dans mon casque: +https://codefirst.iut.uca.fr/git/yorick.geoffre/ARHS-Thermx + +Egalement l'algo de melexis pour enlever le damier crée par l'interlacing de l'image fonctionne de manière peu fiable... celui d'adafruit est mieux. + +### Précisions +Le fait que la fréquence de la TOH soit bloquée à 100khz et pas 400 comme recommandé par melexis empêche d'atteindre les hauts fps dont je sais ce capteur capable. Avec les limitations actuelles si l'ui était rendue plus efficace on pourrait atteindre ~20 fps (avant d'arriver aux limites pratiques de bandwith même avec chunking). \ No newline at end of file