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 | 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 | 24 | /**********************PARTIE WEBSOCKETS + COM SERIE**************************/ |
... | ... | @@ -26,17 +26,19 @@ |
26 | 26 | |
27 | 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 | 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 | 38 | //On envoie le GET au FPGA pour récupérer les données |
38 | 39 | for(i = 0; i < sizeOfRequest;i++) |
39 | 40 | { |
41 | + | |
40 | 42 | if(write(sd,(void*)&request[i],sizeof(char))!=1) |
41 | 43 | { |
42 | 44 | perror("main.write"); exit(-1); |
... | ... | @@ -45,20 +47,20 @@ char * getDataFromSensors(char *request,int sizeOfRequest) |
45 | 47 | |
46 | 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 | 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 | 65 | return reponse; |
64 | 66 | } |
... | ... | @@ -74,15 +76,16 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * |
74 | 76 | { |
75 | 77 | static char *requete = NULL; |
76 | 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 | 83 | switch(reason) |
80 | 84 | { |
81 | - char test[2]; | |
82 | 85 | case LWS_CALLBACK_ESTABLISHED: |
83 | 86 | printf("connection established\n"); |
84 | 87 | requete=NULL; |
85 | - // Declenchement d'un prochain envoi au navigateur | |
88 | + // Declenchement d'un prochain envoi au navigateur | |
86 | 89 | libwebsocket_callback_on_writable(this,wsi); |
87 | 90 | break; |
88 | 91 | |
... | ... | @@ -96,28 +99,21 @@ static int callback_my(struct libwebsocket_context * this, struct libwebsocket * |
96 | 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 | 103 | // Declenchement d'un prochain envoi au navigateur |
101 | - msize=len; | |
102 | 104 | libwebsocket_callback_on_writable(this,wsi); |
103 | 105 | break; |
104 | 106 | |
105 | 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 | 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 | 117 | unsigned char *buf = malloc(LWS_SEND_BUFFER_PRE_PADDING + length + LWS_SEND_BUFFER_POST_PADDING); |
122 | 118 | memcpy (buf + LWS_SEND_BUFFER_PRE_PADDING, reponse, length ); |
123 | 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 | 128 | default: |
133 | 129 | break; |
134 | 130 | } |
131 | + serialClose(sd); | |
135 | 132 | return 0; |
136 | 133 | } |
137 | 134 | |
... | ... | @@ -170,7 +167,8 @@ int main(void){ |
170 | 167 | info.uid=-1; |
171 | 168 | struct libwebsocket_context *context=libwebsocket_create_context(&info); |
172 | 169 | |
173 | - //Initialisation com Serie | |
170 | + | |
171 | + | |
174 | 172 | |
175 | 173 | |
176 | 174 | if(context==NULL) |
... | ... | @@ -187,6 +185,7 @@ int main(void){ |
187 | 185 | libwebsocket_service(context,WAIT_DELAY); |
188 | 186 | } |
189 | 187 | libwebsocket_context_destroy(context); |
188 | + | |
190 | 189 | return 0; |
191 | 190 | |
192 | 191 | } | ... | ... |