thermferm/thermferm.c

changeset 246
6df404da3537
parent 245
b01b6238eb67
child 247
f3d0e9445fcd
equal deleted inserted replaced
245:b01b6238eb67 246:6df404da3537
42 extern sys_config Config; 42 extern sys_config Config;
43 #ifdef HAVE_WIRINGPI_H 43 #ifdef HAVE_WIRINGPI_H
44 extern int lcdHandle; 44 extern int lcdHandle;
45 int setupmenu = MENU_NONE; 45 int setupmenu = MENU_NONE;
46 units_list *current_unit = NULL; /* In panel editor this points to the current unit. */ 46 units_list *current_unit = NULL; /* In panel editor this points to the current unit. */
47 47 float temp_temp = 20.0;
48 #endif 48 #endif
49 int lcdupdate; 49
50 #ifndef HAVE_WIRINGPI_H 50 #ifndef HAVE_WIRINGPI_H
51 pthread_t threads[4]; 51 pthread_t threads[4];
52 #endif 52 #endif
53 extern const char UNITMODE[5][8]; 53 extern const char UNITMODE[5][8];
54 extern const char PROFSTATE[4][6]; 54 extern const char PROFSTATE[4][6];
155 case MENU_MODE_BEER: show_mode(); 155 case MENU_MODE_BEER: show_mode();
156 lcdPuts(lcdHandle, "New mode BEER"); 156 lcdPuts(lcdHandle, "New mode BEER");
157 break; 157 break;
158 158
159 case MENU_BEER_TEMP: lcdPuts(lcdHandle, "Set beer temp"); 159 case MENU_BEER_TEMP: lcdPuts(lcdHandle, "Set beer temp");
160 lcdPosition(lcdHandle, 0, 1);
161 snprintf(buf, 20, "Set %.1f", temp_temp);
162 lcdPuts(lcdHandle, buf);
160 break; 163 break;
161 164
162 case MENU_MODE_FRIDGE: show_mode(); 165 case MENU_MODE_FRIDGE: show_mode();
163 lcdPuts(lcdHandle, "New mode FRIDGE"); 166 lcdPuts(lcdHandle, "New mode FRIDGE");
164 break; 167 break;
165 168
166 case MENU_FRIDGE_TEMP: lcdPuts(lcdHandle, "Set fridge temp"); 169 case MENU_FRIDGE_TEMP: lcdPuts(lcdHandle, "Set fridge temp");
170 lcdPosition(lcdHandle, 0, 1);
171 snprintf(buf, 20, "Set %.1f", temp_temp);
172 lcdPuts(lcdHandle, buf);
167 break; 173 break;
168 174
169 case MENU_MODE_PROFILE: show_mode(); 175 case MENU_MODE_PROFILE: show_mode();
170 lcdPuts(lcdHandle, "New mode PROFILE"); 176 lcdPuts(lcdHandle, "New mode PROFILE");
171 break; 177 break;
268 } 274 }
269 } 275 }
270 276
271 return DEVPRESENT_NO; 277 return DEVPRESENT_NO;
272 } 278 }
279
280
281
282 /*
283 * Handle panel key events
284 */
285 #ifdef HAVE_WIRINGPI_H
286 void panel_key_events(int key)
287 {
288 units_list *unit;
289
290 switch (setupmenu) {
291 case MENU_NONE:
292 if ((key == KEY_DOWN) || (key == KEY_UP))
293 lcd_buf_step(key);
294 if ((key == KEY_CONFIRM) && (setupmenu == MENU_NONE))
295 go_menu(MENU_TOP_DEFAULT);
296 break;
297
298 case MENU_TOP_DEFAULT:
299 if (key == KEY_ESCAPE)
300 go_menu(MENU_NONE);
301 if (key == KEY_DOWN)
302 go_menu(MENU_TOP_UNITS);
303 if (key == KEY_UP)
304 go_menu(MENU_TOP_SYS);
305 break;
306
307 case MENU_TOP_UNITS:
308 if (key == KEY_ESCAPE)
309 go_menu(MENU_NONE);
310 if (key == KEY_DOWN)
311 go_menu(MENU_TOP_SYS);
312 if (key == KEY_UP)
313 go_menu(MENU_TOP_DEFAULT);
314 if ((key == KEY_ENTER) && Config.units) {
315 /*
316 * Start with the first unit
317 */
318 current_unit = Config.units;
319 go_menu(MENU_UNITS);
320 }
321 break;
322
323 case MENU_UNITS:
324 if (key == KEY_ESCAPE)
325 go_menu(MENU_TOP_UNITS);
326 if (key == KEY_DOWN) {
327 if (current_unit->next) {
328 current_unit = current_unit->next;
329 go_menu(MENU_UNITS);
330 }
331 }
332 if (key == KEY_UP) {
333 for (unit = Config.units; unit; unit = unit->next) {
334 if (unit->next && (unit->next == current_unit)) {
335 current_unit = unit;
336 go_menu(MENU_UNITS);
337 break;
338 }
339 }
340 }
341 if (key == KEY_ENTER) {
342 /*
343 * Drop into the current mode
344 */
345 switch (current_unit->mode) {
346 case UNITMODE_OFF: go_menu(MENU_MODE_OFF);
347 break;
348 case UNITMODE_NONE: go_menu(MENU_MODE_NONE);
349 break;
350 case UNITMODE_FRIDGE: go_menu(MENU_MODE_FRIDGE);
351 break;
352 case UNITMODE_BEER: go_menu(MENU_MODE_BEER);
353 break;
354 case UNITMODE_PROFILE: go_menu(MENU_MODE_PROFILE);
355 break;
356 }
357 }
358 break;
359
360 case MENU_MODE_OFF:
361 if (key == KEY_ESCAPE)
362 go_menu(MENU_UNITS);
363 if (key == KEY_DOWN)
364 go_menu(MENU_MODE_NONE);
365 if (key == KEY_UP)
366 go_menu(MENU_MODE_PROFILE);
367 if (key == KEY_ENTER) {
368 change_mode(UNITMODE_OFF);
369 go_menu(MENU_MODE_OFF);
370 }
371 break;
372
373 case MENU_MODE_NONE:
374 if (key == KEY_ESCAPE)
375 go_menu(MENU_UNITS);
376 if (key == KEY_DOWN)
377 go_menu(MENU_MODE_FRIDGE);
378 if (key == KEY_UP)
379 go_menu(MENU_MODE_OFF);
380 if (key == KEY_ENTER) {
381 if (current_unit->mode == UNITMODE_NONE)
382 go_menu(MENU_NONE_HEAT);
383 else {
384 change_mode(UNITMODE_NONE);
385 go_menu(MENU_MODE_NONE);
386 }
387 }
388 break;
389
390 case MENU_NONE_HEAT:
391 if (key == KEY_ESCAPE)
392 go_menu(MENU_MODE_NONE);
393 if (key == KEY_DOWN)
394 go_menu(MENU_NONE_COOL);
395 if (key == KEY_UP)
396 go_menu(MENU_NONE_FAN);
397 if (key == KEY_ENTER) {
398 if (current_unit->heater_state)
399 current_unit->heater_state = 0;
400 else
401 current_unit->heater_state = 100;
402 go_menu(MENU_NONE_HEAT);
403 }
404 break;
405
406 case MENU_NONE_COOL:
407 if (key == KEY_ESCAPE)
408 go_menu(MENU_MODE_NONE);
409 if (key == KEY_DOWN)
410 go_menu(MENU_NONE_FAN);
411 if (key == KEY_UP)
412 go_menu(MENU_NONE_HEAT);
413 if (key == KEY_ENTER) {
414 if (current_unit->cooler_state)
415 current_unit->cooler_state = 0;
416 else
417 current_unit->cooler_state = 100;
418 go_menu(MENU_NONE_COOL);
419 }
420 break;
421
422 case MENU_NONE_FAN:
423 if (key == KEY_ESCAPE)
424 go_menu(MENU_MODE_NONE);
425 if (key == KEY_DOWN)
426 go_menu(MENU_NONE_HEAT);
427 if (key == KEY_UP)
428 go_menu(MENU_NONE_COOL);
429 if (key == KEY_ENTER) {
430 if (current_unit->fan_state)
431 current_unit->fan_state = 0;
432 else
433 current_unit->fan_state = 100;
434 go_menu(MENU_NONE_FAN);
435 }
436 break;
437
438 case MENU_MODE_FRIDGE:
439 if (key == KEY_ESCAPE)
440 go_menu(MENU_UNITS);
441 if (key == KEY_DOWN)
442 go_menu(MENU_MODE_BEER);
443 if (key == KEY_UP)
444 go_menu(MENU_MODE_NONE);
445 if (key == KEY_ENTER) {
446 if (current_unit->mode == UNITMODE_FRIDGE) {
447 temp_temp = current_unit->fridge_set;
448 go_menu(MENU_FRIDGE_TEMP);
449 } else {
450 change_mode(UNITMODE_FRIDGE);
451 go_menu(MENU_MODE_FRIDGE);
452 }
453 }
454 break;
455
456 case MENU_FRIDGE_TEMP:
457 if (key == KEY_ESCAPE)
458 go_menu(MENU_MODE_FRIDGE);
459 if (key == KEY_DOWN) {
460 if (temp_temp > current_unit->temp_set_min)
461 temp_temp -= 0.1;
462 go_menu(MENU_FRIDGE_TEMP);
463 }
464 if (key == KEY_UP) {
465 if (temp_temp < current_unit->temp_set_max)
466 temp_temp += 0.1;
467 go_menu(MENU_FRIDGE_TEMP);
468 }
469 if (key == KEY_ENTER) {
470 if (temp_temp != current_unit->fridge_set) {
471 syslog(LOG_NOTICE, "Fridge temperature changed from %.1f to %.1f degrees from the panel", current_unit->fridge_set, temp_temp);
472 current_unit->fridge_set = temp_temp;
473 }
474 go_menu(MENU_MODE_FRIDGE);
475 }
476 break;
477
478 case MENU_MODE_BEER:
479 if (key == KEY_ESCAPE)
480 go_menu(MENU_UNITS);
481 if (key == KEY_DOWN)
482 go_menu(MENU_MODE_PROFILE);
483 if (key == KEY_UP)
484 go_menu(MENU_MODE_FRIDGE);
485 if (key == KEY_ENTER) {
486 if (current_unit->mode == UNITMODE_BEER) {
487 temp_temp = current_unit->beer_set;
488 go_menu(MENU_BEER_TEMP);
489 } else {
490 change_mode(UNITMODE_BEER);
491 go_menu(MENU_MODE_BEER);
492 }
493 }
494 break;
495
496 case MENU_BEER_TEMP:
497 if (key == KEY_ESCAPE)
498 go_menu(MENU_MODE_BEER);
499 if (key == KEY_DOWN) {
500 if (temp_temp > current_unit->temp_set_min)
501 temp_temp -= 0.1;
502 go_menu(MENU_BEER_TEMP);
503 }
504 if (key == KEY_UP) {
505 if (temp_temp < current_unit->temp_set_max)
506 temp_temp += 0.1;
507 go_menu(MENU_BEER_TEMP);
508 }
509 if (key == KEY_ENTER) {
510 if (temp_temp != current_unit->beer_set) {
511 syslog(LOG_NOTICE, "Beer temperature changed from %.1f to %.1f degrees from the panel", current_unit->beer_set, temp_temp);
512 current_unit->beer_set = temp_temp;
513 }
514 go_menu(MENU_MODE_BEER);
515 }
516 break;
517
518 case MENU_MODE_PROFILE:
519 if (key == KEY_ESCAPE)
520 go_menu(MENU_UNITS);
521 if (key == KEY_DOWN)
522 go_menu(MENU_MODE_OFF);
523 if (key == KEY_UP)
524 go_menu(MENU_MODE_BEER);
525 if (key == KEY_ENTER) {
526 change_mode(UNITMODE_PROFILE);
527 go_menu(MENU_MODE_PROFILE);
528 }
529 break;
530
531 case MENU_PROFILE_SELECT:
532 break;
533
534 case MENU_PROFILE_START:
535 break;
536
537 case MENU_PROFILE_PAUSE:
538 break;
539
540 case MENU_PROFILE_ABORT:
541 break;
542
543 case MENU_PROFILE_RESUME:
544 break;
545
546 case MENU_PROFILE_GOOFF:
547 break;
548
549 case MENU_TOP_SYS:
550 if (key == KEY_ESCAPE)
551 go_menu(MENU_NONE);
552 if (key == KEY_DOWN)
553 go_menu(MENU_TOP_DEFAULT);
554 if (key == KEY_UP)
555 go_menu(MENU_TOP_UNITS);
556 if (key == KEY_ENTER)
557 go_menu(MENU_SYS_HALT);
558 break;
559
560 case MENU_SYS_HALT:
561 if (key == KEY_ESCAPE)
562 go_menu(MENU_TOP_SYS);
563 if (key == KEY_DOWN)
564 go_menu(MENU_SYS_REBOOT);
565 if (key == KEY_UP)
566 go_menu(MENU_SYS_THERMS);
567 break;
568
569 case MENU_SYS_REBOOT:
570 if (key == KEY_ESCAPE)
571 go_menu(MENU_TOP_SYS);
572 if (key == KEY_DOWN)
573 go_menu(MENU_SYS_MASH);
574 if (key == KEY_UP)
575 go_menu(MENU_SYS_HALT);
576 break;
577
578 case MENU_SYS_MASH:
579 if (key == KEY_ESCAPE)
580 go_menu(MENU_TOP_SYS);
581 if (key == KEY_DOWN)
582 go_menu(MENU_SYS_THERMS);
583 if (key == KEY_UP)
584 go_menu(MENU_SYS_REBOOT);
585 break;
586
587 case MENU_SYS_THERMS:
588 if (key == KEY_ESCAPE)
589 go_menu(MENU_TOP_SYS);
590 if (key == KEY_DOWN)
591 go_menu(MENU_SYS_HALT);
592 if (key == KEY_UP)
593 go_menu(MENU_SYS_MASH);
594 break;
595
596 }
597 }
598 #endif
599
273 600
274 601
275 602
276 int main(int argc, char *argv[]) 603 int main(int argc, char *argv[])
277 { 604 {
954 wrconfig(); 1281 wrconfig();
955 } 1282 }
956 } 1283 }
957 1284
958 #ifdef HAVE_WIRINGPI_H 1285 #ifdef HAVE_WIRINGPI_H
959 /*
960 * Handle panel key events.
961 */
962 key = keycheck(); 1286 key = keycheck();
963 1287 if (key != KEY_NONE)
964 switch (setupmenu) { 1288 panel_key_events(key);
965 case MENU_NONE:
966 if ((key == KEY_DOWN) || (key == KEY_UP))
967 lcd_buf_step(key);
968 if ((key == KEY_CONFIRM) && (setupmenu == MENU_NONE))
969 go_menu(MENU_TOP_DEFAULT);
970 break;
971
972 case MENU_TOP_DEFAULT:
973 if (key == KEY_ESCAPE)
974 go_menu(MENU_NONE);
975 if (key == KEY_DOWN)
976 go_menu(MENU_TOP_UNITS);
977 if (key == KEY_UP)
978 go_menu(MENU_TOP_SYS);
979 break;
980
981 case MENU_TOP_UNITS:
982 if (key == KEY_ESCAPE)
983 go_menu(MENU_NONE);
984 if (key == KEY_DOWN)
985 go_menu(MENU_TOP_SYS);
986 if (key == KEY_UP)
987 go_menu(MENU_TOP_DEFAULT);
988 if ((key == KEY_ENTER) && Config.units) {
989 /*
990 * Start with the first unit
991 */
992 current_unit = Config.units;
993 go_menu(MENU_UNITS);
994 }
995 break;
996
997 case MENU_UNITS:
998 if (key == KEY_ESCAPE)
999 go_menu(MENU_TOP_UNITS);
1000 if (key == KEY_DOWN) {
1001 if (current_unit->next) {
1002 current_unit = current_unit->next;
1003 go_menu(MENU_UNITS);
1004 }
1005 }
1006 if (key == KEY_UP) {
1007 for (unit = Config.units; unit; unit = unit->next) {
1008 if (unit->next && (unit->next == current_unit)) {
1009 current_unit = unit;
1010 go_menu(MENU_UNITS);
1011 break;
1012 }
1013 }
1014 }
1015 if (key == KEY_ENTER) {
1016 /*
1017 * Drop into the current mode
1018 */
1019 switch (current_unit->mode) {
1020 case UNITMODE_OFF: go_menu(MENU_MODE_OFF);
1021 break;
1022 case UNITMODE_NONE: go_menu(MENU_MODE_NONE);
1023 break;
1024 case UNITMODE_FRIDGE: go_menu(MENU_MODE_FRIDGE);
1025 break;
1026 case UNITMODE_BEER: go_menu(MENU_MODE_BEER);
1027 break;
1028 case UNITMODE_PROFILE: go_menu(MENU_MODE_PROFILE);
1029 break;
1030 }
1031 }
1032 break;
1033
1034 case MENU_MODE_OFF:
1035 if (key == KEY_ESCAPE)
1036 go_menu(MENU_UNITS);
1037 if (key == KEY_DOWN)
1038 go_menu(MENU_MODE_NONE);
1039 if (key == KEY_UP)
1040 go_menu(MENU_MODE_PROFILE);
1041 if (key == KEY_ENTER) {
1042 change_mode(UNITMODE_OFF);
1043 go_menu(MENU_MODE_OFF);
1044 }
1045 break;
1046
1047 case MENU_MODE_NONE:
1048 if (key == KEY_ESCAPE)
1049 go_menu(MENU_UNITS);
1050 if (key == KEY_DOWN)
1051 go_menu(MENU_MODE_FRIDGE);
1052 if (key == KEY_UP)
1053 go_menu(MENU_MODE_OFF);
1054 if (key == KEY_ENTER) {
1055 if (current_unit->mode == UNITMODE_NONE)
1056 go_menu(MENU_NONE_HEAT);
1057 else {
1058 change_mode(UNITMODE_NONE);
1059 go_menu(MENU_MODE_NONE);
1060 }
1061 }
1062 break;
1063
1064 case MENU_NONE_HEAT:
1065 if (key == KEY_ESCAPE)
1066 go_menu(MENU_MODE_NONE);
1067 if (key == KEY_DOWN)
1068 go_menu(MENU_NONE_COOL);
1069 if (key == KEY_UP)
1070 go_menu(MENU_NONE_FAN);
1071 if (key == KEY_ENTER) {
1072 if (current_unit->heater_state)
1073 current_unit->heater_state = 0;
1074 else
1075 current_unit->heater_state = 100;
1076 go_menu(MENU_NONE_HEAT);
1077 }
1078 break;
1079
1080 case MENU_NONE_COOL:
1081 if (key == KEY_ESCAPE)
1082 go_menu(MENU_MODE_NONE);
1083 if (key == KEY_DOWN)
1084 go_menu(MENU_NONE_FAN);
1085 if (key == KEY_UP)
1086 go_menu(MENU_NONE_HEAT);
1087 if (key == KEY_ENTER) {
1088 if (current_unit->cooler_state)
1089 current_unit->cooler_state = 0;
1090 else
1091 current_unit->cooler_state = 100;
1092 go_menu(MENU_NONE_COOL);
1093 }
1094 break;
1095
1096 case MENU_NONE_FAN:
1097 if (key == KEY_ESCAPE)
1098 go_menu(MENU_MODE_NONE);
1099 if (key == KEY_DOWN)
1100 go_menu(MENU_NONE_HEAT);
1101 if (key == KEY_UP)
1102 go_menu(MENU_NONE_COOL);
1103 if (key == KEY_ENTER) {
1104 if (current_unit->fan_state)
1105 current_unit->fan_state = 0;
1106 else
1107 current_unit->fan_state = 100;
1108 go_menu(MENU_NONE_FAN);
1109 }
1110 break;
1111
1112 case MENU_MODE_FRIDGE:
1113 if (key == KEY_ESCAPE)
1114 go_menu(MENU_UNITS);
1115 if (key == KEY_DOWN)
1116 go_menu(MENU_MODE_BEER);
1117 if (key == KEY_UP)
1118 go_menu(MENU_MODE_NONE);
1119 if (key == KEY_ENTER) {
1120 change_mode(UNITMODE_FRIDGE);
1121 go_menu(MENU_MODE_FRIDGE);
1122 }
1123 break;
1124
1125 case MENU_FRIDGE_TEMP:
1126 break;
1127
1128 case MENU_MODE_BEER:
1129 if (key == KEY_ESCAPE)
1130 go_menu(MENU_UNITS);
1131 if (key == KEY_DOWN)
1132 go_menu(MENU_MODE_PROFILE);
1133 if (key == KEY_UP)
1134 go_menu(MENU_MODE_FRIDGE);
1135 if (key == KEY_ENTER) {
1136 change_mode(UNITMODE_BEER);
1137 go_menu(MENU_MODE_BEER);
1138 }
1139 break;
1140
1141 case MENU_BEER_TEMP:
1142 break;
1143
1144 case MENU_MODE_PROFILE:
1145 if (key == KEY_ESCAPE)
1146 go_menu(MENU_UNITS);
1147 if (key == KEY_DOWN)
1148 go_menu(MENU_MODE_OFF);
1149 if (key == KEY_UP)
1150 go_menu(MENU_MODE_BEER);
1151 if (key == KEY_ENTER) {
1152 change_mode(UNITMODE_PROFILE);
1153 go_menu(MENU_MODE_PROFILE);
1154 }
1155 break;
1156
1157 case MENU_PROFILE_SELECT:
1158 break;
1159
1160 case MENU_PROFILE_START:
1161 break;
1162
1163 case MENU_PROFILE_PAUSE:
1164 break;
1165
1166 case MENU_PROFILE_ABORT:
1167 break;
1168
1169 case MENU_PROFILE_RESUME:
1170 break;
1171
1172 case MENU_PROFILE_GOOFF:
1173 break;
1174
1175 case MENU_TOP_SYS:
1176 if (key == KEY_ESCAPE)
1177 go_menu(MENU_NONE);
1178 if (key == KEY_DOWN)
1179 go_menu(MENU_TOP_DEFAULT);
1180 if (key == KEY_UP)
1181 go_menu(MENU_TOP_UNITS);
1182 if (key == KEY_ENTER)
1183 go_menu(MENU_SYS_HALT);
1184 break;
1185
1186 case MENU_SYS_HALT:
1187 if (key == KEY_ESCAPE)
1188 go_menu(MENU_TOP_SYS);
1189 if (key == KEY_DOWN)
1190 go_menu(MENU_SYS_REBOOT);
1191 if (key == KEY_UP)
1192 go_menu(MENU_SYS_THERMS);
1193 break;
1194
1195 case MENU_SYS_REBOOT:
1196 if (key == KEY_ESCAPE)
1197 go_menu(MENU_TOP_SYS);
1198 if (key == KEY_DOWN)
1199 go_menu(MENU_SYS_MASH);
1200 if (key == KEY_UP)
1201 go_menu(MENU_SYS_HALT);
1202 break;
1203
1204 case MENU_SYS_MASH:
1205 if (key == KEY_ESCAPE)
1206 go_menu(MENU_TOP_SYS);
1207 if (key == KEY_DOWN)
1208 go_menu(MENU_SYS_THERMS);
1209 if (key == KEY_UP)
1210 go_menu(MENU_SYS_REBOOT);
1211 break;
1212
1213 case MENU_SYS_THERMS:
1214 if (key == KEY_ESCAPE)
1215 go_menu(MENU_TOP_SYS);
1216 if (key == KEY_DOWN)
1217 go_menu(MENU_SYS_HALT);
1218 if (key == KEY_UP)
1219 go_menu(MENU_SYS_MASH);
1220 break;
1221
1222 }
1223
1224 #endif 1289 #endif
1225 1290
1226 usleep(100000); 1291 usleep(100000);
1227 1292
1228 } while (run); 1293 } while (run);

mercurial