@Charles said in Denky D4 + Tempo:
@Tostaky said in Denky D4 + Tempo:
STGE = xBxxxxx => B = 1011 => aujourd'hui rouge (3), demain blanc (2).
L'interface affiche toujours rouge / rougeje comprends pas j'ai testé le même code et aucun soucis
https://onlinegdb.com/_VnKGhRZ5
#include <stdio.h> #include <stdlib.h> #include <stdint.h> int main() { uint32_t status_register = strtol("9B3AD501", NULL, 16); printf("Status Register is 0x%08X\r\n", status_register); if (status_register >> 24) { char txt[32]; uint8_t sr = status_register >> 24; uint8_t val = sr & 0x03; if (val) { printf("Jour %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge"); } val = (sr >> 2) & 0x03; if (val) { printf("Demain %s\r\n", val==1?"Bleu":val==2?"Blanc":"Rouge"); } val = (sr >> 4) & 0x03; if (val) { printf("Préavis pointe mobile %d\r\n", val); } val = (sr >> 6) & 0x03; if (val) { printf("Pointe mobile en cours %d\r\n", val); } } return 0; }
La sortie donne bien ça
Status Register is 0x9B3AD501 Jour Rouge Demain Blanc Préavis Pointe mobile 1 Pointe mobile En cours 2
peut être essayer cette 2eme méthode au cas ou (avec aussi le
strtol
changé enstrtoul
)
https://onlinegdb.com/ADbvc4273#include <stdio.h> #include <stdlib.h> #include <stdint.h> int main() { uint32_t status_register = strtoul("9B3AD501", NULL, 16); printf("Status Register is 0x%08X\r\n", status_register); if (status_register >> 24) { char txt[32]; char coul[4][6] = { "----", "Bleu", "Blanc", "Rouge" }; uint8_t sr = status_register >> 24; uint8_t val = sr & 0x03; if (val) { printf("Jour %s\r\n", coul[val]); } val = (sr >> 2) & 0x03; if (val) { printf("Demain %s\r\n", coul[val]); } val = (sr >> 4) & 0x03; if (val) { printf("Préavis pointe mobile %d\r\n", val); } val = (sr >> 6) & 0x03; if (val) { printf("Pointe mobile en cours %d\r\n", val); } } return 0; return 0; }
qui donne la même chose mais codé différemment, t'as moyen de tester ?
Je n'ai pas modifié de code coté Denky car j'ai pris un firmware déjà compilé.
A la lecture du code, je suis 100% d'accord avec le fonctionnement.
Comme le script Berry accède à la valeur STGE et la décode correctement pour la transmettre à EmonCMS, j'en déduis que c'est quelque part entre la libteleinfo et l'affichage.
C'est plus à titre informatif que je fais remonter car j'utilise peu l'affichage