Messages binaires identifiés et lus
This commit is contained in:
parent
ba4dc7ade2
commit
13643575c4
22
cdc_app.c
22
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;
|
||||
}
|
||||
|
||||
|
||||
25
log_usb.c
25
log_usb.c
@ -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;
|
||||
|
||||
26
messagerie.c
26
messagerie.c
@ -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;
|
||||
}
|
||||
|
||||
@ -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);
|
||||
Loading…
Reference in New Issue
Block a user