From 7a1425448440f50615f32db8c2e78747c4716415 Mon Sep 17 00:00:00 2001 From: Pierre Date: Tue, 6 Oct 2026 16:07:43 +0200 Subject: [PATCH] =?UTF-8?q?Mise=20=C3=A0=20jour=20des=20events=20dans=20l'?= =?UTF-8?q?historique=20avec=20ajout=20de=20EVENT=5FFIN=5FDECLENCHEMENT=20?= =?UTF-8?q?pour=20disposer=20du=20d=C3=A9but=20et=20de=20la=20fin=20des=20?= =?UTF-8?q?events=20ayant=20une=20dur=C3=A9e.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sources/bdd.h | 2 ++ sources/bdd_admin.c | 48 ++++++++++++++++++++--------------------- sources/bdd_fonctions.c | 3 ++- sources/bdd_synchro.c | 39 ++++++++++++++++++++++----------- sources/events.c | 12 +++++++---- 5 files changed, 62 insertions(+), 42 deletions(-) diff --git a/sources/bdd.h b/sources/bdd.h index 7cc77b4..94f4b13 100644 --- a/sources/bdd.h +++ b/sources/bdd.h @@ -246,4 +246,6 @@ //------------------------------------------------------------- #define TYPE_SOURCE_HISTORIQUE_EVENTS 6 #define EVENT_DECLENCHEMENT 1 // L'ID contient la cle_primaire de l'event + #define EVENT_FIN_DECLENCHEMENT 2 // L'ID contient la cle_primaire de l'event + \ No newline at end of file diff --git a/sources/bdd_admin.c b/sources/bdd_admin.c index 75437e8..7c51612 100644 --- a/sources/bdd_admin.c +++ b/sources/bdd_admin.c @@ -5,7 +5,8 @@ // //********************************************************************************************************************************************************************************** -// #define __DEBUG_ARCHIVAGE //Décommenter cette ligne pour avoir les messages de debug concernant les fonctions d'archivage +//#define __DEBUG_SAUVEGARDE //Décommenter cette ligne pour avoir les messages de debug concernant les fonctions de sauvegarde +//#define __DEBUG_ARCHIVAGE //Décommenter cette ligne pour avoir les messages de debug concernant les fonctions d'archivage // Include : #include "main.h" @@ -43,6 +44,7 @@ char chemin_temp_empreinte[MAX_LONGUEUR_NOM_FICHIER_SAUVEGARDE_BDD]; char empreinte[17]; // 16 caractères hexadécimaux + '\0' char no_mmsi[16]; // "000000000" par défaut (9 chiffres) - cf TB_Configuration char origine_bdd[16]; // "normale" par défaut - cf TB_Systeme.Origine_bdd (synthèse §35) +char chaine_adresse_mac[TAILLE_ADRESSE_MAC * 3]; // On a besoin de 3 caractères par octet (xx:) sauf pour le dernier (xx) + le NULL de fin FILE * ptr_fichier_sauvegarde; FILE * ptr_fichier_empreinte; char requete[MAX_LONGUEUR_REQUETE_MYSQL]; @@ -83,7 +85,7 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; // Calcul de la date et de l'heure, au bon format : date_courante(str_date, DATE_COURANTE_SANS_MS, FORMAT_DATE_COURANTE_FICHIER); - // NOUVEAU : lecture du MMSI courant (TB_Configuration.No_mmsi), transmis dans l'en-tête de l'archive (cf synthèse §32.3) : + // lecture du MMSI courant (TB_Configuration.No_mmsi), transmis dans l'en-tête de l'archive (cf synthèse §32.3) : sprintf(requete, "SELECT Valeur FROM TB_Configuration WHERE Nom='No_mmsi'"); mysql_query(bdd.pointeur, requete); result = mysql_store_result(bdd.pointeur); @@ -91,11 +93,12 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; else strcpy(no_mmsi, "000000000"); // Valeur par défaut si jamais introuvable (ne devrait normalement pas arriver) if (result != NULL) mysql_free_result(result); - // NOUVEAU : lecture de l'origine de la BDD locale (TB_Systeme.Origine_bdd), transmise dans l'en-tête (cf synthèse §35). - // Posée à 'factory' ou 'restauration' par la procédure de réinitialisation/restauration, APRÈS que celle-ci soit - // entièrement terminée (y compris, pour une restauration, après le rechargement de Bateau_data - sans quoi cette - // valeur serait écrasée par celle, ancienne, contenue dans la sauvegarde elle-même). Remise à 'normale' plus bas, - // une fois cette archive confirmée transmise avec succès - donc transmise une seule fois. + // lecture de l'origine de la BDD locale (TB_Systeme.Origine_bdd), transmise dans l'en-tête (cf synthèse §35). + // Posée à 'factory' ou 'restauration' par l'updater, APRÈS que celle-ci soit entièrement terminée (y compris, + // pour une restauration, après le rechargement de Bateau_data - sans quoi cette valeur serait écrasée par celle, + // ancienne, contenue dans la sauvegarde elle-même). + // La valeur dans la BDD est remise à 'normale' plus bas dans cette fonction, une fois cette archive confirmée + // transmise avec succès - donc transmise une seule fois. sprintf(requete, "SELECT Valeur FROM TB_Systeme WHERE Nom='Origine_bdd'"); mysql_query(bdd.pointeur, requete); result = mysql_store_result(bdd.pointeur); @@ -129,18 +132,25 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; // Attention : le format '# [nom_de_champ=valeur_du_champ]' est utilisé par le traitement côté serveur... // Il est donc fortement conseillé de ne PAS modifier le format de ces trames d'entête !!! - fprintf(ptr_fichier_sauvegarde, - "# [Adresse_mac=%02X:%02X:%02X:%02X:%02X:%02X]\n", - systeme.modules_physiques[0].adresse_mac[0], systeme.modules_physiques[0].adresse_mac[1], systeme.modules_physiques[0].adresse_mac[2], - systeme.modules_physiques[0].adresse_mac[3], systeme.modules_physiques[0].adresse_mac[4], systeme.modules_physiques[0].adresse_mac[5]); + fprintf(ptr_fichier_sauvegarde, "# [Adresse_mac=%s]\n", conversion_adresse_mac_chaine(systeme.modules_physiques[0].adresse_mac, chaine_adresse_mac, ':')); fprintf(ptr_fichier_sauvegarde, "# [Nom_du_bateau=%s]\n", systeme.nom_bateau); - fprintf(ptr_fichier_sauvegarde, "# [No_mmsi=%s]\n", no_mmsi); // NOUVEAU (cf synthèse §32.3/32.4) + fprintf(ptr_fichier_sauvegarde, "# [No_mmsi=%s]\n", no_mmsi); // (cf synthèse §32.3/32.4) fprintf(ptr_fichier_sauvegarde, "# [Date_fichier=%s]\n", str_date); fprintf(ptr_fichier_sauvegarde, "# [Version_soft_no_package=%s]\n", systeme.package_no_version); - fprintf(ptr_fichier_sauvegarde, "# [Origine_bdd=%s]\n", origine_bdd); // NOUVEAU (cf synthèse §35) + fprintf(ptr_fichier_sauvegarde, "# [Origine_bdd=%s]\n", origine_bdd); // (cf synthèse §35) +#ifdef __DEBUG_SAUVEGARDE + affichage_debug(__FILE__, __LINE__, "Création d'unr archive : ", TYPE_MESSAGE_DEBUG_PAR_DEFAUT); + printf("\t%-40s: %s\n", "Adresse_mac", conversion_adresse_mac_chaine(systeme.modules_physiques[0].adresse_mac, chaine_adresse_mac, ':')); + printf("\t%-40s: %s\n", "Nom_du_bateau", systeme.nom_bateau); + printf("\t%-40s: %s\n", "No_mmsi", no_mmsi); + printf("\t%-40s: %s\n", "Date_fichier", str_date); + printf("\t%-40s: %s\n", "Version_soft_no_package", systeme.package_no_version); + printf("\t%-40s: %s\n", "Origine_bdd", origine_bdd); + printf("\n"); +#endif + fclose(ptr_fichier_sauvegarde); - // Fin de SDIR #292 @@ -425,16 +435,6 @@ char suffixe_fichier_log[MAX_LONGUEUR_NOM_FICHIER]; char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; - -// sprintf(tmp, "/!\\ \tFonction d'archivage TEMPORAIREMENT suspendue..."); -// affichage_debug(__FILE__, __LINE__, tmp, TYPE_MESSAGE_DEBUG_WARNING); -// return(0); - - - - - - // Calcul de la date courante pour nommer le fichier de logs : time(&now); maintenant = *localtime(&now); diff --git a/sources/bdd_fonctions.c b/sources/bdd_fonctions.c index fe65f1a..27c7217 100644 --- a/sources/bdd_fonctions.c +++ b/sources/bdd_fonctions.c @@ -957,6 +957,7 @@ char requete[MAX_LONGUEUR_REQUETE_MYSQL]; //------------------------------------ case TYPE_SOURCE_HISTORIQUE_SYSTEME : case TYPE_SOURCE_HISTORIQUE_USB : + case TYPE_SOURCE_HISTORIQUE_EVENTS : { break; } @@ -973,7 +974,7 @@ char requete[MAX_LONGUEUR_REQUETE_MYSQL]; if (flag_enregistrement) { sprintf(requete, "INSERT INTO TB_Historique (Type_source, ID_Source, Type, Valeur, Complement) VALUES (%i, %i, %i, %.4f, '%s')", type_source, id_source, type, valeur, complement); -// printf("Requete d'enregistrement dans l'historique = [ %s; ]\n", requete); + printf("Requete d'enregistrement dans l'historique = [ %s; ]\n", requete); mysql_query(bdd.pointeur, requete); } } diff --git a/sources/bdd_synchro.c b/sources/bdd_synchro.c index 485e7e0..63c70f1 100644 --- a/sources/bdd_synchro.c +++ b/sources/bdd_synchro.c @@ -254,6 +254,32 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; } } //--------------------------------------------------------------- + else if (strstr(row[0], "Demande_maj_nmea") != NULL) + { + val_u8 = atoi(row[1]); + if (val_u8 == 1) + { + flag_demande_maj_nmea = TRUE; // Flag traité en fin de cette fonction... + + // RAZ de la demande dans la BDD : + sprintf(requete, "UPDATE TB_Systeme SET Valeur='0' WHERE Nom='Demande_maj_nmea' "); + mysql_query(bdd.pointeur, requete); + } + } + //--------------------------------------------------------------- + else if (strstr(row[0], "Demande_sauvegarde_bdd") != NULL) + { + val_u8 = atoi(row[1]); + if (val_u8 == 1) + { + systeme.compteur_sauvegarde_bdd = 0; // Traité par gestion_systeme() dans systeme.c + + // RAZ de la demande dans la BDD : + sprintf(requete, "UPDATE TB_Systeme SET Valeur='0' WHERE Nom='Demande_sauvegarde_bdd' "); + mysql_query(bdd.pointeur, requete); + } + } + //--------------------------------------------------------------- else if (strstr(row[0], "Demande_reboot") != NULL) { if (strcmp(row[1], "Reboot") == 0) @@ -346,19 +372,6 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; systeme.heures_speciales[HEURE_SPECIALE_CREPUSCULE_NAUTIQUE].secondes = 0; } } - //--------------------------------------------------------------- - else if (strstr(row[0], "Demande_maj_nmea") != NULL) - { - val_u8 = atoi(row[1]); - if (val_u8 == 1) - { - flag_demande_maj_nmea = TRUE; // Flag traité en fin de cette fonction... - - // RAZ de la demande dans la BDD : - sprintf(requete, "UPDATE TB_Systeme SET Valeur='0' WHERE Nom='Demande_maj_nmea' "); - mysql_query(bdd.pointeur, requete); - } - } } mysql_free_result(result); //Libération du jeu de résultat diff --git a/sources/events.c b/sources/events.c index 385045a..5831afd 100644 --- a/sources/events.c +++ b/sources/events.c @@ -347,6 +347,9 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; sprintf(tmp, "Déclenchement de l'évènement # %i [clé_primaire = %i]", no_event, events.events[no_event].cle_primaire); affichage_debug(__FILE__, __LINE__, tmp, TYPE_MESSAGE_DEBUG_OK); + // Enregistrement historique : + enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL); + declenchement_event(no_event); if (events.events[no_event].conditions_horaires.nb > 0) events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // S'il y a condition horaire, on revient directement au repos, en attente de la prochaine condition horaire. @@ -367,6 +370,10 @@ char tmp[MAX_LONGUEUR_BUFFER_TEMPORAIRE_DEBUG]; sprintf(tmp, "Event #%i : La condition de test est repassée à False. Le séquenceur repasse au repos.", no_event); affichage_debug(__FILE__, __LINE__, tmp, TYPE_MESSAGE_DEBUG_OK); #endif + + // Enregistrement historique : + enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_FIN_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL); + events.events[no_event].sequenceur.etat = ETAT_SEQUENCEUR_EVENT_REPOS; // Retour au repos } @@ -539,10 +546,7 @@ char chaine[20]; // Enregistrement historique du changement de consigne du circuit : enregistrement_historique(TYPE_SOURCE_HISTORIQUE_CIRCUITS, CIRCUIT_ACTION_EVENT, circuits.circuits[no_circuit].cle_primaire, events.events[no_event].cle_primaire, NULL); } - - // Enregistrement historique : - enregistrement_historique(TYPE_SOURCE_HISTORIQUE_EVENTS, EVENT_DECLENCHEMENT, events.events[no_event].cle_primaire, 0, NULL); - + // Alarme message : if (events.events[no_event].alarme_message > 0) {