Пример #1
0
/*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;
	}
}
Пример #2
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);
}
Пример #3
0
/*------------------------------------------------------------------------------*/
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 ;
}