From fb352dd1eaa789706ec1175eb15f0e9dc112127b Mon Sep 17 00:00:00 2001 From: Amaury Date: Fri, 16 Jun 2017 00:48:32 +0200 Subject: [PATCH] programme terminé, communication série et websockets opérationnelle --- prog/main.c | 61 ++++++++++++++++++++++++++++++------------------------------- 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/prog/main.c b/prog/main.c index 8fbd8f5..98d95a5 100644 --- a/prog/main.c +++ b/prog/main.c @@ -18,7 +18,7 @@ #define WAIT_DELAY 50 -#define SERIAL_DEVICE "/dev/ttyACM0" +#define SERIAL_DEVICE "/dev/ttyUSB0" //utiliser USB0 pour le shield Xbee branché en USB /*****************************************************************************/ /**********************PARTIE WEBSOCKETS + COM SERIE**************************/ @@ -26,17 +26,19 @@ //Fonction qui retourne un tableau de char, chaque char correspondant à une donnée d'un capteur -char * getDataFromSensors(char *request,int sizeOfRequest) +char * getDataFromSensors(char *request,int sizeOfRequest,int sd) { - int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH); - serialConfig(sd,B9600); int i; - char *reponse = NULL; + //la réponse est récupérée sous un type charactère non signé. Il est possible de la stocker dans un charactère signé, mais la valeur affichée par un printf sera différente + unsigned char *reponse = NULL; + reponse = malloc(4*sizeof(unsigned char)); + //On envoie le GET au FPGA pour récupérer les données for(i = 0; i < sizeOfRequest;i++) { + if(write(sd,(void*)&request[i],sizeof(char))!=1) { perror("main.write"); exit(-1); @@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest) printf("\nReponse : "); - reponse = malloc(3*sizeof(char)); + //NE PAS OUBLIER DE LIBERER LA MEMOIRE EN DEHORS DE LA FONCTION - for(i=0;i < 3;i++) - { - if(read(sd,(void*)&reponse[i],sizeof(char))!=1) + for(i=0;i < 4;i++) + { //on lit ce que nous envoie l'arduino à la suite de la requete GET + if(read(sd,(void*)&reponse[i],sizeof(unsigned char))!=1) { perror("main.read"); exit(-1); } } - printf("\nTemperature : %d",reponse[1]); - printf("\nPressure : %d",reponse[0]); - printf("\nHumidity : %d\n",reponse[2]); + printf("\nTemperature (C) : %d",reponse[1]); + printf("\nPression (hPa) : %d",reponse[0]+845); + printf("\nHumidite (pourcents) : %d",reponse[2]); + printf("\nLuminosité : %d\n",reponse[3]); - serialClose(sd); return reponse; } @@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * { static char *requete = NULL; static char *reponse = NULL; - static int msize=0; + //Initialisation com Serie + int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH); + serialConfig(sd,B9600); switch(reason) { - char test[2]; case LWS_CALLBACK_ESTABLISHED: printf("connection established\n"); requete=NULL; - // Declenchement d'un prochain envoi au navigateur + // Declenchement d'un prochain envoi au navigateur libwebsocket_callback_on_writable(this,wsi); break; @@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * perror("callback_my.malloc"); exit(EXIT_FAILURE); } - memcpy(requete+LWS_SEND_BUFFER_PRE_PADDING,in,len); + memcpy(requete,in,len); // Declenchement d'un prochain envoi au navigateur - msize=len; libwebsocket_callback_on_writable(this,wsi); break; case LWS_CALLBACK_SERVER_WRITEABLE: - // Ici sont envoyes les messages au navigateur - //Si la requete a pour valeur GET, on envoie les donnée au site - printf("entree dans envoie"); - + // Ici sont envoyes les messages au navigateur + //Si la requete a pour valeur GET, on envoie les donnée au site + if(requete!= NULL) { - char *test = requete + LWS_SEND_BUFFER_PRE_PADDING; - printf("entree dans envoir->requete"); - printf("Message : %c%c%c\n",test[0],test[1],test[2]); - if(test[0] == 'G' && test[1] == 'E' && test[2] == 'T') + if(requete[0] == 'G' && requete[1] == 'E' && requete[2] == 'T') { - reponse = malloc(3*sizeof(char)); - reponse[0] = 'a';reponse[1] = 'b'; reponse[2] = 'c'; - printf("\nSending : %c%c%c",reponse[0],reponse[1],reponse[2]); - int length = 3; + reponse = getDataFromSensors(requete,3,sd); + int length = 4; unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING); memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length ); libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, length, LWS_WRITE_BINARY); //LWS_WRITE_TEXT @@ -132,6 +128,7 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * default: break; } + serialClose(sd); return 0; } @@ -170,7 +167,8 @@ int main(void){ info.uid=-1; struct libwebsocket_context *context=libwebsocket_create_context(&info); - //Initialisation com Serie + + if(context==NULL) @@ -187,6 +185,7 @@ int main(void){ libwebsocket_service(context,WAIT_DELAY); } libwebsocket_context_destroy(context); + return 0; } -- libgit2 0.21.2