From aa66841f3a9fd9e75eebc1b1e66f14fe4cb9cd2c Mon Sep 17 00:00:00 2001 From: Samuel Date: Sat, 18 Jul 2026 11:24:07 +0200 Subject: [PATCH] =?UTF-8?q?Envoi=20des=20donn=C3=A9es=20sur=20demande?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- communication.c | 20 ++++++++++++++++++++ communication.h | 5 +++++ messagerie_applicative.c | 28 ++++++++++++++++------------ messagerie_applicative.h | 2 +- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/communication.c b/communication.c index 74359ab..5aa2437 100644 --- a/communication.c +++ b/communication.c @@ -1,4 +1,5 @@ #include "pico/error.h" +#include "pico/stdio.h" #include #include "communication.h" #include "messagerie.h" @@ -149,3 +150,22 @@ void communication_reception_message(){ augmente_index(&(com_reception_buffer.index_tampon_lecture), fin_message); } + +#define MESSAGE_EMISSION_MAX_SIZE 255 +uint8_t message_emission[MESSAGE_EMISSION_MAX_SIZE]; +uint8_t message_emission_index_message; + +void communication_nouveau_message(){ + message_emission_index_message=0; +} + +void communication_ajout_message(uint8_t donnée){ + if (message_emission_index_message <= MESSAGE_EMISSION_MAX_SIZE){ + message_emission[message_emission_index_message] = donnée; + message_emission_index_message++; + } +} + +void communication_envoi_message(){ + stdio_put_string(message_emission, message_emission_index_message, false, false); +} \ No newline at end of file diff --git a/communication.h b/communication.h index 9275aa9..fc52eb6 100644 --- a/communication.h +++ b/communication.h @@ -1,3 +1,8 @@ #include "messagerie_applicative.h" void communication_reception_message(void); void communication_init(void); + + +void communication_nouveau_message(); +void communication_ajout_message(uint8_t donnée); +void communication_envoi_message(); \ No newline at end of file diff --git a/messagerie_applicative.c b/messagerie_applicative.c index 835fdfe..1b52b8d 100644 --- a/messagerie_applicative.c +++ b/messagerie_applicative.c @@ -1,6 +1,5 @@ #include #include "messagerie_applicative.h" -#include #define TAILLE_MEMOIRE_ECHANGE 0xFF #define NB_BANK 10 @@ -38,15 +37,21 @@ struct bank_mémoire_t * assigner_bank_mémoire(uint8_t bank_id){ return &(list_memoire_echange[i]); } } + return NULL; } +/// @brief Renvoi la banque mémoire avec l'identifiant bank_id. +/// Si aucune banque ne correspond, la fonction trouve une banque vide et +/// lui assigne l'identifiant. Si toutes les banques sont prises, renvoie NULL +/// @param bank_id identifiant de la banque struct bank_mémoire_t * get_bank_mémoire(uint8_t bank_id){ for (uint8_t i = 0; i< NB_BANK ; i++){ if(list_memoire_echange[i].mémoire_id == bank_id){ return &(list_memoire_echange[i]); } } - return NULL; + return assigner_bank_mémoire(bank_id); + } @@ -73,31 +78,30 @@ void reset_mémoire_modifiée(struct bank_mémoire_t * bank_memoire, uint8_t reg } uint8_t * get_memoire_echange(uint8_t bank_id){ - for (uint8_t i = 0; i< NB_BANK ; i++){ - if(list_memoire_echange[i].mémoire_id == bank_id){ - return list_memoire_echange[i].mémoire_échange; - } + struct bank_mémoire_t * bank = get_bank_mémoire(bank_id); + if (bank){ + return bank->mémoire_échange; } return NULL; } -void get_données_reçues(uint8_t * dst, uint8_t taille, uint8_t registre, uint8_t bank_id){ +uint8_t * get_données_reçues(uint8_t registre, uint8_t bank_id){ uint8_t * ma_memoire_echange = get_memoire_echange(bank_id); - memcpy(dst, &(ma_memoire_echange[registre]), taille); + if(ma_memoire_echange) + return &(ma_memoire_echange[registre]); + return NULL; } void mise_données_dans_échange(uint8_t * source, uint8_t taille, uint8_t registre, uint8_t bank_id){ uint8_t * ma_memoire_echange = get_memoire_echange(bank_id); - memcpy(&(ma_memoire_echange[registre]), source, taille); + if(ma_memoire_echange) + memcpy(&(ma_memoire_echange[registre]), source, taille); } /// @brief Copie le message dans la mémoire d'échange /// @param message_applicatif message reçu void réception_données(struct message_applicatif_t message_applicatif){ struct bank_mémoire_t * bank_memoire = get_bank_mémoire(message_applicatif.id_carte); - if(bank_memoire == NULL){ - bank_memoire = assigner_bank_mémoire(message_applicatif.id_carte); - } uint8_t * ma_memoire_echange = bank_memoire->mémoire_échange; diff --git a/messagerie_applicative.h b/messagerie_applicative.h index 2ab4b75..698a962 100644 --- a/messagerie_applicative.h +++ b/messagerie_applicative.h @@ -19,7 +19,7 @@ struct message_applicatif_t{ void réception_données(struct message_applicatif_t message_applicatif); void écriture_données(unsigned int adresse, uint8_t donnée); -void get_données_reçues(uint8_t * dst, uint8_t taille, uint8_t registre, uint8_t bank_id); +uint8_t * get_données_reçues(uint8_t registre, uint8_t bank_id); void mise_données_dans_échange(uint8_t * source, uint8_t taille, uint8_t registre, uint8_t bank_id); uint8_t * get_mémoire_modifiée(uint8_t bank_id, uint8_t registre); void messagerie_applicative_callback(uint8_t id_carte, uint8_t registre, void (*callback) (uint8_t *));