thermferm/thermferm.c

changeset 244
2f868eaefec2
parent 241
4ba138737bf4
child 245
b01b6238eb67
equal deleted inserted replaced
243:ab75ff8e26e1 244:2f868eaefec2
94 void show_mode(void) 94 void show_mode(void)
95 { 95 {
96 char buf[21]; 96 char buf[21];
97 97
98 snprintf(buf, 20, "Old mode %s", UNITMODE[current_unit->mode]); 98 snprintf(buf, 20, "Old mode %s", UNITMODE[current_unit->mode]);
99 piLock(LOCK_LCD);
100 lcdPuts(lcdHandle, buf); 99 lcdPuts(lcdHandle, buf);
101 lcdPosition(lcdHandle, 0, 1); 100 lcdPosition(lcdHandle, 0, 1);
102 piUnlock(LOCK_LCD);
103 } 101 }
104 102
105 103
106 104
107 void go_menu(int menu) 105 void go_menu(int menu)
108 { 106 {
109 char buf[21]; 107 char buf[21];
110 108
111 piLock(LOCK_LCD); 109 piLock(LOCK_LCD);
110 piLock(LOCK_MENU);
112 lcdClear(lcdHandle); 111 lcdClear(lcdHandle);
113 lcdPosition(lcdHandle, 0, 0); 112 lcdPosition(lcdHandle, 0, 0);
114 piUnlock(LOCK_LCD); 113 syslog(LOG_NOTICE, "from menu %d to menu %d", setupmenu, menu);
115 setupmenu = menu; 114 setupmenu = menu;
116 115
117 switch (menu) { 116 switch (menu) {
118 case MENU_NONE: lcd_buf_show(); 117 case MENU_NONE: lcd_buf_show();
119 break; 118 break;
125 124
126 case MENU_TOP_UNITS: lcdPuts(lcdHandle, "Select units"); 125 case MENU_TOP_UNITS: lcdPuts(lcdHandle, "Select units");
127 break; 126 break;
128 127
129 case MENU_UNITS: lcdPuts(lcdHandle, "Choose unit:"); 128 case MENU_UNITS: lcdPuts(lcdHandle, "Choose unit:");
130 if ((current_unit == NULL) && Config.units) { 129 lcdPosition(lcdHandle, 0, 1);
131 /* 130 lcdPuts(lcdHandle, current_unit->name);
132 * First time in this menu, select the first unit.
133 */
134 current_unit = Config.units;
135 lcdPosition(lcdHandle, 0, 1);
136 lcdPuts(lcdHandle, Config.units->name);
137 }
138 break; 131 break;
139 132
140 case MENU_MODE_OFF: show_mode(); 133 case MENU_MODE_OFF: show_mode();
141 lcdPuts(lcdHandle, "New mode OFF"); 134 lcdPuts(lcdHandle, "New mode OFF");
142 break; 135 break;
206 break; 199 break;
207 200
208 case MENU_SYS_THERMS: lcdPuts(lcdHandle, "Start Thermometers"); 201 case MENU_SYS_THERMS: lcdPuts(lcdHandle, "Start Thermometers");
209 break; 202 break;
210 } 203 }
204
205 piUnlock(LOCK_MENU);
206 piUnlock(LOCK_LCD);
211 } 207 }
212 208
213 209
214 210
215 void stopLCD(void) 211 void stopLCD(void)
863 } 859 }
864 } 860 }
865 } 861 }
866 862
867 #ifdef HAVE_WIRINGPI_H 863 #ifdef HAVE_WIRINGPI_H
864 piLock(LOCK_MENU);
868 if (setupmenu == MENU_NONE) { 865 if (setupmenu == MENU_NONE) {
869 piLock(LOCK_LCD); 866 piLock(LOCK_LCD);
870 lcd_buf_show(); 867 lcd_buf_show();
871 piUnlock(LOCK_LCD); 868 piUnlock(LOCK_LCD);
872 } 869 }
870 piUnlock(LOCK_MENU);
873 #endif 871 #endif
874 872
875 if (seconds == 60) { 873 if (seconds == 60) {
876 seconds = 0; 874 seconds = 0;
877 875
958 go_menu(MENU_NONE); 956 go_menu(MENU_NONE);
959 if (key == KEY_DOWN) 957 if (key == KEY_DOWN)
960 go_menu(MENU_TOP_SYS); 958 go_menu(MENU_TOP_SYS);
961 if (key == KEY_UP) 959 if (key == KEY_UP)
962 go_menu(MENU_TOP_DEFAULT); 960 go_menu(MENU_TOP_DEFAULT);
963 if (key == KEY_ENTER) 961 if ((key == KEY_ENTER) && Config.units) {
962 /*
963 * Start with the first unit
964 */
965 current_unit = Config.units;
964 go_menu(MENU_UNITS); 966 go_menu(MENU_UNITS);
967 }
965 break; 968 break;
966 969
967 case MENU_UNITS: 970 case MENU_UNITS:
968 if (key == KEY_ESCAPE) 971 if (key == KEY_ESCAPE)
969 go_menu(MENU_TOP_UNITS); 972 go_menu(MENU_TOP_UNITS);
970 if (key == KEY_DOWN) { 973 if (key == KEY_DOWN) {
974 if (current_unit->next) {
975 current_unit = current_unit->next;
976 go_menu(MENU_UNITS);
977 }
978 }
979 if (key == KEY_UP) {
971 for (unit = Config.units; unit; unit = unit->next) { 980 for (unit = Config.units; unit; unit = unit->next) {
972 if (strcmp(unit->uuid, current_unit->uuid) == 0) { /* Current unit */ 981 if (unit->next && (unit->next == current_unit)) {
973 if (unit->next) { /* Is there a next */ 982 current_unit = unit;
974 unit = unit->next; /* Select that */ 983 go_menu(MENU_UNITS);
975 piLock(LOCK_LCD); 984 break;
976 lcdPosition(lcdHandle, 0, 1);
977 lcdPuts(lcdHandle, Config.units->name);
978 piUnlock(LOCK_LCD);
979 }
980 } 985 }
981 } 986 }
982 } 987 }
983 if (key == KEY_ENTER) { 988 if (key == KEY_ENTER) {
984 for (unit = Config.units; unit; unit = unit->next) { 989 /*
985 if (strcmp(unit->uuid, current_unit->uuid) == 0) { 990 * Drop into the current mode
986 if (unit->mode == UNITMODE_OFF) 991 */
987 go_menu(MENU_MODE_NONE); 992 switch (current_unit->mode) {
988 else 993 case UNITMODE_OFF: go_menu(MENU_MODE_OFF);
989 go_menu(MENU_MODE_OFF); 994 break;
990 } 995 case UNITMODE_NONE: go_menu(MENU_MODE_NONE);
996 break;
997 case UNITMODE_FRIDGE: go_menu(MENU_MODE_FRIDGE);
998 break;
999 case UNITMODE_BEER: go_menu(MENU_MODE_BEER);
1000 break;
1001 case UNITMODE_PROFILE: go_menu(MENU_MODE_PROFILE);
1002 break;
991 } 1003 }
992 } 1004 }
993 break; 1005 break;
994 1006
995 case MENU_MODE_OFF: 1007 case MENU_MODE_OFF:

mercurial