thermferm/thermferm.c

changeset 420
644a6106d712
parent 418
0bfe08c7ba6e
child 422
13502d0dda65
--- a/thermferm/thermferm.c	Sun Nov 08 22:20:42 2015 +0100
+++ b/thermferm/thermferm.c	Sat Nov 14 16:52:33 2015 +0100
@@ -29,6 +29,7 @@
 #include "simulator.h"
 #include "lcd-pcf8574.h"
 #include "lcd-buffer.h"
+#include "slcd.h"
 #include "panel.h"
 #include "futil.h"
 #include "xutil.h"
@@ -43,6 +44,7 @@
 extern int		debug;
 extern sys_config	Config;
 extern int		lcdHandle;
+extern int		slcdHandle;
 int			setupmenu = MENU_NONE;
 units_list		*current_unit = NULL;		/* In panel editor this points to the current unit. */
 profiles_list		*current_profile = NULL;
@@ -54,6 +56,8 @@
 extern const char       UNITMODE[5][8];
 extern const char	PROFSTATE[4][6];
 
+extern int		sock;
+
 
 int  server(void);
 void help(void);
@@ -106,6 +110,8 @@
     lcdPuts(lcdHandle, buf);
     lcdPosition(lcdHandle, 0, 1);
 #endif
+    slcdPuts(slcdHandle, buf);
+    slcdPosition(slcdHandle, 0, 1);
 }
 
 
@@ -120,14 +126,15 @@
     lcdClear(lcdHandle);
     lcdPosition(lcdHandle, 0, 0);
 #endif
+    slcdClear(slcdHandle);
+    slcdPosition(slcdHandle, 0, 0);
+
     syslog(LOG_NOTICE, "from menu %d to menu %d", setupmenu, menu);
     setupmenu = menu;
 
     switch (menu) {
 	case MENU_NONE:		
-#ifdef HAVE_WIRINGPI_H
 				lcd_buf_show();
-#endif
 				break;
 
 	case MENU_TOP_DEFAULT:	
@@ -136,12 +143,16 @@
 				lcdPosition(lcdHandle, 0, 1);
 				lcdPuts(lcdHandle, "Up&Down = Escape");
 #endif
+				slcdPuts(slcdHandle, "Setup mode.");
+				slcdPosition(slcdHandle, 0, 1);
+				slcdPuts(slcdHandle, "Up&Down = Escape");
 				break;
 
 	case MENU_TOP_UNITS:	
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "Select units");
 #endif
+				slcdPuts(slcdHandle, "Select units");
 				break;
 
 	case MENU_UNITS:	
@@ -150,42 +161,51 @@
 				lcdPosition(lcdHandle, 0, 1);
 				lcdPuts(lcdHandle, current_unit->name);
 #endif
+				slcdPuts(slcdHandle, "Choose unit:");
+				slcdPosition(slcdHandle, 0, 1);
+				slcdPuts(slcdHandle, current_unit->name);
 				break;
 
 	case MENU_MODE_OFF:	show_mode();
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "New mode OFF");
 #endif
+				slcdPuts(slcdHandle, "New mode OFF");
 				break;
 
 	case MENU_MODE_NONE:	show_mode();
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "New mode NONE");
 #endif
+				slcdPuts(slcdHandle, "New mode NONE");
 				break;
 
 	case MENU_NONE_HEAT:	snprintf(buf, Config.lcd_cols, "Set heater %s", current_unit->heater_state ? "OFF":"ON");
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, buf);
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_NONE_COOL:	snprintf(buf, Config.lcd_cols, "Set cooler %s", current_unit->cooler_state ? "OFF":"ON");
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, buf);
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_NONE_FAN:	snprintf(buf, Config.lcd_cols, "Set fan %s", current_unit->fan_state ? "OFF":"ON");
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, buf);
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_MODE_BEER:	show_mode();
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "New mode BEER");
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_BEER_TEMP:	
@@ -193,16 +213,21 @@
 				lcdPuts(lcdHandle, "Set beer temp");
 				lcdPosition(lcdHandle, 0, 1);
 #endif
+				slcdPuts(slcdHandle, "Set beer temp");
+				slcdPosition(slcdHandle, 0, 1);
+
 				snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp);
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, buf);
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_MODE_FRIDGE:	show_mode();
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "New mode FRIDGE");
 #endif
+				slcdPuts(slcdHandle, "New mode FRIDGE");
 				break;
 
 	case MENU_FRIDGE_TEMP:	
@@ -210,16 +235,20 @@
 				lcdPuts(lcdHandle, "Set fridge temp");
 				lcdPosition(lcdHandle, 0, 1);
 #endif
+				slcdPuts(slcdHandle, "Set fridge temp");
+				slcdPosition(slcdHandle, 0, 1);
 				snprintf(buf, Config.lcd_cols, "Set %.1f", temp_temp);
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, buf);
 #endif
+				slcdPuts(slcdHandle, buf);
 				break;
 
 	case MENU_MODE_PROFILE:	show_mode();
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "New mode PROFILE");
 #endif
+				slcdPuts(slcdHandle, "New mode PROFILE");
 				break;
 
 	case MENU_PROFILE_SELECT:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -228,6 +257,9 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Select profile");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Select profile");
 					break;
 	
 	case MENU_PROFILE_START:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -236,6 +268,9 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Start profile");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Start profile");
 					break;
 	
 	case MENU_PROFILE_PAUSE:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -244,6 +279,9 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Pause profile");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Pause profile");
 					break;
 
 	case MENU_PROFILE_ABORT:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -252,6 +290,9 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Abort profile");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Abort profile");
 					break;
 
 	case MENU_PROFILE_RESUME:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -260,6 +301,9 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Resume profile");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Resume profile");
 					break;
 
 	case MENU_PROFILE_GOOFF:	snprintf(buf, Config.lcd_cols, "%s", current_profile->name);
@@ -268,24 +312,30 @@
 					lcdPosition(lcdHandle, 0, 1);
 					lcdPuts(lcdHandle, "Set profile OFF");
 #endif
+					slcdPuts(slcdHandle, buf);
+					slcdPosition(slcdHandle, 0, 1);
+					slcdPuts(slcdHandle, "Set profile OFF");
 					break;
 
 	case MENU_TOP_SYS:	
 #ifdef HAVE_WIRINGPI_H
 				lcdPuts(lcdHandle, "System menu");
 #endif
+				slcdPuts(slcdHandle, "System menu");
 				break;
 
 	case MENU_SYS_HALT:	
 #ifdef HAVE_WIRINGPI_H				
 				lcdPuts(lcdHandle, "Halt system");
 #endif
+				slcdPuts(slcdHandle, "Halt system");
 				break;
 
 	case MENU_SYS_REBOOT:	
 #ifdef HAVE_WIRINGPI_H				
 				lcdPuts(lcdHandle, "Reboot system");
 #endif
+				slcdPuts(slcdHandle, "Reboot system");
 				break;
     }
 
@@ -303,6 +353,9 @@
     piLock(LOCK_LCD);
     lcdClear(lcdHandle);
     setBacklight(0);
+#endif
+    slcdClear(slcdHandle);
+#ifdef HAVE_WIRINGPI_H
     piUnlock(LOCK_LCD);
 #endif
 }
@@ -800,12 +853,12 @@
 #ifdef HAVE_WIRINGPI_H
     if (wiringPiSetup () )
 	return 1;
+#endif
 
     if ((rc = initLCD (Config.lcd_cols, Config.lcd_rows))) {
 	fprintf(stderr, "Cannot initialize LCD display, rc=%d\n", rc);
 	return 1;
     }
-#endif
 
     if (debug) {
 	/*
@@ -1757,6 +1810,7 @@
 	syslog(LOG_NOTICE, "Unit `%s' stopped in mode %s", unit->name, UNITMODE[unit->mode]);
     }
 
+    syslog(LOG_NOTICE, "Out of loop");
     if (debug)
 	fprintf(stdout, (char *)"Out of loop\n");
 
@@ -1766,6 +1820,12 @@
     usleep(1500000);
 
     stopLCD();
+    if (sock != -1) {
+	if (shutdown(sock, SHUT_RDWR)) {
+	    syslog(LOG_NOTICE, "Can't shutdown socket: %s", strerror(errno));
+	}
+	sock = -1;
+    }
     wrconfig();
     ulockprog((char *)"thermferm");
     return 0;

mercurial