Commit 4f743bd8f1a88889f9fb02f2fcde895fde78d55b
1 parent
1a71f2a1
Server Raspberry, sans la liaison série
Showing
1 changed file
with
121 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,121 @@ |
1 | +#include <stdio.h> | |
2 | +#include <stdlib.h> | |
3 | +#include <libwebsockets.h> | |
4 | +#include <unistd.h> | |
5 | +#include <termios.h> | |
6 | +#define MAX_FRAME_SIZE 1024 | |
7 | +#define WAIT_DELAY 50 | |
8 | +#define TAILLE_MAX_BUFFER 50 | |
9 | +#define TAILLE_MOT 8 | |
10 | + | |
11 | +static int callback_http(struct libwebsocket_context * this, | |
12 | + struct libwebsocket *wsi, | |
13 | + enum libwebsocket_callback_reasons reason, void *user, | |
14 | + void *in, size_t len) | |
15 | +{ | |
16 | + return 0; | |
17 | +} | |
18 | + | |
19 | +static int callback_dumb_increment(struct libwebsocket_context * this, | |
20 | + struct libwebsocket *wsi, | |
21 | + enum libwebsocket_callback_reasons reason, | |
22 | + void *user, char *in, size_t len) | |
23 | +{ | |
24 | + | |
25 | + switch (reason) { | |
26 | + case LWS_CALLBACK_ESTABLISHED: // just log message that someone is connecting | |
27 | + printf("connection established\n"); | |
28 | + break; | |
29 | + case LWS_CALLBACK_RECEIVE: { | |
30 | + // Création du buffer pour contenir notre réponse | |
31 | + | |
32 | + char* out[4]; | |
33 | + out[1] = strtok((char*)in,","); | |
34 | + out[2] = strtok(NULL,","); | |
35 | + out[3] = strtok(NULL,","); | |
36 | + out[4] = strtok(NULL,","); | |
37 | + | |
38 | + | |
39 | + char commande[50]; | |
40 | + sprintf(commande, "python get_data.py %s %s %s %s", out[1],out[2],out[3],out[4]); | |
41 | + | |
42 | + | |
43 | + FILE *file = popen(commande,"r"); | |
44 | + | |
45 | + char a[TAILLE_MAX_BUFFER], b[TAILLE_MAX_BUFFER], c[TAILLE_MAX_BUFFER]; | |
46 | + char heure[TAILLE_MOT],minute[TAILLE_MOT],temperature[TAILLE_MOT]; | |
47 | + fscanf(file,"%s",a); | |
48 | + fscanf(file,"%s",b); | |
49 | + fscanf(file,"%s",c); | |
50 | + pclose(file); | |
51 | + | |
52 | + int i; | |
53 | + | |
54 | + for(i=0;i<8;i++){ | |
55 | + heure[i]=a[i+2]; | |
56 | + minute[i]=b[i+1]; | |
57 | + temperature[i]=c[i+1]; | |
58 | + } | |
59 | + | |
60 | + heure[8]='\0'; | |
61 | + minute[8]='\0'; | |
62 | + temperature[8]='\0'; | |
63 | + | |
64 | + | |
65 | + | |
66 | + printf("%s\n",heure); | |
67 | + printf("%s\n",minute); | |
68 | + printf("%s\n",temperature); | |
69 | + | |
70 | + // release memory back into the wild | |
71 | + | |
72 | + break; | |
73 | + } | |
74 | + default: | |
75 | + break; | |
76 | + } | |
77 | + | |
78 | + | |
79 | + return 0; | |
80 | +} | |
81 | + | |
82 | +static struct libwebsocket_protocols protocols[] = { | |
83 | + /* first protocol must always be HTTP handler */ | |
84 | + { | |
85 | + "http-only", // name | |
86 | + callback_http, // callback | |
87 | + 0 // per_session_data_size | |
88 | + }, | |
89 | + { | |
90 | + "dumb-increment-protocol", // protocol name - very important! | |
91 | + callback_dumb_increment, // callback | |
92 | + 0 // we don't use any per session data | |
93 | + | |
94 | + }, | |
95 | + { | |
96 | + NULL, NULL, 0 /* End of list */ | |
97 | + } | |
98 | +}; | |
99 | + | |
100 | + | |
101 | + | |
102 | +int main(void) { | |
103 | +int port=9000; | |
104 | +struct lws_context_creation_info info; | |
105 | +memset(&info,0,sizeof info); | |
106 | +info.port=port; | |
107 | +info.protocols=protocols; | |
108 | +info.gid=-1; | |
109 | +info.uid=-1; | |
110 | +struct libwebsocket_context *context=libwebsocket_create_context(&info); | |
111 | +if(context==NULL){ | |
112 | + fprintf(stderr, "libwebsocket init failed\n"); | |
113 | + return -1; | |
114 | + } | |
115 | +printf("starting server...\n"); | |
116 | +while(1){ | |
117 | + libwebsocket_service(context,WAIT_DELAY); | |
118 | + } | |
119 | +libwebsocket_context_destroy(context); | |
120 | +return 0; | |
121 | +} | ... | ... |