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