RP20240_Device_USB/main.c

156 lines
3.6 KiB
C

/*****
* Copyright (c) 2023 - Poivron Robotique
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
#include <stdio.h>
#include <string.h>
#include <pico/stdio.h>
#include "communication.h"
#include "messagerie.h"
void stdio_usb_out_chars(const char *buf, int length);
#define NB_MORCEAUX 100
absolute_time_t envoie_nb_char(int nb_char);
char chaine_envoie[10000];
void envoie_donnees(char * donnees, uint16_t length){
for (int i=0; i<length; i++){
putchar(donnees[i]);
}
}
void envoie_structure(const void * donnees, size_t size){
const unsigned char *byte;
for ( byte = donnees; size--; ++byte )
{
putchar(*byte);
//printf("%2X ", *byte);
}
//printf("\n");
}
void main(void)
{
absolute_time_t measured_time_us;
absolute_time_t temps_moyen, temps_max, temps_m[NB_MORCEAUX];
absolute_time_t current_time_us, start_time_us;
absolute_time_t temps_message_detection;
struct message_t message;
struct message_requete_t message_requete_detection;
unsigned char message_binaire[100];
message_requete_detection.type = 'd';
message_requete_detection.id_carte = 'D';
message_requete_detection.adresse_registre = 0;
message_requete_detection.taille_donnees = 19;
message_requete_detection.fin_de_message = 0;
message_binaire[0]='r';
message_binaire[1]='A';
message_binaire[2]= 0;
message_binaire[3]= 5;
message_binaire[4]= 'a';
message_binaire[5]= 'b';
message_binaire[6]= 'c';
message_binaire[7]= 'd';
message_binaire[8]= 'e';
message_binaire[9]= 0;
printf(">Device 1 - demarrage\n");
for(int i=0; i<10000; i++){
/*j++;
if(j>25){
j=0;
}
chaine_envoie[i]= j + 'a';*/
chaine_envoie[i]= i%26 + 'a';
}
int nb_ech = 10;
int taille_morceau = 60;
int nb_message=0;
stdio_init_all();
sleep_ms(5000);
gpio_init(PICO_DEFAULT_LED_PIN);
gpio_set_dir(PICO_DEFAULT_LED_PIN, GPIO_OUT);
gpio_put(PICO_DEFAULT_LED_PIN, 0);
temps_message_detection = get_absolute_time();
communication_init();
while(1){
if(get_absolute_time() - temps_message_detection > MESSAGE_TIMEOUT_US){
start_time_us = get_absolute_time();
envoie_structure(&message_requete_detection, sizeof(message_requete_detection) );
temps_message_detection = get_absolute_time();
current_time_us = get_absolute_time();
//printf(">temps_emission:%lld\n", current_time_us - start_time_us);
}
start_time_us = get_absolute_time();
communication_reception_message();
if(messagerie_message_disponible()){
while(messagerie_message_disponible()){
message = messagerie_get_message();
nb_message++;
if(message.type == 'r'){
if(message.id_carte == 'D'){
temps_message_detection = get_absolute_time();
if(message.donnees[0] > 0 && message.donnees[0] < 30){
//printf(">LED ON\n");
gpio_put(PICO_DEFAULT_LED_PIN, 1);
}else{
//printf(">LED OFF\n");
gpio_put(PICO_DEFAULT_LED_PIN, 0);
}
}
}
}
}
current_time_us = get_absolute_time();
//printf(">temps_reception:%lld\n", current_time_us - start_time_us);
printf(">nb_message:%u\n",nb_message);
}
}
absolute_time_t envoie_nb_char(int nb_char) {
absolute_time_t current_time_us, start_time_us;
int j=0;
if (nb_char == 0){
return 0;
}
chaine_envoie[nb_char - 1] = '\n';
chaine_envoie[nb_char] = '\0';
start_time_us = get_absolute_time();
printf("%s", chaine_envoie);
envoie_donnees(chaine_envoie, strlen(chaine_envoie));
current_time_us = get_absolute_time();
chaine_envoie[nb_char - 1] = 'a';
chaine_envoie[nb_char] = 'a';
return current_time_us - start_time_us;
}