diff --git a/include/hasp_conf.h b/include/hasp_conf.h
index b1ee1526..a4095aca 100644
--- a/include/hasp_conf.h
+++ b/include/hasp_conf.h
@@ -154,7 +154,7 @@
#endif
#ifndef HASP_USE_SDCARD
-#define HASP_USE_SDCARD 0
+#define HASP_USE_SDCARD 1
#endif
#ifndef HASP_USE_GPIO
diff --git a/platformio.ini b/platformio.ini
index a003dc93..64afed1b 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -98,6 +98,7 @@ lib_deps =
;AsyncTCP
;https://github.com/me-no-dev/ESPAsyncWebServer/archive/master.zip
;https://github.com/me-no-dev/ESPAsyncTCP/archive/master.zip
+ ${override.lib_deps}
build_src_filter = +<*> -<.git/> - - - - -
diff --git a/src/hasp/hasp_attribute.cpp b/src/hasp/hasp_attribute.cpp
index b8b42eca..d939b2d4 100644
--- a/src/hasp/hasp_attribute.cpp
+++ b/src/hasp/hasp_attribute.cpp
@@ -23,8 +23,8 @@ LV_FONT_DECLARE(unscii_8_icon);
extern const char** btnmatrix_default_map; // memory pointer to lvgl default btnmatrix map
extern const char* msgbox_default_map[]; // memory pointer to lvgl default btnmatrix map
-// extern const uint8_t rootca_crt_bundle_start[] asm("_binary_data_cert_x509_crt_bundle_bin_start");
-// extern const uint8_t rootca_crt_bundle_end[] asm("_binary_data_cert_x509_crt_bundle_bin_end");
+//extern const uint8_t rootca_crt_bundle_start[] asm("_binary_data_cert_x509_crt_bundle_bin_start");
+//extern const uint8_t rootca_crt_bundle_end[] asm("_binary_data_cert_x509_crt_bundle_bin_end");
void my_image_release_resources(lv_obj_t* obj)
{
@@ -98,7 +98,7 @@ const char** my_map_create(const char* payload)
{
// Reserve memory for JsonDocument
// StaticJsonDocument<1024> map_doc;
- size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 1024;
+ size_t maxsize = (128u * ((strlen(payload) / 128) + 1)) + 256;
DynamicJsonDocument map_doc(maxsize);
DeserializationError jsonError = deserializeJson(map_doc, payload);
@@ -398,7 +398,6 @@ static void hasp_attribute_get_part_state_new(lv_obj_t* obj, const char* attr_in
case LV_HASP_IMGBTN:
case LV_HASP_OBJECT:
case LV_HASP_TAB:
- case LV_HASP_QRCODE:
part = LV_BTN_PART_MAIN;
break;
@@ -1325,16 +1324,120 @@ static inline bool do_attribute(T& list, lv_obj_t* obj, uint16_t attr_hash, int3
static hasp_attribute_type_t special_attribute_src(lv_obj_t* obj, const char* payload, char** text, bool update)
{
+ LOG_ERROR(TAG_ATTR, "PAYLOAD %s", payload);
if(!obj_check_type(obj, LV_HASP_IMAGE)) return HASP_ATTR_TYPE_NOT_FOUND;
if(update) {
-
if(payload != strstr_P(payload, PSTR("http://")) && // not start with http
payload != strstr_P(payload, PSTR("https://"))) { // not start with https
if(payload == strstr_P(payload, PSTR("L:"))) { // startsWith command/
my_image_release_resources(obj);
lv_img_set_src(obj, payload);
+ } else if (payload == strstr_P(payload, PSTR("Z:"))) {
+ // if (HASP_SD_FS.exists("/b.png"))
+ char tempsrcf[64] = "";
+ strncpy(tempsrcf , payload + 2, sizeof(tempsrcf));
+ LOG_ERROR(TAG_ATTR, "PAYLOAD DENTRO %s", tempsrcf);
+
+
+ int readf = 0;
+ File file;
+ file = HASP_SD_FS.open(tempsrcf, "r");
+
+
+ int buf_lenf = file.size();
+ LOG_ERROR(TAG_ATTR, "size %d", buf_lenf);
+
+ int dsc_lenf = sizeof(lv_img_dsc_t);
+ lv_img_dsc_t* img_dscf = (lv_img_dsc_t*)lv_mem_alloc(dsc_lenf);
+ uint8_t* img_buf_startf = (uint8_t*)(buf_lenf > 0 ? hasp_malloc(buf_lenf) : NULL);
+ uint8_t* img_buf_posf = img_buf_startf;
+
+
+ // Initialize the buffers
+ memset(img_buf_startf, 0, buf_lenf); // empty data buffer
+ memset(img_dscf, 0, dsc_lenf); // empty img descriptor + url
+ img_dscf->data = img_buf_startf; // store pointer to the start of the data buffer
+ if(!img_buf_startf) {
+ lv_mem_free(img_dscf); // destroy header too
+ LOG_ERROR(TAG_ATTR, "img buffer creation failed %d", buf_lenf);
+ return HASP_ATTR_TYPE_STR;
+ }
+ // Read image header
+ readf = 0;
+ const uint8_t png_magic[] = {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a};
+ if(file.available() >= 8) {
+ int c = file.readBytes((char *)img_buf_posf, 8); // don't read too far
+
+ if(!memcmp(png_magic, img_buf_posf, sizeof(png_magic))) {
+ // PNG image, keep all data and advance buffer
+ LOG_VERBOSE(TAG_ATTR, D_BULLET "PNG HEADER: %d bytes read=%d buf_len=%d", c, readf, buf_lenf);
+ img_buf_posf += c;
+ buf_lenf -= c;
+ readf += c;
+ } else {
+ // BIN format, copy the header
+ lv_img_header_t* header = (lv_img_header_t*)img_buf_posf;
+ img_dscf->header.always_zero = 0;
+ img_dscf->header.w = header->w;
+ img_dscf->header.h = header->h;
+ img_dscf->header.cf = header->cf;
+
+ LOG_VERBOSE(TAG_ATTR, D_BULLET "BIN image: w=%d h=%d cf=%d len=%d", img_dscf->header.w,
+ img_dscf->header.h, img_dscf->header.cf, img_dscf->data_size);
+ img_buf_posf += sizeof(lv_img_header_t);
+ // shift remainder of 8 data-bytes to the start of the buffer
+ memcpy(img_buf_startf, img_buf_posf, 8U - sizeof(lv_img_header_t));
+ buf_lenf -= c;
+ readf += c;
+ }
+ } else {
+ // disconnected
+ hasp_free(img_buf_startf);
+ lv_mem_free(img_dscf); // destroy header too
+ LOG_ERROR(TAG_ATTR, "img header read failed %d", buf_lenf);
+ file.close();
+ return HASP_ATTR_TYPE_STR;
+ }
+
+ // Read image data
+ while( (buf_lenf > 0)) {
+ if(size_t size = file.available()) {
+ int c = file.readBytes((char *)img_buf_posf, size > buf_lenf ? buf_lenf : size); // don't read too far
+ LOG_DEBUG(TAG_ATTR, "%s %d %x -> %x", __FILE__, __LINE__, img_dscf->data, img_buff);
+ img_buf_posf += c;
+ buf_lenf -= c;
+ LOG_DEBUG(TAG_ATTR, D_BULLET "IMG DATA: %d bytes read=%d buf_len=%d", c, readf, buf_lenf);
+ readf += c;
+ } else {
+ delay(1); // wait for data
+ }
+ }
+
+ if(!memcmp(png_magic, img_dscf->data, sizeof(png_magic))) {
+ // PNG format, get image size from header
+ img_dscf->header.always_zero = 0;
+ img_dscf->header.w = img_buf_startf[19] + (img_buf_startf[18] << 8);
+ img_dscf->header.h = img_buf_startf[23] + (img_buf_startf[22] << 8);
+ img_dscf->data_size = img_buf_posf - img_buf_startf; // end of buffer - start of buffer
+ img_dscf->header.cf = LV_IMG_CF_RAW_ALPHA;
+ LOG_VERBOSE(TAG_ATTR, D_BULLET "PNG image: w=%d h=%d cf=%d len=%d", img_dscf->header.w,
+ img_dscf->header.h, img_dscf->header.cf, img_dscf->data_size);
+ } else {
+ img_dscf->data_size = img_buf_posf - img_buf_startf - sizeof(lv_img_header_t); // end buf - start buf
+ LOG_VERBOSE(TAG_ATTR, D_BULLET "BIN image: w=%d h=%d cf=%d len=%d", img_dscf->header.w,
+ img_dscf->header.h, img_dscf->header.cf, img_dscf->data_size);
+ }
+ file.close();
+ my_image_release_resources(obj);
+ lv_img_set_src(obj, img_dscf);
+ //hasp_free(img_buf_startf);
+ LOG_VERBOSE(TAG_ATTR, F("Funciona %s"), payload);
+ //lv_mem_free(img_dscf); // NO LOP DESTUYASSSS cuando pongas
+ //lv_img_set_src(obj, img_dscf);
+ LOG_DEBUG(TAG_ATTR, "%s %d %x -> %x", __FILE__, __LINE__, img_buf_startf, img_buf_start_posf);
+
} else if(payload == strstr_P(payload, PSTR("/littlefs/"))) { // startsWith command/
char tempsrc[64] = "L:";
@@ -1756,9 +1859,6 @@ static hasp_attribute_type_t attribute_common_text(lv_obj_t* obj, uint16_t attr_
{LV_HASP_TAB, ATTR_TEXT, my_tab_set_text, my_tab_get_text},
#if LV_USE_WIN != 0
{LV_HASP_WINDOW, ATTR_TEXT, lv_win_set_title, lv_win_get_title},
-#endif
-#if HASP_USE_QRCODE > 0
- {LV_HASP_QRCODE, ATTR_TEXT, my_qrcode_set_text, my_qrcode_get_text},
#endif
{LV_HASP_MSGBOX, ATTR_TEXT, my_msgbox_set_text, lv_msgbox_get_text}
};
@@ -2377,12 +2477,12 @@ static hasp_attribute_type_t attribute_common_int(lv_obj_t* obj, uint16_t attr_h
val = obj->user_data.groupid;
break; // attribute_found
- // case ATTR_TRANSITION:
- // if(update)
- // obj->user_data.transitionid = (uint8_t)val;
- // else
- // val = obj->user_data.transitionid;
- // break; // attribute_found
+ // case ATTR_TRANSITION:
+ // if(update)
+ // obj->user_data.transitionid = (uint8_t)val;
+ // else
+ // val = obj->user_data.transitionid;
+ // break; // attribute_found
case ATTR_OBJID:
if(update && val != obj->user_data.objid) return HASP_ATTR_TYPE_INT_READONLY;
@@ -2454,18 +2554,6 @@ static hasp_attribute_type_t attribute_common_int(lv_obj_t* obj, uint16_t attr_h
val = lv_obj_get_ext_click_pad_top(obj);
break; // attribute_found
-#if HASP_USE_QRCODE > 0
- case ATTR_SIZE:
- if(obj_check_type(obj, LV_HASP_QRCODE)) {
- if(update) {
- lv_qrcode_set_size(obj, val);
- } else {
- val = lv_obj_get_width(obj);
- }
- }
- break;
-#endif
-
default:
return HASP_ATTR_TYPE_NOT_FOUND; // attribute_not found
}
@@ -2515,12 +2603,12 @@ static hasp_attribute_type_t attribute_common_bool(lv_obj_t* obj, uint16_t attr_
val = !(lv_obj_get_state(obj, LV_BTN_PART_MAIN) & LV_STATE_DISABLED);
break; // attribute_found
- // case ATTR_SWIPE:
- // if(update)
- // obj->user_data.swipeid = (!!val) % 16;
- // else
- // val = obj->user_data.swipeid;
- // break; // attribute_found
+ // case ATTR_SWIPE:
+ // if(update)
+ // obj->user_data.swipeid = (!!val) % 16;
+ // else
+ // val = obj->user_data.swipeid;
+ // break; // attribute_found
case ATTR_TOGGLE:
switch(obj_get_type(obj)) {
@@ -2668,7 +2756,6 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attribute, const char
case ATTR_OPACITY:
case ATTR_EXT_CLICK_H:
case ATTR_EXT_CLICK_V:
- case ATTR_SIZE:
val = strtol(payload, nullptr, DEC);
ret = attribute_common_int(obj, attr_hash, val, update);
break;
@@ -2947,4 +3034,4 @@ void hasp_process_obj_attribute(lv_obj_t* obj, const char* attribute, const char
default:
LOG_ERROR(TAG_ATTR, F(D_ERROR_UNKNOWN " (%d)"), ret);
}
-}
+}
\ No newline at end of file
diff --git a/src/hasp/hasp_dispatch.cpp b/src/hasp/hasp_dispatch.cpp
index 03b0da9d..2d1f15b1 100644
--- a/src/hasp/hasp_dispatch.cpp
+++ b/src/hasp/hasp_dispatch.cpp
@@ -788,7 +788,7 @@ void dispatch_run_script(const char*, const char* payload, uint8_t source)
if(filename[0] == 'L' && filename[1] == ':') filename += 2; // strip littlefs drive letter
#if ARDUINO
-#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
+#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0 || HASP_USE_SDCARD
if(!HASP_FS.exists(filename)) {
LOG_WARNING(TAG_MSGR, F(D_FILE_NOT_FOUND ": %s"), payload);
@@ -796,7 +796,7 @@ void dispatch_run_script(const char*, const char* payload, uint8_t source)
}
LOG_TRACE(TAG_MSGR, F(D_FILE_LOADING), payload);
-
+
File cmdfile = HASP_FS.open(filename, "r");
if(!cmdfile) {
LOG_ERROR(TAG_MSGR, F(D_FILE_LOAD_FAILED), payload);
@@ -1678,4 +1678,4 @@ void everySecond()
}
}
}
-#endif
+#endif
\ No newline at end of file
diff --git a/src/hasp_filesystem.cpp b/src/hasp_filesystem.cpp
index 1f9f4953..a56f66c2 100644
--- a/src/hasp_filesystem.cpp
+++ b/src/hasp_filesystem.cpp
@@ -180,7 +180,7 @@ void filesystemList()
#else
if(!HASP_FS.begin(true)) { // default vfs path: /littlefs
#endif
- LOG_ERROR(TAG_FILE, F("Flash file system not mounted."));
+ LOG_ERROR(TAG_FILE, F("Flash file system not mouted."));
} else {
LOG_VERBOSE(TAG_FILE, F("Listing files on the internal flash:"));
@@ -204,6 +204,38 @@ void filesystemList()
}
#if defined(ARDUINO_ARCH_ESP32)
+
+void listDir_SD(fs::FS &fs, const char *dirname, uint8_t levels) {
+ LOG_VERBOSE(TAG_FILE, "Listing directory: %s\n", dirname);
+
+ File root = fs.open(dirname);
+ if (!root) {
+ LOG_WARNING(TAG_FILE, "Failed to open directory");
+ return;
+ }
+ if (!root.isDirectory()) {
+ LOG_WARNING(TAG_FILE, "Not a directory");
+ return;
+ }
+
+ File file = root.openNextFile();
+ while (file) {
+ if (file.isDirectory()) {
+ LOG_VERBOSE(TAG_FILE, " DIR : ");
+ Serial.println(file.name());
+ if (levels) {
+ listDir_SD(fs, file.path(), levels - 1);
+ }
+ } else {
+ LOG_VERBOSE(TAG_FILE, " FILE: ");
+ LOG_VERBOSE(TAG_FILE, "%s ", file.name());
+ LOG_VERBOSE(TAG_FILE, " SIZE: ");
+ LOG_VERBOSE(TAG_FILE, "%d\n", file.size());
+ }
+ file = root.openNextFile();
+ }
+}
+
String filesystem_list(fs::FS& fs, const char* dirname, uint8_t levels)
{
LOG_VERBOSE(TAG_FILE, "Listing directory: %s\n", dirname);
@@ -282,6 +314,29 @@ void filesystemSetupFiles()
filesystem_write_file("/mqtt_off.cmd", HASP_MQTT_OFF_CMD, strlen(HASP_MQTT_OFF_CMD));
#endif
}
+bool sdcardSetup(void)
+{
+ bool flag = false;
+ pinMode(SD_CS, OUTPUT);
+ digitalWrite(SD_CS, HIGH);
+ SPI.begin(SPI_SCK, SPI_MISO, SPI_MOSI);
+ LOG_INFO(TAG_FILE, "sdcardSetup...");
+
+ if (!HASP_SD_FS.begin(SD_CS, SPI, 1000000)) {
+ LOG_ERROR(TAG_FILE, F("SD Card Mount Failed"));
+ return flag;
+ }
+ uint8_t cardType = HASP_SD_FS.cardType();
+ if (cardType == CARD_NONE) {
+ LOG_ERROR(TAG_FILE, F("No SD card attached"));
+ return flag;
+ }
+ uint64_t cardSize = HASP_SD_FS.cardSize() / (1024 * 1024);
+ LOG_INFO(TAG_FILE, "TF Card Size: %lluMB\n", cardSize);
+ //listDir_SD(HASP_SD_FS, "/", 2);
+ flag = true;
+ return flag;
+}
bool filesystemSetup(void)
{
@@ -311,4 +366,4 @@ bool filesystemSetup(void)
return false;
}
-#endif
+#endif
\ No newline at end of file
diff --git a/src/hasp_filesystem.h b/src/hasp_filesystem.h
index 0299fc7f..f5f8ac34 100644
--- a/src/hasp_filesystem.h
+++ b/src/hasp_filesystem.h
@@ -8,6 +8,7 @@
#include
bool filesystemSetup(void);
+bool sdcardSetup(void);
void filesystemList();
void filesystemInfo();
@@ -50,6 +51,14 @@ typedef struct
#define HASP_FS LITTLEFS
#endif // ESP_ARDUINO_VERSION
+#if HASP_USE_SDCARD > 0
+#include "SPI.h"
+#include "SD.h"
+#include "FS.h"
+#define HASP_SD_FS SD
+
+#endif
+
#endif
#elif defined(ARDUINO_ARCH_ESP8266)
@@ -66,6 +75,7 @@ typedef struct
#if defined(ARDUINO_ARCH_ESP32)
void filesystemUnzip(const char*, const char* filename, uint8_t source);
String filesystem_list(fs::FS& fs, const char* dirname, uint8_t levels);
+void listDir_SD(fs::FS &fs, const char *dirname, uint8_t levels);
#endif
#endif // HASP_FILESYSTEM_H
\ No newline at end of file
diff --git a/src/hasp_gui.cpp b/src/hasp_gui.cpp
index ebb7870a..89718ab7 100644
--- a/src/hasp_gui.cpp
+++ b/src/hasp_gui.cpp
@@ -19,7 +19,7 @@
#define BACKLIGHT_CHANNEL 0 // pwm channel 0-15
-#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0
+#if HASP_USE_SPIFFS > 0 || HASP_USE_LITTLEFS > 0 || HASP_USE_SDCARD
File pFileOut;
#endif
diff --git a/src/lang/es_ES.h b/src/lang/es_ES.h
index acee2059..905cbb8a 100644
--- a/src/lang/es_ES.h
+++ b/src/lang/es_ES.h
@@ -15,9 +15,9 @@
#define D_ERROR_OUT_OF_MEMORY "Memory llena"
#define D_ERROR_UNKNOWN "Error desconocido"
-#define D_CONFIG_NOT_CHANGED "No hay cambios en la configuración"
-#define D_CONFIG_CHANGED "Configuración cambiada"
-#define D_CONFIG_LOADED "Configuración cargada"
+#define D_CONFIG_NOT_CHANGED "No hay cambios en la configuracion"
+#define D_CONFIG_CHANGED "Configuracion cambiada"
+#define D_CONFIG_LOADED "Configuracion cargada"
#define D_FILE_LOADING "Cargando %s"
#define D_FILE_LOADED "%s cargado"
@@ -46,85 +46,85 @@
#define D_SETTING_DISABLED "Deshabilitado" // New
#define D_SETTING_DEFAULT "Default" // New
-#define D_NETWORK_IP_ADDRESS_RECEIVED "Se recibió la dirección IP: %s"
+#define D_NETWORK_IP_ADDRESS_RECEIVED "Se recibio la direccion IP: %s"
#define D_NETWORK_ONLINE "en linea"
#define D_NETWORK_OFFLINE "fuera de línea"
-#define D_NETWORK_CONNECTION_FAILED "Falló la conexión"
-#define D_NETWORK_CONNECTION_UNAUTHORIZED "Falló la autorización"
+#define D_NETWORK_CONNECTION_FAILED "Fallo la conexion"
+#define D_NETWORK_CONNECTION_UNAUTHORIZED "Fallo la autorizacion"
#define D_MQTT_DEFAULT_NAME "placa_%s"
#define D_MQTT_CONNECTING "Conectando..."
#define D_MQTT_CONNECTED "Conectado al Broker %s con el clientID %s"
-#define D_MQTT_NOT_CONNECTED "No hay conexión ???"
+#define D_MQTT_NOT_CONNECTED "No hay conexion ???"
#define D_MQTT_DISCONNECTING "Desconectando..."
#define D_MQTT_DISCONNECTED "Desconectado"
#define D_MQTT_RECONNECTING "Desconectado del broker, reconectando..."
#define D_MQTT_NOT_CONFIGURED "No se ha configurado el Broker"
#define D_MQTT_STARTED "Arrancando: %d bytes"
-#define D_MQTT_FAILED "Falló:"
-#define D_MQTT_INVALID_TOPIC "El mensaje tiene un tópico inválido"
+#define D_MQTT_FAILED "Fallo:"
+#define D_MQTT_INVALID_TOPIC "El mensaje tiene un topico invalido"
#define D_MQTT_SUBSCRIBED "Subscrito a %s"
#define D_MQTT_NOT_SUBSCRIBED "No se pudo subscribir a %s"
#define D_MQTT_HA_AUTO_DISCOVERY "Registrando auto-descubrimiento en HA"
#define D_MQTT_PAYLOAD_TOO_LONG "Los datos enviados son demasiado largos(%u bytes)"
-#define D_TELNET_CLOSING_CONNECTION "Cerrando sesión de %s"
+#define D_TELNET_CLOSING_CONNECTION "Cerrando sesion de %s"
#define D_TELNET_CLIENT_LOGIN_FROM "Se ha firmado el cliente %s"
#define D_TELNET_CLIENT_CONNECT_FROM "Se ha conectado el cliente %s"
#define D_TELNET_CLIENT_NOT_CONNECTED "Cliente NO conectado"
-#define D_TELNET_INCORRECT_LOGIN_ATTEMPT "Intento de conexión incorrecta desde %s"
+#define D_TELNET_INCORRECT_LOGIN_ATTEMPT "Intento de conexion incorrecta desde %s"
#define D_TELNET_STARTED "Console Telnet arrancada"
-#define D_TELNET_FAILED "Falló el arranque de la consola Telnet"
+#define D_TELNET_FAILED "Fallo el arranque de la consola Telnet"
#define D_TELNET_CLIENT_CONNECTED "Cliente conectado"
#define D_TELNET_CLIENT_REJECTED "Cliente rechazado"
-#define D_HASP_INVALID_PAGE "Página inválida %u"
+#define D_HASP_INVALID_PAGE "Pagina invalida %u"
#define D_HASP_INVALID_LAYER "No se puede borrar una capa del sistema"
-#define D_HASP_CHANGE_PAGE "Cambiando a página %u"
-#define D_HASP_CLEAR_PAGE "Limpiando página %u"
+#define D_HASP_CHANGE_PAGE "Cambiando a pagina %u"
+#define D_HASP_CLEAR_PAGE "Limpiando pagina %u"
#define D_OBJECT_DELETED "Objeto borrado"
#define D_OBJECT_UNKNOWN "Objeto desconocido"
#define D_OBJECT_MISMATCH "Los objetos NO SON IGUALES!"
#define D_OBJECT_LOST "Objeto perdido!"
#define D_OBJECT_CREATE_FAILED "No se pudo crear objeto %u"
-#define D_OBJECT_PAGE_UNKNOWN "La página ID %u no está definida"
+#define D_OBJECT_PAGE_UNKNOWN "La pagina ID %u no esta definida"
#define D_OBJECT_EVENT_UNKNOWN "NO se conoce el evento %d "
#define D_ATTRIBUTE_UNKNOWN "Propiedad %s desconocida"
// D_ATTRIBUTE_OBSOLETE D_ATTRIBUTE_INSTEAD can be used together or just D_ATTRIBUTE_OBSOLETE alone
-#define D_ATTRIBUTE_OBSOLETE "%s está obsoleto"
+#define D_ATTRIBUTE_OBSOLETE "%s esta obsoleto"
#define D_ATTRIBUTE_INSTEAD ", usa %s en su lugar"
#define D_ATTRIBUTE_READ_ONLY "%s es solo lectura"
-#define D_ATTRIBUTE_PAGE_METHOD_INVALID "No se puede llamar %s en una página"
+#define D_ATTRIBUTE_PAGE_METHOD_INVALID "No se puede llamar %s en una pagina"
#define D_ATTRIBUTE_ALIGN_INVALID "Invalid align property: %s" // new
#define D_ATTRIBUTE_COLOR_INVALID "Invalid color property: %s" // new
#define D_ATTRIBUTE_LONG_MODE_INVALID "Invalid long mode: %s" // new
#define D_OOBE_SSID_VALIDATED "SSID %s validado"
-#define D_OOBE_AUTO_CALIBRATE "Auto calibración hablitada"
+#define D_OOBE_AUTO_CALIBRATE "Auto calibracion hablitada"
#define D_OOBE_CALIBRATED "Ya se ha calibrado"
-#define D_DISPATCH_COMMAND_NOT_FOUND "No se encontró el comando '%s'"
-#define D_DISPATCH_INVALID_PAGE "Página inválida %s"
+#define D_DISPATCH_COMMAND_NOT_FOUND "No se encontro el comando '%s'"
+#define D_DISPATCH_INVALID_PAGE "Pagina invalida %s"
#define D_DISPATCH_REBOOT "Reiniciando microprocesador!"
#define D_JSON_FAILED "No se pudo analizar JSON:"
-#define D_JSONL_FAILED "El análisis del JSONL falló en la línea %u"
+#define D_JSONL_FAILED "El analisis del JSONL fallo en la línea %u"
#define D_JSONL_SUCCEEDED "JSONL analizado"
-#define D_OTA_CHECK_UPDATE "Buscando actualización en URL: %s"
-#define D_OTA_CHECK_COMPLETE "Verificación de actualizacion completa"
-#define D_OTA_CHECK_FAILED "Falló la verificación de actualización: %s"
-#define D_OTA_UPDATE_FIRMWARE "Actualización de firmware OTA"
-#define D_OTA_UPDATE_COMPLETE "Actualización OTA completada"
+#define D_OTA_CHECK_UPDATE "Buscando actualizacion en URL: %s"
+#define D_OTA_CHECK_COMPLETE "Verificacion de actualizacion completa"
+#define D_OTA_CHECK_FAILED "Fallo la verificacion de actualizacion: %s"
+#define D_OTA_UPDATE_FIRMWARE "Actualizacion de firmware OTA"
+#define D_OTA_UPDATE_COMPLETE "Actualizacion OTA completada"
#define D_OTA_UPDATE_APPLY "Aplicando el nuevo firmware y reinicio"
-#define D_OTA_UPDATE_FAILED "La actualización OTA falló"
+#define D_OTA_UPDATE_FAILED "La actualizacion OTA fallo"
#define D_OTA_UPDATING_FIRMWARE "Actualizando el firmware..."
#define D_OTA_UPDATING_FILESYSTEM "Actualizando el sistema de archivos..."
#define D_HTTP_HASP_DESIGN "Diseño de HASP"
-#define D_HTTP_INFORMATION "Información"
+#define D_HTTP_INFORMATION "Informacion"
#define D_HTTP_HTTP_SETTINGS "Ajustes HTTP"
#define D_HTTP_HTTP_SETTINGS "Ajustes FTP"
#define D_HTTP_WIFI_SETTINGS "Ajustes Wifi"
@@ -133,33 +133,33 @@
#define D_HTTP_GPIO_SETTINGS "Ajustes GPIO"
#define D_HTTP_MDNS_SETTINGS "Ajustes mDNS"
#define D_HTTP_TELNET_SETTINGS "Ajustes Telnet"
-#define D_HTTP_DEBUG_SETTINGS "Ajustes de depuración"
+#define D_HTTP_DEBUG_SETTINGS "Ajustes de depuracion"
#define D_HTTP_GUI_SETTINGS "Ajustes de Pantalla"
-#define D_HTTP_SAVE_SETTINGS "Guardar configuración"
+#define D_HTTP_SAVE_SETTINGS "Guardar configuracion"
#define D_HTTP_UPLOAD_FILE "Cargar archivo"
-#define D_HTTP_ERASE_DEVICE "Borrar configuración"
+#define D_HTTP_ERASE_DEVICE "Borrar configuracion"
#define D_HTTP_ADD_GPIO "Agragar un nuevo pin"
-#define D_HTTP_BACK "Atrás"
+#define D_HTTP_BACK "Atras"
#define D_HTTP_REFRESH "Refrescar"
-#define D_HTTP_PREV_PAGE "Página Previa"
-#define D_HTTP_NEXT_PAGE "Siguiente Página"
+#define D_HTTP_PREV_PAGE "Pagina Previa"
+#define D_HTTP_NEXT_PAGE "Siguiente Pagina"
#define D_HTTP_CALIBRATE "Calibrar"
#define D_HTTP_ANTIBURN "Run Anti Burn-in" // New
#define D_HTTP_SCREENSHOT "Imagen de Pantalla"
#define D_HTTP_FILE_BROWSER "Editor de Archivos"
-#define D_HTTP_FIRMWARE_UPGRADE "Actualización de firmware"
+#define D_HTTP_FIRMWARE_UPGRADE "Actualizacion de firmware"
#define D_HTTP_UPDATE_FIRMWARE "Actualizar firmware"
-#define D_HTTP_FACTORY_RESET "Restaurar conf de fábrica"
-#define D_HTTP_MAIN_MENU "Menú principal"
+#define D_HTTP_FACTORY_RESET "Restaurar conf de fabrica"
+#define D_HTTP_MAIN_MENU "Menu principal"
#define D_HTTP_REBOOT "Reiniciar"
-#define D_HTTP_CONFIGURATION "Configuración"
+#define D_HTTP_CONFIGURATION "Configuracion"
#define D_HTTP_CONFIG_CHANGED \
- "La configuración ha cambiado, haga clic en Reiniciar para guardar los cambios en la " \
-#define D_HTTP_SENDING_PAGE "Se envió pagina %S a %s"
+ "La configuracion ha cambiado, haga clic en Reiniciar para guardar los cambios en la flash"
+#define D_HTTP_SENDING_PAGE "Se envio pagina %S a %s"
#define D_HTTP_FOOTER "por Francis Van Roie"
-#define D_INFO_VERSION "Versión"
-#define D_INFO_BUILD_DATETIME "Fecha de compilación"
+#define D_INFO_VERSION "Version"
+#define D_INFO_BUILD_DATETIME "Fecha de compilacion"
#define D_INFO_ENVIRONMENT "Environment" // new
#define D_INFO_UPTIME "Tiempo activo"
#define D_INFO_FREE_HEAP "Heap libre"
@@ -168,7 +168,7 @@
#define D_INFO_LVGL_MEMORY "Memoria LVGL"
#define D_INFO_TOTAL_MEMORY "Total"
#define D_INFO_FREE_MEMORY "Libre"
-#define D_INFO_FRAGMENTATION "Fragmentación"
+#define D_INFO_FRAGMENTATION "Fragmentacion"
#define D_INFO_PSRAM_FREE "PSRam libre"
#define D_INFO_PSRAM_SIZE "Tamaño PSRam "
#define D_INFO_FLASH_SIZE "Tamaño Flash"
@@ -177,11 +177,11 @@
#define D_INFO_FS_SIZE "Filesystem Size"
#define D_INFO_FS_USED "Filesystem Used"
#define D_INFO_FS_FREE "Filesystem Free"
-#define D_INFO_MODULE "Módulo"
+#define D_INFO_MODULE "Modulo"
#define D_INFO_MODEL "Modelo"
#define D_INFO_FREQUENCY "Frecuencia"
-#define D_INFO_CORE_VERSION "Versión del núcleo"
-#define D_INFO_RESET_REASON "Razón de ultimo Reset"
+#define D_INFO_CORE_VERSION "Version del nucleo"
+#define D_INFO_RESET_REASON "Razon de ultimo Reset"
#define D_INFO_STATUS "Estado"
#define D_INFO_SERVER "Servidor"
#define D_INFO_USERNAME "Nombre de usuario"
@@ -199,8 +199,8 @@
#define D_INFO_BSSID "BSSID"
#define D_INFO_SSID "SSID"
#define D_INFO_RSSI "Potencia de señal"
-#define D_INFO_IP_ADDRESS "Dirección IP"
-#define D_INFO_MAC_ADDRESS "Dirección MAC"
+#define D_INFO_IP_ADDRESS "Direccion IP"
+#define D_INFO_MAC_ADDRESS "Direccion MAC"
#define D_INFO_GATEWAY "Gateway"
#define D_INFO_DNS_SERVER "Servidor DNS"
#define D_INFO_ENDPOINT_IP "IP de punto final"
@@ -214,21 +214,21 @@
#define D_WIFI_RSSI_EXCELLENT "Excellente"
#define D_WIFI_RSSI_GOOD "Buena"
#define D_WIFI_RSSI_FAIR "Pasable"
-#define D_WIFI_RSSI_WEAK "Débil"
+#define D_WIFI_RSSI_WEAK "Debil"
#define D_WIFI_RSSI_BAD "Muy baka"
#define D_WG_INITIALIZED "Inicializado"
#define D_WG_BAD_CONFIG "Falta o mala configuración"
#define D_GPIO_SWITCH "Switch"
-#define D_GPIO_BUTTON "Botón"
+#define D_GPIO_BUTTON "Boton"
#define D_GPIO_TOUCH "Capacitive Touch" // new
#define D_GPIO_LED "DEL"
-#define D_GPIO_LED_R "Ánimo Red"
-#define D_GPIO_LED_G "Ánimo Green"
-#define D_GPIO_LED_B "Ánimo Blue"
-#define D_GPIO_POWER_RELAY "Power Relé" // new
-#define D_GPIO_LIGHT_RELAY "Light Relé" // new
+#define D_GPIO_LED_R "animo Red"
+#define D_GPIO_LED_G "animo Green"
+#define D_GPIO_LED_B "animo Blue"
+#define D_GPIO_POWER_RELAY "Power Rele" // new
+#define D_GPIO_LIGHT_RELAY "Light Rele" // new
#define D_GPIO_PWM "PWM"
#define D_GPIO_DAC "DAC"
#define D_GPIO_SERIAL_DIMMER "Atenuador serial"
@@ -238,5 +238,5 @@
#define D_GPIO_GROUP_NONE "Ninguno"
#define D_GPIO_STATE_NORMAL "Normal" // new
#define D_GPIO_STATE_INVERTED "Inverted" // new
-
+#define D_HTTP_SENDING_PAGE "Enviando %S pagina a %s"
#endif
\ No newline at end of file
diff --git a/src/main.cpp b/src/main.cpp
index b065909c..9ab73a39 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -37,6 +37,9 @@ uint16_t statLoopCounter = 0; // measures the average looptime
void setup()
{
// hal_setup();
+#if HASP_USE_SDCARD > 0
+ sdcardSetup();
+#endif
#if HASP_TARGET_ARDUINO
esp_log_level_set("*", ESP_LOG_NONE); // set all components to ERROR level
diff --git a/user_setups/esp32s3/sunton-esp32-s3-tft.ini b/user_setups/esp32s3/sunton-esp32-s3-tft.ini
index 1da68da7..a3e035b7 100644
--- a/user_setups/esp32s3/sunton-esp32-s3-tft.ini
+++ b/user_setups/esp32s3/sunton-esp32-s3-tft.ini
@@ -84,6 +84,13 @@ build_flags =
-D TOUCH_MOSI=11
-D TOUCH_CS=38
-D TOUCH_IRQ=18
+ ; SD Card Settings
+ -D SD_CS=10
+ -D SPI_MOSI=11
+ -D SPI_MISO=13
+ -D SPI_SCK=12
+
+#endif
[env:sunton-4827s043c_16MB]
@@ -116,6 +123,11 @@ build_flags =
-D TOUCH_RST=38
-D I2C_TOUCH_ADDRESS=0x14 ; or 0x5D
-D I2C_TOUCH_FREQUENCY=400000
+ ; SD Card Settings
+ -D SD_CS=10
+ -D SPI_MOSI=11
+ -D SPI_MISO=13
+ -D SPI_SCK=12
lib_deps =
${sunton-esp32-s3-tft.lib_deps}
${goodix.lib_deps}
@@ -154,6 +166,11 @@ build_flags =
-D TOUCH_RST=38
-D I2C_TOUCH_ADDRESS=0x14 ; or 0x5D
-D I2C_TOUCH_FREQUENCY=400000
+ ; SD Card Settings
+ -D SD_CS=10
+ -D SPI_MOSI=11
+ -D SPI_MISO=13
+ -D SPI_SCK=12
lib_deps =
${sunton-esp32-s3-tft.lib_deps}
${goodix.lib_deps}
@@ -192,6 +209,11 @@ build_flags =
-D TOUCH_RST=38
-D I2C_TOUCH_ADDRESS=0x14 ; or 0x5D
-D I2C_TOUCH_FREQUENCY=400000
+ ; SD Card Settings
+ -D SD_CS=10
+ -D SPI_MOSI=11
+ -D SPI_MISO=13
+ -D SPI_SCK=12
lib_deps =
${sunton-esp32-s3-tft.lib_deps}
${goodix.lib_deps}
@@ -249,6 +271,11 @@ build_flags =
-D TOUCH_RST=38
-D I2C_TOUCH_ADDRESS=0x5d ; or 0x14
-D I2C_TOUCH_FREQUENCY=400000
+ ; SD Card Settings
+ -D SD_CS=10
+ -D SPI_MOSI=11
+ -D SPI_MISO=13
+ -D SPI_SCK=12
lib_deps =
${sunton-esp32-s3-tft.lib_deps}
${goodix.lib_deps}