main/automation.c

branch
novnc
changeset 42
c6a1a6ca5437
parent 27
e82484ef9d12
child 43
2079940c3989
equal deleted inserted replaced
41:7639cfa6aec0 42:c6a1a6ca5437
38 bool _Prompt = false; ///< Prompt display flag 38 bool _Prompt = false; ///< Prompt display flag
39 39
40 extern bool System_TimeOk; ///< System time is valid 40 extern bool System_TimeOk; ///< System time is valid
41 extern sButton Buttons[MAXBUTTONS]; ///< Buttons definitions 41 extern sButton Buttons[MAXBUTTONS]; ///< Buttons definitions
42 extern int Main_Screen; ///< Current screen 42 extern int Main_Screen; ///< Current screen
43 extern int Sub_Screen; ///< Sub screen during mash
43 extern DS18B20_State *ds18b20_state; ///< DS18B20 state 44 extern DS18B20_State *ds18b20_state; ///< DS18B20 state
44 extern DRIVER_State *driver_state; ///< Relays driver state 45 extern DRIVER_State *driver_state; ///< Relays driver state
45 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore 46 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore
46 extern SemaphoreHandle_t xSemaphoreDriver; ///< Relays driver lock semaphore 47 extern SemaphoreHandle_t xSemaphoreDriver; ///< Relays driver lock semaphore
47 extern double Output; ///< Cakculated outpout power 48 extern double Output; ///< Cakculated outpout power
62 * Automation init function that only runs once when a 63 * Automation init function that only runs once when a
63 * new screen is entered. 64 * new screen is entered.
64 */ 65 */
65 bool Automation_Init(void) 66 bool Automation_Init(void)
66 { 67 {
68 char msg[64];
69
67 switch (Main_Screen) { 70 switch (Main_Screen) {
68 case MAIN_AUTO_INIT: 71 case MAIN_AUTO_INIT1:
69 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR 72 #ifdef CONFIG_TEMP_SENSORS_SIMULATOR
70 Fake_MLT = recipe.MashStep[0].Temperature - 10; 73 Fake_MLT = recipe.MashStep[0].Temperature - 10;
71 Fake_HLT = recipe.SpargeTemp - 15; 74 Fake_HLT = recipe.SpargeTemp - 15;
72 if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) { 75 if (xSemaphoreTake(xSemaphoreDS18B20, 10) == pdTRUE) {
73 ds18b20_state->mlt_temperature = ((int)(Fake_MLT * 16)) / 16.0; 76 ds18b20_state->mlt_temperature = ((int)(Fake_MLT * 16)) / 16.0;
134 } 137 }
135 runtime.AutoModeStarted = true; 138 runtime.AutoModeStarted = true;
136 runtime.UseHLT = _UseHLT = false; 139 runtime.UseHLT = _UseHLT = false;
137 runtime.TimeBrewing = 0; 140 runtime.TimeBrewing = 0;
138 TimeBrewing = 0; 141 TimeBrewing = 0;
139 runtime.StageResume = MAIN_AUTO_INIT; 142 runtime.StageResume = MAIN_AUTO_INIT1;
140 runtime.StageTimeLeft = 0; 143 runtime.StageTimeLeft = 0;
141 runtime.HopAddition = 0; 144 runtime.HopAddition = 0;
142 runtime.Logfile[0] = '\0'; 145 runtime.Logfile[0] = '\0';
143 runtime.PumpCooling = false; 146 runtime.PumpCooling = false;
144 write_runtime(); 147 write_runtime();
145 power_MLT = power_HLT = counts = 0; 148 power_MLT = power_HLT = counts = 0;
146 log_clean(); 149 log_clean();
147 vTaskDelay(250 / portTICK_PERIOD_MS); // Allow some time 150 vTaskDelay(250 / portTICK_PERIOD_MS); // Allow some time
148 break; 151 break;
149 152
153 case MAIN_AUTO_INIT2:
150 case MAIN_AUTO_DELAYSTART: 154 case MAIN_AUTO_DELAYSTART:
151 break; 155 break;
152 156
153 case MAIN_AUTO_HEATUP: 157 case MAIN_AUTO_HEATUP:
154 if (runtime.UseHLT) { 158 if (runtime.UseHLT) {
194 MaxMash = recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN + 1].Temperature; 198 MaxMash = recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN + 1].Temperature;
195 } else { 199 } else {
196 MaxMash = 75.0; 200 MaxMash = 75.0;
197 } 201 }
198 } 202 }
199 MashState = MASH_NONE; 203 MashState = Sub_Screen = MASH_NONE;
204 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
205 ws_server_send_text_clients("/ws", msg, strlen(msg));
200 pumpTime = 0; 206 pumpTime = 0;
201 pumpRest = false; 207 pumpRest = false;
202 runtime.StageResume = Main_Screen; 208 runtime.StageResume = Main_Screen;
203 updateRuntime = true; 209 updateRuntime = true;
204 TopMessage("Maischen"); 210 TopMessage("Maischen");
225 MLT_info(71, 26, false); 231 MLT_info(71, 26, false);
226 Buttons_Add( 5, 30, 60, 40, "+sp", 0); 232 Buttons_Add( 5, 30, 60, 40, "+sp", 0);
227 Buttons_Add(255, 30, 60, 40, "-sp", 1); 233 Buttons_Add(255, 30, 60, 40, "-sp", 1);
228 Buttons_Show(); 234 Buttons_Show();
229 ESP_LOGI(TAG, "Mash done, going to boil."); 235 ESP_LOGI(TAG, "Mash done, going to boil.");
236 Sub_Screen = 0;
230 break; 237 break;
231 238
232 case MAIN_AUTO_BOILING: 239 case MAIN_AUTO_BOILING:
233 if (Resume) { 240 if (Resume) {
234 TimeLeft = runtime.StageTimeLeft * 60; 241 TimeLeft = runtime.StageTimeLeft * 60;
235 } else { 242 } else {
236 // +1 minute for flameout and 2 seconds for a smooth transition. 243 // +1 minute for flameout and for a smooth transition.
237 runtime.StageTimeLeft = TimeLeft = (recipe.BoilTime * 60) + 60; 244 runtime.StageTimeLeft = TimeLeft = (recipe.BoilTime * 60) + 60;
238 runtime.StageResume = Main_Screen; 245 runtime.StageResume = Main_Screen;
239 runtime.HopAddition = 0; 246 runtime.HopAddition = 0;
240 } 247 }
241 SecsCount = 0; 248 SecsCount = 0;
255 Buttons_Add( 3, 190, 60, 40, "+1m", 2); 262 Buttons_Add( 3, 190, 60, 40, "+1m", 2);
256 Buttons_Add(257, 190, 60, 40, "-1m", 3); 263 Buttons_Add(257, 190, 60, 40, "-1m", 3);
257 Buttons_Show(); 264 Buttons_Show();
258 ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1); 265 ESP_LOGI(TAG, "Boil temperature reached, boil %d minutes", (TimeLeft / 60) -1);
259 log_annotation(ANNOTATION_STAGE, "Koken"); 266 log_annotation(ANNOTATION_STAGE, "Koken");
267 Sub_Screen = 0;
260 break; 268 break;
261 269
262 case MAIN_AUTO_COOLING_H: 270 case MAIN_AUTO_COOLING_H:
263 case MAIN_AUTO_COOLING_M: 271 case MAIN_AUTO_COOLING_M:
264 case MAIN_AUTO_COOLING_C: 272 case MAIN_AUTO_COOLING_C:
371 * Automation loop screens. Mostly non-blocking. 379 * Automation loop screens. Mostly non-blocking.
372 */ 380 */
373 bool Automation_Loop(void) 381 bool Automation_Loop(void)
374 { 382 {
375 static bool beeped = false; 383 static bool beeped = false;
376 char tmp[32]; 384 char tmp[32], msg[256];
377 uint16_t y; 385 uint16_t y;
378 386
379 switch (Main_Screen) { 387 switch (Main_Screen) {
380 388
381 case MAIN_AUTO_INIT: 389 case MAIN_AUTO_INIT1:
382 /* 390 /*
383 * Present selected equipment and recipe. 391 * Present selected equipment and recipe.
384 */ 392 */
393 Sub_Screen = 1;
385 read_recipe(config.RecipeRec); 394 read_recipe(config.RecipeRec);
395 snprintf(msg, 255, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\",\"brew1\":\"%s\",\"brew2\":\"%s\"}",
396 Main_Screen, Sub_Screen, equipment.Name, recipe.Name);
397 ws_server_send_text_clients("/ws", msg, strlen(msg));
386 y = 28; 398 y = 28;
387 TopMessage("Automaat"); 399 TopMessage("Automaat");
388 TFT_setFont(DEFAULT_FONT, NULL); 400 TFT_setFont(DEFAULT_FONT, NULL);
389 ShowText(2,y,"Installatie", equipment.Name); 401 ShowText(2,y,"Installatie", equipment.Name);
390 y += 16; 402 y += 16;
460 case 0: loop = false; 472 case 0: loop = false;
461 Main_Screen = MAIN_AUTO_ABORT; 473 Main_Screen = MAIN_AUTO_ABORT;
462 break; 474 break;
463 475
464 case 1: loop = false; 476 case 1: loop = false;
477 Main_Screen = MAIN_AUTO_INIT2;
465 break; 478 break;
466 479
467 default: break; 480 default: break;
468 } 481 }
469 vTaskDelay(20 / portTICK_PERIOD_MS); 482 vTaskDelay(20 / portTICK_PERIOD_MS);
470 } 483 }
471 if (Main_Screen == MAIN_AUTO_ABORT) 484 Buttons_Clear();
472 break; 485 break;
473 486
487 case MAIN_AUTO_INIT2:
474 _UseHLT = false; 488 _UseHLT = false;
475 _bg = TFT_BLACK; 489 _bg = TFT_BLACK;
476 TFT_fillScreen(_bg); 490 TFT_fillScreen(_bg);
477 TopMessage("Maisch water aanwezig?"); 491 TopMessage("Maisch water aanwezig?");
478 Buttons_Clear(); 492 Buttons_Clear();
596 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 610 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
597 driver_state->mlt_sp = stageTemp; 611 driver_state->mlt_sp = stageTemp;
598 driver_state->mlt_mode = MLT_MODE_PID; 612 driver_state->mlt_mode = MLT_MODE_PID;
599 xSemaphoreGive(xSemaphoreDriver); 613 xSemaphoreGive(xSemaphoreDriver);
600 } 614 }
601 MashState = MASH_WAITTEMP; 615 MashState = Sub_Screen = MASH_WAITTEMP;
616 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
617 ws_server_send_text_clients("/ws", msg, strlen(msg));
602 ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f min: %4.1f max: %4.1f", 618 ESP_LOGI(TAG, "Mash step %d type: %s time: %d temp: %4.1f min: %4.1f max: %4.1f",
603 Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type], 619 Main_Screen - MAIN_AUTO_MASH_IN, mashTypes[recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Type],
604 stageTime, stageTemp, MinMash, MaxMash); 620 stageTime, stageTemp, MinMash, MaxMash);
605 621
606 if (Main_Screen > MAIN_AUTO_MASH_IN) { 622 if (Main_Screen > MAIN_AUTO_MASH_IN) {
630 TFT_setFont(DEJAVU18_FONT, NULL); 646 TFT_setFont(DEJAVU18_FONT, NULL);
631 sprintf(temp_buf, "Infuse %.1f L/%.1f C", recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_amount, 647 sprintf(temp_buf, "Infuse %.1f L/%.1f C", recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_amount,
632 recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_temp); 648 recipe.MashStep[Main_Screen - MAIN_AUTO_MASH_IN].Infusion_temp);
633 TFT_print(temp_buf, CENTER, 135); 649 TFT_print(temp_buf, CENTER, 135);
634 SoundPlay(SOUND_Prompt); 650 SoundPlay(SOUND_Prompt);
635 MashState = MASH_INFUSE; 651 MashState = Sub_Screen = MASH_INFUSE;
652 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"%s\"}", Main_Screen, Sub_Screen, temp_buf);
653 ws_server_send_text_clients("/ws", msg, strlen(msg));
636 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 654 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
637 // No heating during the infusion. 655 // No heating during the infusion.
638 driver_state->mlt_sp = stageTemp; 656 driver_state->mlt_sp = stageTemp;
639 driver_state->mlt_mode = MLT_MODE_OFF; 657 driver_state->mlt_mode = MLT_MODE_OFF;
640 xSemaphoreGive(xSemaphoreDriver); 658 xSemaphoreGive(xSemaphoreDriver);
652 Steady = 0; 670 Steady = 0;
653 } 671 }
654 if ((temp_MLT >= stageTemp) && (Steady > 10)) { 672 if ((temp_MLT >= stageTemp) && (Steady > 10)) {
655 SoundPlay(SOUND_TempReached); 673 SoundPlay(SOUND_TempReached);
656 TempReached = true; 674 TempReached = true;
657 MashState = MASH_REST; 675 MashState = Sub_Screen = MASH_REST;
676 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
677 ws_server_send_text_clients("/ws", msg, strlen(msg));
658 if (Main_Screen == MAIN_AUTO_MASH_IN) { 678 if (Main_Screen == MAIN_AUTO_MASH_IN) {
659 TimerSet(0); 679 TimerSet(0);
660 } else { 680 } else {
661 if (Resume && (runtime.StageTimeLeft < stageTime)) 681 if (Resume && (runtime.StageTimeLeft < stageTime))
662 TimerSet(runtime.StageTimeLeft * 60); 682 TimerSet(runtime.StageTimeLeft * 60);
754 _fg = TFT_WHITE; 774 _fg = TFT_WHITE;
755 _bg = TFT_BLACK; 775 _bg = TFT_BLACK;
756 TFT_setFont(DEJAVU24_FONT, NULL); 776 TFT_setFont(DEJAVU24_FONT, NULL);
757 TFT_print("Mout storten?", CENTER, 135); 777 TFT_print("Mout storten?", CENTER, 135);
758 SoundPlay(SOUND_Prompt); 778 SoundPlay(SOUND_Prompt);
759 MashState = MASH_ADD; 779 MashState = Sub_Screen = MASH_ADD;
780 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout storten?\"}", Main_Screen, Sub_Screen);
781 ws_server_send_text_clients("/ws", msg, strlen(msg));
760 ESP_LOGI(TAG, "Mash add prompt"); 782 ESP_LOGI(TAG, "Mash add prompt");
761 break; 783 break;
762 } 784 }
763 if (((Main_Screen - MAIN_AUTO_MASH_IN) == LastMashStep) && config.AskIodine) { 785 if (((Main_Screen - MAIN_AUTO_MASH_IN) == LastMashStep) && config.AskIodine) {
764 /* 786 /*
776 TFT_setFont(DEJAVU24_FONT, NULL); 798 TFT_setFont(DEJAVU24_FONT, NULL);
777 TFT_print("Jodium test?", CENTER, 127); 799 TFT_print("Jodium test?", CENTER, 127);
778 SoundPlay(SOUND_Prompt); 800 SoundPlay(SOUND_Prompt);
779 beeped = false; 801 beeped = false;
780 TimerSet(config.IodineTime * 60); 802 TimerSet(config.IodineTime * 60);
781 MashState = MASH_IODINE; 803 MashState = Sub_Screen = MASH_IODINE;
804 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Jodium test?\"}", Main_Screen, Sub_Screen);
805 ws_server_send_text_clients("/ws", msg, strlen(msg));
782 ESP_LOGI(TAG, "Mash iodine test prompt"); 806 ESP_LOGI(TAG, "Mash iodine test prompt");
783 break; 807 break;
784 } 808 }
785 if ((Main_Screen == MAIN_AUTO_MASH_OUT) && config.AskRemove) { 809 if ((Main_Screen == MAIN_AUTO_MASH_OUT) && config.AskRemove) {
786 /* 810 /*
796 _fg = TFT_WHITE; 820 _fg = TFT_WHITE;
797 _bg = TFT_BLACK; 821 _bg = TFT_BLACK;
798 TFT_setFont(DEJAVU18_FONT, NULL); 822 TFT_setFont(DEJAVU18_FONT, NULL);
799 TFT_print("Mout verwijderen?", CENTER, 135); 823 TFT_print("Mout verwijderen?", CENTER, 135);
800 SoundPlay(SOUND_Prompt); 824 SoundPlay(SOUND_Prompt);
801 MashState = MASH_REMOVE; 825 MashState = Sub_Screen = MASH_REMOVE;
826 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"Mout verwijderen?\"}", Main_Screen, Sub_Screen);
827 ws_server_send_text_clients("/ws", msg, strlen(msg));
802 ESP_LOGI(TAG, "Mash remove prompt"); 828 ESP_LOGI(TAG, "Mash remove prompt");
803 break; 829 break;
804 } 830 }
805 if (Main_Screen != MAIN_AUTO_ABORT) 831 if (Main_Screen != MAIN_AUTO_ABORT)
806 Main_Screen++; 832 Main_Screen++;
849 } 875 }
850 } else if (MashState == MASH_INFUSE) { 876 } else if (MashState == MASH_INFUSE) {
851 switch (Buttons_Scan()) { 877 switch (Buttons_Scan()) {
852 case 0: Main_Screen = MAIN_AUTO_ABORT; 878 case 0: Main_Screen = MAIN_AUTO_ABORT;
853 break; 879 break;
854 case 1: MashState = MASH_WAITTEMP; 880 case 1: MashState = Sub_Screen = MASH_WAITTEMP;
881 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
882 ws_server_send_text_clients("/ws", msg, strlen(msg));
855 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 883 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
856 // Start PID again. 884 // Start PID again.
857 driver_state->mlt_sp = stageTemp; 885 driver_state->mlt_sp = stageTemp;
858 driver_state->mlt_mode = MLT_MODE_PID; 886 driver_state->mlt_mode = MLT_MODE_PID;
859 xSemaphoreGive(xSemaphoreDriver); 887 xSemaphoreGive(xSemaphoreDriver);
1016 /* 1044 /*
1017 * Starting cooling, setup the screen. 1045 * Starting cooling, setup the screen.
1018 */ 1046 */
1019 Buttons_Clear(); 1047 Buttons_Clear();
1020 TFT_fillScreen(_bg); 1048 TFT_fillScreen(_bg);
1049 Sub_Screen = 1;
1021 if (Main_Screen == MAIN_AUTO_COOLING_H) { 1050 if (Main_Screen == MAIN_AUTO_COOLING_H) {
1022 stageTemp = 77.0; 1051 stageTemp = 77.0;
1023 } else if (Main_Screen == MAIN_AUTO_COOLING_M) { 1052 } else if (Main_Screen == MAIN_AUTO_COOLING_M) {
1024 stageTemp = 66.0; 1053 stageTemp = 66.0;
1025 } else { 1054 } else {
1026 stageTemp = recipe.CoolTemp; 1055 stageTemp = recipe.CoolTemp;
1027 } 1056 }
1057 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
1058 ws_server_send_text_clients("/ws", msg, strlen(msg));
1028 CoolBeep = false; 1059 CoolBeep = false;
1029 ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp); 1060 ESP_LOGI(TAG, "Start cooling from %6.2f to %4.1f", ds18b20_state->mlt_temperature, stageTemp);
1030 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 1061 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
1031 driver_state->mlt_mode = MLT_MODE_OFF; 1062 driver_state->mlt_mode = MLT_MODE_OFF;
1032 driver_state->mlt_sp = stageTemp; 1063 driver_state->mlt_sp = stageTemp;
1144 CoolBeep = true; 1175 CoolBeep = true;
1145 } 1176 }
1146 if (driver_state->mlt_pv <= driver_state->mlt_sp) { 1177 if (driver_state->mlt_pv <= driver_state->mlt_sp) {
1147 SoundPlay(SOUND_TempReached); 1178 SoundPlay(SOUND_TempReached);
1148 Main_Screen++; 1179 Main_Screen++;
1180 Sub_Screen = 0;
1149 } 1181 }
1150 xSemaphoreGive(xSemaphoreDriver); 1182 xSemaphoreGive(xSemaphoreDriver);
1151 } 1183 }
1152 } 1184 }
1153 break; 1185 break;
1177 /* 1209 /*
1178 * Prepare the screen for the actual whirpool. 1210 * Prepare the screen for the actual whirpool.
1179 */ 1211 */
1180 Buttons_Clear(); 1212 Buttons_Clear();
1181 TFT_fillScreen(_bg); 1213 TFT_fillScreen(_bg);
1214 Sub_Screen = 1;
1215 snprintf(msg, 63, "{\"main\":\"%d\",\"sub\":\"%d\",\"timer\":\"\"}", Main_Screen, Sub_Screen);
1216 ws_server_send_text_clients("/ws", msg, strlen(msg));
1182 if (Main_Screen == MAIN_AUTO_WHIRLPOOL9) { 1217 if (Main_Screen == MAIN_AUTO_WHIRLPOOL9) {
1183 TimeWhirlPool = recipe.Whirlpool9; 1218 TimeWhirlPool = recipe.Whirlpool9;
1184 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) { 1219 if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
1185 driver_state->mlt_sp = 93.0; 1220 driver_state->mlt_sp = 93.0;
1186 driver_state->mlt_mode = MLT_MODE_PID; 1221 driver_state->mlt_mode = MLT_MODE_PID;
1225 updateRuntime = true; 1260 updateRuntime = true;
1226 MLT_info(71, 26, false); 1261 MLT_info(71, 26, false);
1227 ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp); 1262 ESP_LOGI(TAG, "Whirlpool %d minutes, sp %4.1f", TimeWhirlPool, driver_state->mlt_sp);
1228 Buttons_Add(255, 120, 60, 40, "+1m", 0); 1263 Buttons_Add(255, 120, 60, 40, "+1m", 0);
1229 Buttons_Add( 5, 120, 60, 40, "-1m", 1); 1264 Buttons_Add( 5, 120, 60, 40, "-1m", 1);
1230 Buttons_Add(130, 200, 60, 40, "Pomp", 2); 1265 Buttons_Add(255, 200, 60, 40, "Pomp", 2);
1231 Buttons_Show(); 1266 Buttons_Show();
1232 } 1267 }
1233 } else { 1268 } else {
1234 /* 1269 /*
1235 * Not running in prompt mode, do the whirlpool. 1270 * Not running in prompt mode, do the whirlpool.

mercurial