From 13643575c4e0d20e93fc84cfdef4ad715e980177 Mon Sep 17 00:00:00 2001 From: Samuel Date: Wed, 10 Sep 2025 18:44:54 +0200 Subject: [PATCH] =?UTF-8?q?Messages=20binaires=20identifi=C3=A9s=20et=20lu?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cdc_app.c | 24 +++++++++--------------- log_usb.c | 29 ++++++++++++++++------------- messagerie.c | 26 +++++++++++++++++++++++++- messagerie.h | 6 +++++- 4 files changed, 55 insertions(+), 30 deletions(-) diff --git a/cdc_app.c b/cdc_app.c index eb9d7b4..dd8d025 100644 --- a/cdc_app.c +++ b/cdc_app.c @@ -81,21 +81,15 @@ void cdc_app_task(void) { char message_en_clair[1024]; char texte_log[255]; unsigned int position_chaine = 0, position_sous_chaine; - /* - log_get(idx, chaine); - // Parcourir la chaine pour trouver les messages - messagerie_read_message(chaine, position_chaine); - if(message.type != 0){ - if(!message_to_string(message, message_en_clair)){ - printf("%s", message_en_clair); - }else{ - printf("erreur dans le traitement du message\n"); - } - + + log_analyse(idx); + while(message_disponible()){ + message = get_message(); + // Debug + message_to_string(message, message_en_clair); + printf("%s\n", message_en_clair); } - if(strlen(chaine)> 0){ - printf("%s", chaine); - }*/ + } } @@ -120,7 +114,7 @@ void tuh_cdc_rx_cb(uint8_t idx) { buf[count] = 0; log_add(idx, buf, count); - log_analyse(idx); + in_transfert_cb = 0; } diff --git a/log_usb.c b/log_usb.c index e1587e2..054b035 100644 --- a/log_usb.c +++ b/log_usb.c @@ -49,6 +49,12 @@ void log_create(const char idx){ for (int i=0; iidx = INVALID_ID; + printf("Destruction: idx: %d\n", idx); + sleep_ms(1500); } /// @brief Ajoute les données reçu au tampon tournant @@ -132,9 +140,9 @@ void log_analyse(const char idx){ increment_index(&index); }while(index != log_buffer->index_tampon_ecriture); - // Lecture du message message.type = 0; + message.idx = idx; unsigned int fin_message = 0; for(int i=0; i< index_chaine; i++){ char index_fin_message; @@ -156,17 +164,14 @@ void log_analyse(const char idx){ message.taille_donnees = chaine[i+3]; i = i + 4; // On se met à la fin du message fin_message = i; - // Debug - message_to_string(message, affiche_message); - printf("%s\n", affiche_message); - + put_message(message); } } } if(chaine[i] == 'r'){ // Est-ce que nous avons reçu l'entête du message ? if(i + 3 < index_chaine){ - message.type = 'd'; + message.type = 'r'; message.adresse_registre = chaine[i+1]; message.taille_donnees = chaine[i+2]; index_fin_message = i+ message.taille_donnees + 3; @@ -178,10 +183,9 @@ void log_analyse(const char idx){ } i = i + index_fin_message; // On se met à la fin du message fin_message = index_fin_message; - etat_message = ETAT_MESSAGE_DEBUT; - // Debug - message_to_string(message, affiche_message); - printf("%s\n", affiche_message); + etat_message = ETAT_MESSAGE_DEBUT; + + put_message(message); } } } @@ -195,9 +199,8 @@ void log_analyse(const char idx){ // message valide. message.donnees[message.taille_donnees] = '\0'; fin_message = i; - message_to_string(message, affiche_message); - - printf("%s\n", affiche_message); + put_message(message); + etat_message = ETAT_MESSAGE_DEBUT; } break; diff --git a/messagerie.c b/messagerie.c index b3026b5..7ef8e78 100644 --- a/messagerie.c +++ b/messagerie.c @@ -2,6 +2,30 @@ #include #include "messagerie.h" +#define NB_MAX_MESSAGE 30 + +int index_message=0; +struct message_t message_liste[NB_MAX_MESSAGE]; + +/// @brief Renvoi 1 si des message sont disponibles +/// @return +bool message_disponible(){ + return (index_message != 0); +} + +/// @brief Renvoi un message à traiter, à n'appeler que si message_disponible() renvoie 1 +/// @return Message +struct message_t get_message(){ + index_message = index_message - 1; + return message_liste[index_message]; +} + +void put_message(struct message_t message){ + if(index_message < NB_MAX_MESSAGE-1){ + message_liste[index_message] = message; + index_message = index_message + 1; + } +} /// @brief Remplit chaine_texte avec les données du message présentées en ascii /// @param message structure de transfert entre les cartes @@ -12,7 +36,7 @@ char message_to_string(struct message_t message, char * chaine_texte){ if(message.type == 'd' || message.type == 'w' ){ sprintf(chaine_texte, "%c: registre: %d, id_carte: %d, taille: %d", message.type, message.id_carte, message.taille_donnees); }else if(message.type == 'r'){ - sprintf(chaine_texte, "%c: registre: %d, taille: %d", message.type, message.taille_donnees); + sprintf(chaine_texte, "%c: registre: %d, taille: %d", message.type, message.adresse_registre, message.taille_donnees); }else{ return 1; } diff --git a/messagerie.h b/messagerie.h index 2311851..14be1fe 100644 --- a/messagerie.h +++ b/messagerie.h @@ -10,4 +10,8 @@ struct message_t{ }; struct message_t messagerie_read_message(const char * chaine, unsigned int * position_chaine); -char message_to_string(struct message_t message, char * chaine_texte); \ No newline at end of file +char message_to_string(struct message_t message, char * chaine_texte); + +bool message_disponible(void); +void put_message(struct message_t message); +struct message_t get_message(void); \ No newline at end of file