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; |
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: |