Commit fb352dd1eaa789706ec1175eb15f0e9dc112127b
1 parent
ff945ba6
programme terminé, communication série et websockets opérationnelle
Showing
1 changed file
with
30 additions
and
31 deletions
Show diff stats
prog/main.c
@@ -18,7 +18,7 @@ | @@ -18,7 +18,7 @@ | ||
18 | #define WAIT_DELAY 50 | 18 | #define WAIT_DELAY 50 |
19 | 19 | ||
20 | 20 | ||
21 | -#define SERIAL_DEVICE "/dev/ttyACM0" | 21 | +#define SERIAL_DEVICE "/dev/ttyUSB0" //utiliser USB0 pour le shield Xbee branché en USB |
22 | 22 | ||
23 | /*****************************************************************************/ | 23 | /*****************************************************************************/ |
24 | /**********************PARTIE WEBSOCKETS + COM SERIE**************************/ | 24 | /**********************PARTIE WEBSOCKETS + COM SERIE**************************/ |
@@ -26,17 +26,19 @@ | @@ -26,17 +26,19 @@ | ||
26 | 26 | ||
27 | //Fonction qui retourne un tableau de char, chaque char correspondant à une donnée d'un capteur | 27 | //Fonction qui retourne un tableau de char, chaque char correspondant à une donnée d'un capteur |
28 | 28 | ||
29 | -char * getDataFromSensors(char *request,int sizeOfRequest) | 29 | +char * getDataFromSensors(char *request,int sizeOfRequest,int sd) |
30 | { | 30 | { |
31 | - int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH); | ||
32 | - serialConfig(sd,B9600); | ||
33 | 31 | ||
34 | int i; | 32 | int i; |
35 | - char *reponse = NULL; | 33 | + //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 |
34 | + unsigned char *reponse = NULL; | ||
35 | + reponse = malloc(4*sizeof(unsigned char)); | ||
36 | + | ||
36 | 37 | ||
37 | //On envoie le GET au FPGA pour récupérer les données | 38 | //On envoie le GET au FPGA pour récupérer les données |
38 | for(i = 0; i < sizeOfRequest;i++) | 39 | for(i = 0; i < sizeOfRequest;i++) |
39 | { | 40 | { |
41 | + | ||
40 | if(write(sd,(void*)&request[i],sizeof(char))!=1) | 42 | if(write(sd,(void*)&request[i],sizeof(char))!=1) |
41 | { | 43 | { |
42 | perror("main.write"); exit(-1); | 44 | perror("main.write"); exit(-1); |
@@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest) | @@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest) | ||
45 | 47 | ||
46 | printf("\nReponse : "); | 48 | printf("\nReponse : "); |
47 | 49 | ||
48 | - reponse = malloc(3*sizeof(char)); | 50 | + //NE PAS OUBLIER DE LIBERER LA MEMOIRE EN DEHORS DE LA FONCTION |
49 | 51 | ||
50 | - for(i=0;i < 3;i++) | ||
51 | - { | ||
52 | - if(read(sd,(void*)&reponse[i],sizeof(char))!=1) | 52 | + for(i=0;i < 4;i++) |
53 | + { //on lit ce que nous envoie l'arduino à la suite de la requete GET | ||
54 | + if(read(sd,(void*)&reponse[i],sizeof(unsigned char))!=1) | ||
53 | { | 55 | { |
54 | perror("main.read"); exit(-1); | 56 | perror("main.read"); exit(-1); |
55 | } | 57 | } |
56 | } | 58 | } |
57 | - printf("\nTemperature : %d",reponse[1]); | ||
58 | - printf("\nPressure : %d",reponse[0]); | ||
59 | - printf("\nHumidity : %d\n",reponse[2]); | 59 | + printf("\nTemperature (C) : %d",reponse[1]); |
60 | + printf("\nPression (hPa) : %d",reponse[0]+845); | ||
61 | + printf("\nHumidite (pourcents) : %d",reponse[2]); | ||
62 | + printf("\nLuminosité : %d\n",reponse[3]); | ||
60 | 63 | ||
61 | - serialClose(sd); | ||
62 | 64 | ||
63 | return reponse; | 65 | return reponse; |
64 | } | 66 | } |
@@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * | @@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * | ||
74 | { | 76 | { |
75 | static char *requete = NULL; | 77 | static char *requete = NULL; |
76 | static char *reponse = NULL; | 78 | static char *reponse = NULL; |
77 | - static int msize=0; | 79 | + //Initialisation com Serie |
80 | + int sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH); | ||
81 | + serialConfig(sd,B9600); | ||
78 | 82 | ||
79 | switch(reason) | 83 | switch(reason) |
80 | { | 84 | { |
81 | - char test[2]; | ||
82 | case LWS_CALLBACK_ESTABLISHED: | 85 | case LWS_CALLBACK_ESTABLISHED: |
83 | printf("connection established\n"); | 86 | printf("connection established\n"); |
84 | requete=NULL; | 87 | requete=NULL; |
85 | - // Declenchement d'un prochain envoi au navigateur | 88 | + // Declenchement d'un prochain envoi au navigateur |
86 | libwebsocket_callback_on_writable(this,wsi); | 89 | libwebsocket_callback_on_writable(this,wsi); |
87 | break; | 90 | break; |
88 | 91 | ||
@@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * | @@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * | ||
96 | perror("callback_my.malloc"); exit(EXIT_FAILURE); | 99 | perror("callback_my.malloc"); exit(EXIT_FAILURE); |
97 | } | 100 | } |
98 | 101 | ||
99 | - memcpy(requete+LWS_SEND_BUFFER_PRE_PADDING,in,len); | 102 | + memcpy(requete,in,len); |
100 | // Declenchement d'un prochain envoi au navigateur | 103 | // Declenchement d'un prochain envoi au navigateur |
101 | - msize=len; | ||
102 | libwebsocket_callback_on_writable(this,wsi); | 104 | libwebsocket_callback_on_writable(this,wsi); |
103 | break; | 105 | break; |
104 | 106 | ||
105 | case LWS_CALLBACK_SERVER_WRITEABLE: | 107 | case LWS_CALLBACK_SERVER_WRITEABLE: |
106 | - // Ici sont envoyes les messages au navigateur | ||
107 | - //Si la requete a pour valeur GET, on envoie les donnée au site | ||
108 | - printf("entree dans envoie"); | ||
109 | - | 108 | + // Ici sont envoyes les messages au navigateur |
109 | + //Si la requete a pour valeur GET, on envoie les donnée au site | ||
110 | + | ||
110 | if(requete!= NULL) | 111 | if(requete!= NULL) |
111 | { | 112 | { |
112 | - char *test = requete + LWS_SEND_BUFFER_PRE_PADDING; | ||
113 | - printf("entree dans envoir->requete"); | ||
114 | - printf("Message : %c%c%c\n",test[0],test[1],test[2]); | ||
115 | - if(test[0] == 'G' && test[1] == 'E' && test[2] == 'T') | 113 | + if(requete[0] == 'G' && requete[1] == 'E' && requete[2] == 'T') |
116 | { | 114 | { |
117 | - reponse = malloc(3*sizeof(char)); | ||
118 | - reponse[0] = 'a';reponse[1] = 'b'; reponse[2] = 'c'; | ||
119 | - printf("\nSending : %c%c%c",reponse[0],reponse[1],reponse[2]); | ||
120 | - int length = 3; | 115 | + reponse = getDataFromSensors(requete,3,sd); |
116 | + int length = 4; | ||
121 | unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING); | 117 | unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING); |
122 | memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length ); | 118 | memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length ); |
123 | libwebsocket_write(wsi, buf + LWS_SEND_BUFFER_PRE_PADDING, length, LWS_WRITE_BINARY); //LWS_WRITE_TEXT | 119 | 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 * | @@ -132,6 +128,7 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * | ||
132 | default: | 128 | default: |
133 | break; | 129 | break; |
134 | } | 130 | } |
131 | + serialClose(sd); | ||
135 | return 0; | 132 | return 0; |
136 | } | 133 | } |
137 | 134 | ||
@@ -170,7 +167,8 @@ int main(void){ | @@ -170,7 +167,8 @@ int main(void){ | ||
170 | info.uid=-1; | 167 | info.uid=-1; |
171 | struct libwebsocket_context *context=libwebsocket_create_context(&info); | 168 | struct libwebsocket_context *context=libwebsocket_create_context(&info); |
172 | 169 | ||
173 | - //Initialisation com Serie | 170 | + |
171 | + | ||
174 | 172 | ||
175 | 173 | ||
176 | if(context==NULL) | 174 | if(context==NULL) |
@@ -187,6 +185,7 @@ int main(void){ | @@ -187,6 +185,7 @@ int main(void){ | ||
187 | libwebsocket_service(context,WAIT_DELAY); | 185 | libwebsocket_service(context,WAIT_DELAY); |
188 | } | 186 | } |
189 | libwebsocket_context_destroy(context); | 187 | libwebsocket_context_destroy(context); |
188 | + | ||
190 | return 0; | 189 | return 0; |
191 | 190 | ||
192 | } | 191 | } |