Messages binaires identifiés et lus

This commit is contained in:
Samuel 2025-09-10 18:44:54 +02:00
parent ba4dc7ade2
commit 13643575c4
4 changed files with 55 additions and 30 deletions

View File

@ -81,21 +81,15 @@ void cdc_app_task(void) {
char message_en_clair[1024]; char message_en_clair[1024];
char texte_log[255]; char texte_log[255];
unsigned int position_chaine = 0, position_sous_chaine; unsigned int position_chaine = 0, position_sous_chaine;
/*
log_get(idx, chaine); log_analyse(idx);
// Parcourir la chaine pour trouver les messages while(message_disponible()){
messagerie_read_message(chaine, position_chaine); message = get_message();
if(message.type != 0){ // Debug
if(!message_to_string(message, message_en_clair)){ message_to_string(message, message_en_clair);
printf("%s", message_en_clair); printf("%s\n", message_en_clair);
}else{
printf("erreur dans le traitement du message\n");
}
} }
if(strlen(chaine)> 0){
printf("%s", chaine);
}*/
} }
} }
@ -120,7 +114,7 @@ void tuh_cdc_rx_cb(uint8_t idx) {
buf[count] = 0; buf[count] = 0;
log_add(idx, buf, count); log_add(idx, buf, count);
log_analyse(idx);
in_transfert_cb = 0; in_transfert_cb = 0;
} }

View File

@ -49,6 +49,12 @@ void log_create(const char idx){
for (int i=0; i<NB_MAX_CDC_CONNEXION; i++){ for (int i=0; i<NB_MAX_CDC_CONNEXION; i++){
if(log_buffer[i].idx == INVALID_ID){ if(log_buffer[i].idx == INVALID_ID){
log_buffer[i].idx = idx; log_buffer[i].idx = idx;
log_buffer[i].log_dispo[0] = '\0';
log_buffer[i].index_tampon = 0;
log_buffer[i].copy_active = 0;
log_buffer[i].index_tampon = 0;
log_buffer[i].index_tampon_ecriture = 0;
log_buffer[i].index_tampon_lecture = 0;
return; return;
} }
} }
@ -59,6 +65,8 @@ void log_destroy(const char idx){
struct log_buffer_t * p_log_bufffer; struct log_buffer_t * p_log_bufffer;
p_log_bufffer = get_buffer(idx); p_log_bufffer = get_buffer(idx);
p_log_bufffer->idx = INVALID_ID; p_log_bufffer->idx = INVALID_ID;
printf("Destruction: idx: %d\n", idx);
sleep_ms(1500);
} }
/// @brief Ajoute les données reçu au tampon tournant /// @brief Ajoute les données reçu au tampon tournant
@ -132,9 +140,9 @@ void log_analyse(const char idx){
increment_index(&index); increment_index(&index);
}while(index != log_buffer->index_tampon_ecriture); }while(index != log_buffer->index_tampon_ecriture);
// Lecture du message // Lecture du message
message.type = 0; message.type = 0;
message.idx = idx;
unsigned int fin_message = 0; unsigned int fin_message = 0;
for(int i=0; i< index_chaine; i++){ for(int i=0; i< index_chaine; i++){
char index_fin_message; char index_fin_message;
@ -156,17 +164,14 @@ void log_analyse(const char idx){
message.taille_donnees = chaine[i+3]; message.taille_donnees = chaine[i+3];
i = i + 4; // On se met à la fin du message i = i + 4; // On se met à la fin du message
fin_message = i; fin_message = i;
// Debug put_message(message);
message_to_string(message, affiche_message);
printf("%s\n", affiche_message);
} }
} }
} }
if(chaine[i] == 'r'){ if(chaine[i] == 'r'){
// Est-ce que nous avons reçu l'entête du message ? // Est-ce que nous avons reçu l'entête du message ?
if(i + 3 < index_chaine){ if(i + 3 < index_chaine){
message.type = 'd'; message.type = 'r';
message.adresse_registre = chaine[i+1]; message.adresse_registre = chaine[i+1];
message.taille_donnees = chaine[i+2]; message.taille_donnees = chaine[i+2];
index_fin_message = i+ message.taille_donnees + 3; 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 i = i + index_fin_message; // On se met à la fin du message
fin_message = index_fin_message; fin_message = index_fin_message;
etat_message = ETAT_MESSAGE_DEBUT; etat_message = ETAT_MESSAGE_DEBUT;
// Debug
message_to_string(message, affiche_message); put_message(message);
printf("%s\n", affiche_message);
} }
} }
} }
@ -195,9 +199,8 @@ void log_analyse(const char idx){
// message valide. // message valide.
message.donnees[message.taille_donnees] = '\0'; message.donnees[message.taille_donnees] = '\0';
fin_message = i; fin_message = i;
message_to_string(message, affiche_message); put_message(message);
printf("%s\n", affiche_message);
etat_message = ETAT_MESSAGE_DEBUT; etat_message = ETAT_MESSAGE_DEBUT;
} }
break; break;

View File

@ -2,6 +2,30 @@
#include <stdio.h> #include <stdio.h>
#include "messagerie.h" #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 /// @brief Remplit chaine_texte avec les données du message présentées en ascii
/// @param message structure de transfert entre les cartes /// @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' ){ 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); sprintf(chaine_texte, "%c: registre: %d, id_carte: %d, taille: %d", message.type, message.id_carte, message.taille_donnees);
}else if(message.type == 'r'){ }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{ }else{
return 1; return 1;
} }

View File

@ -10,4 +10,8 @@ struct message_t{
}; };
struct message_t messagerie_read_message(const char * chaine, unsigned int * position_chaine); struct message_t messagerie_read_message(const char * chaine, unsigned int * position_chaine);
char message_to_string(struct message_t message, char * chaine_texte); 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);