/*void Teleinfos::lireTrame(char *trame, Print& debug) { int i; int j=0; for (i=0; i < strlen(trame); i++){ if (trame[i] != 0x0D) { // Tant qu'on est pas au CR, c'est qu'on est sur une ligne du groupe Ligne[j++]=trame[i]; } else { //On vient de finir de lire une ligne, on la décode (récupération de l'etiquette + valeur + controle checksum decodeLigne(Ligne, debug); memset(Ligne,'\0',32); // on vide la ligne pour la lecture suivante j=0; } } } */ int Teleinfos::decodeLigne(char *ligne, Print& debug) { int debutValeur; int debutChecksum; // Décomposer en fonction pour lire l'étiquette etc ... debutValeur=lireEtiquette(ligne,debug); debutChecksum=lireValeur(ligne, debutValeur,debug); lireChecksum(ligne,debutValeur + debutChecksum -1,debug); if (checksum_ok(Etiquette, Donnee, Checksum[0], debug)){ // si la ligne est correcte (checksum ok) on affecte la valeur à l'étiquette return set(Etiquette,Donnee,debug); } else { return 0; } }
static ssize_t dht22_show_temperature(struct device *dev, struct device_attribute *attr, char *buf) { struct dht22_priv* priv; int temp; priv = dev_get_drvdata(dev); if (read_dht22(dev)) { dev_err(dev, "State: %u, bitCount: %u\n", priv->state, priv->bitCount); return -EIO; } if (!checksum_ok(priv)) { dev_err(dev, "Checksum not ok\n"); return -EIO; } temp = priv->t_int & 0x7F; temp <<= 8; temp += priv->t_dec; temp *= 100; return scnprintf(buf, PAGE_SIZE, "%d\n", temp); }
/*------------------------------------------------------------------------------*/ int LitValEtiquettes() { int id ; erreur_checksum = 0 ; for (id=0; id<NB_VALEURS; id++) { if ( (match = strstr(message, etiquettes[id])) != NULL) { sscanf(match, "%s %s %s", etiquettes[id], valeurs[id], checksum) ; if ( strlen(checksum) > 1 ) checksum[0]=' ' ; // sscanf ne peux lire le checksum a 0x20 (espace), si longueur checksum > 1 donc c'est un espace. if ( ! checksum_ok(etiquettes[id], valeurs[id], checksum[0]) ) { syslog(LOG_ERR, "Donnees teleinfo [%s] corrompues (essai %d) !\n", etiquettes[id], no_essais) ; erreur_checksum = 1 ; return 0 ; } } } // Remplace chaine "HP.." ou "HC.." par "HP ou "HC". valeurs[5][2] = '\0' ; //if (debug) printf("---------- %s ------------\n", timestamp) ; for (id=0; id<NB_VALEURS; id++) printf("%s='%s'\n", etiquettes[id], valeurs[id]) ; return 1 ; }