main/config.h

changeset 0
b74b0e4902c3
child 1
ad2c8b13eb88
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main/config.h	Sat Oct 20 13:23:15 2018 +0200
@@ -0,0 +1,385 @@
+/**
+ * @file config.h
+ * @brief The BrewBoard configuration data. These are stored in the 
+ *        spiffs filesystem in a flash partition.
+ */
+
+#ifndef	_CONFIG_H
+#define	_CONFIG_H
+
+// Global includes for the project
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <time.h>
+#include <errno.h>
+#include <sys/unistd.h>
+#include <sys/fcntl.h>
+#include <sys/time.h>
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/semphr.h"
+#include "freertos/event_groups.h"
+#include "freertos/queue.h"
+#include "driver/i2c.h"
+#include "esp_log.h"
+#include "esp_spiffs.h"
+#include "esp_event_loop.h"
+#include "esp_wifi.h"
+#include "esp_wifi_types.h"
+#include "esp_system.h"
+
+#include "esp_ota_ops.h"
+#include "esp_http_client.h"
+#include "esp_https_ota.h"
+
+#include "esp_vfs.h"
+#include "esp_vfs_fat.h"
+#include "nvs.h"
+#include "nvs_flash.h"
+#include "rom/crc.h"
+#include "mdns.h"
+#include "lwip/sockets.h"
+#include "lwip/api.h"
+#include "lwip/err.h"
+#include "lwip/netdb.h"
+#include "lwip/dns.h"
+#include "lwip/opt.h"
+#include "lwip/memp.h"
+#include "lwip/ip.h"
+#include "lwip/raw.h"
+#include "lwip/udp.h"
+#include "sdkconfig.h"
+#include "lwip/apps/sntp.h"
+#include "expat.h"
+
+#include "tftspi.h"
+#include "tft.h"
+#include "PID_v1.h"
+#include "vnc-server.h"
+#include "websocket_server.h"
+
+#include "buttons.h"
+#include "calibration.h"
+#include "automation.h"
+#include "manual.h"
+#include "setup.h"
+#include "recipes.h"
+#include "files.h"
+#include "updates.h"
+
+#include "task_tft.h"
+#include "task_ds18b20.h"
+#include "task_sdcard.h"
+#include "task_driver.h"
+#include "task_wifi.h"
+#include "task_sound.h"
+#include "task_http.h"
+
+
+#define	VERSION		"0.2.2"
+
+
+/**
+ * @brief Main mode different screens
+ */
+typedef enum
+{
+    MAIN_MODE_UNKNOWN = -1,		///< During system startup
+    MAIN_MODE_FREE = 0,			///< Main menu, do nothing
+    MAIN_MODE_CALIBRATION,		///< TFT calibration
+    MAIN_INFO,				///< Info/about screen
+    MAIN_TOOLS,				///< Main tools screen
+    MAIN_TOOLS_SETUP,			///< Main setup screen
+    MAIN_TOOLS_SETUP_CONFIG,		///< Main setup configuration
+    MAIN_TOOLS_SETUP_CO_EDIT,		///< Main setup confguration editor
+    MAIN_TOOLS_SETUP_EQUIPMENT,		///< Main setup equipment
+    MAIN_TOOLS_SETUP_EQ_EDIT,		///< Main setup edit equipment
+    MAIN_TOOLS_SETUP_WIFI,		///< Main setup WiFi
+    MAIN_TOOLS_SETUP_WIFI_CUR,		///< Main setup WiFi current connection.
+    MAIN_TOOLS_SETUP_WIFI_CON,		///< Main setup WiFi connect.
+    MAIN_TOOLS_SETUP_WIFI_NEW,		///< Main setup WiFi new connection.
+    MAIN_TOOLS_SETUP_CALIBRATION,	///< Main setup TFT calibration
+    MAIN_TOOLS_RECIPE,			///< Main recipes screen.
+    MAIN_TOOLS_RECIPE_EDIT,		///< Main recipes editor.
+    MAIN_TOOLS_FILES,			///< Main files.
+    MAIN_TOOLS_UPDATES,			///< Main Updates.
+    MAIN_AUTO_INIT,			///< Automatic start
+    MAIN_AUTO_DELAYSTART,		///< Delayed start
+    MAIN_AUTO_HEATUP,			///< Heatup the system
+    MAIN_AUTO_MASH_IN = 100,		///< Mash-in
+    MAIN_AUTO_MASH_1,			///< Mash step 1
+    MAIN_AUTO_MASH_2,			///< Mash step 2
+    MAIN_AUTO_MASH_3,			///< Mash step 3
+    MAIN_AUTO_MASH_4,			///< Mash step 4
+    MAIN_AUTO_MASH_5,			///< Mash step 5
+    MAIN_AUTO_MASH_6,			///< Mash step 6
+    MAIN_AUTO_MASH_OUT,			///< Mash-out
+    MAIN_AUTO_TOBOIL,			///< Going to boil
+    MAIN_AUTO_BOILING,			///< Boiling
+    MAIN_AUTO_WHIRLPOOL9,		///< Whirlpool
+    MAIN_AUTO_COOLING_H,		///< Cooling hot type
+    MAIN_AUTO_WHIRLPOOL7,		///< Whirlpool
+    MAIN_AUTO_COOLING_M,		///< Cooling medium type
+    MAIN_AUTO_WHIRLPOOL6,		///< Whirlpool
+    MAIN_AUTO_COOLING_C,		///< Cooling cold type
+    MAIN_AUTO_WHIRLPOOL2,		///< Whirlpool
+    MAIN_AUTO_DONE,			///< Finished
+    MAIN_AUTO_ABORT,			///< Aborted
+    MAIN_MANUAL_INIT = 200,		///< Manual control init
+    MAIN_MANUAL_MAIN,			///< Manual control main menu
+} MAIN_MODE;
+
+typedef enum {
+    MASH_NONE = 0,			///< Initial Mash state
+    MASH_WAITTEMP,			///< Wait to reach temperature.
+    MASH_REST,				///< Mash rest
+    MASH_ADD,				///< Add mash wait
+    MASH_IODINE,			///< Wait iodine test
+    MASH_REMOVE,			///< Wait mash remove
+} MASH_TYPE;
+
+typedef enum {
+    SSR2_OFF = 0,			///< SSR2 not used.
+    SSR2_HLT_SHARE,			///< SSR2 for HLT shared with MLT
+    SSR2_HLT_IND,			///< SSR2 for HLT independend.
+    SSR2_ON_IDLE,			///< SSR2 on when NLT is idle.
+} SSR2_TYPE;
+
+
+
+/**
+ * @brief Global configuration. File /spiffs/config.conf
+ */
+struct strConfig {
+    uint8_t		Version;			///< Record version number for updates.
+    uint8_t		Unit;				///< Celsius or Farenheit (not used yet).
+    float		BoilTemperature;		///< The temperature when water boils.
+    bool		AskAdd;				///< Ask to add the mash.
+    bool		AskRemove;			///< Ask to remove the mash.
+    bool		AskIodine;			///< Ask to confirm the iodine test.
+    uint8_t		IodineTime;			///< Continue after this time if not confirmed.
+    int			EquipmentRec;			///< Equipment record number.
+    char		obsolete1[32];			///< Obsolete.
+    char		hostname[32];			///< Our hostname.
+    char		ap_ssid[32];			///< AP SSID.
+    char		ap_pwd[64];			///< AP password.
+    uint8_t		ap_channel;			///< AP channel.
+    uint8_t		ap_ssid_hidden;			///< AP SSID hidden.
+    wifi_bandwidth_t	ap_bandwidth;			///< AP channel bandwidth.
+    uint16_t		ts_xleft;			///< TS calibration X left.
+    uint16_t		ts_xright;			///< TS calibration X right.
+    uint16_t		ts_ytop;			///< TS calibration Y top.
+    uint16_t		ts_ybottom;			///< TS calibration Y bottom.
+    int			RecipeRec;			///< Current recipe record.
+    char		uuid[37];			///< Sort of uuid code.
+    char		lastSSID[32];			///< Last connected station.
+} config;
+
+/**
+ * @brief Write configuration to disk.
+ */
+void write_config(void);
+
+/** @brief Read configuration file. If it doesn't exist create and
+ *         write a new configuration file with sane defaults.
+ */
+void read_config(void);
+
+
+
+/**
+ * @brief Equipment configuration. File /spiffs/equipments.conf
+ */
+struct strEquipment {
+    int		Version;			///< Record version number for updates.
+    int		Record;				///< Record number.
+    char	Name[32];			///< Equipment name.
+    int		BoilPower;			///< The power percentage needed to keep the wort boiling.
+    int		MashPower;			///< The power percentage needed to heat during mash.
+    int		PumpCycle;			///< Minutes to run the pump during mash rest.
+    int		PumpRest;			///< Minutes to pause the pump during mash rests.
+    bool	PumpPreMash;			///< Pump on before mash-in.
+    bool	PumpOnMash;			///< Pump on during mashing.
+    bool	PumpMashOut;			///< Pump on during mash remove.
+    bool	PumpOnBoil;			///< Pump on during the boil.
+    int		PumpMaxTemp;			///< Turn pump off above this temperature.
+    bool	PIDPipe;			///< Run PID during mash removal.
+    int		SSR2;				///< Use second SSR (HLT) or not.
+    float	TempHLT;			///< The temperature of the sparge water.
+    double	PID_kP;				///< PID P setting.
+    double	PID_kI;				///< PID I setting.
+    double	PID_kD;				///< PID D setting.
+    bool	PID_POn;			///< PID compute on Measurement or Errors.
+    int		SampleTime;			///< PID sample time in seconds.
+} equipment;
+
+/**
+ * @brief Append equipments record to disk.
+ */
+void append_equipment(void);
+
+/** 
+ * @brief Read equipments file. If it doesn't exist create and
+ *        write a new equipment file with sane defaults.
+ *        This is then the first and default brew equipment.
+ * @param RecNo Read the record with Record is RecNo. Start at 1.
+ */
+void read_equipment(int RecNo);
+
+/**
+ * @brief Write rquipment record. It should exist.
+ * @param RecNo The equipment record in memory to write at record. Records start at 1.
+ */
+void write_equipment(int RecNo);
+
+/**
+ * @brief Delete equipment record, renumber remaining records.
+ * @param RecNo The record to remove.
+ */
+void delete_equipment(int RecNo);
+
+
+
+/**
+ * @brief Records with WiFi stations we have succesfully connected.
+ */
+struct strStations {
+    char	SSID[32];			///< Station SSID
+    char	Password[64];			///< Station password
+    bool	hide;				///< Hide from AP scan.
+} wifiStation;
+
+/**
+ * @brief Add a new station record.
+ * @param SSID The SSID
+ * @param Password The password for this SSID
+ * @return The record number, or -1 if error.
+ */
+int add_station(uint8_t *SSID, uint8_t *Password);
+
+/**
+ * @brief Read station info record.
+ * @param SSID Search for the SSID and load the record if found.
+ * @return Return -1 if not found, else the record number and the wifiStation record is filled.
+ */
+int read_station(uint8_t *SSID);
+
+/**
+ * @brief Remove station record.
+ * @param SSID The SSID to remove.
+ */
+void remove_station(uint8_t *SSID);
+
+int blacklist_station(uint8_t *SSID);
+
+
+
+/**
+ * @brief Runtime configuration. File /spiffs/runtime.conf
+ */
+struct strRuntime {
+    uint8_t		Version;			///< Record version number for updates.
+    bool		AutoModeStarted;		///< Running automode.
+    int			StageResume;			///< Current Resume Stage.
+    int			StageTimeLeft;			///< Current Stage Time left.
+    uint8_t		HopAddition;			///< Current Hop Addition.
+    float		ManualMLT;			///< Last used MLT temperature.
+    float		ManualHLT;			///< Last used HLT temperature.
+    time_t		BrewStart;			///< Brew start time.
+    char		Logfile[64];			///< Brew logfile.
+    bool		UseHLT;				///< Use HLT during brew.
+    bool		PumpCooling;			///< Pump during cooling.
+    uint32_t		TimeBrewing;			///< Time we are brewing.
+} runtime;
+
+
+/**
+ * @brief Write runtime information to disk.
+ */
+void write_runtime(void);
+
+/** 
+ * @brief Read runtime information file. If it doesn't exist create and
+ *        write a new runtime file with sane defaults.
+ */
+void read_runtime(void);
+
+
+typedef enum {
+    ADDITION_HOP = 0,
+    ADDITION_FERMENTABLE = 1,
+    ADDITION_SPICE = 2,
+    ADDITION_FINING = 3,
+    ADDITION_WATER_AGENT = 4,
+    ADDITION_HERB = 5,
+    ADDITION_FLAVOR = 6,
+    ADDITION_OTHER = 7,
+} ADDITION_TYPE;
+
+/**
+ * @brief Mash steps
+ */
+typedef struct strMashStep {
+    char		Name[32];			///< Step name.
+    float		Temperature;			///< Step temperature.
+    uint16_t		Resttime;			///< Step resttime.
+    uint16_t		Steptime;			///< Step time to reach temp.
+} mashstep_t;
+
+/**
+ * @brief Hop and other additions
+ */
+typedef struct strAddition {
+    uint16_t		Time;				///< Time for addition.
+    uint8_t		Type;				///< Addition type, Hop, Syrop ...
+    char		Name[64];			///< Addition name.
+} addition_t;
+
+/**
+ * @brief Current recipe
+ */
+struct strRecipe {
+    uint8_t		Version;			///< Record version number.
+    int			Record;
+    char		Name[128];			///< Recipe name.
+    char		Code[32];			///< Recipe code.
+    mashstep_t		MashStep[8];			///< Mash steps.
+    uint16_t		BoilTime;			///< Boil time.
+    uint8_t		Additions;			///< Number of additions.
+    addition_t		Addition[10];			///< Additions
+    float		CoolTemp;			///< Cool temperature.
+    uint16_t		Whirlpool9;			///< Zero or the Hot Whirlpool time 88..100 °
+    uint16_t		Whirlpool7;			///< Zero or the Sub Isomerization Whirlpool time 71..77 °
+    uint16_t		Whirlpool6;			///< Zero or the "Tepid" Whirlpool time 60..66 °
+    uint16_t		Whirlpool2;			///< Zero or the Cold Whirlpool time < 30 °
+    float		SpargeTemp;			///< Sparge water temperature.
+} recipe;
+
+/**
+ * @brief Append a recipe record. Create file if it doesn't exist.
+ */
+void append_recipe(void);
+
+/**
+ * @brief Write current recipe
+ * @param RecNo Record number starting at 1.
+ */
+void write_recipe(int RecNo);
+
+/**
+ * @brief Read current recipe
+ * @param RecNo The record to read, start at 1.
+ */
+void read_recipe(int RecNo);
+
+/**
+ * @brief Delete recipe record, renumber remaining records.
+ * @param RecNo The record to remove.
+ */
+void delete_recipe(int RecNo);
+
+#endif

mercurial