30 extern int lcdHandle; |
30 extern int lcdHandle; |
31 extern unsigned char lcdbuf[MAX_LCDS][20][4]; |
31 extern unsigned char lcdbuf[MAX_LCDS][20][4]; |
32 extern sys_config Config; |
32 extern sys_config Config; |
33 extern int clients; |
33 extern int clients; |
34 |
34 |
|
35 /* beer settings */ |
|
36 float cs_beerSet = 20.0; |
|
37 float cs_fridgeSet = 20.0; |
|
38 unsigned char cs_mode = 'o'; /* o = Off, f = fridge, b = beer, p = profile-run */ |
|
39 |
|
40 |
35 int s; /* connected socket */ |
41 int s; /* connected socket */ |
36 int ls; /* listen socket */ |
42 int ls; /* listen socket */ |
37 |
43 |
38 struct sockaddr_in myaddr_in; /* for local socket address */ |
44 struct sockaddr_in myaddr_in; /* for local socket address */ |
39 struct sockaddr_in peeraddr_in; /* for peer socket address */ |
45 struct sockaddr_in peeraddr_in; /* for peer socket address */ |
58 va_start(va_ptr, format); |
64 va_start(va_ptr, format); |
59 vsnprintf(out, SS_BUFSIZE-1, format, va_ptr); |
65 vsnprintf(out, SS_BUFSIZE-1, format, va_ptr); |
60 va_end(va_ptr); |
66 va_end(va_ptr); |
61 |
67 |
62 syslog(LOG_NOTICE, "send: \"%s\"", out); |
68 syslog(LOG_NOTICE, "send: \"%s\"", out); |
|
69 if (debug) |
|
70 fprintf(stdout, "send: \"%s\"\n", out); |
63 |
71 |
64 if (send(s, out, strlen(out), 0) != strlen(out)) { |
72 if (send(s, out, strlen(out), 0) != strlen(out)) { |
65 syslog(LOG_NOTICE, "srv_send failed"); |
73 syslog(LOG_NOTICE, "srv_send failed"); |
66 return -1; |
74 return -1; |
67 } |
75 } |
153 buf[i] = '\0'; |
161 buf[i] = '\0'; |
154 } |
162 } |
155 timer = SS_TIMEOUT * 4; |
163 timer = SS_TIMEOUT * 4; |
156 if (strlen(buf)) { |
164 if (strlen(buf)) { |
157 syslog(LOG_NOTICE, "recv: \"%s\"", buf); |
165 syslog(LOG_NOTICE, "recv: \"%s\"", buf); |
|
166 if (debug) |
|
167 fprintf(stdout, "recv: \"%s\"\n", buf); |
158 |
168 |
159 /* |
169 /* |
160 * Process commands from the client |
170 * Process commands from the client |
161 */ |
171 */ |
162 if (strncmp(buf, "ack", 3) == 0) { |
172 if (strncmp(buf, "ack", 3) == 0) { |
163 srv_send((char *)"ack"); |
173 srv_send((char *)"ack"); |
164 } else if (strncmp(buf, "lcd", 3) == 0) { |
174 } else if (strncmp(buf, "lcd", 3) == 0) { |
|
175 sprintf(obuf, "[\"12345678901234567890\", \"12345678901234567890\", \"12345678901234567890\", \"12345678901234567890\"]"); |
165 for (i = 0; i < 20; i++) { |
176 for (i = 0; i < 20; i++) { |
166 obuf[i] = lcdbuf[lcdHandle][i][0]; |
177 obuf[i+2] = lcdbuf[lcdHandle][i][0]; |
167 obuf[i+21] = lcdbuf[lcdHandle][i][1]; |
178 obuf[i+26] = lcdbuf[lcdHandle][i][1]; |
168 obuf[i+42] = lcdbuf[lcdHandle][i][2]; |
179 obuf[i+50] = lcdbuf[lcdHandle][i][2]; |
169 obuf[i+63] = lcdbuf[lcdHandle][i][3]; |
180 obuf[i+74] = lcdbuf[lcdHandle][i][3]; |
170 } |
181 } |
171 obuf[20] = obuf[41] = obuf[62] = ','; |
|
172 obuf[83] = '\0'; |
|
173 srv_send(obuf); |
182 srv_send(obuf); |
174 } else if (strncmp(buf, "getMode", 7) == 0) { |
183 } else if (strncmp(buf, "getMode", 7) == 0) { |
175 srv_send("b"); |
184 srv_send("%c", cs_mode); |
176 } else if (strncmp(buf, "getControlSettings", 18) == 0) { |
185 } else if (strncmp(buf, "getControlSettings", 18) == 0) { |
177 srv_send("mode='b', beerSet=20.0, fridgeSet=20.0, heatEstimator=0.2, coolEstimator=5"); |
186 srv_send("{ mode:%c, \"beerSet\":\"%.1f\", \"fridgeSet\":\"%.1f\", \"heatEstimator\":\"0.2\", \"coolEstimator\":\"5\" }", cs_mode, cs_beerSet, cs_fridgeSet); |
178 } else { |
187 } else { |
179 if (debug) |
188 if (debug) |
180 fprintf(stdout, "unknown command \"%s\"\n", buf); |
189 fprintf(stdout, "unknown command \"%s\"\n", buf); |
181 srv_send((char *)"ERR"); |
190 srv_send((char *)"ERR"); |
182 } |
191 } |