Envoi des données sur demande

This commit is contained in:
Samuel 2026-07-18 11:24:07 +02:00
parent 9c4588958c
commit aa66841f3a
4 changed files with 42 additions and 13 deletions

View File

@ -1,4 +1,5 @@
#include "pico/error.h"
#include "pico/stdio.h"
#include <stdio.h>
#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);
}

View File

@ -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();

View File

@ -1,6 +1,5 @@
#include <string.h>
#include "messagerie_applicative.h"
#include <stdio.h>
#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;

View File

@ -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 *));