Envoi message de position selon protocole "com_v2"

This commit is contained in:
Samuel 2026-01-28 19:12:56 +01:00
commit 4d7c9c7d43
4 changed files with 133 additions and 0 deletions

BIN
Host_cdc_usb Executable file

Binary file not shown.

103
Host_cdc_usb.c Normal file
View File

@ -0,0 +1,103 @@
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "Messages.h"
time_t rawtime;
struct tm * timeinfo;
void envoi_données(uint8_t * données, unsigned int taille_données, FILE *fp){
for(int i=0; i<taille_données; i++ ){
fputc(données[i], fp);
printf("0x%02x ", données[i]);
}
}
void envoi_données_protocole(uint8_t * données, unsigned int taille_données, FILE *fp){
fputc(0xFF, fp);printf("0xFF ");
fputc(0xFF, fp);printf("0xFF ");
fputc(taille_données + 1, fp);printf("%d ", taille_données + 1);
envoi_données(données, taille_données,fp);
fputc(0x00, fp); printf("0x00 ");
fputc('\n', fp); // Besoin du '\n' pour que la trame soit réellement expédiée (avant d'avoir fini de remplir le tampon)
printf("\n");
}
/// @brief Envoie des données, de l'entête et du caractère de fin du message
/// @param données
/// @param taille_données
/// @param fp
void envoi_données_applicatives(uint8_t commande, uint8_t id_carte, uint8_t adresse_reg, uint8_t * données, unsigned int taille_données, FILE *fp){
struct message_applicatif_t message_applicatif;
message_applicatif.commande = commande;
message_applicatif.id_carte = id_carte;
message_applicatif.adresse_registre = adresse_reg;
message_applicatif.taille_donnees = taille_données;
memcpy(message_applicatif.donnees_applicative.donnees, données, taille_données);
envoi_données_protocole((uint8_t *) &message_applicatif, taille_données + 4, fp);
}
int main(){
FILE *fp;
time_t rawtime, rawtime_old;
time ( &rawtime );
rawtime_old =0;
char on=1;
char filename[] = "/dev/ttyACM0";
printf("Host cdc USB\n");
fp = fopen(filename, "w");
if(fp == NULL){
printf("Open failed: %s\n", filename);
return 1;
}else{
printf("Open success: %s\n", filename);;
}
int my_char;
while(1){
time ( &rawtime );
if(rawtime > rawtime_old +2){
rawtime_old = rawtime;
struct msg_propulsion_position_t msg_propulsion_position;
msg_propulsion_position.position_x_mm = 1.5;
msg_propulsion_position.position_y_mm = 2.5;
msg_propulsion_position.orientation_rad = -3;
uint8_t données_led[10];
données_led[0]='r';
données_led[1]='D';
données_led[2]=0x00;
données_led[3]=0x01;
if(on){
données_led[4]=0x25;
}else{
données_led[4]=0x05;
}
on = !on;
//envoi_données_protocole(données_led, 5, fp);
//envoi_données_applicatives('r', 'D', 0, &données_led[4], 1, fp);
printf("envoi message\n");
envoi_données_applicatives('r', 'P', 0, (uint8_t *) &msg_propulsion_position, sizeof(msg_propulsion_position), fp);
}
}
// Lecture de la liaison série (décodage hexa)
do{
my_char = fgetc(fp);
printf("%02x ", my_char);
if(my_char == '\n'){
printf("\n");
}
}while(my_char != EOF);
printf("fin de lecture\n");
fclose(fp);
}

17
Messages.h Normal file
View File

@ -0,0 +1,17 @@
#include <stdint.h>
#include "messages_propulsion.h"
struct message_applicatif_t{
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 adresse_registre; // Adresse du registre lu ou écrit
uint8_t taille_donnees;
union{
uint8_t donnees[100];
#ifdef MESSAGE_PROPULSION_H
struct msg_propulsion_position_t msg_propulsion_position;
#endif
}donnees_applicative;
};

13
messages_propulsion.h Normal file
View File

@ -0,0 +1,13 @@
#include <stdint.h>
#ifndef MESSAGE_PROPULSION_H
#define MESSAGE_PROPULSION_H
#define USB_ID_PROPULSION 'P'
#define REG_PROPULSION_POSITION 0x00
struct msg_propulsion_position_t{
float position_x_mm, position_y_mm, orientation_rad;
};
#endif