thermferm/thermferm.c

changeset 247
f3d0e9445fcd
parent 246
6df404da3537
child 248
870d0be6880d
equal deleted inserted replaced
246:6df404da3537 247:f3d0e9445fcd
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 profiles_list *current_profile = NULL;
47 float temp_temp = 20.0; 48 float temp_temp = 20.0;
48 #endif 49 #endif
49 50
50 #ifndef HAVE_WIRINGPI_H 51 #ifndef HAVE_WIRINGPI_H
51 pthread_t threads[4]; 52 pthread_t threads[4];
104 105
105 106
106 107
107 void go_menu(int menu) 108 void go_menu(int menu)
108 { 109 {
109 char buf[21]; 110 char buf[21];
110 111
111 piLock(LOCK_LCD); 112 piLock(LOCK_LCD);
112 piLock(LOCK_MENU); 113 piLock(LOCK_MENU);
113 lcdClear(lcdHandle); 114 lcdClear(lcdHandle);
114 lcdPosition(lcdHandle, 0, 0); 115 lcdPosition(lcdHandle, 0, 0);
138 139
139 case MENU_MODE_NONE: show_mode(); 140 case MENU_MODE_NONE: show_mode();
140 lcdPuts(lcdHandle, "New mode NONE"); 141 lcdPuts(lcdHandle, "New mode NONE");
141 break; 142 break;
142 143
143 case MENU_NONE_HEAT: snprintf(buf, 20, "Set heater %s", current_unit->heater_state ? "OFF":"ON"); 144 case MENU_NONE_HEAT: snprintf(buf, Config.lcd_cols, "Set heater %s", current_unit->heater_state ? "OFF":"ON");
144 lcdPuts(lcdHandle, buf); 145 lcdPuts(lcdHandle, buf);
145 break; 146 break;
146 147
147 case MENU_NONE_COOL: snprintf(buf, 20, "Set cooler %s", current_unit->cooler_state ? "OFF":"ON"); 148 case MENU_NONE_COOL: snprintf(buf, Config.lcd_cols, "Set cooler %s", current_unit->cooler_state ? "OFF":"ON");
148 lcdPuts(lcdHandle, buf); 149 lcdPuts(lcdHandle, buf);
149 break; 150 break;
150 151
151 case MENU_NONE_FAN: snprintf(buf, 20, "Set fan %s", current_unit->fan_state ? "OFF":"ON"); 152 case MENU_NONE_FAN: snprintf(buf, Config.lcd_cols, "Set fan %s", current_unit->fan_state ? "OFF":"ON");
152 lcdPuts(lcdHandle, buf); 153 lcdPuts(lcdHandle, buf);
153 break; 154 break;
154 155
155 case MENU_MODE_BEER: show_mode(); 156 case MENU_MODE_BEER: show_mode();
156 lcdPuts(lcdHandle, "New mode BEER"); 157 lcdPuts(lcdHandle, "New mode BEER");
157 break; 158 break;
158 159
159 case MENU_BEER_TEMP: lcdPuts(lcdHandle, "Set beer temp"); 160 case MENU_BEER_TEMP: lcdPuts(lcdHandle, "Set beer temp");
160 lcdPosition(lcdHandle, 0, 1); 161 lcdPosition(lcdHandle, 0, 1);
161 snprintf(buf, 20, "Set %.1f", temp_temp); 162 snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp);
162 lcdPuts(lcdHandle, buf); 163 lcdPuts(lcdHandle, buf);
163 break; 164 break;
164 165
165 case MENU_MODE_FRIDGE: show_mode(); 166 case MENU_MODE_FRIDGE: show_mode();
166 lcdPuts(lcdHandle, "New mode FRIDGE"); 167 lcdPuts(lcdHandle, "New mode FRIDGE");
167 break; 168 break;
168 169
169 case MENU_FRIDGE_TEMP: lcdPuts(lcdHandle, "Set fridge temp"); 170 case MENU_FRIDGE_TEMP: lcdPuts(lcdHandle, "Set fridge temp");
170 lcdPosition(lcdHandle, 0, 1); 171 lcdPosition(lcdHandle, 0, 1);
171 snprintf(buf, 20, "Set %.1f", temp_temp); 172 snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp);
172 lcdPuts(lcdHandle, buf); 173 lcdPuts(lcdHandle, buf);
173 break; 174 break;
174 175
175 case MENU_MODE_PROFILE: show_mode(); 176 case MENU_MODE_PROFILE: show_mode();
176 lcdPuts(lcdHandle, "New mode PROFILE"); 177 lcdPuts(lcdHandle, "New mode PROFILE");
177 break; 178 break;
178 179
179 case MENU_PROFILE_SELECT: lcdPuts(lcdHandle, "Select profile"); 180 case MENU_PROFILE_SELECT: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
181 lcdPuts(lcdHandle, buf);
182 lcdPosition(lcdHandle, 0, 1);
183 lcdPuts(lcdHandle, "Select profile");
180 break; 184 break;
181 185
182 case MENU_PROFILE_START: lcdPuts(lcdHandle, "Start profile"); 186 case MENU_PROFILE_START: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
187 lcdPuts(lcdHandle, buf);
188 lcdPosition(lcdHandle, 0, 1);
189 lcdPuts(lcdHandle, "Start profile");
183 break; 190 break;
184 191
185 case MENU_PROFILE_PAUSE: lcdPuts(lcdHandle, "Pause profile"); 192 case MENU_PROFILE_PAUSE: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
193 lcdPuts(lcdHandle, buf);
194 lcdPosition(lcdHandle, 0, 1);
195 lcdPuts(lcdHandle, "Pause profile");
186 break; 196 break;
187 197
188 case MENU_PROFILE_ABORT: lcdPuts(lcdHandle, "Abort profile"); 198 case MENU_PROFILE_ABORT: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
199 lcdPuts(lcdHandle, buf);
200 lcdPosition(lcdHandle, 0, 1);
201 lcdPuts(lcdHandle, "Abort profile");
189 break; 202 break;
190 203
191 case MENU_PROFILE_RESUME: lcdPuts(lcdHandle, "Resume profile"); 204 case MENU_PROFILE_RESUME: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
205 lcdPuts(lcdHandle, buf);
206 lcdPosition(lcdHandle, 0, 1);
207 lcdPuts(lcdHandle, "Resume profile");
192 break; 208 break;
193 209
194 case MENU_PROFILE_GOOFF: lcdPuts(lcdHandle, "Set profile OFF"); 210 case MENU_PROFILE_GOOFF: snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
211 lcdPuts(lcdHandle, buf);
212 lcdPosition(lcdHandle, 0, 1);
213 lcdPuts(lcdHandle, "Set profile OFF");
195 break; 214 break;
196 215
197 case MENU_TOP_SYS: lcdPuts(lcdHandle, "System menu"); 216 case MENU_TOP_SYS: lcdPuts(lcdHandle, "System menu");
198 break; 217 break;
199 218
201 break; 220 break;
202 221
203 case MENU_SYS_REBOOT: lcdPuts(lcdHandle, "Reboot system"); 222 case MENU_SYS_REBOOT: lcdPuts(lcdHandle, "Reboot system");
204 break; 223 break;
205 224
206 case MENU_SYS_MASH: lcdPuts(lcdHandle, "Start Mash program"); 225 case MENU_SYS_MASH: lcdPuts(lcdHandle, "Run Mash program");
207 break; 226 break;
208 227
209 case MENU_SYS_THERMS: lcdPuts(lcdHandle, "Start Thermometers"); 228 case MENU_SYS_THERMS: lcdPuts(lcdHandle, "Run Thermometers");
210 break; 229 break;
211 } 230 }
212 231
213 piUnlock(LOCK_MENU); 232 piUnlock(LOCK_MENU);
214 piUnlock(LOCK_LCD); 233 piUnlock(LOCK_LCD);
283 * Handle panel key events 302 * Handle panel key events
284 */ 303 */
285 #ifdef HAVE_WIRINGPI_H 304 #ifdef HAVE_WIRINGPI_H
286 void panel_key_events(int key) 305 void panel_key_events(int key)
287 { 306 {
288 units_list *unit; 307 units_list *unit;
308 profiles_list *profile;
309 int rc;
289 310
290 switch (setupmenu) { 311 switch (setupmenu) {
291 case MENU_NONE: 312 case MENU_NONE:
292 if ((key == KEY_DOWN) || (key == KEY_UP)) 313 if ((key == KEY_DOWN) || (key == KEY_UP))
293 lcd_buf_step(key); 314 lcd_buf_step(key);
514 go_menu(MENU_MODE_BEER); 535 go_menu(MENU_MODE_BEER);
515 } 536 }
516 break; 537 break;
517 538
518 case MENU_MODE_PROFILE: 539 case MENU_MODE_PROFILE:
540 if (current_unit->profile) {
541 for (current_profile = Config.profiles; current_profile; current_profile = current_profile->next) {
542 if (strcmp(current_profile->uuid, current_unit->profile) == 0)
543 break;
544 }
545 } else {
546 current_profile = NULL;
547 }
519 if (key == KEY_ESCAPE) 548 if (key == KEY_ESCAPE)
520 go_menu(MENU_UNITS); 549 go_menu(MENU_UNITS);
521 if (key == KEY_DOWN) 550 if (key == KEY_DOWN)
522 go_menu(MENU_MODE_OFF); 551 go_menu(MENU_MODE_OFF);
523 if (key == KEY_UP) 552 if (key == KEY_UP)
524 go_menu(MENU_MODE_BEER); 553 go_menu(MENU_MODE_BEER);
525 if (key == KEY_ENTER) { 554 if (key == KEY_ENTER) {
526 change_mode(UNITMODE_PROFILE); 555 if (current_unit->mode == UNITMODE_PROFILE) {
556 switch (current_unit->prof_state) {
557 case PROFILE_OFF: if (current_unit->profile)
558 go_menu(MENU_PROFILE_START);
559 else
560 go_menu(MENU_PROFILE_SELECT);
561 break;
562 case PROFILE_PAUSE: go_menu(MENU_PROFILE_RESUME);
563 break;
564 case PROFILE_RUN: go_menu(MENU_PROFILE_PAUSE);
565 break;
566 case PROFILE_DONE: go_menu(MENU_PROFILE_GOOFF);
567 break;
568 }
569 } else {
570 change_mode(UNITMODE_PROFILE);
571 go_menu(MENU_MODE_PROFILE);
572 }
573 }
574 break;
575
576 case MENU_PROFILE_SELECT:
577 if (key == KEY_ESCAPE)
527 go_menu(MENU_MODE_PROFILE); 578 go_menu(MENU_MODE_PROFILE);
528 } 579 if (key == KEY_DOWN) {
529 break; 580 if (current_profile->next) {
530 581 current_profile = current_profile->next;
531 case MENU_PROFILE_SELECT: 582 go_menu(MENU_PROFILE_SELECT);
583 } else {
584 go_menu(MENU_PROFILE_START);
585 }
586 }
587 if (key == KEY_UP) {
588 for (profile = Config.profiles; profile; profile = profile->next) {
589 if (profile->next && profile->next == current_profile) {
590 current_profile = profile;
591 go_menu(MENU_PROFILE_SELECT);
592 break;
593 }
594 }
595 go_menu(MENU_PROFILE_START);
596 }
597 if (key == KEY_ENTER) {
598 current_unit->profile = current_profile->uuid;
599 syslog(LOG_NOTICE, "Profile %s selected from panel", current_profile->name);
600 go_menu(MENU_PROFILE_START);
601 }
532 break; 602 break;
533 603
534 case MENU_PROFILE_START: 604 case MENU_PROFILE_START:
605 if (key == KEY_ESCAPE)
606 go_menu(MENU_MODE_PROFILE);
607 if ((key == KEY_DOWN) || (key == KEY_UP))
608 go_menu(MENU_PROFILE_SELECT);
609 if (key == KEY_ENTER) {
610 current_unit->prof_state = PROFILE_RUN;
611 current_unit->prof_started = time(NULL);
612 current_unit->prof_paused = 0;
613 syslog(LOG_NOTICE, "Profile started from the panel");
614 go_menu(MENU_MODE_PROFILE);
615 }
535 break; 616 break;
536 617
537 case MENU_PROFILE_PAUSE: 618 case MENU_PROFILE_PAUSE:
619 if (key == KEY_ESCAPE)
620 go_menu(MENU_MODE_PROFILE);
621 if ((key == KEY_DOWN) || (key == KEY_UP))
622 go_menu(MENU_PROFILE_ABORT);
623 if (key == KEY_ENTER) {
624 current_unit->prof_state = PROFILE_PAUSE;
625 syslog(LOG_NOTICE, "Profile pause from the panel");
626 go_menu(MENU_MODE_PROFILE);
627 }
538 break; 628 break;
539 629
540 case MENU_PROFILE_ABORT: 630 case MENU_PROFILE_ABORT:
631 if (key == KEY_ESCAPE)
632 go_menu(MENU_MODE_PROFILE);
633 if ((key == KEY_DOWN) || (key == KEY_UP)) {
634 if (current_unit->prof_state == PROFILE_PAUSE)
635 go_menu(MENU_PROFILE_RESUME);
636 else if (current_unit->prof_state == PROFILE_RUN)
637 go_menu(MENU_PROFILE_PAUSE);
638 }
639 if ((key == KEY_ENTER) && ((current_unit->prof_state == PROFILE_RUN) || (current_unit->prof_state == PROFILE_PAUSE))) {
640 current_unit->prof_state = PROFILE_OFF;
641 current_unit->prof_started = 0;
642 syslog(LOG_NOTICE, "Profile aborted from the panel");
643 go_menu(MENU_MODE_PROFILE);
644 }
541 break; 645 break;
542 646
543 case MENU_PROFILE_RESUME: 647 case MENU_PROFILE_RESUME:
648 if (key == KEY_ESCAPE)
649 go_menu(MENU_MODE_PROFILE);
650 if ((key == KEY_DOWN) || (key == KEY_UP))
651 go_menu(MENU_PROFILE_ABORT);
652 if (key == KEY_ENTER) {
653 current_unit->prof_state = PROFILE_RUN;
654 syslog(LOG_NOTICE, "Profile resume from the panel");
655 go_menu(MENU_MODE_PROFILE);
656 }
544 break; 657 break;
545 658
546 case MENU_PROFILE_GOOFF: 659 case MENU_PROFILE_GOOFF:
660 if (key == KEY_ESCAPE)
661 go_menu(MENU_MODE_PROFILE);
662 if (key == KEY_ENTER) {
663 if (current_unit->prof_state == PROFILE_DONE) {
664 current_unit->prof_state = PROFILE_OFF;
665 syslog(LOG_NOTICE, "Profile from done to off from the panel");
666 }
667 }
547 break; 668 break;
548 669
549 case MENU_TOP_SYS: 670 case MENU_TOP_SYS:
550 if (key == KEY_ESCAPE) 671 if (key == KEY_ESCAPE)
551 go_menu(MENU_NONE); 672 go_menu(MENU_NONE);
562 go_menu(MENU_TOP_SYS); 683 go_menu(MENU_TOP_SYS);
563 if (key == KEY_DOWN) 684 if (key == KEY_DOWN)
564 go_menu(MENU_SYS_REBOOT); 685 go_menu(MENU_SYS_REBOOT);
565 if (key == KEY_UP) 686 if (key == KEY_UP)
566 go_menu(MENU_SYS_THERMS); 687 go_menu(MENU_SYS_THERMS);
688 if (key == KEY_ENTER) {
689 rc = system("/sbin/halt");
690 syslog(LOG_NOTICE, "System halt from panel: /sbin/halt rc=%d", rc);
691 go_menu(MENU_NONE);
692 }
567 break; 693 break;
568 694
569 case MENU_SYS_REBOOT: 695 case MENU_SYS_REBOOT:
570 if (key == KEY_ESCAPE) 696 if (key == KEY_ESCAPE)
571 go_menu(MENU_TOP_SYS); 697 go_menu(MENU_TOP_SYS);
572 if (key == KEY_DOWN) 698 if (key == KEY_DOWN)
573 go_menu(MENU_SYS_MASH); 699 go_menu(MENU_SYS_MASH);
574 if (key == KEY_UP) 700 if (key == KEY_UP)
575 go_menu(MENU_SYS_HALT); 701 go_menu(MENU_SYS_HALT);
702 if (key == KEY_ENTER) {
703 rc = system("/sbin/reboot");
704 syslog(LOG_NOTICE, "System reboot from panel: /sbin/reboot rc=%d", rc);
705 go_menu(MENU_NONE);
706 }
576 break; 707 break;
577 708
578 case MENU_SYS_MASH: 709 case MENU_SYS_MASH:
579 if (key == KEY_ESCAPE) 710 if (key == KEY_ESCAPE)
580 go_menu(MENU_TOP_SYS); 711 go_menu(MENU_TOP_SYS);

mercurial