diff --git a/CMakeLists.txt b/CMakeLists.txt index 216ebc7..7dac81b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,7 @@ project(Mod_Communication C) add_library(Mod_Communication - Servomoteur.c + Communication.c + messagerie_applicative.c ) -target_link_libraries(Mod_Communication - pico_stdlib -) diff --git a/Readme.md b/Readme.md index 437c9cd..48d780f 100644 --- a/Readme.md +++ b/Readme.md @@ -1,7 +1,7 @@ -Submodule Servomoteurs pour le RP2040 +Submodule Communication pour le RP2040 ===================================== -Ceci est un submodule git pour intégrer facilement le support des servomoteurs à un projet. +Ceci est un submodule git pour intégrer facilement notre protocole de communication à un projet. On crée ce Submodule en se servant de la documentation disponible ici : https://git-scm.com/book/en/v2/Git-Tools-Submodules Utilisation @@ -12,7 +12,7 @@ Ajout du sub-module Ajouter ce submodule à votre projet. Dans un terminal, dans le répertoire de votre projet, entrez : - git submodule add https://git.poivron-robotique.fr/Keuronde/RP2040_Servomoteurs.git + git submodule add https://git.poivron-robotique.fr/Keuronde/Mod_Communication.git Ajouter le fichier nouvellement créé .gitmodules à votre projet. @@ -23,18 +23,16 @@ Configuration de la compilation Dans le fichier CMakeLists.txt, ajouter le dossier du sub module: - add_subdirectory(RP2040_Servomoteurs) + add_subdirectory(Mod_Communication) -Dans le fichier CMakeLists.txt, ajouter la bibliothèque RP2040_Servomoteur : - - target_link_libraries(Modele_RPiPico - ... - RP2040_Servomoteur - ) +Section en cours +================ Intégration au code source -------------------------- + + Ajout du fichier d'include : #include "RP2040_Servomoteurs/Servomoteur.h" diff --git a/messagerie.c b/messagerie.c new file mode 100644 index 0000000..df64305 --- /dev/null +++ b/messagerie.c @@ -0,0 +1,26 @@ +#include "messagerie.h" + +#define NB_MAX_MESSAGE 30 + +int index_message=0; +struct message_t message_liste[NB_MAX_MESSAGE]; + +/// @brief Renvoi 1 si des message sont disponibles +/// @return +bool messagerie_message_disponible(){ + return (index_message != 0); +} + +/// @brief Renvoi un message à traiter, à n'appeler que si message_disponible() renvoie 1 +/// @return Message +struct message_t messagerie_get_message(){ + index_message = index_message - 1; + return message_liste[index_message]; +} + +void messagerie_put_message(struct message_t message){ + if(index_message < NB_MAX_MESSAGE-1){ + message_liste[index_message] = message; + index_message = index_message + 1; + } +} \ No newline at end of file diff --git a/messagerie.h b/messagerie.h new file mode 100644 index 0000000..9554886 --- /dev/null +++ b/messagerie.h @@ -0,0 +1,36 @@ +#include "pico/stdlib.h" +#include "messages_propulsion.h" + +#define MESSAGE_TIMEOUT_US 2000 + +struct message_t{ + uint8_t type; // 'b' pour binaire, '>' pour des logs + uint8_t taille_donnees; + uint8_t donnees[255]; +}; + +struct message_requete_t{ + uint8_t commande; + 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; +}; + +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[0xFF]; +#ifdef MESSAGE_PROPULSION_H + struct msg_propulsion_position_t msg_propulsion_position; +#endif + + }donnees_applicative; + +}; + +bool messagerie_message_disponible(); +struct message_t messagerie_get_message(); +void messagerie_put_message(struct message_t message); diff --git a/messagerie_applicative.c b/messagerie_applicative.c index 5130c65..7290b4a 100644 --- a/messagerie_applicative.c +++ b/messagerie_applicative.c @@ -1,7 +1,9 @@ #include #include "messagerie_applicative.h" -uint8_t memoire_echange[0xFF]; +#define TAILLE_MEMOIRE_ECHANGE 0xFF + +uint8_t memoire_echange[TAILLE_MEMOIRE_ECHANGE]; @@ -14,11 +16,11 @@ bool mise_a_jour_trajectoire = false; bool mise_a_jour_config_trajet = false; bool mise_a_jour_cde_inv_traj = false; -void get_données_reçues(uint8_t * dst, unsigned int taille, uint8_t registre){ +void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre){ memcpy(dst, &(memoire_echange[registre]), taille); } -void mise_données_dans_échange(uint8_t * source, unsigned int taille, uint8_t registre){ +void mise_données_dans_échange(uint8_t * source, unsigned int taille, unsigned int registre){ memcpy(&(memoire_echange[registre]), source, taille); } @@ -44,18 +46,26 @@ void écriture_données(unsigned int adresse, uint8_t donnée){ }else if(adresse <= 0x59){ // // Trajectoire mise_a_jour_trajectoire = true; + }else if(adresse <= 0x61){ // Trajet config mise_a_jour_config_trajet = true; + + /* }else if(adresse <= 0x62){ // Trajet config mise_a_jour_cde_inv_traj = true; + */ }else { // Hors mémoire return; } + // On contrôle qu'on est bien dans la mémoire + if(adresse < TAILLE_MEMOIRE_ECHANGE && adresse >= 0){ + memoire_echange[adresse] = donnée; + } - memoire_echange[adresse] = donnée; + } diff --git a/messagerie_applicative.h b/messagerie_applicative.h index 1854b2e..594b14d 100644 --- a/messagerie_applicative.h +++ b/messagerie_applicative.h @@ -2,8 +2,8 @@ #include void écriture_données(unsigned int adresse, uint8_t donnée); -void get_données_reçues(uint8_t * dst, unsigned int taille, uint8_t registre); -void mise_données_dans_échange(uint8_t * source, unsigned int taille, uint8_t registre); +void get_données_reçues(uint8_t * dst, unsigned int taille, unsigned int registre); +void mise_données_dans_échange(uint8_t * source, unsigned int taille, unsigned int registre); extern uint8_t memoire_echange[];