Copie du message dans une structure semble fonctionnel - simplifié

This commit is contained in:
Samuel 2026-01-24 21:42:27 +01:00
parent 3439300b0d
commit c558152993
4 changed files with 13 additions and 37 deletions

View File

@ -3,6 +3,8 @@ Projet modèle pour le Rpi Pico (RP2040)
Code pour travailler sur la communication USB, côté device. Code pour travailler sur la communication USB, côté device.
Nous commençons à stocker les données reçues dans des structures pour simplifier l'interprétation des données.
Méthode de test Méthode de test
--------------- ---------------
* Ouvrir un terminal pour lire les données reçues en désactivant l'écho * Ouvrir un terminal pour lire les données reçues en désactivant l'écho
@ -26,4 +28,3 @@ Difficultés rencontrées
----------------------- -----------------------
En testant avec Linux, le terminal peut manger certains caractères lorsqu'il les reçoit (0x11, 0x12 et 0x13). En testant avec Linux, le terminal peut manger certains caractères lorsqu'il les reçoit (0x11, 0x12 et 0x13).
Le type message_t contient trop de champs, il faut supprimer les champs inutiles en s'assurant qu'il n'y a pas d'utilisation de ces champs.

View File

@ -2,7 +2,6 @@
#include <stdio.h> #include <stdio.h>
#include "communication.h" #include "communication.h"
#include "messagerie.h" #include "messagerie.h"
#include "tusb.h"
#define TAMPON_TAILLE 1020 #define TAMPON_TAILLE 1020

23
main.c
View File

@ -92,15 +92,10 @@ void main(void)
int nb_ech = 10; int nb_ech = 10;
int taille_morceau = 60; int taille_morceau = 60;
int nb_message=0; int nb_message=0;
float f;
stdio_init_all(); stdio_init_all();
sleep_ms(5000); sleep_ms(5000);
printf(">Device 1 - demarrage\n");
printf("struct float:%d\n", sizeof(f));
printf("struct message applicatif:%d\n", sizeof(message_applicatif));
gpio_init(PICO_DEFAULT_LED_PIN); gpio_init(PICO_DEFAULT_LED_PIN);
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT); gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
gpio_put(PICO_DEFAULT_LED_PIN, 0); gpio_put(PICO_DEFAULT_LED_PIN, 0);
@ -140,27 +135,13 @@ void main(void)
// données[2]: 1er registre // données[2]: 1er registre
// données[3 à tailles_données -1]: valeurs // données[3 à tailles_données -1]: valeurs
printf("type:%d %c\n", message.type, message.type);
printf("id_carte:%d %c\n", message.id_carte, message.id_carte);
for(int i=0; i< 4;i++){
printf("%x ", message.donnees[i]);
}
printf("\n");
memcpy(&message_applicatif, message.donnees, message.taille_donnees); memcpy(&message_applicatif, message.donnees, message.taille_donnees);
printf("id_carte:%d %c\n", message_applicatif.id_carte, message_applicatif.id_carte); if(message_applicatif.id_carte == USB_ID_PROPULSION && message_applicatif.adresse_registre == REG_PROPULSION_POSITION){
printf("commande:%d %c\n", message_applicatif.commande, message_applicatif.commande);
printf("add_reg:%d\n", message_applicatif.adresse_registre);
printf("taille_donnee:%d\n", message_applicatif.taille_donnees);
if(message_applicatif.id_carte == USB_ID_PROPULSION){
printf("registre:%d\n", message_applicatif.adresse_registre);
if(message_applicatif.adresse_registre == REG_PROPULSION_POSITION){
printf("x:%x, y:%x, rot:%x\n", message_applicatif.donnees_applicative.msg_propulsion_position.position_x_mm, printf("x:%x, y:%x, rot:%x\n", message_applicatif.donnees_applicative.msg_propulsion_position.position_x_mm,
message_applicatif.donnees_applicative.msg_propulsion_position.position_y_mm, message_applicatif.donnees_applicative.msg_propulsion_position.position_y_mm,
message_applicatif.donnees_applicative.msg_propulsion_position.orientation_rad); message_applicatif.donnees_applicative.msg_propulsion_position.orientation_rad);
} }
}
id_carte = message.donnees[1]; id_carte = message.donnees[1];
registre = message.donnees[2]; registre = message.donnees[2];

View File

@ -3,14 +3,10 @@
#define MESSAGE_TIMEOUT_US 2000 #define MESSAGE_TIMEOUT_US 2000
// Attention l'ordre de déclaration est important !! On fait de la copie de donnée en faisant confiance à cet ordre !
struct message_t{ struct message_t{
uint8_t type; // 'd' pour demande, 'r' pour une réception de données, 'w' pour écrire des données, '>' pour des logs uint8_t type; // 'b' pour binaire, '>' pour des logs
uint8_t id_carte; // Identifiant de la carte (on reprend les adresses I2C)
uint8_t adresse_registre; // Adresse du registre lu
uint8_t taille_donnees; uint8_t taille_donnees;
uint8_t donnees[255]; uint8_t donnees[255];
}; };
struct message_requete_t{ struct message_requete_t{
@ -21,9 +17,9 @@ struct message_requete_t{
}; };
struct message_applicatif_t{ struct message_applicatif_t{
uint8_t commande; uint8_t commande; // 'r' : réception de données, 'd' : demande de données
uint8_t id_carte; // Identifiant de la carte (on reprend les adresses I2C) uint8_t id_carte; // Identifiant de la carte (on reprend les adresses I2C)
uint8_t adresse_registre; // Adresse du registre lu uint8_t adresse_registre; // Adresse du registre lu ou écrit
uint8_t taille_donnees; uint8_t taille_donnees;
union{ union{
#ifdef MESSAGE_PROPULSION_H #ifdef MESSAGE_PROPULSION_H
@ -34,7 +30,6 @@ struct message_applicatif_t{
}; };
bool messagerie_message_disponible(); bool messagerie_message_disponible();
struct message_t messagerie_get_message(); struct message_t messagerie_get_message();
void messagerie_put_message(struct message_t message); void messagerie_put_message(struct message_t message);