//********************************************************************************************************************************************************************************** // Fichier ENTREES.C // // Contient toutes les fonctions liées à la lecture de l'état des entrées //**********************************************************************************************************************************************************************************/ // Includes : #include "main.h" // Prototypes : void gestion_entrees(void); void gestion_entrees_aux(void); void gestion_entrees_level_sensor(void); void gestion_entrees_volt(void); void gestion_entrees_nmea(void); void gestion_entrees_ow(void); void gestion_entrees_predefinies(void); void gestion_entrees_core(void); void gestion_entrees_gpio(void); int8_t init_entrees(void); int8_t init_entrees_aux(void); int8_t init_entrees_level_sensor(void); int8_t init_entrees_volt(void); int8_t init_entrees_nmea(void); int8_t init_entrees_ow(void); int8_t init_entrees_predefinies(void); int8_t init_entrees_core(void); int8_t init_entrees_gpio(void); float lecture_entree(uint8_t type, uint8_t module, uint8_t no, bool flag_immediat); int16_t entree_no(uint8_t type, uint8_t module, uint8_t no); uint8_t lecture_entree_gpio(uint8_t no, int8_t logique); // Variables globales : struct Struct_entrees entrees; struct gpiod_chip *gpiod_chip0; // Nécessaire pour CM5 struct gpiod_line_request *gpiod_entrees_request; // Nécessaire pour CM5 /********************************************************************************************************************************************************************************** Fonction LECTURE_ENTREE Fonction utilisée pour connaitre l'état d'une entrée, quel que soit sont type. Reçoit en paramètre : le Type d'entrée, le module comportant l'entrée, le n° sur le module et un flag permettant de forcer la lecture immédiate (pour GPIO) Retourne : l'état de l'entrée NB : Dans le cas où le flag est 'faux', l'appel à cette fonction remontera le dernier état connu, mis à jour par le gestionnaire correspondant au type. NB2 : L'utilisation du flag n'est possible que pour les entrées de type GPIO (pour les autres, il est ignoré...). Ce flag est à utiliser avec modération... **********************************************************************************************************************************************************************************/ float lecture_entree(uint8_t type, uint8_t module, uint8_t no, bool flag_immediat) { int16_t x; x = entree_no(type, module, no); switch(type) { //----------------------------- case TYPE_ENTREES_AUXILIAIRES : { return(entrees.aux.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_LEVEL_SENSOR : { return(entrees.level_sensor.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_VOLTAGE : { return(entrees.volt.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_NMEA : { return(entrees.nmea.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_OW : { return(entrees.ow.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_PREDEFINIES : { return(entrees.predefinies.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_CORE : { return(entrees.core.entrees[x].valeur); break; } //----------------------------- case TYPE_ENTREES_GPIO : { if (flag_immediat) entrees.gpio.entrees[x].valeur = lecture_entree_gpio(no, entrees.gpio.entrees[x].logique); return(entrees.gpio.entrees[x].valeur); break; } //----------------------------- default: ; } return (0xFFFFFFFF); // Cas d'erreur } /********************************************************************************************************************************************************************************** Fonction ENTREES Lance le traitement régulier du gestionnaire de chaque type d'entrée **********************************************************************************************************************************************************************************/ void gestion_entrees(void) { gestion_entrees_aux(); gestion_entrees_level_sensor(); gestion_entrees_volt(); gestion_entrees_nmea(); gestion_entrees_ow(); gestion_entrees_predefinies(); gestion_entrees_core(); gestion_entrees_gpio(); } /********************************************************************************************************************************************************************************** Fonction ENTREES_AUX Fonction utilisée pour mettre à jour toutes les sorties GPIO de façon synchrones **********************************************************************************************************************************************************************************/ void gestion_entrees_aux(void) { // Il n'y a rien à faire car l'état des entrées AUX est remonté automatiquement par le Compagnon via une commande UP. } /********************************************************************************************************************************************************************************** Fonction ENTREES_LEVEL_SENSOR **********************************************************************************************************************************************************************************/ void gestion_entrees_level_sensor(void) { switch(entrees.level_sensor.sequenceur.etat) { case ETAT_SEQUENCEUR_ENTREES_LEVEL_SENSOR_INIT: { if ((entrees.level_sensor.sequenceur.compteur == 0) && (systeme.flag_cm3p_ready)) { c_bus_down_commande_config_level_sensors(); // Commande de config des entrées Level Sensor vers le Compagnon sur C-Bus entrees.level_sensor.sequenceur.etat = ETAT_SEQUENCEUR_ENTREES_LEVEL_SENSOR_REPOS; } break; } case ETAT_SEQUENCEUR_ENTREES_LEVEL_SENSOR_REPOS: { break; } default : entrees.level_sensor.sequenceur.etat = ETAT_SEQUENCEUR_ENTREES_LEVEL_SENSOR_REPOS; } } /********************************************************************************************************************************************************************************** Fonction ENTREES_VOLT **********************************************************************************************************************************************************************************/ void gestion_entrees_volt(void) { // Il n'y a rien à faire car l'état des entrées VOLTAGE est remonté automatiquement par le Compagnon via une commande UP. } /********************************************************************************************************************************************************************************** Fonction ENTREES_NMEA **********************************************************************************************************************************************************************************/ void gestion_entrees_nmea(void) { // Il n'y a rien à faire car l'état des entrées NMEA est remonté automatiquement par le Compagnon via une commande UP. } /********************************************************************************************************************************************************************************** Fonction ENTREES_OW **********************************************************************************************************************************************************************************/ void gestion_entrees_ow(void) { // Il n'y a rien à faire car l'état des entrées OW est remonté automatiquement par le Compagnon via une commande UP. } /********************************************************************************************************************************************************************************** Fonction ENTREES_PREDEFINIES **********************************************************************************************************************************************************************************/ void gestion_entrees_predefinies(void) { // Il n'y a rien à faire car l'état des entrées PREDEFINIES est remonté automatiquement par le Compagnon via les commandes UP. } /********************************************************************************************************************************************************************************** Fonction ENTREES_CORE Séquenceur permettant la lecture des trames reçues sur la ligne Téléinfo du compteur EDF **********************************************************************************************************************************************************************************/ void gestion_entrees_core(void) { int i; char commande[MAX_TAILLE_COMMANDE_SHELL]; char chaine[300]; if (entrees.core.sequenceur.compteur == 0) { entrees.core.sequenceur.compteur = PERIODE_LECTURE_ENTREES_CORE; // Réarmement du timer périodique strcpy(commande, "{ "); // Attention, l'espace après le '{' est obligatoire ! for (i=0; i 0) // Dans le cas où on n'a pas effectué un comptage sur 1 seconde au moins, on ne traite pas la mesure de l'entrée : { // printf("Vitesse boucle principale = %i boucles/seconde\n", (supervision_boucle_principale.nb_boucles / supervision_boucle_principale.nb_secondes)); supervision_boucle_principale.nb_boucles = 0; supervision_boucle_principale.nb_secondes = 0; } } } strcat(commande, " }"); // Attention, l'espace avant le '{' est obligatoire ! sprintf(chaine, " > %s/%s &", REPERTOIRE_TMP_CORE, NOM_FICHIER_ETAT_ENTREES_CORE); strcat(commande, chaine); //printf("Commande Shell = [%s]\n", commande); commande_shell(commande); } } /********************************************************************************************************************************************************************************** Fonction ENTREES_GPIO Fonction utilisée pour rendre la lecture des entrées GPIO synchrones (tous les états lus d'un coup) **********************************************************************************************************************************************************************************/ void gestion_entrees_gpio(void) { int i; if (entrees.gpio.sequenceur.compteur == 0) { entrees.gpio.sequenceur.compteur = PERIODE_LECTURE_ENTREES_GPIO; // Réarmement du timer périodique for (i=0; i