diff --git a/.gitignore b/.gitignore
index b5ba8fb..1fb50dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,5 @@ backups
pcb/production/.nfs*
*backup
*.DONOTCOMPILE
+*DO_NOT_COMPILE*
+Matter/
\ No newline at end of file
diff --git a/README.md b/README.md
index 9573178..565883d 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,12 @@ Basic layout of thermostat:
+# October 4, 2023 addition of Matter support
+
+Getting started: https://docs.espressif.com/projects/esp-matter/en/latest/esp32/developing.html
+
+Matter support is delayed until the SDK can be added as a library to PlatformIO. Currently, the actions required to create a dev environment is too extreme.
+
# September 8, 2023 update - V0.6
The thermostat app code is now 100% ESP-IDF based. All dependencies on the Arduino framework have been removed. This provides for much better control of the code and better integration with the upcoming Matter implementation.
diff --git a/app/.gitignore b/app/.gitignore
index 89cc49c..95034cf 100644
--- a/app/.gitignore
+++ b/app/.gitignore
@@ -3,3 +3,4 @@
.vscode/c_cpp_properties.json
.vscode/launch.json
.vscode/ipch
+lib
diff --git a/app/.unotes/unotes_meta.json b/app/.unotes/unotes_meta.json
index 32c2fd2..f530073 100644
--- a/app/.unotes/unotes_meta.json
+++ b/app/.unotes/unotes_meta.json
@@ -51,12 +51,6 @@
},
"files": {}
},
- "test": {
- "name": "test",
- "isOrdered": true,
- "folders": {},
- "files": {}
- },
"boards": {
"name": "boards",
"isOrdered": true,
@@ -70,7 +64,5 @@
"files": {}
}
},
- "files": {
- "GettingStarted": 0
- }
+ "files": {}
}
\ No newline at end of file
diff --git a/app/include/Arduino.h b/app/include/Arduino.h
index 4cd42ee..731e491 100644
--- a/app/include/Arduino.h
+++ b/app/include/Arduino.h
@@ -1,6 +1,6 @@
/*---------------------------------------------------------------
Simple header file to incorporate Arduino functions
- mostly for the LD2410 sensor.
+ mostly for the LD2410 sensor library.
---------------------------------------------------------------*/
#include "thermostat.hpp"
diff --git a/app/include/gpio_defs.hpp b/app/include/gpio_defs.hpp
index a113fb9..3f37935 100644
--- a/app/include/gpio_defs.hpp
+++ b/app/include/gpio_defs.hpp
@@ -38,6 +38,7 @@
#define HVAC_FAN_PIN 4
#define HVAC_HEAT_PIN 5
#define HVAC_COOL_PIN 6
+#define HVAC_RVALV_PIN 7
#define BUZZER_PIN 17
#define MOTION_PIN 18
#define LIGHT_SENS_PIN 8
diff --git a/app/include/thermostat.hpp b/app/include/thermostat.hpp
index db5c722..ab8c1cc 100644
--- a/app/include/thermostat.hpp
+++ b/app/include/thermostat.hpp
@@ -17,7 +17,6 @@
#define LOW 0
-
/////////////////////////////////////////////////////////////////////
// Shared data structures
/////////////////////////////////////////////////////////////////////
@@ -28,7 +27,7 @@ typedef enum
AUTO,
HEAT,
COOL,
- FAN,
+ FAN_ONLY,
AUX_HEAT,
ERROR,
IDLE
@@ -37,6 +36,12 @@ typedef enum
typedef struct
{
+ // FriendlyName and DeviceName must be
+ // the same size due to copy operation
+ // in ui_events.cpp, saveDeviceName()
+ char FriendlyName[32];
+ char DeviceName[32];
+ uint8_t mac[6];
HVAC_MODE hvacOpMode;
HVAC_MODE hvacSetMode;
float tempSet;
@@ -62,6 +67,21 @@ typedef struct
char *timezone;
uint16_t timezone_sel;
+#ifdef MQTT_ENABLED
+ bool MqttEnabled;
+ // bool MqttStarted;
+ bool MqttConnected;
+ char MqttBrokerHost[32];
+ uint16_t MqttBrokerPort;
+ char MqttBrokerUsername[32];
+ char MqttBrokerPassword[72];
+ void *MqttClient; // Used during MQTT publish
+#endif
+
+#ifdef MATTER_ENABLED
+ bool MatterEnabled;
+ bool MatterStarted;
+#endif
//@@@ Zipcode for outside temp??
//@@@ Calibration data for touchscreen?
@@ -69,7 +89,7 @@ typedef struct
typedef struct
{
- char hostname[24];
+ // char hostname[24]; ...replaced by OperatingParameters.DeviceName
char ssid[24];
char password[16];
@@ -90,10 +110,14 @@ typedef struct
} WIFI_STATUS;
+
extern OPERATING_PARAMETERS OperatingParameters;
extern WIFI_CREDS WifiCreds;
-extern int32_t ui_WifiStatusLabel_timestamp;
+extern int64_t ui_WifiStatusLabel_timestamp;
+#ifdef MQTT_ENABLED
+#define MQTT_RECONNECT_DELAY 75000
+#endif
#define MOTION_TIMEOUT 10000
#define WIFI_CONNECT_INTERVAL 30000
#define UPDATE_TIME_INTERVAL 60000
@@ -116,15 +140,25 @@ extern void app_main();
} /*extern "C"*/
#endif
-int32_t millis(); // Defined in main.cpp
+int64_t millis(); // Defined in main.cpp
void showConfigurationData();
void scanI2cBus();
+#ifdef MATTER_ENABLED
+bool MatterInit();
+#endif
+
+#ifdef MQTT_ENABLED
+void MqttInit();
+bool MqttConnect();
+void MqttUpdateStatusTopic();
+void MqttHomeAssistantDiscovery();
+#endif
+
// State Machine
void stateCreateTask();
-void serialStart();
-extern int32_t lastWifiReconnect;
+extern int64_t lastWifiReconnect;
// EEPROM
void eepromInit();
@@ -157,6 +191,9 @@ void tftCreateTask();
HVAC_MODE strToHvacMode(char *mode);
HVAC_MODE convertSelectedHvacMode();
void setHvacModesDropdown();
+#ifdef MQTT_ENABLED
+const char *hvacModeToMqttCurrMode(HVAC_MODE mode);
+#endif
const char *hvacModeToString(HVAC_MODE mode);
extern volatile bool tftMotionTrigger;
@@ -176,16 +213,19 @@ void tftDimDisplay();
#endif
// Sensors
+void updateHvacMode(HVAC_MODE mode);
+void updateHvacSetTemp(float setTemp);
// float roundValue(float value, int places = 0);
float roundValue(float value, int places);
float getRoundedFrac(float value);
+void initTimeSntp();
// int degCfrac(float tempF);
// int tempOut(float tempF);
// float tempIn(float tempC);
// float degFtoC(float degF);
void resetTempSmooth();
-bool sensorsInit();
-void testToggleRelays();
+void sensorsInit();
+void initRelays();
int getTemp();
int getHumidity();
void ld2410_loop();
@@ -198,7 +238,7 @@ void audioBeep();
// SNTP Time Sync
void updateTimezone();
-bool getLocalTime(struct tm *, uint32_t);
+bool getLocalTime(struct tm *, uint64_t);
void updateTimeSntp();
// ui_events.cpp
diff --git a/app/include/version.h b/app/include/version.h
index 6c46eaa..632749a 100644
--- a/app/include/version.h
+++ b/app/include/version.h
@@ -1,6 +1,6 @@
#define VERSION_MAJOR 0
-#define VERSION_MINOR 6
+#define VERSION_MINOR 7
#define VERSION_BUILD 0
#define VERSION_BUILD_DATE __DATE__
diff --git a/app/platformio.ini b/app/platformio.ini
index 4b3e205..d4f65be 100644
--- a/app/platformio.ini
+++ b/app/platformio.ini
@@ -30,7 +30,10 @@ build_unflags =
build_flags =
-std=gnu++14
-I include/
+;;; -I ~/.platformio/packages/framework-espidf/components/mqtt/esp-mqtt/include/
-D LV_CONF_INCLUDE_SIMPLE
+ -D MQTT_ENABLED
+;; -D MATTER_ENABLED
lib_compat_mode = off ;; To enable Arduino LD2410 library to be included
lib_deps =
rzeldent/micro-timezonedb@^1.0.2
@@ -38,6 +41,7 @@ lib_deps =
lvgl/lvgl@^8.3.9
lovyan03/LovyanGFX@^1.1.9
ncmreynolds/ld2410@^0.1.3
+ bblanchon/ArduinoJson@^6.21.3
debug_init_break = tbreak app_main
monitor_filters =
esp32_exception_decoder
diff --git a/app/smart-thermostat.code-workspace b/app/smart-thermostat.code-workspace
index 2fbfdb3..2299493 100644
--- a/app/smart-thermostat.code-workspace
+++ b/app/smart-thermostat.code-workspace
@@ -5,5 +5,68 @@
"path": "."
}
],
- "settings": {}
+ "settings": {
+ "files.associations": {
+ "array": "cpp",
+ "atomic": "cpp",
+ "bit": "cpp",
+ "*.tcc": "cpp",
+ "bitset": "cpp",
+ "cctype": "cpp",
+ "chrono": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "compare": "cpp",
+ "concepts": "cpp",
+ "condition_variable": "cpp",
+ "cstdarg": "cpp",
+ "cstddef": "cpp",
+ "cstdint": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "cwctype": "cpp",
+ "deque": "cpp",
+ "list": "cpp",
+ "map": "cpp",
+ "set": "cpp",
+ "string": "cpp",
+ "unordered_map": "cpp",
+ "vector": "cpp",
+ "exception": "cpp",
+ "algorithm": "cpp",
+ "functional": "cpp",
+ "iterator": "cpp",
+ "memory": "cpp",
+ "memory_resource": "cpp",
+ "netfwd": "cpp",
+ "numeric": "cpp",
+ "random": "cpp",
+ "ratio": "cpp",
+ "string_view": "cpp",
+ "system_error": "cpp",
+ "tuple": "cpp",
+ "type_traits": "cpp",
+ "utility": "cpp",
+ "fstream": "cpp",
+ "initializer_list": "cpp",
+ "iosfwd": "cpp",
+ "istream": "cpp",
+ "limits": "cpp",
+ "mutex": "cpp",
+ "new": "cpp",
+ "numbers": "cpp",
+ "ostream": "cpp",
+ "semaphore": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "stop_token": "cpp",
+ "streambuf": "cpp",
+ "thread": "cpp",
+ "cinttypes": "cpp",
+ "typeinfo": "cpp"
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/eeprom.cpp b/app/src/eeprom.cpp
index 7643182..30fe290 100644
--- a/app/src/eeprom.cpp
+++ b/app/src/eeprom.cpp
@@ -14,6 +14,8 @@
* History
* 17-Aug-2023: Steve Meisner (steve@meisners.net) - Initial version
* 30-Aug-2023: Steve Meisner (steve@meisners.net) - Rewrote to support ESP-IDF framework instead of Arduino
+ * 11-Oct-2023: Steve Meisner (steve@meisners.net) - Add suport for home automation (MQTT & Matter)
+ * 16-Oct-2023: Steve Meisner (steve@meisners.net) - Add support for friendly names & saving MQTT broker info
*
*/
@@ -40,6 +42,11 @@
#define DEF_SLEEP_TIME 30
#define DEF_TZ_SEL 15
#define DEF_BEEP_ENABLE true
+#define DEF_MQTT_ENABLE false
+#define DEF_MQTT_BROKER "mqtt"
+#define DEF_MQTT_USER "mqtt"
+#define DEF_MQTT_PASS "mqtt"
+#define DEF_MQTT_PORT 1883
#define DEF_MATTER_ENABLE false
//@@@
@@ -285,6 +292,7 @@ void setDefaultThermostatParams()
ESP_LOGE(TAG, "Failed to open handle to NVS partition");
return;
}
+ strncpy (OperatingParameters.FriendlyName, "Thermostat", sizeof(OperatingParameters.FriendlyName));
nvs_writeMode(my_handle, "currMode", DEF_CURR_MODE);
nvs_writeMode(my_handle, "setMode", DEF_SET_MODE);
nvs_writeFloat(my_handle, "setTemp", DEF_SET_TEMP);
@@ -299,6 +307,13 @@ void setDefaultThermostatParams()
nvs_writeInt16(my_handle, "sleepTime", DEF_SLEEP_TIME);
nvs_writeInt16(my_handle, "timezoneSel", DEF_TZ_SEL);
nvs_writeBool(my_handle, "Beep", DEF_BEEP_ENABLE);
+#ifdef MQTT_ENABLED
+ nvs_writeBool(my_handle, "MqttEn", DEF_MQTT_ENABLE);
+ nvs_writeString(my_handle, "MqttBroker", DEF_MQTT_BROKER);
+ nvs_writeString(my_handle, "MqttUsername", DEF_MQTT_USER);
+ nvs_writeString(my_handle, "MqttPassword", DEF_MQTT_PASS);
+ nvs_writeInt16(my_handle, "MqttBrokerPort", DEF_MQTT_PORT);
+#endif
#ifdef MATTER_ENABLED
nvs_writeBool(my_handle, "MatterEn", DEF_MATTER_ENABLE);
#endif
@@ -319,6 +334,13 @@ void setDefaultThermostatParams()
OperatingParameters.thermostatSleepTime = DEF_SLEEP_TIME;
OperatingParameters.timezone_sel = DEF_TZ_SEL;
OperatingParameters.thermostatBeepEnable = DEF_BEEP_ENABLE;
+#ifdef MQTT_ENABLED
+ OperatingParameters.MqttEnabled = DEF_MQTT_ENABLE;
+ strncpy (OperatingParameters.MqttBrokerHost, DEF_MQTT_BROKER, sizeof(OperatingParameters.MqttBrokerHost));
+ strncpy (OperatingParameters.MqttBrokerUsername, DEF_MQTT_USER, sizeof(OperatingParameters.MqttBrokerUsername));
+ strncpy (OperatingParameters.MqttBrokerPassword, DEF_MQTT_PASS, sizeof(OperatingParameters.MqttBrokerPassword));
+ OperatingParameters.MqttBrokerPort = DEF_MQTT_PORT;
+#endif
#ifdef MATTER_ENABLED
OperatingParameters.MatterEnabled = DEF_MATTER_ENABLE;
#endif
@@ -329,6 +351,7 @@ void updateThermostatParams()
nvs_handle_t my_handle;
ESP_LOGI(TAG, "Updating Thermostat parameters in NVS");
openNVS(&my_handle, NVS_TAG);
+ nvs_writeString(my_handle, "friendlyname", OperatingParameters.FriendlyName);
nvs_writeMode(my_handle, "currMode", OperatingParameters.hvacOpMode);
nvs_writeMode(my_handle, "setMode", OperatingParameters.hvacSetMode);
nvs_writeFloat(my_handle, "setTemp", OperatingParameters.tempSet);
@@ -343,6 +366,13 @@ void updateThermostatParams()
nvs_writeInt16(my_handle, "sleepTime", OperatingParameters.thermostatSleepTime);
nvs_writeInt16(my_handle, "timezoneSel", OperatingParameters.timezone_sel);
nvs_writeBool(my_handle, "Beep", OperatingParameters.thermostatBeepEnable);
+#ifdef MQTT_ENABLED
+ nvs_writeBool(my_handle, "MqttEn", &OperatingParameters.MqttEnabled);
+ nvs_writeString(my_handle, "MqttBroker", OperatingParameters.MqttBrokerHost);
+ nvs_writeString(my_handle, "MqttUsername", OperatingParameters.MqttBrokerUsername);
+ nvs_writeString(my_handle, "MqttPassword", OperatingParameters.MqttBrokerPassword);
+ nvs_writeInt16(my_handle, "MqttBrokerPort", OperatingParameters.MqttBrokerPort);
+#endif
#ifdef MATTER_ENABLED
nvs_writeBool(my_handle, "MatterEn", &OperatingParameters.MatterEnabled);
#endif
@@ -360,6 +390,7 @@ void getThermostatParams()
return;
}
+ nvs_readStr(my_handle, "friendlyname", "Thermostat", OperatingParameters.FriendlyName, sizeof(OperatingParameters.FriendlyName));
nvs_readMode(my_handle, "currMode", &OperatingParameters.hvacOpMode, DEF_CURR_MODE);
nvs_readMode(my_handle, "setMode", &OperatingParameters.hvacSetMode, DEF_SET_MODE);
nvs_readFloat(my_handle, "setTemp", &OperatingParameters.tempSet, DEF_SET_TEMP);
@@ -375,6 +406,13 @@ void getThermostatParams()
nvs_readInt16(my_handle, "timezoneSel", &OperatingParameters.timezone_sel, DEF_TZ_SEL);
OperatingParameters.timezone = (char *)gmt_timezones[OperatingParameters.timezone_sel];
nvs_readBool(my_handle, "Beep", &OperatingParameters.thermostatBeepEnable, DEF_BEEP_ENABLE);
+#ifdef MQTT_ENABLED
+ nvs_readBool(my_handle, "MqttEn", &OperatingParameters.MqttEnabled, DEF_MQTT_ENABLE);
+ nvs_readStr(my_handle, "MqttBroker", DEF_MQTT_BROKER, OperatingParameters.MqttBrokerHost, sizeof(OperatingParameters.MqttBrokerHost));
+ nvs_readStr(my_handle, "MqttUsername", DEF_MQTT_USER, OperatingParameters.MqttBrokerUsername, sizeof(OperatingParameters.MqttBrokerUsername));
+ nvs_readStr(my_handle, "MqttPassword", DEF_MQTT_PASS, OperatingParameters.MqttBrokerPassword, sizeof(OperatingParameters.MqttBrokerPassword));
+ nvs_readInt16(my_handle, "MqttBrokerPort", &OperatingParameters.MqttBrokerPort, DEF_MQTT_PORT);
+#endif
#ifdef MATTER_ENABLED
nvs_readBool(my_handle, "MatterEn", &OperatingParameters.MatterEnabled, DEF_MATTER_ENABLE);
#endif
@@ -414,7 +452,7 @@ void setDefaultWifiCreds()
nvs_writeString(my_handle, "pass", "");
closeNVS(my_handle);
- strncpy (WifiCreds.hostname, "thermostat", sizeof(WifiCreds.hostname));
+ strncpy (OperatingParameters.DeviceName, "thermostat", sizeof(OperatingParameters.DeviceName));
strncpy (WifiCreds.ssid, "", sizeof(WifiCreds.ssid));
strncpy (WifiCreds.password, "", sizeof(WifiCreds.password));
}
@@ -428,7 +466,7 @@ void setWifiCreds()
// printf ("*** [setWifiCreds] WifiCreds.password = %s\n", WifiCreds.password);
nvs_handle_t my_handle;
openNVS(&my_handle, NVS_WIFI_TAG);
- nvs_writeString(my_handle, "hostname", WifiCreds.hostname);
+ nvs_writeString(my_handle, "hostname", OperatingParameters.DeviceName);
nvs_writeString(my_handle, "ssid", WifiCreds.ssid);
nvs_writeString(my_handle, "pass", WifiCreds.password);
closeNVS(my_handle);
@@ -444,7 +482,7 @@ void getWifiCreds()
if (!openNVS(&my_handle, NVS_WIFI_TAG))
return;
}
- nvs_readStr(my_handle, "hostname", "thermostat", WifiCreds.hostname, sizeof(WifiCreds.hostname));
+ nvs_readStr(my_handle, "hostname", "thermostat", OperatingParameters.DeviceName, sizeof(OperatingParameters.DeviceName));
nvs_readStr(my_handle, "ssid", "", WifiCreds.ssid, sizeof(WifiCreds.ssid));
nvs_readStr(my_handle, "pass", "", WifiCreds.password, sizeof(WifiCreds.password));
// printf ("*** [getWifiCreds] WifiCreds.password = %s\n", WifiCreds.password);
diff --git a/app/src/indicators.cpp b/app/src/indicators.cpp
index 74331f1..528d35e 100644
--- a/app/src/indicators.cpp
+++ b/app/src/indicators.cpp
@@ -12,6 +12,7 @@
* History
* 17-Aug-2023: Steve Meisner (steve@meisners.net) - Initial version
* 30-Aug-2023: Steve Meisner (steve@meisners.net) - Rewrote to support ESP-IDF framework instead of Arduino
+ * 16-Oct-2023: Steve Meisner (steve@meisners.net) - Init relay pins for output
*
*/
@@ -76,7 +77,7 @@ void audioStartupBeep()
}
// Use lastBeep to rate limit the beeping
-unsigned long lastBeep = 0;
+uint64_t lastBeep = 0;
void audioBeep()
{
@@ -116,6 +117,28 @@ void audioBeep()
// gpio_config(&io_conf);
// }
+void initRelays()
+{
+ vTaskDelay(pdMS_TO_TICKS(250));
+
+ gpio_set_direction((gpio_num_t)HVAC_HEAT_PIN, GPIO_MODE_OUTPUT);
+ gpio_set_level((gpio_num_t)HVAC_HEAT_PIN, LOW);
+ // gpio_reset_pin((gpio_num_t)HVAC_HEAT_PIN);
+
+ gpio_set_direction((gpio_num_t)HVAC_COOL_PIN, GPIO_MODE_OUTPUT);
+ gpio_set_level((gpio_num_t)HVAC_COOL_PIN, LOW);
+ // gpio_reset_pin((gpio_num_t)HVAC_COOL_PIN);
+
+ gpio_set_direction((gpio_num_t)HVAC_FAN_PIN, GPIO_MODE_OUTPUT);
+ gpio_set_level((gpio_num_t)HVAC_FAN_PIN, LOW);
+ // gpio_reset_pin((gpio_num_t)HVAC_FAN_PIN);
+
+ gpio_set_direction((gpio_num_t)HVAC_RVALV_PIN, GPIO_MODE_OUTPUT);
+ gpio_set_level((gpio_num_t)HVAC_RVALV_PIN, LOW);
+ // gpio_reset_pin((gpio_num_t)HVAC_RVALV_PIN);
+}
+
+
void indicatorsInit()
{
gpio_reset_pin((gpio_num_t)LED_HEAT_PIN);
diff --git a/app/src/main.cpp b/app/src/main.cpp
index 1877d42..a08fbd5 100644
--- a/app/src/main.cpp
+++ b/app/src/main.cpp
@@ -13,48 +13,77 @@
* History
* 17-Aug-2023: Steve Meisner (steve@meisners.net) - Initial version
* 30-Aug-2023: Steve Meisner (steve@meisners.net) - Rewrote to support ESP-IDF framework instead of Arduino
+ * 11-Oct-2023: Steve Meisner (steve@meisners.net) - Add suport for home automation (MQTT & Matter)
+ * 16-Oct-2023: Steve Meisner (steve@meisners.net) - Add restriction for enabling both MQTT & Matter & removed printf's
*
*/
-#include "thermostat.hpp"
+#if defined(MATTER_ENABLED) && defined(MQTT_ENABLED)
+ #error "Do not enable Matter/CHIP and MQTT at the same time"
+#endif
+#include "thermostat.hpp"
#include "esp_timer.h"
-int32_t millis() { return esp_timer_get_time() / 1000;}
+#define TAG "Main"
+
+int64_t millis() { return esp_timer_get_time() / 1000;}
void app_main()
{
+ ESP_LOGI (TAG, "IDF version: %s", esp_get_idf_version());
+ ESP_LOGD (TAG, "- Free memory: %d bytes", esp_get_free_heap_size());
+
// Load configuration from EEPROM
- printf ("Reading EEPROM\n");
+ ESP_LOGI (TAG, "Reading EEPROM");
eepromInit();
// Initialize the TFT display
- printf ("Initializing TFT\n");
+ ESP_LOGI (TAG, "Initializing TFT");
tftInit();
// Create the RTOS task to drive the touchscreen
- printf ("Starting TFT task\n");
+ ESP_LOGI (TAG, "Starting TFT task");
tftCreateTask();
+ // Initialize sensors (temp, humidity, motion, etc)
+ ESP_LOGI (TAG, "Initializing sensors");
+ sensorsInit();
+
+#ifdef MATTER_ENABLED
+ // Start Matter
+ ESP_LOGI (TAG, "Starting Matter");
+ OperatingParameters.MatterStarted = MatterInit();
+#endif
+
// Start wifi
- printf ("Starting wifi (\"%s\", \"%s\")\n", WifiCreds.ssid, WifiCreds.password);
+ ESP_LOGI (TAG, "Starting wifi (\"%s\", \"%s\")", WifiCreds.ssid, WifiCreds.password);
OperatingParameters.wifiConnected =
- wifiStart(WifiCreds.hostname, WifiCreds.ssid, WifiCreds.password);
+ // wifiStart(WifiCreds.hostname, WifiCreds.ssid, WifiCreds.password);
+ wifiStart(OperatingParameters.DeviceName, WifiCreds.ssid, WifiCreds.password);
+
+
+#ifdef MQTT_ENABLED
+ // Start Matter
+ ESP_LOGI (TAG, "Starting MQTT");
+ MqttInit();
+#endif
+
+ // Start SNTP connection to get local time
+ initTimeSntp();
// Initialize indicators (relays, LEDs, buzzer)
- printf ("Initializing indicators\n");
+ ESP_LOGI (TAG, "Initializing indicators");
indicatorsInit();
- // Initialize sensors (temp, humidity, motion, etc)
- printf ("Initializing sensors\n");
- sensorsInit();
+ initRelays();
// Create the RTOS task to drive the state machine
- printf ("Starting state machine task\n");
+ ESP_LOGI (TAG, "Starting state machine task");
stateCreateTask();
// Start web server
- // printf ("Starting web server\n");
+ ESP_LOGI (TAG, "Starting web server");
webStart();
// Play the startup sound
audioStartupBeep();
- printf ("Startup done\n");
-}
\ No newline at end of file
+ ESP_LOGI (TAG, "Startup done");
+}
diff --git a/app/src/matter.cpp b/app/src/matter.cpp
new file mode 100644
index 0000000..1b47e4e
--- /dev/null
+++ b/app/src/matter.cpp
@@ -0,0 +1,402 @@
+#ifdef MATTER_ENABLED
+
+#include "thermostat.hpp"
+
+/**
+ * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING
+ *
+ * A string identifying the software version running on the device.
+ */
+//#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION_STRING "V1.0"
+
+/**
+ * CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION
+ *
+ * A monothonic number identifying the software version running on the device.
+ */
+//#define CHIP_DEVICE_CONFIG_DEVICE_SOFTWARE_VERSION 1
+
+/**
+ * CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION
+ *
+ * The hardware version number assigned to device or product by the device vendor. This
+ * number is scoped to the device product id, and typically corresponds to a revision of the
+ * physical device, a change to its packaging, and/or a change to its marketing presentation.
+ * This value is generally *not* incremented for device software versions.
+ */
+//#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION 5
+
+/**
+ * @brief Fallback value for the basic information cluster's Vendor name attribute
+ * if the actual vendor name is not provisioned in the device memory.
+ */
+#define CHIP_DEVICE_CONFIG_VENDOR_NAME "Steve Meisner"
+#define CONFIG_CHIP_DEVICE_VENDOR_NAME "1Steve Meisner"
+
+/**
+ * @brief Set the name of the product. This will be written to node0
+ * and used as the product name.
+ */
+#define CHIP_DEVICE_CONFIG_PRODUCT_NAME "RealSmartThermostat"
+
+// Use a default pairing code if one hasn't been provisioned in flash.
+// #define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_PIN_CODE 20202021
+// #define CHIP_DEVICE_CONFIG_USE_TEST_SETUP_DISCRIMINATOR 0xF00
+#define CHIP_DEVICE_CONFIG_DEVICE_VENDOR_NAME "Steve Meisner"
+#define CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_NAME "Smart prod"
+#define CONFIG_CHIP_DEVICE_PRODUCT_NAME "Smart chip prod"
+#define CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION_STRING "v1.0"
+#define CHIP_DEVICE_CONFIG_DEFAULT_DEVICE_HARDWARE_VERSION_STRING "v2.0"
+
+#include "Matter.h"
+#include
+#include
+#include
+#include
+
+using namespace chip;
+using namespace chip::app::Clusters;
+using namespace esp_matter;
+using namespace esp_matter::endpoint;
+
+using chip::DeviceLayer::ConfigurationMgr;
+
+#define TAG "Thermostat"
+
+/**
+ * This program presents example Matter light device with OnOff cluster by
+ * controlling LED with Matter and toggle button.
+ *
+ * If your ESP does not have buildin LED, please connect it to LED_PIN
+ *
+ * You can toggle light by both:
+ * - Matter (via CHIPTool or other Matter controller)
+ * - toggle button (by default attached to GPIO0 - reset button, with debouncing)
+ */
+
+// Please configure your PINs
+// const int LED_PIN = 2;
+// const int TOGGLE_BUTTON_PIN = 0;
+
+// Debounce for toggle button
+// const int DEBOUNCE_DELAY = 500;
+// int last_toggle;
+
+constexpr auto k_timeout_seconds = 300;
+
+// Cluster and attribute ID used by Matter light device
+const uint32_t CLUSTER_ID = OnOff::Id;
+const uint32_t ATTRIBUTE_ID = OnOff::Attributes::OnOff::Id;
+
+// Endpoint and attribute ref that will be assigned to Matter device
+uint16_t light_endpoint_id = 0;
+attribute_t *attribute_ref;
+
+// There is possibility to listen for various device events, related for example to setup process
+// Leaved as empty for simplicity
+static void on_device_event(const ChipDeviceEvent *event, intptr_t arg)
+{
+ Serial.printf ("IN on_device_event() : event->Type = %d\n", event->Type);
+
+ switch (event->Type)
+ {
+ case chip::DeviceLayer::DeviceEventType::kInterfaceIpAddressChanged:
+ ESP_LOGI(TAG, "Interface IP Address changed");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kCommissioningComplete:
+ ESP_LOGI(TAG, "Commissioning complete");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kFailSafeTimerExpired:
+ ESP_LOGI(TAG, "Commissioning failed, fail safe timer expired");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kCommissioningSessionStarted:
+ ESP_LOGI(TAG, "Commissioning session started");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kCommissioningSessionStopped:
+ ESP_LOGI(TAG, "Commissioning session stopped");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kCommissioningWindowOpened:
+ ESP_LOGI(TAG, "Commissioning window opened");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kCommissioningWindowClosed:
+ ESP_LOGI(TAG, "Commissioning window closed");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kFabricRemoved:
+ {
+ ESP_LOGI(TAG, "Fabric removed successfully");
+#if 0
+ if (chip::Server::GetInstance().GetFabricTable().FabricCount() == 0)
+ {
+ chip::CommissioningWindowManager & commissionMgr = chip::Server::GetInstance().GetCommissioningWindowManager();
+ constexpr auto kTimeoutSeconds = chip::System::Clock::Seconds16(k_timeout_seconds);
+ if (!commissionMgr.IsCommissioningWindowOpen())
+ {
+ /* After removing last fabric, this example does not remove the Wi-Fi credentials
+ * and still has IP connectivity so, only advertising on DNS-SD.
+ */
+ CHIP_ERROR err = commissionMgr.OpenBasicCommissioningWindow(kTimeoutSeconds,
+ chip::CommissioningWindowAdvertisement::kDnssdOnly);
+ if (err != CHIP_NO_ERROR)
+ {
+ ESP_LOGE(TAG, "Failed to open commissioning window, err:%" CHIP_ERROR_FORMAT, err.Format());
+ }
+ }
+ }
+#endif
+ break;
+ }
+
+ case chip::DeviceLayer::DeviceEventType::kFabricWillBeRemoved:
+ ESP_LOGI(TAG, "Fabric will be removed");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kFabricUpdated:
+ ESP_LOGI(TAG, "Fabric is updated");
+ break;
+
+ case chip::DeviceLayer::DeviceEventType::kFabricCommitted:
+ ESP_LOGI(TAG, "Fabric is committed");
+ break;
+
+ default:
+ break;
+ }
+}
+
+static esp_err_t on_identification(identification::callback_type_t type, uint16_t endpoint_id,
+ uint8_t effect_id, uint8_t effect_variant, void *priv_data) {
+ return ESP_OK;
+}
+
+// Listener on attribute update requests.
+// In this example, when update is requested, path (endpoint, cluster and attribute) is checked
+// if it matches light attribute. If yes, LED changes state to new one.
+static esp_err_t on_attribute_update(attribute::callback_type_t type, uint16_t endpoint_id, uint32_t cluster_id,
+ uint32_t attribute_id, esp_matter_attr_val_t *val, void *priv_data) {
+ if (type == attribute::PRE_UPDATE && endpoint_id == light_endpoint_id &&
+ cluster_id == CLUSTER_ID && attribute_id == ATTRIBUTE_ID) {
+ // We got an light on/off attribute update!
+ bool new_state = val->val.b;
+// digitalWrite(LED_PIN, new_state);
+ }
+ return ESP_OK;
+}
+
+bool MatterInit()
+{
+ // Enable debug logging
+ esp_log_level_set("*", ESP_LOG_DEBUG);
+ // esp_log_level_set("*", ESP_LOG_WARN);
+
+ if (!OperatingParameters.MatterEnabled)
+ {
+ Serial.printf ("MatterInit() called when Matter not enabled\n");
+ return false;
+ }
+
+ // If no creds in EEPROM, do not start Matter.
+ // There may be creds stored in wifi NVS.
+ if (strlen(WifiCreds.ssid) == 0)
+ {
+ Serial.printf ("No wifi credentials set -- not starting matter\n");
+ return false;
+ }
+
+ // Set wifi credentials
+ wifiSetCredentials(WifiCreds.ssid, WifiCreds.password);
+
+ // Setup Matter node
+ node::config_t node_config;
+ node_t *node = node::create(&node_config, on_attribute_update, on_identification);
+
+ // Set product name (stored in node 0)
+ auto endpoint = esp_matter::endpoint::get(node, 0);
+ auto cluster = esp_matter::cluster::get(endpoint, chip::app::Clusters::BasicInformation::Id);
+ auto attribute = esp_matter::attribute::get(cluster, chip::app::Clusters::BasicInformation::Attributes::NodeLabel::Id);
+ std::string data = CHIP_DEVICE_CONFIG_PRODUCT_NAME;
+ auto val = esp_matter_char_str(data.data(), data.length());
+ esp_matter::attribute::set_val(attribute, &val);
+
+
+
+#if 0
+{
+ esp_err_t error;
+ esp_matter_attr_val_t val = esp_matter_char_str((char *)"Lowpan", sizeof("Lowpan"));
+ error = attribute::update(
+ 0,
+ chip::app::Clusters::BasicInformation::Id,
+ chip::app::Clusters::BasicInformation::Attributes::VendorName::Id,
+ &val);
+}
+
+ // THE FOLLOWING DO NOT WORK
+ attribute = esp_matter::attribute::get(cluster, chip::app::Clusters::BasicInformation::Attributes::ProductName::Id);
+ data = CHIP_DEVICE_CONFIG_PRODUCT_NAME;
+ val = esp_matter_char_str(data.data(), data.length());
+ esp_matter::attribute::set_val(attribute, &val);
+
+ attribute = esp_matter::attribute::get(cluster, chip::app::Clusters::BasicInformation::Attributes::VendorName::Id);
+ data = CHIP_DEVICE_CONFIG_VENDOR_NAME;
+ val = esp_matter_char_str(data.data(), data.length());
+ esp_matter::attribute::set_val(attribute, &val);
+
+ attribute = esp_matter::attribute::get(cluster, chip::app::Clusters::BasicInformation::Attributes::HardwareVersionString::Id);
+ data = CHIP_DEVICE_CONFIG_DEVICE_HARDWARE_VERSION_STRING;
+ val = esp_matter_char_str(data.data(), data.length());
+ esp_matter::attribute::set_val(attribute, &val);
+ // THE ABOVE DO NOT WORK
+#endif
+
+ // Add enpoint to the node
+ thermostat::config_t thermostat_config;
+ thermostat_config.thermostat.local_temperature = 19;
+ thermostat_config.thermostat.system_mode = 0; // OFF state
+ endpoint_t *thermostat_endpoint = thermostat::create(node, &thermostat_config, ENDPOINT_FLAG_NONE, NULL);
+
+ uint16_t thermostat_endpoint_id = endpoint::get_id(thermostat_endpoint);
+ ESP_LOGI(TAG, "Thermostat endpoint_id = %d", thermostat_endpoint_id);
+
+ // Add additional feature
+ cluster_t *thermostat_cluster = cluster::get(thermostat_endpoint, Thermostat::Id);
+ cluster::thermostat::feature::heating::config_t heating_config;
+ heating_config.abs_max_heat_setpoint_limit = 3000;
+ heating_config.abs_min_heat_setpoint_limit = 1500;
+ heating_config.max_heat_setpoint_limit = 2800;
+ heating_config.min_heat_setpoint_limit = 2000;
+ heating_config.occupied_heating_setpoint = 2300;
+ heating_config.pi_heating_demand = 0;
+ ESP_LOGE(TAG, "Thermostat heating cluster id = %d", cluster::thermostat::feature::heating::get_id());
+ cluster::thermostat::feature::heating::add(thermostat_cluster, &heating_config);
+
+ // Add additional cooling cluster
+// cluster_t *thermostat_cluster = cluster::get(thermostat_endpoint, Thermostat::Id);
+ esp_matter::cluster::thermostat::feature::cooling::config_t cooling_config;
+ //cooling_config.config();MutableCharSpan
+ cooling_config.abs_min_cool_setpoint_limit = 1600;
+ cooling_config.abs_max_cool_setpoint_limit = 3200;
+ cooling_config.pi_cooling_demand = 50; // 50%
+ cooling_config.occupied_cooling_setpoint = 2600;
+ cooling_config.min_cool_setpoint_limit = 1600;
+ cooling_config.max_cool_setpoint_limit = 3200;
+ ESP_LOGE(TAG, "Thermostat cooling cluster id = %d", esp_matter::cluster::thermostat::feature::cooling::get_id());
+ esp_matter::cluster::thermostat::feature::cooling::add(thermostat_cluster, &cooling_config);
+
+
+
+
+
+
+
+
+
+
+
+
+// // Setup Light endpoint / cluster / attributes with default values
+// on_off_light::config_t light_config;
+// light_config.on_off.on_off = false;
+// light_config.on_off.lighting.start_up_on_off = false;
+// endpoint_t *endpoint = on_off_light::create(node, &light_config, ENDPOINT_FLAG_NONE, NULL);
+
+// // Save on/off attribute reference. It will be used to read attribute value later.
+// attribute_ref = attribute::get(cluster::get(endpoint, CLUSTER_ID), ATTRIBUTE_ID);
+
+// // Save generated endpoint id
+// light_endpoint_id = endpoint::get_id(endpoint);
+
+ // Setup DAC (this is good place to also set custom commission data, passcodes etc.)
+ esp_matter::set_custom_dac_provider(Credentials::Examples::GetExampleDACProvider());
+
+
+
+
+ ESP_LOGE(TAG, "Calling esp_matter::start()\n");
+ // Start Matter device
+ esp_matter::start(on_device_event);
+
+ // Get QR Code
+ std::string QRCode = " "; // 33 chars
+ CHIP_ERROR err;
+
+ ESP_LOGE(TAG, "Calling PrintOnboardingCodes()\n");
+ // Print codes needed to setup Matter device
+ #if 0
+ PrintOnboardingCodes(RendezvousInformationFlags(RendezvousInformationFlag::kOnNetwork));
+ #else
+ err = GetQRCode((MutableCharSpan &)QRCode, RendezvousInformationFlag::kOnNetwork);
+ if (err == CHIP_NO_ERROR)
+ {
+ // strcpy (OperatingParameters.MatterQR, QRCode.data());
+ strcpy (OperatingParameters.MatterQR, QRCode.c_str());
+ ESP_LOGE(TAG, "QR Pairing Code: '%s'\n", OperatingParameters.MatterQR);
+ } else {
+ ESP_LOGE(TAG, "Failed to GetQRCode() -- Error: %d\n", err.AsInteger());
+ }
+ err = GetManualPairingCode((MutableCharSpan &)QRCode, RendezvousInformationFlag::kOnNetwork);
+ if (err == CHIP_NO_ERROR)
+ {
+ strcpy (OperatingParameters.MatterPairingCode, QRCode.c_str());
+ ESP_LOGE(TAG, "Manual Pairing Code: '%s'\n", OperatingParameters.MatterPairingCode);
+ } else {
+ ESP_LOGE(TAG, "Failed to GetManualPairingCode() -- Error: %d\n", err.AsInteger());
+ }
+ #endif
+
+ OperatingParameters.MatterStarted = true;
+
+ // Call into wifi module to set flags appropriately to
+ // indicate Matter is running and register wifi callbacks.
+ wifiMatterStarted();
+
+ return true;
+}
+
+
+void MatterFactoryReset()
+{
+ ESP_LOGI(TAG, "Calling ESP factory_reset()\n");
+#if 1
+ esp_matter::factory_reset();
+#else
+ chip::DeviceLayer::ConfigurationMgr().InitiateFactoryReset();
+#endif
+}
+
+// Reads light on/off attribute value
+esp_matter_attr_val_t get_onoff_attribute_value() {
+ esp_matter_attr_val_t onoff_value = esp_matter_invalid(NULL);
+ attribute::get_val(attribute_ref, &onoff_value);
+ return onoff_value;
+}
+
+// Sets light on/off attribute value
+void set_onoff_attribute_value(esp_matter_attr_val_t* onoff_value) {
+ attribute::update(light_endpoint_id, CLUSTER_ID, ATTRIBUTE_ID, onoff_value);
+}
+
+// When toggle light button is pressed (with debouncing),
+// light attribute value is changed
+void MatterLoop()
+{
+// if ((millis() - last_toggle) > DEBOUNCE_DELAY)
+// {
+// if (!digitalRead(TOGGLE_BUTTON_PIN))
+// {
+// last_toggle = millis();
+// // Read actual on/off value, invert it and set
+// esp_matter_attr_val_t onoff_value = get_onoff_attribute_value();
+// onoff_value.val.b = !onoff_value.val.b;
+// set_onoff_attribute_value(&onoff_value);
+// }
+// }
+}
+
+#endif // #ifdef MATTER_ENABLED
diff --git a/app/src/mqtt.cpp b/app/src/mqtt.cpp
new file mode 100644
index 0000000..64c3592
--- /dev/null
+++ b/app/src/mqtt.cpp
@@ -0,0 +1,573 @@
+#ifdef MQTT_ENABLED
+
+// SPDX-License-Identifier: GPL-3.0-only
+/*
+ * mqtt.cpp
+ *
+ * Implement support for MQTT and Home Assistant. This module connects to the MQTT broker
+ * (usually running as part of Home Assistant) and provides a discovery MQTT publish. Then
+ * periodically, provide status updates via MQTT publishes.
+ *
+ * Copyright (c) 2023 Steve Meisner (steve@meisners.net)
+ *
+ * Notes:
+ *
+ * History
+ * 11-Oct-2023: Steve Meisner (steve@meisners.net) - Initial version
+ * 16-Oct-2023: Steve Meisner (steve@meisners.net) - Add support for friendly name & many operational improvements
+ *
+ */
+
+#include // for string class
+#include "thermostat.hpp"
+#include "version.h"
+#include
+#include
+#include "freertos/semphr.h"
+#include "freertos/queue.h"
+#include "mqtt_client.h"
+#include
+
+static const char *TAG = "MQTT";
+
+// Variable used for MQTT Discovery
+const char* g_deviceModel = "Truly Smart Thermostat"; // Hardware Model
+const char* g_swVersion = VERSION_STRING; // Firmware Version
+const char* g_manufacturer = "Steve Meisner"; // Manufacturer Name
+std::string g_deviceName; // = OperatingParameters.DeviceName; // Device Name
+std::string g_friendlyName;
+std::string g_mqttStatusTopic; // = "SmartThermostat/" + g_deviceName; // MQTT Topic
+
+struct CustomWriter {
+ std::string str;
+
+ size_t write(uint8_t c) {
+ str.append(1, static_cast(c));
+ // ESP_LOGI(TAG, "(char) -> %c", c);
+ return 1;
+ }
+
+ size_t write(const uint8_t *s, size_t n) {
+ str.append(reinterpret_cast(s), n);
+ // ESP_LOGI(TAG, "(str) -> %s", str.c_str());
+ return n;
+ }
+};
+
+#define MQTT_EVENT_CONNECTED_BIT BIT0
+#define MQTT_EVENT_DISCONNECTED_BIT BIT1
+#define MQTT_EVENT_PUB_BIT BIT2
+#define MQTT_ERROR_BIT BIT3
+static EventGroupHandle_t s_mqtt_event_group = NULL;
+const TickType_t xTicksToWait = 11000 / portTICK_PERIOD_MS;
+
+static void MqttEventHandler(void* handler_args, esp_event_base_t base, int32_t event_id, void* event_data)
+{
+ esp_mqtt_event_handle_t event = (esp_mqtt_event_handle_t)event_data;
+ esp_mqtt_client_handle_t client = event->client;
+ // int msg_id;
+ // your_context_t *context = event->context;
+ switch (event->event_id) {
+ case MQTT_EVENT_CONNECTED:
+ ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
+ OperatingParameters.MqttConnected = true;
+ xEventGroupSetBits(s_mqtt_event_group, MQTT_EVENT_CONNECTED_BIT);
+ break;
+ case MQTT_EVENT_DISCONNECTED:
+ ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED");
+ OperatingParameters.MqttConnected = false;
+ xEventGroupSetBits(s_mqtt_event_group, MQTT_EVENT_DISCONNECTED_BIT);
+ break;
+ case MQTT_EVENT_SUBSCRIBED:
+ ESP_LOGI(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
+ // msg_id = esp_mqtt_client_publish(client, "/topic/qos0", "data", 0, 0, 0);
+ // ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
+ break;
+ case MQTT_EVENT_UNSUBSCRIBED:
+ ESP_LOGI(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
+ break;
+ case MQTT_EVENT_PUBLISHED:
+ ESP_LOGI(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
+ // xEventGroupSetBits(s_mqtt_event_group, MQTT_EVENT_PUB_BIT);
+ break;
+ case MQTT_EVENT_ERROR:
+ ESP_LOGI(TAG, "MQTT_EVENT_ERROR");
+ OperatingParameters.MqttConnected = false;
+ xEventGroupSetBits(s_mqtt_event_group, MQTT_ERROR_BIT);
+ break;
+ case MQTT_EVENT_DATA:
+ ESP_LOGI(TAG, "MQTT_EVENT_DATA");
+ ESP_LOGI(TAG, "TOPIC=%.*s", event->topic_len, event->topic);
+ ESP_LOGI(TAG, "DATA=%.*s", event->data_len, event->data);
+ if (strstr(event->topic, "mode"))
+ {
+ char m[event->data_len + 1];
+ strncpy (m, event->data, event->data_len);
+ m[event->data_len] = '\0';
+ // Make first letter uppercase to match our string representation
+ m[0] = toupper(m[0]);
+ ESP_LOGI(TAG, "Looking up %s", m);
+ updateHvacMode (strToHvacMode(m));
+ }
+ if (strstr(event->topic, "temp"))
+ {
+ if (strlen(event->data) > 0 && atof(event->data) != 0)
+ {
+ updateHvacSetTemp (atof(event->data));
+ }
+ else
+ {
+ ESP_LOGE(TAG, "Received invalid string for set temp: \"%s\"", event->data);
+ }
+ }
+ if (strstr(event->topic, "fan"))
+ {
+ if (strlen(event->data) > 0)
+ {
+ if (strncmp("on", event->data, event->data_len) == 0)
+ {
+ updateHvacMode (FAN_ONLY);
+ }
+ else
+ {
+ if (OperatingParameters.hvacOpMode == FAN_ONLY)
+ {
+ updateHvacMode (OFF);
+ }
+ }
+ }
+ else
+ {
+ ESP_LOGE(TAG, "Received invalid string for set mode: \"%s\"", event->data);
+ }
+ }
+ break;
+ }
+}
+
+void MqttPublish(const char *topic, const char *payload, bool retain)
+{
+ int msg_id;
+ if (!OperatingParameters.MqttConnected)
+ {
+ ESP_LOGW(TAG, "Trying to MQTT publish while not connected");
+ return;
+ }
+ msg_id = esp_mqtt_client_publish(
+ (esp_mqtt_client_handle_t)(OperatingParameters.MqttClient), topic, payload, 0, 0, (retain ? 1 : 0));
+ ESP_LOGV(TAG, "Sent MQTT publish -- msg_id=%d", msg_id);
+ xEventGroupSetBits(s_mqtt_event_group, MQTT_EVENT_PUB_BIT);
+}
+
+void makeLower(const char *string)
+{
+ char *p = (char *)string;
+ while (*p)
+ {
+ *p = tolower(*p);
+ p++;
+ }
+}
+
+void MqttUpdateStatusTopic()
+{
+ if (OperatingParameters.MqttEnabled && OperatingParameters.MqttConnected)
+ {
+ std::string mode = hvacModeToString(OperatingParameters.hvacSetMode);
+ std::string curr_mode = hvacModeToMqttCurrMode(OperatingParameters.hvacOpMode);
+ StaticJsonDocument<200> payload;
+ // payload["inputstatus"] = "ON";
+ std::string hum(16, '\0');
+ auto written = std::snprintf(&hum[0], hum.size(), "%.2f", (OperatingParameters.humidCurrent + OperatingParameters.humidityCorrection));
+ hum.resize(written);
+ payload["Humidity"] = hum;
+ // payload["Humidity"] = OperatingParameters.humidCurrent + OperatingParameters.humidityCorrection;
+ std::string temp(16, '\0');
+ written = std::snprintf(&temp[0], temp.size(), "%.2f", (OperatingParameters.tempCurrent + OperatingParameters.tempCorrection));
+ temp.resize(written);
+ payload["Temperature"] = temp;
+ // payload["Temperature"] = OperatingParameters.tempCurrent + OperatingParameters.tempCorrection;
+ //@@@ Should the following line be part of an "else" for the next "if" statement???
+ payload["Setpoint"] = OperatingParameters.tempSet;
+
+ makeLower(mode.c_str());
+ payload["Mode"] = mode;
+
+ makeLower(curr_mode.c_str());
+ payload["CurrMode"] = curr_mode;
+
+ if (OperatingParameters.hvacSetMode == AUTO)
+ {
+ payload["LowSetpoint"] = OperatingParameters.tempSetAutoMin;
+ payload["HighSetpoint"] = OperatingParameters.tempSetAutoMax;
+ }
+
+ std::string strPayload;
+ serializeJson(payload, strPayload);
+ ESP_LOGI (TAG, "%s", strPayload.c_str());
+
+ std::string topic;
+ topic = g_mqttStatusTopic;
+ // if(g_mqttPubSub.connected())
+ // {
+ MqttPublish(topic.c_str(), strPayload.c_str(), false);
+ // }
+ }
+}
+
+void MqttHomeAssistantDiscovery()
+{
+ CustomWriter writer;
+ static char mac[24];
+ // std::string UniqueId;
+ std::string discoveryTopic;
+ std::string payload;
+ std::string strPayload;
+
+ // printf ("Status of MQTT connectedion: %s\n", (g_mqttPubSub.connected() ? "Connected" : "NOT Connected"));
+
+ if (!OperatingParameters.MqttEnabled || !OperatingParameters.MqttConnected)
+ // if (!OperatingParameters.MqttEnabled || !OperatingParameters.MqttStarted)
+ {
+ ESP_LOGE(TAG, "MQTT not enabled or not connected!");
+ return;
+ }
+
+ // if(g_mqttPubSub.connected())
+ {
+ ESP_LOGI(TAG, "Send Home Assistant Discovery...");
+ StaticJsonDocument<700> payload;
+ JsonObject device;
+ JsonArray modes;
+ JsonArray identifiers;
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Temperature
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // discoveryTopic = "homeassistant/sensor/esp32iotsensor/" + g_deviceName + "_temp" + "/config";
+ // discoveryTopic = "homeassistant/climate/thermostat/" + g_deviceName + "_temp" + "/config";
+ discoveryTopic = "homeassistant/climate/" + g_deviceName + "/thermostat/config";
+
+ snprintf (mac, sizeof(mac), "%02x%02x%02x%02x%02x%02x",
+ OperatingParameters.mac[0],
+ OperatingParameters.mac[1],
+ OperatingParameters.mac[2],
+ OperatingParameters.mac[3],
+ OperatingParameters.mac[4],
+ OperatingParameters.mac[5]);
+ // UniqueId = mac;
+ // printf ("Mac: %s\n", mac);
+
+ // payload["name"] = g_deviceName + ".temp";
+ payload["name"] = ""; //@@@g_friendlyName;
+ // payload["uniq_id"] = UniqueId + "_temp";
+ payload["uniq_id"] = mac;
+ // payload["power_command_topic"] = g_deviceName + "/power/set";
+
+ modes = payload.createNestedArray("modes");
+ modes.add("off");
+ modes.add("heat");
+ if (OperatingParameters.hvacCoolEnable)
+ {
+ modes.add("cool");
+ modes.add("auto");
+ }
+ if (OperatingParameters.hvacFanEnable)
+ modes.add("fan_only");
+
+ payload["~"] = g_mqttStatusTopic;
+ payload["act_t"] = "~";
+ payload["act_tpl"] = "{{ value_json.CurrMode }}";
+ // payload["stat_t"] = g_mqttStatusTopic + "/temperature";
+ payload["curr_temp_t"] = "~";
+ payload["curr_temp_tpl"] = "{{ value_json.Temperature|float }}";
+ payload["temp_stat_t"] = "~";
+ payload["temp_stat_tpl"] = "{{ value_json.Setpoint }}";
+ payload["mode_stat_t"] = "~";
+ payload["mode_stat_tpl"] = "{{ value_json.Mode }}";
+ payload["current_humidity_topic"] = "~";
+ payload["current_humidity_template"] = "{{ value_json.Humidity|float }}";
+ if (OperatingParameters.hvacFanEnable)
+ {
+ payload["fan_mode_stat_t"] = "~";
+ payload["fan_mode_stat_tpl"] = "{{ value_json.Mode }}";
+ payload["fan_mode_cmd_t"] = g_deviceName + "/set/fan";
+ modes = payload.createNestedArray("fan_modes");
+ modes.add("off");
+ modes.add("on");
+ }
+ if (OperatingParameters.hvacCoolEnable)
+ {
+ // Auto is enabled, so we need to specify hi & lo temps
+ payload["temp_lo_stat_t"] = "~";
+ payload["temp_lo_stat_tpl"] = "{{ value_json.LowSetpoint }}";
+ payload["temp_hi_stat_t"] = "~";
+ payload["temp_hi_stat_tpl"] = "{{ value_json.HighSetpoint }}";
+ }
+
+ payload["mode_cmd_t"] = g_deviceName + "/set/mode";
+ payload["temp_cmd_t"] = g_deviceName + "/set/temp";
+
+ // payload["dev_cla"] = "temperature";
+ // payload["val_tpl"] = "{{ value_json.temp | is_defined }}";
+ // payload["unit_of_meas"] = "°C";
+ payload["temp_unit"] = &OperatingParameters.tempUnits;
+
+ device = payload.createNestedObject("device");
+ device["name"] = g_friendlyName;
+ device["mdl"] = g_deviceModel;
+ device["sw"] = g_swVersion;
+ device["mf"] = g_manufacturer;
+ std::string ip = wifiAddress();
+ device["cu"] = "http://" + ip; //@@@ Must be updated if dhcp address changes
+
+ identifiers = device.createNestedArray("identifiers");
+ identifiers.add(mac);
+
+ serializeJsonPretty(payload, writer);
+ serializeJson(payload, strPayload);
+ ESP_LOGI (TAG, "Payload: %s", strPayload.c_str());
+
+ xEventGroupClearBits (s_mqtt_event_group, MQTT_EVENT_PUB_BIT | MQTT_ERROR_BIT);
+
+ // g_mqttPubSub.publish(discoveryTopic.c_str(), strPayload.c_str());
+ MqttPublish(discoveryTopic.c_str(), strPayload.c_str(), true);
+
+ EventBits_t bits = xEventGroupWaitBits(s_mqtt_event_group,
+ MQTT_EVENT_PUB_BIT | MQTT_ERROR_BIT,
+ pdFALSE,
+ pdFALSE,
+ xTicksToWait);
+
+ if (bits & MQTT_ERROR_BIT)
+ ESP_LOGE(TAG, "Publish failed");
+
+
+#if 0
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Humidity
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ payload.clear();
+ device.clear();
+ identifiers.clear();
+ strPayload.clear();
+
+ discoveryTopic = "homeassistant/climate/thermostat/" + g_deviceName + "_hum" + "/config";
+
+ payload["name"] = g_deviceName + ".hum";
+ // payload["uniq_id"] = UniqueId + "_hum";
+ payload["stat_t"] = g_mqttStatusTopic;
+ payload["dev_cla"] = "humidity";
+ payload["val_tpl"] = "{{ value_json.hum | is_defined }}";
+ payload["unit_of_meas"] = "%";
+ device = payload.createNestedObject("device");
+ device["name"] = g_deviceName;
+ device["model"] = g_deviceModel;
+ device["sw_version"] = g_swVersion;
+ device["manufacturer"] = g_manufacturer;
+ identifiers = device.createNestedArray("identifiers");
+ identifiers.add("UniqueId2");
+
+ serializeJsonPretty(payload, writer);
+ ESP_LOGI (TAG, "test2");
+ serializeJson(payload, strPayload);
+ printf ("Payload: %s\n", strPayload.c_str());
+
+ xEventGroupClearBits (s_mqtt_event_group, MQTT_EVENT_PUB_BIT | MQTT_ERROR_BIT);
+
+ // g_mqttPubSub.publish(discoveryTopic.c_str(), strPayload.c_str());
+ MqttPublish(discoveryTopic.c_str(), strPayload.c_str(), true);
+
+ bits = xEventGroupWaitBits(s_mqtt_event_group,
+ MQTT_EVENT_PUB_BIT | MQTT_ERROR_BIT,
+ pdFALSE,
+ pdFALSE,
+ xTicksToWait);
+
+ if (bits & MQTT_ERROR_BIT)
+ ESP_LOGE(TAG, "Publish failed");
+
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // Binary Door
+ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ payload.clear();
+ device.clear();
+ identifiers.clear();
+ strPayload.clear();
+
+ discoveryTopic = "homeassistant/climate/thermostat/" + g_deviceName + "_door" + "/config";
+
+ payload["name"] = g_deviceName + ".door";
+ payload["uniq_id"] = UniqueId + "_door";
+ payload["stat_t"] = g_mqttStatusTopic;
+ payload["dev_cla"] = "door";
+ payload["val_tpl"] = "{{ value_json.inputstatus | is_defined }}";
+ device = payload.createNestedObject("device");
+ device["name"] = g_deviceName;
+ device["model"] = g_deviceModel;
+ device["sw_version"] = g_swVersion;
+ device["manufacturer"] = g_manufacturer;
+ identifiers = device.createNestedArray("identifiers");
+ identifiers.add(UniqueId);
+
+ // serializeJsonPretty(payload, writer);
+ ESP_LOGI (TAG, "test3");
+ serializeJson(payload, strPayload);
+
+ // g_mqttPubSub.publish(discoveryTopic.c_str(), strPayload.c_str());
+#endif
+
+ }
+}
+
+void MqttSubscribeTopic(esp_mqtt_client_handle_t client, std::string topic)
+{
+ int msg_id;
+ msg_id = esp_mqtt_client_subscribe(client, topic.c_str(), 1);
+ if (msg_id < 0)
+ ESP_LOGE (TAG, "Subscribe topic FAILED, Topic=%s, msg_id=%d", topic.c_str(), msg_id);
+ else
+ ESP_LOGI (TAG, "Subscribe topic successful, Topic=%s, msg_id=%d", topic.c_str(), msg_id);
+}
+
+bool MqttConnect(void)
+{
+ ESP_LOGI(__FUNCTION__, "Connecting to MQTT broker");
+ esp_mqtt_client_config_t mqtt_cfg;
+ memset(&mqtt_cfg, 0, sizeof(esp_mqtt_client_config_t));
+
+ // Build up the fully qualified MQTT URI host string
+ char port[16];
+ snprintf (port, 15, "%d", OperatingParameters.MqttBrokerPort);
+ std::string _host = OperatingParameters.MqttBrokerHost;
+ std::string host = "mqtt://" + _host + ":" + port;
+
+//@@@
+ // OperatingParameters.MqttBrokerHost = (char *)malloc(64);
+ // strcpy (OperatingParameters.MqttBrokerHost, "mqtt://hass.meisners.net:1883");
+ // OperatingParameters.MqttBrokerUsername = (char *)malloc(16);
+ // strcpy (OperatingParameters.MqttBrokerUsername, "homeassistant");
+ // OperatingParameters.MqttBrokerPassword = (char *)malloc(72);
+ // strcpy (OperatingParameters.MqttBrokerPassword, "einiiZeiphah4ish0Rowae7doh0OhNg6wahngohmie4iNae1meipainaeyijai5i");
+
+ ESP_LOGI(TAG, "Broker FQDN: %s", host.c_str());
+ ESP_LOGI(TAG, "Broker: %s", OperatingParameters.MqttBrokerHost);
+ ESP_LOGI(TAG, "Username: %s", OperatingParameters.MqttBrokerUsername);
+ ESP_LOGI(TAG, "Password: %s", OperatingParameters.MqttBrokerPassword);
+ // mqtt_cfg.broker.address.uri = "mqtt://iot.eclipse.org";
+ // mqtt_cfg.broker.address.uri = "mqtt://test.mosquitto.org:1883";
+ // mqtt_cfg.broker.address.transport = MQTT_TRANSPORT_OVER_TCP;
+ mqtt_cfg.broker.address.uri = host.c_str();
+ // mqtt_cfg.broker.address.hostname = "mqtt://homeassistant.meisners.net:1883";
+ // mqtt_cfg.broker.address.port = 1883;
+ // mqtt_cfg.credentials.username = "mqtt";
+ mqtt_cfg.credentials.username = OperatingParameters.MqttBrokerUsername;
+ mqtt_cfg.credentials.set_null_client_id = true;
+ // mqtt_cfg.credentials.authentication.password = "mqtt";
+ mqtt_cfg.credentials.authentication.password = OperatingParameters.MqttBrokerPassword;
+
+
+ // = {
+ // .uri = "mqtt://iot.eclipse.org",
+ // .event_handle = mqtt_event_handler,
+ // // .user_context = (void *)your_context
+ // };
+
+ esp_mqtt_client_handle_t client = esp_mqtt_client_init(&mqtt_cfg);
+ if (client == NULL)
+ {
+ ESP_LOGE(TAG, "Failed to init client!");
+ return false;
+ }
+ OperatingParameters.MqttClient = client;
+
+ xEventGroupClearBits (s_mqtt_event_group, MQTT_EVENT_CONNECTED_BIT | MQTT_ERROR_BIT | MQTT_EVENT_DISCONNECTED_BIT);
+
+ esp_err_t err;
+ err = esp_mqtt_client_register_event (client, MQTT_EVENT_ANY, MqttEventHandler, client);
+ if (err != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Failed to register client: 0x%x", err);
+ if (err == ESP_ERR_NO_MEM) ESP_LOGE(TAG, "ESP_ERR_NO_MEM");
+ if (err == ESP_ERR_INVALID_ARG) ESP_LOGE(TAG, "ESP_ERR_INVALID_ARG");
+ esp_mqtt_client_destroy(client);
+ return false;
+ }
+
+ err = esp_mqtt_client_start(client);
+ if (err != ESP_OK)
+ {
+ ESP_LOGE(TAG, "Failed to start client: 0x%x", err);
+ if (err == ESP_FAIL) ESP_LOGE(TAG, "ESP_FAIL");
+ if (err == ESP_ERR_INVALID_ARG) ESP_LOGE(TAG, "ESP_ERR_INVALID_ARG");
+ esp_mqtt_client_unregister_event(client, MQTT_EVENT_ANY, MqttEventHandler);
+ esp_mqtt_client_destroy(client);
+ return false;
+ }
+
+ EventBits_t bits = xEventGroupWaitBits(s_mqtt_event_group,
+ MQTT_EVENT_CONNECTED_BIT | MQTT_ERROR_BIT | MQTT_EVENT_DISCONNECTED_BIT,
+ pdFALSE,
+ pdFALSE,
+ xTicksToWait);
+
+ // bits == 0 means timeout
+ if ((bits == 0) || (bits & MQTT_ERROR_BIT) || (bits & MQTT_EVENT_DISCONNECTED_BIT))
+ {
+ ESP_LOGE (TAG, "MQTT Connect failed");
+ // esp_mqtt_client_stop(client); // Commented out since connect never worked
+ ESP_LOGW(TAG, "Removing MQTT data structures");
+ esp_mqtt_client_unregister_event(client, MQTT_EVENT_ANY, MqttEventHandler);
+ esp_mqtt_client_destroy(client);
+ return false;
+ }
+
+ if (bits & MQTT_EVENT_CONNECTED_BIT)
+ {
+ ESP_LOGI(TAG, "Subscribing to topic %s/set/#", g_deviceName);
+ MqttSubscribeTopic(client, g_deviceName + "/set/#");
+
+ // Send discovery packet to let all listeners know we have arrived
+ MqttHomeAssistantDiscovery();
+ }
+
+ return true;
+}
+
+//@@@ Need a reconnect function
+
+//@@@ Need a disconnect function
+
+
+void MqttInit()
+{
+ esp_log_level_set("*", ESP_LOG_INFO);
+ esp_log_level_set("MQTT_CLIENT", ESP_LOG_VERBOSE);
+ esp_log_level_set("TRANSPORT_TCP", ESP_LOG_VERBOSE);
+ esp_log_level_set("TRANSPORT_SSL", ESP_LOG_VERBOSE);
+ esp_log_level_set("TRANSPORT", ESP_LOG_VERBOSE);
+ esp_log_level_set("OUTBOX", ESP_LOG_VERBOSE);
+
+ if (!OperatingParameters.MqttEnabled)
+ {
+ ESP_LOGW(TAG, "MQTT is not enabled!");
+ return;
+ }
+
+ /* Initialize event group */
+ s_mqtt_event_group = xEventGroupCreate();
+
+ ESP_LOGI(TAG, "MQTT Startup...");
+ if (!wifiConnected())
+ {
+ ESP_LOGE(TAG, "Attempting to start MQTT when wifi connection down");
+ return;
+ }
+
+ g_deviceName = OperatingParameters.DeviceName;
+ g_friendlyName = OperatingParameters.FriendlyName;
+ g_mqttStatusTopic = g_deviceName + "/status";
+ OperatingParameters.MqttConnected = false;
+}
+
+#endif // #ifdef MQTT_ENABLED
diff --git a/app/src/sensors.cpp b/app/src/sensors.cpp
index eab34ab..04006ee 100644
--- a/app/src/sensors.cpp
+++ b/app/src/sensors.cpp
@@ -37,11 +37,11 @@ const char *gmt_timezones[] =
{"GMT-12", "GMT-11", "GMT-10", "GMT-9", "GMT-8", "GMT-7", "GMT-6", "GMT-5", "GMT-4", "GMT-3", "GMT-2", "GMT-1"
"GMT", "GMT+1", "GMT+2", "GMT+3", "GMT+4", "GMT+5", "GMT+6", "GMT+7", "GMT+8", "GMT+9", "GMT+10", "GMT+11"};
-int32_t lastTimeUpdate = 0;
+int64_t lastTimeUpdate = 0;
Stream RadarPort;
ld2410 radar;
-uint32_t last_ld2410_Reading = 0;
+uint64_t last_ld2410_Reading = 0;
Smoothed sensorTemp;
Smoothed sensorHumidity;
@@ -49,7 +49,27 @@ Smoothed sensorHumidity;
adc_unit_t adcUnit;
adc_channel_t adcChannel;
adc_oneshot_unit_handle_t adcHandle;
-#define EXAMPLE_ADC_ATTEN ADC_ATTEN_DB_11
+#define EXAMPLE_ADC_ATTEN ADC_ATTEN_DB_11
+
+
+void updateHvacMode(HVAC_MODE mode)
+{
+ OperatingParameters.hvacSetMode = mode;
+ eepromUpdateHvacSetMode();
+#ifdef MQTT_ENABLED
+ MqttUpdateStatusTopic();
+#endif
+}
+
+void updateHvacSetTemp(float setTemp)
+{
+ OperatingParameters.tempSet = setTemp;
+ eepromUpdateHvacSetTemp();
+ ESP_LOGI(TAG, "Set temp: %.1f", setTemp);
+#ifdef MQTT_ENABLED
+ MqttUpdateStatusTopic();
+#endif
+}
/*---------------------------------------------------------------
ADC Code (for light sensor)
@@ -107,7 +127,6 @@ float roundValue(float value, int places)
r = (float)((int)(value + 0.5));
if (places == 1)
r = (float)((int)(value + 0.25) + (getRoundedFrac(value + 0.25) / 10.0));
- ESP_LOGI(TAG, "%.1f", r);
return r;
}
@@ -145,33 +164,30 @@ bool ld2410_init()
if (radar.begin(RadarPort))
{
- printf("LD2410: Sensor started\n");
+ ESP_LOGI(TAG, "LD2410: Sensor started");
rc = true;
if (radar.requestFirmwareVersion())
{
- printf ("LD2410: Firmware: v%u.%02u.%u%u%u%u\n",
+ ESP_LOGI(TAG, "LD2410: Firmware: v%u.%02u.%08x",
radar.firmware_major_version,
radar.firmware_minor_version,
- (uint8_t)(radar.firmware_bugfix_version & 0xff000000) >> 24,
- (uint8_t)(radar.firmware_bugfix_version & 0x00ff0000) >> 16,
- (uint8_t)(radar.firmware_bugfix_version & 0x0000ff00) >> 8,
- (uint8_t)radar.firmware_bugfix_version & 0x000000ff
+ radar.firmware_bugfix_version
);
} else {
- printf ("LD2410: Failed to read firmware version\n");
+ ESP_LOGE(TAG, "LD2410: Failed to read firmware version\n");
}
if (radar.requestCurrentConfiguration())
{
- printf("LD2410: Maximum gate ID: %d\n", radar.max_gate);
- printf("LD2410: Maximum gate for moving targets: %d\n", radar.max_moving_gate);
- printf("LD2410: Maximum gate for stationary targets: %d\n", radar.max_stationary_gate);
- printf("LD2410: Idle time for targets: %d\n", radar.sensor_idle_time);
- printf("LD2410: Gate sensitivity\n");
+ ESP_LOGI(TAG, "LD2410: Maximum gate ID: %d", radar.max_gate);
+ ESP_LOGI(TAG, "LD2410: Maximum gate for moving targets: %d", radar.max_moving_gate);
+ ESP_LOGI(TAG, "LD2410: Maximum gate for stationary targets: %d", radar.max_stationary_gate);
+ ESP_LOGI(TAG, "LD2410: Idle time for targets: %d", radar.sensor_idle_time);
+ ESP_LOGI(TAG, "LD2410: Gate sensitivity");
for (uint8_t gate = 0; gate <= radar.max_gate; gate++)
{
- printf(" Gate %d moving targets: %d stationary targets: %d\n",
+ ESP_LOGI(TAG, " Gate %d moving targets: %d stationary targets: %d",
gate, radar.motion_sensitivity[gate], radar.stationary_sensitivity[gate]);
}
}
@@ -189,15 +205,15 @@ bool ld2410_init()
// limited to 0 (0.75m). Use this to also change the inactivity timer.
//
//bool setMaxValues(uint16_t moving, uint16_t stationary, uint16_t inactivityTimer);
- if (radar.setMaxValues(1, 0, (MOTION_TIMEOUT / 2000))) printf ("LD2410: Max gate values set\n"); else printf ("LD2410: FAILED to set max gate values\n");
+ if (radar.setMaxValues(1, 0, (MOTION_TIMEOUT / 2000))) ESP_LOGI(TAG, "LD2410: Max gate values set"); else ESP_LOGE(TAG, "LD2410: FAILED to set max gate values");
//
// Now request a restart to enable all the setting specified above
//
- if (radar.requestRestart()) printf ("LD2410: Restart requested\n"); else printf ("LD2410: FAILED requesting restart\n");
+ if (radar.requestRestart()) ESP_LOGW(TAG, "LD2410: Restart requested"); else ESP_LOGE(TAG, "LD2410: FAILED requesting restart");
}
else
{
- printf ("LD2410: Sensor not connected\n");
+ ESP_LOGE(TAG, "LD2410: Sensor not connected");
rc = false;
}
return rc;
@@ -272,6 +288,9 @@ void updateAht(void *parameter)
ESP_LOGI(TAG, "Temp: %0.1f (raw: %0.2f %c) Humidity: %0.1f (raw: %0.2f)",
sensorTemp.get(), temperature, OperatingParameters.tempUnits, sensorHumidity.get(), humidity);
+#ifdef MQTT_ENABLED
+ MqttUpdateStatusTopic();
+#endif
}
else
ESP_LOGE(TAG, "Error reading data: %d (%s)", res, esp_err_to_name(res));
@@ -280,6 +299,27 @@ void updateAht(void *parameter)
}
}
+bool startAht()
+{
+ if (initAht())
+ {
+ xTaskCreate(
+ updateAht, // Function that should be called
+ "Update AHT", // Name of the task (for debugging)
+ 4096, // Stack size (bytes)
+ NULL, // Parameter to pass
+ tskIDLE_PRIORITY + 1, // Task priority
+ NULL // Task handle
+ );
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
// Read sensor temp and return rounded up and correction applied
int getTemp()
{
@@ -317,10 +357,10 @@ void updateTimezone()
tzset();
}
-bool getLocalTime(struct tm * info, uint32_t ms)
+bool getLocalTime(struct tm * info, uint64_t ms)
{
- uint32_t start = millis();
- uint32_t tmo = ms;
+ uint64_t start = millis();
+ uint64_t tmo = ms;
time_t now;
if (!wifiConnected())
@@ -376,34 +416,14 @@ void initTimeSntp()
/*---------------------------------------------------------------
Init code for sensors entry point
---------------------------------------------------------------*/
-bool sensorsInit()
+void sensorsInit()
{
sensorTemp.begin(SMOOTHED_EXPONENTIAL, 10);
sensorHumidity.begin(SMOOTHED_EXPONENTIAL, 10);
sensorTemp.clear();
sensorHumidity.clear();
- initTimeSntp();
-
+ startAht();
ld2410_init();
-
initLightSensor();
-
- if (initAht())
- {
- xTaskCreate(
- updateAht, // Function that should be called
- "Update AHT", // Name of the task (for debugging)
- 4096, // Stack size (bytes)
- NULL, // Parameter to pass
- tskIDLE_PRIORITY + 1, // Task priority
- NULL // Task handle
- );
-
- return true;
- }
- else
- {
- return false;
- }
}
diff --git a/app/src/state_machine.cpp b/app/src/state_machine.cpp
index 6e9870d..68e98ab 100644
--- a/app/src/state_machine.cpp
+++ b/app/src/state_machine.cpp
@@ -9,10 +9,12 @@
* Copyright (c) 2023 Steve Meisner (steve@meisners.net)
*
* Notes:
+ * Need to add support for reversing valve (when aux heat enabled)
*
* History
* 17-Aug-2023: Steve Meisner (steve@meisners.net) - Initial version
* 30-Aug-2023: Steve Meisner (steve@meisners.net) - Rewrote to support ESP-IDF framework instead of Arduino
+ * 11-Oct-2023: Steve Meisner (steve@meisners.net) - Add suport for home automation (MQTT & Matter)
*
*/
@@ -22,8 +24,11 @@
#define LOW 0
OPERATING_PARAMETERS OperatingParameters;
-extern int32_t lastTimeUpdate;
-int32_t lastWifiReconnect = 0;
+extern int64_t lastTimeUpdate;
+int64_t lastWifiReconnect = 0;
+#ifdef MQTT_ENABLED
+int64_t lastMqttReconnect = 0;
+#endif
void stateMachine(void *parameter)
{
@@ -31,6 +36,11 @@ void stateMachine(void *parameter)
float minTemp, maxTemp;
float autoMinTemp, autoMaxTemp;
+#ifdef MQTT_ENABLED
+ // This will cause the first pass to make a connect attempt
+ lastMqttReconnect = MQTT_RECONNECT_DELAY * -1;
+#endif
+
for (;;) // infinite loop
{
OperatingParameters.lightDetected = readLightSensor();
@@ -57,9 +67,9 @@ void stateMachine(void *parameter)
gpio_set_level((gpio_num_t)LED_HEAT_PIN, LOW);
gpio_set_level((gpio_num_t)LED_FAN_PIN, LOW);
}
- else if (OperatingParameters.hvacSetMode == FAN)
+ else if (OperatingParameters.hvacSetMode == FAN_ONLY)
{
- OperatingParameters.hvacOpMode = FAN;
+ OperatingParameters.hvacOpMode = FAN_ONLY;
gpio_set_level((gpio_num_t)HVAC_HEAT_PIN, LOW);
gpio_set_level((gpio_num_t)HVAC_COOL_PIN, LOW);
gpio_set_level((gpio_num_t)HVAC_FAN_PIN, HIGH);
@@ -172,7 +182,7 @@ void stateMachine(void *parameter)
}
}
- if ((currentTemp >= minTemp) && (currentTemp <= maxTemp) && (OperatingParameters.hvacSetMode != FAN) && (OperatingParameters.hvacSetMode != OFF))
+ if ((currentTemp >= minTemp) && (currentTemp <= maxTemp) && (OperatingParameters.hvacSetMode != FAN_ONLY) && (OperatingParameters.hvacSetMode != OFF))
{
OperatingParameters.hvacOpMode = IDLE;
gpio_set_level((gpio_num_t)HVAC_HEAT_PIN, LOW);
@@ -192,6 +202,18 @@ void stateMachine(void *parameter)
OperatingParameters.wifiConnected = wifiConnected();
+#ifdef MQTT_ENABLED
+ if ((OperatingParameters.wifiConnected) && (OperatingParameters.MqttEnabled) && (!OperatingParameters.MqttConnected))
+ {
+ if (millis() > (lastMqttReconnect + MQTT_RECONNECT_DELAY))
+ {
+ lastMqttReconnect = millis();
+ //@@@ Should be a "reconnect"
+ MqttConnect();
+ }
+ }
+#endif
+
// Check wifi
#ifdef MATTER_ENABLED
if ((!OperatingParameters.wifiConnected) && (strlen(WifiCreds.ssid)) && (!OperatingParameters.MatterStarted))
@@ -199,7 +221,7 @@ void stateMachine(void *parameter)
if ((!OperatingParameters.wifiConnected) && (strlen(WifiCreds.ssid)))
#endif
{
- if (millis() > lastWifiReconnect + 60000)
+ if (millis() > lastWifiReconnect + WIFI_CONNECT_INTERVAL)
{
lastWifiReconnect = millis();
startReconnectTask();
@@ -255,40 +277,8 @@ void stateCreateTask()
xTaskCreate(
stateMachine,
"State Machine",
- 4096,
+ 8192,
NULL,
tskIDLE_PRIORITY - 1,
NULL);
}
-
-void testToggleRelays()
-{
- vTaskDelay(pdMS_TO_TICKS(500));
- gpio_reset_pin((gpio_num_t)HVAC_HEAT_PIN);
- gpio_set_direction((gpio_num_t)HVAC_HEAT_PIN, GPIO_MODE_OUTPUT);
-}
-
-void serialStart()
-{
- //
- // Serial port mapping:
- //
- // Serial relates to the onboard UART port
- // Serial1 is mapped (I believe) to the SWD port
- // Serial2 is the USB port directly connected to the ESP32
- // NB: Serial2 is remapped to provide serial comms with the LD2410
- //
- // Do not use Serial2 as this will disable firmware uploading
- // and debugging via the USB port. It will also cause the USB
- // interface to not show up as a USB device to the host.
- //
-
- // int32_t tmo = millis() + 60000;
- //Serial.begin(115200);
- // Serial.setDebugOutput(true);
- printf("UART Serial port (via UART-USB adapter -> usually /dev/ttyUSB0)\n");
-
- // Serial1.begin(115200);
- // Serial1.setDebugOutput(true);
- // Serial1.printf("SERIAL1\n");
-}
\ No newline at end of file
diff --git a/app/src/tft.cpp b/app/src/tft.cpp
index 1174d8e..c4be1bf 100644
--- a/app/src/tft.cpp
+++ b/app/src/tft.cpp
@@ -20,6 +20,7 @@
* History
* 17-Aug-2023: Steve Meisner (steve@meisners.net) - Initial version
* 30-Aug-2023: Steve Meisner (steve@meisners.net) - Rewrote to support ESP-IDF framework instead of Arduino
+ * 11-Oct-2023: Steve Meisner (steve@meisners.net) - Add suport for home automation (MQTT & Matter)
*
*/
@@ -31,28 +32,30 @@
static char thermostatModes[48] = {0};
TaskHandle_t xTouchUIHandle;
-int32_t lastTouchDetected = 0;
+int64_t lastTouchDetected = 0;
bool tftTouchTimerEnabled = true;
-int32_t ui_WifiStatusLabel_timestamp = 0;
+int64_t ui_WifiStatusLabel_timestamp = 0;
uint16_t calData_2_8[8] = { 3839, 336, 3819, 3549, 893, 390, 718, 3387 };
uint16_t calData_3_2[8] = { 3778, 359, 3786, 3803, 266, 347, 258, 3769 };
uint16_t calData[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-int32_t lastMotionDetected = 0;
+int64_t lastMotionDetected = 0;
volatile bool tftMotionTrigger = false;
+#define TAG "TFT"
+
#ifdef __cplusplus
extern "C" {
#endif
void tftDisableTouchTimer()
{
- printf ("Disabling touch timer\n");
+ ESP_LOGI(TAG, "Disabling touch/motion timer");
tftTouchTimerEnabled = false;
}
void tftEnableTouchTimer()
{
- printf ("Enabling touch timer\n");
+ ESP_LOGI(TAG, "Enabling touch/motion timer");
tftTouchTimerEnabled = true;
}
@@ -99,7 +102,7 @@ void tftWakeDisplayMotion()
// float ratio = (float)(OperatingParameters.lightDetected) / 3150.0; // Measured in mV (max = 3.15 V)
int brightness = (int)(ratio * (float)(FULL_BRIGHTNESS));
tftShowDisplayItems();
- printf ("Setting display to partial brightness: %d (%d%%)\n",
+ ESP_LOGI(TAG, "Setting display to partial brightness: %d (%d%%)",
brightness, (int)(ratio*100.0));
tft.setBrightness(brightness);
tftEnableTouchTimer();
@@ -111,6 +114,7 @@ void tftDimDisplay()
{
if (tftTouchTimerEnabled)
{
+ ESP_LOGD(TAG, "Dimming display");
tft.setBrightness(OFF_BRIGHTNESS);
tftHideDisplayItems();
tftDisableTouchTimer();
@@ -164,23 +168,40 @@ void tftUpdateDisplay()
switch (OperatingParameters.hvacOpMode)
{
// Set color of inner circle representing the operating mode
- case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0xa00b0b), LV_PART_MAIN); break;
- case COOL: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x435deb), LV_PART_MAIN); break;
- case FAN: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x3c8945), LV_PART_MAIN); break; //@@@
- default: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x7a92b2), LV_PART_MAIN); break;
+ case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0xa00b0b), LV_PART_MAIN); break;
+ case COOL: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x435deb), LV_PART_MAIN); break;
+ case FAN_ONLY: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x3c8945), LV_PART_MAIN); break; //@@@
+ default: lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x7a92b2), LV_PART_MAIN); break;
}
switch (OperatingParameters.hvacSetMode)
{
// Set color of outer circle representing the enabled or set mode
case AUX_HEAT:
- case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xc71b1b), LV_PART_MAIN); break;
- case COOL: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x1b7dc7), LV_PART_MAIN); break;
- case FAN: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x23562b), LV_PART_MAIN); break; //@@@
- case AUTO: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xaeac40), LV_PART_MAIN); break;
- default: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7d7d7d), LV_PART_MAIN); break;
+ case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xc71b1b), LV_PART_MAIN); break;
+ case COOL: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x1b7dc7), LV_PART_MAIN); break;
+ case FAN_ONLY: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x23562b), LV_PART_MAIN); break; //@@@
+ case AUTO: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xaeac40), LV_PART_MAIN); break;
+ default: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7d7d7d), LV_PART_MAIN); break;
}
}
+#ifdef MQTT_ENABLED
+const char *hvacModeToMqttCurrMode(HVAC_MODE mode)
+{
+ switch (mode)
+ {
+ case OFF: return "off";
+ case IDLE: return "idle";
+ case AUTO: return "auto";
+ case HEAT: return "heating";
+ case COOL: return "cooling";
+ case FAN_ONLY: return "Fan_only";
+ case AUX_HEAT: return "Aux Heat";
+ default: return "Error";
+ }
+}
+#endif
+
const char *hvacModeToString(HVAC_MODE mode)
{
switch (mode)
@@ -190,7 +211,7 @@ const char *hvacModeToString(HVAC_MODE mode)
case AUTO: return "Auto";
case HEAT: return "Heat";
case COOL: return "Cool";
- case FAN: return "Fan";
+ case FAN_ONLY: return "Fan_only";
case AUX_HEAT: return "Aux Heat";
default: return "Error";
}
@@ -216,13 +237,13 @@ HVAC_MODE convertSelectedHvacMode()
// Check to see if the selected HVAC mode is now disabled (after config menu)
if ((OperatingParameters.hvacSetMode == AUTO) && !OperatingParameters.hvacCoolEnable)
- OperatingParameters.hvacSetMode = OFF;
- if ((OperatingParameters.hvacSetMode == FAN) && !OperatingParameters.hvacFanEnable)
- OperatingParameters.hvacSetMode = OFF;
+ updateHvacMode(OFF);
+ if ((OperatingParameters.hvacSetMode == FAN_ONLY) && !OperatingParameters.hvacFanEnable)
+ updateHvacMode(OFF);
if ((OperatingParameters.hvacSetMode == COOL) && !OperatingParameters.hvacCoolEnable)
- OperatingParameters.hvacSetMode = OFF;
+ updateHvacMode(OFF);
if ((OperatingParameters.hvacSetMode == AUX_HEAT) && !OperatingParameters.hvac2StageHeatEnable)
- OperatingParameters.hvacSetMode = OFF;
+ updateHvacMode(OFF);
// Retrieve currently selected HVAC mode
strncpy (selMode, hvacModeToString(OperatingParameters.hvacSetMode), sizeof(selMode));
@@ -251,7 +272,7 @@ void setHvacModesDropdown()
{
if ((n == AUTO) && !OperatingParameters.hvacCoolEnable)
continue;
- if ((n == FAN) && !OperatingParameters.hvacFanEnable)
+ if ((n == FAN_ONLY) && !OperatingParameters.hvacFanEnable)
continue;
if ((n == COOL) && !OperatingParameters.hvacCoolEnable)
continue;
@@ -306,8 +327,8 @@ Cal data:
// Use calData to set up touch dimensions
tft.setTouchCalibrate(calData);
// Dump data to debug logger
- printf ("Touch Screen calibration data:\n");
- for (int n=0; n < 8; n++) printf("%d : %d\n", n, calData[n]);
+ ESP_LOGI (TAG, "Touch Screen calibration data:");
+ for (int n=0; n < 8; n++) ESP_LOGI (TAG, "%d : %d", n, calData[n]);
}
void tftInit()
@@ -342,7 +363,7 @@ void tftInit()
setHvacModesDropdown();
- printf("Current temp set to %.1f°\n", OperatingParameters.tempSet);
+ ESP_LOGI (TAG, "Current temp set to %.1f°", OperatingParameters.tempSet);
lv_arc_set_value(ui_TempArc, OperatingParameters.tempSet*10);
lv_label_set_text_fmt(ui_SetTemp, "%d°", (int)OperatingParameters.tempSet);
@@ -396,7 +417,7 @@ void tftPump(void * parameter)
//
if (/*(lastMotionDetected == 0) &&*/ (!tftTouchTimerEnabled) && isCurrentScreenMain())
{
- printf("Motion wake triggered\n");
+ ESP_LOGI (TAG, "Motion wake triggered");
lastMotionDetected = millis();
OperatingParameters.motionDetected = true;
tftWakeDisplayMotion();
@@ -411,7 +432,7 @@ void tftPump(void * parameter)
{
if (millis() - lastMotionDetected > MOTION_TIMEOUT)
{
- printf ("Motion detection timeout\n");
+ ESP_LOGI (TAG, "Motion detection timeout");
OperatingParameters.motionDetected = false;
}
}
@@ -426,7 +447,7 @@ void tftCreateTask()
xTaskCreate (
tftPump,
"Touch Screen UI",
- 4096,
+ 8192,
NULL,
tskIDLE_PRIORITY+1,
&xTouchUIHandle
diff --git a/app/src/ui/CMakeLists.txt b/app/src/ui/CMakeLists.txt
index 48e926e..ce4fbdf 100644
--- a/app/src/ui/CMakeLists.txt
+++ b/app/src/ui/CMakeLists.txt
@@ -4,6 +4,8 @@ SET(SOURCES screens/ui_MainScreen.c
screens/ui_LessCommonSetup.c
screens/ui_WifiConfig.c
screens/ui_MatterConfig.c
+ screens/ui_MqttConfig.c
+ screens/ui_DeviceName.c
screens/ui_ThermostatRestart.c
ui.c
components/ui_comp_hook.c
diff --git a/app/src/ui/components/ui_comp_hook.c b/app/src/ui/components/ui_comp_hook.c
index c8b7548..351bd29 100644
--- a/app/src/ui/components/ui_comp_hook.c
+++ b/app/src/ui/components/ui_comp_hook.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
diff --git a/app/src/ui/filelist.txt b/app/src/ui/filelist.txt
index baea8d0..6f6b664 100644
--- a/app/src/ui/filelist.txt
+++ b/app/src/ui/filelist.txt
@@ -4,6 +4,8 @@ screens/ui_Setup.c
screens/ui_LessCommonSetup.c
screens/ui_WifiConfig.c
screens/ui_MatterConfig.c
+screens/ui_MqttConfig.c
+screens/ui_DeviceName.c
screens/ui_ThermostatRestart.c
ui.c
components/ui_comp_hook.c
diff --git a/app/src/ui/screens/ui_DeviceName.c b/app/src/ui/screens/ui_DeviceName.c
new file mode 100644
index 0000000..fa3555f
--- /dev/null
+++ b/app/src/ui/screens/ui_DeviceName.c
@@ -0,0 +1,90 @@
+// This file was generated by SquareLine Studio
+// SquareLine Studio version: SquareLine Studio 1.3.2
+// LVGL version: 8.3.6
+// Project name: Thermostat
+
+#include "../ui.h"
+
+void ui_DeviceName_screen_init(void)
+{
+ui_DeviceName = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_DeviceName, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_DeviceName, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_DeviceName, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_DeviceName, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_DeviceName, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_DeviceName, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameKeyboard = lv_keyboard_create(ui_DeviceName);
+lv_obj_set_width( ui_DevNameKeyboard, 320);
+lv_obj_set_height( ui_DevNameKeyboard, 148);
+lv_obj_set_x( ui_DevNameKeyboard, 0 );
+lv_obj_set_y( ui_DevNameKeyboard, 46 );
+lv_obj_set_align( ui_DevNameKeyboard, LV_ALIGN_LEFT_MID );
+lv_obj_set_style_bg_color(ui_DevNameKeyboard, lv_color_hex(0xBD6994), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_DevNameKeyboard, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DeviceHostname = lv_textarea_create(ui_DeviceName);
+lv_obj_set_width( ui_DeviceHostname, 205);
+lv_obj_set_height( ui_DeviceHostname, LV_SIZE_CONTENT); /// 20
+lv_obj_set_x( ui_DeviceHostname, -50 );
+lv_obj_set_y( ui_DeviceHostname, -97 );
+lv_obj_set_align( ui_DeviceHostname, LV_ALIGN_CENTER );
+lv_textarea_set_placeholder_text(ui_DeviceHostname,"Device Name");
+lv_textarea_set_one_line(ui_DeviceHostname,true);
+lv_obj_set_style_text_font(ui_DeviceHostname, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_DevNameSaveBtn = lv_btn_create(ui_DeviceName);
+lv_obj_set_width( ui_DevNameSaveBtn, 100);
+lv_obj_set_height( ui_DevNameSaveBtn, 36);
+lv_obj_set_x( ui_DevNameSaveBtn, -1 );
+lv_obj_set_y( ui_DevNameSaveBtn, -56 );
+lv_obj_set_align( ui_DevNameSaveBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_DevNameSaveBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_DevNameSaveBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_DevNameSaveBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_DevNameSaveBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_DevNameSaveBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_DevNameSaveBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameSaveLabel = lv_label_create(ui_DeviceName);
+lv_obj_set_width( ui_DevNameSaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DevNameSaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DevNameSaveLabel, 109 );
+lv_obj_set_y( ui_DevNameSaveLabel, -56 );
+lv_obj_set_align( ui_DevNameSaveLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_DevNameSaveLabel,"Save");
+lv_obj_set_style_text_color(ui_DevNameSaveLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_DevNameSaveLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameCancelBtn = lv_btn_create(ui_DeviceName);
+lv_obj_set_width( ui_DevNameCancelBtn, 100);
+lv_obj_set_height( ui_DevNameCancelBtn, 36);
+lv_obj_set_x( ui_DevNameCancelBtn, -1 );
+lv_obj_set_y( ui_DevNameCancelBtn, -96 );
+lv_obj_set_align( ui_DevNameCancelBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_DevNameCancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_DevNameCancelBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_DevNameCancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_DevNameCancelBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_DevNameCancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_DevNameCancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameCancelLabel = lv_label_create(ui_DeviceName);
+lv_obj_set_width( ui_DevNameCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DevNameCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DevNameCancelLabel, 109 );
+lv_obj_set_y( ui_DevNameCancelLabel, -96 );
+lv_obj_set_align( ui_DevNameCancelLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_DevNameCancelLabel,"Cancel");
+lv_obj_set_style_text_color(ui_DevNameCancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_DevNameCancelLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_keyboard_set_textarea(ui_DevNameKeyboard,ui_DeviceHostname);
+lv_obj_add_event_cb(ui_DeviceHostname, ui_event_DeviceHostname, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_DevNameSaveBtn, ui_event_DevNameSaveBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_DevNameCancelBtn, ui_event_DevNameCancelBtn, LV_EVENT_ALL, NULL);
+
+}
diff --git a/app/src/ui/screens/ui_Info.c b/app/src/ui/screens/ui_Info.c
index 2bf3e18..f661748 100644
--- a/app/src/ui/screens/ui_Info.c
+++ b/app/src/ui/screens/ui_Info.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,152 +7,151 @@
void ui_Info_screen_init(void)
{
- ui_Info = lv_obj_create(NULL);
- lv_obj_add_state(ui_Info, LV_STATE_USER_1); /// States
- lv_obj_clear_flag(ui_Info, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_Info, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_Info, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_Info, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_Info, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_Info, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_WifiConnectedLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_WifiConnectedLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_WifiConnectedLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_WifiConnectedLabel, 7);
- lv_obj_set_y(ui_WifiConnectedLabel, -100);
- lv_obj_set_align(ui_WifiConnectedLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_WifiConnectedLabel, "Connected:");
- lv_obj_set_style_text_font(ui_WifiConnectedLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_WifiConnCheckBox = lv_checkbox_create(ui_Info);
- lv_checkbox_set_text(ui_WifiConnCheckBox, "");
- lv_obj_set_width(ui_WifiConnCheckBox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_WifiConnCheckBox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_WifiConnCheckBox, 120);
- lv_obj_set_y(ui_WifiConnCheckBox, 8);
- lv_obj_add_flag(ui_WifiConnCheckBox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_WifiConnCheckBox, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_CLICK_FOCUSABLE); /// Flags
- lv_obj_set_style_text_font(ui_WifiConnCheckBox, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- lv_obj_set_style_bg_color(ui_WifiConnCheckBox, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_WifiConnCheckBox, 0, LV_PART_INDICATOR | LV_STATE_DEFAULT);
- lv_obj_set_style_border_width(ui_WifiConnCheckBox, 1, LV_PART_INDICATOR | LV_STATE_DEFAULT);
-
- ui_WifiSsidLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_WifiSsidLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_WifiSsidLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_WifiSsidLabel, 160);
- lv_obj_set_y(ui_WifiSsidLabel, -100);
- lv_obj_set_align(ui_WifiSsidLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_WifiSsidLabel, "SSID:");
- lv_obj_set_style_text_font(ui_WifiSsidLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_IPLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_IPLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_IPLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_IPLabel, 7);
- lv_obj_set_y(ui_IPLabel, -74);
- lv_obj_set_align(ui_IPLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_IPLabel, "IP Address:");
- lv_obj_set_style_text_font(ui_IPLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_HostnameLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_HostnameLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HostnameLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HostnameLabel, 7);
- lv_obj_set_y(ui_HostnameLabel, -48);
- lv_obj_set_align(ui_HostnameLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_HostnameLabel, "Hostname:");
- lv_obj_set_style_text_font(ui_HostnameLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_RssiLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_RssiLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_RssiLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_RssiLabel, 7);
- lv_obj_set_y(ui_RssiLabel, -22);
- lv_obj_set_align(ui_RssiLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_RssiLabel, "Signal:");
- lv_obj_set_style_text_font(ui_RssiLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_FwVersionLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_FwVersionLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_FwVersionLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_FwVersionLabel, 7);
- lv_obj_set_y(ui_FwVersionLabel, 4);
- lv_obj_set_align(ui_FwVersionLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_FwVersionLabel, "Firmware:");
- lv_obj_set_style_text_font(ui_FwVersionLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_BuildDateLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_BuildDateLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_BuildDateLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_BuildDateLabel, 7);
- lv_obj_set_y(ui_BuildDateLabel, 30);
- lv_obj_set_align(ui_BuildDateLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_BuildDateLabel, "Build Date:");
- lv_obj_set_style_text_font(ui_BuildDateLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CopyrightLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_CopyrightLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_CopyrightLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_CopyrightLabel, 7);
- lv_obj_set_y(ui_CopyrightLabel, 56);
- lv_obj_set_align(ui_CopyrightLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_long_mode(ui_CopyrightLabel, LV_LABEL_LONG_SCROLL_CIRCULAR);
- lv_label_set_text(ui_CopyrightLabel, "Copyright: ");
- lv_obj_set_style_text_align(ui_CopyrightLabel, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_font(ui_CopyrightLabel, &lv_font_montserrat_18, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_ShowQR = lv_btn_create(ui_Info);
- lv_obj_set_width(ui_ShowQR, 100);
- lv_obj_set_height(ui_ShowQR, 36);
- lv_obj_set_x(ui_ShowQR, -108);
- lv_obj_set_y(ui_ShowQR, -3);
- lv_obj_set_align(ui_ShowQR, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_ShowQR, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_ShowQR, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_ShowQR, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_ShowQR, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_ShowQR, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_ShowQR, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_ShowQRLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_ShowQRLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_ShowQRLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_ShowQRLabel, -124);
- lv_obj_set_y(ui_ShowQRLabel, -14);
- lv_obj_set_align(ui_ShowQRLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_ShowQRLabel, "Show QR");
- lv_obj_set_style_text_color(ui_ShowQRLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_ShowQRLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_HomeBtn = lv_btn_create(ui_Info);
- lv_obj_set_width(ui_HomeBtn, 100);
- lv_obj_set_height(ui_HomeBtn, 36);
- lv_obj_set_x(ui_HomeBtn, -2);
- lv_obj_set_y(ui_HomeBtn, -3);
- lv_obj_set_align(ui_HomeBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_HomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_HomeBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_HomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_HomeBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_HomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_HomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_HomeLabel = lv_label_create(ui_Info);
- lv_obj_set_width(ui_HomeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HomeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HomeLabel, -30);
- lv_obj_set_y(ui_HomeLabel, -14);
- lv_obj_set_align(ui_HomeLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_HomeLabel, "Home");
- lv_obj_set_style_text_color(ui_HomeLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_HomeLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- lv_obj_add_event_cb(ui_ShowQR, ui_event_ShowQR, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_HomeBtn, ui_event_HomeBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_Info, ui_event_Info, LV_EVENT_ALL, NULL);
+ui_Info = lv_obj_create(NULL);
+lv_obj_add_state( ui_Info, LV_STATE_USER_1 ); /// States
+lv_obj_clear_flag( ui_Info, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_Info, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_Info, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_Info, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_Info, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_Info, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_WifiConnectedLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_WifiConnectedLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_WifiConnectedLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_WifiConnectedLabel, 7 );
+lv_obj_set_y( ui_WifiConnectedLabel, -100 );
+lv_obj_set_align( ui_WifiConnectedLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_WifiConnectedLabel,"Connected:");
+lv_obj_set_style_text_font(ui_WifiConnectedLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_WifiConnCheckBox = lv_checkbox_create(ui_Info);
+lv_checkbox_set_text(ui_WifiConnCheckBox,"");
+lv_obj_set_width( ui_WifiConnCheckBox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_WifiConnCheckBox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_WifiConnCheckBox, 120 );
+lv_obj_set_y( ui_WifiConnCheckBox, 8 );
+lv_obj_add_flag( ui_WifiConnCheckBox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_WifiConnCheckBox, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_CLICK_FOCUSABLE ); /// Flags
+lv_obj_set_style_text_font(ui_WifiConnCheckBox, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_set_style_bg_color(ui_WifiConnCheckBox, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_WifiConnCheckBox, 0, LV_PART_INDICATOR| LV_STATE_DEFAULT);
+lv_obj_set_style_border_width(ui_WifiConnCheckBox, 1, LV_PART_INDICATOR| LV_STATE_DEFAULT);
+
+ui_WifiSsidLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_WifiSsidLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_WifiSsidLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_WifiSsidLabel, 160 );
+lv_obj_set_y( ui_WifiSsidLabel, -100 );
+lv_obj_set_align( ui_WifiSsidLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_WifiSsidLabel,"SSID:");
+lv_obj_set_style_text_font(ui_WifiSsidLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_IPLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_IPLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_IPLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_IPLabel, 7 );
+lv_obj_set_y( ui_IPLabel, -74 );
+lv_obj_set_align( ui_IPLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_IPLabel,"IP Address:");
+lv_obj_set_style_text_font(ui_IPLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_HostnameLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_HostnameLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HostnameLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HostnameLabel, 7 );
+lv_obj_set_y( ui_HostnameLabel, -48 );
+lv_obj_set_align( ui_HostnameLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_HostnameLabel,"Hostname:");
+lv_obj_set_style_text_font(ui_HostnameLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_RssiLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_RssiLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_RssiLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_RssiLabel, 7 );
+lv_obj_set_y( ui_RssiLabel, -22 );
+lv_obj_set_align( ui_RssiLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_RssiLabel,"Signal:");
+lv_obj_set_style_text_font(ui_RssiLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_FwVersionLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_FwVersionLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_FwVersionLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_FwVersionLabel, 7 );
+lv_obj_set_y( ui_FwVersionLabel, 4 );
+lv_obj_set_align( ui_FwVersionLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_FwVersionLabel,"Firmware:");
+lv_obj_set_style_text_font(ui_FwVersionLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_BuildDateLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_BuildDateLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_BuildDateLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_BuildDateLabel, 7 );
+lv_obj_set_y( ui_BuildDateLabel, 30 );
+lv_obj_set_align( ui_BuildDateLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_BuildDateLabel,"Build Date:");
+lv_obj_set_style_text_font(ui_BuildDateLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_CopyrightLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_CopyrightLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_CopyrightLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_CopyrightLabel, 7 );
+lv_obj_set_y( ui_CopyrightLabel, 56 );
+lv_obj_set_align( ui_CopyrightLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_long_mode(ui_CopyrightLabel,LV_LABEL_LONG_SCROLL_CIRCULAR);
+lv_label_set_text(ui_CopyrightLabel,"Copyright: ");
+lv_obj_set_style_text_align(ui_CopyrightLabel, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_text_font(ui_CopyrightLabel, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_ShowQR = lv_btn_create(ui_Info);
+lv_obj_set_width( ui_ShowQR, 100);
+lv_obj_set_height( ui_ShowQR, 36);
+lv_obj_set_x( ui_ShowQR, -108 );
+lv_obj_set_y( ui_ShowQR, -3 );
+lv_obj_set_align( ui_ShowQR, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_ShowQR, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_ShowQR, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_ShowQR, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_ShowQR, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_ShowQR, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_ShowQR, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_ShowQRLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_ShowQRLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_ShowQRLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_ShowQRLabel, -124 );
+lv_obj_set_y( ui_ShowQRLabel, -14 );
+lv_obj_set_align( ui_ShowQRLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_ShowQRLabel,"Show QR");
+lv_obj_set_style_text_color(ui_ShowQRLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_ShowQRLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_HomeBtn = lv_btn_create(ui_Info);
+lv_obj_set_width( ui_HomeBtn, 100);
+lv_obj_set_height( ui_HomeBtn, 36);
+lv_obj_set_x( ui_HomeBtn, -2 );
+lv_obj_set_y( ui_HomeBtn, -3 );
+lv_obj_set_align( ui_HomeBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_HomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_HomeBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_HomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_HomeBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_HomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_HomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_HomeLabel = lv_label_create(ui_Info);
+lv_obj_set_width( ui_HomeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HomeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HomeLabel, -30 );
+lv_obj_set_y( ui_HomeLabel, -14 );
+lv_obj_set_align( ui_HomeLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_HomeLabel,"Home");
+lv_obj_set_style_text_color(ui_HomeLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_HomeLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_add_event_cb(ui_ShowQR, ui_event_ShowQR, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_HomeBtn, ui_event_HomeBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_Info, ui_event_Info, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_LessCommonSetup.c b/app/src/ui/screens/ui_LessCommonSetup.c
index 617d875..d031523 100644
--- a/app/src/ui/screens/ui_LessCommonSetup.c
+++ b/app/src/ui/screens/ui_LessCommonSetup.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,188 +7,234 @@
void ui_LessCommonSetup_screen_init(void)
{
- ui_LessCommonSetup = lv_obj_create(NULL);
- lv_obj_add_state(ui_LessCommonSetup, LV_STATE_USER_1); /// States
- lv_obj_clear_flag(ui_LessCommonSetup,
- LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_LessCommonSetup, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_LessCommonSetup, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_LessCommonSetup, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_LessCommonSetup, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_LessCommonSetup, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CalibrateBtn = lv_btn_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_CalibrateBtn, 100);
- lv_obj_set_height(ui_CalibrateBtn, 36);
- lv_obj_set_x(ui_CalibrateBtn, 4);
- lv_obj_set_y(ui_CalibrateBtn, 4);
- lv_obj_add_flag(ui_CalibrateBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_CalibrateBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_CalibrateBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_CalibrateBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_CalibrateBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_CalibrateBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CalibrateLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_CalibrateLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_CalibrateLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_CalibrateLabel, 20);
- lv_obj_set_y(ui_CalibrateLabel, 13);
- lv_label_set_text(ui_CalibrateLabel, "Calibrate");
- lv_obj_set_style_text_color(ui_CalibrateLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_CalibrateLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_TimezoneLabel1 = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_TimezoneLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TimezoneLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TimezoneLabel1, 7);
- lv_obj_set_y(ui_TimezoneLabel1, -56);
- lv_obj_set_align(ui_TimezoneLabel1, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TimezoneLabel1, "Time Zone:");
-
- ui_TimezoneDropdown = lv_dropdown_create(ui_LessCommonSetup);
- lv_dropdown_set_options(ui_TimezoneDropdown,
- "GMT +11\nGMT +10\nGMT +9\nGMT +8\nGMT +7\nGMT +6\nGMT +5\nGMT +4\nGMT +3\nGMT +2\nGMT +1\nGMT\nGMT -1\nGMT -2\nGMT -3\nGMT -4\nGMT -5\nGMT -6\nGMT -7\nGMT -8\nGMT -9\nGMT -10\nGMT -11\nGMT -12");
- lv_obj_set_width(ui_TimezoneDropdown, 104);
- lv_obj_set_height(ui_TimezoneDropdown, 32);
- lv_obj_set_x(ui_TimezoneDropdown, 133);
- lv_obj_set_y(ui_TimezoneDropdown, -56);
- lv_obj_set_align(ui_TimezoneDropdown, LV_ALIGN_LEFT_MID);
- lv_obj_add_flag(ui_TimezoneDropdown, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_set_style_bg_color(ui_TimezoneDropdown, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_TimezoneDropdown, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_border_width(ui_TimezoneDropdown, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_UiSleepTextLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_UiSleepTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_UiSleepTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_UiSleepTextLabel, 7);
- lv_obj_set_y(ui_UiSleepTextLabel, -15);
- lv_obj_set_align(ui_UiSleepTextLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_UiSleepTextLabel, "Display Sleep:");
-
- ui_UiSleepLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_UiSleepLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_UiSleepLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_UiSleepLabel, 138);
- lv_obj_set_y(ui_UiSleepLabel, -15);
- lv_obj_set_align(ui_UiSleepLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_UiSleepLabel, "30 s");
-
- ui_UiSleepSlider = lv_slider_create(ui_LessCommonSetup);
- lv_slider_set_range(ui_UiSleepSlider, 10, 90);
- lv_slider_set_value(ui_UiSleepSlider, 30, LV_ANIM_OFF);
- if(lv_slider_get_mode(ui_UiSleepSlider) == LV_SLIDER_MODE_RANGE) lv_slider_set_left_value(ui_UiSleepSlider, 0,
- LV_ANIM_OFF);
- lv_obj_set_width(ui_UiSleepSlider, 127);
- lv_obj_set_height(ui_UiSleepSlider, 10);
- lv_obj_set_x(ui_UiSleepSlider, -9);
- lv_obj_set_y(ui_UiSleepSlider, -15);
- lv_obj_set_align(ui_UiSleepSlider, LV_ALIGN_RIGHT_MID);
-
- ui_DualStageHeatLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_DualStageHeatLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_DualStageHeatLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_DualStageHeatLabel, 7);
- lv_obj_set_y(ui_DualStageHeatLabel, 31);
- lv_obj_set_align(ui_DualStageHeatLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_DualStageHeatLabel, "2 Stage Heat:");
-
- ui_Hvac2StageHeatCheckbox = lv_checkbox_create(ui_LessCommonSetup);
- lv_checkbox_set_text(ui_Hvac2StageHeatCheckbox, "");
- lv_obj_set_width(ui_Hvac2StageHeatCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_Hvac2StageHeatCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_Hvac2StageHeatCheckbox, 0);
- lv_obj_set_y(ui_Hvac2StageHeatCheckbox, 31);
- lv_obj_set_align(ui_Hvac2StageHeatCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_Hvac2StageHeatCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_DisableLabel1 = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_DisableLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_DisableLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_DisableLabel1, 7);
- lv_obj_set_y(ui_DisableLabel1, 63);
- lv_obj_set_align(ui_DisableLabel1, LV_ALIGN_LEFT_MID);
- lv_label_set_long_mode(ui_DisableLabel1, LV_LABEL_LONG_SCROLL);
- lv_label_set_text(ui_DisableLabel1, "Reverse Valve:");
-
- ui_RevValveCheckbox = lv_checkbox_create(ui_LessCommonSetup);
- lv_checkbox_set_text(ui_RevValveCheckbox, "");
- lv_obj_set_width(ui_RevValveCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_RevValveCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_RevValveCheckbox, 0);
- lv_obj_set_y(ui_RevValveCheckbox, 63);
- lv_obj_set_align(ui_RevValveCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_RevValveCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_DisableBeepLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_DisableBeepLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_DisableBeepLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_DisableBeepLabel, 7);
- lv_obj_set_y(ui_DisableBeepLabel, 95);
- lv_obj_set_align(ui_DisableBeepLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_long_mode(ui_DisableBeepLabel, LV_LABEL_LONG_SCROLL);
- lv_label_set_text(ui_DisableBeepLabel, "Audible Beep:");
-
- ui_AudibleBeepCheckbox = lv_checkbox_create(ui_LessCommonSetup);
- lv_checkbox_set_text(ui_AudibleBeepCheckbox, "");
- lv_obj_set_width(ui_AudibleBeepCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_AudibleBeepCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_AudibleBeepCheckbox, 0);
- lv_obj_set_y(ui_AudibleBeepCheckbox, 95);
- lv_obj_set_align(ui_AudibleBeepCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_AudibleBeepCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_SetupWifiBtn = lv_btn_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_SetupWifiBtn, 100);
- lv_obj_set_height(ui_SetupWifiBtn, 36);
- lv_obj_set_x(ui_SetupWifiBtn, -2);
- lv_obj_set_y(ui_SetupWifiBtn, -45);
- lv_obj_set_align(ui_SetupWifiBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_SetupWifiBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SetupWifiBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_SetupWifiBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetupWifiBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetupWifiBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SetupWifiBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupWifiLabel = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_SetupWifiLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupWifiLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupWifiLabel, -36);
- lv_obj_set_y(ui_SetupWifiLabel, -56);
- lv_obj_set_align(ui_SetupWifiLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_SetupWifiLabel, "Wifi");
- lv_obj_set_style_text_color(ui_SetupWifiLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupWifiLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupHomeBtn2 = lv_btn_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_SetupHomeBtn2, 100);
- lv_obj_set_height(ui_SetupHomeBtn2, 36);
- lv_obj_set_x(ui_SetupHomeBtn2, -2);
- lv_obj_set_y(ui_SetupHomeBtn2, -3);
- lv_obj_set_align(ui_SetupHomeBtn2, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_SetupHomeBtn2, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SetupHomeBtn2, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_SetupHomeBtn2, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetupHomeBtn2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetupHomeBtn2, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SetupHomeBtn2, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupHomeLabel2 = lv_label_create(ui_LessCommonSetup);
- lv_obj_set_width(ui_SetupHomeLabel2, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupHomeLabel2, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupHomeLabel2, -30);
- lv_obj_set_y(ui_SetupHomeLabel2, -14);
- lv_obj_set_align(ui_SetupHomeLabel2, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_SetupHomeLabel2, "Home");
- lv_obj_set_style_text_color(ui_SetupHomeLabel2, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupHomeLabel2, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- lv_obj_add_event_cb(ui_CalibrateBtn, ui_event_CalibrateBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_UiSleepSlider, ui_event_UiSleepSlider, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SetupWifiBtn, ui_event_SetupWifiBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SetupHomeBtn2, ui_event_SetupHomeBtn2, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_LessCommonSetup, ui_event_LessCommonSetup, LV_EVENT_ALL, NULL);
+ui_LessCommonSetup = lv_obj_create(NULL);
+lv_obj_add_state( ui_LessCommonSetup, LV_STATE_USER_1 ); /// States
+lv_obj_clear_flag( ui_LessCommonSetup, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_LessCommonSetup, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_LessCommonSetup, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_LessCommonSetup, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_LessCommonSetup, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_LessCommonSetup, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_CalibrateBtn = lv_btn_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_CalibrateBtn, 100);
+lv_obj_set_height( ui_CalibrateBtn, 36);
+lv_obj_set_x( ui_CalibrateBtn, 4 );
+lv_obj_set_y( ui_CalibrateBtn, 4 );
+lv_obj_add_flag( ui_CalibrateBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_CalibrateBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_CalibrateBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_CalibrateBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_CalibrateBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_CalibrateBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_CalibrateLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_CalibrateLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_CalibrateLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_CalibrateLabel, 20 );
+lv_obj_set_y( ui_CalibrateLabel, 13 );
+lv_label_set_text(ui_CalibrateLabel,"Calibrate");
+lv_obj_set_style_text_color(ui_CalibrateLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_CalibrateLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameBtn = lv_btn_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_DevNameBtn, 100);
+lv_obj_set_height( ui_DevNameBtn, 36);
+lv_obj_set_x( ui_DevNameBtn, 113 );
+lv_obj_set_y( ui_DevNameBtn, 4 );
+lv_obj_add_flag( ui_DevNameBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_DevNameBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_DevNameBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_DevNameBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_DevNameBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_DevNameBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_TimezoneLabel1 = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_TimezoneLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TimezoneLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TimezoneLabel1, 7 );
+lv_obj_set_y( ui_TimezoneLabel1, -56 );
+lv_obj_set_align( ui_TimezoneLabel1, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TimezoneLabel1,"Time Zone:");
+
+ui_TimezoneDropdown = lv_dropdown_create(ui_LessCommonSetup);
+lv_dropdown_set_options( ui_TimezoneDropdown, "GMT +11\nGMT +10\nGMT +9\nGMT +8\nGMT +7\nGMT +6\nGMT +5\nGMT +4\nGMT +3\nGMT +2\nGMT +1\nGMT\nGMT -1\nGMT -2\nGMT -3\nGMT -4\nGMT -5\nGMT -6\nGMT -7\nGMT -8\nGMT -9\nGMT -10\nGMT -11\nGMT -12" );
+lv_obj_set_width( ui_TimezoneDropdown, 104);
+lv_obj_set_height( ui_TimezoneDropdown, 32);
+lv_obj_set_x( ui_TimezoneDropdown, 133 );
+lv_obj_set_y( ui_TimezoneDropdown, -56 );
+lv_obj_set_align( ui_TimezoneDropdown, LV_ALIGN_LEFT_MID );
+lv_obj_add_flag( ui_TimezoneDropdown, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_set_style_bg_color(ui_TimezoneDropdown, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_TimezoneDropdown, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_border_width(ui_TimezoneDropdown, 1, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_UiSleepTextLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_UiSleepTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_UiSleepTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_UiSleepTextLabel, 7 );
+lv_obj_set_y( ui_UiSleepTextLabel, -15 );
+lv_obj_set_align( ui_UiSleepTextLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_UiSleepTextLabel,"Display Sleep:");
+
+ui_UiSleepLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_UiSleepLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_UiSleepLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_UiSleepLabel, 138 );
+lv_obj_set_y( ui_UiSleepLabel, -15 );
+lv_obj_set_align( ui_UiSleepLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_UiSleepLabel,"30 s");
+
+ui_UiSleepSlider = lv_slider_create(ui_LessCommonSetup);
+lv_slider_set_range(ui_UiSleepSlider, 10,90);
+lv_slider_set_value( ui_UiSleepSlider, 30, LV_ANIM_OFF);
+if (lv_slider_get_mode(ui_UiSleepSlider)==LV_SLIDER_MODE_RANGE ) lv_slider_set_left_value( ui_UiSleepSlider, 0, LV_ANIM_OFF);
+lv_obj_set_width( ui_UiSleepSlider, 127);
+lv_obj_set_height( ui_UiSleepSlider, 10);
+lv_obj_set_x( ui_UiSleepSlider, -9 );
+lv_obj_set_y( ui_UiSleepSlider, -15 );
+lv_obj_set_align( ui_UiSleepSlider, LV_ALIGN_RIGHT_MID );
+
+
+ui_DualStageHeatLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_DualStageHeatLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DualStageHeatLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DualStageHeatLabel, 7 );
+lv_obj_set_y( ui_DualStageHeatLabel, 31 );
+lv_obj_set_align( ui_DualStageHeatLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_DualStageHeatLabel,"2 Stage Heat:");
+
+ui_Hvac2StageHeatCheckbox = lv_checkbox_create(ui_LessCommonSetup);
+lv_checkbox_set_text(ui_Hvac2StageHeatCheckbox,"");
+lv_obj_set_width( ui_Hvac2StageHeatCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_Hvac2StageHeatCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_Hvac2StageHeatCheckbox, 0 );
+lv_obj_set_y( ui_Hvac2StageHeatCheckbox, 31 );
+lv_obj_set_align( ui_Hvac2StageHeatCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_Hvac2StageHeatCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_DisableLabel1 = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_DisableLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DisableLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DisableLabel1, 7 );
+lv_obj_set_y( ui_DisableLabel1, 63 );
+lv_obj_set_align( ui_DisableLabel1, LV_ALIGN_LEFT_MID );
+lv_label_set_long_mode(ui_DisableLabel1,LV_LABEL_LONG_SCROLL);
+lv_label_set_text(ui_DisableLabel1,"Reverse Valve:");
+
+ui_RevValveCheckbox = lv_checkbox_create(ui_LessCommonSetup);
+lv_checkbox_set_text(ui_RevValveCheckbox,"");
+lv_obj_set_width( ui_RevValveCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_RevValveCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_RevValveCheckbox, 0 );
+lv_obj_set_y( ui_RevValveCheckbox, 63 );
+lv_obj_set_align( ui_RevValveCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_RevValveCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_DisableBeepLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_DisableBeepLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DisableBeepLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DisableBeepLabel, 7 );
+lv_obj_set_y( ui_DisableBeepLabel, 95 );
+lv_obj_set_align( ui_DisableBeepLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_long_mode(ui_DisableBeepLabel,LV_LABEL_LONG_SCROLL);
+lv_label_set_text(ui_DisableBeepLabel,"Audible Beep:");
+
+ui_AudibleBeepCheckbox = lv_checkbox_create(ui_LessCommonSetup);
+lv_checkbox_set_text(ui_AudibleBeepCheckbox,"");
+lv_obj_set_width( ui_AudibleBeepCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_AudibleBeepCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_AudibleBeepCheckbox, 0 );
+lv_obj_set_y( ui_AudibleBeepCheckbox, 95 );
+lv_obj_set_align( ui_AudibleBeepCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_AudibleBeepCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_SetupWifiBtn = lv_btn_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_SetupWifiBtn, 100);
+lv_obj_set_height( ui_SetupWifiBtn, 36);
+lv_obj_set_x( ui_SetupWifiBtn, -2 );
+lv_obj_set_y( ui_SetupWifiBtn, -42 );
+lv_obj_set_align( ui_SetupWifiBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupWifiBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupWifiBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupWifiBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupWifiBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupWifiBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupWifiBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupWifiLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_SetupWifiLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupWifiLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupWifiLabel, -36 );
+lv_obj_set_y( ui_SetupWifiLabel, -53 );
+lv_obj_set_align( ui_SetupWifiLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupWifiLabel,"Wifi");
+lv_obj_set_style_text_color(ui_SetupWifiLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupWifiLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupHomeBtn2 = lv_btn_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_SetupHomeBtn2, 100);
+lv_obj_set_height( ui_SetupHomeBtn2, 36);
+lv_obj_set_x( ui_SetupHomeBtn2, -2 );
+lv_obj_set_y( ui_SetupHomeBtn2, -3 );
+lv_obj_set_align( ui_SetupHomeBtn2, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupHomeBtn2, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupHomeBtn2, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupHomeBtn2, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupHomeBtn2, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupHomeBtn2, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupHomeBtn2, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupHomeLabel2 = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_SetupHomeLabel2, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupHomeLabel2, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupHomeLabel2, -33 );
+lv_obj_set_y( ui_SetupHomeLabel2, -14 );
+lv_obj_set_align( ui_SetupHomeLabel2, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupHomeLabel2,"Save");
+lv_obj_set_style_text_color(ui_SetupHomeLabel2, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupHomeLabel2, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_DevNameLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_DevNameLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_DevNameLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_DevNameLabel, 140 );
+lv_obj_set_y( ui_DevNameLabel, 13 );
+lv_label_set_text(ui_DevNameLabel,"Name");
+lv_obj_set_style_text_color(ui_DevNameLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_DevNameLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_UncommonCancelBtn = lv_btn_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_UncommonCancelBtn, 100);
+lv_obj_set_height( ui_UncommonCancelBtn, 36);
+lv_obj_set_x( ui_UncommonCancelBtn, -2 );
+lv_obj_set_y( ui_UncommonCancelBtn, -82 );
+lv_obj_set_align( ui_UncommonCancelBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_UncommonCancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_UncommonCancelBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_UncommonCancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_UncommonCancelBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_UncommonCancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_UncommonCancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_UncommonCancelLabel = lv_label_create(ui_LessCommonSetup);
+lv_obj_set_width( ui_UncommonCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_UncommonCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_UncommonCancelLabel, -28 );
+lv_obj_set_y( ui_UncommonCancelLabel, -92 );
+lv_obj_set_align( ui_UncommonCancelLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_UncommonCancelLabel,"Cancel");
+lv_obj_set_style_text_color(ui_UncommonCancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_UncommonCancelLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_add_event_cb(ui_CalibrateBtn, ui_event_CalibrateBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_DevNameBtn, ui_event_DevNameBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_UiSleepSlider, ui_event_UiSleepSlider, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupWifiBtn, ui_event_SetupWifiBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupHomeBtn2, ui_event_SetupHomeBtn2, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_UncommonCancelBtn, ui_event_UncommonCancelBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_LessCommonSetup, ui_event_LessCommonSetup, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_MainScreen.c b/app/src/ui/screens/ui_MainScreen.c
index 64ebd45..8ccb142 100644
--- a/app/src/ui/screens/ui_MainScreen.c
+++ b/app/src/ui/screens/ui_MainScreen.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,257 +7,250 @@
void ui_MainScreen_screen_init(void)
{
- ui_MainScreen = lv_obj_create(NULL);
- lv_obj_clear_flag(ui_MainScreen, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_MainScreen, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_MainScreen, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_MainScreen, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_MainScreen, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_MainScreen, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_MainScreen = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_MainScreen, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_MainScreen, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_MainScreen, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MainScreen, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_MainScreen, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_MainScreen, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_TimeLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_TimeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TimeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TimeLabel, 3);
- lv_obj_set_y(ui_TimeLabel, 3);
- lv_label_set_long_mode(ui_TimeLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_TimeLabel, "23:55:12");
- lv_obj_clear_flag(ui_TimeLabel, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE |
- LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_TimeLabel, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_font(ui_TimeLabel, &lv_font_montserrat_32, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TimeLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_TimeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TimeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TimeLabel, 3 );
+lv_obj_set_y( ui_TimeLabel, 3 );
+lv_label_set_long_mode(ui_TimeLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_TimeLabel,"23:55:12");
+lv_obj_clear_flag( ui_TimeLabel, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_TimeLabel, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_font(ui_TimeLabel, &lv_font_montserrat_32, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_StatusLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_StatusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_StatusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_StatusLabel, 2);
- lv_obj_set_y(ui_StatusLabel, -4);
- lv_obj_set_align(ui_StatusLabel, LV_ALIGN_BOTTOM_LEFT);
- lv_label_set_long_mode(ui_StatusLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_StatusLabel, "Current:");
- lv_obj_clear_flag(ui_StatusLabel, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE |
- LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_StatusLabel, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_font(ui_StatusLabel, &lv_font_montserrat_24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_StatusLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_StatusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_StatusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_StatusLabel, 2 );
+lv_obj_set_y( ui_StatusLabel, -4 );
+lv_obj_set_align( ui_StatusLabel, LV_ALIGN_BOTTOM_LEFT );
+lv_label_set_long_mode(ui_StatusLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_StatusLabel,"Current:");
+lv_obj_clear_flag( ui_StatusLabel, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_StatusLabel, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_font(ui_StatusLabel, &lv_font_montserrat_24, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_TempLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_TempLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempLabel, -33);
- lv_obj_set_y(ui_TempLabel, 103);
- lv_obj_set_align(ui_TempLabel, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_TempLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_TempLabel, "72°");
- lv_obj_set_style_text_align(ui_TempLabel, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_font(ui_TempLabel, &lv_font_montserrat_24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_TempLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempLabel, -33 );
+lv_obj_set_y( ui_TempLabel, 103 );
+lv_obj_set_align( ui_TempLabel, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_TempLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_TempLabel,"72°");
+lv_obj_set_style_text_align(ui_TempLabel, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_text_font(ui_TempLabel, &lv_font_montserrat_24, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_HumidityLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_HumidityLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HumidityLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HumidityLabel, 21);
- lv_obj_set_y(ui_HumidityLabel, 103);
- lv_obj_set_align(ui_HumidityLabel, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_HumidityLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_HumidityLabel, "62%");
- lv_obj_set_style_text_align(ui_HumidityLabel, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_font(ui_HumidityLabel, &lv_font_montserrat_24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_HumidityLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_HumidityLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HumidityLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HumidityLabel, 21 );
+lv_obj_set_y( ui_HumidityLabel, 103 );
+lv_obj_set_align( ui_HumidityLabel, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_HumidityLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_HumidityLabel,"62%");
+lv_obj_set_style_text_align(ui_HumidityLabel, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_text_font(ui_HumidityLabel, &lv_font_montserrat_24, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_ModeDropdown = lv_dropdown_create(ui_MainScreen);
- lv_dropdown_set_options(ui_ModeDropdown, "Off\nIdle\nAuto\nHeat\nCool\nFan");
- lv_obj_set_width(ui_ModeDropdown, 99);
- lv_obj_set_height(ui_ModeDropdown, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_ModeDropdown, 109);
- lv_obj_set_y(ui_ModeDropdown, -101);
- lv_obj_set_align(ui_ModeDropdown, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_ModeDropdown, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_ModeDropdown, LV_SCROLLBAR_MODE_OFF);
+ui_ModeDropdown = lv_dropdown_create(ui_MainScreen);
+lv_dropdown_set_options( ui_ModeDropdown, "Off\nIdle\nAuto\nHeat\nCool\nFan" );
+lv_obj_set_width( ui_ModeDropdown, 99);
+lv_obj_set_height( ui_ModeDropdown, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_ModeDropdown, 109 );
+lv_obj_set_y( ui_ModeDropdown, -101 );
+lv_obj_set_align( ui_ModeDropdown, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_ModeDropdown, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_ModeDropdown, LV_SCROLLBAR_MODE_OFF);
- ui_SetupBtn = lv_btn_create(ui_MainScreen);
- lv_obj_set_width(ui_SetupBtn, 90);
- lv_obj_set_height(ui_SetupBtn, 36);
- lv_obj_set_x(ui_SetupBtn, -2);
- lv_obj_set_y(ui_SetupBtn, -3);
- lv_obj_set_align(ui_SetupBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_SetupBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SetupBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_scrollbar_mode(ui_SetupBtn, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_SetupBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetupBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetupBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SetupBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
- ui_SetupLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_SetupLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupLabel, -25);
- lv_obj_set_y(ui_SetupLabel, -14);
- lv_obj_set_align(ui_SetupLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_long_mode(ui_SetupLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_SetupLabel, "Setup");
- lv_obj_add_flag(ui_SetupLabel, LV_OBJ_FLAG_IGNORE_LAYOUT); /// Flags
- lv_obj_clear_flag(ui_SetupLabel, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_scrollbar_mode(ui_SetupLabel, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_color(ui_SetupLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- ui_SetTempBg1 = lv_obj_create(ui_MainScreen);
- lv_obj_set_width(ui_SetTempBg1, 134);
- lv_obj_set_height(ui_SetTempBg1, 134);
- lv_obj_set_x(ui_SetTempBg1, -71);
- lv_obj_set_y(ui_SetTempBg1, 11);
- lv_obj_set_align(ui_SetTempBg1, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_SetTempBg1, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_radius(ui_SetTempBg1, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7D7D7D), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetTempBg1, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetTempBg1, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_border_width(ui_SetTempBg1, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_SetupBtn = lv_btn_create(ui_MainScreen);
+lv_obj_set_width( ui_SetupBtn, 90);
+lv_obj_set_height( ui_SetupBtn, 36);
+lv_obj_set_x( ui_SetupBtn, -2 );
+lv_obj_set_y( ui_SetupBtn, -3 );
+lv_obj_set_align( ui_SetupBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_scrollbar_mode(ui_SetupBtn, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_SetupBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_SetTempBg = lv_obj_create(ui_MainScreen);
- lv_obj_set_width(ui_SetTempBg, 110);
- lv_obj_set_height(ui_SetTempBg, 110);
- lv_obj_set_x(ui_SetTempBg, -71);
- lv_obj_set_y(ui_SetTempBg, 11);
- lv_obj_set_align(ui_SetTempBg, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_SetTempBg, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_radius(ui_SetTempBg, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x7A92B2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetTempBg, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetTempBg, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_border_width(ui_SetTempBg, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_SetupLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_SetupLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupLabel, -25 );
+lv_obj_set_y( ui_SetupLabel, -14 );
+lv_obj_set_align( ui_SetupLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_long_mode(ui_SetupLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_SetupLabel,"Setup");
+lv_obj_add_flag( ui_SetupLabel, LV_OBJ_FLAG_IGNORE_LAYOUT ); /// Flags
+lv_obj_clear_flag( ui_SetupLabel, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_scrollbar_mode(ui_SetupLabel, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_color(ui_SetupLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
- lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x5F4F4F), LV_PART_SCROLLBAR | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetTempBg, 255, LV_PART_SCROLLBAR | LV_STATE_DEFAULT);
+ui_SetTempBg1 = lv_obj_create(ui_MainScreen);
+lv_obj_set_width( ui_SetTempBg1, 134);
+lv_obj_set_height( ui_SetTempBg1, 134);
+lv_obj_set_x( ui_SetTempBg1, -71 );
+lv_obj_set_y( ui_SetTempBg1, 11 );
+lv_obj_set_align( ui_SetTempBg1, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_SetTempBg1, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_radius(ui_SetTempBg1, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7D7D7D), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetTempBg1, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetTempBg1, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_border_width(ui_SetTempBg1, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_TempArc = lv_arc_create(ui_MainScreen);
- lv_obj_set_width(ui_TempArc, 164);
- lv_obj_set_height(ui_TempArc, 164);
- lv_obj_set_x(ui_TempArc, -71);
- lv_obj_set_y(ui_TempArc, 11);
- lv_obj_set_align(ui_TempArc, LV_ALIGN_CENTER);
- lv_arc_set_range(ui_TempArc, 450, 920);
- lv_arc_set_value(ui_TempArc, 700);
+ui_SetTempBg = lv_obj_create(ui_MainScreen);
+lv_obj_set_width( ui_SetTempBg, 110);
+lv_obj_set_height( ui_SetTempBg, 110);
+lv_obj_set_x( ui_SetTempBg, -71 );
+lv_obj_set_y( ui_SetTempBg, 11 );
+lv_obj_set_align( ui_SetTempBg, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_SetTempBg, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_radius(ui_SetTempBg, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x7A92B2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetTempBg, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetTempBg, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_border_width(ui_SetTempBg, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_SetTemp = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_SetTemp, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetTemp, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetTemp, -71);
- lv_obj_set_y(ui_SetTemp, 11);
- lv_obj_set_align(ui_SetTemp, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_SetTemp, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_SetTemp, "82°");
- lv_obj_clear_flag(ui_SetTemp, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE |
- LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_SetTemp, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_font(ui_SetTemp, &lv_font_montserrat_44, LV_PART_MAIN | LV_STATE_DEFAULT);
+lv_obj_set_style_bg_color(ui_SetTempBg, lv_color_hex(0x5F4F4F), LV_PART_SCROLLBAR | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetTempBg, 255, LV_PART_SCROLLBAR| LV_STATE_DEFAULT);
- ui_SetTempFrac = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_SetTempFrac, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetTempFrac, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetTempFrac, -46);
- lv_obj_set_y(ui_SetTempFrac, 22);
- lv_obj_set_align(ui_SetTempFrac, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_SetTempFrac, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_SetTempFrac, "5");
- lv_obj_add_flag(ui_SetTempFrac, LV_OBJ_FLAG_HIDDEN); /// Flags
- lv_obj_clear_flag(ui_SetTempFrac, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE |
- LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_SetTempFrac, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_align(ui_SetTempFrac, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_font(ui_SetTempFrac, &lv_font_montserrat_16, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempArc = lv_arc_create(ui_MainScreen);
+lv_obj_set_width( ui_TempArc, 164);
+lv_obj_set_height( ui_TempArc, 164);
+lv_obj_set_x( ui_TempArc, -71 );
+lv_obj_set_y( ui_TempArc, 11 );
+lv_obj_set_align( ui_TempArc, LV_ALIGN_CENTER );
+lv_arc_set_range(ui_TempArc, 450,920);
+lv_arc_set_value(ui_TempArc, 700);
- ui_TempDecreaseBtn = lv_obj_create(ui_MainScreen);
- lv_obj_set_width(ui_TempDecreaseBtn, 45);
- lv_obj_set_height(ui_TempDecreaseBtn, 45);
- lv_obj_set_x(ui_TempDecreaseBtn, 39);
- lv_obj_set_y(ui_TempDecreaseBtn, 56);
- lv_obj_set_align(ui_TempDecreaseBtn, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_TempDecreaseBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_blend_mode(ui_TempDecreaseBtn, LV_BLEND_MODE_MULTIPLY, LV_PART_MAIN | LV_STATE_DEFAULT);
- ui_TempDecreaseLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_TempDecreaseLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempDecreaseLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempDecreaseLabel, 39);
- lv_obj_set_y(ui_TempDecreaseLabel, 52);
- lv_obj_set_align(ui_TempDecreaseLabel, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_TempDecreaseLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_TempDecreaseLabel, "-");
- lv_obj_set_style_text_font(ui_TempDecreaseLabel, &lv_font_montserrat_48, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_SetTemp = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_SetTemp, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetTemp, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetTemp, -71 );
+lv_obj_set_y( ui_SetTemp, 11 );
+lv_obj_set_align( ui_SetTemp, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_SetTemp,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_SetTemp,"82°");
+lv_obj_clear_flag( ui_SetTemp, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_SetTemp, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_font(ui_SetTemp, &lv_font_montserrat_44, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_TempIncreaseBtn = lv_obj_create(ui_MainScreen);
- lv_obj_set_width(ui_TempIncreaseBtn, 45);
- lv_obj_set_height(ui_TempIncreaseBtn, 45);
- lv_obj_set_x(ui_TempIncreaseBtn, 39);
- lv_obj_set_y(ui_TempIncreaseBtn, -40);
- lv_obj_set_align(ui_TempIncreaseBtn, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_TempIncreaseBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_blend_mode(ui_TempIncreaseBtn, LV_BLEND_MODE_MULTIPLY, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_SetTempFrac = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_SetTempFrac, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetTempFrac, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetTempFrac, -46 );
+lv_obj_set_y( ui_SetTempFrac, 22 );
+lv_obj_set_align( ui_SetTempFrac, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_SetTempFrac,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_SetTempFrac,"5");
+lv_obj_add_flag( ui_SetTempFrac, LV_OBJ_FLAG_HIDDEN ); /// Flags
+lv_obj_clear_flag( ui_SetTempFrac, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_SetTempFrac, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_align(ui_SetTempFrac, LV_TEXT_ALIGN_LEFT, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_text_font(ui_SetTempFrac, &lv_font_montserrat_16, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_TempIncreaseLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_TempIncreaseLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempIncreaseLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempIncreaseLabel, 39);
- lv_obj_set_y(ui_TempIncreaseLabel, -40);
- lv_obj_set_align(ui_TempIncreaseLabel, LV_ALIGN_CENTER);
- lv_label_set_long_mode(ui_TempIncreaseLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_TempIncreaseLabel, "+");
- lv_obj_set_style_text_font(ui_TempIncreaseLabel, &lv_font_montserrat_48, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempDecreaseBtn = lv_obj_create(ui_MainScreen);
+lv_obj_set_width( ui_TempDecreaseBtn, 45);
+lv_obj_set_height( ui_TempDecreaseBtn, 45);
+lv_obj_set_x( ui_TempDecreaseBtn, 39 );
+lv_obj_set_y( ui_TempDecreaseBtn, 56 );
+lv_obj_set_align( ui_TempDecreaseBtn, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_TempDecreaseBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_blend_mode(ui_TempDecreaseBtn, LV_BLEND_MODE_MULTIPLY, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_InfoBtn = lv_btn_create(ui_MainScreen);
- lv_obj_set_width(ui_InfoBtn, 90);
- lv_obj_set_height(ui_InfoBtn, 36);
- lv_obj_set_x(ui_InfoBtn, -2);
- lv_obj_set_y(ui_InfoBtn, -45);
- lv_obj_set_align(ui_InfoBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_InfoBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_InfoBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_scrollbar_mode(ui_InfoBtn, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_InfoBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_InfoBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_InfoBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_InfoBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempDecreaseLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_TempDecreaseLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempDecreaseLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempDecreaseLabel, 39 );
+lv_obj_set_y( ui_TempDecreaseLabel, 52 );
+lv_obj_set_align( ui_TempDecreaseLabel, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_TempDecreaseLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_TempDecreaseLabel,"-");
+lv_obj_set_style_text_font(ui_TempDecreaseLabel, &lv_font_montserrat_48, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_InfoLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_InfoLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_InfoLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_InfoLabel, -33);
- lv_obj_set_y(ui_InfoLabel, -56);
- lv_obj_set_align(ui_InfoLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_long_mode(ui_InfoLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_InfoLabel, "Info");
- lv_obj_add_flag(ui_InfoLabel, LV_OBJ_FLAG_IGNORE_LAYOUT); /// Flags
- lv_obj_clear_flag(ui_InfoLabel, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_scrollbar_mode(ui_InfoLabel, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_text_color(ui_InfoLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_InfoLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempIncreaseBtn = lv_obj_create(ui_MainScreen);
+lv_obj_set_width( ui_TempIncreaseBtn, 45);
+lv_obj_set_height( ui_TempIncreaseBtn, 45);
+lv_obj_set_x( ui_TempIncreaseBtn, 39 );
+lv_obj_set_y( ui_TempIncreaseBtn, -40 );
+lv_obj_set_align( ui_TempIncreaseBtn, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_TempIncreaseBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_blend_mode(ui_TempIncreaseBtn, LV_BLEND_MODE_MULTIPLY, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_WifiIndicatorLabel = lv_label_create(ui_MainScreen);
- lv_obj_set_width(ui_WifiIndicatorLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_WifiIndicatorLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_WifiIndicatorLabel, 10);
- lv_obj_set_y(ui_WifiIndicatorLabel, -100);
- lv_obj_set_align(ui_WifiIndicatorLabel, LV_ALIGN_CENTER);
- lv_label_set_text(ui_WifiIndicatorLabel, "");
- lv_label_set_recolor(ui_WifiIndicatorLabel, "true");
- lv_obj_set_style_text_font(ui_WifiIndicatorLabel, &lv_font_montserrat_24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_TempIncreaseLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_TempIncreaseLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempIncreaseLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempIncreaseLabel, 39 );
+lv_obj_set_y( ui_TempIncreaseLabel, -40 );
+lv_obj_set_align( ui_TempIncreaseLabel, LV_ALIGN_CENTER );
+lv_label_set_long_mode(ui_TempIncreaseLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_TempIncreaseLabel,"+");
+lv_obj_set_style_text_font(ui_TempIncreaseLabel, &lv_font_montserrat_48, LV_PART_MAIN| LV_STATE_DEFAULT);
- lv_obj_add_event_cb(ui_TimeLabel, ui_event_TimeLabel, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_StatusLabel, ui_event_StatusLabel, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_TempLabel, ui_event_TempLabel, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_HumidityLabel, ui_event_HumidityLabel, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_ModeDropdown, ui_event_ModeDropdown, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SetupBtn, ui_event_SetupBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_TempArc, ui_event_TempArc, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_TempDecreaseBtn, ui_event_TempDecreaseBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_TempIncreaseBtn, ui_event_TempIncreaseBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_InfoBtn, ui_event_InfoBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_MainScreen, ui_event_MainScreen, LV_EVENT_ALL, NULL);
+ui_InfoBtn = lv_btn_create(ui_MainScreen);
+lv_obj_set_width( ui_InfoBtn, 90);
+lv_obj_set_height( ui_InfoBtn, 36);
+lv_obj_set_x( ui_InfoBtn, -2 );
+lv_obj_set_y( ui_InfoBtn, -45 );
+lv_obj_set_align( ui_InfoBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_InfoBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_InfoBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_scrollbar_mode(ui_InfoBtn, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_InfoBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_InfoBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_InfoBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_InfoBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_InfoLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_InfoLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_InfoLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_InfoLabel, -33 );
+lv_obj_set_y( ui_InfoLabel, -56 );
+lv_obj_set_align( ui_InfoLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_long_mode(ui_InfoLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_InfoLabel,"Info");
+lv_obj_add_flag( ui_InfoLabel, LV_OBJ_FLAG_IGNORE_LAYOUT ); /// Flags
+lv_obj_clear_flag( ui_InfoLabel, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_scrollbar_mode(ui_InfoLabel, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_text_color(ui_InfoLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_InfoLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_WifiIndicatorLabel = lv_label_create(ui_MainScreen);
+lv_obj_set_width( ui_WifiIndicatorLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_WifiIndicatorLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_WifiIndicatorLabel, 10 );
+lv_obj_set_y( ui_WifiIndicatorLabel, -100 );
+lv_obj_set_align( ui_WifiIndicatorLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_WifiIndicatorLabel,"");
+lv_label_set_recolor(ui_WifiIndicatorLabel,"true");
+lv_obj_set_style_text_font(ui_WifiIndicatorLabel, &lv_font_montserrat_24, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_add_event_cb(ui_TimeLabel, ui_event_TimeLabel, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_StatusLabel, ui_event_StatusLabel, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_TempLabel, ui_event_TempLabel, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_HumidityLabel, ui_event_HumidityLabel, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_ModeDropdown, ui_event_ModeDropdown, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupBtn, ui_event_SetupBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_TempArc, ui_event_TempArc, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_TempDecreaseBtn, ui_event_TempDecreaseBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_TempIncreaseBtn, ui_event_TempIncreaseBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_InfoBtn, ui_event_InfoBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MainScreen, ui_event_MainScreen, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_MatterConfig.c b/app/src/ui/screens/ui_MatterConfig.c
index 84864e8..bfbc018 100644
--- a/app/src/ui/screens/ui_MatterConfig.c
+++ b/app/src/ui/screens/ui_MatterConfig.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,58 +7,57 @@
void ui_MatterConfig_screen_init(void)
{
- ui_MatterConfig = lv_obj_create(NULL);
- lv_obj_clear_flag(ui_MatterConfig, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_MatterConfig, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_MatterConfig, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_MatterConfig, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_MatterConfig, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_MatterConfig, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_QrHomeBtn = lv_btn_create(ui_MatterConfig);
- lv_obj_set_width(ui_QrHomeBtn, 100);
- lv_obj_set_height(ui_QrHomeBtn, 36);
- lv_obj_set_x(ui_QrHomeBtn, -2);
- lv_obj_set_y(ui_QrHomeBtn, -3);
- lv_obj_set_align(ui_QrHomeBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_QrHomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_QrHomeBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_QrHomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_QrHomeBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_QrHomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_QrHomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupHomeLabel1 = lv_label_create(ui_MatterConfig);
- lv_obj_set_width(ui_SetupHomeLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupHomeLabel1, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupHomeLabel1, -30);
- lv_obj_set_y(ui_SetupHomeLabel1, -14);
- lv_obj_set_align(ui_SetupHomeLabel1, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_SetupHomeLabel1, "Home");
- lv_obj_set_style_text_color(ui_SetupHomeLabel1, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupHomeLabel1, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_QRImage = lv_obj_create(ui_MatterConfig);
- lv_obj_set_width(ui_QRImage, 150);
- lv_obj_set_height(ui_QRImage, 150);
- lv_obj_set_x(ui_QRImage, 0);
- lv_obj_set_y(ui_QRImage, -20);
- lv_obj_set_align(ui_QRImage, LV_ALIGN_CENTER);
- lv_obj_clear_flag(ui_QRImage, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_opa(ui_QRImage, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_ManualPairingCode = lv_label_create(ui_MatterConfig);
- lv_obj_set_width(ui_ManualPairingCode, 195);
- lv_obj_set_height(ui_ManualPairingCode, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_ManualPairingCode, 13);
- lv_obj_set_y(ui_ManualPairingCode, -10);
- lv_obj_set_align(ui_ManualPairingCode, LV_ALIGN_BOTTOM_LEFT);
- lv_label_set_long_mode(ui_ManualPairingCode, LV_LABEL_LONG_SCROLL_CIRCULAR);
- lv_label_set_text(ui_ManualPairingCode, "Manual Pairing Code");
- lv_obj_set_style_text_font(ui_ManualPairingCode, &lv_font_montserrat_20, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- lv_obj_add_event_cb(ui_QrHomeBtn, ui_event_QrHomeBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_MatterConfig, ui_event_MatterConfig, LV_EVENT_ALL, NULL);
+ui_MatterConfig = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_MatterConfig, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_MatterConfig, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_MatterConfig, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MatterConfig, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_MatterConfig, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_MatterConfig, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_QrHomeBtn = lv_btn_create(ui_MatterConfig);
+lv_obj_set_width( ui_QrHomeBtn, 100);
+lv_obj_set_height( ui_QrHomeBtn, 36);
+lv_obj_set_x( ui_QrHomeBtn, -2 );
+lv_obj_set_y( ui_QrHomeBtn, -3 );
+lv_obj_set_align( ui_QrHomeBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_QrHomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_QrHomeBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_QrHomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_QrHomeBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_QrHomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_QrHomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupHomeLabel1 = lv_label_create(ui_MatterConfig);
+lv_obj_set_width( ui_SetupHomeLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupHomeLabel1, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupHomeLabel1, -30 );
+lv_obj_set_y( ui_SetupHomeLabel1, -14 );
+lv_obj_set_align( ui_SetupHomeLabel1, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupHomeLabel1,"Home");
+lv_obj_set_style_text_color(ui_SetupHomeLabel1, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupHomeLabel1, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_QRImage = lv_obj_create(ui_MatterConfig);
+lv_obj_set_width( ui_QRImage, 150);
+lv_obj_set_height( ui_QRImage, 150);
+lv_obj_set_x( ui_QRImage, 0 );
+lv_obj_set_y( ui_QRImage, -20 );
+lv_obj_set_align( ui_QRImage, LV_ALIGN_CENTER );
+lv_obj_clear_flag( ui_QRImage, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_opa(ui_QRImage, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_ManualPairingCode = lv_label_create(ui_MatterConfig);
+lv_obj_set_width( ui_ManualPairingCode, 195);
+lv_obj_set_height( ui_ManualPairingCode, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_ManualPairingCode, 13 );
+lv_obj_set_y( ui_ManualPairingCode, -10 );
+lv_obj_set_align( ui_ManualPairingCode, LV_ALIGN_BOTTOM_LEFT );
+lv_label_set_long_mode(ui_ManualPairingCode,LV_LABEL_LONG_SCROLL_CIRCULAR);
+lv_label_set_text(ui_ManualPairingCode,"Manual Pairing Code");
+lv_obj_set_style_text_font(ui_ManualPairingCode, &lv_font_montserrat_20, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_add_event_cb(ui_QrHomeBtn, ui_event_QrHomeBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MatterConfig, ui_event_MatterConfig, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_MqttConfig.c b/app/src/ui/screens/ui_MqttConfig.c
new file mode 100644
index 0000000..7b1eb19
--- /dev/null
+++ b/app/src/ui/screens/ui_MqttConfig.c
@@ -0,0 +1,116 @@
+// This file was generated by SquareLine Studio
+// SquareLine Studio version: SquareLine Studio 1.3.2
+// LVGL version: 8.3.6
+// Project name: Thermostat
+
+#include "../ui.h"
+
+void ui_MqttConfig_screen_init(void)
+{
+ui_MqttConfig = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_MqttConfig, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_MqttConfig, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_MqttConfig, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MqttConfig, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_MqttConfig, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_MqttConfig, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_MqttKeyboard = lv_keyboard_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttKeyboard, 320);
+lv_obj_set_height( ui_MqttKeyboard, 105);
+lv_obj_set_x( ui_MqttKeyboard, 0 );
+lv_obj_set_y( ui_MqttKeyboard, 67 );
+lv_obj_set_align( ui_MqttKeyboard, LV_ALIGN_LEFT_MID );
+lv_obj_set_style_bg_color(ui_MqttKeyboard, lv_color_hex(0xBD6994), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MqttKeyboard, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_MqttHostname = lv_textarea_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttHostname, 205);
+lv_obj_set_height( ui_MqttHostname, LV_SIZE_CONTENT); /// 20
+lv_obj_set_x( ui_MqttHostname, -50 );
+lv_obj_set_y( ui_MqttHostname, -97 );
+lv_obj_set_align( ui_MqttHostname, LV_ALIGN_CENTER );
+lv_textarea_set_placeholder_text(ui_MqttHostname,"MQTT Broker");
+lv_textarea_set_one_line(ui_MqttHostname,true);
+lv_obj_set_style_text_font(ui_MqttHostname, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_MqttUsername = lv_textarea_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttUsername, 205);
+lv_obj_set_height( ui_MqttUsername, LV_SIZE_CONTENT); /// 33
+lv_obj_set_x( ui_MqttUsername, -50 );
+lv_obj_set_y( ui_MqttUsername, -52 );
+lv_obj_set_align( ui_MqttUsername, LV_ALIGN_CENTER );
+lv_textarea_set_placeholder_text(ui_MqttUsername,"MQTT Username");
+lv_textarea_set_one_line(ui_MqttUsername,true);
+lv_obj_set_style_text_font(ui_MqttUsername, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_MqttPassword = lv_textarea_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttPassword, 205);
+lv_obj_set_height( ui_MqttPassword, LV_SIZE_CONTENT); /// 33
+lv_obj_set_x( ui_MqttPassword, -50 );
+lv_obj_set_y( ui_MqttPassword, -7 );
+lv_obj_set_align( ui_MqttPassword, LV_ALIGN_CENTER );
+lv_textarea_set_placeholder_text(ui_MqttPassword,"MQTT Password");
+lv_textarea_set_one_line(ui_MqttPassword,true);
+lv_obj_set_style_text_font(ui_MqttPassword, &lv_font_montserrat_18, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_MqttSaveBtn = lv_btn_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttSaveBtn, 100);
+lv_obj_set_height( ui_MqttSaveBtn, 36);
+lv_obj_set_x( ui_MqttSaveBtn, -1 );
+lv_obj_set_y( ui_MqttSaveBtn, -56 );
+lv_obj_set_align( ui_MqttSaveBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_MqttSaveBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_MqttSaveBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_MqttSaveBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MqttSaveBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_MqttSaveBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_MqttSaveBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_MqttSaveLabel = lv_label_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttSaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_MqttSaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_MqttSaveLabel, 109 );
+lv_obj_set_y( ui_MqttSaveLabel, -56 );
+lv_obj_set_align( ui_MqttSaveLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_MqttSaveLabel,"Save");
+lv_obj_set_style_text_color(ui_MqttSaveLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_MqttSaveLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_MqttCancelBtn = lv_btn_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttCancelBtn, 100);
+lv_obj_set_height( ui_MqttCancelBtn, 36);
+lv_obj_set_x( ui_MqttCancelBtn, -1 );
+lv_obj_set_y( ui_MqttCancelBtn, -96 );
+lv_obj_set_align( ui_MqttCancelBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_MqttCancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_MqttCancelBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_MqttCancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_MqttCancelBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_MqttCancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_MqttCancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_MqttCancelLabel = lv_label_create(ui_MqttConfig);
+lv_obj_set_width( ui_MqttCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_MqttCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_MqttCancelLabel, 109 );
+lv_obj_set_y( ui_MqttCancelLabel, -96 );
+lv_obj_set_align( ui_MqttCancelLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_MqttCancelLabel,"Cancel");
+lv_obj_set_style_text_color(ui_MqttCancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_MqttCancelLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_keyboard_set_textarea(ui_MqttKeyboard,ui_MqttHostname);
+lv_obj_add_event_cb(ui_MqttHostname, ui_event_MqttHostname, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MqttUsername, ui_event_MqttUsername, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MqttPassword, ui_event_MqttPassword, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MqttSaveBtn, ui_event_MqttSaveBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_MqttCancelBtn, ui_event_MqttCancelBtn, LV_EVENT_ALL, NULL);
+
+}
diff --git a/app/src/ui/screens/ui_Setup.c b/app/src/ui/screens/ui_Setup.c
index 990c50b..66911c7 100644
--- a/app/src/ui/screens/ui_Setup.c
+++ b/app/src/ui/screens/ui_Setup.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,206 +7,254 @@
void ui_Setup_screen_init(void)
{
- ui_Setup = lv_obj_create(NULL);
- lv_obj_add_state(ui_Setup, LV_STATE_USER_1); /// States
- lv_obj_clear_flag(ui_Setup, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_Setup, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_Setup, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_Setup, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_Setup, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_Setup, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_TempUnitsLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_TempUnitsLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempUnitsLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempUnitsLabel, 7);
- lv_obj_set_y(ui_TempUnitsLabel, -15);
- lv_obj_set_align(ui_TempUnitsLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TempUnitsLabel, "Temp Units: ");
-
- ui_FahrenheitLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_FahrenheitLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_FahrenheitLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_FahrenheitLabel, 133);
- lv_obj_set_y(ui_FahrenheitLabel, -15);
- lv_obj_set_align(ui_FahrenheitLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_FahrenheitLabel, "F");
-
- ui_TempUnitsSwitch = lv_switch_create(ui_Setup);
- lv_obj_set_width(ui_TempUnitsSwitch, 50);
- lv_obj_set_height(ui_TempUnitsSwitch, 22);
- lv_obj_set_x(ui_TempUnitsSwitch, 13);
- lv_obj_set_y(ui_TempUnitsSwitch, -15);
- lv_obj_set_align(ui_TempUnitsSwitch, LV_ALIGN_CENTER);
- lv_obj_add_state(ui_TempUnitsSwitch, LV_STATE_CHECKED); /// States
- lv_obj_set_style_bg_color(ui_TempUnitsSwitch, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_TempUnitsSwitch, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CelciusLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_CelciusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_CelciusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_CelciusLabel, 203);
- lv_obj_set_y(ui_CelciusLabel, -15);
- lv_obj_set_align(ui_CelciusLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_CelciusLabel, "C");
-
- ui_TempCorrectionTextLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_TempCorrectionTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempCorrectionTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempCorrectionTextLabel, 7);
- lv_obj_set_y(ui_TempCorrectionTextLabel, -100);
- lv_obj_set_align(ui_TempCorrectionTextLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TempCorrectionTextLabel, "Temp Correction:");
-
- ui_TempCorrectionLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_TempCorrectionLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempCorrectionLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempCorrectionLabel, 138);
- lv_obj_set_y(ui_TempCorrectionLabel, -100);
- lv_obj_set_align(ui_TempCorrectionLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TempCorrectionLabel, "-3.8°");
-
- ui_TempCorrectionSlider = lv_slider_create(ui_Setup);
- lv_slider_set_range(ui_TempCorrectionSlider, -65, 10);
- if(lv_slider_get_mode(ui_TempCorrectionSlider) == LV_SLIDER_MODE_RANGE) lv_slider_set_left_value(
- ui_TempCorrectionSlider, -65, LV_ANIM_OFF);
- lv_obj_set_width(ui_TempCorrectionSlider, 127);
- lv_obj_set_height(ui_TempCorrectionSlider, 10);
- lv_obj_set_x(ui_TempCorrectionSlider, -9);
- lv_obj_set_y(ui_TempCorrectionSlider, -100);
- lv_obj_set_align(ui_TempCorrectionSlider, LV_ALIGN_RIGHT_MID);
-
- ui_TempSwingTextLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_TempSwingTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempSwingTextLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempSwingTextLabel, 7);
- lv_obj_set_y(ui_TempSwingTextLabel, -58);
- lv_obj_set_align(ui_TempSwingTextLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TempSwingTextLabel, "Temp Swing:");
-
- ui_TempSwingLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_TempSwingLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_TempSwingLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_TempSwingLabel, 138);
- lv_obj_set_y(ui_TempSwingLabel, -58);
- lv_obj_set_align(ui_TempSwingLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_TempSwingLabel, "3.5°");
-
- ui_TempSwingSlider = lv_slider_create(ui_Setup);
- lv_slider_set_range(ui_TempSwingSlider, 0, 60);
- lv_slider_set_value(ui_TempSwingSlider, 30, LV_ANIM_OFF);
- if(lv_slider_get_mode(ui_TempSwingSlider) == LV_SLIDER_MODE_RANGE) lv_slider_set_left_value(ui_TempSwingSlider, 0,
- LV_ANIM_OFF);
- lv_obj_set_width(ui_TempSwingSlider, 127);
- lv_obj_set_height(ui_TempSwingSlider, 10);
- lv_obj_set_x(ui_TempSwingSlider, -9);
- lv_obj_set_y(ui_TempSwingSlider, -58);
- lv_obj_set_align(ui_TempSwingSlider, LV_ALIGN_RIGHT_MID);
-
- ui_HvacCoolLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_HvacCoolLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HvacCoolLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HvacCoolLabel, 7);
- lv_obj_set_y(ui_HvacCoolLabel, 31);
- lv_obj_set_align(ui_HvacCoolLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_HvacCoolLabel, "HVAC Cool:");
-
- ui_HvacCoolCheckbox = lv_checkbox_create(ui_Setup);
- lv_checkbox_set_text(ui_HvacCoolCheckbox, "");
- lv_obj_set_width(ui_HvacCoolCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HvacCoolCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HvacCoolCheckbox, 0);
- lv_obj_set_y(ui_HvacCoolCheckbox, 31);
- lv_obj_set_align(ui_HvacCoolCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_HvacCoolCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_HvacFanLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_HvacFanLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HvacFanLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HvacFanLabel, 7);
- lv_obj_set_y(ui_HvacFanLabel, 63);
- lv_obj_set_align(ui_HvacFanLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_long_mode(ui_HvacFanLabel, LV_LABEL_LONG_SCROLL);
- lv_label_set_text(ui_HvacFanLabel, "HVAC Fan:");
-
- ui_HvacFanCheckbox = lv_checkbox_create(ui_Setup);
- lv_checkbox_set_text(ui_HvacFanCheckbox, "");
- lv_obj_set_width(ui_HvacFanCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_HvacFanCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_HvacFanCheckbox, 0);
- lv_obj_set_y(ui_HvacFanCheckbox, 63);
- lv_obj_set_align(ui_HvacFanCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_HvacFanCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_SetupUncommonBtn = lv_btn_create(ui_Setup);
- lv_obj_set_width(ui_SetupUncommonBtn, 100);
- lv_obj_set_height(ui_SetupUncommonBtn, 36);
- lv_obj_set_x(ui_SetupUncommonBtn, -2);
- lv_obj_set_y(ui_SetupUncommonBtn, -45);
- lv_obj_set_align(ui_SetupUncommonBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_SetupUncommonBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SetupUncommonBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_SetupUncommonBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetupUncommonBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetupUncommonBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SetupUncommonBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupUncommonLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_SetupUncommonLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupUncommonLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupUncommonLabel, -21);
- lv_obj_set_y(ui_SetupUncommonLabel, -56);
- lv_obj_set_align(ui_SetupUncommonLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_SetupUncommonLabel, "Unusual");
- lv_obj_set_style_text_color(ui_SetupUncommonLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupUncommonLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupHomeBtn = lv_btn_create(ui_Setup);
- lv_obj_set_width(ui_SetupHomeBtn, 100);
- lv_obj_set_height(ui_SetupHomeBtn, 36);
- lv_obj_set_x(ui_SetupHomeBtn, -2);
- lv_obj_set_y(ui_SetupHomeBtn, -3);
- lv_obj_set_align(ui_SetupHomeBtn, LV_ALIGN_BOTTOM_RIGHT);
- lv_obj_add_flag(ui_SetupHomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SetupHomeBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_SetupHomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SetupHomeBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SetupHomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SetupHomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SetupHomeLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_SetupHomeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SetupHomeLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SetupHomeLabel, -30);
- lv_obj_set_y(ui_SetupHomeLabel, -14);
- lv_obj_set_align(ui_SetupHomeLabel, LV_ALIGN_BOTTOM_RIGHT);
- lv_label_set_text(ui_SetupHomeLabel, "Home");
- lv_obj_set_style_text_color(ui_SetupHomeLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SetupHomeLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_MatterLabel = lv_label_create(ui_Setup);
- lv_obj_set_width(ui_MatterLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_MatterLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_MatterLabel, 7);
- lv_obj_set_y(ui_MatterLabel, 95);
- lv_obj_set_align(ui_MatterLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_long_mode(ui_MatterLabel, LV_LABEL_LONG_SCROLL);
- lv_label_set_text(ui_MatterLabel, "Matter Enable:");
-
- ui_MatterCheckbox = lv_checkbox_create(ui_Setup);
- lv_checkbox_set_text(ui_MatterCheckbox, "");
- lv_obj_set_width(ui_MatterCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_MatterCheckbox, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_MatterCheckbox, 0);
- lv_obj_set_y(ui_MatterCheckbox, 95);
- lv_obj_set_align(ui_MatterCheckbox, LV_ALIGN_CENTER);
- lv_obj_add_flag(ui_MatterCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- lv_obj_add_event_cb(ui_TempCorrectionSlider, ui_event_TempCorrectionSlider, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_TempSwingSlider, ui_event_TempSwingSlider, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SetupUncommonBtn, ui_event_SetupUncommonBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SetupHomeBtn, ui_event_SetupHomeBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_Setup, ui_event_Setup, LV_EVENT_ALL, NULL);
+ui_Setup = lv_obj_create(NULL);
+lv_obj_add_state( ui_Setup, LV_STATE_USER_1 ); /// States
+lv_obj_clear_flag( ui_Setup, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_Setup, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_Setup, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_Setup, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_Setup, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_Setup, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_TempUnitsLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_TempUnitsLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempUnitsLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempUnitsLabel, 7 );
+lv_obj_set_y( ui_TempUnitsLabel, -15 );
+lv_obj_set_align( ui_TempUnitsLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TempUnitsLabel,"Temp Units: ");
+
+ui_FahrenheitLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_FahrenheitLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_FahrenheitLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_FahrenheitLabel, 117 );
+lv_obj_set_y( ui_FahrenheitLabel, -15 );
+lv_obj_set_align( ui_FahrenheitLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_FahrenheitLabel,"F");
+
+ui_TempUnitsSwitch = lv_switch_create(ui_Setup);
+lv_obj_set_width( ui_TempUnitsSwitch, 50);
+lv_obj_set_height( ui_TempUnitsSwitch, 22);
+lv_obj_set_x( ui_TempUnitsSwitch, -3 );
+lv_obj_set_y( ui_TempUnitsSwitch, -15 );
+lv_obj_set_align( ui_TempUnitsSwitch, LV_ALIGN_CENTER );
+lv_obj_add_state( ui_TempUnitsSwitch, LV_STATE_CHECKED ); /// States
+lv_obj_set_style_bg_color(ui_TempUnitsSwitch, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_TempUnitsSwitch, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+ui_CelciusLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_CelciusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_CelciusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_CelciusLabel, 187 );
+lv_obj_set_y( ui_CelciusLabel, -15 );
+lv_obj_set_align( ui_CelciusLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_CelciusLabel,"C");
+
+ui_TempCorrectionTextLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_TempCorrectionTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempCorrectionTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempCorrectionTextLabel, 7 );
+lv_obj_set_y( ui_TempCorrectionTextLabel, -100 );
+lv_obj_set_align( ui_TempCorrectionTextLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TempCorrectionTextLabel,"Temp Correction:");
+
+ui_TempCorrectionLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_TempCorrectionLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempCorrectionLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempCorrectionLabel, 138 );
+lv_obj_set_y( ui_TempCorrectionLabel, -100 );
+lv_obj_set_align( ui_TempCorrectionLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TempCorrectionLabel,"-3.8°");
+
+ui_TempCorrectionSlider = lv_slider_create(ui_Setup);
+lv_slider_set_range(ui_TempCorrectionSlider, -100,30);
+if (lv_slider_get_mode(ui_TempCorrectionSlider)==LV_SLIDER_MODE_RANGE ) lv_slider_set_left_value( ui_TempCorrectionSlider, -65, LV_ANIM_OFF);
+lv_obj_set_width( ui_TempCorrectionSlider, 127);
+lv_obj_set_height( ui_TempCorrectionSlider, 10);
+lv_obj_set_x( ui_TempCorrectionSlider, -9 );
+lv_obj_set_y( ui_TempCorrectionSlider, -100 );
+lv_obj_set_align( ui_TempCorrectionSlider, LV_ALIGN_RIGHT_MID );
+
+
+ui_TempSwingTextLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_TempSwingTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempSwingTextLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempSwingTextLabel, 7 );
+lv_obj_set_y( ui_TempSwingTextLabel, -58 );
+lv_obj_set_align( ui_TempSwingTextLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TempSwingTextLabel,"Temp Swing:");
+
+ui_TempSwingLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_TempSwingLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_TempSwingLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_TempSwingLabel, 138 );
+lv_obj_set_y( ui_TempSwingLabel, -58 );
+lv_obj_set_align( ui_TempSwingLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_TempSwingLabel,"3.5°");
+
+ui_TempSwingSlider = lv_slider_create(ui_Setup);
+lv_slider_set_range(ui_TempSwingSlider, 0,60);
+lv_slider_set_value( ui_TempSwingSlider, 30, LV_ANIM_OFF);
+if (lv_slider_get_mode(ui_TempSwingSlider)==LV_SLIDER_MODE_RANGE ) lv_slider_set_left_value( ui_TempSwingSlider, 0, LV_ANIM_OFF);
+lv_obj_set_width( ui_TempSwingSlider, 127);
+lv_obj_set_height( ui_TempSwingSlider, 10);
+lv_obj_set_x( ui_TempSwingSlider, -9 );
+lv_obj_set_y( ui_TempSwingSlider, -58 );
+lv_obj_set_align( ui_TempSwingSlider, LV_ALIGN_RIGHT_MID );
+
+
+ui_HvacCoolLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_HvacCoolLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HvacCoolLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HvacCoolLabel, 7 );
+lv_obj_set_y( ui_HvacCoolLabel, 31 );
+lv_obj_set_align( ui_HvacCoolLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_HvacCoolLabel,"HVAC Cool:");
+
+ui_HvacCoolCheckbox = lv_checkbox_create(ui_Setup);
+lv_checkbox_set_text(ui_HvacCoolCheckbox,"");
+lv_obj_set_width( ui_HvacCoolCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HvacCoolCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HvacCoolCheckbox, 0 );
+lv_obj_set_y( ui_HvacCoolCheckbox, 31 );
+lv_obj_set_align( ui_HvacCoolCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_HvacCoolCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_HvacFanLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_HvacFanLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HvacFanLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HvacFanLabel, 7 );
+lv_obj_set_y( ui_HvacFanLabel, 63 );
+lv_obj_set_align( ui_HvacFanLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_long_mode(ui_HvacFanLabel,LV_LABEL_LONG_SCROLL);
+lv_label_set_text(ui_HvacFanLabel,"HVAC Fan:");
+
+ui_HvacFanCheckbox = lv_checkbox_create(ui_Setup);
+lv_checkbox_set_text(ui_HvacFanCheckbox,"");
+lv_obj_set_width( ui_HvacFanCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HvacFanCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HvacFanCheckbox, 0 );
+lv_obj_set_y( ui_HvacFanCheckbox, 63 );
+lv_obj_set_align( ui_HvacFanCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_HvacFanCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_SetupMqttBtn = lv_btn_create(ui_Setup);
+lv_obj_set_width( ui_SetupMqttBtn, 100);
+lv_obj_set_height( ui_SetupMqttBtn, 36);
+lv_obj_set_x( ui_SetupMqttBtn, -2 );
+lv_obj_set_y( ui_SetupMqttBtn, -83 );
+lv_obj_set_align( ui_SetupMqttBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupMqttBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupMqttBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupMqttBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupMqttBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupMqttBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupMqttBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupMqttLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_SetupMqttLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupMqttLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupMqttLabel, -30 );
+lv_obj_set_y( ui_SetupMqttLabel, -94 );
+lv_obj_set_align( ui_SetupMqttLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupMqttLabel,"MQTT");
+lv_obj_set_style_text_color(ui_SetupMqttLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupMqttLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupUncommonBtn = lv_btn_create(ui_Setup);
+lv_obj_set_width( ui_SetupUncommonBtn, 100);
+lv_obj_set_height( ui_SetupUncommonBtn, 36);
+lv_obj_set_x( ui_SetupUncommonBtn, -2 );
+lv_obj_set_y( ui_SetupUncommonBtn, -42 );
+lv_obj_set_align( ui_SetupUncommonBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupUncommonBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupUncommonBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupUncommonBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupUncommonBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupUncommonBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupUncommonBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupUncommonLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_SetupUncommonLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupUncommonLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupUncommonLabel, -27 );
+lv_obj_set_y( ui_SetupUncommonLabel, -53 );
+lv_obj_set_align( ui_SetupUncommonLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupUncommonLabel,"More...");
+lv_obj_set_style_text_color(ui_SetupUncommonLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupUncommonLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupHomeBtn = lv_btn_create(ui_Setup);
+lv_obj_set_width( ui_SetupHomeBtn, 100);
+lv_obj_set_height( ui_SetupHomeBtn, 36);
+lv_obj_set_x( ui_SetupHomeBtn, -2 );
+lv_obj_set_y( ui_SetupHomeBtn, -3 );
+lv_obj_set_align( ui_SetupHomeBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupHomeBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupHomeBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupHomeBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupHomeBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupHomeBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupHomeBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupHomeLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_SetupHomeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupHomeLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupHomeLabel, -33 );
+lv_obj_set_y( ui_SetupHomeLabel, -14 );
+lv_obj_set_align( ui_SetupHomeLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupHomeLabel,"Save");
+lv_obj_set_style_text_color(ui_SetupHomeLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupHomeLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_HomeAutomationLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_HomeAutomationLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HomeAutomationLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HomeAutomationLabel, 7 );
+lv_obj_set_y( ui_HomeAutomationLabel, 95 );
+lv_obj_set_align( ui_HomeAutomationLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_long_mode(ui_HomeAutomationLabel,LV_LABEL_LONG_SCROLL);
+lv_label_set_text(ui_HomeAutomationLabel,"Matter Enable:");
+
+ui_HomeAutomationCheckbox = lv_checkbox_create(ui_Setup);
+lv_checkbox_set_text(ui_HomeAutomationCheckbox,"");
+lv_obj_set_width( ui_HomeAutomationCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_HomeAutomationCheckbox, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_HomeAutomationCheckbox, 0 );
+lv_obj_set_y( ui_HomeAutomationCheckbox, 95 );
+lv_obj_set_align( ui_HomeAutomationCheckbox, LV_ALIGN_CENTER );
+lv_obj_add_flag( ui_HomeAutomationCheckbox, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+ui_SetupCancelBtn = lv_btn_create(ui_Setup);
+lv_obj_set_width( ui_SetupCancelBtn, 100);
+lv_obj_set_height( ui_SetupCancelBtn, 36);
+lv_obj_set_x( ui_SetupCancelBtn, -2 );
+lv_obj_set_y( ui_SetupCancelBtn, -124 );
+lv_obj_set_align( ui_SetupCancelBtn, LV_ALIGN_BOTTOM_RIGHT );
+lv_obj_add_flag( ui_SetupCancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SetupCancelBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SetupCancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SetupCancelBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SetupCancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SetupCancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SetupCancelLabel = lv_label_create(ui_Setup);
+lv_obj_set_width( ui_SetupCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SetupCancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SetupCancelLabel, -30 );
+lv_obj_set_y( ui_SetupCancelLabel, -134 );
+lv_obj_set_align( ui_SetupCancelLabel, LV_ALIGN_BOTTOM_RIGHT );
+lv_label_set_text(ui_SetupCancelLabel,"Cancel");
+lv_obj_set_style_text_color(ui_SetupCancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SetupCancelLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+lv_obj_add_event_cb(ui_TempCorrectionSlider, ui_event_TempCorrectionSlider, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_TempSwingSlider, ui_event_TempSwingSlider, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupMqttBtn, ui_event_SetupMqttBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupUncommonBtn, ui_event_SetupUncommonBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupHomeBtn, ui_event_SetupHomeBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SetupCancelBtn, ui_event_SetupCancelBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_Setup, ui_event_Setup, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_ThermostatRestart.c b/app/src/ui/screens/ui_ThermostatRestart.c
index bdee363..4abaf3a 100644
--- a/app/src/ui/screens/ui_ThermostatRestart.c
+++ b/app/src/ui/screens/ui_ThermostatRestart.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,39 +7,37 @@
void ui_ThermostatRestart_screen_init(void)
{
- ui_ThermostatRestart = lv_obj_create(NULL);
- lv_obj_clear_flag(ui_ThermostatRestart,
- LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_ThermostatRestart, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_ThermostatRestart, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_ThermostatRestart, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_ThermostatRestart, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_ThermostatRestart, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_ThermostatRestart = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_ThermostatRestart, LV_OBJ_FLAG_CLICKABLE | LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_ThermostatRestart, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_ThermostatRestart, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_ThermostatRestart, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_ThermostatRestart, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_ThermostatRestart, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_Notification = lv_label_create(ui_ThermostatRestart);
- lv_obj_set_width(ui_Notification, lv_pct(70));
- lv_obj_set_height(ui_Notification, lv_pct(13));
- lv_obj_set_align(ui_Notification, LV_ALIGN_CENTER);
- lv_label_set_text(ui_Notification, "Restarting Thermostat");
- lv_obj_set_style_text_align(ui_Notification, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_radius(ui_Notification, 20, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_color(ui_Notification, lv_color_hex(0xFFD800), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_Notification, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_pad_left(ui_Notification, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_pad_right(ui_Notification, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_pad_top(ui_Notification, 7, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_pad_bottom(ui_Notification, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_Notification = lv_label_create(ui_ThermostatRestart);
+lv_obj_set_width( ui_Notification, lv_pct(70));
+lv_obj_set_height( ui_Notification, lv_pct(13));
+lv_obj_set_align( ui_Notification, LV_ALIGN_CENTER );
+lv_label_set_text(ui_Notification,"Restarting Thermostat");
+lv_obj_set_style_text_align(ui_Notification, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_radius(ui_Notification, 20, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_color(ui_Notification, lv_color_hex(0xFFD800), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_Notification, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_pad_left(ui_Notification, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_pad_right(ui_Notification, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_pad_top(ui_Notification, 7, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_pad_bottom(ui_Notification, 0, LV_PART_MAIN| LV_STATE_DEFAULT);
- ui_RestartCountdown = lv_label_create(ui_ThermostatRestart);
- lv_obj_set_width(ui_RestartCountdown, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_RestartCountdown, LV_SIZE_CONTENT); /// 1
- lv_obj_set_y(ui_RestartCountdown, 52);
- lv_obj_set_x(ui_RestartCountdown, lv_pct(0));
- lv_obj_set_align(ui_RestartCountdown, LV_ALIGN_CENTER);
- lv_label_set_text(ui_RestartCountdown, "30");
- lv_obj_set_style_text_font(ui_RestartCountdown, &lv_font_montserrat_24, LV_PART_MAIN | LV_STATE_DEFAULT);
+ui_RestartCountdown = lv_label_create(ui_ThermostatRestart);
+lv_obj_set_width( ui_RestartCountdown, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_RestartCountdown, LV_SIZE_CONTENT); /// 1
+lv_obj_set_y( ui_RestartCountdown, 52 );
+lv_obj_set_x( ui_RestartCountdown, lv_pct(0) );
+lv_obj_set_align( ui_RestartCountdown, LV_ALIGN_CENTER );
+lv_label_set_text(ui_RestartCountdown,"30");
+lv_obj_set_style_text_font(ui_RestartCountdown, &lv_font_montserrat_24, LV_PART_MAIN| LV_STATE_DEFAULT);
- lv_obj_add_event_cb(ui_ThermostatRestart, ui_event_ThermostatRestart, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_ThermostatRestart, ui_event_ThermostatRestart, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/screens/ui_WifiConfig.c b/app/src/ui/screens/ui_WifiConfig.c
index 4c2bdab..38f04ba 100644
--- a/app/src/ui/screens/ui_WifiConfig.c
+++ b/app/src/ui/screens/ui_WifiConfig.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -7,137 +7,137 @@
void ui_WifiConfig_screen_init(void)
{
- ui_WifiConfig = lv_obj_create(NULL);
- lv_obj_clear_flag(ui_WifiConfig, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC |
- LV_OBJ_FLAG_SCROLL_MOMENTUM); /// Flags
- lv_obj_set_scrollbar_mode(ui_WifiConfig, LV_SCROLLBAR_MODE_OFF);
- lv_obj_set_style_bg_color(ui_WifiConfig, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_WifiConfig, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_WifiConfig, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_WifiConfig, LV_GRAD_DIR_HOR, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_Keyboard = lv_keyboard_create(ui_WifiConfig);
- lv_obj_set_width(ui_Keyboard, 320);
- lv_obj_set_height(ui_Keyboard, 120);
- lv_obj_set_x(ui_Keyboard, 0);
- lv_obj_set_y(ui_Keyboard, 60);
- lv_obj_set_align(ui_Keyboard, LV_ALIGN_LEFT_MID);
- lv_obj_set_style_bg_color(ui_Keyboard, lv_color_hex(0xBD6994), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_Keyboard, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_PSK = lv_textarea_create(ui_WifiConfig);
- lv_obj_set_width(ui_PSK, 205);
- lv_obj_set_height(ui_PSK, LV_SIZE_CONTENT); /// 33
- lv_obj_set_x(ui_PSK, -55);
- lv_obj_set_y(ui_PSK, -21);
- lv_obj_set_align(ui_PSK, LV_ALIGN_CENTER);
- lv_textarea_set_placeholder_text(ui_PSK, "Placeholder...");
- lv_textarea_set_one_line(ui_PSK, true);
- lv_obj_set_style_text_font(ui_PSK, &lv_font_montserrat_20, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_PwdLabel = lv_label_create(ui_WifiConfig);
- lv_obj_set_width(ui_PwdLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_PwdLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_PwdLabel, 6);
- lv_obj_set_y(ui_PwdLabel, -51);
- lv_obj_set_align(ui_PwdLabel, LV_ALIGN_LEFT_MID);
- lv_label_set_text(ui_PwdLabel, "Password:");
-
- ui_SsidDropdown = lv_dropdown_create(ui_WifiConfig);
- lv_dropdown_set_options(ui_SsidDropdown, "");
- lv_obj_set_width(ui_SsidDropdown, 165);
- lv_obj_set_height(ui_SsidDropdown, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SsidDropdown, -1);
- lv_obj_set_y(ui_SsidDropdown, 1);
- lv_obj_set_align(ui_SsidDropdown, LV_ALIGN_TOP_RIGHT);
- lv_obj_add_flag(ui_SsidDropdown, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
-
- ui_ScanBtn = lv_btn_create(ui_WifiConfig);
- lv_obj_set_width(ui_ScanBtn, 100);
- lv_obj_set_height(ui_ScanBtn, 36);
- lv_obj_set_x(ui_ScanBtn, 1);
- lv_obj_set_y(ui_ScanBtn, 1);
- lv_obj_add_flag(ui_ScanBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_ScanBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_ScanBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_ScanBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_ScanBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_ScanBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_ScanLabel = lv_label_create(ui_WifiConfig);
- lv_obj_set_width(ui_ScanLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_ScanLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_ScanLabel, -111);
- lv_obj_set_y(ui_ScanLabel, -102);
- lv_obj_set_align(ui_ScanLabel, LV_ALIGN_CENTER);
- lv_label_set_text(ui_ScanLabel, "Scan");
- lv_obj_set_style_text_color(ui_ScanLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_ScanLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SaveBtn = lv_btn_create(ui_WifiConfig);
- lv_obj_set_width(ui_SaveBtn, 100);
- lv_obj_set_height(ui_SaveBtn, 36);
- lv_obj_set_x(ui_SaveBtn, -1);
- lv_obj_set_y(ui_SaveBtn, -20);
- lv_obj_set_align(ui_SaveBtn, LV_ALIGN_RIGHT_MID);
- lv_obj_add_flag(ui_SaveBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_SaveBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_SaveBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_SaveBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_SaveBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_SaveBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_SaveLabel = lv_label_create(ui_WifiConfig);
- lv_obj_set_width(ui_SaveLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_SaveLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_SaveLabel, 109);
- lv_obj_set_y(ui_SaveLabel, -20);
- lv_obj_set_align(ui_SaveLabel, LV_ALIGN_CENTER);
- lv_label_set_text(ui_SaveLabel, "Save");
- lv_obj_set_style_text_color(ui_SaveLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_SaveLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CancelBtn = lv_btn_create(ui_WifiConfig);
- lv_obj_set_width(ui_CancelBtn, 100);
- lv_obj_set_height(ui_CancelBtn, 36);
- lv_obj_set_x(ui_CancelBtn, -1);
- lv_obj_set_y(ui_CancelBtn, -60);
- lv_obj_set_align(ui_CancelBtn, LV_ALIGN_RIGHT_MID);
- lv_obj_add_flag(ui_CancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS); /// Flags
- lv_obj_clear_flag(ui_CancelBtn, LV_OBJ_FLAG_SCROLLABLE); /// Flags
- lv_obj_set_style_bg_color(ui_CancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_opa(ui_CancelBtn, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_color(ui_CancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_bg_grad_dir(ui_CancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_CancelLabel = lv_label_create(ui_WifiConfig);
- lv_obj_set_width(ui_CancelLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_CancelLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_CancelLabel, 109);
- lv_obj_set_y(ui_CancelLabel, -60);
- lv_obj_set_align(ui_CancelLabel, LV_ALIGN_CENTER);
- lv_label_set_text(ui_CancelLabel, "Cancel");
- lv_obj_set_style_text_color(ui_CancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT);
- lv_obj_set_style_text_opa(ui_CancelLabel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
-
- ui_WifiStatusLabel = lv_label_create(ui_WifiConfig);
- lv_obj_set_width(ui_WifiStatusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_height(ui_WifiStatusLabel, LV_SIZE_CONTENT); /// 1
- lv_obj_set_x(ui_WifiStatusLabel, 6);
- lv_obj_set_y(ui_WifiStatusLabel, 42);
- lv_label_set_long_mode(ui_WifiStatusLabel, LV_LABEL_LONG_CLIP);
- lv_label_set_text(ui_WifiStatusLabel, "");
- lv_obj_clear_flag(ui_WifiStatusLabel,
- LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE |
- LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM |
- LV_OBJ_FLAG_SCROLL_CHAIN); /// Flags
- lv_obj_set_scrollbar_mode(ui_WifiStatusLabel, LV_SCROLLBAR_MODE_OFF);
-
- lv_keyboard_set_textarea(ui_Keyboard, ui_PSK);
- lv_obj_add_event_cb(ui_SsidDropdown, ui_event_SsidDropdown, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_ScanBtn, ui_event_ScanBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_SaveBtn, ui_event_SaveBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_CancelBtn, ui_event_CancelBtn, LV_EVENT_ALL, NULL);
- lv_obj_add_event_cb(ui_WifiStatusLabel, ui_event_WifiStatusLabel, LV_EVENT_ALL, NULL);
+ui_WifiConfig = lv_obj_create(NULL);
+lv_obj_clear_flag( ui_WifiConfig, LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM ); /// Flags
+lv_obj_set_scrollbar_mode(ui_WifiConfig, LV_SCROLLBAR_MODE_OFF);
+lv_obj_set_style_bg_color(ui_WifiConfig, lv_color_hex(0xB787E2), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_WifiConfig, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_WifiConfig, lv_color_hex(0xBE5757), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_WifiConfig, LV_GRAD_DIR_HOR, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_Keyboard = lv_keyboard_create(ui_WifiConfig);
+lv_obj_set_width( ui_Keyboard, 320);
+lv_obj_set_height( ui_Keyboard, 120);
+lv_obj_set_x( ui_Keyboard, 0 );
+lv_obj_set_y( ui_Keyboard, 60 );
+lv_obj_set_align( ui_Keyboard, LV_ALIGN_LEFT_MID );
+lv_obj_set_style_bg_color(ui_Keyboard, lv_color_hex(0xBD6994), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_Keyboard, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_PSK = lv_textarea_create(ui_WifiConfig);
+lv_obj_set_width( ui_PSK, 205);
+lv_obj_set_height( ui_PSK, LV_SIZE_CONTENT); /// 33
+lv_obj_set_x( ui_PSK, -55 );
+lv_obj_set_y( ui_PSK, -21 );
+lv_obj_set_align( ui_PSK, LV_ALIGN_CENTER );
+lv_textarea_set_placeholder_text(ui_PSK,"Password");
+lv_textarea_set_one_line(ui_PSK,true);
+lv_obj_set_style_text_font(ui_PSK, &lv_font_montserrat_20, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+
+
+ui_PwdLabel = lv_label_create(ui_WifiConfig);
+lv_obj_set_width( ui_PwdLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_PwdLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_PwdLabel, 6 );
+lv_obj_set_y( ui_PwdLabel, -51 );
+lv_obj_set_align( ui_PwdLabel, LV_ALIGN_LEFT_MID );
+lv_label_set_text(ui_PwdLabel,"Password:");
+
+ui_SsidDropdown = lv_dropdown_create(ui_WifiConfig);
+lv_dropdown_set_options( ui_SsidDropdown, "" );
+lv_obj_set_width( ui_SsidDropdown, 165);
+lv_obj_set_height( ui_SsidDropdown, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SsidDropdown, -1 );
+lv_obj_set_y( ui_SsidDropdown, 1 );
+lv_obj_set_align( ui_SsidDropdown, LV_ALIGN_TOP_RIGHT );
+lv_obj_add_flag( ui_SsidDropdown, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+
+
+
+ui_ScanBtn = lv_btn_create(ui_WifiConfig);
+lv_obj_set_width( ui_ScanBtn, 100);
+lv_obj_set_height( ui_ScanBtn, 36);
+lv_obj_set_x( ui_ScanBtn, 1 );
+lv_obj_set_y( ui_ScanBtn, 1 );
+lv_obj_add_flag( ui_ScanBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_ScanBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_ScanBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_ScanBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_ScanBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_ScanBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_ScanLabel = lv_label_create(ui_WifiConfig);
+lv_obj_set_width( ui_ScanLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_ScanLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_ScanLabel, -111 );
+lv_obj_set_y( ui_ScanLabel, -102 );
+lv_obj_set_align( ui_ScanLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_ScanLabel,"Scan");
+lv_obj_set_style_text_color(ui_ScanLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_ScanLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SaveBtn = lv_btn_create(ui_WifiConfig);
+lv_obj_set_width( ui_SaveBtn, 100);
+lv_obj_set_height( ui_SaveBtn, 36);
+lv_obj_set_x( ui_SaveBtn, -1 );
+lv_obj_set_y( ui_SaveBtn, -20 );
+lv_obj_set_align( ui_SaveBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_SaveBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_SaveBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_SaveBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_SaveBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_SaveBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_SaveBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_SaveLabel = lv_label_create(ui_WifiConfig);
+lv_obj_set_width( ui_SaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_SaveLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_SaveLabel, 109 );
+lv_obj_set_y( ui_SaveLabel, -20 );
+lv_obj_set_align( ui_SaveLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_SaveLabel,"Save");
+lv_obj_set_style_text_color(ui_SaveLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_SaveLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_CancelBtn = lv_btn_create(ui_WifiConfig);
+lv_obj_set_width( ui_CancelBtn, 100);
+lv_obj_set_height( ui_CancelBtn, 36);
+lv_obj_set_x( ui_CancelBtn, -1 );
+lv_obj_set_y( ui_CancelBtn, -60 );
+lv_obj_set_align( ui_CancelBtn, LV_ALIGN_RIGHT_MID );
+lv_obj_add_flag( ui_CancelBtn, LV_OBJ_FLAG_SCROLL_ON_FOCUS ); /// Flags
+lv_obj_clear_flag( ui_CancelBtn, LV_OBJ_FLAG_SCROLLABLE ); /// Flags
+lv_obj_set_style_bg_color(ui_CancelBtn, lv_color_hex(0x2095F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_opa(ui_CancelBtn, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+lv_obj_set_style_bg_grad_color(ui_CancelBtn, lv_color_hex(0x2620F6), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_bg_grad_dir(ui_CancelBtn, LV_GRAD_DIR_VER, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_CancelLabel = lv_label_create(ui_WifiConfig);
+lv_obj_set_width( ui_CancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_CancelLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_CancelLabel, 109 );
+lv_obj_set_y( ui_CancelLabel, -60 );
+lv_obj_set_align( ui_CancelLabel, LV_ALIGN_CENTER );
+lv_label_set_text(ui_CancelLabel,"Cancel");
+lv_obj_set_style_text_color(ui_CancelLabel, lv_color_hex(0xFFE300), LV_PART_MAIN | LV_STATE_DEFAULT );
+lv_obj_set_style_text_opa(ui_CancelLabel, 255, LV_PART_MAIN| LV_STATE_DEFAULT);
+
+ui_WifiStatusLabel = lv_label_create(ui_WifiConfig);
+lv_obj_set_width( ui_WifiStatusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_height( ui_WifiStatusLabel, LV_SIZE_CONTENT); /// 1
+lv_obj_set_x( ui_WifiStatusLabel, 6 );
+lv_obj_set_y( ui_WifiStatusLabel, 42 );
+lv_label_set_long_mode(ui_WifiStatusLabel,LV_LABEL_LONG_CLIP);
+lv_label_set_text(ui_WifiStatusLabel,"");
+lv_obj_clear_flag( ui_WifiStatusLabel, LV_OBJ_FLAG_PRESS_LOCK | LV_OBJ_FLAG_CLICK_FOCUSABLE | LV_OBJ_FLAG_GESTURE_BUBBLE | LV_OBJ_FLAG_SNAPPABLE | LV_OBJ_FLAG_SCROLLABLE | LV_OBJ_FLAG_SCROLL_ELASTIC | LV_OBJ_FLAG_SCROLL_MOMENTUM | LV_OBJ_FLAG_SCROLL_CHAIN ); /// Flags
+lv_obj_set_scrollbar_mode(ui_WifiStatusLabel, LV_SCROLLBAR_MODE_OFF);
+
+lv_keyboard_set_textarea(ui_Keyboard,ui_PSK);
+lv_obj_add_event_cb(ui_SsidDropdown, ui_event_SsidDropdown, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_ScanBtn, ui_event_ScanBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_SaveBtn, ui_event_SaveBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_CancelBtn, ui_event_CancelBtn, LV_EVENT_ALL, NULL);
+lv_obj_add_event_cb(ui_WifiStatusLabel, ui_event_WifiStatusLabel, LV_EVENT_ALL, NULL);
}
diff --git a/app/src/ui/ui.c b/app/src/ui/ui.c
index 8bd8b5d..2167a59 100644
--- a/app/src/ui/ui.c
+++ b/app/src/ui/ui.c
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -8,469 +8,538 @@
///////////////////// VARIABLES ////////////////////
+
// SCREEN: ui_MainScreen
void ui_MainScreen_screen_init(void);
-void ui_event_MainScreen(lv_event_t * e);
-lv_obj_t * ui_MainScreen;
-void ui_event_TimeLabel(lv_event_t * e);
-lv_obj_t * ui_TimeLabel;
-void ui_event_StatusLabel(lv_event_t * e);
-lv_obj_t * ui_StatusLabel;
-void ui_event_TempLabel(lv_event_t * e);
-lv_obj_t * ui_TempLabel;
-void ui_event_HumidityLabel(lv_event_t * e);
-lv_obj_t * ui_HumidityLabel;
-void ui_event_ModeDropdown(lv_event_t * e);
-lv_obj_t * ui_ModeDropdown;
-void ui_event_SetupBtn(lv_event_t * e);
-lv_obj_t * ui_SetupBtn;
-lv_obj_t * ui_SetupLabel;
-lv_obj_t * ui_SetTempBg1;
-lv_obj_t * ui_SetTempBg;
-void ui_event_TempArc(lv_event_t * e);
-lv_obj_t * ui_TempArc;
-lv_obj_t * ui_SetTemp;
-lv_obj_t * ui_SetTempFrac;
-void ui_event_TempDecreaseBtn(lv_event_t * e);
-lv_obj_t * ui_TempDecreaseBtn;
-lv_obj_t * ui_TempDecreaseLabel;
-void ui_event_TempIncreaseBtn(lv_event_t * e);
-lv_obj_t * ui_TempIncreaseBtn;
-lv_obj_t * ui_TempIncreaseLabel;
-void ui_event_InfoBtn(lv_event_t * e);
-lv_obj_t * ui_InfoBtn;
-lv_obj_t * ui_InfoLabel;
-lv_obj_t * ui_WifiIndicatorLabel;
+void ui_event_MainScreen( lv_event_t * e);
+lv_obj_t *ui_MainScreen;
+void ui_event_TimeLabel( lv_event_t * e);
+lv_obj_t *ui_TimeLabel;
+void ui_event_StatusLabel( lv_event_t * e);
+lv_obj_t *ui_StatusLabel;
+void ui_event_TempLabel( lv_event_t * e);
+lv_obj_t *ui_TempLabel;
+void ui_event_HumidityLabel( lv_event_t * e);
+lv_obj_t *ui_HumidityLabel;
+void ui_event_ModeDropdown( lv_event_t * e);
+lv_obj_t *ui_ModeDropdown;
+void ui_event_SetupBtn( lv_event_t * e);
+lv_obj_t *ui_SetupBtn;
+lv_obj_t *ui_SetupLabel;
+lv_obj_t *ui_SetTempBg1;
+lv_obj_t *ui_SetTempBg;
+void ui_event_TempArc( lv_event_t * e);
+lv_obj_t *ui_TempArc;
+lv_obj_t *ui_SetTemp;
+lv_obj_t *ui_SetTempFrac;
+void ui_event_TempDecreaseBtn( lv_event_t * e);
+lv_obj_t *ui_TempDecreaseBtn;
+lv_obj_t *ui_TempDecreaseLabel;
+void ui_event_TempIncreaseBtn( lv_event_t * e);
+lv_obj_t *ui_TempIncreaseBtn;
+lv_obj_t *ui_TempIncreaseLabel;
+void ui_event_InfoBtn( lv_event_t * e);
+lv_obj_t *ui_InfoBtn;
+lv_obj_t *ui_InfoLabel;
+lv_obj_t *ui_WifiIndicatorLabel;
+
// SCREEN: ui_Info
void ui_Info_screen_init(void);
-void ui_event_Info(lv_event_t * e);
-lv_obj_t * ui_Info;
-lv_obj_t * ui_WifiConnectedLabel;
-lv_obj_t * ui_WifiConnCheckBox;
-lv_obj_t * ui_WifiSsidLabel;
-lv_obj_t * ui_IPLabel;
-lv_obj_t * ui_HostnameLabel;
-lv_obj_t * ui_RssiLabel;
-lv_obj_t * ui_FwVersionLabel;
-lv_obj_t * ui_BuildDateLabel;
-lv_obj_t * ui_CopyrightLabel;
-void ui_event_ShowQR(lv_event_t * e);
-lv_obj_t * ui_ShowQR;
-lv_obj_t * ui_ShowQRLabel;
-void ui_event_HomeBtn(lv_event_t * e);
-lv_obj_t * ui_HomeBtn;
-lv_obj_t * ui_HomeLabel;
+void ui_event_Info( lv_event_t * e);
+lv_obj_t *ui_Info;
+lv_obj_t *ui_WifiConnectedLabel;
+lv_obj_t *ui_WifiConnCheckBox;
+lv_obj_t *ui_WifiSsidLabel;
+lv_obj_t *ui_IPLabel;
+lv_obj_t *ui_HostnameLabel;
+lv_obj_t *ui_RssiLabel;
+lv_obj_t *ui_FwVersionLabel;
+lv_obj_t *ui_BuildDateLabel;
+lv_obj_t *ui_CopyrightLabel;
+void ui_event_ShowQR( lv_event_t * e);
+lv_obj_t *ui_ShowQR;
+lv_obj_t *ui_ShowQRLabel;
+void ui_event_HomeBtn( lv_event_t * e);
+lv_obj_t *ui_HomeBtn;
+lv_obj_t *ui_HomeLabel;
+
// SCREEN: ui_Setup
void ui_Setup_screen_init(void);
-void ui_event_Setup(lv_event_t * e);
-lv_obj_t * ui_Setup;
-lv_obj_t * ui_TempUnitsLabel;
-lv_obj_t * ui_FahrenheitLabel;
-lv_obj_t * ui_TempUnitsSwitch;
-lv_obj_t * ui_CelciusLabel;
-lv_obj_t * ui_TempCorrectionTextLabel;
-lv_obj_t * ui_TempCorrectionLabel;
-void ui_event_TempCorrectionSlider(lv_event_t * e);
-lv_obj_t * ui_TempCorrectionSlider;
-lv_obj_t * ui_TempSwingTextLabel;
-lv_obj_t * ui_TempSwingLabel;
-void ui_event_TempSwingSlider(lv_event_t * e);
-lv_obj_t * ui_TempSwingSlider;
-lv_obj_t * ui_HvacCoolLabel;
-lv_obj_t * ui_HvacCoolCheckbox;
-lv_obj_t * ui_HvacFanLabel;
-lv_obj_t * ui_HvacFanCheckbox;
-void ui_event_SetupUncommonBtn(lv_event_t * e);
-lv_obj_t * ui_SetupUncommonBtn;
-lv_obj_t * ui_SetupUncommonLabel;
-void ui_event_SetupHomeBtn(lv_event_t * e);
-lv_obj_t * ui_SetupHomeBtn;
-lv_obj_t * ui_SetupHomeLabel;
-lv_obj_t * ui_MatterLabel;
-lv_obj_t * ui_MatterCheckbox;
+void ui_event_Setup( lv_event_t * e);
+lv_obj_t *ui_Setup;
+lv_obj_t *ui_TempUnitsLabel;
+lv_obj_t *ui_FahrenheitLabel;
+lv_obj_t *ui_TempUnitsSwitch;
+lv_obj_t *ui_CelciusLabel;
+lv_obj_t *ui_TempCorrectionTextLabel;
+lv_obj_t *ui_TempCorrectionLabel;
+void ui_event_TempCorrectionSlider( lv_event_t * e);
+lv_obj_t *ui_TempCorrectionSlider;
+lv_obj_t *ui_TempSwingTextLabel;
+lv_obj_t *ui_TempSwingLabel;
+void ui_event_TempSwingSlider( lv_event_t * e);
+lv_obj_t *ui_TempSwingSlider;
+lv_obj_t *ui_HvacCoolLabel;
+lv_obj_t *ui_HvacCoolCheckbox;
+lv_obj_t *ui_HvacFanLabel;
+lv_obj_t *ui_HvacFanCheckbox;
+void ui_event_SetupMqttBtn( lv_event_t * e);
+lv_obj_t *ui_SetupMqttBtn;
+lv_obj_t *ui_SetupMqttLabel;
+void ui_event_SetupUncommonBtn( lv_event_t * e);
+lv_obj_t *ui_SetupUncommonBtn;
+lv_obj_t *ui_SetupUncommonLabel;
+void ui_event_SetupHomeBtn( lv_event_t * e);
+lv_obj_t *ui_SetupHomeBtn;
+lv_obj_t *ui_SetupHomeLabel;
+lv_obj_t *ui_HomeAutomationLabel;
+lv_obj_t *ui_HomeAutomationCheckbox;
+void ui_event_SetupCancelBtn( lv_event_t * e);
+lv_obj_t *ui_SetupCancelBtn;
+lv_obj_t *ui_SetupCancelLabel;
+
// SCREEN: ui_LessCommonSetup
void ui_LessCommonSetup_screen_init(void);
-void ui_event_LessCommonSetup(lv_event_t * e);
-lv_obj_t * ui_LessCommonSetup;
-void ui_event_CalibrateBtn(lv_event_t * e);
-lv_obj_t * ui_CalibrateBtn;
-lv_obj_t * ui_CalibrateLabel;
-lv_obj_t * ui_TimezoneLabel1;
-lv_obj_t * ui_TimezoneDropdown;
-lv_obj_t * ui_UiSleepTextLabel;
-lv_obj_t * ui_UiSleepLabel;
-void ui_event_UiSleepSlider(lv_event_t * e);
-lv_obj_t * ui_UiSleepSlider;
-lv_obj_t * ui_DualStageHeatLabel;
-lv_obj_t * ui_Hvac2StageHeatCheckbox;
-lv_obj_t * ui_DisableLabel1;
-lv_obj_t * ui_RevValveCheckbox;
-lv_obj_t * ui_DisableBeepLabel;
-lv_obj_t * ui_AudibleBeepCheckbox;
-void ui_event_SetupWifiBtn(lv_event_t * e);
-lv_obj_t * ui_SetupWifiBtn;
-lv_obj_t * ui_SetupWifiLabel;
-void ui_event_SetupHomeBtn2(lv_event_t * e);
-lv_obj_t * ui_SetupHomeBtn2;
-lv_obj_t * ui_SetupHomeLabel2;
+void ui_event_LessCommonSetup( lv_event_t * e);
+lv_obj_t *ui_LessCommonSetup;
+void ui_event_CalibrateBtn( lv_event_t * e);
+lv_obj_t *ui_CalibrateBtn;
+lv_obj_t *ui_CalibrateLabel;
+void ui_event_DevNameBtn( lv_event_t * e);
+lv_obj_t *ui_DevNameBtn;
+lv_obj_t *ui_TimezoneLabel1;
+lv_obj_t *ui_TimezoneDropdown;
+lv_obj_t *ui_UiSleepTextLabel;
+lv_obj_t *ui_UiSleepLabel;
+void ui_event_UiSleepSlider( lv_event_t * e);
+lv_obj_t *ui_UiSleepSlider;
+lv_obj_t *ui_DualStageHeatLabel;
+lv_obj_t *ui_Hvac2StageHeatCheckbox;
+lv_obj_t *ui_DisableLabel1;
+lv_obj_t *ui_RevValveCheckbox;
+lv_obj_t *ui_DisableBeepLabel;
+lv_obj_t *ui_AudibleBeepCheckbox;
+void ui_event_SetupWifiBtn( lv_event_t * e);
+lv_obj_t *ui_SetupWifiBtn;
+lv_obj_t *ui_SetupWifiLabel;
+void ui_event_SetupHomeBtn2( lv_event_t * e);
+lv_obj_t *ui_SetupHomeBtn2;
+lv_obj_t *ui_SetupHomeLabel2;
+lv_obj_t *ui_DevNameLabel;
+void ui_event_UncommonCancelBtn( lv_event_t * e);
+lv_obj_t *ui_UncommonCancelBtn;
+lv_obj_t *ui_UncommonCancelLabel;
+
// SCREEN: ui_WifiConfig
void ui_WifiConfig_screen_init(void);
-lv_obj_t * ui_WifiConfig;
-lv_obj_t * ui_Keyboard;
-lv_obj_t * ui_PSK;
-lv_obj_t * ui_PwdLabel;
-void ui_event_SsidDropdown(lv_event_t * e);
-lv_obj_t * ui_SsidDropdown;
-void ui_event_ScanBtn(lv_event_t * e);
-lv_obj_t * ui_ScanBtn;
-lv_obj_t * ui_ScanLabel;
-void ui_event_SaveBtn(lv_event_t * e);
-lv_obj_t * ui_SaveBtn;
-lv_obj_t * ui_SaveLabel;
-void ui_event_CancelBtn(lv_event_t * e);
-lv_obj_t * ui_CancelBtn;
-lv_obj_t * ui_CancelLabel;
-void ui_event_WifiStatusLabel(lv_event_t * e);
-lv_obj_t * ui_WifiStatusLabel;
+lv_obj_t *ui_WifiConfig;
+lv_obj_t *ui_Keyboard;
+lv_obj_t *ui_PSK;
+lv_obj_t *ui_PwdLabel;
+void ui_event_SsidDropdown( lv_event_t * e);
+lv_obj_t *ui_SsidDropdown;
+void ui_event_ScanBtn( lv_event_t * e);
+lv_obj_t *ui_ScanBtn;
+lv_obj_t *ui_ScanLabel;
+void ui_event_SaveBtn( lv_event_t * e);
+lv_obj_t *ui_SaveBtn;
+lv_obj_t *ui_SaveLabel;
+void ui_event_CancelBtn( lv_event_t * e);
+lv_obj_t *ui_CancelBtn;
+lv_obj_t *ui_CancelLabel;
+void ui_event_WifiStatusLabel( lv_event_t * e);
+lv_obj_t *ui_WifiStatusLabel;
+
// SCREEN: ui_MatterConfig
void ui_MatterConfig_screen_init(void);
-void ui_event_MatterConfig(lv_event_t * e);
-lv_obj_t * ui_MatterConfig;
-void ui_event_QrHomeBtn(lv_event_t * e);
-lv_obj_t * ui_QrHomeBtn;
-lv_obj_t * ui_SetupHomeLabel1;
-lv_obj_t * ui_QRImage;
-lv_obj_t * ui_ManualPairingCode;
+void ui_event_MatterConfig( lv_event_t * e);
+lv_obj_t *ui_MatterConfig;
+void ui_event_QrHomeBtn( lv_event_t * e);
+lv_obj_t *ui_QrHomeBtn;
+lv_obj_t *ui_SetupHomeLabel1;
+lv_obj_t *ui_QRImage;
+lv_obj_t *ui_ManualPairingCode;
+
+
+// SCREEN: ui_MqttConfig
+void ui_MqttConfig_screen_init(void);
+lv_obj_t *ui_MqttConfig;
+lv_obj_t *ui_MqttKeyboard;
+void ui_event_MqttHostname( lv_event_t * e);
+lv_obj_t *ui_MqttHostname;
+void ui_event_MqttUsername( lv_event_t * e);
+lv_obj_t *ui_MqttUsername;
+void ui_event_MqttPassword( lv_event_t * e);
+lv_obj_t *ui_MqttPassword;
+void ui_event_MqttSaveBtn( lv_event_t * e);
+lv_obj_t *ui_MqttSaveBtn;
+lv_obj_t *ui_MqttSaveLabel;
+void ui_event_MqttCancelBtn( lv_event_t * e);
+lv_obj_t *ui_MqttCancelBtn;
+lv_obj_t *ui_MqttCancelLabel;
+
+
+// SCREEN: ui_DeviceName
+void ui_DeviceName_screen_init(void);
+lv_obj_t *ui_DeviceName;
+lv_obj_t *ui_DevNameKeyboard;
+void ui_event_DeviceHostname( lv_event_t * e);
+lv_obj_t *ui_DeviceHostname;
+void ui_event_DevNameSaveBtn( lv_event_t * e);
+lv_obj_t *ui_DevNameSaveBtn;
+lv_obj_t *ui_DevNameSaveLabel;
+void ui_event_DevNameCancelBtn( lv_event_t * e);
+lv_obj_t *ui_DevNameCancelBtn;
+lv_obj_t *ui_DevNameCancelLabel;
+
// SCREEN: ui_ThermostatRestart
void ui_ThermostatRestart_screen_init(void);
-void ui_event_ThermostatRestart(lv_event_t * e);
-lv_obj_t * ui_ThermostatRestart;
-lv_obj_t * ui_Notification;
-lv_obj_t * ui_RestartCountdown;
-lv_obj_t * ui____initial_actions0;
+void ui_event_ThermostatRestart( lv_event_t * e);
+lv_obj_t *ui_ThermostatRestart;
+lv_obj_t *ui_Notification;
+lv_obj_t *ui_RestartCountdown;
+lv_obj_t *ui____initial_actions0;
///////////////////// TEST LVGL SETTINGS ////////////////////
#if LV_COLOR_DEPTH != 16
#error "LV_COLOR_DEPTH should be 16bit to match SquareLine Studio's settings"
#endif
#if LV_COLOR_16_SWAP !=1
- // #error "LV_COLOR_16_SWAP should be 1 to match SquareLine Studio's settings"
+// #error "LV_COLOR_16_SWAP should be 1 to match SquareLine Studio's settings"
#endif
///////////////////// ANIMATIONS ////////////////////
///////////////////// FUNCTIONS ////////////////////
-void ui_event_MainScreen(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
+void ui_event_MainScreen( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
}
-void ui_event_TimeLabel(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
}
-void ui_event_StatusLabel(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
+void ui_event_TimeLabel( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
}
-void ui_event_TempLabel(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
}
-void ui_event_HumidityLabel(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
+void ui_event_StatusLabel( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
}
-void ui_event_ModeDropdown(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftHvacModeChange(e);
- tftBeep(e);
- }
- if(event_code == LV_EVENT_CLICKED) {
- tftStopTouchTimer(e);
- }
-}
-void ui_event_SetupBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- _ui_screen_change(&ui_Setup, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_Setup_screen_init);
- tftStopTouchTimer(e);
- tftBeep(e);
- }
-}
-void ui_event_TempArc(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_RELEASED) {
- tftUpdateTempSet(e);
- }
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftUpdateTempSet(e);
- }
- if(event_code == LV_EVENT_RELEASED) {
- tftBeep(e);
- }
-}
-void ui_event_TempDecreaseBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- tftDecreaseSetTemp(e);
- }
-}
-void ui_event_TempIncreaseBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- tftIncreaseSetTemp(e);
- }
-}
-void ui_event_InfoBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- _ui_screen_change(&ui_Info, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_Info_screen_init);
- tftStopTouchTimer(e);
- tftBeep(e);
- }
-}
-void ui_event_Info(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_SCREEN_LOADED) {
- LoadInfoStrings(e);
- }
}
-void ui_event_ShowQR(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftBeep(e);
- _ui_screen_change(&ui_MatterConfig, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0, &ui_MatterConfig_screen_init);
- }
-}
-void ui_event_HomeBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- _ui_screen_change(&ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
- }
-}
-void ui_event_Setup(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_SCREEN_LOADED) {
- LoadConfigSettings(e);
- }
+void ui_event_TempLabel( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
}
-void ui_event_TempCorrectionSlider(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftUpdateTempCorrectionValue(e);
- }
}
-void ui_event_TempSwingSlider(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftUpdateTempSwingValue(e);
- }
+void ui_event_HumidityLabel( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
}
-void ui_event_SetupUncommonBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- _ui_screen_change(&ui_LessCommonSetup, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_LessCommonSetup_screen_init);
- tftBeep(e);
- LoadUncommonSettings(e);
- }
-}
-void ui_event_SetupHomeBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- _ui_screen_change(&ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
- SaveConfigSettings(e);
- }
-}
-void ui_event_LessCommonSetup(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_SCREEN_LOADED) {
- LoadConfigSettings(e);
- }
}
-void ui_event_CalibrateBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftCalibrate(e);
- }
+void ui_event_ModeDropdown( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftHvacModeChange( e );
+ tftBeep( e );
}
-void ui_event_UiSleepSlider(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftUpdateUiSleepValue(e);
- }
+if ( event_code == LV_EVENT_CLICKED) {
+ tftStopTouchTimer( e );
}
-void ui_event_SetupWifiBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- _ui_screen_change(&ui_WifiConfig, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_WifiConfig_screen_init);
- tftClearPsk(e);
- tftBeep(e);
- }
-}
-void ui_event_SetupHomeBtn2(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- _ui_screen_change(&ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
- SaveUncommonConfigSettings(e);
- }
-}
-void ui_event_SsidDropdown(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_VALUE_CHANGED) {
- tftBeep(e);
- }
}
-void ui_event_ScanBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- StartWifiScan(e);
- }
+void ui_event_SetupBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_Setup, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_Setup_screen_init);
+ tftStopTouchTimer( e );
+ tftBeep( e );
}
-void ui_event_SaveBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftSetNewWifi(e);
- _ui_screen_change(&ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 2, &ui_MainScreen_screen_init);
- tftAwaken(e);
- }
-}
-void ui_event_CancelBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- _ui_screen_change(&ui_Setup, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_Setup_screen_init);
- tftBeep(e);
- stopWifiScan(e);
- }
-}
-void ui_event_WifiStatusLabel(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- }
}
-void ui_event_MatterConfig(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_SCREEN_LOADED) {
-#ifdef MATTER_ENABLED
- ShowQrOnScreen(e);
-#endif
- }
+void ui_event_TempArc( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_RELEASED) {
+ tftUpdateTempSet( e );
+}
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftUpdateTempSet( e );
+}
+if ( event_code == LV_EVENT_RELEASED) {
+ tftBeep( e );
+}
+}
+void ui_event_TempDecreaseBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ tftDecreaseSetTemp( e );
+}
+}
+void ui_event_TempIncreaseBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ tftIncreaseSetTemp( e );
+}
+}
+void ui_event_InfoBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_Info, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_Info_screen_init);
+ tftStopTouchTimer( e );
+ tftBeep( e );
+}
+}
+void ui_event_Info( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_SCREEN_LOADED) {
+ LoadInfoStrings( e );
+}
+}
+void ui_event_ShowQR( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftBeep( e );
+ _ui_screen_change( &ui_MatterConfig, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0, &ui_MatterConfig_screen_init);
+}
+}
+void ui_event_HomeBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
+}
+}
+void ui_event_Setup( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_SCREEN_LOADED) {
+ LoadConfigSettings( e );
+}
+}
+void ui_event_TempCorrectionSlider( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftUpdateTempCorrectionValue( e );
+}
+}
+void ui_event_TempSwingSlider( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftUpdateTempSwingValue( e );
+}
+}
+void ui_event_SetupMqttBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_MqttConfig, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_MqttConfig_screen_init);
+ tftBeep( e );
+ loadMqttSettings( e );
+}
+}
+void ui_event_SetupUncommonBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_LessCommonSetup, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_LessCommonSetup_screen_init);
+ tftBeep( e );
+ LoadUncommonSettings( e );
+}
+}
+void ui_event_SetupHomeBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
+ SaveConfigSettings( e );
+}
+}
+void ui_event_SetupCancelBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_MainScreen_screen_init);
+ tftBeep( e );
+}
+}
+void ui_event_LessCommonSetup( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_SCREEN_LOADED) {
+ LoadConfigSettings( e );
+}
+}
+void ui_event_CalibrateBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftCalibrate( e );
+}
+}
+void ui_event_DevNameBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_DeviceName, LV_SCR_LOAD_ANIM_FADE_ON, 500, 0, &ui_DeviceName_screen_init);
+ loadDeviceName( e );
+}
+}
+void ui_event_UiSleepSlider( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftUpdateUiSleepValue( e );
+}
+}
+void ui_event_SetupWifiBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_WifiConfig, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_WifiConfig_screen_init);
+ tftClearPsk( e );
+ tftBeep( e );
+}
+}
+void ui_event_SetupHomeBtn2( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
+ SaveUncommonConfigSettings( e );
+}
+}
+void ui_event_UncommonCancelBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_Setup, LV_SCR_LOAD_ANIM_MOVE_LEFT, 500, 0, &ui_Setup_screen_init);
+ tftBeep( e );
+}
+}
+void ui_event_SsidDropdown( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_VALUE_CHANGED) {
+ tftBeep( e );
+}
+}
+void ui_event_ScanBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ StartWifiScan( e );
+}
+}
+void ui_event_SaveBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftSetNewWifi( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 2, &ui_MainScreen_screen_init);
+ tftAwaken( e );
+}
+}
+void ui_event_CancelBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_LessCommonSetup, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_LessCommonSetup_screen_init);
+ tftBeep( e );
+ stopWifiScan( e );
+}
+}
+void ui_event_WifiStatusLabel( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+}
+}
+void ui_event_MatterConfig( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_SCREEN_LOADED) {
+ ShowQrOnScreen( e );
+}
+}
+void ui_event_QrHomeBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ tftAwaken( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
+}
+}
+void ui_event_MqttHostname( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_keyboard_set_target(ui_MqttKeyboard, ui_MqttHostname);
+}
+}
+void ui_event_MqttUsername( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_keyboard_set_target(ui_MqttKeyboard, ui_MqttUsername);
+}
+}
+void ui_event_MqttPassword( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_keyboard_set_target(ui_MqttKeyboard, ui_MqttPassword);
+}
+}
+void ui_event_MqttSaveBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ saveMqttSettings( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 2, &ui_MainScreen_screen_init);
+ tftAwaken( e );
+}
+}
+void ui_event_MqttCancelBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_Setup, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_Setup_screen_init);
+ tftBeep( e );
+}
+}
+void ui_event_DeviceHostname( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_keyboard_set_target(ui_DevNameKeyboard, ui_DeviceHostname);
+}
+}
+void ui_event_DevNameSaveBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ saveDeviceName( e );
+ _ui_screen_change( &ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 2, &ui_MainScreen_screen_init);
+ tftAwaken( e );
+}
+}
+void ui_event_DevNameCancelBtn( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_CLICKED) {
+ _ui_screen_change( &ui_LessCommonSetup, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_LessCommonSetup_screen_init);
+ tftBeep( e );
+}
+}
+void ui_event_ThermostatRestart( lv_event_t * e) {
+ lv_event_code_t event_code = lv_event_get_code(e);lv_obj_t * target = lv_event_get_target(e);
+if ( event_code == LV_EVENT_SCREEN_LOADED) {
+ tftCountdown( e );
}
-void ui_event_QrHomeBtn(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_CLICKED) {
- tftAwaken(e);
- _ui_screen_change(&ui_MainScreen, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_MainScreen_screen_init);
- }
-}
-void ui_event_ThermostatRestart(lv_event_t * e)
-{
- lv_event_code_t event_code = lv_event_get_code(e);
- lv_obj_t * target = lv_event_get_target(e);
- if(event_code == LV_EVENT_SCREEN_LOADED) {
- tftCountdown(e);
- }
}
///////////////////// SCREENS ////////////////////
-void ui_init(void)
-{
- lv_disp_t * dispp = lv_disp_get_default();
- lv_theme_t * theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED),
- false, LV_FONT_DEFAULT);
- lv_disp_set_theme(dispp, theme);
- ui_MainScreen_screen_init();
- ui_Info_screen_init();
- ui_Setup_screen_init();
- ui_LessCommonSetup_screen_init();
- ui_WifiConfig_screen_init();
- ui_MatterConfig_screen_init();
- ui_ThermostatRestart_screen_init();
- ui____initial_actions0 = lv_obj_create(NULL);
- lv_disp_load_scr(ui_MainScreen);
+void ui_init( void )
+{
+lv_disp_t *dispp = lv_disp_get_default();
+lv_theme_t *theme = lv_theme_default_init(dispp, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), false, LV_FONT_DEFAULT);
+lv_disp_set_theme(dispp, theme);
+ui_MainScreen_screen_init();
+ui_Info_screen_init();
+ui_Setup_screen_init();
+ui_LessCommonSetup_screen_init();
+ui_WifiConfig_screen_init();
+ui_MatterConfig_screen_init();
+ui_MqttConfig_screen_init();
+ui_DeviceName_screen_init();
+ui_ThermostatRestart_screen_init();
+ui____initial_actions0 = lv_obj_create(NULL);
+lv_disp_load_scr( ui_MainScreen);
}
diff --git a/app/src/ui/ui.h b/app/src/ui/ui.h
index 025eaed..ed6a7b5 100644
--- a/app/src/ui/ui.h
+++ b/app/src/ui/ui.h
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -10,150 +10,193 @@
extern "C" {
#endif
-#include "lvgl.h"
+ #include "lvgl.h"
#include "ui_helpers.h"
#include "ui_events.h"
// SCREEN: ui_MainScreen
void ui_MainScreen_screen_init(void);
-void ui_event_MainScreen(lv_event_t * e);
-extern lv_obj_t * ui_MainScreen;
-void ui_event_TimeLabel(lv_event_t * e);
-extern lv_obj_t * ui_TimeLabel;
-void ui_event_StatusLabel(lv_event_t * e);
-extern lv_obj_t * ui_StatusLabel;
-void ui_event_TempLabel(lv_event_t * e);
-extern lv_obj_t * ui_TempLabel;
-void ui_event_HumidityLabel(lv_event_t * e);
-extern lv_obj_t * ui_HumidityLabel;
-void ui_event_ModeDropdown(lv_event_t * e);
-extern lv_obj_t * ui_ModeDropdown;
-void ui_event_SetupBtn(lv_event_t * e);
-extern lv_obj_t * ui_SetupBtn;
-extern lv_obj_t * ui_SetupLabel;
-extern lv_obj_t * ui_SetTempBg1;
-extern lv_obj_t * ui_SetTempBg;
-void ui_event_TempArc(lv_event_t * e);
-extern lv_obj_t * ui_TempArc;
-extern lv_obj_t * ui_SetTemp;
-extern lv_obj_t * ui_SetTempFrac;
-void ui_event_TempDecreaseBtn(lv_event_t * e);
-extern lv_obj_t * ui_TempDecreaseBtn;
-extern lv_obj_t * ui_TempDecreaseLabel;
-void ui_event_TempIncreaseBtn(lv_event_t * e);
-extern lv_obj_t * ui_TempIncreaseBtn;
-extern lv_obj_t * ui_TempIncreaseLabel;
-void ui_event_InfoBtn(lv_event_t * e);
-extern lv_obj_t * ui_InfoBtn;
-extern lv_obj_t * ui_InfoLabel;
-extern lv_obj_t * ui_WifiIndicatorLabel;
+void ui_event_MainScreen( lv_event_t * e);
+extern lv_obj_t *ui_MainScreen;
+void ui_event_TimeLabel( lv_event_t * e);
+extern lv_obj_t *ui_TimeLabel;
+void ui_event_StatusLabel( lv_event_t * e);
+extern lv_obj_t *ui_StatusLabel;
+void ui_event_TempLabel( lv_event_t * e);
+extern lv_obj_t *ui_TempLabel;
+void ui_event_HumidityLabel( lv_event_t * e);
+extern lv_obj_t *ui_HumidityLabel;
+void ui_event_ModeDropdown( lv_event_t * e);
+extern lv_obj_t *ui_ModeDropdown;
+void ui_event_SetupBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupBtn;
+extern lv_obj_t *ui_SetupLabel;
+extern lv_obj_t *ui_SetTempBg1;
+extern lv_obj_t *ui_SetTempBg;
+void ui_event_TempArc( lv_event_t * e);
+extern lv_obj_t *ui_TempArc;
+extern lv_obj_t *ui_SetTemp;
+extern lv_obj_t *ui_SetTempFrac;
+void ui_event_TempDecreaseBtn( lv_event_t * e);
+extern lv_obj_t *ui_TempDecreaseBtn;
+extern lv_obj_t *ui_TempDecreaseLabel;
+void ui_event_TempIncreaseBtn( lv_event_t * e);
+extern lv_obj_t *ui_TempIncreaseBtn;
+extern lv_obj_t *ui_TempIncreaseLabel;
+void ui_event_InfoBtn( lv_event_t * e);
+extern lv_obj_t *ui_InfoBtn;
+extern lv_obj_t *ui_InfoLabel;
+extern lv_obj_t *ui_WifiIndicatorLabel;
// SCREEN: ui_Info
void ui_Info_screen_init(void);
-void ui_event_Info(lv_event_t * e);
-extern lv_obj_t * ui_Info;
-extern lv_obj_t * ui_WifiConnectedLabel;
-extern lv_obj_t * ui_WifiConnCheckBox;
-extern lv_obj_t * ui_WifiSsidLabel;
-extern lv_obj_t * ui_IPLabel;
-extern lv_obj_t * ui_HostnameLabel;
-extern lv_obj_t * ui_RssiLabel;
-extern lv_obj_t * ui_FwVersionLabel;
-extern lv_obj_t * ui_BuildDateLabel;
-extern lv_obj_t * ui_CopyrightLabel;
-void ui_event_ShowQR(lv_event_t * e);
-extern lv_obj_t * ui_ShowQR;
-extern lv_obj_t * ui_ShowQRLabel;
-void ui_event_HomeBtn(lv_event_t * e);
-extern lv_obj_t * ui_HomeBtn;
-extern lv_obj_t * ui_HomeLabel;
+void ui_event_Info( lv_event_t * e);
+extern lv_obj_t *ui_Info;
+extern lv_obj_t *ui_WifiConnectedLabel;
+extern lv_obj_t *ui_WifiConnCheckBox;
+extern lv_obj_t *ui_WifiSsidLabel;
+extern lv_obj_t *ui_IPLabel;
+extern lv_obj_t *ui_HostnameLabel;
+extern lv_obj_t *ui_RssiLabel;
+extern lv_obj_t *ui_FwVersionLabel;
+extern lv_obj_t *ui_BuildDateLabel;
+extern lv_obj_t *ui_CopyrightLabel;
+void ui_event_ShowQR( lv_event_t * e);
+extern lv_obj_t *ui_ShowQR;
+extern lv_obj_t *ui_ShowQRLabel;
+void ui_event_HomeBtn( lv_event_t * e);
+extern lv_obj_t *ui_HomeBtn;
+extern lv_obj_t *ui_HomeLabel;
// SCREEN: ui_Setup
void ui_Setup_screen_init(void);
-void ui_event_Setup(lv_event_t * e);
-extern lv_obj_t * ui_Setup;
-extern lv_obj_t * ui_TempUnitsLabel;
-extern lv_obj_t * ui_FahrenheitLabel;
-extern lv_obj_t * ui_TempUnitsSwitch;
-extern lv_obj_t * ui_CelciusLabel;
-extern lv_obj_t * ui_TempCorrectionTextLabel;
-extern lv_obj_t * ui_TempCorrectionLabel;
-void ui_event_TempCorrectionSlider(lv_event_t * e);
-extern lv_obj_t * ui_TempCorrectionSlider;
-extern lv_obj_t * ui_TempSwingTextLabel;
-extern lv_obj_t * ui_TempSwingLabel;
-void ui_event_TempSwingSlider(lv_event_t * e);
-extern lv_obj_t * ui_TempSwingSlider;
-extern lv_obj_t * ui_HvacCoolLabel;
-extern lv_obj_t * ui_HvacCoolCheckbox;
-extern lv_obj_t * ui_HvacFanLabel;
-extern lv_obj_t * ui_HvacFanCheckbox;
-void ui_event_SetupUncommonBtn(lv_event_t * e);
-extern lv_obj_t * ui_SetupUncommonBtn;
-extern lv_obj_t * ui_SetupUncommonLabel;
-void ui_event_SetupHomeBtn(lv_event_t * e);
-extern lv_obj_t * ui_SetupHomeBtn;
-extern lv_obj_t * ui_SetupHomeLabel;
-extern lv_obj_t * ui_MatterLabel;
-extern lv_obj_t * ui_MatterCheckbox;
+void ui_event_Setup( lv_event_t * e);
+extern lv_obj_t *ui_Setup;
+extern lv_obj_t *ui_TempUnitsLabel;
+extern lv_obj_t *ui_FahrenheitLabel;
+extern lv_obj_t *ui_TempUnitsSwitch;
+extern lv_obj_t *ui_CelciusLabel;
+extern lv_obj_t *ui_TempCorrectionTextLabel;
+extern lv_obj_t *ui_TempCorrectionLabel;
+void ui_event_TempCorrectionSlider( lv_event_t * e);
+extern lv_obj_t *ui_TempCorrectionSlider;
+extern lv_obj_t *ui_TempSwingTextLabel;
+extern lv_obj_t *ui_TempSwingLabel;
+void ui_event_TempSwingSlider( lv_event_t * e);
+extern lv_obj_t *ui_TempSwingSlider;
+extern lv_obj_t *ui_HvacCoolLabel;
+extern lv_obj_t *ui_HvacCoolCheckbox;
+extern lv_obj_t *ui_HvacFanLabel;
+extern lv_obj_t *ui_HvacFanCheckbox;
+void ui_event_SetupMqttBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupMqttBtn;
+extern lv_obj_t *ui_SetupMqttLabel;
+void ui_event_SetupUncommonBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupUncommonBtn;
+extern lv_obj_t *ui_SetupUncommonLabel;
+void ui_event_SetupHomeBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupHomeBtn;
+extern lv_obj_t *ui_SetupHomeLabel;
+extern lv_obj_t *ui_HomeAutomationLabel;
+extern lv_obj_t *ui_HomeAutomationCheckbox;
+void ui_event_SetupCancelBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupCancelBtn;
+extern lv_obj_t *ui_SetupCancelLabel;
// SCREEN: ui_LessCommonSetup
void ui_LessCommonSetup_screen_init(void);
-void ui_event_LessCommonSetup(lv_event_t * e);
-extern lv_obj_t * ui_LessCommonSetup;
-void ui_event_CalibrateBtn(lv_event_t * e);
-extern lv_obj_t * ui_CalibrateBtn;
-extern lv_obj_t * ui_CalibrateLabel;
-extern lv_obj_t * ui_TimezoneLabel1;
-extern lv_obj_t * ui_TimezoneDropdown;
-extern lv_obj_t * ui_UiSleepTextLabel;
-extern lv_obj_t * ui_UiSleepLabel;
-void ui_event_UiSleepSlider(lv_event_t * e);
-extern lv_obj_t * ui_UiSleepSlider;
-extern lv_obj_t * ui_DualStageHeatLabel;
-extern lv_obj_t * ui_Hvac2StageHeatCheckbox;
-extern lv_obj_t * ui_DisableLabel1;
-extern lv_obj_t * ui_RevValveCheckbox;
-extern lv_obj_t * ui_DisableBeepLabel;
-extern lv_obj_t * ui_AudibleBeepCheckbox;
-void ui_event_SetupWifiBtn(lv_event_t * e);
-extern lv_obj_t * ui_SetupWifiBtn;
-extern lv_obj_t * ui_SetupWifiLabel;
-void ui_event_SetupHomeBtn2(lv_event_t * e);
-extern lv_obj_t * ui_SetupHomeBtn2;
-extern lv_obj_t * ui_SetupHomeLabel2;
+void ui_event_LessCommonSetup( lv_event_t * e);
+extern lv_obj_t *ui_LessCommonSetup;
+void ui_event_CalibrateBtn( lv_event_t * e);
+extern lv_obj_t *ui_CalibrateBtn;
+extern lv_obj_t *ui_CalibrateLabel;
+void ui_event_DevNameBtn( lv_event_t * e);
+extern lv_obj_t *ui_DevNameBtn;
+extern lv_obj_t *ui_TimezoneLabel1;
+extern lv_obj_t *ui_TimezoneDropdown;
+extern lv_obj_t *ui_UiSleepTextLabel;
+extern lv_obj_t *ui_UiSleepLabel;
+void ui_event_UiSleepSlider( lv_event_t * e);
+extern lv_obj_t *ui_UiSleepSlider;
+extern lv_obj_t *ui_DualStageHeatLabel;
+extern lv_obj_t *ui_Hvac2StageHeatCheckbox;
+extern lv_obj_t *ui_DisableLabel1;
+extern lv_obj_t *ui_RevValveCheckbox;
+extern lv_obj_t *ui_DisableBeepLabel;
+extern lv_obj_t *ui_AudibleBeepCheckbox;
+void ui_event_SetupWifiBtn( lv_event_t * e);
+extern lv_obj_t *ui_SetupWifiBtn;
+extern lv_obj_t *ui_SetupWifiLabel;
+void ui_event_SetupHomeBtn2( lv_event_t * e);
+extern lv_obj_t *ui_SetupHomeBtn2;
+extern lv_obj_t *ui_SetupHomeLabel2;
+extern lv_obj_t *ui_DevNameLabel;
+void ui_event_UncommonCancelBtn( lv_event_t * e);
+extern lv_obj_t *ui_UncommonCancelBtn;
+extern lv_obj_t *ui_UncommonCancelLabel;
// SCREEN: ui_WifiConfig
void ui_WifiConfig_screen_init(void);
-extern lv_obj_t * ui_WifiConfig;
-extern lv_obj_t * ui_Keyboard;
-extern lv_obj_t * ui_PSK;
-extern lv_obj_t * ui_PwdLabel;
-void ui_event_SsidDropdown(lv_event_t * e);
-extern lv_obj_t * ui_SsidDropdown;
-void ui_event_ScanBtn(lv_event_t * e);
-extern lv_obj_t * ui_ScanBtn;
-extern lv_obj_t * ui_ScanLabel;
-void ui_event_SaveBtn(lv_event_t * e);
-extern lv_obj_t * ui_SaveBtn;
-extern lv_obj_t * ui_SaveLabel;
-void ui_event_CancelBtn(lv_event_t * e);
-extern lv_obj_t * ui_CancelBtn;
-extern lv_obj_t * ui_CancelLabel;
-void ui_event_WifiStatusLabel(lv_event_t * e);
-extern lv_obj_t * ui_WifiStatusLabel;
+extern lv_obj_t *ui_WifiConfig;
+extern lv_obj_t *ui_Keyboard;
+extern lv_obj_t *ui_PSK;
+extern lv_obj_t *ui_PwdLabel;
+void ui_event_SsidDropdown( lv_event_t * e);
+extern lv_obj_t *ui_SsidDropdown;
+void ui_event_ScanBtn( lv_event_t * e);
+extern lv_obj_t *ui_ScanBtn;
+extern lv_obj_t *ui_ScanLabel;
+void ui_event_SaveBtn( lv_event_t * e);
+extern lv_obj_t *ui_SaveBtn;
+extern lv_obj_t *ui_SaveLabel;
+void ui_event_CancelBtn( lv_event_t * e);
+extern lv_obj_t *ui_CancelBtn;
+extern lv_obj_t *ui_CancelLabel;
+void ui_event_WifiStatusLabel( lv_event_t * e);
+extern lv_obj_t *ui_WifiStatusLabel;
// SCREEN: ui_MatterConfig
void ui_MatterConfig_screen_init(void);
-void ui_event_MatterConfig(lv_event_t * e);
-extern lv_obj_t * ui_MatterConfig;
-void ui_event_QrHomeBtn(lv_event_t * e);
-extern lv_obj_t * ui_QrHomeBtn;
-extern lv_obj_t * ui_SetupHomeLabel1;
-extern lv_obj_t * ui_QRImage;
-extern lv_obj_t * ui_ManualPairingCode;
+void ui_event_MatterConfig( lv_event_t * e);
+extern lv_obj_t *ui_MatterConfig;
+void ui_event_QrHomeBtn( lv_event_t * e);
+extern lv_obj_t *ui_QrHomeBtn;
+extern lv_obj_t *ui_SetupHomeLabel1;
+extern lv_obj_t *ui_QRImage;
+extern lv_obj_t *ui_ManualPairingCode;
+// SCREEN: ui_MqttConfig
+void ui_MqttConfig_screen_init(void);
+extern lv_obj_t *ui_MqttConfig;
+extern lv_obj_t *ui_MqttKeyboard;
+void ui_event_MqttHostname( lv_event_t * e);
+extern lv_obj_t *ui_MqttHostname;
+void ui_event_MqttUsername( lv_event_t * e);
+extern lv_obj_t *ui_MqttUsername;
+void ui_event_MqttPassword( lv_event_t * e);
+extern lv_obj_t *ui_MqttPassword;
+void ui_event_MqttSaveBtn( lv_event_t * e);
+extern lv_obj_t *ui_MqttSaveBtn;
+extern lv_obj_t *ui_MqttSaveLabel;
+void ui_event_MqttCancelBtn( lv_event_t * e);
+extern lv_obj_t *ui_MqttCancelBtn;
+extern lv_obj_t *ui_MqttCancelLabel;
+// SCREEN: ui_DeviceName
+void ui_DeviceName_screen_init(void);
+extern lv_obj_t *ui_DeviceName;
+extern lv_obj_t *ui_DevNameKeyboard;
+void ui_event_DeviceHostname( lv_event_t * e);
+extern lv_obj_t *ui_DeviceHostname;
+void ui_event_DevNameSaveBtn( lv_event_t * e);
+extern lv_obj_t *ui_DevNameSaveBtn;
+extern lv_obj_t *ui_DevNameSaveLabel;
+void ui_event_DevNameCancelBtn( lv_event_t * e);
+extern lv_obj_t *ui_DevNameCancelBtn;
+extern lv_obj_t *ui_DevNameCancelLabel;
// SCREEN: ui_ThermostatRestart
void ui_ThermostatRestart_screen_init(void);
-void ui_event_ThermostatRestart(lv_event_t * e);
-extern lv_obj_t * ui_ThermostatRestart;
-extern lv_obj_t * ui_Notification;
-extern lv_obj_t * ui_RestartCountdown;
-extern lv_obj_t * ui____initial_actions0;
+void ui_event_ThermostatRestart( lv_event_t * e);
+extern lv_obj_t *ui_ThermostatRestart;
+extern lv_obj_t *ui_Notification;
+extern lv_obj_t *ui_RestartCountdown;
+extern lv_obj_t *ui____initial_actions0;
+
+
+
void ui_init(void);
diff --git a/app/src/ui/ui_events.cpp b/app/src/ui/ui_events.cpp
index a455f07..c1c9122 100644
--- a/app/src/ui/ui_events.cpp
+++ b/app/src/ui/ui_events.cpp
@@ -6,6 +6,7 @@
#include "thermostat.hpp"
#include "ui.h"
#include "version.h"
+#include
// #include // For nvs_flash_init()
#define screenWidth 320
@@ -28,10 +29,10 @@ void tftDecreaseSetTemp(lv_event_t * e)
if (OperatingParameters.tempUnits == 'C')
{
OperatingParameters.tempSet -= 0.5;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 1);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 1));
} else {
OperatingParameters.tempSet -= 1.0;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 0);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 0));
}
lv_arc_set_value(ui_TempArc, OperatingParameters.tempSet*10);
lv_label_set_text_fmt(ui_SetTemp, "%d°", int(OperatingParameters.tempSet));
@@ -46,10 +47,10 @@ void tftIncreaseSetTemp(lv_event_t * e)
if (OperatingParameters.tempUnits == 'C')
{
OperatingParameters.tempSet += 0.5;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 1);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 1));
} else {
OperatingParameters.tempSet += 1.0;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 0);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 0));
}
lv_arc_set_value(ui_TempArc, OperatingParameters.tempSet*10);
lv_label_set_text_fmt(ui_SetTemp, "%d°", int(OperatingParameters.tempSet));
@@ -66,16 +67,17 @@ void tftHvacModeChange(lv_event_t * e)
// OperatingParameters.hvacSetMode = getHvacMode();
char mode[12];
lv_dropdown_get_selected_str(ui_ModeDropdown, mode, sizeof(mode));
- OperatingParameters.hvacSetMode = strToHvacMode(mode);
+ updateHvacMode(strToHvacMode(mode));
switch (OperatingParameters.hvacSetMode)
{
// Set color of outer ring to represent set mode
- case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xc71b1b), LV_PART_MAIN); break;
- case COOL: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x1b7dc7), LV_PART_MAIN); break;
- case FAN: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x23562b), LV_PART_MAIN); break; //@@@
- case AUTO: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xaeac40), LV_PART_MAIN); break;
- default: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7d7d7d), LV_PART_MAIN); break;
+ case AUX_HEAT:
+ case HEAT: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xc71b1b), LV_PART_MAIN); break;
+ case COOL: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x1b7dc7), LV_PART_MAIN); break;
+ case FAN_ONLY: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x23562b), LV_PART_MAIN); break; //@@@
+ case AUTO: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0xaeac40), LV_PART_MAIN); break;
+ default: lv_obj_set_style_bg_color(ui_SetTempBg1, lv_color_hex(0x7d7d7d), LV_PART_MAIN); break;
}
tftWakeDisplay(true);
@@ -166,7 +168,7 @@ void LoadInfoStrings(lv_event_t * e)
lv_label_set_text_fmt(ui_WifiSsidLabel, "%s SSID:# %s", LABEL_COLOR, WifiCreds.ssid);
lv_label_set_recolor(ui_HostnameLabel, true);
- lv_label_set_text_fmt(ui_HostnameLabel, "%s Hostname:# %s", LABEL_COLOR, WifiCreds.hostname);
+ lv_label_set_text_fmt(ui_HostnameLabel, "%s Hostname:# %s", LABEL_COLOR, OperatingParameters.DeviceName);
lv_label_set_recolor(ui_IPLabel, true);
lv_label_set_text_fmt(ui_IPLabel, "%s IP:# %s", LABEL_COLOR, wifiAddress());
@@ -287,7 +289,7 @@ void SaveConfigSettings(lv_event_t * e)
#ifdef MATTER_ENABLED
bool prevMatter = OperatingParameters.MatterEnabled;
- OperatingParameters.MatterEnabled = lv_obj_has_state(ui_MatterCheckbox, LV_STATE_CHECKED);
+ OperatingParameters.MatterEnabled = lv_obj_has_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
if (OperatingParameters.MatterEnabled != prevMatter)
{
//@@@ Disable all HVAC activity before restarting
@@ -300,6 +302,29 @@ void SaveConfigSettings(lv_event_t * e)
}
}
#endif
+#ifdef MQTT_ENABLED
+ bool prevMqtt = OperatingParameters.MqttEnabled;
+ OperatingParameters.MqttEnabled = lv_obj_has_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
+ if (OperatingParameters.MqttEnabled != prevMqtt)
+ {
+ //@@@ Disable all HVAC activity before restarting
+ printf ("MQTT enablement changed!\n");
+//@@@ wifiSwitchMatterMode();
+ if (!OperatingParameters.MqttEnabled)
+ {
+ _ui_screen_change(&ui_ThermostatRestart, LV_SCR_LOAD_ANIM_MOVE_RIGHT, 500, 0, &ui_ThermostatRestart_screen_init);
+ }
+ }
+ else
+ {
+ if (OperatingParameters.MqttEnabled && OperatingParameters.MqttConnected)
+ {
+ // Update config by sending a new discovery packet
+ MqttHomeAssistantDiscovery();
+ }
+ }
+#endif
+ updateThermostatParams();
}
void LoadConfigSettings(lv_event_t * e)
@@ -320,11 +345,45 @@ void LoadConfigSettings(lv_event_t * e)
lv_obj_add_state(ui_HvacFanCheckbox, LV_STATE_CHECKED);
else
lv_obj_clear_state(ui_HvacFanCheckbox, LV_STATE_CHECKED);
+
+#if !defined(MATTER_ENABLED) && !defined(MQTT_ENABLED)
+ lv_obj_add_flag(ui_HomeAutomationLabel, LV_OBJ_FLAG_HIDDEN);
+ lv_obj_add_flag(ui_HomeAutomationCheckbox, LV_OBJ_FLAG_HIDDEN);
+ lv_obj_add_flag(ui_SetupMqttBtn, LV_OBJ_FLAG_HIDDEN);
+ lv_obj_add_flag(ui_SetupMqttLabel, LV_OBJ_FLAG_HIDDEN);
+#endif
+
#ifdef MATTER_ENABLED
+ lv_label_set_text(ui_HomeAutomationLabel,"Matter Enable:");
if (OperatingParameters.MatterEnabled)
- lv_obj_add_state(ui_MatterCheckbox, LV_STATE_CHECKED);
+ lv_obj_add_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
else
- lv_obj_clear_state(ui_MatterCheckbox, LV_STATE_CHECKED);
+ lv_obj_clear_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
+
+ lv_obj_add_flag(ui_SetupMqttBtn, LV_OBJ_FLAG_HIDDEN);
+ lv_obj_add_flag(ui_SetupMqttLabel, LV_OBJ_FLAG_HIDDEN);
+#endif
+
+#ifdef MQTT_ENABLED
+ lv_label_set_text(ui_HomeAutomationLabel,"MQTT Enable:");
+ //@@@ For now, if we compile with MQTT support, enable the config button
+ if (OperatingParameters.MqttEnabled)
+ lv_obj_add_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
+ lv_obj_clear_flag(ui_SetupMqttBtn, LV_OBJ_FLAG_HIDDEN);
+ lv_obj_clear_flag(ui_SetupMqttLabel, LV_OBJ_FLAG_HIDDEN);
+
+ // if (OperatingParameters.MqttEnabled)
+ // {
+ // lv_obj_add_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
+ // lv_obj_clear_flag(ui_SetupMqttBtn, LV_OBJ_FLAG_HIDDEN);
+ // lv_obj_clear_flag(ui_SetupMqttLabel, LV_OBJ_FLAG_HIDDEN);
+ // }
+ // else
+ // {
+ // lv_obj_clear_state(ui_HomeAutomationCheckbox, LV_STATE_CHECKED);
+ // lv_obj_add_flag(ui_SetupMqttBtn, LV_OBJ_FLAG_HIDDEN);
+ // lv_obj_add_flag(ui_SetupMqttLabel, LV_OBJ_FLAG_HIDDEN);
+ // }
#endif
}
@@ -361,6 +420,8 @@ void SaveUncommonConfigSettings(lv_event_t * e)
setHvacModesDropdown();
updateTimezone();
+ updateThermostatParams();
+
}
void tftCalibrate(lv_event_t * e)
@@ -379,12 +440,14 @@ bool isCurrentScreenMain()
}
#ifdef MATTER_ENABLED
+#endif
/**
* Create a QR Code
*/
void lv_example_qrcode_1()
{
+#ifdef MATTER_ENABLED
lv_color_t bg_color = lv_palette_lighten(LV_PALETTE_LIGHT_BLUE, 5);
lv_color_t fg_color = lv_palette_darken(LV_PALETTE_BLUE, 4);
@@ -404,16 +467,18 @@ void lv_example_qrcode_1()
/*Add a border with bg_color*/
lv_obj_set_style_border_color(qr, bg_color, 0);
lv_obj_set_style_border_width(qr, 5, 0);
+#endif
}
void ShowQrOnScreen(lv_event_t * e)
{
+#ifdef MATTER_ENABLED
printf ("Loading QR and manual pairing codes\n");
lv_example_qrcode_1();
lv_label_set_text(ui_ManualPairingCode, OperatingParameters.MatterPairingCode);
+#endif
}
-#endif
void tftCountdown(lv_event_t * e)
{
@@ -444,6 +509,84 @@ void tftCountdown(lv_event_t * e)
setWifiCreds();
printf ("Saving thermostat config\n");
updateThermostatParams();
- // printf ("Resetting Matter config and restarting ESP\n");
- // MatterFactoryReset(); // Will also restart the ESP
+#ifdef MATTER_ENABLED
+ printf ("Resetting Matter config and restarting ESP\n");
+ MatterFactoryReset(); // Will also restart the ESP
+#endif
+}
+
+void loadMqttSettings(lv_event_t * e)
+{
+ lv_textarea_set_text(ui_MqttHostname, OperatingParameters.MqttBrokerHost);
+ lv_textarea_set_text(ui_MqttUsername, OperatingParameters.MqttBrokerUsername);
+ lv_textarea_set_text(ui_MqttPassword, OperatingParameters.MqttBrokerPassword);
+
+ printf ("On load:\n");
+ printf (" MQTT Broker: %s\n", OperatingParameters.MqttBrokerHost);
+ printf (" MQTT Username: %s\n", OperatingParameters.MqttBrokerUsername);
+ printf (" MQTT Password: %s\n", OperatingParameters.MqttBrokerPassword);
+
+}
+
+void saveMqttSettings(lv_event_t * e)
+{
+ strcpy (OperatingParameters.MqttBrokerHost, lv_textarea_get_text(ui_MqttHostname));
+ strcpy (OperatingParameters.MqttBrokerUsername, lv_textarea_get_text(ui_MqttUsername));
+ strcpy (OperatingParameters.MqttBrokerPassword, lv_textarea_get_text(ui_MqttPassword));
+
+ updateThermostatParams();
+
+ printf ("On save:\n");
+ printf (" MQTT Broker: %s\n", OperatingParameters.MqttBrokerHost);
+ printf (" MQTT Username: %s\n", OperatingParameters.MqttBrokerUsername);
+ printf (" MQTT Password: %s\n", OperatingParameters.MqttBrokerPassword);
+}
+
+void loadDeviceName(lv_event_t * e)
+{
+ lv_textarea_set_text(ui_DeviceHostname, OperatingParameters.FriendlyName);
+
+ printf ("On load:\n");
+ printf (" Friendly Name: %s\n", OperatingParameters.FriendlyName);
+ printf (" Device Hostname: %s\n", OperatingParameters.DeviceName);
+}
+
+void saveDeviceName(lv_event_t * e)
+{
+ char *oldName = strdup(OperatingParameters.DeviceName);
+
+ strcpy (OperatingParameters.FriendlyName, lv_textarea_get_text(ui_DeviceHostname));
+
+ char *p = (char *)OperatingParameters.FriendlyName;
+ char *t = (char *)OperatingParameters.DeviceName;
+ // Make DeviceName the same as FriendlyName just with all lower
+ // case letters and no spaces.
+ while (*p)
+ {
+ if (*p != ' ')
+ {
+ *t = tolower(*p);
+ t++;
+ }
+ p++;
+ }
+
+ printf ("On save:\n");
+ printf (" Friendly Name: %s\n", OperatingParameters.FriendlyName);
+ printf (" Device Hostname: %s\n", OperatingParameters.DeviceName);
+
+ /* Rewrite the wifi credentials after resetting NVS storage */
+ printf ("Rewriting wifi credentials\n");
+ setWifiCreds(); // Save device name
+ printf ("Saving thermostat config\n");
+ updateThermostatParams(); // Save Friendly name
+
+ if (strcmp(oldName, OperatingParameters.DeviceName))
+ {
+ printf ("Hostname/Devicename changed -- Restarting wifi to update network name\n");
+ // Initiate a disconnect so the new wifi info will be used when auto-reconnect happens
+ WifiDisconnect();
+ // Immediately start a new wifi connection
+ lastWifiReconnect = 0;
+ }
}
diff --git a/app/src/ui/ui_events.h b/app/src/ui/ui_events.h
index f339394..30cae3b 100644
--- a/app/src/ui/ui_events.h
+++ b/app/src/ui/ui_events.h
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -21,9 +21,11 @@ void LoadInfoStrings(lv_event_t * e);
void LoadConfigSettings(lv_event_t * e);
void tftUpdateTempCorrectionValue(lv_event_t * e);
void tftUpdateTempSwingValue(lv_event_t * e);
+void loadMqttSettings(lv_event_t * e);
void LoadUncommonSettings(lv_event_t * e);
void SaveConfigSettings(lv_event_t * e);
void tftCalibrate(lv_event_t * e);
+void loadDeviceName(lv_event_t * e);
void tftUpdateUiSleepValue(lv_event_t * e);
void tftClearPsk(lv_event_t * e);
void SaveUncommonConfigSettings(lv_event_t * e);
@@ -31,6 +33,8 @@ void StartWifiScan(lv_event_t * e);
void tftSetNewWifi(lv_event_t * e);
void stopWifiScan(lv_event_t * e);
void ShowQrOnScreen(lv_event_t * e);
+void saveMqttSettings(lv_event_t * e);
+void saveDeviceName(lv_event_t * e);
void tftCountdown(lv_event_t * e);
#ifdef __cplusplus
diff --git a/app/src/ui/ui_helpers.c b/app/src/ui/ui_helpers.c
index 258601c..e71529b 100644
--- a/app/src/ui/ui_helpers.c
+++ b/app/src/ui/ui_helpers.c
@@ -1,251 +1,254 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
#include "ui_helpers.h"
-void _ui_bar_set_property(lv_obj_t * target, int id, int val)
+void _ui_bar_set_property( lv_obj_t *target, int id, int val)
{
- if(id == _UI_BAR_PROPERTY_VALUE_WITH_ANIM) lv_bar_set_value(target, val, LV_ANIM_ON);
- if(id == _UI_BAR_PROPERTY_VALUE) lv_bar_set_value(target, val, LV_ANIM_OFF);
+ if (id == _UI_BAR_PROPERTY_VALUE_WITH_ANIM) lv_bar_set_value(target, val, LV_ANIM_ON);
+ if (id == _UI_BAR_PROPERTY_VALUE) lv_bar_set_value(target, val, LV_ANIM_OFF);
}
-void _ui_basic_set_property(lv_obj_t * target, int id, int val)
+void _ui_basic_set_property( lv_obj_t *target, int id, int val)
{
- if(id == _UI_BASIC_PROPERTY_POSITION_X) lv_obj_set_x(target, val);
- if(id == _UI_BASIC_PROPERTY_POSITION_Y) lv_obj_set_y(target, val);
- if(id == _UI_BASIC_PROPERTY_WIDTH) lv_obj_set_width(target, val);
- if(id == _UI_BASIC_PROPERTY_HEIGHT) lv_obj_set_height(target, val);
+ if (id == _UI_BASIC_PROPERTY_POSITION_X) lv_obj_set_x(target, val);
+ if (id == _UI_BASIC_PROPERTY_POSITION_Y) lv_obj_set_y(target, val);
+ if (id == _UI_BASIC_PROPERTY_WIDTH) lv_obj_set_width(target, val);
+ if (id == _UI_BASIC_PROPERTY_HEIGHT) lv_obj_set_height(target, val);
}
-void _ui_dropdown_set_property(lv_obj_t * target, int id, int val)
+void _ui_dropdown_set_property( lv_obj_t *target, int id, int val)
{
- if(id == _UI_DROPDOWN_PROPERTY_SELECTED) lv_dropdown_set_selected(target, val);
+ if (id == _UI_DROPDOWN_PROPERTY_SELECTED) lv_dropdown_set_selected(target, val);
}
-void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val)
+void _ui_image_set_property( lv_obj_t *target, int id, uint8_t *val)
{
- if(id == _UI_IMAGE_PROPERTY_IMAGE) lv_img_set_src(target, val);
+ if (id == _UI_IMAGE_PROPERTY_IMAGE) lv_img_set_src(target, val);
}
-void _ui_label_set_property(lv_obj_t * target, int id, const char * val)
+void _ui_label_set_property( lv_obj_t *target, int id, const char *val)
{
- if(id == _UI_LABEL_PROPERTY_TEXT) lv_label_set_text(target, val);
+ if (id == _UI_LABEL_PROPERTY_TEXT) lv_label_set_text(target, val);
}
-void _ui_roller_set_property(lv_obj_t * target, int id, int val)
+void _ui_roller_set_property( lv_obj_t *target, int id, int val)
{
- if(id == _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM) lv_roller_set_selected(target, val, LV_ANIM_ON);
- if(id == _UI_ROLLER_PROPERTY_SELECTED) lv_roller_set_selected(target, val, LV_ANIM_OFF);
+ if (id == _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM) lv_roller_set_selected(target, val, LV_ANIM_ON);
+ if (id == _UI_ROLLER_PROPERTY_SELECTED) lv_roller_set_selected(target, val, LV_ANIM_OFF);
}
-void _ui_slider_set_property(lv_obj_t * target, int id, int val)
+void _ui_slider_set_property( lv_obj_t *target, int id, int val)
{
- if(id == _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM) lv_slider_set_value(target, val, LV_ANIM_ON);
- if(id == _UI_SLIDER_PROPERTY_VALUE) lv_slider_set_value(target, val, LV_ANIM_OFF);
+ if (id == _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM) lv_slider_set_value(target, val, LV_ANIM_ON);
+ if (id == _UI_SLIDER_PROPERTY_VALUE) lv_slider_set_value(target, val, LV_ANIM_OFF);
}
-void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void))
+void _ui_screen_change( lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void))
{
- if(*target == NULL)
- target_init();
- lv_scr_load_anim(*target, fademode, spd, delay, false);
+ if(*target == NULL)
+ target_init();
+ lv_scr_load_anim(*target, fademode, spd, delay, false);
}
-void _ui_screen_delete(lv_obj_t ** target)
+void _ui_screen_delete( lv_obj_t ** target )
{
- if(*target == NULL) {
- lv_obj_del(*target);
- target = NULL;
- }
+ if(*target == NULL)
+ {
+ lv_obj_del(*target);
+ target = NULL;
+ }
}
-void _ui_arc_increment(lv_obj_t * target, int val)
+void _ui_arc_increment( lv_obj_t *target, int val)
{
- int old = lv_arc_get_value(target);
- lv_arc_set_value(target, old + val);
- lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0);
+ int old = lv_arc_get_value(target);
+ lv_arc_set_value(target, old+val);
+ lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0);
}
-void _ui_bar_increment(lv_obj_t * target, int val, int anm)
+void _ui_bar_increment( lv_obj_t *target, int val, int anm)
{
- int old = lv_bar_get_value(target);
- lv_bar_set_value(target, old + val, anm);
+ int old = lv_bar_get_value(target);
+ lv_bar_set_value(target, old+val, anm);
}
-void _ui_slider_increment(lv_obj_t * target, int val, int anm)
+void _ui_slider_increment( lv_obj_t *target, int val, int anm)
{
- int old = lv_slider_get_value(target);
- lv_slider_set_value(target, old + val, anm);
- lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0);
+ int old = lv_slider_get_value(target);
+ lv_slider_set_value(target, old+val, anm);
+ lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0);
}
-void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea)
+void _ui_keyboard_set_target( lv_obj_t *keyboard, lv_obj_t *textarea)
{
- lv_keyboard_set_textarea(keyboard, textarea);
+ lv_keyboard_set_textarea(keyboard, textarea);
}
-void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value)
+void _ui_flag_modify( lv_obj_t *target, int32_t flag, int value)
{
- if(value == _UI_MODIFY_FLAG_TOGGLE) {
- if(lv_obj_has_flag(target, flag)) lv_obj_clear_flag(target, flag);
- else lv_obj_add_flag(target, flag);
+ if (value==_UI_MODIFY_FLAG_TOGGLE)
+ {
+ if ( lv_obj_has_flag(target,flag) ) lv_obj_clear_flag(target,flag);
+ else lv_obj_add_flag(target,flag);
}
- else if(value == _UI_MODIFY_FLAG_ADD) lv_obj_add_flag(target, flag);
- else lv_obj_clear_flag(target, flag);
+ else if (value==_UI_MODIFY_FLAG_ADD) lv_obj_add_flag(target,flag);
+ else lv_obj_clear_flag(target,flag);
}
-void _ui_state_modify(lv_obj_t * target, int32_t state, int value)
+void _ui_state_modify( lv_obj_t *target, int32_t state, int value)
{
- if(value == _UI_MODIFY_STATE_TOGGLE) {
- if(lv_obj_has_state(target, state)) lv_obj_clear_state(target, state);
- else lv_obj_add_state(target, state);
+ if (value==_UI_MODIFY_STATE_TOGGLE)
+ {
+ if ( lv_obj_has_state(target,state) ) lv_obj_clear_state(target,state);
+ else lv_obj_add_state(target,state);
}
- else if(value == _UI_MODIFY_STATE_ADD) lv_obj_add_state(target, state);
- else lv_obj_clear_state(target, state);
+ else if (value==_UI_MODIFY_STATE_ADD) lv_obj_add_state(target,state);
+ else lv_obj_clear_state(target,state);
}
-void scr_unloaded_delete_cb(lv_event_t * e)
-{
- lv_obj_t ** var = lv_event_get_user_data(e);
- lv_obj_del(*var);
- (*var) = NULL;
+void scr_unloaded_delete_cb(lv_event_t * e)
+{
+ lv_obj_t ** var = lv_event_get_user_data(e);
+ lv_obj_del(*var);
+ (*var) = NULL;
}
-void _ui_opacity_set(lv_obj_t * target, int val)
+void _ui_opacity_set( lv_obj_t *target, int val)
{
- lv_obj_set_style_opa(target, val, 0);
+ lv_obj_set_style_opa(target, val, 0);
}
-void _ui_anim_callback_free_user_data(lv_anim_t * a)
+void _ui_anim_callback_free_user_data(lv_anim_t *a)
{
- lv_mem_free(a->user_data);
- a->user_data = NULL;
+ lv_mem_free(a->user_data);
+ a->user_data=NULL;
}
-void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_obj_set_x(usr->target, v);
-}
+void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_obj_set_x(usr->target, v);
+}
-void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_obj_set_y(usr->target, v);
-}
+void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_obj_set_y(usr->target, v);
+}
-void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_obj_set_width(usr->target, v);
-}
+void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_obj_set_width(usr->target, v);
+}
-void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_obj_set_height(usr->target, v);
-}
+void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_obj_set_height(usr->target, v);
+}
-void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_obj_set_style_opa(usr->target, v, 0);
-}
+void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_obj_set_style_opa(usr->target, v, 0);
+}
-void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_img_set_zoom(usr->target, v);
-}
+void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_img_set_zoom(usr->target, v);
+}
-void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- lv_img_set_angle(usr->target, v);
-}
+void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ lv_img_set_angle(usr->target, v);
+}
-void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- usr->val = v;
- if(v < 0) v = 0;
- if(v >= usr->imgset_size) v = usr->imgset_size - 1;
+void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ usr->val = v;
+ if ( v<0 ) v=0;
+ if ( v>=usr->imgset_size ) v=usr->imgset_size-1;
lv_img_set_src(usr->target, usr->imgset[v]);
}
-int32_t _ui_anim_callback_get_x(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_obj_get_x_aligned(usr->target);
-}
+int32_t _ui_anim_callback_get_x(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_obj_get_x_aligned(usr->target);
+}
-int32_t _ui_anim_callback_get_y(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_obj_get_y_aligned(usr->target);
-}
+int32_t _ui_anim_callback_get_y(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_obj_get_y_aligned(usr->target);
+}
-int32_t _ui_anim_callback_get_width(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_obj_get_width(usr->target);
-}
+int32_t _ui_anim_callback_get_width(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_obj_get_width(usr->target);
+}
-int32_t _ui_anim_callback_get_height(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_obj_get_height(usr->target);
-}
+int32_t _ui_anim_callback_get_height(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_obj_get_height(usr->target);
+}
-int32_t _ui_anim_callback_get_opacity(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_obj_get_style_opa(usr->target, 0);
+int32_t _ui_anim_callback_get_opacity(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_obj_get_style_opa(usr->target, 0);
}
-int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_img_get_zoom(usr->target);
+int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_img_get_zoom(usr->target);
}
-int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return lv_img_get_angle(usr->target);
+int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return lv_img_get_angle(usr->target);
}
-int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a)
-{
- ui_anim_user_data_t * usr = (ui_anim_user_data_t *)a->user_data;
- return usr->val;
+int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a)
+{
+ ui_anim_user_data_t *usr = (ui_anim_user_data_t *)a->user_data;
+ return usr->val;
}
-void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix)
+void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix)
{
- char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
- lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix);
- lv_label_set_text(trg, buf);
+ char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
+ lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_arc_get_value(src), postfix);
+ lv_label_set_text(trg, buf);
}
-void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix)
+void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix)
{
- char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
- lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix);
- lv_label_set_text(trg, buf);
+ char buf[_UI_TEMPORARY_STRING_BUFFER_SIZE];
+ lv_snprintf(buf, sizeof(buf), "%s%d%s", prefix, (int)lv_slider_get_value(src), postfix);
+ lv_label_set_text(trg, buf);
}
-void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off)
+void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *txt_on, const char *txt_off)
{
- if(lv_obj_has_state(src, LV_STATE_CHECKED)) lv_label_set_text(trg, txt_on);
- else lv_label_set_text(trg, txt_off);
+ if (lv_obj_has_state(src,LV_STATE_CHECKED)) lv_label_set_text(trg,txt_on);
+ else lv_label_set_text(trg,txt_off);
}
-void _ui_spinbox_step(lv_obj_t * target, int val)
-{
- if(val > 0) lv_spinbox_increment(target);
- else lv_spinbox_decrement(target);
+void _ui_spinbox_step(lv_obj_t * target, int val)
+{
+ if(val > 0) lv_spinbox_increment(target);
+ else lv_spinbox_decrement(target);
- lv_event_send(target, LV_EVENT_VALUE_CHANGED, 0);
+ lv_event_send(target,LV_EVENT_VALUE_CHANGED, 0);
}
diff --git a/app/src/ui/ui_helpers.h b/app/src/ui/ui_helpers.h
index 33d78f9..9fd21f3 100644
--- a/app/src/ui/ui_helpers.h
+++ b/app/src/ui/ui_helpers.h
@@ -1,5 +1,5 @@
// This file was generated by SquareLine Studio
-// SquareLine Studio version: SquareLine Studio 1.3.1
+// SquareLine Studio version: SquareLine Studio 1.3.2
// LVGL version: 8.3.6
// Project name: Thermostat
@@ -15,106 +15,105 @@ extern "C" {
#define _UI_TEMPORARY_STRING_BUFFER_SIZE 32
#define _UI_BAR_PROPERTY_VALUE 0
#define _UI_BAR_PROPERTY_VALUE_WITH_ANIM 1
-void _ui_bar_set_property(lv_obj_t * target, int id, int val);
+void _ui_bar_set_property( lv_obj_t *target, int id, int val);
#define _UI_BASIC_PROPERTY_POSITION_X 0
#define _UI_BASIC_PROPERTY_POSITION_Y 1
#define _UI_BASIC_PROPERTY_WIDTH 2
#define _UI_BASIC_PROPERTY_HEIGHT 3
-void _ui_basic_set_property(lv_obj_t * target, int id, int val);
+void _ui_basic_set_property( lv_obj_t *target, int id, int val);
#define _UI_DROPDOWN_PROPERTY_SELECTED 0
-void _ui_dropdown_set_property(lv_obj_t * target, int id, int val);
+void _ui_dropdown_set_property( lv_obj_t *target, int id, int val);
#define _UI_IMAGE_PROPERTY_IMAGE 0
-void _ui_image_set_property(lv_obj_t * target, int id, uint8_t * val);
+void _ui_image_set_property( lv_obj_t *target, int id, uint8_t *val);
#define _UI_LABEL_PROPERTY_TEXT 0
-void _ui_label_set_property(lv_obj_t * target, int id, const char * val);
+void _ui_label_set_property( lv_obj_t *target, int id, const char *val);
#define _UI_ROLLER_PROPERTY_SELECTED 0
#define _UI_ROLLER_PROPERTY_SELECTED_WITH_ANIM 1
-void _ui_roller_set_property(lv_obj_t * target, int id, int val);
+void _ui_roller_set_property( lv_obj_t *target, int id, int val);
#define _UI_SLIDER_PROPERTY_VALUE 0
#define _UI_SLIDER_PROPERTY_VALUE_WITH_ANIM 1
-void _ui_slider_set_property(lv_obj_t * target, int id, int val);
+void _ui_slider_set_property( lv_obj_t *target, int id, int val);
-void _ui_screen_change(lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void));
+void _ui_screen_change( lv_obj_t ** target, lv_scr_load_anim_t fademode, int spd, int delay, void (*target_init)(void));
-void _ui_screen_delete(lv_obj_t ** target);
+void _ui_screen_delete( lv_obj_t ** target );
-void _ui_arc_increment(lv_obj_t * target, int val);
+void _ui_arc_increment( lv_obj_t *target, int val);
-void _ui_bar_increment(lv_obj_t * target, int val, int anm);
+void _ui_bar_increment( lv_obj_t *target, int val, int anm);
-void _ui_slider_increment(lv_obj_t * target, int val, int anm);
+void _ui_slider_increment( lv_obj_t *target, int val, int anm);
-void _ui_keyboard_set_target(lv_obj_t * keyboard, lv_obj_t * textarea);
+void _ui_keyboard_set_target( lv_obj_t *keyboard, lv_obj_t *textarea);
#define _UI_MODIFY_FLAG_ADD 0
#define _UI_MODIFY_FLAG_REMOVE 1
#define _UI_MODIFY_FLAG_TOGGLE 2
-void _ui_flag_modify(lv_obj_t * target, int32_t flag, int value);
+void _ui_flag_modify( lv_obj_t *target, int32_t flag, int value);
#define _UI_MODIFY_STATE_ADD 0
#define _UI_MODIFY_STATE_REMOVE 1
#define _UI_MODIFY_STATE_TOGGLE 2
-void _ui_state_modify(lv_obj_t * target, int32_t state, int value);
+void _ui_state_modify( lv_obj_t *target, int32_t state, int value);
void scr_unloaded_delete_cb(lv_event_t * e);
-void _ui_opacity_set(lv_obj_t * target, int val);
+void _ui_opacity_set( lv_obj_t *target, int val);
/** Describes an animation*/
typedef struct _ui_anim_user_data_t {
- lv_obj_t * target;
- lv_img_dsc_t ** imgset;
+ lv_obj_t *target;
+ lv_img_dsc_t **imgset;
int32_t imgset_size;
int32_t val;
} ui_anim_user_data_t;
-void _ui_anim_callback_free_user_data(lv_anim_t * a);
+void _ui_anim_callback_free_user_data(lv_anim_t *a);
-void _ui_anim_callback_set_x(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_x(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_y(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_y(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_width(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_width(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_height(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_height(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_opacity(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_opacity(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_image_zoom(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_image_zoom(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_image_angle(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_image_angle(lv_anim_t* a, int32_t v);
-void _ui_anim_callback_set_image_frame(lv_anim_t * a, int32_t v);
+void _ui_anim_callback_set_image_frame(lv_anim_t* a, int32_t v);
-int32_t _ui_anim_callback_get_x(lv_anim_t * a);
+int32_t _ui_anim_callback_get_x(lv_anim_t* a);
-int32_t _ui_anim_callback_get_y(lv_anim_t * a);
+int32_t _ui_anim_callback_get_y(lv_anim_t* a);
-int32_t _ui_anim_callback_get_width(lv_anim_t * a);
+int32_t _ui_anim_callback_get_width(lv_anim_t* a);
-int32_t _ui_anim_callback_get_height(lv_anim_t * a);
+int32_t _ui_anim_callback_get_height(lv_anim_t* a);
-int32_t _ui_anim_callback_get_opacity(lv_anim_t * a);
+int32_t _ui_anim_callback_get_opacity(lv_anim_t* a);
-int32_t _ui_anim_callback_get_image_zoom(lv_anim_t * a);
+int32_t _ui_anim_callback_get_image_zoom(lv_anim_t* a);
-int32_t _ui_anim_callback_get_image_angle(lv_anim_t * a);
+int32_t _ui_anim_callback_get_image_angle(lv_anim_t* a);
-int32_t _ui_anim_callback_get_image_frame(lv_anim_t * a);
+int32_t _ui_anim_callback_get_image_frame(lv_anim_t* a);
-void _ui_arc_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix);
+void _ui_arc_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix);
-void _ui_slider_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * prefix, const char * postfix);
+void _ui_slider_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *prefix, const char *postfix);
-void _ui_checked_set_text_value(lv_obj_t * trg, lv_obj_t * src, const char * txt_on, const char * txt_off);
+void _ui_checked_set_text_value( lv_obj_t *trg, lv_obj_t *src, const char *txt_on, const char *txt_off);
-void _ui_spinbox_step(lv_obj_t * target, int val)
-;
+void _ui_spinbox_step(lv_obj_t * target, int val)
;
#ifdef __cplusplus
} /*extern "C"*/
diff --git a/app/src/web.cpp b/app/src/web.cpp
index 29d7aaa..a24bec2 100644
--- a/app/src/web.cpp
+++ b/app/src/web.cpp
@@ -54,12 +54,11 @@ void doTempUp(void)
if (OperatingParameters.tempUnits == 'C')
{
OperatingParameters.tempSet += 0.5;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 1);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 1));
} else {
OperatingParameters.tempSet += 1.0;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 0);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 0));
}
- eepromUpdateHvacSetTemp();
}
void doTempDown(void)
@@ -67,12 +66,11 @@ void doTempDown(void)
if (OperatingParameters.tempUnits == 'C')
{
OperatingParameters.tempSet -= 0.5;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 1);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 1));
} else {
OperatingParameters.tempSet -= 1.0;
- OperatingParameters.tempSet = roundValue(OperatingParameters.tempSet, 0);
+ updateHvacSetTemp(roundValue(OperatingParameters.tempSet, 0));
}
- eepromUpdateHvacSetTemp();
}
float enforceRange(float value, float min, float max) {
@@ -91,15 +89,15 @@ void buttonDispatch(char content[BUTTON_CONTENT_SIZE])
else if (!strncmp(content, "tempDown", BUTTON_CONTENT_SIZE))
doTempDown();
else if (!strncmp(content, "hvacModeOff", BUTTON_CONTENT_SIZE))
- OperatingParameters.hvacSetMode = OFF;
+ updateHvacMode(OFF);
else if (!strncmp(content, "hvacModeAuto", BUTTON_CONTENT_SIZE))
- OperatingParameters.hvacSetMode = AUTO;
+ updateHvacMode(AUTO);
else if (!strncmp(content, "hvacModeHeat", BUTTON_CONTENT_SIZE))
- OperatingParameters.hvacSetMode = HEAT;
+ updateHvacMode(HEAT);
else if (!strncmp(content, "hvacModeCool", BUTTON_CONTENT_SIZE))
- OperatingParameters.hvacSetMode = COOL;
+ updateHvacMode(COOL);
else if (!strncmp(content, "hvacModeFan", BUTTON_CONTENT_SIZE))
- OperatingParameters.hvacSetMode = FAN;
+ updateHvacMode(FAN_ONLY);
else if (!strncmp(content, "clear", BUTTON_CONTENT_SIZE))
clearNVS();
else if (!strncmp(content, "hvacCoolEnable", BUTTON_CONTENT_SIZE))
@@ -111,9 +109,9 @@ void buttonDispatch(char content[BUTTON_CONTENT_SIZE])
else if (!strncmp(content, "swingDown", BUTTON_CONTENT_SIZE))
OperatingParameters.tempSwing = enforceRange(OperatingParameters.tempSwing - 0.1, 0.0, 6.0);
else if (!strncmp(content, "correctionUp", BUTTON_CONTENT_SIZE))
- OperatingParameters.tempCorrection = enforceRange(OperatingParameters.tempCorrection + 0.1, -6.5, 1.0);
+ OperatingParameters.tempCorrection = enforceRange(OperatingParameters.tempCorrection + 0.1, -10.0, 1.0);
else if (!strncmp(content, "correctionDown", BUTTON_CONTENT_SIZE))
- OperatingParameters.tempCorrection = enforceRange(OperatingParameters.tempCorrection - 0.1, -6.5, 1.0);
+ OperatingParameters.tempCorrection = enforceRange(OperatingParameters.tempCorrection - 0.1, -10.0, 1.0);
else if (!strncmp(content, "twoStageEnable", BUTTON_CONTENT_SIZE))
OperatingParameters.hvac2StageHeatEnable = !OperatingParameters.hvac2StageHeatEnable;
else if (!strncmp(content, "reverseEnable", BUTTON_CONTENT_SIZE))
@@ -214,7 +212,7 @@ esp_err_t handleXML(httpd_req_t *req)
xmlSpace -= snprintf(buf, sizeof(buf), "%d\n", OperatingParameters.hvacReverseValveEnable);
CAT_IF_SPACE(xml, buf, xmlSpace, req);
CAT_IF_SPACE(xml, "", xmlSpace, req);
- ESP_LOGI(TAG, "Remaining XML space: %ld", xmlSpace);
+ ESP_LOGD(TAG, "Remaining XML space: %ld", xmlSpace);
return httpd_resp_send(req, xml, strlen(xml));
}
diff --git a/app/src/wifi.cpp b/app/src/wifi.cpp
index 9f53fc8..1b69fbc 100644
--- a/app/src/wifi.cpp
+++ b/app/src/wifi.cpp
@@ -25,7 +25,7 @@
#include // for string class
#include "thermostat.hpp"
-
+#include // for esp_read_mac()
#if 0
// This isn't working correctly yet. I believe due to relying on the
@@ -145,7 +145,8 @@ void WiFi_ScanSSID(void)
.channel = 0,
.show_hidden = false,
.scan_type = WIFI_SCAN_TYPE_ACTIVE,
- .scan_time = scan_time
+ .scan_time = scan_time,
+ .home_chan_dwell_time = 0
};
wifiScanActive = true;
@@ -227,39 +228,54 @@ static void event_handler(void* arg, esp_event_base_t event_base,
return;
}
- if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
+ if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
{
ESP_LOGD(TAG, " event = STA_START");
- esp_wifi_connect();
- }
+#ifdef MATTER_ENABLED
+ if (!OperatingParameters.MatterStarted)
+#endif
+ esp_wifi_connect();
+ }
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{
ESP_LOGI(TAG, " event = STA_DISCONECTED - retry # %d (MAX %d)", s_retry_num, CONFIG_ESP_MAXIMUM_RETRY);
WifiStatus.Connected = false;
OperatingParameters.wifiConnected = false;
- if (s_retry_num < CONFIG_ESP_MAXIMUM_RETRY)
+ if (s_retry_num < CONFIG_ESP_MAXIMUM_RETRY)
{
- ESP_LOGW(TAG, " connect to the AP failed - retrying");
- esp_wifi_connect();
- s_retry_num++;
- }
+#ifdef MATTER_ENABLED
+ if (!OperatingParameters.MatterStarted)
+ {
+#endif
+ esp_wifi_connect();
+ s_retry_num++;
+ ESP_LOGW(TAG, " connect to the AP failed - retrying");
+#ifdef MATTER_ENABLED
+ }
+#endif
+ }
else
{
ESP_LOGE(TAG, " retry count exceeded");
xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
- }
- }
+ wifiConnecting = false;
+ }
+ }
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{
- ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
- ESP_LOGI(TAG, " event = IP_EVENT_STA_GOT_IP - ip: " IPSTR, IP2STR(&event->ip_info.ip));
- s_retry_num = 0;
- xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
+ ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data;
+ ESP_LOGI(TAG, " event = IP_EVENT_STA_GOT_IP - ip: " IPSTR, IP2STR(&event->ip_info.ip));
+ s_retry_num = 0;
+ xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
WifiStatus.Connected = true;
OperatingParameters.wifiConnected = true;
WifiStatus.ip = event->ip_info.ip;
wifiConnecting = false;
- }
+ #ifdef MQTT_ENABLED
+ //@@@ Is this necessary when the IP address changes (lease expires)?
+ // MqttHomeAssistantDiscovery();
+ #endif
+ }
}
void wifiSetHostname(const char *hostname)
@@ -289,10 +305,10 @@ void wifiSetCredentials(const char *ssid, const char *pass)
}
// Set the wifi parameters
- wifi_config_t wifi_config;
- bzero(&wifi_config, sizeof(wifi_config_t));
- strcpy((char *)wifi_config.sta.ssid, ssid);
- strcpy((char *)wifi_config.sta.password, pass);
+ wifi_config_t wifi_config;
+ bzero(&wifi_config, sizeof(wifi_config_t));
+ strcpy((char *)wifi_config.sta.ssid, ssid);
+ strcpy((char *)wifi_config.sta.password, pass);
if (!wasInitialized)
{
wifi_config.sta.threshold.authmode = WIFI_AUTH_WPA2_PSK;
@@ -302,7 +318,7 @@ void wifiSetCredentials(const char *ssid, const char *pass)
/* Initialize STA */
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_LOGD(TAG, "- Calling esp_wifi_set_config()");
- ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
+ ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
//
// After creating the driver stack to save the wifi credentials, we
@@ -357,6 +373,49 @@ void wifiDeregisterEventCallbacks()
s_wifi_event_group = NULL;
}
+#ifdef MATTER_ENABLED
+void wifiSwitchMatterMode()
+{
+ if (OperatingParameters.MatterEnabled)
+ {
+ // Setting MatterStarted keeps networkReconnect task from running
+ OperatingParameters.MatterStarted = true;
+ ESP_LOGI(TAG, "Enabling Matter");
+ // Since we are shutting down wifi to enable Matter,
+ // do not allow callbacks to take any action.
+ wifiDeregisterEventCallbacks();
+ ESP_LOGI(TAG, "Shutting down wifi connection");
+ WifiDisconnect();
+ ESP_LOGI(TAG, "Unloading wifi driver");
+ WifiDeinit();
+ ESP_LOGI(TAG, "Starting Matter API");
+ OperatingParameters.MatterStarted = MatterInit();
+ // Serial.printf ("Connecting to wifi\n");
+ // OperatingParameters.wifiConnected =
+ // wifiStart(WifiCreds.hostname, WifiCreds.ssid, WifiCreds.password);
+ }
+ else
+ {
+ ESP_LOGI(TAG, "Disabling Matter");
+ updateThermostatParams();
+ // ESP restart will happen as part of UI code (see ui_events.cpp)
+ }
+}
+
+void wifiMatterStarted()
+{
+ // wifiSetHostname(WifiCreds.hostname);
+
+ // Add additional wifi details...
+ WifiStatus.wifi_started = true;
+ WifiStatus.if_init = true;
+ WifiStatus.driver_started = true;
+ WifiStatus.Connected = true;
+ // Register callbacks for wifi events
+ // wifiRegisterEventCallbacks();
+}
+#endif
+
bool wifiStart(const char *hostname, const char *ssid, const char *pass)
{
// This code needs to be revisited later after Arduino framework removed.
@@ -365,15 +424,23 @@ bool wifiStart(const char *hostname, const char *ssid, const char *pass)
// Enable debug logging
// esp_log_level_set("*", ESP_LOG_NONE);
// esp_log_level_set(TAG, ESP_LOG_WARN);
- esp_log_level_set("*", ESP_LOG_INFO);
+ esp_log_level_set("*", ESP_LOG_INFO);
//
- ESP_LOGI(TAG, "wifiStart()");
+ ESP_LOGI(TAG, "wifiStart()");
nvs_flash_init();
wifiConnecting = true;
-
+
+#ifdef MATTER_ENABLED
+ if (OperatingParameters.MatterStarted)
+ {
+ ESP_LOGI(TAG, "Matter is already running -- abort wifiStart()");
+ return true;
+ }
+#endif
+
if (!WifiStatus.driver_started)
{
ESP_LOGW(TAG, " Wifi driver not started; Calling init and create funcs");
@@ -420,6 +487,16 @@ bool wifiStart(const char *hostname, const char *ssid, const char *pass)
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
}
+ // Retrieve the MAC address of the interface
+ esp_read_mac(OperatingParameters.mac, ESP_MAC_WIFI_STA);
+ ESP_LOGI (TAG, "MAC Address: %02x:%02x:%02x:%02x:%02x:%02x",
+ OperatingParameters.mac[0],
+ OperatingParameters.mac[1],
+ OperatingParameters.mac[2],
+ OperatingParameters.mac[3],
+ OperatingParameters.mac[4],
+ OperatingParameters.mac[5]);
+
ESP_LOGI(TAG, " Calling esp_wifi_start()");
ESP_ERROR_CHECK(esp_wifi_start());
WifiStatus.wifi_started = true;
@@ -430,45 +507,45 @@ bool wifiStart(const char *hostname, const char *ssid, const char *pass)
return true;
}
- /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
- * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
- esp_err_t ret_value = ESP_OK;
+ /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
+ * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
+ esp_err_t ret_value = ESP_OK;
ESP_LOGI(TAG, " Waiting for event callback...");
- EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
- WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_FAIL_ABORTED,
- pdFALSE,
- pdFALSE,
- xTicksToWait);
-
- /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
- * happened. */
- if (bits & WIFI_CONNECTED_BIT)
- {
- ESP_LOGI(TAG, "connected to ap SSID:%s password:****", WifiCreds.ssid);
- }
+ EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
+ WIFI_CONNECTED_BIT | WIFI_FAIL_BIT | WIFI_FAIL_ABORTED,
+ pdFALSE,
+ pdFALSE,
+ xTicksToWait);
+
+ /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
+ * happened. */
+ if (bits & WIFI_CONNECTED_BIT)
+ {
+ ESP_LOGI(TAG, "connected to ap SSID:%s password:****", WifiCreds.ssid);
+ }
else if (bits & WIFI_FAIL_BIT)
{
- ESP_LOGE(TAG, "Failed to connect to SSID:%s, password:****", WifiCreds.ssid);
- ret_value = ESP_FAIL;
- }
+ ESP_LOGE(TAG, "Failed to connect to SSID:%s, password:****", WifiCreds.ssid);
+ ret_value = ESP_FAIL;
+ }
else if (bits & WIFI_FAIL_ABORTED)
{
ESP_LOGE(TAG, "Aborted connect to SSID:%s, password:****", WifiCreds.ssid);
- ret_value = ESP_FAIL;
+ ret_value = ESP_FAIL;
}
else
{
- ESP_LOGE(TAG, "UNEXPECTED EVENT");
- ret_value = ESP_FAIL;
- }
+ ESP_LOGE(TAG, "UNEXPECTED EVENT");
+ ret_value = ESP_FAIL;
+ }
//
// Intentionally leave the callbacks in place as they are used to update
// statuses such as connection status and ip address.
//
- ESP_LOGD(TAG, "wifi_connect_sta finished.");
- return (ret_value == ESP_OK);
+ ESP_LOGD(TAG, "wifi_connect_sta finished.");
+ return (ret_value == ESP_OK);
}
bool wifiConnected()
@@ -509,18 +586,21 @@ void WifiDeinit()
}
}
+static int64_t lastWifiMillis = 0;
+TaskHandle_t ntReconnectTaskHandler = NULL;
+
void WifiDisconnect()
{
ESP_LOGI(TAG, "WifiDisconnect()");
ESP_LOGD(TAG, "- Calling esp_wifi_disconnect()");
esp_wifi_disconnect();
+ // Reset lastWifiMillis to 0 so a reconnect is enabled right away
+ // [see networkReconnectTask()]
+ lastWifiMillis = 0;
OperatingParameters.wifiConnected = false;
}
-int32_t lastWifiMillis = 0;
-TaskHandle_t ntReconnectTaskHandler = NULL;
-
bool wifiReconnect(const char *hostname, const char *ssid, const char *pass)
{
ESP_LOGI(TAG, "wifiReconnect()");
@@ -575,9 +655,10 @@ void networkReconnectTask(void *pvParameters)
return; // Will never get here, but wanted to give the compiler an exit path
}
+ // Update timestamp for last wifi connect attempt
lastWifiMillis = millis();
- if (wifiReconnect(WifiCreds.hostname, WifiCreds.ssid, WifiCreds.password) == true)
+ if (wifiReconnect(OperatingParameters.DeviceName, WifiCreds.ssid, WifiCreds.password) == true)
{
OperatingParameters.wifiConnected = true;
}
@@ -592,6 +673,13 @@ void networkReconnectTask(void *pvParameters)
void startReconnectTask()
{
+#ifdef MATTER_ENABLED
+ if (OperatingParameters.MatterStarted)
+ {
+ ESP_LOGW(TAG, "Network reconnect task -- Matter running ... Exiting");
+ return;
+ }
+#endif
if (ntReconnectTaskHandler)
{
ESP_LOGE(TAG, "Network reconnect task already running ... Exiting");