main/manual.c

Mon, 22 Oct 2018 21:43:45 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 22 Oct 2018 21:43:45 +0200
changeset 6
e84200edc852
parent 0
b74b0e4902c3
child 54
7b134c27fadb
permissions
-rw-r--r--

Updated esp-ide. Removed VNC server corre encoding because no clients would use it. Enabled WiFi error logmessages. Write runtime record is now debug logging. Removed recipe.Record number, not usefull and was wrong too. Removed console print of json log data.

/**
 * @file manual.c
 * @brief Manual control functions.
 */

#include "config.h"

bool 				_ManualHLT = false;		///< Use Hot Liquer Tank
bool				_ManualMLT = false;		///< Use Mash/Boil kettle
bool				loop;

extern sButton                  Buttons[MAXBUTTONS];
extern int                      Main_Screen;
extern DS18B20_State            *ds18b20_state;
extern DRIVER_State             *driver_state;
extern SemaphoreHandle_t        xSemaphoreDS18B20;
extern SemaphoreHandle_t        xSemaphoreDriver;

#ifdef CONFIG_TEMP_SENSORS_SIMULATOR
extern float                    Fake_MLT;
extern float                    Fake_HLT;
#endif

static const char               *TAG = "manual";


/*
 * Manual init function that only runs once a new screen
 * is entered.
 */
bool Manual_Init(void)
{
    switch (Main_Screen) {
	case MAIN_MANUAL_INIT:
		ESP_LOGI(TAG, "Start manual mode");
		if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
		    driver_state->enable = true;
		    xSemaphoreGive(xSemaphoreDriver);
		}
		break;

	case MAIN_MANUAL_MAIN:
		TopMessage("Handbediening");
		Buttons_Add(  5, 200, 60, 40, "Stop", 0);
		Buttons[0].dark = true;
		uint8_t i = 1;
		if (_ManualMLT) {
		    MLT_info(71, 26, false);
		    Buttons_Add(  5,  26, 60, 40, "+sp"  , i++);
		    Buttons_Add(255,  26, 60, 40, "-sp"  , i++);
		    Buttons_Add(  5,  76, 60, 40, "Pomp" , i++);
		    Buttons_Add(255,  76, 60, 40, "Aan"  , i++);
		}
		if (_ManualHLT) {
		    HLT_info(71,150, false, false);
		    Buttons_Add(  5, 150, 60, 40, "+sp"  , i++);
		    Buttons_Add(255, 150, 60, 40, "-sp"  , i++);
		    Buttons_Add(255, 200, 60, 40, "Aan"  , i);
		}
		Buttons_Show();
		break;

	default:
		break;
    }

    return false;
}



/*
 * Manual loop screens, non-blocking.
 */
bool Manual_Loop(void)
{
    switch (Main_Screen) {
	case MAIN_MANUAL_INIT:
		_ManualHLT = _ManualMLT = false;
		Buttons_Add( 40, 100, 80, 40, "Ja", 0);
		Buttons_Add(200, 100, 80, 40, "Nee",  1);
		Buttons_Show();

		if ((equipment.SSR2 == SSR2_HLT_SHARE) || (equipment.SSR2 == SSR2_HLT_IND)) {
		    TopMessage("Spoelwater ketel?");
		    SoundPlay(SOUND_Prompt);
		    loop = true;
		    while (loop) {
		    	switch (Buttons_Scan()) {
			    case 0:     loop = false;
					_ManualHLT = true;
					break;

			    case 1:     loop = false;
					_ManualHLT = false;
					break;

			    default:    break;
		    	}
		        vTaskDelay(20 / portTICK_PERIOD_MS);
		    }
		}

		TopMessage("Maisch/Kook ketel?");
		SoundPlay(SOUND_Prompt);
		loop = true;
		while (loop) {
		    switch (Buttons_Scan()) {
			case 0:         loop = false;
					_ManualMLT = true;
					break;

			case 1:         loop = false;
					_ManualMLT = false;
					break;

			default:        break;
		    }
		    vTaskDelay(20 / portTICK_PERIOD_MS);
		}
		Buttons_Clear();

		if (! _ManualHLT && ! _ManualMLT) {
		    ESP_LOGI(TAG, "End manual mode");
		    Main_Screen = MAIN_MODE_FREE;
		    break;
		}
		if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
		    /* Set them all, even if not in use now. */
		    driver_state->hlt_sp = runtime.ManualHLT;
		    driver_state->mlt_sp = runtime.ManualMLT;
		    xSemaphoreGive(xSemaphoreDriver);
		}
		if (_ManualHLT) {
		    if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
			driver_state->hlt_mode = HLT_MODE_OFF;
			xSemaphoreGive(xSemaphoreDriver);
		    }
		}
		if (_ManualMLT) {
		    if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
			driver_state->mlt_mode = MLT_MODE_OFF;
			xSemaphoreGive(xSemaphoreDriver);
		    }
		}
		Main_Screen = MAIN_MANUAL_MAIN;
		break;

	case MAIN_MANUAL_MAIN:
		if (_ManualMLT) {
		    MLT_info(71, 26, true);
		}
		if (_ManualHLT) {
		    HLT_info(71, 150, true, false);
		}
		switch (Buttons_Scan()) {
		    case 0:	Main_Screen = MAIN_MODE_FREE;
				ESP_LOGI(TAG, "End manual mode");
				if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    runtime.ManualHLT = driver_state->hlt_sp;
				    runtime.ManualMLT = driver_state->mlt_sp;
				    driver_state->enable = false;
				    driver_state->mlt_mode = MLT_MODE_NONE;
				    driver_state->mlt_sp = 0.0;
				    driver_state->hlt_mode = HLT_MODE_NONE;
				    driver_state->hlt_sp = 0.0;
				    driver_state->pump_run = 0;
				    xSemaphoreGive(xSemaphoreDriver);
				}
				write_runtime();
				break;

		    case 1:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    if (_ManualMLT) {
				    	driver_state->mlt_sp += 0.25;
				    } else {
					driver_state->hlt_sp += 0.25;
				    }
				    xSemaphoreGive(xSemaphoreDriver);
				}
				break;

		    case 2:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    if (_ManualMLT) {
					driver_state->mlt_sp -= 0.25;
				    } else {
					driver_state->hlt_sp -= 0.25;
				    }
				    xSemaphoreGive(xSemaphoreDriver);
				}
				break;

		    case 3:	if (_ManualMLT) {
				    if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
					if (driver_state->pump_run)
					    driver_state->pump_run = 0;
					else
					    driver_state->pump_run = 1;
					xSemaphoreGive(xSemaphoreDriver);
				    }
				} else {
				    if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
					if (driver_state->hlt_mode == HLT_MODE_BANG) {
					    driver_state->hlt_mode = HLT_MODE_OFF;
					    Buttons_Add(255, 200, 60, 40, "Aan"  , 3);
					    ESP_LOGI(TAG, "HLT turned off");
					} else {
					    driver_state->hlt_mode = HLT_MODE_BANG;
					    Buttons_Add(255, 200, 60, 40, "Uit"  , 3);
					    ESP_LOGI(TAG, "HLT turned on");
					}
					xSemaphoreGive(xSemaphoreDriver);
				    }
				    Buttons_Show();
				}
				break;

		    case 4:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    if (driver_state->mlt_mode == MLT_MODE_PID) {
					driver_state->mlt_mode = MLT_MODE_OFF;
					Buttons_Add(255,  76, 60, 40, "Aan"  , 4);
					ESP_LOGI(TAG, "MLT turned off");
				    } else {
					driver_state->mlt_mode = MLT_MODE_PID;
					Buttons_Add(255,  76, 60, 40, "Uit"  , 4);
					ESP_LOGI(TAG, "MLT turned on");
				    }
				    xSemaphoreGive(xSemaphoreDriver);
				}
				Buttons_Show();
				break;

		    case 5:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    driver_state->hlt_sp += 0.25;
				    xSemaphoreGive(xSemaphoreDriver);
				}
				break;

		    case 6:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    driver_state->hlt_sp -= 0.25;
				    xSemaphoreGive(xSemaphoreDriver);
				}
				break;

		    case 7:	if (xSemaphoreTake(xSemaphoreDriver, 10) == pdTRUE) {
				    if (driver_state->hlt_mode == HLT_MODE_BANG) {
					driver_state->hlt_mode = HLT_MODE_OFF;
					Buttons_Add(255, 200, 60, 40, "Aan"  , 7);
					ESP_LOGI(TAG, "HLT turned off");
				    } else {
					driver_state->hlt_mode = HLT_MODE_BANG;
					Buttons_Add(255, 200, 60, 40, "Uit"  , 7);
					ESP_LOGI(TAG, "HLT turned on");
				    }
				    xSemaphoreGive(xSemaphoreDriver);
				}
				Buttons_Show();
				break;

		    default:	break;
		}
		break;

	default:
		break;
    }

    return false;
}

mercurial