main/brewboard.c

changeset 0
b74b0e4902c3
child 1
ad2c8b13eb88
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/brewboard.c	Sat Oct 20 13:23:15 2018 +0200
@@ -0,0 +1,180 @@
+/* BrewVoard
+
+*/
+
+#include "config.h"
+
+
+static const char *TAG = "brewboard";
+
+static TaskHandle_t		xTaskTFT     = NULL;
+static TaskHandle_t		xTaskDS18B20 = NULL;
+static TaskHandle_t		xTaskDriver  = NULL;
+static TaskHandle_t		xTaskSound   = NULL;
+static TaskHandle_t		xTaskSDcard  = NULL;
+static TaskHandle_t		xTaskWifi    = NULL;
+
+extern SemaphoreHandle_t	xSemaphoreDS18B20;
+extern SemaphoreHandle_t	xSemaphoreDriver;
+extern SemaphoreHandle_t	xSemaphoreWiFi;
+extern WIFI_State		*wifi_state;
+
+
+int 				Main_Screen = MAIN_MODE_UNKNOWN;
+int				Old_Screen = MAIN_MODE_UNKNOWN;
+bool				System_TimeOk = false;
+
+
+
+void app_main()
+{
+    int		tempy;
+    char	temp[64];
+
+    ESP_LOGI(TAG, "Starting");
+    init_tft_display();
+
+    TFT_setFont(DEJAVU24_FONT, NULL);
+    _fg = TFT_YELLOW;
+    tempy = TFT_getfontheight() + 4;
+    sprintf(temp, "BrewBoard %s", VERSION);
+    TFT_print(temp, CENTER, 4);
+
+    TFT_setFont(DEJAVU18_FONT, NULL);
+    _fg = TFT_CYAN;
+    TFT_print("Mount /spiffs ", 0, LASTY+tempy);
+    ESP_LOGI(TAG, "Initializing SPIFFS");
+        
+    esp_vfs_spiffs_conf_t conf = {
+	.base_path = "/spiffs",
+	.partition_label = NULL,
+	.max_files = 5,
+	.format_if_mount_failed = true
+    };
+	    
+    // Use settings defined above to initialize and mount SPIFFS filesystem.
+    // Note: esp_vfs_spiffs_register is an all-in-one convenience function.
+    esp_err_t ret = esp_vfs_spiffs_register(&conf);
+
+    if (ret != ESP_OK) {
+	if (ret == ESP_FAIL) {
+	    ESP_LOGE(TAG, "Failed to mount or format filesystem");
+	} else if (ret == ESP_ERR_NOT_FOUND) {
+	    ESP_LOGE(TAG, "Failed to find SPIFFS partition");
+	} else {
+	    ESP_LOGE(TAG, "Failed to initialize SPIFFS (%d)", ret);
+	}
+	_fg = TFT_RED;
+	TFT_print("error\r\n", LASTX, LASTY);
+	return; // Stop application.
+    }
+
+    size_t total = 0, used = 0;
+    ret = esp_spiffs_info(NULL, &total, &used);
+    if (ret != ESP_OK) {
+	ESP_LOGE(TAG, "Failed to get SPIFFS partition information");
+	_fg = TFT_RED;
+	TFT_print("error\r\n", LASTX, LASTY);
+	return; // Stop application.
+    } else {
+	ESP_LOGI(TAG, "Partition size: %d, used: %d - %d%%", total, used, (used * 100) / total);
+    }
+    TFT_print("Ok\r\n", LASTX, LASTY);
+
+    // Just to debug, list the /spiffs filesystem.
+#if 1
+    DIR *dir = opendir("/spiffs");
+    struct dirent* de = readdir(dir);
+    while (de) {
+	if (de->d_type == DT_REG) {
+	    printf("F ");
+	}
+	if (de->d_type == DT_DIR) {
+	    printf("D ");
+	}
+	printf("%s\n", de->d_name);
+	de = readdir(dir);
+    }
+    closedir(dir);
+#endif
+
+    /*
+     * Read or create configuration
+     */
+    TFT_print("Ophalen configuratie ", LASTX, LASTY);
+    read_config();
+    read_equipment(config.EquipmentRec);
+    read_runtime();
+//    unlink("/spiffs/etc/recipe.conf");
+    read_recipe(config.RecipeRec);
+    TFT_print("Ok\r\n", LASTX, LASTY);
+
+    // Set the Touchscreen calibration/
+    TS_set_calibration(config.ts_xleft, config.ts_xright, config.ts_ytop, config.ts_ybottom);
+
+    /*
+     * TZ names don't work, so set the TZ the hard way.
+     * This is the setting for Europe/Amsterdam.
+     */
+    setenv("TZ", "CET-01CEST-02,M3.4.0,M10.4.0", 1);
+    tzset();
+
+    xSemaphoreDS18B20 = xSemaphoreCreateMutex();
+    xSemaphoreDriver  = xSemaphoreCreateMutex();
+
+    TFT_print("Starten taken ", LASTX, LASTY);
+    xTaskCreate(&task_tft,     "task_tft",      6144, NULL, 4, &xTaskTFT);
+    vTaskDelay(400 / portTICK_PERIOD_MS);
+    xTaskCreate(&task_ds18b20, "task_ds18b20",  2560, NULL, 8, &xTaskDS18B20);
+    xTaskCreate(&task_driver,  "task_driver",   2560, NULL, 8, &xTaskDriver);
+    xTaskCreate(&task_sound,   "task_sound",    3072, NULL,15, &xTaskSound);
+    xTaskCreate(&task_sdcard,  "task_sdcard",   8192, NULL,10, &xTaskSDcard);
+    /* disable the default wifi logging */
+    esp_log_level_set("wifi", ESP_LOG_NONE);
+    xTaskCreate(&task_wifi,    "task_wifi",     4096, NULL, 3, &xTaskWifi);
+    // Task for MQTT
+    TFT_print(" Ok\r\nConnecting ", LASTX, LASTY);
+
+    int wait = 20;
+    while (wait) {
+	vTaskDelay(500 / portTICK_PERIOD_MS);
+	TFT_print(".", LASTX, LASTY);
+    	if (xSemaphoreTake(xSemaphoreWiFi, 25) == pdTRUE) {
+	    if (wifi_state->STA_connected == true)
+		wait = 0;
+	    else
+		wait--;
+	    xSemaphoreGive(xSemaphoreWiFi);
+    	}
+    }
+
+    Main_Screen = MAIN_MODE_FREE;
+    TFT_print(" Ok\r\n", LASTX, LASTY);
+    SoundPlay(SOUND_StartUp);
+
+    /* Do not write to the TFT during VNC startup to avoid race conditions */
+    VncStartup();
+    start_http_websocket();
+    vTaskDelay(1000 / portTICK_PERIOD_MS);
+
+    /*
+     * A small useless delay
+     */
+    vTaskDelay(1000 / portTICK_PERIOD_MS);
+
+//    static char cBuffer[ 1024 ];
+
+    /*
+     * Main application loop.
+     */
+    while (1) {
+	vTaskDelay(20000 / portTICK_PERIOD_MS);
+
+//	vTaskList( cBuffer );
+//	printf("Name            State   Prio    Stack   Num\n");
+//	printf("--------------- ------- ------- ------- -------\n");
+//	printf("%s\n", cBuffer);
+    }
+    // Not reached.
+}
+

mercurial