thermferm/server.c

changeset 45
053c4657105f
parent 44
f37d73940699
child 46
000399c64d3f
equal deleted inserted replaced
44:f37d73940699 45:053c4657105f
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 }

mercurial