#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <wiringPi.h>
#include <lcd.h>

// Prototype de la procédure d'affichage de la temp du processeur
void Affiche_Temp(void);

int main (void)
{

    int lcd1 ;		// Déclaration de l'afficheur

	/* Test du mode "root" et de l'intallation correcte de WiringPi*/
      if(getuid()!=0) //wiringPi requires root privileges
      {
        printf("Error:wiringPi must be run as root.\n");
        return 1;
      }
      if(wiringPiSetup()==-1)
      {
        printf("Error:wiringPi setup failed.\n");
        return 1;
      }
	/**************************************************************/

	// Initialisation de l'afficheur
	lcd1 = lcdInit (2, 16, 4, 8, 9, 0,1,2,3,0,0,0,0) ;

	/* Test de la bonne initialisation de l'afficheur*/
	if (lcd1 == -1)
		{
			printf ("lcdInit failed\n") ;
			return 1 ;
		}
	/************************************************/

	delay(80);

    // Appel de la procédure d'affichage de la temp du processeur
    Affiche_Temp();


  while(1);

  return 0 ;
}

/********************************************************/
/*Procédure d'affichage de la température du processeur de la Raspberry */
/********************************************************/

void Affiche_Temp(void)
{
    FILE *f = NULL;	// Déclaration d'un pointeur sur un fichier
    char i =0;		// Déclaration d'un index
    char temp[7];	// Déclaration d'un tableau de stockage de la température
    int lcd1 ;		// Déclaration de l'afficheur

    lcdClear(lcd1);	// Effacement du LCD
    delay(80);		// Delai pour prise en compte de l'effacement

	// Récupération température dans le fichier texte "temp.txt"
    system("/opt/vc/bin/vcgencmd measure_temp | cut -c6- > temp.txt");

	// Ouverture du fichier "ip.txt" en lecture seule
    f = fopen("temp.txt","r");
	// Test si le fichier est existant
       if(f != NULL)
    {
        //fseek(f,5,SEEK_SET);
		fgets(temp,7,f);
		// Fermeture du fichier "ip.txt"
        fclose(f);
        lcdPosition (lcd1, 0, 0) ;  lcdPuts (lcd1, "Temp  processeur") ;
        lcdPosition (lcd1, 0, 1) ;  lcdPuts (lcd1, temp) ;
    }

    delay (3000) ;		// Delai d'attente pour lecture
    lcdClear(lcd1);		// Effacement du LCD
    delay(80);			// Delai pour prise en compte de l'effacement
}
/********************************************************/
