aboutsummaryrefslogtreecommitdiff
path: root/software/main
diff options
context:
space:
mode:
authorMDC Service <michael.schmid@mdc-service.de>2022-05-26 10:33:41 +0200
committerGitHub <noreply@github.com>2022-05-26 10:33:41 +0200
commitc4a8a10ba463b77cc4c406d3d1fdd4892977a43f (patch)
tree8bfe3ed8db716e01d189f6555350f069209cbfa3 /software/main
parent296e3a36d9616cfa039b768caf29e1a6ea394410 (diff)
Add files via upload
Diffstat (limited to 'software/main')
-rw-r--r--software/main/CMakeLists.txt2
-rw-r--r--software/main/component.mk4
-rw-r--r--software/main/config.cpp303
-rw-r--r--software/main/config.h35
-rw-r--r--software/main/etc.cpp26
-rw-r--r--software/main/etc.h16
6 files changed, 386 insertions, 0 deletions
diff --git a/software/main/CMakeLists.txt b/software/main/CMakeLists.txt
new file mode 100644
index 0000000..dc2a20b
--- /dev/null
+++ b/software/main/CMakeLists.txt
@@ -0,0 +1,2 @@
+idf_component_register(SRCS "main.cpp" "SimplePgSQL.cpp" "MU80X.cpp" "HMI.cpp" "etc.cpp" "uart.cpp" "iic.cpp" "config.cpp"
+ INCLUDE_DIRS ".")
diff --git a/software/main/component.mk b/software/main/component.mk
new file mode 100644
index 0000000..a98f634
--- /dev/null
+++ b/software/main/component.mk
@@ -0,0 +1,4 @@
+#
+# "main" pseudo-component makefile.
+#
+# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.)
diff --git a/software/main/config.cpp b/software/main/config.cpp
new file mode 100644
index 0000000..8ad9a6e
--- /dev/null
+++ b/software/main/config.cpp
@@ -0,0 +1,303 @@
+/*
+ * config.cpp
+ *
+ * Created on: 26.02.2022
+ * Author: steffen
+ * SPDX-FileCopyrightText: 2022 MDC Service <info@mdc-service.de>
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#include "config.h"
+
+/**
+ * ReadConfig: read the config file from SPIFFS file system
+ *
+ * @returns 1 is successfull, or -1 if an error happend.
+ */
+
+int ReadConfig() {
+ ESP_LOGI(TAG, "Initializing SPIFFS");
+ esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs", .partition_label = NULL, .max_files = 5, .format_if_mount_failed = false };
+
+ // Use settings defined above to initialize and mount SPIFFS filesystem.
+ // Note: esp_vfs_spiffs_register is an all-in-one convenience function.
+ esp_err_t ret = esp_vfs_spiffs_register(&conf);
+ if (ret != ESP_OK) {
+ if (ret == ESP_FAIL) {
+ ESP_LOGE(TAG, "Failed to mount or format filesystem");
+ } else if (ret == ESP_ERR_NOT_FOUND) {
+ ESP_LOGE(TAG, "Failed to find SPIFFS partition");
+ } else {
+ ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
+ }
+ return -1;
+ }
+
+ size_t total = 0, used = 0;
+ ret = esp_spiffs_info(conf.partition_label, &total, &used);
+ if (ret != ESP_OK) {
+ ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
+ } else {
+ ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
+ }
+
+ // Use POSIX and C standard library functions to work with files.
+ // First create a file.
+ ESP_LOGI(TAG, "Opening config file");
+
+ // Open renamed file for reading
+ ESP_LOGI(TAG, "Reading file");
+ FILE *f = fopen("/spiffs/parameter.dat", "r");
+ if (f == NULL) {
+ ESP_LOGE(TAG, "Failed to open file for reading");
+ return -2;
+ }
+ char line[64];
+ while (fgets(line, sizeof(line), f) > NULL) {
+ // strip newline
+ char *pos = strchr(line, '\n');
+ if (pos) {
+ *pos = '\0';
+ }
+ if (strlen(line) > 6) {
+ if (strncmp(line, "netip", 5) == 0) {
+ strncpy(netip, &line[6], 15);
+ } else if (strncmp(line, "netma", 5) == 0) {
+ strncpy(netma, &line[6], 15);
+ } else if (strncmp(line, "netgw", 5) == 0) {
+ strncpy(netgw, &line[6], 15);
+ } else if (strncmp(line, "srvip", 5) == 0) {
+ strncpy(srvip, &line[6], 15);
+ } else if (strncmp(line, "srvpo", 5) == 0) {
+ srvpo = atoi(&line[6]);
+ } else if (strncmp(line, "boxid", 5) == 0) {
+ boxid = atoi(&line[6]);
+ } else if (strncmp(line, "subbx", 5) == 0) {
+ subbx = atoi(&line[6]);
+ } else if (strncmp(line, "dbnam", 5) == 0) {
+ strncpy(dbnam, &line[6], 15);
+ } else if (strncmp(line, "xxxxx", 5) == 0) {
+
+ }
+ }
+ ESP_LOGI(TAG, "Read from file: '%s'", line);
+ }
+ fclose(f);
+ // All done, unmount partition and disable SPIFFS
+ esp_vfs_spiffs_unregister(conf.partition_label);
+ ESP_LOGI(TAG, "SPIFFS unmounted");
+
+ return 1;
+}
+
+/**
+ * WriteConfig: write the config file to the SPIFFS file system
+ *
+ * @returns 1 is successfull, or -1 if an error happend.
+ */
+int WriteConfig(char *buff) {
+ ESP_LOGI(TAG, "Initializing SPIFFS");
+ esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs", .partition_label = NULL, .max_files = 5, .format_if_mount_failed = false };
+
+ // Use settings defined above to initialize and mount SPIFFS filesystem.
+ // Note: esp_vfs_spiffs_register is an all-in-one convenience function.
+ esp_err_t ret = esp_vfs_spiffs_register(&conf);
+ if (ret != ESP_OK) {
+ if (ret == ESP_FAIL) {
+ ESP_LOGE(TAG, "Failed to mount or format filesystem");
+ } else if (ret == ESP_ERR_NOT_FOUND) {
+ ESP_LOGE(TAG, "Failed to find SPIFFS partition");
+ } else {
+ ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
+ }
+ return -1;
+ }
+
+ size_t total = 0, used = 0;
+ ret = esp_spiffs_info(conf.partition_label, &total, &used);
+ if (ret != ESP_OK) {
+ ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
+ } else {
+ ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
+ }
+
+ ESP_LOGI(TAG, "Opening config file");
+ ESP_LOGI(TAG, "Writing file");
+ FILE *f = fopen("/spiffs/parameter.dat", "w");
+ if (f == NULL) {
+ ESP_LOGE(TAG, "Failed to open file for writing");
+ return -2;
+ }
+
+ fprintf(f, "%s", buff);
+
+ fclose(f);
+ // All done, unmount partition and disable SPIFFS
+ esp_vfs_spiffs_unregister(conf.partition_label);
+ ESP_LOGI(TAG, "SPIFFS unmounted");
+
+ return 1;
+}
+
+/**
+ * SaveConfig: saves the config settings from settings screen SPIFFS file system
+ *
+ * @returns 1 is successfull, or -1 if an error happend.
+ */
+int SaveConfig(void) { // saves the config from settings screen
+ uint8_t ip1 = 0, ip2 = 0, ip3 = 0, ip4 = 0;
+ char buff[32];
+ int i = 0;
+ ESP_LOGI(TAG, "Initializing SPIFFS");
+ esp_vfs_spiffs_conf_t conf = { .base_path = "/spiffs", .partition_label = NULL, .max_files = 5, .format_if_mount_failed = false };
+
+ esp_err_t ret = esp_vfs_spiffs_register(&conf);
+ if (ret != ESP_OK) {
+ if (ret == ESP_FAIL) {
+ ESP_LOGE(TAG, "Failed to mount or format filesystem");
+ } else if (ret == ESP_ERR_NOT_FOUND) {
+ ESP_LOGE(TAG, "Failed to find SPIFFS partition");
+ } else {
+ ESP_LOGE(TAG, "Failed to initialize SPIFFS (%s)", esp_err_to_name(ret));
+ }
+ return -1;
+ }
+
+ size_t total = 0, used = 0;
+ ret = esp_spiffs_info(conf.partition_label, &total, &used);
+ if (ret != ESP_OK) {
+ ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)", esp_err_to_name(ret));
+ } else {
+ ESP_LOGI(TAG, "Partition size: total: %d, used: %d", total, used);
+ }
+
+ ESP_LOGI(TAG, "Opening config file");
+ FILE *f = fopen("/spiffs/parameter.dat", "w");
+ if (f == NULL) {
+ ESP_LOGE(TAG, "Failed to open file for writing");
+ return -2;
+ }
+
+ LCD->iReadValue((char *)"ip1",buff);
+ ip1=atoi(buff);
+ LCD->iReadValue((char *)"ip2",buff);
+ ip2=atoi(buff);
+ LCD->iReadValue((char *)"ip3",buff);
+ ip3=atoi(buff);
+ LCD->iReadValue((char *)"ip4",buff);
+ ip4=atoi(buff);
+ fprintf(f, "netip=%d.%d.%d.%d\n", ip1, ip2, ip3, ip4);
+
+ LCD->iReadValue((char *)"ma1",buff);
+ ip1=atoi(buff);
+ LCD->iReadValue((char *)"ma2",buff);
+ ip2=atoi(buff);
+ LCD->iReadValue((char *)"ma3",buff);
+ ip3=atoi(buff);
+ LCD->iReadValue((char *)"ma4",buff);
+ ip4=atoi(buff);
+ fprintf(f, "netma=%d.%d.%d.%d\n", ip1, ip2, ip3, ip4);
+
+ LCD->iReadValue((char *)"gw1",buff);
+ ip1=atoi(buff);
+ LCD->iReadValue((char *)"gw2",buff);
+ ip2=atoi(buff);
+ LCD->iReadValue((char *)"gw3",buff);
+ ip3=atoi(buff);
+ LCD->iReadValue((char *)"gw4",buff);
+ ip4=atoi(buff);
+ fprintf(f, "netgw=%d.%d.%d.%d\n", ip1, ip2, ip3, ip4);
+
+ LCD->iReadValue((char *)"sip1",buff);
+ ip1=atoi(buff);
+ LCD->iReadValue((char *)"sip2",buff);
+ ip2=atoi(buff);
+ LCD->iReadValue((char *)"sip3",buff);
+ ip3=atoi(buff);
+ LCD->iReadValue((char *)"sip4",buff);
+ ip4=atoi(buff);
+ fprintf(f, "srvip=%d.%d.%d.%d\n", ip1, ip2, ip3, ip4);
+
+ LCD->iReadValue((char *)"srvpo1",buff);
+ i=atoi(buff);
+ fprintf(f, "srvpo=%d\n", i);
+
+ LCD->iReadValue((char *)"boxid1",buff);
+ i=atoi(buff);
+ fprintf(f, "boxid=%d\n", i);
+
+ LCD->iReadValue((char *)"subbx1",buff);
+ i=atoi(buff);
+ fprintf(f, "subbx=%d\n", i);
+
+ LCD->iReadValue((char *)"dbnam1",buff);
+ fprintf(f, "dbnam=%s\n", buff);
+
+ fclose(f);
+ // All done, unmount partition and disable SPIFFS
+ esp_vfs_spiffs_unregister(conf.partition_label);
+ ESP_LOGI(TAG, "SPIFFS unmounted");
+
+ return 0;
+}
+
+/**
+ * SaveConfig: saves the config settings from settings screen SPIFFS file system
+ *
+ * @param name, strvals the key/value pair.
+ */
+void WriteVals(char *name, char *strvals) {
+ uint8_t ipp = 0;
+ uint32_t ip;
+ int i;
+ char nm[32];
+ ip = esp_ip4addr_aton(strvals);
+ for (i = 1; i < 5; i++) {
+ ipp = ip & 0xFF;
+ sprintf(nm, "%s%d", name, i);
+ LCD->iWriteValue(nm, ipp);
+ ip = ip >> 8;
+ }
+}
+
+/**
+ * HandleEdit: GUI to modify settings
+ *
+ * @returns HMI success/error code.
+ */
+int HandleEdit(void) {
+ int sl=1;
+ int res;
+ while (sl) {
+ res=LCD->iReadProt(1);
+ printf("HE Res:%d\n",res);fflush(stdout);
+ if (res==HMIResultOK) {
+ vTaskDelay(1);
+ res=LCD->iReadProt(1);
+ vTaskDelay(1);
+ SaveConfig();
+ sl=0;
+ LCD->iSendProt(6, (char*) "page 0");
+ } else vTaskDelay(50);
+ }
+ return res;
+}
+
+/**
+ * EditConfig: GUI to modify settings
+ *
+ * @returns HMI success/error code.
+ */
+int EditConfig() {
+ LCD->iSendProt(6, (char*) "page 3");
+ WriteVals((char *)"ip",netip);
+ WriteVals((char *)"gw",netgw);
+ WriteVals((char *)"ma",netma);
+ WriteVals((char *)"ma",netma);
+ WriteVals((char *)"sip",srvip);
+ LCD->iWriteValue((char*) "srvpo1", srvpo);
+ LCD->iWriteValue((char*) "boxid1", boxid);
+ LCD->iWriteValue((char*) "subbx1", subbx);
+ LCD->iWriteValue((char*) "dbnam1", dbnam);
+ return HandleEdit();
+}
diff --git a/software/main/config.h b/software/main/config.h
new file mode 100644
index 0000000..40aac0c
--- /dev/null
+++ b/software/main/config.h
@@ -0,0 +1,35 @@
+/*
+ * config.h
+ *
+ * Created on: 26.02.2022
+ * Author: steffen
+ * SPDX-FileCopyrightText: 2022 MDC Service <info@mdc-service.de>
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#ifndef MAIN_CONFIG_H_
+#define MAIN_CONFIG_H_
+#include "main.h"
+#include "HMI.h"
+
+extern const char *TAG;
+extern HMI* LCD;
+
+static char netip[16];
+static char netma[16];
+static char netgw[16];
+static char srvip[16];
+static char dbnam[16];
+static int srvpo;
+static int boxid;
+static int subbx;
+
+int EditConfig();
+int HandleEdit(void);
+int ReadConfig();
+int SaveConfig(void);
+int WriteConfig(char *buff);
+void WriteVals(char *name, char *strvals);
+
+
+#endif /* MAIN_CONFIG_H_ */
diff --git a/software/main/etc.cpp b/software/main/etc.cpp
new file mode 100644
index 0000000..99bcf20
--- /dev/null
+++ b/software/main/etc.cpp
@@ -0,0 +1,26 @@
+/*
+ * etc.cpp
+ *
+ * Created on: 26.02.2022
+ * Author: steffen
+ * SPDX-FileCopyrightText: 2022 MDC Service <info@mdc-service.de>
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+#include "etc.h"
+
+
+/**
+ * DumpBuf: helper function to dump a buffer
+ *
+ * @param buf the buffer to dump.
+ * @param len lenght of the buffer to dump.
+ */
+void DumpBuf(void *buf, int len) {
+ int i, c;
+ char *lb = (char*) buf;
+ for (i = 0; i < len; i++) {
+ c = (char) *lb++;
+ printf("%02X ", c);
+ }
+ printf("\n");
+}
diff --git a/software/main/etc.h b/software/main/etc.h
new file mode 100644
index 0000000..35dd478
--- /dev/null
+++ b/software/main/etc.h
@@ -0,0 +1,16 @@
+/*
+ * etc.h
+ *
+ * Created on: 26.02.2022
+ * Author: steffen
+ * SPDX-FileCopyrightText: 2022 MDC Service <info@mdc-service.de>
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#ifndef MAIN_ETC_H_
+#define MAIN_ETC_H_
+#include "main.h"
+
+void DumpBuf(void *buf, int len);
+
+#endif /* MAIN_ETC_H_ */