Commit fb352dd1eaa789706ec1175eb15f0e9dc112127b

Authored by aknockae
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 }
... ...