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,22 +81,16 @@ 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;
}

View File

@ -49,6 +49,12 @@ void log_create(const char idx){
for (int i=0; i<NB_MAX_CDC_CONNEXION; i++){
if(log_buffer[i].idx == INVALID_ID){
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;
}
}
@ -59,6 +65,8 @@ void log_destroy(const char idx){
struct log_buffer_t * p_log_bufffer;
p_log_bufffer = get_buffer(idx);
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
@ -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;
@ -179,9 +184,8 @@ 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);
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);
put_message(message);
printf("%s\n", affiche_message);
etat_message = ETAT_MESSAGE_DEBUT;
}
break;

View File

@ -2,6 +2,30 @@
#include <stdio.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
/// @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;
}

View File

@ -11,3 +11,7 @@ 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);
bool message_disponible(void);
void put_message(struct message_t message);
struct message_t get_message(void);