Envoi message de position selon protocole "com_v2"
This commit is contained in:
commit
4d7c9c7d43
BIN
Host_cdc_usb
Executable file
BIN
Host_cdc_usb
Executable file
Binary file not shown.
103
Host_cdc_usb.c
Normal file
103
Host_cdc_usb.c
Normal 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
17
Messages.h
Normal 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
13
messages_propulsion.h
Normal 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
|
||||
Loading…
Reference in New Issue
Block a user