diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..797e089 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,159 @@ +# Copy paste of https://github.com/espressif/esp-idf/blob/master/tools/docker/Dockerfile +# but with ubuntu image downgraded. +# You must download https://github.com/espressif/esp-idf/blob/master/tools/docker/entrypoint.sh +# and place it in the .devcontainer directory. +#FROM ubuntu:24.04 +FROM ubuntu:22.04 + +ARG DEBIAN_FRONTEND=noninteractive + +RUN : \ + && apt-get update \ + && apt-get install -y \ + apt-utils \ + bison \ + bzip2 \ + ca-certificates \ + ccache \ + check \ + curl \ + flex \ + git \ + git-lfs \ + gperf \ + lcov \ + libbsd-dev \ + libffi-dev \ + libglib2.0-0 \ + libncurses-dev \ + libpixman-1-0 \ + libsdl2-2.0-0 \ + libslirp0 \ + libusb-1.0-0-dev \ + make \ + ninja-build \ + python3 \ + python3-venv \ + ruby \ + unzip \ + wget \ + xz-utils \ + zip \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* \ + && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 \ + && : + +# To build the image for a branch or a tag of IDF, pass --build-arg IDF_CLONE_BRANCH_OR_TAG=name. +# To build the image with a specific commit ID of IDF, pass --build-arg IDF_CHECKOUT_REF=commit-id. +# It is possible to combine both, e.g.: +# IDF_CLONE_BRANCH_OR_TAG=release/vX.Y +# IDF_CHECKOUT_REF=. +# Use IDF_CLONE_SHALLOW=1 to perform shallow clone (i.e. --depth=1 --shallow-submodules) +# Use IDF_CLONE_SHALLOW_DEPTH=X to define the depth if IDF_CLONE_SHALLOW is used (i.e. --depth=X) +# Use IDF_INSTALL_TARGETS to install tools only for selected chip targets (CSV) + +ARG IDF_CLONE_URL=https://github.com/espressif/esp-idf.git +ARG IDF_CLONE_BRANCH_OR_TAG=master +ARG IDF_CHECKOUT_REF= +ARG IDF_CLONE_SHALLOW= +ARG IDF_CLONE_SHALLOW_DEPTH=1 +ARG IDF_INSTALL_TARGETS=all + +ENV IDF_PATH=/opt/esp/idf +ENV IDF_TOOLS_PATH=/opt/esp + +# install build essential needed for linux target apps, which is a preview target so it is installed with "all" only +RUN if [ "$IDF_INSTALL_TARGETS" = "all" ]; then \ + apt-get update \ + && apt-get install -y build-essential \ + && apt-get autoremove -y \ + && rm -rf /var/lib/apt/lists/* ; \ + fi + +RUN echo IDF_CHECKOUT_REF=$IDF_CHECKOUT_REF IDF_CLONE_BRANCH_OR_TAG=$IDF_CLONE_BRANCH_OR_TAG && \ + git clone --recursive \ + ${IDF_CLONE_SHALLOW:+--depth=${IDF_CLONE_SHALLOW_DEPTH} --shallow-submodules} \ + ${IDF_CLONE_BRANCH_OR_TAG:+-b $IDF_CLONE_BRANCH_OR_TAG} \ + $IDF_CLONE_URL $IDF_PATH && \ + git config --system --add safe.directory $IDF_PATH && \ + if [ -n "$IDF_CHECKOUT_REF" ]; then \ + cd $IDF_PATH && \ + if [ -n "$IDF_CLONE_SHALLOW" ]; then \ + git fetch origin --depth=${IDF_CLONE_SHALLOW_DEPTH} --recurse-submodules ${IDF_CHECKOUT_REF}; \ + fi && \ + git checkout $IDF_CHECKOUT_REF && \ + git submodule update --init --recursive; \ + fi + +# Install all the required tools +RUN : \ + && update-ca-certificates --fresh \ + && $IDF_PATH/tools/idf_tools.py --non-interactive install required --targets=${IDF_INSTALL_TARGETS} \ + && $IDF_PATH/tools/idf_tools.py --non-interactive install qemu* --targets=${IDF_INSTALL_TARGETS} \ + && $IDF_PATH/tools/idf_tools.py --non-interactive install cmake \ + && $IDF_PATH/tools/idf_tools.py --non-interactive install-python-env \ + && rm -rf $IDF_TOOLS_PATH/dist \ + && : + +# Add get_idf as alias +RUN echo 'alias get_idf=". /opt/esp/idf/export.sh"' >> /root/.bashrc + +# The constraint file has been downloaded and the right Python package versions installed. No need to check and +# download this at every invocation of the container. +ENV IDF_PYTHON_CHECK_CONSTRAINTS=no + +# Ccache is installed, enable it by default +ENV IDF_CCACHE_ENABLE=1 + +COPY entrypoint.sh /opt/esp/entrypoint.sh +RUN chmod +x /opt/esp/entrypoint.sh + +#Original file starts here +#FROM espressif/idf + +#ARG DEBIAN_FRONTEND=nointeractive +ARG CONTAINER_USER=esp +ARG USER_UID=1050 +ARG USER_GID=$USER_UID + +RUN apt-get update \ + && apt install -y -q \ + cmake \ + git \ + libglib2.0-0 \ + libnuma1 \ + libpixman-1-0 \ + && rm -rf /var/lib/apt/lists/* + +# QEMU +ENV QEMU_REL=esp_develop_8.2.0_20240122 +ENV QEMU_SHA256=e7c72ef5705ad1444d391711088c8717fc89f42e9bf6d1487f9c2a326b8cfa83 +ENV QEMU_DIST=qemu-xtensa-softmmu-${QEMU_REL}-x86_64-linux-gnu.tar.xz +ENV QEMU_URL=https://github.com/espressif/qemu/releases/download/esp-develop-8.2.0-20240122/${QEMU_DIST} + +ENV LC_ALL=C.UTF-8 +ENV LANG=C.UTF-8 + +RUN wget --no-verbose ${QEMU_URL} \ + && echo "${QEMU_SHA256} *${QEMU_DIST}" | sha256sum --check --strict - \ + && tar -xf $QEMU_DIST -C /opt \ + && rm ${QEMU_DIST} + +ENV PATH=/opt/qemu/bin:${PATH} + +RUN groupadd --gid $USER_GID $CONTAINER_USER \ + && adduser --uid $USER_UID --gid $USER_GID --disabled-password --gecos "" ${CONTAINER_USER} \ + && usermod -a -G root $CONTAINER_USER && usermod -a -G dialout $CONTAINER_USER + +RUN chmod -R 775 /opt/esp/python_env/ + +USER ${CONTAINER_USER} +ENV USER=${CONTAINER_USER} +WORKDIR /home/${CONTAINER_USER} + +RUN echo "source /opt/esp/idf/export.sh > /dev/null 2>&1" >> ~/.bashrc + +ENTRYPOINT [ "/opt/esp/entrypoint.sh" ] + +CMD ["/bin/bash", "-c"] \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..2d88163 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,33 @@ +{ + "name": "ESP-IDF QEMU", + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "settings": { + "terminal.integrated.defaultProfile.linux": "bash", + "idf.espIdfPath": "/opt/esp/idf", + "idf.toolsPath": "/opt/esp", + "idf.gitPath": "/usr/bin/git" + }, + "extensions": [ + "espressif.esp-idf-extension", + "espressif.esp-idf-web" + ] + }, + "codespaces": { + "settings": { + "terminal.integrated.defaultProfile.linux": "bash", + "idf.espIdfPath": "/opt/esp/idf", + "idf.toolsPath": "/opt/esp", + "idf.gitPath": "/usr/bin/git" + }, + "extensions": [ + "espressif.esp-idf-extension", + "espressif.esp-idf-web" + ] + } + }, + "runArgs": ["--privileged"] +} \ No newline at end of file diff --git a/.devcontainer/entrypoint.sh b/.devcontainer/entrypoint.sh new file mode 100644 index 0000000..513b3ba --- /dev/null +++ b/.devcontainer/entrypoint.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash +set -e + +# IDF_GIT_SAFE_DIR has the same format as system PATH environment variable. +# All path specified in IDF_GIT_SAFE_DIR will be added to user's +# global git config as safe.directory paths. For more information +# see git-config manual page. +if [ -n "${IDF_GIT_SAFE_DIR+x}" ] +then + echo "Adding following directories into git's safe.directory" + echo "$IDF_GIT_SAFE_DIR" | tr ':' '\n' | while read -r dir + do + git config --global --add safe.directory "$dir" + echo " $dir" + done +fi + +. $IDF_PATH/export.sh + +exec "$@" diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 913ddf2..2c42bb8 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -1,21 +1,23 @@ { "configurations": [ { - "name": "Win32", + "name": "ESP-IDF", + "compilerPath": "${config:idf.toolsPathWin}\\tools\\xtensa-esp-elf\\esp-13.2.0_20230928\\xtensa-esp-elf\\bin\\xtensa-esp32s3-elf-gcc.exe", + "compileCommands": "${config:idf.buildPath}/compile_commands.json", "includePath": [ + "${config:idf.espIdfPath}/components/**", + "${config:idf.espIdfPathWin}/components/**", "${workspaceFolder}/**" ], - "defines": [ - "_DEBUG", - "UNICODE", - "_UNICODE" - ], - "compilerPath": "C:\\msys64\\mingw64\\bin\\gcc.exe", - "cStandard": "c17", - "cppStandard": "gnu++17", - "intelliSenseMode": "windows-gcc-x64", - "compileCommands": "${workspaceFolder}/build/compile_commands.json" + "browse": { + "path": [ + "${config:idf.espIdfPath}/components", + "${config:idf.espIdfPathWin}/components", + "${workspaceFolder}" + ], + "limitSymbolsToIncludedHeaders": true + } } ], "version": 4 -} \ No newline at end of file +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..2511a38 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,15 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "gdbtarget", + "request": "attach", + "name": "Eclipse CDT GDB Adapter" + }, + { + "type": "espidf", + "name": "Launch", + "request": "launch" + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 929fff5..826b555 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,34 +1,12 @@ { "idf.adapterTargetName": "esp32s3", - "idf.openOcdConfigs": [ - "board/esp32s3-builtin.cfg" - ], "idf.flashType": "UART", - "idf.portWin": "COM12", + "idf.portWin": "COM11", "files.associations": { - "string_view": "c", - "regex": "c", - "bitset": "c", - "chrono": "c", - "random": "c", - "limits": "c", - "string": "c", - "format": "c", - "*.tcc": "c", - "ctime": "c", - "iomanip": "c", - "task.h": "c", - "semaphore": "c", - "typeinfo": "c", - "freertos.h": "c", - "esp_err.h": "c", - "esp_lcd_panel_rgb.h": "c", - "esp_lcd_touch_gt911.h": "c", - "esp_lcd_panel_io.h": "c", - "esp_check.h": "c", - "compare": "c", - "cstdint": "c", - "esp_sntp.h": "c" - }, - "search.useIgnoreFiles": false + "wifi.h": "c", + "esp_log.h": "c", + "esp_wifi.h": "c", + "esp_lvgl_port.h": "c", + "mqtt.h": "c" + } } \ No newline at end of file diff --git a/.vscode__/c_cpp_properties.json b/.vscode__/c_cpp_properties.json new file mode 100644 index 0000000..042e129 --- /dev/null +++ b/.vscode__/c_cpp_properties.json @@ -0,0 +1,23 @@ +{ + "configurations": [ + { + "name": "ESP-IDF", + "compilerPath": "C:\\espidftools\\tools\\xtensa-esp-elf\\esp-13.2.0_20230928\\xtensa-esp-elf\\bin\\xtensa-esp32s3-elf-gcc.exe", + "compileCommands": "${config:idf.buildPath}/compile_commands.json", + "includePath": [ + "${config:idf.espIdfPath}/components/**", + "${config:idf.espIdfPathWin}/components/**", + "${workspaceFolder}/**" + ], + "browse": { + "path": [ + "${config:idf.espIdfPath}/components", + "${config:idf.espIdfPathWin}/components", + "${workspaceFolder}" + ], + "limitSymbolsToIncludedHeaders": true + } + } + ], + "version": 4 +} diff --git a/.vscode__/launch.json b/.vscode__/launch.json new file mode 100644 index 0000000..8720977 --- /dev/null +++ b/.vscode__/launch.json @@ -0,0 +1,90 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "gdbtarget", + "request": "attach", + "name": "Eclipse CDT GDB Adapter" + }, + { + "type": "gdb", + "request": "attach", + "name": "NativeDebug", + "target": "extended-remote :3333", + "executable": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", + "gdbpath": "${command:espIdf.getToolchainGdb}", + "cwd": "${workspaceRoot}", + "autorun": [ + "mon reset halt", + "maintenance flush register-cache", + "thb app_main" + ] + }, + { + "name": "GDB", + "type": "cppdbg", + "request": "launch", + "MIMode": "gdb", + "miDebuggerPath": "${command:espIdf.getToolchainGdb}", + "requireExactSource": true, + "stopAtEntry": true, + "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", + "windows": { + "program": "${workspaceFolder}\\build\\${command:espIdf.getProjectName}.elf" + }, + "cwd": "${workspaceFolder}", + "setupCommands": [ + { "text": "set remotetimeout 20" }, + ], + "postRemoteConnectCommands": [ + { "text": "mon reset halt" }, + { "text": "maintenance flush register-cache"}, + ], + "externalConsole": false, + "logging": { + "engineLogging": true + } + }, + { + "type": "espidf", + "name": "Launch", + "request": "launch", + "debugPort": 9998, + "logLevel": 2, + "mode": "manual", + "verifyAppBinBeforeDebug": false, + "tmoScaleFactor": 1, + "initGdbCommands": [ + "target remote :3333", + "set remotetimeout 20", + "symbol-file /path/to/program.elf", + "mon reset halt", + "maintenance flush register-cache", + "thb app_main" + ], + "env": { + "CUSTOM_ENV_VAR": "SOME_VALUE" + } + }, + { + "type": "gdbtarget", + "request": "attach", + "name": "Eclipse CDT Remote", + "program": "${workspaceFolder}/build/${command:espIdf.getProjectName}.elf", + "initCommands": [ + "set remotetimeout 20", + "set remote hardware-watchpoint-limit 2", + "mon reset halt", + "maintenance flush register-cache", + "thb app_main", + ], + "gdb": "${command:espIdf.getToolchainGdb}", + "target": { + "port": "3333" + }, + } + ] +} \ No newline at end of file diff --git a/.vscode__/settings.json b/.vscode__/settings.json new file mode 100644 index 0000000..a125d26 --- /dev/null +++ b/.vscode__/settings.json @@ -0,0 +1,9 @@ +{ + "idf.adapterTargetName": "esp32s3", + "idf.flashType": "UART", + "idf.portWin": "COM11", + "files.associations": { + "string.h": "c" + }, + "idf.espIdfPathWin": "C:\\espidf\\v5.2.3\\esp-idf" +} diff --git a/components/image_downloader/CMakeLists.txt b/components/image_downloader/CMakeLists.txt new file mode 100644 index 0000000..c89003a --- /dev/null +++ b/components/image_downloader/CMakeLists.txt @@ -0,0 +1,3 @@ +idf_component_register(SRCS "image_downloader.c" + INCLUDE_DIRS "include" + REQUIRES json esp_http_client esp-tls esp_timer fatfs sdmmc vfs) diff --git a/components/image_downloader/image_downloader.c b/components/image_downloader/image_downloader.c new file mode 100644 index 0000000..7b23616 --- /dev/null +++ b/components/image_downloader/image_downloader.c @@ -0,0 +1,209 @@ +// Note: Run menuconfig to set the WiFi Credentials -> CALE Configuration +// Requirements: Needs to have an EPD Class defined. Needs PSRAM. +// This example does not use a decoded buffer hence leaves more external RAM free +// At the same time it looses the JPG_DITHER functionality in favour of render speed. +// As default only configured for parallel epapers +#include "esp_heap_caps.h" +#include "esp_log.h" +#include "esp_types.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_sleep.h" +// WiFi related +#include "esp_event.h" +#include "esp_log.h" +#include "esp_timer.h" +#include "lwip/err.h" +#include "lwip/sys.h" +// HTTP Client + time +#include "esp_http_client.h" +#include "esp_sntp.h" + +#include +#include +#include + + +#define EXAMPLE_MAX_CHAR_SIZE 64 + + +// JPG decoder +#if ESP_IDF_VERSION_MAJOR >= 4 // IDF 4+ + #include "esp32/rom/tjpgd.h" +#else // ESP32 Before IDF 4.0 + #include "rom/tjpgd.h" +#endif + +#include "esp_task_wdt.h" +#include +#include +#include // round + pow +#include "image_downloader.h" + +#define MOUNT_POINT "/sdcard" +static const char *TAG = "ImgDwn"; + +// Image URL and jpg settings. Make sure to update EPD_WIDTH/HEIGHT if using loremflickr +// Note: Only HTTP protocol supported (Check README to use SSL secure URLs) loremflickr +#define STR_HELPER(x) #x +#define STR(x) STR_HELPER(x) + +#define IMGDWN_WIDTH 600 +#define IMGDWN_HEIGHT 460 +#define IMGDWN_URL2 ("http://vps-edf71efa.vps.ovh.net:3000/render/d-solo/7BtRMrv4k/temperatures?orgId=1&var-emplacement=entree_ECS&var-emplacement=entree_reseauSol&panelId=4&width=650&height=460&scale=1&tz=Europe%2FParis/") +#define IMGDWN_URL ("http://vps-edf71efa.vps.ovh.net:3000/render/d-solo/bOcPeysGz/hauteur-cuve?orgId=1&from=now-2d&refresh=1m&panelId=4&width=650&height=460&scale=1&tz=Europe%2FParis") +// As default is 512 without setting buffer_size property in esp_http_client_config_t +#define HTTP_RECEIVE_BUFFER_SIZE 1938 + +#define DEBUG_VERBOSE false + +// Buffers +uint8_t *fb; // EPD 2bpp buffer +uint8_t *source_buf; // JPG download buffer +uint8_t *decoded_image; // RAW decoded image + +uint32_t buffer_pos = 0; +uint32_t time_download = 0; +uint32_t time_decomp = 0; +uint32_t time_render = 0; + +uint16_t countDataEventCalls = 0; +uint32_t countDataBytes = 0; +uint32_t img_buf_pos = 0; +uint32_t dataLenTotal = 0; +uint64_t startTime = 0; + + void create_file_app(uint8_t *buffer, uint32_t size) + { + ESP_LOGI(TAG, "Opening file"); + //ESP_LOGI(TAG, "output buffer to spiffs: %s \n", buffer); + FILE* f = fopen(MOUNT_POINT"/hello2.png", "wb+"); + if (f == NULL) { + ESP_LOGE(TAG, "Failed to open file for writing"); + return; + } + for(int i=0; ievent_id) + { + case HTTP_EVENT_ERROR: + ESP_LOGE(TAG, "HTTP_EVENT_ERROR"); + break; + case HTTP_EVENT_ON_CONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_ON_CONNECTED"); + break; + case HTTP_EVENT_HEADER_SENT: + ESP_LOGI(TAG, "HTTP_EVENT_HEADER_SENT"); + break; + case HTTP_EVENT_ON_HEADER: + #if DEBUG_VERBOSE + ESP_LOGI(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value); + #endif + break; + case HTTP_EVENT_ON_DATA: + ++countDataEventCalls; + #if DEBUG_VERBOSE + if (countDataEventCalls%10==0) { + ESP_LOGI(TAG, "%d len:%d\n", countDataEventCalls, evt->data_len); + } + #endif + dataLenTotal += evt->data_len; + + if (countDataEventCalls == 1) startTime = esp_timer_get_time(); + // Append received data into source_buf + memcpy(&source_buf[img_buf_pos], evt->data, evt->data_len); + img_buf_pos += evt->data_len; + + // Optional hexa dump + //ESP_LOG_BUFFER_HEX(TAG, source_buf, 100); + break; + + case HTTP_EVENT_REDIRECT: + break; + case HTTP_EVENT_ON_FINISH: + // Do not draw if it's a redirect (302) + if (esp_http_client_get_status_code(evt->client) == 200) { + printf("%li bytes read from %s\nIMG_BUF size: %li\n", img_buf_pos, IMGDWN_URL, img_buf_pos); + //drawBufJpeg(source_buf, 0, 0); + create_file_app(source_buf,img_buf_pos); //function which opens and records data to spiffs file + time_download = (esp_timer_get_time()-startTime)/1000; + ESP_LOGI("www-dw", "%li ms - download", time_download); + // Refresh display + //display.update(); + + ESP_LOGI("total", "%li ms - total time spent\n", time_download+time_decomp+time_render); + } else { + printf("HTTP on finish got status code: %d\n", esp_http_client_get_status_code(evt->client)); + } + break; + + case HTTP_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED\n"); + break; + } + return ESP_OK; +} + +// Handles http request +static void download(void) +{ + esp_http_client_config_t config = { + .url = IMGDWN_URL, + .disable_auto_redirect = false, + .event_handler = _http_event_handler_id, + .buffer_size = HTTP_RECEIVE_BUFFER_SIZE, + .timeout_ms = 50000 + }; + + esp_http_client_handle_t client = esp_http_client_init(&config); + + #if DEBUG_VERBOSE + printf("Free heap before HTTP download: %d\n", xPortGetFreeHeapSize()); + #endif + + esp_err_t err = esp_http_client_perform(client); + if (err == ESP_OK) + { + ESP_LOGI(TAG, "\nIMAGE URL: %s\n\nHTTP GET Status = %d, content_length = %lli\n", + IMGDWN_URL, + esp_http_client_get_status_code(client), + esp_http_client_get_content_length(client)); + } + else + { + ESP_LOGE(TAG, "\nHTTP GET request failed: %s", esp_err_to_name(err)); + } + + //printf("Go to sleep %d minutes\n", CONFIG_DEEPSLEEP_MINUTES_AFTER_RENDER); + esp_http_client_cleanup(client); + vTaskDelay(3600000 / portTICK_PERIOD_MS); + //deepsleep(); +} + +void imgdwn(void *pvParameter) { + + ESP_LOGE(TAG, "beginning"); + + // Should be big enough to allocate the JPEG file size, width * height should suffice + source_buf = (uint8_t *)heap_caps_malloc(IMGDWN_HEIGHT * IMGDWN_WIDTH, MALLOC_CAP_SPIRAM); + if (source_buf == NULL) { + ESP_LOGE(TAG, "Initial alloc source_buf failed!"); + } + printf("Free heap after buffers allocation: %d\n", xPortGetFreeHeapSize()); + + download(); + + heap_caps_free(source_buf); + printf("Free heap after buffers allocation: %d\n", xPortGetFreeHeapSize()); + + +} \ No newline at end of file diff --git a/components/image_downloader/include/image_downloader.h b/components/image_downloader/include/image_downloader.h new file mode 100644 index 0000000..903eec7 --- /dev/null +++ b/components/image_downloader/include/image_downloader.h @@ -0,0 +1,2 @@ +void imgdwn(); +#pragma once diff --git a/components/meteofrance/include/meteofrance.h b/components/meteofrance/include/meteofrance.h index 1e8c444..6edaec9 100644 --- a/components/meteofrance/include/meteofrance.h +++ b/components/meteofrance/include/meteofrance.h @@ -1,4 +1,5 @@ +#include "time.h" struct node { struct node *next; @@ -10,20 +11,32 @@ struct Hashtable { struct node *Cells; }; -struct forecast_temp{ +struct dailyforecast_prev{ float min; float max; char desc[25]; char icon[9]; }; +struct forecast_prev{ + float value; + char desc[25]; + char icon[9]; +}; + +struct meteodailyforecast_data{ + time_t datetime; + bool isValid; + struct dailyforecast_prev previsions; +}; + struct meteoforecast_data{ time_t datetime; bool isValid; - struct forecast_temp previsions; + struct forecast_prev previsions; }; -typedef void (*weather_data_callback)(struct meteoforecast_data *datas); +typedef void (*weather_data_callback)(struct meteodailyforecast_data *datas, struct meteoforecast_data *datasf); typedef void (*weather_data_start_callback)(); typedef struct { @@ -35,8 +48,12 @@ typedef struct { weather_data_start_callback data_retreived_cb_start; } weather_data; -void printftemp(struct forecast_temp *tmp); -void printffd(struct meteoforecast_data *tmp); +void printdftemp(struct dailyforecast_prev *tmp); +void printftemp(struct forecast_prev *tmp); +void printfdf(struct meteodailyforecast_data *tmp); +void dtToString(time_t, char *buffer); +void dtHToString(time_t, char *buffer); +void printff(struct meteoforecast_data *tmp); void on_weather_data_retrieval(weather_data_callback data_retreived_cb); void on_weather_data_retrieval_start(weather_data_callback data_retreived_cb); diff --git a/components/meteofrance/meteofrance.c b/components/meteofrance/meteofrance.c index 0d69106..f870228 100644 --- a/components/meteofrance/meteofrance.c +++ b/components/meteofrance/meteofrance.c @@ -22,234 +22,348 @@ #include "esp_http_client.h" #include "esp_tls.h" -static const char* TAG = "MeteoFrance"; +static const char *TAG = "MeteoFrance"; /* Constants that aren't configurable in menuconfig Typically only LOCATION_ID may need to be changed */ #define WEB_SERVER "webservice.meteofrance.com" //"192.168.0.10" //"www.example.com"// //"webservice.meteofrance.com" -#define WEB_PORT 80//5403 //80 +#define WEB_PORT 80 // 5403 //80 #define WEB_URL "/forecast" #define TOKEN "__Wj7dVSTjV9YGu1guveLyDq0g7S7TfTjaHBTPTpO0kj8__" // Location ID to get the weather data for -//#define LOCATION_ID "756135" +// #define LOCATION_ID "756135" #define LATITUDE "49.22017054145735" #define LONGITUDE "3.92188756221628" -#define WEB_QUERY "token="TOKEN"&lat="LATITUDE"&lon="LONGITUDE +#define WEB_QUERY "token=" TOKEN "&lat=" LATITUDE "&lon=" LONGITUDE #define MAX_HTTP_OUTPUT_BUFFER 32000 static weather_data weather; -static struct meteoforecast_data datas[5]; +static struct meteodailyforecast_data dailydatas[5]; +static struct meteoforecast_data forecastdatas[5]; inline int MIN(int a, int b) { return a > b ? b : a; } -void printftemp(struct forecast_temp *tmp){ +void printdftemp(struct dailyforecast_prev *tmp) +{ printf(" Temps Min:%f, Max:%f", tmp->min, tmp->max); } +void printftemp(struct forecast_prev *tmp) +{ + printf(" Temps Value:%f", tmp->value); +} #define MAX_SIZE 80 -void printffd(struct meteoforecast_data *tmp){ - struct tm timeinfo = { 0 }; +void printfdf(struct meteodailyforecast_data *tmp) +{ + char buffer[MAX_SIZE]; + time_t timeToTransform = tmp->datetime; + dtToString(timeToTransform,buffer); + //ESP_LOGE(TAG, "%s", strftime_buf); + printf("IsValid:%s date:%s, Min:%.1f Max:%.1f Desc:%s Icon: %s\n", tmp->isValid ? "true" : "false", buffer, tmp->previsions.min, tmp->previsions.max, tmp->previsions.desc, tmp->previsions.icon); +} + +void dtToString(time_t ttt, char* buffer){ + struct tm timeinfo = {0}; + localtime_r(&ttt, &timeinfo); + strftime(buffer, MAX_SIZE, "%d/%m", &timeinfo); + //char strftime_buf[64]; + //sprintf(strftime_buf, "%d %d %d", timeinfo.tm_wday, timeinfo.tm_mday, timeinfo.tm_mon + 1); +} + +void dtHToString(time_t ttt, char* buffer){ + struct tm timeinfo = {0}; + localtime_r(&ttt, &timeinfo); + strftime(buffer, MAX_SIZE, "%H:%M", &timeinfo); + //char strftime_buf[64]; + //sprintf(strftime_buf, "%d %d %d", timeinfo.tm_wday, timeinfo.tm_mday, timeinfo.tm_mon + 1); +} + +void printff(struct meteoforecast_data *tmp) +{ + struct tm timeinfo = {0}; localtime_r(&tmp->datetime, &timeinfo); - char buffer[ MAX_SIZE ]; + char buffer[MAX_SIZE]; strftime(buffer, MAX_SIZE, "%c", &timeinfo); char strftime_buf[64]; - sprintf(strftime_buf,"%d %d %d", timeinfo.tm_wday, timeinfo.tm_mday, timeinfo.tm_mon+1); - ESP_LOGE(TAG,"%s",strftime_buf); - printf("IsValid:%s date:%s, Min:%.1f Max:%.1f Desc:%s\n", tmp->isValid ?"true":"false", buffer, tmp->previsions.min, tmp->previsions.max, tmp->previsions.desc); + sprintf(strftime_buf, "%d %d %d", timeinfo.tm_wday, timeinfo.tm_mday, timeinfo.tm_mon + 1); + ESP_LOGE(TAG, "%s", strftime_buf); + printf("IsValid:%s date:%s, Temp:%.1f Desc:%s\n", tmp->isValid ? "true" : "false", buffer, tmp->previsions.value, tmp->previsions.desc); } esp_err_t _http_event_handler(esp_http_client_event_t *evt) { - static char *output_buffer; // Buffer to store response of http request from event handler - static int output_len; // Stores number of bytes read - switch(evt->event_id) { - case HTTP_EVENT_ERROR: - ESP_LOGD(TAG, "HTTP_EVENT_ERROR"); - break; - case HTTP_EVENT_ON_CONNECTED: - ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED"); - break; - case HTTP_EVENT_HEADER_SENT: - ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT"); - break; - case HTTP_EVENT_ON_HEADER: - ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value); - break; - case HTTP_EVENT_ON_DATA: - ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); - // Clean the buffer in case of a new request - if (output_len == 0 && evt->user_data) { - // we are just starting to copy the output data into the use - memset(evt->user_data, 0, MAX_HTTP_OUTPUT_BUFFER); + static char *output_buffer; // Buffer to store response of http request from event handler + static int output_len; // Stores number of bytes read + switch (evt->event_id) + { + case HTTP_EVENT_ERROR: + ESP_LOGD(TAG, "HTTP_EVENT_ERROR"); + break; + case HTTP_EVENT_ON_CONNECTED: + ESP_LOGD(TAG, "HTTP_EVENT_ON_CONNECTED"); + break; + case HTTP_EVENT_HEADER_SENT: + ESP_LOGD(TAG, "HTTP_EVENT_HEADER_SENT"); + break; + case HTTP_EVENT_ON_HEADER: + ESP_LOGD(TAG, "HTTP_EVENT_ON_HEADER, key=%s, value=%s", evt->header_key, evt->header_value); + break; + case HTTP_EVENT_ON_DATA: + ESP_LOGD(TAG, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len); + // Clean the buffer in case of a new request + if (output_len == 0 && evt->user_data) + { + // we are just starting to copy the output data into the use + memset(evt->user_data, 0, MAX_HTTP_OUTPUT_BUFFER); + } + /* + * Check for chunked encoding is added as the URL for chunked encoding used in this example returns binary data. + * However, event handler can also be used in case chunked encoding is used. + */ + if (!esp_http_client_is_chunked_response(evt->client)) + { + // If user_data buffer is configured, copy the response into the buffer + int copy_len = 0; + if (evt->user_data) + { + // The last byte in evt->user_data is kept for the NULL character in case of out-of-bound access. + copy_len = MIN(evt->data_len, (MAX_HTTP_OUTPUT_BUFFER - output_len)); + if (copy_len) + { + memcpy(evt->user_data + output_len, evt->data, copy_len); + } } - /* - * Check for chunked encoding is added as the URL for chunked encoding used in this example returns binary data. - * However, event handler can also be used in case chunked encoding is used. - */ - if (!esp_http_client_is_chunked_response(evt->client)) { - // If user_data buffer is configured, copy the response into the buffer - int copy_len = 0; - if (evt->user_data) { - // The last byte in evt->user_data is kept for the NULL character in case of out-of-bound access. - copy_len = MIN(evt->data_len, (MAX_HTTP_OUTPUT_BUFFER - output_len)); - if (copy_len) { - memcpy(evt->user_data + output_len, evt->data, copy_len); - } - } else { - int content_len = esp_http_client_get_content_length(evt->client); - if (output_buffer == NULL) { - // We initialize output_buffer with 0 because it is used by strlen() and similar functions therefore should be null terminated. - output_buffer = (char *) calloc(content_len + 1, sizeof(char)); - output_len = 0; - if (output_buffer == NULL) { - ESP_LOGE(TAG, "Failed to allocate memory for output buffer"); - return ESP_FAIL; - } - } - copy_len = MIN(evt->data_len, (content_len - output_len)); - if (copy_len) { - memcpy(output_buffer + output_len, evt->data, copy_len); + else + { + int content_len = esp_http_client_get_content_length(evt->client); + if (output_buffer == NULL) + { + // We initialize output_buffer with 0 because it is used by strlen() and similar functions therefore should be null terminated. + output_buffer = (char *)calloc(content_len + 1, sizeof(char)); + output_len = 0; + if (output_buffer == NULL) + { + ESP_LOGE(TAG, "Failed to allocate memory for output buffer"); + return ESP_FAIL; } } - output_len += copy_len; + copy_len = MIN(evt->data_len, (content_len - output_len)); + if (copy_len) + { + memcpy(output_buffer + output_len, evt->data, copy_len); + } } + output_len += copy_len; + } - break; - case HTTP_EVENT_ON_FINISH: - ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH"); - if (output_buffer != NULL) { - // Response is accumulated in output_buffer. Uncomment the below line to print the accumulated response - // ESP_LOG_BUFFER_HEX(TAG, output_buffer, output_len); - free(output_buffer); - output_buffer = NULL; - } - output_len = 0; - break; - case HTTP_EVENT_DISCONNECTED: - ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED"); - int mbedtls_err = 0; - esp_err_t err = esp_tls_get_and_clear_last_error((esp_tls_error_handle_t)evt->data, &mbedtls_err, NULL); - if (err != 0) { - ESP_LOGI(TAG, "Last esp error code: 0x%x", err); - ESP_LOGI(TAG, "Last mbedtls failure: 0x%x", mbedtls_err); - } - if (output_buffer != NULL) { - free(output_buffer); - output_buffer = NULL; - } - output_len = 0; - break; - case HTTP_EVENT_REDIRECT: - ESP_LOGD(TAG, "HTTP_EVENT_REDIRECT"); - esp_http_client_set_header(evt->client, "From", "user@example.com"); - esp_http_client_set_header(evt->client, "Accept", "text/html"); - esp_http_client_set_redirection(evt->client); - break; + break; + case HTTP_EVENT_ON_FINISH: + ESP_LOGD(TAG, "HTTP_EVENT_ON_FINISH"); + if (output_buffer != NULL) + { + // Response is accumulated in output_buffer. Uncomment the below line to print the accumulated response + // ESP_LOG_BUFFER_HEX(TAG, output_buffer, output_len); + free(output_buffer); + output_buffer = NULL; + } + output_len = 0; + break; + case HTTP_EVENT_DISCONNECTED: + ESP_LOGI(TAG, "HTTP_EVENT_DISCONNECTED"); + int mbedtls_err = 0; + esp_err_t err = esp_tls_get_and_clear_last_error((esp_tls_error_handle_t)evt->data, &mbedtls_err, NULL); + if (err != 0) + { + ESP_LOGI(TAG, "Last esp error code: 0x%x", err); + ESP_LOGI(TAG, "Last mbedtls failure: 0x%x", mbedtls_err); + } + if (output_buffer != NULL) + { + free(output_buffer); + output_buffer = NULL; + } + output_len = 0; + break; + case HTTP_EVENT_REDIRECT: + ESP_LOGD(TAG, "HTTP_EVENT_REDIRECT"); + esp_http_client_set_header(evt->client, "From", "user@example.com"); + esp_http_client_set_header(evt->client, "Accept", "text/html"); + esp_http_client_set_redirection(evt->client); + break; } return ESP_OK; } -char *JSON_Types(int type) { - if (type == cJSON_Invalid) return ("cJSON_Invalid"); - if (type == cJSON_False) return ("cJSON_False"); - if (type == cJSON_True) return ("cJSON_True"); - if (type == cJSON_NULL) return ("cJSON_NULL"); - if (type == cJSON_Number) return ("cJSON_Number"); - if (type == cJSON_String) return ("cJSON_String"); - if (type == cJSON_Array) return ("cJSON_Array"); - if (type == cJSON_Object) return ("cJSON_Object"); - if (type == cJSON_Raw) return ("cJSON_Raw"); - return NULL; +char *JSON_Types(int type) +{ + if (type == cJSON_Invalid) + return ("cJSON_Invalid"); + if (type == cJSON_False) + return ("cJSON_False"); + if (type == cJSON_True) + return ("cJSON_True"); + if (type == cJSON_NULL) + return ("cJSON_NULL"); + if (type == cJSON_Number) + return ("cJSON_Number"); + if (type == cJSON_String) + return ("cJSON_String"); + if (type == cJSON_Array) + return ("cJSON_Array"); + if (type == cJSON_Object) + return ("cJSON_Object"); + if (type == cJSON_Raw) + return ("cJSON_Raw"); + return NULL; } -void JSON_Parse(const cJSON * const root) { - //ESP_LOGI(TAG, "root->type=%s", JSON_Types(root->type)); - cJSON *current_element = NULL; - //ESP_LOGI(TAG, "roo->child=%p", root->child); - //ESP_LOGI(TAG, "roo->next =%p", root->next); - int i=0; - cJSON *df = cJSON_GetObjectItem(root,"daily_forecast"); - if(!cJSON_IsArray(df)){ - ESP_LOGE(TAG,"Pas de tableau ^^"); - }else{ - cJSON_ArrayForEach(current_element, df) { - struct meteoforecast_data datasT; - //ESP_LOGI(TAG, "type=%s", JSON_Types(current_element->type)); - cJSON *dt = cJSON_GetObjectItem(current_element,"dt"); - if(cJSON_IsNumber(dt)){ - datasT.datetime=dt->valueint; - cJSON *temps = cJSON_GetObjectItem(current_element,"T"); - datasT.previsions.min=cJSON_GetObjectItem(temps,"min")->valuedouble; - datasT.previsions.max=cJSON_GetObjectItem(temps,"max")->valuedouble; - - cJSON *weather12=cJSON_GetObjectItem(current_element,"weather12H"); - strncpy(datasT.previsions.desc,cJSON_GetObjectItem(weather12,"desc")->valuestring,24); - strncpy(datasT.previsions.icon,cJSON_GetObjectItem(weather12,"icon")->valuestring,8); - datasT.isValid=true; - //ESP_LOGE(TAG,"Donnees lues"); - //printffd(&datasT); - datas[i++]=datasT; - if(i==3){break;} +void JSON_Parse(const cJSON *const root) +{ + // ESP_LOGI(TAG, "root->type=%s", JSON_Types(root->type)); + cJSON *current_element = NULL; + // ESP_LOGI(TAG, "roo->child=%p", root->child); + // ESP_LOGI(TAG, "roo->next =%p", root->next); + int i = 0; + + // Récupération previsions journalieres (15j par défaut mais on en récupere 3) + cJSON *df = cJSON_GetObjectItem(root, "daily_forecast"); + if (!cJSON_IsArray(df)) + { + ESP_LOGE(TAG, "Pas de tableau ^^"); + } + else + { + cJSON_ArrayForEach(current_element, df) + { + struct meteodailyforecast_data datasT; + // ESP_LOGI(TAG, "type=%s", JSON_Types(current_element->type)); + cJSON *dt = cJSON_GetObjectItem(current_element, "dt"); + if (cJSON_IsNumber(dt)) + { + datasT.datetime = dt->valueint; + cJSON *temps = cJSON_GetObjectItem(current_element, "T"); + datasT.previsions.min = cJSON_GetObjectItem(temps, "min")->valuedouble; + datasT.previsions.max = cJSON_GetObjectItem(temps, "max")->valuedouble; + + cJSON *weather12 = cJSON_GetObjectItem(current_element, "weather12H"); + strncpy(datasT.previsions.desc, cJSON_GetObjectItem(weather12, "desc")->valuestring, 24); + strncpy(datasT.previsions.icon, cJSON_GetObjectItem(weather12, "icon")->valuestring, 8); + datasT.isValid = true; + // ESP_LOGE(TAG,"Donnees lues"); + // printffd(&datasT); + dailydatas[i++] = datasT; + if (i == 3) + { + break; + } + } } } - } + // Récupération previsions du jour ("matin/midi/am/soir") + cJSON *fore = cJSON_GetObjectItem(root, "forecast"); + if(!cJSON_IsArray(fore)){ + ESP_LOGE(TAG, "Pas de tableau forecast"); + }else{ + i=0; + //On garde les données de 10h 14h 18h + cJSON_ArrayForEach(current_element, fore){ + struct meteoforecast_data datasT; + cJSON *dt = cJSON_GetObjectItem(current_element, "dt"); + if (cJSON_IsNumber(dt)) + { + datasT.datetime = dt->valueint; + struct tm timeinfo = {0}; + localtime_r(&(datasT.datetime), &timeinfo); + if(timeinfo.tm_hour==10 || timeinfo.tm_hour==14 || timeinfo.tm_hour==18){ + cJSON *temps = cJSON_GetObjectItem(current_element, "T"); + datasT.previsions.value = cJSON_GetObjectItem(temps, "value")->valuedouble; + cJSON *weather = cJSON_GetObjectItem(current_element, "weather"); + strncpy(datasT.previsions.desc, cJSON_GetObjectItem(weather, "desc")->valuestring, 24); + strncpy(datasT.previsions.icon, cJSON_GetObjectItem(weather, "icon")->valuestring, 8); + datasT.isValid = true; + // ESP_LOGE(TAG,"Donnees lues"); + // printffd(&datasT); + forecastdatas[i++] = datasT; + printff(&datasT); + if (i == 3) + { + break; + } + }else{ + //ESP_LOGE(TAG,"heure = %i on ne garde pas...", timeinfo.tm_hour); + //char buffer[MAX_SIZE]; + //strftime(buffer, MAX_SIZE, "%c", &timeinfo); + //printf("date:%s %lli", buffer, datasT.datetime); + } + + }else{ + ESP_LOGI(TAG,"dt n'est pas au format attendu ^^"); + } + } + ESP_LOGI(TAG, "Prévisions lues !"); + + } } -static bool process_response_body(const char * body) +static bool process_response_body(const char *body) { - cJSON *root = cJSON_Parse(body); - JSON_Parse(root); - cJSON_Delete(root); - return true; + cJSON *root = cJSON_Parse(body); + JSON_Parse(root); + cJSON_Delete(root); + return true; } - static void http_request_task(void *pvParameter) { - while(1) { - ESP_LOGE(TAG,"Début recup méteo --------------------------"); - weather.data_retreived_cb_start(NULL); - char *local_response_buffer = heap_caps_malloc((MAX_HTTP_OUTPUT_BUFFER + 1)*(sizeof(char)),MALLOC_CAP_SPIRAM); - //char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER + 1] = {0}; - /** - * NOTE: All the configuration parameters for http_client must be spefied either in URL or as host and path parameters. - * If host and path parameters are not set, query parameter will be ignored. In such cases, - * query parameter should be specified in URL. - * - * If URL as well as host and path parameters are specified, values of host and path will be considered. - */ - esp_http_client_config_t config = { - .host = WEB_SERVER, - .port = WEB_PORT, - .path = WEB_URL, - .query = WEB_QUERY, - .event_handler = _http_event_handler, - .user_data = local_response_buffer, // Pass address of local buffer to get response - .disable_auto_redirect = true, - }; - esp_http_client_handle_t client = esp_http_client_init(&config); - char url[50]; - esp_http_client_get_url(client,url,50); - ESP_LOGE(TAG,"%s",url); + while (1) + { + ESP_LOGE(TAG, "Début recup méteo --------------------------"); + weather.data_retreived_cb_start(NULL); + char *local_response_buffer = heap_caps_malloc((MAX_HTTP_OUTPUT_BUFFER + 1) * (sizeof(char)), MALLOC_CAP_SPIRAM); + // char local_response_buffer[MAX_HTTP_OUTPUT_BUFFER + 1] = {0}; + /** + * NOTE: All the configuration parameters for http_client must be spefied either in URL or as host and path parameters. + * If host and path parameters are not set, query parameter will be ignored. In such cases, + * query parameter should be specified in URL. + * + * If URL as well as host and path parameters are specified, values of host and path will be considered. + */ + esp_http_client_config_t config = { + .host = WEB_SERVER, + .port = WEB_PORT, + .path = WEB_URL, + .query = WEB_QUERY, + .event_handler = _http_event_handler, + .user_data = local_response_buffer, // Pass address of local buffer to get response + .disable_auto_redirect = true, + }; + esp_http_client_handle_t client = esp_http_client_init(&config); + char url[50]; + esp_http_client_get_url(client, url, 50); + ESP_LOGE(TAG, "%s", url); - // GET - esp_err_t err = esp_http_client_perform(client); - if (err == ESP_OK) { - ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %"PRId64, - esp_http_client_get_status_code(client), - esp_http_client_get_content_length(client)); - } else { - ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err)); - } - //ESP_LOGE(TAG, "%s",local_response_buffer); + // GET + esp_err_t err = esp_http_client_perform(client); + if (err == ESP_OK) + { + ESP_LOGI(TAG, "HTTP GET Status = %d, content_length = %" PRId64, + esp_http_client_get_status_code(client), + esp_http_client_get_content_length(client)); + } + else + { + ESP_LOGE(TAG, "HTTP GET request failed: %s", esp_err_to_name(err)); + } + // ESP_LOGE(TAG, "%s",local_response_buffer); - process_response_body(local_response_buffer); - weather.data_retreived_cb(datas); - esp_http_client_cleanup(client); + process_response_body(local_response_buffer); + weather.data_retreived_cb(dailydatas, forecastdatas); + heap_caps_free(local_response_buffer); + esp_http_client_cleanup(client); - //http_client_request(&http_client, WEB_SERVER, get_request); + // http_client_request(&http_client, WEB_SERVER, get_request); vTaskDelay(weather.retreival_period / portTICK_PERIOD_MS); } } @@ -268,8 +382,12 @@ void initialise_weather_data_retrieval(unsigned long retreival_period) { weather.retreival_period = retreival_period; - //http_client_on_process_chunk(&http_client, process_chunk); - //http_client_on_disconnected(&http_client, disconnected); - xTaskCreate(&http_request_task, "http_request_task", 10 * 2048, NULL, 5, NULL); + // http_client_on_process_chunk(&http_client, process_chunk); + // http_client_on_disconnected(&http_client, disconnected); + TaskHandle_t xHandle = NULL; + BaseType_t ret1 = xTaskCreate(&http_request_task, "http_request_task", 8 * 1024, NULL, 5, &xHandle); + if(ret1!=pdPASS ){ + ESP_LOGE(TAG, "Impossible de creer la tache %i", ret1); + } ESP_LOGI(TAG, "HTTP request task started"); } diff --git a/dependencies.lock b/dependencies.lock index a1836bf..6cd8fb1 100644 --- a/dependencies.lock +++ b/dependencies.lock @@ -1,29 +1,59 @@ dependencies: espressif/esp_lcd_touch: component_hash: 779b4ba2464a3ae85681e4b860caa5fdc35801458c23f3039ee761bae7f442a4 + dependencies: + - name: idf + require: private + version: '>=4.4.2' source: + registry_url: https://components.espressif.com/ type: service version: 1.1.2 espressif/esp_lcd_touch_gt911: - component_hash: 664c544533b91497f29b41e045bb4374a0d4d002f9d8c67c7c1bf43fb4179e3f + component_hash: f90c3f82f052d1ccdfd71895a062f396ccc1c90ec69d8a99c483180387230bac + dependencies: + - name: espressif/esp_lcd_touch + registry_url: https://components.espressif.com/ + require: public + version: ^1.1.0 + - name: idf + require: private + version: '>=4.4.2' source: + registry_url: https://components.espressif.com/ type: service - version: 1.1.1 + version: 1.1.1~1 espressif/esp_lvgl_port: - component_hash: 531c0525b5a5d6c05c45a147baa0626209aea6b6c0e01a7af7e6bf151878d056 + component_hash: 8bcec6b1144750343ce7e411a7a1057a75a6348d3edc137bd5792ccba7f6c270 + dependencies: + - name: idf + registry_url: https://components.espressif.com + require: private + version: '>=4.4' + - name: lvgl/lvgl + registry_url: https://components.espressif.com + require: public + version: '>=8,<10' source: + registry_url: https://components.espressif.com/ type: service - version: 2.2.2 + version: 2.3.2 idf: - component_hash: null source: type: idf - version: 5.1.4 + version: 5.3.1 lvgl/lvgl: - component_hash: 2a8f619b5c2b1c7ad116c33d43dae8989c76739068f406a7e8ba9221e1085f17 + component_hash: 2409fdc84e9766d2a18afd84b051aef3f838348136cdb1c10ac2e8bcdb012bf6 + dependencies: [] source: + registry_url: https://components.espressif.com/ type: service - version: 9.1.0 -manifest_hash: 00b1178407be665595f229a4c10495a43316f71ef19242ff89f82944e383f982 + version: 9.2.0 +direct_dependencies: +- espressif/esp_lcd_touch_gt911 +- espressif/esp_lvgl_port +- idf +- lvgl/lvgl +manifest_hash: b5600105e7af98260d4afd2580596fd962c4f216e9d70b5059131b98ee207d7d target: esp32s3 -version: 1.0.0 +version: 2.0.0 diff --git a/gdbinit b/gdbinit new file mode 100644 index 0000000..12b61f3 --- /dev/null +++ b/gdbinit @@ -0,0 +1,6 @@ +target remote :3333 +set remote hardware-watchpoint-limit 2 +mon reset halt +maintenance flush register-cache +thb app_main +c \ No newline at end of file diff --git a/heaptrace-gdbinit b/heaptrace-gdbinit new file mode 100644 index 0000000..98ce486 --- /dev/null +++ b/heaptrace-gdbinit @@ -0,0 +1,18 @@ +set pagination off +target remote :3333 + +mon reset halt +flushregs + +tb heap_trace_start +commands +mon esp sysview start file://c:/marc/Projects/IDF/rgb_lcd/trace/htrace_1729789901521.svdat +c +end + +tb heap_trace_stop +commands +mon esp sysview stop +end + +c \ No newline at end of file diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 02bdb1c..53f3361 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,75 +1,76 @@ idf_component_register(SRC_DIRS . fonts INCLUDE_DIRS "." - REQUIRES esp_wifi nvs_flash mqtt meteofrance esp_netif) -lvgl_port_create_c_image("images/esp_logo.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p10j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p10n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p11j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p11n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p12j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p12bisj.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p12n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p13j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p13n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p14bisj.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p14j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p14n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p15j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p15n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p16bisj.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p16j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p16n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p17j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p17n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p18j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p18n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p19j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p19n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p1j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p1n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p20j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p20n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p21j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p21n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p22j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p22n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p23j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p23n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p24j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p24n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p25j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p25n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p26j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p26n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p27j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p27n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p28j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p28n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p29j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p29n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p2j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p2n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p30j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p30n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p31j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p31n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p32j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p32n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p3j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p3n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p4j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p4n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p5bisj.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p5j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p5n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p6j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p6n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p7j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p7n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p8j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p8n.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p9j.png" "images/" "ARGB8888" "NONE") -lvgl_port_create_c_image("images/p9n.png" "images/" "ARGB8888" "NONE") + REQUIRES heap esp_wifi nvs_flash mqtt meteofrance esp_netif image_downloader) +lvgl_port_create_c_image("images/p13bisj.png" "images/" "ARGB8888" "NONE") +#lvgl_port_create_c_image("images/esp_logo.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p10j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p10n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p11j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p11n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p12j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p12bisj.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p12n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p13j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p13n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p14bisj.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p14j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p14n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p15j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p15n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p16bisj.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p16j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p16n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p17j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p17n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p18j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p18n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p19j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p19n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p1j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p1n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p20j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p20n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p21j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p21n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p22j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p22n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p23j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p23n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p24j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p24n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p25j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p25n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p26j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p26n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p27j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p27n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p28j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p28n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p29j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p29n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p2j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p2n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p30j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p30n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p31j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p31n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p32j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p32n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p3j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p3n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p4j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p4n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p5bisj.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p5j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p5n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p6j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p6n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p7j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p7n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p8j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p8n.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p9j.png" "images/" "ARGB8888" "NONE") +# lvgl_port_create_c_image("images/p9n.png" "images/" "ARGB8888" "NONE") lvgl_port_add_images(${COMPONENT_LIB} "images/") diff --git a/main/fatfs.c b/main/fatfs.c new file mode 100644 index 0000000..c6d0858 --- /dev/null +++ b/main/fatfs.c @@ -0,0 +1,18 @@ +/** + * @file lv_fs_fatfs.c + * + */ + +/********************* + * INCLUDES + *********************/ +#include "ff.h" + +/********************* + * DEFINES + *********************/ + +/********************** + * TYPEDEFS + **********************/ + diff --git a/main/fatfs.h b/main/fatfs.h new file mode 100644 index 0000000..12e025f --- /dev/null +++ b/main/fatfs.h @@ -0,0 +1,2 @@ +void my_fatfs_init(void); +#pragma once diff --git a/main/idf_component.yml b/main/idf_component.yml index f95c326..9b7ef01 100644 --- a/main/idf_component.yml +++ b/main/idf_component.yml @@ -2,6 +2,8 @@ dependencies: esp_lcd_touch_gt911: version: ^1 esp_lvgl_port: - version: '*' + version: 2.3.2 idf: - version: '>=5.0' \ No newline at end of file + version: '>=5.0' + lvgl/lvgl: + version: 9.2.0 \ No newline at end of file diff --git a/main/images/p13bisj.png b/main/images/p13bisj.png new file mode 100644 index 0000000..c5adf8c Binary files /dev/null and b/main/images/p13bisj.png differ diff --git a/main/include/fmeteod.h b/main/include/fmeteod.h new file mode 100644 index 0000000..acc7586 --- /dev/null +++ b/main/include/fmeteod.h @@ -0,0 +1,83 @@ +static void weatherdata_obs_cb(lv_observer_t *observer, lv_subject_t *subject) +{ + // Retrieve weatherdata + struct meteodailyforecast_data *data = subject->value.pointer; + //printffd(data); + char buff[40] = {}; + // sprintf(buff,"%s %.1f %.1f", data->previsions.desc, data->previsions.min, data->previsions.max); + + lv_obj_t *parent = (lv_obj_t *)(observer->target); + lv_obj_t *datefld = lv_obj_get_child(parent, 0); + lv_obj_t *desc_icon = lv_obj_get_child(parent, 1); + lv_obj_t *temps = lv_obj_get_child(parent, 2); + if (strcmp(data->previsions.icon, "p1j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p1j); + }else if (strcmp(data->previsions.icon, "p2j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p2j); + }else if (strcmp(data->previsions.icon, "p3j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p3j); + }else if (strcmp(data->previsions.icon, "p5bisj") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p5bisj); + }else if (strcmp(data->previsions.icon, "p12j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12j); + }else if (strcmp(data->previsions.icon, "p12bisj") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12bisj); + }else if (strcmp(data->previsions.icon, "p14j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p14j); + }else if (strcmp(data->previsions.icon, "p24j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p24j); + }else if (strcmp(data->previsions.icon, "p25j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p25j); + }else if (strcmp(data->previsions.icon, "p26j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p26j); + }else if (strcmp(data->previsions.icon, "p27j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p27j); + }else if (strcmp(data->previsions.icon, "p28j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p28j); + }else if (strcmp(data->previsions.icon, "p29j") == 0) + { + lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p29j); + }else{ + ESP_LOGE(TAG, "Image %s non connue",data->previsions.icon); + } + + char buffer[80]; + dtToString(data->datetime,buffer); + + lv_label_set_text(datefld, buffer); + lv_label_set_text(lv_obj_get_child(desc_icon, 1), data->previsions.desc); + lv_label_set_text_fmt(lv_obj_get_child(temps, 0), "%.1f°C", data->previsions.max); + lv_label_set_text_fmt(lv_obj_get_child(temps, 1), "%.1f°C", data->previsions.min); +} + +struct weatherDay_fragment_t +{ + /* IMPORTANT: don't miss this part */ + lv_fragment_t base; + /* States, object references and data fields for this fragment */ + int dayNr; + bool showTitle; + const char *title; + float minTemp; + float maxTemp; +}; +static void weatherDay_fragment_ctor(lv_fragment_t *self, void * args) +{ + int dayNo = ((int *)args)[0]; + bool showDate = ((int*)args)[1]; + ((struct weatherDay_fragment_t *)self)->dayNr = dayNo; + ((struct weatherDay_fragment_t *)self)->showTitle = showDate; + ESP_LOGI(TAG, "Fragment initialisé avec le jour n°%d - Afficher la date %d",dayNo, showDate); +} diff --git a/main/main.c b/main/main.c index 7988c87..01a8922 100644 --- a/main/main.c +++ b/main/main.c @@ -1,3 +1,6 @@ +#include "wifi.h" +#include "mqtt.h" +#include "misc/lv_types.h" #include "freertos/FreeRTOS.h" #include "freertos/event_groups.h" #include "esp_err.h" @@ -8,18 +11,29 @@ #include "esp_lcd_panel_ops.h" #include "esp_lcd_panel_rgb.h" #include "esp_lvgl_port.h" -#include "lv_demos.h" -#include "esp_wifi.h" #include "esp_event.h" #include "nvs_flash.h" -#include "mqtt_client.h" #include "meteofrance.h" -#include "esp_netif_sntp.h" -#include "esp_sntp.h" +#include "image_downloader.h" #include +#include "fatfs.h" +#define DIR FF_DIR /* ESP IDF typedefs `DIR` as `FF_DIR` in its version of ff.h. Use `FF_DIR` in LVGL too */ +#include "esp_vfs_fat.h" +#include "sdmmc_cmd.h" +#include +#include "obtain_time.h" + +#define MOUNT_POINT "/sdcard" +// Pin assignments can be set in menuconfig, see "SD SPI Example Configuration" menu. +// You can also change the pin assignments here by changing the following 4 lines. +#define PIN_NUM_MISO 13 +#define PIN_NUM_MOSI 11 +#define PIN_NUM_CLK 12 +#define PIN_NUM_CS 10 #include "esp_lcd_touch_gt911.h" +#include "main.h" LV_FONT_DECLARE(montserrat_medium_12) LV_FONT_DECLARE(montserrat_medium_18) LV_FONT_DECLARE(montserrat_medium_24) @@ -87,8 +101,14 @@ char *months[12]={"Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Ao .flags.hsync_idle_low =true, \ } + + static const char *TAG = "domoTic"; +extern char *upEvent; +extern char *downEvent; + + // LVGL image declare LV_IMG_DECLARE(esp_logo) @@ -283,16 +303,13 @@ lv_subject_t wifiStatus; lv_subject_t mqttStatus; lv_subject_t meteoStatus; - static lv_style_t no_padding; +static lv_style_t no_padding; +static lv_style_t style_font_18; static void app_main_display(void) { - lv_subject_init_int(&wifiStatus,-1); - lv_subject_init_int(&mqttStatus,-1); - lv_subject_init_int(&meteoStatus,-1); - lv_style_init(&no_padding); lv_style_set_pad_all(&no_padding, 0); @@ -303,8 +320,22 @@ static void app_main_display(void) lv_obj_set_height(cont_status,LV_SIZE_CONTENT); lv_obj_set_width(cont_status,LV_SIZE_CONTENT); + lv_obj_t *jour = lv_label_create(cont_status); + lv_obj_add_style(jour,&style_font_18,0); + + setlocale(LC_ALL, "fr_FR"); + char strftime_buf[64]; + time_t now = 0; + time(&now); + struct tm timeinfo = { 0 }; + localtime_r(&now, &timeinfo); + sprintf(strftime_buf,"%s %d %s", days[timeinfo.tm_wday], timeinfo.tm_mday, months[timeinfo.tm_mon]); + + lv_label_set_text(jour,strftime_buf); + lv_obj_align(jour, LV_ALIGN_CENTER,0,0); + lv_obj_t *meteoR = lv_label_create(cont_status); - lv_label_set_text(meteoR,"Refresh"); + lv_label_set_text(meteoR,"--"); lv_label_bind_text(meteoR, &meteoStatus, "Meteo %d"); lv_obj_t *wifi = lv_label_create(cont_status); @@ -356,25 +387,22 @@ lv_subject_t tempIntSubj; lv_subject_t tempExtSubj; lv_subject_t hauteurCuveSubj; lv_subject_t hauteurCuveEvolSubj; -lv_subject_t tempD1Subj; -lv_subject_t tempD2Subj; -lv_subject_t tempD3Subj; -lv_subject_t *tmpSubj[3] = {&tempD1Subj, &tempD2Subj, &tempD3Subj}; +lv_subject_t forecastD1Subj; +lv_subject_t forecastD2Subj; +lv_subject_t forecastD3Subj; +lv_subject_t *tmpSubj[3] = {&forecastD1Subj, &forecastD2Subj, &forecastD3Subj}; +lv_subject_t forecastH1Subj; +lv_subject_t forecastH2Subj; +lv_subject_t forecastH3Subj; +lv_subject_t *tmpHSubj[3] = {&forecastH1Subj, &forecastH2Subj, &forecastH3Subj}; -char *upEvent = "monter"; -char *downEvent = "descendre"; -char *topicTempExt = "house/temp/282A802600008059"; -char *topicHauteurCuve = "house/cuve/hauteur"; -char *topicTempInt = "house/temp/287DCF1E00008020"; -char *topicHauteurCuveEvol = "house/cuve/hauteurEvol"; - -esp_mqtt_client_handle_t client; +extern esp_mqtt_client_handle_t client; static void event_handler(lv_event_t *e) { lv_event_code_t code = lv_event_get_code(e); - lv_obj_t *obj = (lv_obj_t *)lv_event_get_target(e); + //lv_obj_t *obj = (lv_obj_t *)lv_event_get_target(e); char *evtData = (char *)lv_event_get_user_data(e); switch (code) @@ -402,9 +430,12 @@ LV_IMAGE_DECLARE(plan_etage); LV_IMAGE_DECLARE(p1j); LV_IMAGE_DECLARE(p2j); LV_IMAGE_DECLARE(p3j); +LV_IMAGE_DECLARE(p4j); LV_IMAGE_DECLARE(p5bisj); LV_IMAGE_DECLARE(p12j); LV_IMAGE_DECLARE(p12bisj); +LV_IMAGE_DECLARE(p13j); +LV_IMAGE_DECLARE(p13bisj); LV_IMAGE_DECLARE(p14j); LV_IMAGE_DECLARE(p24j); LV_IMAGE_DECLARE(p25j); @@ -423,65 +454,137 @@ struct lv_observer_t { uint32_t for_obj : 1; /**< `target` is an `lv_obj_t *`*/ }; +static lv_style_t style_container; +static lv_style_t style_font_24; +static lv_style_t style_font_12; + +// Callback pour mettre à jour une météo journaliere +// On pointe sur un tableau de meteodailyforecast_data static void weatherdata_obs_cb(lv_observer_t *observer, lv_subject_t *subject) { + + ESP_LOGE(TAG, "CB meteo jour declenché"); // Retrieve weatherdata - struct meteoforecast_data *data = subject->value.pointer; + const struct meteodailyforecast_data *data = subject->value.pointer; //printffd(data); - char buff[40] = {}; + //char buff[40] = {}; // sprintf(buff,"%s %.1f %.1f", data->previsions.desc, data->previsions.min, data->previsions.max); lv_obj_t *parent = (lv_obj_t *)(observer->target); - lv_obj_t *desc_icon = lv_obj_get_child(parent, 0); - lv_obj_t *temps = lv_obj_get_child(parent, 1); - ESP_LOGE(TAG, "Affichagfe de l'image %s",data->previsions.icon); - if (strcmp(data->previsions.icon, "p1j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p1j); - }else if (strcmp(data->previsions.icon, "p2j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p2j); - }else if (strcmp(data->previsions.icon, "p3j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p3j); - }else if (strcmp(data->previsions.icon, "p5bisj") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p5bisj); - }else if (strcmp(data->previsions.icon, "p12j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12j); - }else if (strcmp(data->previsions.icon, "p12bisj") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p12bisj); - }else if (strcmp(data->previsions.icon, "p14j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p14j); - }else if (strcmp(data->previsions.icon, "p24j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p24j); - }else if (strcmp(data->previsions.icon, "p25j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p25j); - }else if (strcmp(data->previsions.icon, "p26j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p26j); - }else if (strcmp(data->previsions.icon, "p27j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p27j); - }else if (strcmp(data->previsions.icon, "p28j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p28j); - }else if (strcmp(data->previsions.icon, "p29j") == 0) - { - lv_image_set_src(lv_obj_get_child(desc_icon, 0), &p29j); - } + lv_obj_t *datefld = lv_obj_get_child(parent, 0); + lv_obj_t *desc_icon = lv_obj_get_child(parent, 1); + lv_obj_t *temps = lv_obj_get_child(parent, 2); + showMeteoIcon(data->previsions.icon, desc_icon,0); + char buffer[80]; + dtToString(data->datetime,buffer); + + lv_label_set_text(datefld, buffer); lv_label_set_text(lv_obj_get_child(desc_icon, 1), data->previsions.desc); lv_label_set_text_fmt(lv_obj_get_child(temps, 0), "%.1f°C", data->previsions.max); lv_label_set_text_fmt(lv_obj_get_child(temps, 1), "%.1f°C", data->previsions.min); } -static lv_style_t style_container; +// Callback pour mettre à jour une météo horaire +// On pointe sur un tableau de meteoforecast_data +static void weatherdataH_obs_cb(lv_observer_t *observer, lv_subject_t *subject) +{ + ESP_LOGE(TAG, "CB meteo horaire declenché"); + // Retrieve weatherdata + const struct meteoforecast_data *data = subject->value.pointer; + //printffd(data); + //char buff[40] = {}; + // sprintf(buff,"%s %.1f %.1f", data->previsions.desc, data->previsions.min, data->previsions.max); + lv_obj_t *parent = (lv_obj_t *)(observer->target); + lv_obj_t *datefld = lv_obj_get_child(parent, 0); + lv_obj_t *temp_desc_icon = lv_obj_get_child(parent, 1); + showMeteoIcon(data->previsions.icon, temp_desc_icon, 1); + + char buffer[80]; + dtHToString(data->datetime,buffer); + + lv_label_set_text(datefld, buffer); + lv_label_set_text(lv_obj_get_child(temp_desc_icon, 2), data->previsions.desc); + lv_label_set_text_fmt(lv_obj_get_child(temp_desc_icon, 0), "%.1f°C", data->previsions.value); +} + +void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr) +{ + lv_obj_t* img = lv_obj_get_child(desc_icon, childNr); + if (strcmp(icon, "p1j") == 0) + { + lv_image_set_src(img, &p1j); + } + else if (strcmp(icon, "p2j") == 0) + { + lv_image_set_src(img, &p2j); + } + else if (strcmp(icon, "p3j") == 0) + { + lv_image_set_src(img, &p3j); + } + else if (strcmp(icon, "p4j") == 0) + { + lv_image_set_src(img, &p4j); + } + else if (strcmp(icon, "p5bisj") == 0) + { + lv_image_set_src(img, &p5bisj); + } + else if (strcmp(icon, "p12j") == 0) + { + lv_image_set_src(img, &p12j); + } + else if (strcmp(icon, "p12bisj") == 0) + { + lv_image_set_src(img, &p12bisj); + } + else if (strcmp(icon, "p13j") == 0) + { + lv_image_set_src(img, &p13j); + } + else if (strcmp(icon, "p13bisj") == 0) + { + lv_image_set_src(img, &p13bisj); + } + else if (strcmp(icon, "p14j") == 0) + { + lv_image_set_src(img, &p14j); + } + else if (strcmp(icon, "p24j") == 0) + { + lv_image_set_src(img, &p24j); + } + else if (strcmp(icon, "p25j") == 0) + { + lv_image_set_src(img, &p25j); + } + else if (strcmp(icon, "p26j") == 0) + { + lv_image_set_src(img, &p26j); + } + else if (strcmp(icon, "p27j") == 0) + { + lv_image_set_src(img, &p27j); + } + else if (strcmp(icon, "p28j") == 0) + { + lv_image_set_src(img, &p28j); + } + else if (strcmp(icon, "p29j") == 0) + { + lv_image_set_src(img, &p29j); + } + else + { + ESP_LOGE(TAG, "Image %s non connue", icon); + } +} +/* ------------------------------------------------------------ */ +/* Fragment meteo journaliere (date,icone, min et max) */ +/* ------------------------------------------------------------ */ + +// Structure meteo journaliere struct weatherDay_fragment_t { /* IMPORTANT: don't miss this part */ @@ -493,23 +596,28 @@ struct weatherDay_fragment_t float minTemp; float maxTemp; }; + +//Constructeur meteo journaliere static void weatherDay_fragment_ctor(lv_fragment_t *self, void * args) { int dayNo = ((int *)args)[0]; - //bool showDate = ((int*)args)[1]; + bool showDate = ((int*)args)[1]; ((struct weatherDay_fragment_t *)self)->dayNr = dayNo; - //ESP_LOGI(TAG, "Fragment initialisé avec le jour n°%d - Afficher la date %d",dayNo, showDate); + ((struct weatherDay_fragment_t *)self)->showTitle = showDate; + ESP_LOGI(TAG, "Fragment initialisé avec le jour n°%d - Afficher la date %d",dayNo, showDate); } -static lv_style_t style_font_18; -static lv_style_t style_font_24; -static lv_style_t style_font_12; - - +// Ce fragment affiche une prévision journaliere (date,icone, min et max) static lv_obj_t *weatherDay_fragment_create_obj(lv_fragment_t *self, lv_obj_t *parent) { + lv_obj_t *sup = lv_obj_create(parent); + + lv_obj_t *title = lv_label_create(sup); + lv_label_set_text(title, "--"); + + lv_obj_set_flex_flow(sup, LV_FLEX_FLOW_ROW); lv_obj_add_style(sup, &style_container, 0); lv_obj_set_size(sup, LV_SIZE_CONTENT, LV_SIZE_CONTENT); @@ -565,10 +673,13 @@ static lv_obj_t *weatherDay_fragment_create_obj(lv_fragment_t *self, lv_obj_t *p lv_obj_set_style_text_color(min,lv_color_hex(0x3000FF),0); lv_obj_add_style(min, &style_font_18, 0); + // On positionne un observer sur le subjet correspondant au jour du widget lv_subject_add_observer_obj(tmpSubj[((struct weatherDay_fragment_t *)self)->dayNr], weatherdata_obs_cb, sup, NULL); return container; } -const lv_fragment_class_t sample_cls = { + +// Fragment meteo journaliere +const lv_fragment_class_t meteoFragment = { /* Initialize something needed */ .constructor_cb = weatherDay_fragment_ctor, /* Create view objects */ @@ -577,9 +688,148 @@ const lv_fragment_class_t sample_cls = { .instance_size = sizeof(struct weatherDay_fragment_t), }; -static void meteoforecast_fragment_ctor(lv_fragment_t * self, void * args); -static lv_obj_t * meteoforecast_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent); -static void sample_container_delete(lv_event_t * e); +/* ------------------------------------------------------------ */ +/* Fragment meteo horaire ("heure",icone, temp) */ +/* ------------------------------------------------------------ */ + +// Structure meteo horaire +struct weatherH_fragment_t +{ + /* IMPORTANT: don't miss this part */ + lv_fragment_t base; + /* States, object references and data fields for this fragment */ + int horaireNr; + bool showTitle; + const char *horaire; + float temp; +}; + +//Constructeur meteo horaire +static void weatherH_fragment_ctor(lv_fragment_t *self, void * args) +{ + // Represente le n° (index dans le tableau) a afficher + int horaireNr = ((int *)args)[0]; + bool showDate = ((int*)args)[1]; + ((struct weatherH_fragment_t *)self)->horaireNr = horaireNr; + ((struct weatherH_fragment_t *)self)->showTitle = showDate; + ESP_LOGI(TAG, "Fragment initialisé avec l'horaire %d",horaireNr); +} + +// Ce fragment affiche une prévision horaire (date,icone, temp moyenne) +static lv_obj_t *weatherH_fragment_create_obj(lv_fragment_t *self, lv_obj_t *parent) +{ + + + lv_obj_t *sup = lv_obj_create(parent); + + lv_obj_t *title = lv_label_create(sup); + lv_label_set_text(title, "--"); + + + lv_obj_set_flex_flow(sup, LV_FLEX_FLOW_ROW); + lv_obj_add_style(sup, &style_container, 0); + lv_obj_set_size(sup, LV_SIZE_CONTENT, LV_SIZE_CONTENT); + + + lv_obj_t *container = lv_obj_create(sup); + lv_obj_set_flex_flow(container, LV_FLEX_FLOW_COLUMN); + lv_obj_set_flex_align(container,LV_FLEX_ALIGN_CENTER,LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_add_style(container, &no_padding, 0); + lv_obj_set_width(container, 100); + lv_obj_set_height(container, LV_SIZE_CONTENT); + + static lv_style_t tempStyle; + lv_style_init(&tempStyle); + //lv_style_set_text_font(&tempStyle,¬omedium16); + + lv_obj_t *temp = lv_label_create(container); + lv_label_set_text(temp,"--"); + lv_obj_add_style(temp, &tempStyle,0); + lv_obj_add_style(temp, &style_font_18, 0); + //lv_obj_set_style_text_color(temp,lv_color_hex(0xFF0000),0); + lv_obj_add_style(temp, &style_font_18, 0); + + lv_obj_t *img1 = lv_image_create(container); + lv_obj_add_style(img1, &no_padding, 0); + lv_obj_set_style_bg_color(img1,lv_palette_lighten(LV_PALETTE_BLUE_GREY, 4),0); + lv_image_set_inner_align(img1, LV_IMAGE_ALIGN_TOP_LEFT); + lv_image_set_offset_y(img1, -8); + lv_image_set_offset_x(img1, -5); + lv_obj_set_size(img1,40,32); + lv_image_set_src(img1,LV_SYMBOL_DUMMY); + //lv_obj_set_style_border_width(img1,2,0); + //lv_obj_set_style_border_color(img1, lv_palette_main(LV_PALETTE_BLUE_GREY), 0); + lv_obj_align(img1, LV_ALIGN_CENTER, 0, 0); + + lv_obj_t *desc = lv_label_create(container); + lv_label_set_text(desc,"--"); + lv_obj_add_style(desc, &style_font_12, 0); + + // On positionne un observer sur le subjet correspondant a l'horaire du widget + ESP_LOGE(TAG, "on positionne obs sur horaire %d", ((struct weatherH_fragment_t *)self)->horaireNr); + lv_subject_add_observer_obj(tmpHSubj[((struct weatherH_fragment_t *)self)->horaireNr], weatherdataH_obs_cb, sup, NULL); + return container; +} + +// Fragment meteo horaire +const lv_fragment_class_t meteoHFragment = { + /* Initialize something needed */ + .constructor_cb = weatherH_fragment_ctor, + /* Create view objects */ + .create_obj_cb = weatherH_fragment_create_obj, + /* IMPORTANT: size of your fragment struct */ + .instance_size = sizeof(struct weatherH_fragment_t), +}; + +/* -------------------------------------------------------------- */ +/* Fragment 3 meteo "jour" (aujourd'hui, demain, apres demain) */ +/* -------------------------------------------------------------- */ +struct meteodailyforecast_fragment_t { + /* IMPORTANT: don't miss this part */ + lv_fragment_t base; + /* States, object references and data fields for this fragment */ + const char *title; + bool showDate; +}; + +static void meteodailyforecast_fragment_ctor(lv_fragment_t * self, void * args){ + struct meteodailyforecast_fragment_t *myself=((struct meteodailyforecast_fragment_t *) self); + myself->showDate = args; +} + +static lv_obj_t * meteodailyforecast_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent) +{ + + lv_fragment_manager_t *manager = lv_fragment_manager_create(NULL); + + int args[2]={0,((struct meteodailyforecast_fragment_t*)self)->showDate}; + lv_fragment_t *fragment = lv_fragment_create(&meteoFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + args[0]=1; + fragment = lv_fragment_create(&meteoFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + args[0]=2; + fragment = lv_fragment_create(&meteoFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + return parent; +} + + + +const lv_fragment_class_t meteodailyforecast_cls = { + /* Initialize something needed */ + .constructor_cb = meteodailyforecast_fragment_ctor, + /* Create view objects */ + .create_obj_cb = meteodailyforecast_fragment_create_obj, + /* IMPORTANT: size of your fragment struct */ + .instance_size = sizeof(struct meteodailyforecast_fragment_t), +}; +/* -------------------------------------------------------------------------------- */ +/* Fragment 3 meteo "horaire" - matin/midi/soir (icone, temp moyenne) */ +/* -------------------------------------------------------------------------------- */ struct meteoforecast_fragment_t { /* IMPORTANT: don't miss this part */ @@ -589,6 +839,32 @@ struct meteoforecast_fragment_t { bool showDate; }; +static void meteoforecast_fragment_ctor(lv_fragment_t * self, void * args){ + struct meteoforecast_fragment_t *myself=((struct meteoforecast_fragment_t *) self); + myself->showDate = args; +} + +static lv_obj_t * meteoforecast_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent) +{ + + lv_fragment_manager_t *manager = lv_fragment_manager_create(NULL); + + // On affiche 3 fragment meteo. 1 pour chaque "horaire" + int args[2]={0,((struct meteoforecast_fragment_t*)self)->showDate}; + lv_fragment_t *fragment = lv_fragment_create(&meteoHFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + args[0]=1; + fragment = lv_fragment_create(&meteoHFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + args[0]=2; + fragment = lv_fragment_create(&meteoHFragment, args); + lv_fragment_manager_add(manager, fragment, &parent); + + return parent; +} + const lv_fragment_class_t meteoforecast_cls = { /* Initialize something needed */ .constructor_cb = meteoforecast_fragment_ctor, @@ -598,15 +874,154 @@ const lv_fragment_class_t meteoforecast_cls = { .instance_size = sizeof(struct meteoforecast_fragment_t), }; +struct lv_event_t { + void * current_target; + void * original_target; + lv_event_code_t code; + void * user_data; + void * param; + lv_event_t * prev; + uint8_t deleted : 1; + uint8_t stop_processing : 1; + uint8_t stop_bubbling : 1; +}; + +lv_obj_t * tab1; +lv_obj_t * tab2b; +lv_obj_t * tab3; +lv_obj_t * tab4; + +static void tabChgEvt(lv_event_t * event) +{ + uint32_t tabNr = lv_tabview_get_tab_active(event->user_data); + printf("Tab change %lu\n", tabNr); + switch (tabNr) + { + case 1: + lv_obj_t * tab2=lv_obj_create(tab2b); + lv_obj_set_flex_flow(tab2, LV_FLEX_FLOW_COLUMN); + lv_obj_add_style(tab2,&no_padding,0); + + lv_obj_set_size(tab2, lv_pct(85),lv_pct(100)); + lv_obj_t * cont_rdc=lv_obj_create(tab2); + lv_obj_set_size(cont_rdc,lv_pct(100), lv_pct(100)); + lv_obj_add_style(cont_rdc,&no_padding,0); + lv_obj_add_style(tab2,&no_padding,0); + lv_point_t positions_rdc[]={ + {5,105}, + {55,45}, + {110,20}, + {155,25}, + {225,45}, + {275,115}, + {295,185}}; + lv_obj_t * img=lv_image_create(cont_rdc); + lv_img_set_src(img, &plan_rdc); + float coef=1.5; + for (size_t i = 1; i < 8; i++) + { + lv_obj_t * btnVolet = lv_checkbox_create(cont_rdc); + lv_obj_set_pos(btnVolet,positions_rdc[i-1].x*coef,positions_rdc[i-1].y*coef); + lv_obj_add_style(btnVolet,&style_font_24,0); + //lv_obj_set_size(btnVolet,100,24); + + //char *nom[10]; + //sprintf(nom,"%d", i); + lv_checkbox_set_text(btnVolet,""); + } + + + lv_obj_t * cont_btn_volets=lv_obj_create(tab2b); + lv_obj_add_style(cont_btn_volets,&no_padding,0); + lv_obj_set_size(cont_btn_volets,lv_pct(15), lv_pct(100)); + + lv_obj_set_layout(cont_btn_volets, LV_LAYOUT_GRID); + static int32_t column_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; /*2 columns */ + static int32_t row_dsc[] = {LV_GRID_FR(1),LV_GRID_FR(1),LV_GRID_FR(1),LV_GRID_FR(1),LV_GRID_FR(1),LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; + lv_obj_set_grid_dsc_array(cont_btn_volets, column_dsc, row_dsc); + + lv_obj_t * btnUp_bis = lv_button_create(cont_btn_volets); + lv_obj_t * lblButtonUp = lv_label_create(btnUp_bis); + lv_label_set_text(lblButtonUp,LV_SYMBOL_UP); + + lv_obj_t * btnDwn_bis = lv_button_create(cont_btn_volets); + lv_obj_t * lblButtonDwn = lv_label_create(btnDwn_bis); + lv_label_set_text(lblButtonDwn,LV_SYMBOL_DOWN); + + lv_obj_set_grid_cell(btnUp_bis, LV_GRID_ALIGN_STRETCH, 0, 1, + LV_GRID_ALIGN_STRETCH, 0, 1); + lv_obj_set_grid_cell(btnDwn_bis, LV_GRID_ALIGN_STRETCH, 0, 1, + LV_GRID_ALIGN_STRETCH, 1, 1); + + lv_obj_t * cont_etage=lv_obj_create(tab2); + lv_obj_set_size(cont_etage,lv_pct(100), lv_pct(100)); + lv_obj_add_style(cont_etage,&no_padding,0); + + img=lv_image_create(cont_etage); + lv_img_set_src(img, &plan_etage); + + lv_point_t positions_etage[]={ + {100,15}, + {250,15}, + {400,15}, + {480,300}, + {460,360}, + {320,415}}; + for (size_t i = 1; i < 7; i++) + { + lv_obj_t * btnVolet = lv_checkbox_create(cont_etage); + lv_obj_set_pos(btnVolet,positions_etage[i-1].x,positions_etage[i-1].y); + lv_obj_add_style(btnVolet,&style_font_24,0); + //lv_obj_set_size(btnVolet,100,24); + + //char *nom[10]; + //sprintf(nom,"%d", i); + lv_checkbox_set_text(btnVolet,""); + } + case 2: // Onglet Météo + lv_fragment_manager_t *manager2 = lv_fragment_manager_create(NULL); + lv_fragment_t *fragment2 = lv_fragment_create(&meteodailyforecast_cls, (void *)1); + lv_fragment_manager_add(manager2, fragment2, &tab3); + break; + + case 3: // Onglet températures + lv_obj_t * imgGraf = lv_image_create(tab4); + lv_image_set_src(imgGraf, "A:/sdcard/hello2.png"); + break; + + default: + break; + } + + +} + +/* ------------------------------------------------------------ */ +/* Dessin IHM */ +/* ------------------------------------------------------------ */ void draw_ihm() { lv_subject_init_string(&tempExtSubj, tempExtStr, NULL, 6, "--"); lv_subject_init_string(&tempIntSubj, tempIntStr, NULL, 6, "--"); lv_subject_init_string(&hauteurCuveSubj, hauteurCuveStr, NULL, 9, "--"); lv_subject_init_string(&hauteurCuveEvolSubj, hauteurCuveEvolStr, NULL, 9, "--"); - lv_subject_init_pointer(&tempD1Subj, "--"); - lv_subject_init_pointer(&tempD2Subj, "--"); - lv_subject_init_pointer(&tempD3Subj, "--"); + + struct meteodailyforecast_data d; + struct dailyforecast_prev p; + lv_strcpy(p.desc,""); + d.previsions = p; + lv_subject_init_pointer(&forecastD1Subj, &d); + lv_subject_init_pointer(&forecastD2Subj, &d); + lv_subject_init_pointer(&forecastD3Subj, &d); + + struct meteoforecast_data d1; + struct forecast_prev p1; + lv_strcpy(p1.desc,""); + + d1.previsions = p1; + lv_subject_init_pointer(&forecastH1Subj, &d1); + lv_subject_init_pointer(&forecastH2Subj, &d1); + lv_subject_init_pointer(&forecastH3Subj, &d1); // keys.clear(); lv_obj_clean(lv_scr_act()); @@ -619,6 +1034,7 @@ void draw_ihm() tabview = lv_tabview_create(lv_screen_active()); lv_tabview_set_tab_bar_position(tabview, LV_DIR_LEFT); lv_tabview_set_tab_bar_size(tabview, 80); + lv_obj_add_event_cb(tabview, tabChgEvt, LV_EVENT_VALUE_CHANGED, tabview); /* Assign an event callback */ lv_obj_set_style_bg_color(tabview, lv_palette_lighten(LV_PALETTE_RED, 2), 0); @@ -631,11 +1047,12 @@ void draw_ihm() lv_obj_set_style_border_side(tab_buttons, LV_BORDER_SIDE_RIGHT, LV_PART_ITEMS | LV_STATE_CHECKED); /*Add 3 tabs (the tabs are page (lv_page) and can be scrolled*/ - lv_obj_t * tab1 = lv_tabview_add_tab(tabview, LV_SYMBOL_HOME); - lv_obj_t * tab2b = lv_tabview_add_tab(tabview, "Volets"); - lv_obj_t * tab3 = lv_tabview_add_tab(tabview, "Météo"); - lv_obj_t * tab4 = lv_tabview_add_tab(tabview, "Cuve"); - lv_obj_t * tab5 = lv_tabview_add_tab(tabview, "Réglages"); + tab1 = lv_tabview_add_tab(tabview, LV_SYMBOL_HOME); + tab2b = lv_tabview_add_tab(tabview, "Volets"); + tab3 = lv_tabview_add_tab(tabview, "Météo"); + tab4 = lv_tabview_add_tab(tabview, "Températures"); + /*lv_obj_t * tab5 = */lv_tabview_add_tab(tabview, "Cuve"); + lv_obj_set_style_bg_color(tab2b, lv_palette_lighten(LV_PALETTE_AMBER, 3), 0); lv_obj_set_style_bg_opa(tab2b, LV_OPA_COVER, 0); @@ -681,20 +1098,6 @@ void draw_ihm() lv_obj_t *supmain = tab1; lv_obj_set_flex_flow(supmain, LV_FLEX_FLOW_COLUMN); - lv_obj_t *jour = lv_label_create(supmain); - lv_obj_add_style(jour,&style_font_18,0); - - setlocale(LC_ALL, "fr_FR"); - char strftime_buf[64]; - time_t now = 0; - time(&now); - struct tm timeinfo = { 0 }; - localtime_r(&now, &timeinfo); - sprintf(strftime_buf,"%s %d %s", days[timeinfo.tm_wday], timeinfo.tm_mday, months[timeinfo.tm_mon]); - - lv_label_set_text(jour,strftime_buf); - lv_obj_align(jour, LV_ALIGN_CENTER,0,0); - lv_obj_t *main = lv_obj_create(supmain); lv_obj_add_style(main,&no_padding,0); lv_obj_set_size(main,LV_SIZE_CONTENT,LV_SIZE_CONTENT); @@ -788,499 +1191,16 @@ void draw_ihm() lv_label_set_text(label, LV_SYMBOL_DOWN); lv_obj_center(label); - /*Create a chart*/ - /* - chart = lv_chart_create(tab1); - lv_obj_set_size(chart, 200, 200); - lv_chart_set_type(chart, LV_CHART_TYPE_LINE); //Show lines and points too - lv_chart_set_range(chart, LV_CHART_AXIS_PRIMARY_Y, 0, 130); - ser1 = lv_chart_add_series(chart, lv_palette_main(LV_PALETTE_GREEN), LV_CHART_AXIS_PRIMARY_Y);; - ser1->y_points[0] = lv_rand(0, 40); - ser1->y_points[1] = lv_rand(0, 40); - ser1->y_points[2] = lv_rand(0, 40); - lv_chart_refresh(chart); //Required after direct set - */ - /* - lv_obj_t *tempD1Cont = lv_obj_create(cont_col3); - lv_obj_add_style(tempD1Cont, &style_container, 0); - lv_obj_t *tempD1 = lv_label_create(tempD1Cont); - lv_obj_add_style(tempD1, &style_lbvValue, 0); - lv_label_bind_text(tempD1, &tempD1Subj, "%i"); - lv_subject_add_observer_obj(&tempD1Subj, weatherdata_obs_cb, tempD1, NULL); - lv_obj_t *tempD2Cont = lv_obj_create(cont_col3); - lv_obj_add_style(tempD2Cont, &style_container, 0); - lv_obj_t *tempD2 = lv_label_create(tempD2Cont); - lv_obj_add_style(tempD2, &style_lbvValue, 0); - lv_label_bind_text(tempD2, &tempD2Subj, "%i"); - lv_subject_add_observer_obj(&tempD2Subj, weatherdata_obs_cb, tempD2, NULL); - - lv_obj_t *tempD3Cont = lv_obj_create(cont_col3); - lv_obj_add_style(tempD3Cont, &style_container, 0); - lv_obj_t *tempD3 = lv_label_create(tempD3Cont); - lv_obj_add_style(tempD3, &style_lbvValue, 0); - lv_label_bind_text(tempD3, &tempD3Subj, "%i"); - lv_subject_add_observer_obj(&tempD3Subj, weatherdata_obs_cb, tempD3, NULL); - */ lv_fragment_manager_t *manager = lv_fragment_manager_create(NULL); lv_fragment_t *fragment = lv_fragment_create(&meteoforecast_cls, 0); lv_fragment_manager_add(manager, fragment, &cont_col3); - lv_obj_t * tab2=lv_obj_create(tab2b); - lv_obj_set_size(tab2, lv_pct(75),lv_pct(100)); lv_obj_set_flex_flow(tab2b, LV_FLEX_FLOW_ROW); - lv_obj_set_flex_flow(tab2, LV_FLEX_FLOW_COLUMN); - lv_obj_t * cont_rdc=lv_obj_create(tab2); - lv_obj_set_size(cont_rdc,lv_pct(100), lv_pct(100)); - lv_obj_add_style(cont_rdc,&no_padding,0); - lv_obj_add_style(tab2,&no_padding,0); - lv_point_t positions_rdc[]={ - {5,105}, - {55,45}, - {110,20}, - {155,25}, - {225,45}, - {275,115}, - {295,185}}; - lv_obj_t * img=lv_image_create(cont_rdc); - lv_img_set_src(img, &plan_rdc); - float coef=1.5; - for (size_t i = 1; i < 8; i++) - { - lv_obj_t * btnVolet = lv_checkbox_create(cont_rdc); - ESP_LOGI(TAG,"Recup pos %d", i-1); - lv_obj_set_pos(btnVolet,positions_rdc[i-1].x*coef,positions_rdc[i-1].y*coef); - lv_obj_add_style(btnVolet,&style_font_24,0); - //lv_obj_set_size(btnVolet,100,24); - - //char *nom[10]; - //sprintf(nom,"%d", i); - lv_checkbox_set_text(btnVolet,""); - } - - - lv_obj_t * cont_btn_volets=lv_obj_create(tab2b); - lv_obj_set_size(cont_btn_volets,lv_pct(20), lv_pct(100)); - - lv_obj_set_layout(cont_btn_volets, LV_LAYOUT_GRID); - static int32_t column_dsc[] = {LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST}; /*2 columns */ - static int32_t row_dsc[] = {LV_GRID_FR(1),LV_GRID_FR(1),LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST}; - lv_obj_set_grid_dsc_array(cont_btn_volets, column_dsc, row_dsc); - - lv_obj_t * btnUp_bis = lv_button_create(cont_btn_volets); - lv_obj_t * lblButtonUp = lv_label_create(btnUp_bis); - lv_label_set_text(lblButtonUp,LV_SYMBOL_UP); - - lv_obj_t * btnDwn_bis = lv_button_create(cont_btn_volets); - lv_obj_t * lblButtonDwn = lv_label_create(btnDwn_bis); - lv_label_set_text(lblButtonDwn,LV_SYMBOL_DOWN); - - lv_obj_set_grid_cell(btnUp_bis, LV_GRID_ALIGN_STRETCH, 0, 1, - LV_GRID_ALIGN_STRETCH, 0, 1); - lv_obj_set_grid_cell(btnDwn_bis, LV_GRID_ALIGN_STRETCH, 0, 1, - LV_GRID_ALIGN_STRETCH, 1, 1); - - lv_obj_t * cont_etage=lv_obj_create(tab2); - lv_obj_set_size(cont_etage,lv_pct(100), lv_pct(100)); - lv_obj_add_style(cont_etage,&no_padding,0); - - img=lv_image_create(cont_etage); - lv_img_set_src(img, &plan_etage); - - lv_point_t positions_etage[]={ - {100,15}, - {250,15}, - {400,15}, - {480,300}, - {460,360}, - {320,415}}; - for (size_t i = 1; i < 7; i++) - { - lv_obj_t * btnVolet = lv_checkbox_create(cont_etage); - ESP_LOGI(TAG,"Recup pos %d", i-1); - lv_obj_set_pos(btnVolet,positions_etage[i-1].x,positions_etage[i-1].y); - lv_obj_add_style(btnVolet,&style_font_24,0); - //lv_obj_set_size(btnVolet,100,24); - - //char *nom[10]; - //sprintf(nom,"%d", i); - lv_checkbox_set_text(btnVolet,""); - } lv_obj_set_flex_flow(tab3, LV_FLEX_FLOW_COLUMN); - lv_fragment_manager_t *manager2 = lv_fragment_manager_create(NULL); - lv_fragment_t *fragment2 = lv_fragment_create(&meteoforecast_cls, 1); - lv_fragment_manager_add(manager2, fragment2, &tab3); -} -/* The examples use WiFi configuration that you can set via project configuration menu - - If you'd rather not, just change the below entries to strings with - the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid" -*/ -#define EXAMPLE_ESP_WIFI_SSID "wifimms3" -#define EXAMPLE_ESP_WIFI_PASS "mmswifi0611" -#define EXAMPLE_ESP_MAXIMUM_RETRY 5 - -#if CONFIG_ESP_WPA3_SAE_PWE_HUNT_AND_PECK -#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HUNT_AND_PECK -#define EXAMPLE_H2E_IDENTIFIER "" -#elif CONFIG_ESP_WPA3_SAE_PWE_HASH_TO_ELEMENT -#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_HASH_TO_ELEMENT -#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID -#elif CONFIG_ESP_WPA3_SAE_PWE_BOTH -#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_BOTH -#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID -#endif -#if CONFIG_ESP_WIFI_AUTH_OPEN -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_OPEN -#elif CONFIG_ESP_WIFI_AUTH_WEP -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WEP -#elif CONFIG_ESP_WIFI_AUTH_WPA_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_PSK -#elif CONFIG_ESP_WIFI_AUTH_WPA2_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK -#elif CONFIG_ESP_WIFI_AUTH_WPA_WPA2_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA_WPA2_PSK -#elif CONFIG_ESP_WIFI_AUTH_WPA3_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA3_PSK -#elif CONFIG_ESP_WIFI_AUTH_WPA2_WPA3_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_WPA3_PSK -#elif CONFIG_ESP_WIFI_AUTH_WAPI_PSK -#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WAPI_PSK -#endif - -/* FreeRTOS event group to signal when we are connected*/ -static EventGroupHandle_t s_wifi_event_group; - -/* The event group allows multiple bits for each event, but we only care about two events: - * - we are connected to the AP with an IP - * - we failed to connect after the maximum amount of retries */ -#define WIFI_CONNECTED_BIT BIT0 -#define WIFI_FAIL_BIT BIT1 - -static int s_retry_num = 0; - -static void wifi_event_handler(void *arg, esp_event_base_t event_base, - int32_t event_id, void *event_data) -{ - if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) - { - esp_wifi_connect(); - } - else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) - { - if(lvgl_port_lock(0)){ - lv_subject_set_int(&wifiStatus,0); - lvgl_port_unlock(); - } - if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) - { - esp_wifi_connect(); - s_retry_num++; - ESP_LOGI(TAG, "retry to connect to the AP"); - } - else - { - xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); - } - ESP_LOGI(TAG, "connect to the AP fail"); - } - else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) - { - if(lvgl_port_lock(0)){ - lv_subject_set_int(&wifiStatus,1); - lvgl_port_unlock(); - } - ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; - ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); - s_retry_num = 0; - xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); - } -} -void wifi_init_sta(void) -{ - s_wifi_event_group = xEventGroupCreate(); - - ESP_ERROR_CHECK(esp_netif_init()); - - ESP_ERROR_CHECK(esp_event_loop_create_default()); - esp_netif_create_default_wifi_sta(); - - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK(esp_wifi_init(&cfg)); - - esp_event_handler_instance_t instance_any_id; - esp_event_handler_instance_t instance_got_ip; - ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, - ESP_EVENT_ANY_ID, - &wifi_event_handler, - NULL, - &instance_any_id)); - ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, - IP_EVENT_STA_GOT_IP, - &wifi_event_handler, - NULL, - &instance_got_ip)); - - wifi_config_t wifi_config = { - .sta = { - .ssid = EXAMPLE_ESP_WIFI_SSID, - .password = EXAMPLE_ESP_WIFI_PASS, - /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8). - * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value - * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to - * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards. - */ - .threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD, - .sae_pwe_h2e = ESP_WIFI_SAE_MODE, - .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER, - }, - }; - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); - ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); - ESP_ERROR_CHECK(esp_wifi_start()); - - ESP_LOGI(TAG, "wifi_init_sta finished."); - - /* 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) */ - EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, - WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, - pdFALSE, - pdFALSE, - portMAX_DELAY); - - /* 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:%s", - EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); - if(lvgl_port_lock(0)){ - lv_subject_set_int(&wifiStatus,1); - lvgl_port_unlock(); - } - } - else if (bits & WIFI_FAIL_BIT) - { - ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", - EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); - if(lvgl_port_lock(0)){ - lv_subject_set_int(&wifiStatus,0); - lvgl_port_unlock(); - } - } - else - { - ESP_LOGE(TAG, "UNEXPECTED EVENT"); - if(lvgl_port_lock(0)){ - lv_subject_set_int(&wifiStatus,0); - lvgl_port_unlock(); - } - - } -} - -static void log_error_if_nonzero(const char *message, int error_code) -{ - if (error_code != 0) - { - ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code); - } -} - -void splitIt(char *payload, unsigned int length, float *datas) -{ - char *sep = ","; - char *token; - char *saveptr1; - - token = strtok_r(payload, sep, &saveptr1); - datas[0] = atoff(token); - ESP_LOGE(TAG,"%f",datas[0]); - - token = strtok_r(NULL, sep, &saveptr1); - datas[1] = atoff(token); - ESP_LOGE(TAG,"%f",datas[1]); - - token = strtok_r(NULL, sep, &saveptr1); - datas[2] = atoff(token); - ESP_LOGE(TAG,"%f",datas[2]); - - token = strtok_r(NULL, sep, &saveptr1); - datas[3] = atoff(token); - ESP_LOGE(TAG,"%f",datas[3]); -} - -/* - * @brief Event handler registered to receive MQTT events - * - * This function is called by the MQTT client event loop. - * - * @param handler_args user data registered to the event. - * @param base Event base for the handler(always MQTT Base in this example). - * @param event_id The id for the received event. - * @param event_data The data for the event, esp_mqtt_event_handle_t. - */ -static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) -{ - ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id); - esp_mqtt_event_handle_t event = event_data; - esp_mqtt_client_handle_t client = event->client; - int msg_id; - switch ((esp_mqtt_event_id_t)event_id) - { - case MQTT_EVENT_CONNECTED: - if(lvgl_port_lock(0)){ - lv_subject_set_int(&mqttStatus,1); - lvgl_port_unlock(); - } - ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); - msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0); - ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_subscribe(client, topicTempExt, 0); - ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_subscribe(client, topicTempInt, 0); - ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuve, 0); - ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuveEvol, 0); - ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1); - ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); - - msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1"); - ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id); - break; - case MQTT_EVENT_DISCONNECTED: - if(lvgl_port_lock(0)){ - lv_subject_set_int(&mqttStatus,0); - lvgl_port_unlock(); - } - ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED"); - 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); - break; - case MQTT_EVENT_DATA: - ESP_LOGI(TAG, "MQTT_EVENT_DATA"); - printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); - printf("DATA=%.*s\r\n", event->data_len, event->data); - if (strncmp(event->topic, topicTempExt, 27) == 0) - { - lvgl_port_lock(0); - lv_subject_copy_string(&tempExtSubj, event->data); - lvgl_port_unlock(); - } - else if (strncmp(event->topic, topicTempInt, 27) == 0) - { - lvgl_port_lock(0); - lv_subject_copy_string(&tempIntSubj, event->data); - lvgl_port_unlock(); - } - else if (strncmp(event->topic, topicHauteurCuveEvol, 22) == 0) - { - /* float datas[4] = {}; - splitIt(event->data, event->data_len, datas); - ser1->y_points[0] = 130 - (int)datas[0]; - ser1->y_points[1] = 130 - (int)datas[1]; - ser1->y_points[2] = 130 - (int)datas[2]; - ser1->y_points[3] = 130 - (int)datas[3]; - lvgl_port_lock(0); - lv_chart_refresh(chart); - lvgl_port_unlock(); - */ - - // lv_subject_copy_string(&hauteurCuveEvolSubj, event->data); - } - else if (strncmp(event->topic, topicHauteurCuve, 18) == 0) - { - lvgl_port_lock(0); - char *datas = NULL; - datas = (char *)malloc(event->data_len * sizeof(char)); - stpncpy(datas, event->data, event->data_len); - datas[event->data_len] = '\0'; - lv_subject_copy_string(&hauteurCuveSubj, datas); - lvgl_port_unlock(); - } - else - { - ESP_LOGE(TAG, "None match :-("); - } - break; - case MQTT_EVENT_ERROR: - ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); - if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) - { - log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err); - log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err); - log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno); - ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno)); - } - break; - default: - ESP_LOGI(TAG, "Other event id:%d", event->event_id); - break; - } -} - -static void mqtt_app_start(void) -{ - esp_mqtt_client_config_t mqtt_cfg = { - .broker.address.uri = "mqtt://192.168.0.10", - .network.timeout_ms = 1000}; -#if CONFIG_BROKER_URL_FROM_STDIN - char line[128]; - - if (strcmp(mqtt_cfg.broker.address.uri, "FROM_STDIN") == 0) - { - int count = 0; - printf("Please enter url of mqtt broker\n"); - while (count < 128) - { - int c = fgetc(stdin); - if (c == '\n') - { - line[count] = '\0'; - break; - } - else if (c > 0 && c < 127) - { - line[count] = c; - ++count; - } - vTaskDelay(10 / portTICK_PERIOD_MS); - } - mqtt_cfg.broker.address.uri = line; - printf("Broker url: %s\n", line); - } - else - { - ESP_LOGE(TAG, "Configuration mismatch: wrong broker url"); - abort(); - } -#endif /* CONFIG_BROKER_URL_FROM_STDIN */ - - client = esp_mqtt_client_init(&mqtt_cfg); - /* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */ - esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL); - esp_mqtt_client_start(client); } void weather_data_retreived_start() @@ -1291,7 +1211,7 @@ void weather_data_retreived_start() } } -void weather_data_retreived(struct meteoforecast_data datas[3]) +void weather_data_retreived(struct meteodailyforecast_data dailyDatas[3], struct meteoforecast_data datas[3]) { /* ESP_LOGE(TAG, "debut debug"); @@ -1308,23 +1228,84 @@ void weather_data_retreived(struct meteoforecast_data datas[3]) */ if (lvgl_port_lock(0)) { - //ESP_LOGE(TAG, "------------------------------------- Set des subjects --------------------------------"); - lv_subject_set_pointer(&tempD1Subj, &datas[0]); - lv_subject_set_pointer(&tempD2Subj, &datas[1]); - lv_subject_set_pointer(&tempD3Subj, &datas[2]); + ESP_LOGE(TAG, "------------------------------------- Set des subjects J --------------------------------"); + //Prévisions des 3 prochains jours + lv_subject_set_pointer(&forecastD1Subj, &dailyDatas[0]); + lv_subject_set_pointer(&forecastD2Subj, &dailyDatas[1]); + lv_subject_set_pointer(&forecastD3Subj, &dailyDatas[2]); + + ESP_LOGE(TAG, "------------------------------------- Set des subjects H--------------------------------"); + //Prévisions des 3 prochains jours + ESP_LOGE(TAG,"Pointeur %lli",datas[0].datetime); + lv_subject_set_pointer(&forecastH1Subj, &datas[0]); + lv_subject_set_pointer(&forecastH2Subj, &datas[1]); + lv_subject_set_pointer(&forecastH3Subj, &datas[2]); + lv_subject_set_int(&meteoStatus,0); lvgl_port_unlock(); //ESP_LOGE(TAG, "------------------------------------- Fin Set des subjects --------------------------------"); } } -static void obtain_time(void); -void time_sync_notification_cb(struct timeval *tv) -{ - ESP_LOGI(TAG, "Notification of a time synchronization event"); + +void mount_sd_card(){ + // Options for mounting the filesystem. + // If format_if_mount_failed is set to true, SD card will be partitioned and + // formatted in case when mounting fails. + esp_vfs_fat_sdmmc_mount_config_t mount_config = { + .format_if_mount_failed = false, + .max_files = 5, + .allocation_unit_size = 16 * 1024 + }; + sdmmc_card_t *card; + const char mount_point[] = MOUNT_POINT; + ESP_LOGI(TAG, "Initializing SD card"); + + ESP_LOGI(TAG, "Using SPI peripheral"); + + sdmmc_host_t host = SDSPI_HOST_DEFAULT(); + + spi_bus_config_t bus_cfg = { + .mosi_io_num = PIN_NUM_MOSI, + .miso_io_num = PIN_NUM_MISO, + .sclk_io_num = PIN_NUM_CLK, + .quadwp_io_num = -1, + .quadhd_io_num = -1, + .max_transfer_sz = 4000, + }; + esp_err_t ret = spi_bus_initialize(host.slot, &bus_cfg, SDSPI_DEFAULT_DMA); + if (ret != ESP_OK) { + ESP_LOGE(TAG, "Failed to initialize bus."); + return; + } + + sdspi_device_config_t slot_config = SDSPI_DEVICE_CONFIG_DEFAULT(); + slot_config.gpio_cs = PIN_NUM_CS; + slot_config.host_id = host.slot; + + ESP_LOGI(TAG, "Mounting filesystem"); + ret = esp_vfs_fat_sdspi_mount(mount_point, &host, &slot_config, &mount_config, &card); + + if (ret != ESP_OK) { + if (ret == ESP_FAIL) { + ESP_LOGE(TAG, "Failed to mount filesystem. " + "If you want the card to be formatted, set the CONFIG_EXAMPLE_FORMAT_IF_MOUNT_FAILED menuconfig option."); + } else { + ESP_LOGE(TAG, "Failed to initialize the card (%s). " + "Make sure SD card lines have pull-up resistors in place.", esp_err_to_name(ret)); + } + return; + } + ESP_LOGI(TAG, "Filesystem mounted"); + + // Card has been initialized, print its properties + sdmmc_card_print_info(stdout, card); + } -void app_main(void) -{ +void app_main(void){ + esp_log_level_set("wifi", ESP_LOG_ERROR); + + mount_sd_card(); /* LCD HW initialization */ ESP_ERROR_CHECK(app_lcd_init()); @@ -1334,6 +1315,14 @@ void app_main(void) /* LVGL initialization */ ESP_ERROR_CHECK(app_lvgl_init()); + + /* On affiche au plus tot l'ecran de démarrage */ + if(lvgl_port_lock(0)){ + //ESP_ERROR_CHECK(esp_lcd_panel_mirror(lcd_panel,true,true)); + app_main_display(); + lvgl_port_unlock(); + } + // Initialize NVS esp_err_t ret = nvs_flash_init(); @@ -1344,16 +1333,13 @@ void app_main(void) } ESP_ERROR_CHECK(ret); + lv_subject_init_int(&wifiStatus,-1); + lv_subject_init_int(&mqttStatus,-1); + lv_subject_init_int(&meteoStatus,-1); - /* Show LVGL objects */ - if(lvgl_port_lock(0)){ - //ESP_ERROR_CHECK(esp_lcd_panel_mirror(lcd_panel,true,true)); - app_main_display(); - lvgl_port_unlock(); - } ESP_LOGI(TAG, "ESP_WIFI_MODE_STA"); wifi_init_sta(); - mqtt_app_start(); + //mqtt_app_start(); time_t now; struct tm timeinfo; @@ -1375,66 +1361,31 @@ void app_main(void) localtime_r(&now, &timeinfo); strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); + printf("Free heap after buffers allocation: %d\n", xPortGetFreeHeapSize()); + heap_caps_print_heap_info(MALLOC_CAP_DEFAULT); + + on_weather_data_retrieval(weather_data_retreived); on_weather_data_retrieval_start(weather_data_retreived_start); initialise_weather_data_retrieval(60000); ESP_LOGW(TAG, "Weather data retrieval initialized"); + ESP_LOGW(TAG, "On telecharge l'image cuve"); + TaskHandle_t xHandle = NULL; + BaseType_t ret1 = xTaskCreate(&imgdwn, "imageDownload_task", 5 * 1024, NULL, 5, &xHandle); + if(ret1!=pdPASS ){ + ESP_LOGE(TAG, "Impossiblke de creer la tache %i", ret1); + } + + + /* Show LVGL objects */ if(lvgl_port_lock(0)){ - // app_main_display(); draw_ihm(); //lv_disp_set_rotation(lvgl_disp, LV_DISPLAY_ROTATION_180); lvgl_port_unlock(); } -} - -static void obtain_time(void) -{ - ESP_LOGI(TAG, "Initializing and starting SNTP"); - esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org"); - config.sync_cb = time_sync_notification_cb; // Note: This is only needed if we want - esp_netif_sntp_init(&config); - - // wait for time to be set - time_t now = 0; - struct tm timeinfo = { 0 }; - int retry = 0; - const int retry_count = 15; - while (esp_netif_sntp_sync_wait(2000 / portTICK_PERIOD_MS) == ESP_ERR_TIMEOUT && ++retry < retry_count) { - ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count); - } - time(&now); - localtime_r(&now, &timeinfo); - - esp_netif_sntp_deinit(); -} - - -static void meteoforecast_fragment_ctor(lv_fragment_t * self, void * args){ - struct meteoforecast_fragment_t *myself=((struct meteoforecast_fragment_t *) self); - myself->showDate = args; -} - - -static lv_obj_t * meteoforecast_fragment_create_obj(lv_fragment_t * self, lv_obj_t * parent) -{ - - lv_fragment_manager_t *manager = lv_fragment_manager_create(NULL); - - int args[2]={0,((struct meteoforecast_fragment_t*)self)->showDate}; - lv_fragment_t *fragment = lv_fragment_create(&sample_cls, args); - lv_fragment_manager_add(manager, fragment, &parent); - - args[0]=1; - fragment = lv_fragment_create(&sample_cls, args); - lv_fragment_manager_add(manager, fragment, &parent); - - args[0]=2; - fragment = lv_fragment_create(&sample_cls, args); - lv_fragment_manager_add(manager, fragment, &parent); - - return parent; + } diff --git a/main/main.h b/main/main.h new file mode 100644 index 0000000..16b7090 --- /dev/null +++ b/main/main.h @@ -0,0 +1,3 @@ +#pragma once +#include "mqtt_client.h" +static void showMeteoIcon(const char *icon, lv_obj_t *desc_icon, int childNr); diff --git a/main/mqtt.c b/main/mqtt.c new file mode 100644 index 0000000..5fc056c --- /dev/null +++ b/main/mqtt.c @@ -0,0 +1,232 @@ +#include "mqtt.h" +#include "esp_log.h" +#include "esp_lvgl_port.h" +#include "mqtt_client.h" + +esp_mqtt_client_handle_t client; +extern lv_subject_t mqttStatus; +extern lv_subject_t tempIntSubj; +extern lv_subject_t tempExtSubj; +extern lv_subject_t hauteurCuveSubj; +extern lv_subject_t hauteurCuveEvolSubj; + +static const char *TAG = "mqtt"; + +char *upEvent = "monter"; +char *downEvent = "descendre"; + +char *topicTempExt = "house/temp/282A802600008059"; +char *topicHauteurCuve = "house/cuve/hauteur"; +char *topicTempInt = "house/temp/287DCF1E00008020"; +char *topicHauteurCuveEvol = "house/cuve/hauteurEvol"; + +static void log_error_if_nonzero(const char *message, int error_code) +{ + if (error_code != 0) + { + ESP_LOGE(TAG, "Last error %s: 0x%x", message, error_code); + } +} + +void splitIt(char *payload, unsigned int length, float *datas) +{ + char *sep = ","; + char *token; + char *saveptr1; + + token = strtok_r(payload, sep, &saveptr1); + datas[0] = atoff(token); + ESP_LOGE(TAG,"%f",datas[0]); + + token = strtok_r(NULL, sep, &saveptr1); + datas[1] = atoff(token); + ESP_LOGE(TAG,"%f",datas[1]); + + token = strtok_r(NULL, sep, &saveptr1); + datas[2] = atoff(token); + ESP_LOGE(TAG,"%f",datas[2]); + + token = strtok_r(NULL, sep, &saveptr1); + datas[3] = atoff(token); + ESP_LOGE(TAG,"%f",datas[3]); +} + +/* + * @brief Event handler registered to receive MQTT events + * + * This function is called by the MQTT client event loop. + * + * @param handler_args user data registered to the event. + * @param base Event base for the handler(always MQTT Base in this example). + * @param event_id The id for the received event. + * @param event_data The data for the event, esp_mqtt_event_handle_t. + */ +static void mqtt_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data) +{ + ESP_LOGD(TAG, "Event dispatched from event loop base=%s, event_id=%" PRIi32 "", base, event_id); + esp_mqtt_event_handle_t event = event_data; + esp_mqtt_client_handle_t client = event->client; + int msg_id; + switch ((esp_mqtt_event_id_t)event_id) + { + case MQTT_EVENT_CONNECTED: + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut mqttStatus 1"); + lv_subject_set_int(&mqttStatus,1); + lvgl_port_unlock(); + } + ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED"); + //msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1, 0); + //ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicTempExt, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicTempInt, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuve, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + msg_id = esp_mqtt_client_subscribe(client, topicHauteurCuveEvol, 0); + ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + //msg_id = esp_mqtt_client_subscribe(client, "/topic/qos1", 1); + //ESP_LOGI(TAG, "sent subscribe successful, msg_id=%d", msg_id); + + //msg_id = esp_mqtt_client_unsubscribe(client, "/topic/qos1"); + //ESP_LOGI(TAG, "sent unsubscribe successful, msg_id=%d", msg_id); + break; + case MQTT_EVENT_DISCONNECTED: + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut mqttStatus 0"); + lv_subject_set_int(&mqttStatus,0); + lvgl_port_unlock(); + } + ESP_LOGI(TAG, "MQTT_EVENT_DISCONNECTED"); + 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); + break; + case MQTT_EVENT_DATA: + ESP_LOGI(TAG, "MQTT_EVENT_DATA"); + printf("TOPIC=%.*s\r\n", event->topic_len, event->topic); + printf("DATA=%.*s\r\n", event->data_len, event->data); + if (strncmp(event->topic, topicTempExt, 27) == 0) + { + lvgl_port_lock(0); + // on retransforme en float pour ne garder que la partie entiere de la température + float temp = strtof(event->data, NULL); + char buff[5]; + sprintf(buff,"%.1f",temp); + lv_subject_copy_string(&tempExtSubj, buff); + lvgl_port_unlock(); + } + else if (strncmp(event->topic, topicTempInt, 27) == 0) + { + lvgl_port_lock(0); + // on retransforme en float pour ne garder que la partie entiere de la température + float temp = strtof(event->data, NULL); + char buff[5]; + sprintf(buff,"%.1f",temp); + lv_subject_copy_string(&tempIntSubj, buff); + lvgl_port_unlock(); + } + else if (strncmp(event->topic, topicHauteurCuveEvol, 22) == 0) + { + /* float datas[4] = {}; + splitIt(event->data, event->data_len, datas); + ser1->y_points[0] = 130 - (int)datas[0]; + ser1->y_points[1] = 130 - (int)datas[1]; + ser1->y_points[2] = 130 - (int)datas[2]; + ser1->y_points[3] = 130 - (int)datas[3]; + lvgl_port_lock(0); + lv_chart_refresh(chart); + lvgl_port_unlock(); + */ + + // lv_subject_copy_string(&hauteurCuveEvolSubj, event->data); + } + else if (strncmp(event->topic, topicHauteurCuve, 18) == 0) + { + lvgl_port_lock(0); + char *datas = NULL; + datas = (char *)malloc(event->data_len * sizeof(char)); + stpncpy(datas, event->data, event->data_len); + datas[event->data_len] = '\0'; + lv_subject_copy_string(&hauteurCuveSubj, datas); + free(datas); + lvgl_port_unlock(); + } + else + { + ESP_LOGE(TAG, "None match :-("); + } + break; + case MQTT_EVENT_ERROR: + ESP_LOGI(TAG, "MQTT_EVENT_ERROR"); + if (event->error_handle->error_type == MQTT_ERROR_TYPE_TCP_TRANSPORT) + { + log_error_if_nonzero("reported from esp-tls", event->error_handle->esp_tls_last_esp_err); + log_error_if_nonzero("reported from tls stack", event->error_handle->esp_tls_stack_err); + log_error_if_nonzero("captured as transport's socket errno", event->error_handle->esp_transport_sock_errno); + ESP_LOGI(TAG, "Last errno string (%s)", strerror(event->error_handle->esp_transport_sock_errno)); + } + break; + default: + ESP_LOGI(TAG, "Other event id:%d", event->event_id); + break; + } +} +void mqtt_app_start(void) +{ + esp_mqtt_client_config_t mqtt_cfg = { + .broker.address.uri = "mqtt://192.168.0.10", + .network.timeout_ms = 1000}; +#if CONFIG_BROKER_URL_FROM_STDIN + char line[128]; + + if (strcmp(mqtt_cfg.broker.address.uri, "FROM_STDIN") == 0) + { + int count = 0; + printf("Please enter url of mqtt broker\n"); + while (count < 128) + { + int c = fgetc(stdin); + if (c == '\n') + { + line[count] = '\0'; + break; + } + else if (c > 0 && c < 127) + { + line[count] = c; + ++count; + } + vTaskDelay(10 / portTICK_PERIOD_MS); + } + mqtt_cfg.broker.address.uri = line; + printf("Broker url: %s\n", line); + } + else + { + ESP_LOGE(TAG, "Configuration mismatch: wrong broker url"); + abort(); + } +#endif /* CONFIG_BROKER_URL_FROM_STDIN */ + + client = esp_mqtt_client_init(&mqtt_cfg); + /* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */ + esp_mqtt_client_register_event(client, ESP_EVENT_ANY_ID, mqtt_event_handler, NULL); + esp_mqtt_client_start(client); +} + diff --git a/main/mqtt.h b/main/mqtt.h new file mode 100644 index 0000000..694f675 --- /dev/null +++ b/main/mqtt.h @@ -0,0 +1,3 @@ +#pragma once + +void mqtt_app_start(void); diff --git a/main/obtain_time.c b/main/obtain_time.c new file mode 100644 index 0000000..be65d95 --- /dev/null +++ b/main/obtain_time.c @@ -0,0 +1,32 @@ +#include "esp_log.h" +#include "esp_netif_sntp.h" +#include "esp_sntp.h" +#include "obtain_time.h" + +static const char *TAG = "sntp"; + +void time_sync_notification_cb(struct timeval *tv) +{ + ESP_LOGI(TAG, "Notification of a time synchronization event"); +} + +void obtain_time(void) +{ + ESP_LOGI(TAG, "Initializing and starting SNTP"); + esp_sntp_config_t config = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org"); + config.sync_cb = time_sync_notification_cb; // Note: This is only needed if we want + esp_netif_sntp_init(&config); + + // wait for time to be set + time_t now = 0; + struct tm timeinfo = { 0 }; + int retry = 0; + const int retry_count = 15; + while (esp_netif_sntp_sync_wait(2000 / portTICK_PERIOD_MS) == ESP_ERR_TIMEOUT && ++retry < retry_count) { + ESP_LOGI(TAG, "Waiting for system time to be set... (%d/%d)", retry, retry_count); + } + time(&now); + localtime_r(&now, &timeinfo); + + esp_netif_sntp_deinit(); +} \ No newline at end of file diff --git a/main/obtain_time.h b/main/obtain_time.h new file mode 100644 index 0000000..8e2e6cd --- /dev/null +++ b/main/obtain_time.h @@ -0,0 +1,2 @@ +void obtain_time(void); +#pragma once diff --git a/main/wifi.c b/main/wifi.c new file mode 100644 index 0000000..8ed2e53 --- /dev/null +++ b/main/wifi.c @@ -0,0 +1,152 @@ +#include "wifi.h" +#include "esp_wifi.h" +#include "esp_log.h" +#include "esp_lvgl_port.h" + +/* FreeRTOS event group to signal when we are connected*/ +static EventGroupHandle_t s_wifi_event_group; + +/* The event group allows multiple bits for each event, but we only care about two events: + * - we are connected to the AP with an IP + * - we failed to connect after the maximum amount of retries */ +#define WIFI_CONNECTED_BIT BIT0 +#define WIFI_FAIL_BIT BIT1 + +#define EXAMPLE_ESP_WIFI_SSID "wifimms3" +#define EXAMPLE_ESP_WIFI_PASS "mmswifi0611" +#define EXAMPLE_ESP_MAXIMUM_RETRY 5 + +#define ESP_WIFI_SAE_MODE WPA3_SAE_PWE_BOTH +#define EXAMPLE_H2E_IDENTIFIER CONFIG_ESP_WIFI_PW_ID +#define ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD WIFI_AUTH_WPA2_PSK + +static const char *TAG = "wifi"; + +static int s_retry_num = 0; + +extern lv_subject_t wifiStatus; + +static void wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) +{ + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) + { + esp_wifi_connect(); + } + else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) + { + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut Wifi 0"); + lv_subject_set_int(&wifiStatus,0); + lvgl_port_unlock(); + } + if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY) + { + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "retry to connect to the AP"); + } + else + { + xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); + } + ESP_LOGI(TAG, "connect to the AP fail"); + } + else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) + { + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut Wifi 1"); + lv_subject_set_int(&wifiStatus,1); + lvgl_port_unlock(); + } + ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; + ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); + s_retry_num = 0; + xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + } +} +void wifi_init_sta(void) +{ + s_wifi_event_group = xEventGroupCreate(); + + ESP_ERROR_CHECK(esp_netif_init()); + + ESP_ERROR_CHECK(esp_event_loop_create_default()); + esp_netif_create_default_wifi_sta(); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + esp_event_handler_instance_t instance_any_id; + esp_event_handler_instance_t instance_got_ip; + ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, + ESP_EVENT_ANY_ID, + &wifi_event_handler, + NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &wifi_event_handler, + NULL, + &instance_got_ip)); + + wifi_config_t wifi_config = { + .sta = { + .ssid = EXAMPLE_ESP_WIFI_SSID, + .password = EXAMPLE_ESP_WIFI_PASS, + /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8). + * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value + * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to + * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards. + */ + .threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD, + .sae_pwe_h2e = ESP_WIFI_SAE_MODE, + .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER, + }, + }; + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); + ESP_ERROR_CHECK(esp_wifi_start()); + + ESP_LOGI(TAG, "wifi_init_sta finished."); + + /* 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) */ + EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, + WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, + pdFALSE, + pdFALSE, + portMAX_DELAY); + + /* 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:%s", + EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut Wifi 1"); + lv_subject_set_int(&wifiStatus,1); + lvgl_port_unlock(); + } + } + else if (bits & WIFI_FAIL_BIT) + { + ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", + EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS); + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut Wifi 0"); + lv_subject_set_int(&wifiStatus,0); + lvgl_port_unlock(); + } + } + else + { + ESP_LOGE(TAG, "UNEXPECTED EVENT"); + if(lvgl_port_lock(0)){ + ESP_LOGE(TAG,"Statut Wifi 0"); + lv_subject_set_int(&wifiStatus,0); + lvgl_port_unlock(); + } + + } +} diff --git a/main/wifi.h b/main/wifi.h new file mode 100644 index 0000000..072517d --- /dev/null +++ b/main/wifi.h @@ -0,0 +1,2 @@ +#pragma once +void wifi_init_sta(void); \ No newline at end of file diff --git a/partition_table/partitionTable.bin b/partition_table/partitionTable.bin new file mode 100644 index 0000000..0fdd7d8 Binary files /dev/null and b/partition_table/partitionTable.bin differ diff --git a/partition_table/partitionTable.csv b/partition_table/partitionTable.csv new file mode 100644 index 0000000..84c1cb9 --- /dev/null +++ b/partition_table/partitionTable.csv @@ -0,0 +1,9 @@ +# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags +nvs,data,nvs,0x9000,24K, +otadata,data,ota,0xf000,8K, +phy_init,data,phy,0x11000,4K, +factory,app,factory,0x20000,3M, +ota_0,app,ota_0,0x320000,3M, +ota_1,app,ota_1,0x620000,3M, +datas,data,spiffs,0x920000,1M, diff --git a/partitions copy.csv b/partitions copy.csv new file mode 100644 index 0000000..111c125 --- /dev/null +++ b/partitions copy.csv @@ -0,0 +1,5 @@ +# Name, Type, SubType, Offset, Size, Flags +# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild +nvs, data, nvs, 0x9000, 0x6000, +phy_init, data, phy, 0xf000, 0x1000, +factory, app, factory, 0x10000, 3M, diff --git a/partitions.csv b/partitions.csv index 111c125..ff26b22 100644 --- a/partitions.csv +++ b/partitions.csv @@ -1,5 +1,9 @@ -# Name, Type, SubType, Offset, Size, Flags -# Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild -nvs, data, nvs, 0x9000, 0x6000, -phy_init, data, phy, 0xf000, 0x1000, -factory, app, factory, 0x10000, 3M, +# ESP-IDF Partition Table +# Name, Type, SubType, Offset, Size, Flags +nvs,data,nvs,,0x6000,, +otadata,data,ota,,0x2000,, +phy_init,data,phy,,0x1000,, +factory,app,factory,,3M,, +ota_0,app,ota_0,,3M,, +ota_1,app,ota_1,,3M,, +datas,data,spiffs,,1M,, diff --git a/sdkconfig b/sdkconfig index 2925a31..010fd51 100644 --- a/sdkconfig +++ b/sdkconfig @@ -1,15 +1,17 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.4 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.3.1 Project Configuration # CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_ADC_SUPPORTED=y CONFIG_SOC_UART_SUPPORTED=y CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_PHY_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y CONFIG_SOC_TWAI_SUPPORTED=y CONFIG_SOC_GDMA_SUPPORTED=y +CONFIG_SOC_AHB_GDMA_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y CONFIG_SOC_LCDCAM_SUPPORTED=y CONFIG_SOC_MCPWM_SUPPORTED=y @@ -25,6 +27,7 @@ CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y +CONFIG_SOC_EFUSE_SUPPORTED=y CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y @@ -50,6 +53,15 @@ CONFIG_SOC_SECURE_BOOT_SUPPORTED=y CONFIG_SOC_MEMPROT_SUPPORTED=y CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_CLK_TREE_SUPPORTED=y +CONFIG_SOC_MPU_SUPPORTED=y +CONFIG_SOC_WDT_SUPPORTED=y +CONFIG_SOC_SPI_FLASH_SUPPORTED=y +CONFIG_SOC_RNG_SUPPORTED=y +CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y +CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y +CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y +CONFIG_SOC_PM_SUPPORTED=y CONFIG_SOC_XTAL_SUPPORT_40M=y CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y @@ -68,12 +80,14 @@ CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y +CONFIG_SOC_ADC_SHARED_POWER=y CONFIG_SOC_APB_BACKUP_DMA=y CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y @@ -81,15 +95,18 @@ CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y CONFIG_SOC_CPU_CORES_NUM=2 CONFIG_SOC_CPU_INTR_NUM=32 CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_GDMA_GROUPS=y +CONFIG_SOC_AHB_GDMA_VERSION=1 +CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 -CONFIG_SOC_GDMA_SUPPORT_PSRAM=y +CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=5 +CONFIG_SOC_AHB_GDMA_SUPPORT_PSRAM=y CONFIG_SOC_GPIO_PORT=1 CONFIG_SOC_GPIO_PIN_COUNT=49 CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y @@ -97,17 +114,25 @@ CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=48 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=48 CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 +CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y +CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_HP_I2C_NUM=2 CONFIG_SOC_I2C_FIFO_LEN=32 CONFIG_SOC_I2C_CMD_REG_NUM=8 CONFIG_SOC_I2C_SUPPORT_SLAVE=y CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y CONFIG_SOC_I2C_SUPPORT_XTAL=y CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y CONFIG_SOC_I2S_NUM=2 CONFIG_SOC_I2S_HW_VERSION_2=y CONFIG_SOC_I2S_SUPPORTS_XTAL=y @@ -188,6 +213,10 @@ CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 CONFIG_SOC_SPI_SUPPORT_OCT=y +CONFIG_SOC_SPI_SCT_SUPPORTED=y +CONFIG_SOC_SPI_SCT_REG_NUM=14 +CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y +CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y @@ -207,18 +236,21 @@ CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 -CONFIG_SOC_TOUCH_VERSION_2=y +CONFIG_SOC_TOUCH_SENSOR_VERSION=2 CONFIG_SOC_TOUCH_SENSOR_NUM=15 +CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y +CONFIG_SOC_TOUCH_SUPPORT_WATERPROOF=y +CONFIG_SOC_TOUCH_SUPPORT_PROX_SENSING=y CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y -CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX=0x1FFFFF -CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 CONFIG_SOC_TWAI_CONTROLLER_NUM=1 CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y CONFIG_SOC_TWAI_BRP_MIN=2 CONFIG_SOC_TWAI_BRP_MAX=16384 CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_HP_NUM=3 CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y @@ -226,7 +258,6 @@ CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y CONFIG_SOC_UART_SUPPORT_APB_CLK=y CONFIG_SOC_UART_SUPPORT_RTC_CLK=y CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_REQUIRE_CORE_RESET=y CONFIG_SOC_USB_OTG_PERIPH_NUM=1 CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 CONFIG_SOC_SHA_SUPPORT_DMA=y @@ -240,6 +271,8 @@ CONFIG_SOC_SHA_SUPPORT_SHA512=y CONFIG_SOC_SHA_SUPPORT_SHA512_224=y CONFIG_SOC_SHA_SUPPORT_SHA512_256=y CONFIG_SOC_SHA_SUPPORT_SHA512_T=y +CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 +CONFIG_SOC_MPI_OPERATIONS_NUM=3 CONFIG_SOC_RSA_MAX_BIT_LEN=4096 CONFIG_SOC_AES_SUPPORT_DMA=y CONFIG_SOC_AES_GDMA=y @@ -293,14 +326,17 @@ CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y -CONFIG_SOC_SPI_MEM_SUPPORT_TIME_TUNING=y +CONFIG_SOC_SPI_MEM_SUPPORT_TIMING_TUNING=y CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_MEMSPI_TIMING_TUNING_BY_MSPI_DELAY=y +CONFIG_SOC_MEMSPI_CORE_CLK_SHARED_WITH_PSRAM=y CONFIG_SOC_COEX_HW_PTI=y CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y CONFIG_SOC_SDMMC_NUM_SLOTS=2 CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_SDMMC_DELAY_PHASE_NUM=4 CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y CONFIG_SOC_WIFI_HW_TSF=y CONFIG_SOC_WIFI_FTM_SUPPORT=y @@ -318,9 +354,11 @@ CONFIG_SOC_BLUFI_SUPPORTED=y CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y CONFIG_IDF_CMAKE=y +CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TARGET_ARCH_XTENSA=y CONFIG_IDF_TARGET_ARCH="xtensa" CONFIG_IDF_TARGET="esp32s3" +CONFIG_IDF_INIT_VERSION="5.3.1" CONFIG_IDF_TARGET_ESP32S3=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 @@ -339,6 +377,14 @@ CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # # Bootloader config # + +# +# Bootloader manager +# +CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y +CONFIG_BOOTLOADER_PROJECT_VER=1 +# end of Bootloader manager + CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set @@ -411,12 +457,17 @@ CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y CONFIG_ESP_ROM_HAS_SPI_FLASH=y CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y +CONFIG_ESP_ROM_HAS_NEWLIB=y CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y +CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG=y CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=y +CONFIG_ESP_ROM_HAS_SW_FLOAT=y +CONFIG_ESP_ROM_HAS_VERSION=y +CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y # # Boot ROM Behavior @@ -447,13 +498,13 @@ CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y CONFIG_ESPTOOLPY_FLASHFREQ="80m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" # CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set @@ -500,9 +551,9 @@ CONFIG_ESP_WIFI_AUTH_WPA2_PSK=y # # Compiler options # -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set +CONFIG_COMPILER_OPTIMIZATION_DEBUG=y # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -CONFIG_COMPILER_OPTIMIZATION_PERF=y +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set @@ -519,7 +570,12 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set # CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set # CONFIG_COMPILER_DUMP_RTL_FILES is not set +CONFIG_COMPILER_RT_LIB_GCCLIB=y +CONFIG_COMPILER_RT_LIB_NAME="gcc" +# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set +CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y # end of Compiler options # @@ -531,7 +587,14 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # # -# Legacy ADC Configuration +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y +# end of TWAI Configuration + +# +# Legacy ADC Driver Configuration # # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set @@ -540,100 +603,49 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set # end of Legacy ADC Calibration Configuration -# end of Legacy ADC Configuration +# end of Legacy ADC Driver Configuration # -# SPI Configuration +# Legacy MCPWM Driver Configurations # -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI Configuration +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy MCPWM Driver Configurations # -# TWAI Configuration +# Legacy Timer Group Driver Configurations # -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y -# end of TWAI Configuration +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy Timer Group Driver Configurations # -# Temperature sensor Configuration +# Legacy RMT Driver Configurations +# +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy RMT Driver Configurations + +# +# Legacy I2S Driver Configurations +# +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy I2S Driver Configurations + +# +# Legacy PCNT Driver Configurations +# +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy PCNT Driver Configurations + +# +# Legacy SDM Driver Configurations +# +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy SDM Driver Configurations + +# +# Legacy Temperature Sensor Driver Configurations # # CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of Temperature sensor Configuration - -# -# UART Configuration -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART Configuration - -# -# GPIO Configuration -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of GPIO Configuration - -# -# Sigma Delta Modulator Configuration -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of Sigma Delta Modulator Configuration - -# -# GPTimer Configuration -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of GPTimer Configuration - -# -# PCNT Configuration -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of PCNT Configuration - -# -# RMT Configuration -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of RMT Configuration - -# -# MCPWM Configuration -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of MCPWM Configuration - -# -# I2S Configuration -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of I2S Configuration - -# -# USB Serial/JTAG Configuration -# -# end of USB Serial/JTAG Configuration +# end of Legacy Temperature Sensor Driver Configurations # end of Driver Configurations # @@ -650,7 +662,9 @@ CONFIG_EFUSE_MAX_BLK_LEN=256 CONFIG_ESP_TLS_USING_MBEDTLS=y CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set -# CONFIG_ESP_TLS_SERVER is not set +# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set +# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set # CONFIG_ESP_TLS_PSK_VERIFICATION is not set # CONFIG_ESP_TLS_INSECURE is not set # end of ESP-TLS @@ -658,6 +672,7 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y # # Wireless Coexistence # +CONFIG_ESP_COEX_ENABLED=y # CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set # end of Wireless Coexistence @@ -667,6 +682,99 @@ CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # end of Common ESP-related +# +# ESP-Driver:GPIO Configurations +# +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:GPIO Configurations + +# +# ESP-Driver:GPTimer Configurations +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:GPTimer Configurations + +# +# ESP-Driver:I2C Configurations +# +# CONFIG_I2C_ISR_IRAM_SAFE is not set +# CONFIG_I2C_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2C Configurations + +# +# ESP-Driver:I2S Configurations +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2S Configurations + +# +# ESP-Driver:LEDC Configurations +# +# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:LEDC Configurations + +# +# ESP-Driver:MCPWM Configurations +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:MCPWM Configurations + +# +# ESP-Driver:PCNT Configurations +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:PCNT Configurations + +# +# ESP-Driver:RMT Configurations +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:RMT Configurations + +# +# ESP-Driver:Sigma Delta Modulator Configurations +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:Sigma Delta Modulator Configurations + +# +# ESP-Driver:SPI Configurations +# +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of ESP-Driver:SPI Configurations + +# +# ESP-Driver:Temperature Sensor Configurations +# +# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:Temperature Sensor Configurations + +# +# ESP-Driver:UART Configurations +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of ESP-Driver:UART Configurations + +# +# ESP-Driver:USB Serial/JTAG Configuration +# +CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y +# end of ESP-Driver:USB Serial/JTAG Configuration + # # Event Loop Library # @@ -681,6 +789,7 @@ CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set # CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set # CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set # end of ESP HTTP client # @@ -711,6 +820,7 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 @@ -726,9 +836,9 @@ CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # CONFIG_ESP_SLEEP_DEBUG is not set CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # end of Sleep Config # @@ -748,11 +858,12 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y # end of Peripheral Control # -# GDMA Configuration +# GDMA Configurations # -# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y # CONFIG_GDMA_ISR_IRAM_SAFE is not set -# end of GDMA Configuration +# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set +# end of GDMA Configurations # # Main XTAL Config @@ -760,6 +871,8 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y CONFIG_XTAL_FREQ_40=y CONFIG_XTAL_FREQ=40 # end of Main XTAL Config + +CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y # end of Hardware Settings # @@ -800,6 +913,7 @@ CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y # # PHY # +CONFIG_ESP_PHY_ENABLED=y CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 @@ -819,7 +933,7 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0 # # CONFIG_PM_ENABLE is not set CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y # end of Power Management # @@ -837,11 +951,13 @@ CONFIG_SPIRAM_TYPE_AUTO=y CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y CONFIG_SPIRAM_CLK_IO=30 CONFIG_SPIRAM_CS_IO=26 +# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y CONFIG_SPIRAM_RODATA=y CONFIG_SPIRAM_SPEED_80M=y # CONFIG_SPIRAM_SPEED_40M is not set CONFIG_SPIRAM_SPEED=80 +# CONFIG_SPIRAM_ECC_ENABLE is not set CONFIG_SPIRAM_BOOT_INIT=y # CONFIG_SPIRAM_IGNORE_NOTFOUND is not set # CONFIG_SPIRAM_USE_MEMMAP is not set @@ -852,7 +968,6 @@ CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 # CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 # CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set -# CONFIG_SPIRAM_ECC_ENABLE is not set # end of SPI RAM config # end of ESP PSRAM @@ -912,8 +1027,6 @@ CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y @@ -926,8 +1039,8 @@ CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4608 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=40000 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y # CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set @@ -942,8 +1055,8 @@ CONFIG_ESP_CONSOLE_UART_DEFAULT=y CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 @@ -986,7 +1099,7 @@ CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) # -# High resolution timer (esp_timer) +# ESP Timer (High Resolution Timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y @@ -996,11 +1109,10 @@ CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 # CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of High resolution timer (esp_timer) +# end of ESP Timer (High Resolution Timer) # # Wi-Fi @@ -1035,6 +1147,9 @@ CONFIG_ESP_WIFI_ENABLE_SAE_PK=y CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 +CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 +CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 # CONFIG_ESP_WIFI_FTM_ENABLE is not set CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y # CONFIG_ESP_WIFI_GCMP_SUPPORT is not set @@ -1065,6 +1180,49 @@ CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y # CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set # end of Wi-Fi +# +# FAT Filesystem support +# +CONFIG_FATFS_VOLUME_COUNT=2 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +# CONFIG_FATFS_SECTOR_512 is not set +CONFIG_FATFS_SECTOR_4096=y +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# CONFIG_FATFS_IMMEDIATE_FSYNC is not set +# CONFIG_FATFS_USE_LABEL is not set +CONFIG_FATFS_LINK_LOCK=y +# end of FAT Filesystem support + # # FreeRTOS # @@ -1084,20 +1242,29 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 # CONFIG_FREERTOS_USE_TICK_HOOK is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 # CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set +CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set +CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y +CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set # end of Kernel # # Port # +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y +# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set # CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y CONFIG_FREERTOS_ISR_STACKSIZE=1536 @@ -1107,14 +1274,16 @@ CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y # CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y # end of Port +CONFIG_FREERTOS_PORT=y CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y +CONFIG_FREERTOS_NUMBER_OF_CORES=2 # end of FreeRTOS # @@ -1140,6 +1309,7 @@ CONFIG_HEAP_TRACING_OFF=y # CONFIG_HEAP_TRACING_STANDALONE is not set # CONFIG_HEAP_TRACING_TOHOST is not set # CONFIG_HEAP_USE_HOOKS is not set +# CONFIG_HEAP_TASK_TRACKING is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set # CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set # end of Heap memory debugging @@ -1158,6 +1328,7 @@ CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set CONFIG_LOG_MAXIMUM_LEVEL=3 +# CONFIG_LOG_MASTER_LEVEL is not set CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set @@ -1166,6 +1337,7 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # # LWIP # +CONFIG_LWIP_ENABLE=y CONFIG_LWIP_LOCAL_HOSTNAME="espressif" # CONFIG_LWIP_NETIF_API is not set CONFIG_LWIP_TCPIP_TASK_PRIO=18 @@ -1212,6 +1384,7 @@ CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 CONFIG_LWIP_DHCPS=y CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y # end of DHCP server # CONFIG_LWIP_AUTOIP is not set @@ -1239,6 +1412,7 @@ CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 CONFIG_LWIP_TCP_WND_DEFAULT=5760 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 @@ -1294,6 +1468,8 @@ CONFIG_LWIP_MAX_RAW_PCBS=16 CONFIG_LWIP_SNTP_MAX_SERVERS=1 # CONFIG_LWIP_DHCP_GET_NTP_SRV is not set CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +CONFIG_LWIP_SNTP_STARTUP_DELAY=y +CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 # end of SNTP # @@ -1364,6 +1540,7 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # end of Certificate Bundle @@ -1371,9 +1548,12 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 CONFIG_MBEDTLS_CMAC_C=y CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_AES_USE_INTERRUPT=y +CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 # CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set CONFIG_MBEDTLS_HARDWARE_MPI=y +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set @@ -1458,7 +1638,7 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set +CONFIG_MBEDTLS_ERROR_STRINGS=y # end of mbedTLS # @@ -1505,10 +1685,14 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set # end of Newlib +CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y + # # NVS # +# CONFIG_NVS_ENCRYPTION is not set # CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set # end of NVS # @@ -1556,6 +1740,9 @@ CONFIG_SPI_FLASH_HPM_AUTO=y CONFIG_SPI_FLASH_HPM_ON=y CONFIG_SPI_FLASH_HPM_DC_AUTO=y # CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set +CONFIG_SPI_FLASH_SUSPEND_QVL_SUPPORTED=y +# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set +CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # end of Optional and Experimental Features (READ DOCS FIRST) # end of Main Flash configuration @@ -1631,10 +1818,18 @@ CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 # end of Host File System I/O (Semihosting) # end of Virtual file system +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +# end of Wear Levelling + # # ESP LCD TOUCH # -CONFIG_ESP_LCD_TOUCH_MAX_POINTS=5 +CONFIG_ESP_LCD_TOUCH_MAX_POINTS=1 CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS=1 # end of ESP LCD TOUCH @@ -1658,17 +1853,20 @@ CONFIG_LV_COLOR_DEPTH=16 # # Memory Settings # -# CONFIG_LV_USE_BUILTIN_MALLOC is not set -CONFIG_LV_USE_CLIB_MALLOC=y +CONFIG_LV_USE_BUILTIN_MALLOC=y +# CONFIG_LV_USE_CLIB_MALLOC is not set # CONFIG_LV_USE_MICROPYTHON_MALLOC is not set # CONFIG_LV_USE_RTTHREAD_MALLOC is not set # CONFIG_LV_USE_CUSTOM_MALLOC is not set -# CONFIG_LV_USE_BUILTIN_STRING is not set -CONFIG_LV_USE_CLIB_STRING=y +CONFIG_LV_USE_BUILTIN_STRING=y +# CONFIG_LV_USE_CLIB_STRING is not set # CONFIG_LV_USE_CUSTOM_STRING is not set # CONFIG_LV_USE_BUILTIN_SPRINTF is not set CONFIG_LV_USE_CLIB_SPRINTF=y # CONFIG_LV_USE_CUSTOM_SPRINTF is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=64 +CONFIG_LV_MEM_POOL_EXPAND_SIZE_KILOBYTES=0 +CONFIG_LV_MEM_ADR=0x0 # end of Memory Settings # @@ -1704,10 +1902,10 @@ CONFIG_LV_DRAW_SW_SUPPORT_RGB565A8=y CONFIG_LV_DRAW_SW_SUPPORT_RGB888=y CONFIG_LV_DRAW_SW_SUPPORT_XRGB8888=y CONFIG_LV_DRAW_SW_SUPPORT_ARGB8888=y -CONFIG_LV_DRAW_SW_SUPPORT_L8=y -CONFIG_LV_DRAW_SW_SUPPORT_AL88=y -CONFIG_LV_DRAW_SW_SUPPORT_A8=y -CONFIG_LV_DRAW_SW_SUPPORT_I1=y +# CONFIG_LV_DRAW_SW_SUPPORT_L8 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_AL88 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_A8 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_I1 is not set CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT=1 # CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set CONFIG_LV_USE_NATIVE_HELIUM_ASM=y @@ -1735,7 +1933,26 @@ CONFIG_LV_USE_DRAW_SW_ASM=0 # # Logging # -# CONFIG_LV_USE_LOG is not set +CONFIG_LV_USE_LOG=y +# CONFIG_LV_LOG_LEVEL_TRACE is not set +# CONFIG_LV_LOG_LEVEL_INFO is not set +CONFIG_LV_LOG_LEVEL_WARN=y +# CONFIG_LV_LOG_LEVEL_ERROR is not set +# CONFIG_LV_LOG_LEVEL_USER is not set +# CONFIG_LV_LOG_LEVEL_NONE is not set +CONFIG_LV_LOG_LEVEL=2 +CONFIG_LV_LOG_PRINTF=y +# CONFIG_LV_LOG_USE_TIMESTAMP is not set +CONFIG_LV_LOG_USE_FILE_LINE=y +# CONFIG_LV_LOG_TRACE_MEM is not set +# CONFIG_LV_LOG_TRACE_TIMER is not set +CONFIG_LV_LOG_TRACE_INDEV=y +# CONFIG_LV_LOG_TRACE_DISP_REFR is not set +# CONFIG_LV_LOG_TRACE_EVENT is not set +# CONFIG_LV_LOG_TRACE_OBJ_CREATE is not set +# CONFIG_LV_LOG_TRACE_LAYOUT is not set +# CONFIG_LV_LOG_TRACE_ANIM is not set +CONFIG_LV_LOG_TRACE_CACHE=y # end of Logging # @@ -1743,7 +1960,7 @@ CONFIG_LV_USE_DRAW_SW_ASM=0 # CONFIG_LV_USE_ASSERT_NULL=y CONFIG_LV_USE_ASSERT_MALLOC=y -# CONFIG_LV_USE_ASSERT_STYLE is not set +CONFIG_LV_USE_ASSERT_STYLE=y # CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set # CONFIG_LV_USE_ASSERT_OBJ is not set CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" @@ -1791,14 +2008,14 @@ CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y # # CONFIG_LV_FONT_MONTSERRAT_8 is not set # CONFIG_LV_FONT_MONTSERRAT_10 is not set -CONFIG_LV_FONT_MONTSERRAT_12=y +# CONFIG_LV_FONT_MONTSERRAT_12 is not set CONFIG_LV_FONT_MONTSERRAT_14=y -CONFIG_LV_FONT_MONTSERRAT_16=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set # CONFIG_LV_FONT_MONTSERRAT_18 is not set # CONFIG_LV_FONT_MONTSERRAT_20 is not set # CONFIG_LV_FONT_MONTSERRAT_22 is not set # CONFIG_LV_FONT_MONTSERRAT_24 is not set -CONFIG_LV_FONT_MONTSERRAT_26=y +# CONFIG_LV_FONT_MONTSERRAT_26 is not set # CONFIG_LV_FONT_MONTSERRAT_28 is not set # CONFIG_LV_FONT_MONTSERRAT_30 is not set # CONFIG_LV_FONT_MONTSERRAT_32 is not set @@ -1870,11 +2087,7 @@ CONFIG_LV_USE_ARC=y CONFIG_LV_USE_BAR=y CONFIG_LV_USE_BUTTON=y CONFIG_LV_USE_BUTTONMATRIX=y -CONFIG_LV_USE_CALENDAR=y -# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set -CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y -CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y -# CONFIG_LV_USE_CALENDAR_CHINESE is not set +# CONFIG_LV_USE_CALENDAR is not set CONFIG_LV_USE_CANVAS=y CONFIG_LV_USE_CHART=y CONFIG_LV_USE_CHECKBOX=y @@ -1929,7 +2142,10 @@ CONFIG_LV_USE_GRID=y # 3rd Party Libraries # CONFIG_LV_FS_DEFAULT_DRIVE_LETTER=0 -# CONFIG_LV_USE_FS_STDIO is not set +CONFIG_LV_USE_FS_STDIO=y +CONFIG_LV_FS_STDIO_LETTER=65 +CONFIG_LV_FS_STDIO_PATH="" +CONFIG_LV_FS_STDIO_CACHE_SIZE=0 # CONFIG_LV_USE_FS_POSIX is not set # CONFIG_LV_USE_FS_WIN32 is not set # CONFIG_LV_USE_FS_FATFS is not set @@ -1937,7 +2153,7 @@ CONFIG_LV_FS_DEFAULT_DRIVE_LETTER=0 # CONFIG_LV_USE_FS_LITTLEFS is not set # CONFIG_LV_USE_FS_ARDUINO_ESP_LITTLEFS is not set # CONFIG_LV_USE_FS_ARDUINO_SD is not set -# CONFIG_LV_USE_LODEPNG is not set +CONFIG_LV_USE_LODEPNG=y # CONFIG_LV_USE_LIBPNG is not set # CONFIG_LV_USE_BMP is not set # CONFIG_LV_USE_TJPGD is not set @@ -1959,7 +2175,8 @@ CONFIG_LV_FS_DEFAULT_DRIVE_LETTER=0 # Others # # CONFIG_LV_USE_SNAPSHOT is not set -# CONFIG_LV_USE_SYSMON is not set +CONFIG_LV_USE_SYSMON=y +# CONFIG_LV_USE_PERF_MONITOR is not set # CONFIG_LV_USE_PROFILER is not set # CONFIG_LV_USE_MONKEY is not set # CONFIG_LV_USE_GRIDNAV is not set @@ -1995,7 +2212,7 @@ CONFIG_LV_USE_OBSERVER=y # # Examples # -CONFIG_LV_BUILD_EXAMPLES=y +# CONFIG_LV_BUILD_EXAMPLES is not set # end of Examples # @@ -2032,8 +2249,9 @@ CONFIG_FLASHMODE_QIO=y # CONFIG_FLASHMODE_DIO is not set # CONFIG_FLASHMODE_DOUT is not set CONFIG_MONITOR_BAUD=115200 -# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y @@ -2046,9 +2264,9 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EXTERNAL_COEX_ENABLE is not set # CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y @@ -2066,6 +2284,7 @@ CONFIG_ESP32_PHY_MAX_TX_POWER=20 # CONFIG_REDUCE_PHY_TX_POWER is not set # CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_DEFAULT_PSRAM_CLK_IO=30 CONFIG_DEFAULT_PSRAM_CS_IO=26 @@ -2074,8 +2293,8 @@ CONFIG_DEFAULT_PSRAM_CS_IO=26 CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4608 +CONFIG_MAIN_TASK_STACK_SIZE=40000 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set diff --git a/sdkconfig.defaults b/sdkconfig.defaults index 1b6b22f..de20197 100644 --- a/sdkconfig.defaults +++ b/sdkconfig.defaults @@ -11,8 +11,6 @@ CONFIG_SPIRAM_SPEED_80M=y CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y CONFIG_FREERTOS_HZ=1000 -CONFIG_LV_MEM_CUSTOM=y -CONFIG_LV_MEMCPY_MEMSET_STD=y CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y CONFIG_LV_FONT_MONTSERRAT_12=y CONFIG_LV_FONT_MONTSERRAT_16=y diff --git a/sdkconfig.old b/sdkconfig.old index 866262d..1b23dc2 100644 --- a/sdkconfig.old +++ b/sdkconfig.old @@ -1,15 +1,17 @@ # # Automatically generated file. DO NOT EDIT. -# Espressif IoT Development Framework (ESP-IDF) 5.1.4 Project Configuration +# Espressif IoT Development Framework (ESP-IDF) 5.3.1 Project Configuration # CONFIG_SOC_MPU_MIN_REGION_SIZE=0x20000000 CONFIG_SOC_MPU_REGIONS_MAX_NUM=8 CONFIG_SOC_ADC_SUPPORTED=y CONFIG_SOC_UART_SUPPORTED=y CONFIG_SOC_PCNT_SUPPORTED=y +CONFIG_SOC_PHY_SUPPORTED=y CONFIG_SOC_WIFI_SUPPORTED=y CONFIG_SOC_TWAI_SUPPORTED=y CONFIG_SOC_GDMA_SUPPORTED=y +CONFIG_SOC_AHB_GDMA_SUPPORTED=y CONFIG_SOC_GPTIMER_SUPPORTED=y CONFIG_SOC_LCDCAM_SUPPORTED=y CONFIG_SOC_MCPWM_SUPPORTED=y @@ -25,6 +27,7 @@ CONFIG_SOC_CCOMP_TIMER_SUPPORTED=y CONFIG_SOC_ASYNC_MEMCPY_SUPPORTED=y CONFIG_SOC_SUPPORTS_SECURE_DL_MODE=y CONFIG_SOC_EFUSE_KEY_PURPOSE_FIELD=y +CONFIG_SOC_EFUSE_SUPPORTED=y CONFIG_SOC_SDMMC_HOST_SUPPORTED=y CONFIG_SOC_RTC_FAST_MEM_SUPPORTED=y CONFIG_SOC_RTC_SLOW_MEM_SUPPORTED=y @@ -50,6 +53,15 @@ CONFIG_SOC_SECURE_BOOT_SUPPORTED=y CONFIG_SOC_MEMPROT_SUPPORTED=y CONFIG_SOC_TOUCH_SENSOR_SUPPORTED=y CONFIG_SOC_BOD_SUPPORTED=y +CONFIG_SOC_CLK_TREE_SUPPORTED=y +CONFIG_SOC_MPU_SUPPORTED=y +CONFIG_SOC_WDT_SUPPORTED=y +CONFIG_SOC_SPI_FLASH_SUPPORTED=y +CONFIG_SOC_RNG_SUPPORTED=y +CONFIG_SOC_LIGHT_SLEEP_SUPPORTED=y +CONFIG_SOC_DEEP_SLEEP_SUPPORTED=y +CONFIG_SOC_LP_PERIPH_SHARE_INTERRUPT=y +CONFIG_SOC_PM_SUPPORTED=y CONFIG_SOC_XTAL_SUPPORT_40M=y CONFIG_SOC_APPCPU_HAS_CLOCK_GATING_BUG=y CONFIG_SOC_ADC_RTC_CTRL_SUPPORTED=y @@ -68,12 +80,14 @@ CONFIG_SOC_ADC_DIGI_MAX_BITWIDTH=12 CONFIG_SOC_ADC_DIGI_RESULT_BYTES=4 CONFIG_SOC_ADC_DIGI_DATA_BYTES_PER_CONV=4 CONFIG_SOC_ADC_DIGI_IIR_FILTER_NUM=2 +CONFIG_SOC_ADC_DIGI_MONITOR_NUM=2 CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_HIGH=83333 CONFIG_SOC_ADC_SAMPLE_FREQ_THRES_LOW=611 CONFIG_SOC_ADC_RTC_MIN_BITWIDTH=12 CONFIG_SOC_ADC_RTC_MAX_BITWIDTH=12 CONFIG_SOC_ADC_CALIBRATION_V1_SUPPORTED=y CONFIG_SOC_ADC_SELF_HW_CALI_SUPPORTED=y +CONFIG_SOC_ADC_SHARED_POWER=y CONFIG_SOC_APB_BACKUP_DMA=y CONFIG_SOC_BROWNOUT_RESET_SUPPORTED=y CONFIG_SOC_CACHE_WRITEBACK_SUPPORTED=y @@ -81,15 +95,18 @@ CONFIG_SOC_CACHE_FREEZE_SUPPORTED=y CONFIG_SOC_CPU_CORES_NUM=2 CONFIG_SOC_CPU_INTR_NUM=32 CONFIG_SOC_CPU_HAS_FPU=y +CONFIG_SOC_HP_CPU_HAS_MULTIPLE_CORES=y CONFIG_SOC_CPU_BREAKPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINTS_NUM=2 CONFIG_SOC_CPU_WATCHPOINT_MAX_REGION_SIZE=64 CONFIG_SOC_DS_SIGNATURE_MAX_BIT_LEN=4096 CONFIG_SOC_DS_KEY_PARAM_MD_IV_LENGTH=16 CONFIG_SOC_DS_KEY_CHECK_MAX_WAIT_US=1100 -CONFIG_SOC_GDMA_GROUPS=y +CONFIG_SOC_AHB_GDMA_VERSION=1 +CONFIG_SOC_GDMA_NUM_GROUPS_MAX=1 CONFIG_SOC_GDMA_PAIRS_PER_GROUP=5 -CONFIG_SOC_GDMA_SUPPORT_PSRAM=y +CONFIG_SOC_GDMA_PAIRS_PER_GROUP_MAX=5 +CONFIG_SOC_AHB_GDMA_SUPPORT_PSRAM=y CONFIG_SOC_GPIO_PORT=1 CONFIG_SOC_GPIO_PIN_COUNT=49 CONFIG_SOC_GPIO_SUPPORT_PIN_GLITCH_FILTER=y @@ -97,17 +114,25 @@ CONFIG_SOC_GPIO_FILTER_CLK_SUPPORT_APB=y CONFIG_SOC_GPIO_SUPPORT_RTC_INDEPENDENT=y CONFIG_SOC_GPIO_SUPPORT_FORCE_HOLD=y CONFIG_SOC_GPIO_VALID_GPIO_MASK=0x1FFFFFFFFFFFF +CONFIG_SOC_GPIO_IN_RANGE_MAX=48 +CONFIG_SOC_GPIO_OUT_RANGE_MAX=48 CONFIG_SOC_GPIO_VALID_DIGITAL_IO_PAD_MASK=0x0001FFFFFC000000 +CONFIG_SOC_GPIO_CLOCKOUT_BY_IO_MUX=y +CONFIG_SOC_GPIO_CLOCKOUT_CHANNEL_NUM=3 CONFIG_SOC_DEDIC_GPIO_OUT_CHANNELS_NUM=8 CONFIG_SOC_DEDIC_GPIO_IN_CHANNELS_NUM=8 CONFIG_SOC_DEDIC_GPIO_OUT_AUTO_ENABLE=y CONFIG_SOC_I2C_NUM=2 +CONFIG_SOC_HP_I2C_NUM=2 CONFIG_SOC_I2C_FIFO_LEN=32 CONFIG_SOC_I2C_CMD_REG_NUM=8 CONFIG_SOC_I2C_SUPPORT_SLAVE=y CONFIG_SOC_I2C_SUPPORT_HW_CLR_BUS=y CONFIG_SOC_I2C_SUPPORT_XTAL=y CONFIG_SOC_I2C_SUPPORT_RTC=y +CONFIG_SOC_I2C_SUPPORT_10BIT_ADDR=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_BROADCAST=y +CONFIG_SOC_I2C_SLAVE_SUPPORT_I2CRAM_ACCESS=y CONFIG_SOC_I2S_NUM=2 CONFIG_SOC_I2S_HW_VERSION_2=y CONFIG_SOC_I2S_SUPPORTS_XTAL=y @@ -188,6 +213,10 @@ CONFIG_SOC_SPI_PERIPH_SUPPORT_CONTROL_DUMMY_OUT=y CONFIG_SOC_MEMSPI_IS_INDEPENDENT=y CONFIG_SOC_SPI_MAX_PRE_DIVIDER=16 CONFIG_SOC_SPI_SUPPORT_OCT=y +CONFIG_SOC_SPI_SCT_SUPPORTED=y +CONFIG_SOC_SPI_SCT_REG_NUM=14 +CONFIG_SOC_SPI_SCT_BUFFER_NUM_MAX=y +CONFIG_SOC_SPI_SCT_CONF_BITLEN_MAX=0x3FFFA CONFIG_SOC_MEMSPI_SRC_FREQ_120M=y CONFIG_SOC_MEMSPI_SRC_FREQ_80M_SUPPORTED=y CONFIG_SOC_MEMSPI_SRC_FREQ_40M_SUPPORTED=y @@ -207,18 +236,21 @@ CONFIG_SOC_TIMER_GROUP_COUNTER_BIT_WIDTH=54 CONFIG_SOC_TIMER_GROUP_SUPPORT_XTAL=y CONFIG_SOC_TIMER_GROUP_SUPPORT_APB=y CONFIG_SOC_TIMER_GROUP_TOTAL_TIMERS=4 -CONFIG_SOC_TOUCH_VERSION_2=y +CONFIG_SOC_TOUCH_SENSOR_VERSION=2 CONFIG_SOC_TOUCH_SENSOR_NUM=15 +CONFIG_SOC_TOUCH_SUPPORT_SLEEP_WAKEUP=y +CONFIG_SOC_TOUCH_SUPPORT_WATERPROOF=y +CONFIG_SOC_TOUCH_SUPPORT_PROX_SENSING=y CONFIG_SOC_TOUCH_PROXIMITY_CHANNEL_NUM=3 CONFIG_SOC_TOUCH_PROXIMITY_MEAS_DONE_SUPPORTED=y -CONFIG_SOC_TOUCH_PAD_THRESHOLD_MAX=0x1FFFFF -CONFIG_SOC_TOUCH_PAD_MEASURE_WAIT_MAX=0xFF +CONFIG_SOC_TOUCH_SAMPLE_CFG_NUM=1 CONFIG_SOC_TWAI_CONTROLLER_NUM=1 CONFIG_SOC_TWAI_CLK_SUPPORT_APB=y CONFIG_SOC_TWAI_BRP_MIN=2 CONFIG_SOC_TWAI_BRP_MAX=16384 CONFIG_SOC_TWAI_SUPPORTS_RX_STATUS=y CONFIG_SOC_UART_NUM=3 +CONFIG_SOC_UART_HP_NUM=3 CONFIG_SOC_UART_FIFO_LEN=128 CONFIG_SOC_UART_BITRATE_MAX=5000000 CONFIG_SOC_UART_SUPPORT_FSM_TX_WAIT_SEND=y @@ -226,7 +258,6 @@ CONFIG_SOC_UART_SUPPORT_WAKEUP_INT=y CONFIG_SOC_UART_SUPPORT_APB_CLK=y CONFIG_SOC_UART_SUPPORT_RTC_CLK=y CONFIG_SOC_UART_SUPPORT_XTAL_CLK=y -CONFIG_SOC_UART_REQUIRE_CORE_RESET=y CONFIG_SOC_USB_OTG_PERIPH_NUM=1 CONFIG_SOC_SHA_DMA_MAX_BUFFER_SIZE=3968 CONFIG_SOC_SHA_SUPPORT_DMA=y @@ -240,6 +271,8 @@ CONFIG_SOC_SHA_SUPPORT_SHA512=y CONFIG_SOC_SHA_SUPPORT_SHA512_224=y CONFIG_SOC_SHA_SUPPORT_SHA512_256=y CONFIG_SOC_SHA_SUPPORT_SHA512_T=y +CONFIG_SOC_MPI_MEM_BLOCKS_NUM=4 +CONFIG_SOC_MPI_OPERATIONS_NUM=3 CONFIG_SOC_RSA_MAX_BIT_LEN=4096 CONFIG_SOC_AES_SUPPORT_DMA=y CONFIG_SOC_AES_GDMA=y @@ -293,14 +326,17 @@ CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_SUSPEND=y CONFIG_SOC_SPI_MEM_SUPPORT_AUTO_RESUME=y CONFIG_SOC_SPI_MEM_SUPPORT_SW_SUSPEND=y CONFIG_SOC_SPI_MEM_SUPPORT_OPI_MODE=y -CONFIG_SOC_SPI_MEM_SUPPORT_TIME_TUNING=y +CONFIG_SOC_SPI_MEM_SUPPORT_TIMING_TUNING=y CONFIG_SOC_SPI_MEM_SUPPORT_CONFIG_GPIO_BY_EFUSE=y CONFIG_SOC_SPI_MEM_SUPPORT_WRAP=y +CONFIG_SOC_MEMSPI_TIMING_TUNING_BY_MSPI_DELAY=y +CONFIG_SOC_MEMSPI_CORE_CLK_SHARED_WITH_PSRAM=y CONFIG_SOC_COEX_HW_PTI=y CONFIG_SOC_EXTERNAL_COEX_LEADER_TX_LINE=y CONFIG_SOC_SDMMC_USE_GPIO_MATRIX=y CONFIG_SOC_SDMMC_NUM_SLOTS=2 CONFIG_SOC_SDMMC_SUPPORT_XTAL_CLOCK=y +CONFIG_SOC_SDMMC_DELAY_PHASE_NUM=4 CONFIG_SOC_TEMPERATURE_SENSOR_SUPPORT_FAST_RC=y CONFIG_SOC_WIFI_HW_TSF=y CONFIG_SOC_WIFI_FTM_SUPPORT=y @@ -318,9 +354,11 @@ CONFIG_SOC_BLUFI_SUPPORTED=y CONFIG_SOC_ULP_HAS_ADC=y CONFIG_SOC_PHY_COMBO_MODULE=y CONFIG_IDF_CMAKE=y +CONFIG_IDF_TOOLCHAIN="gcc" CONFIG_IDF_TARGET_ARCH_XTENSA=y CONFIG_IDF_TARGET_ARCH="xtensa" CONFIG_IDF_TARGET="esp32s3" +CONFIG_IDF_INIT_VERSION="5.3.1" CONFIG_IDF_TARGET_ESP32S3=y CONFIG_IDF_FIRMWARE_CHIP_ID=0x0009 @@ -339,6 +377,14 @@ CONFIG_APP_BUILD_USE_FLASH_SECTIONS=y # # Bootloader config # + +# +# Bootloader manager +# +CONFIG_BOOTLOADER_COMPILE_TIME_DATE=y +CONFIG_BOOTLOADER_PROJECT_VER=1 +# end of Bootloader manager + CONFIG_BOOTLOADER_OFFSET_IN_FLASH=0x0 CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_SIZE=y # CONFIG_BOOTLOADER_COMPILER_OPTIMIZATION_DEBUG is not set @@ -411,12 +457,17 @@ CONFIG_ESP_ROM_NEEDS_SWSETUP_WORKAROUND=y CONFIG_ESP_ROM_HAS_LAYOUT_TABLE=y CONFIG_ESP_ROM_HAS_SPI_FLASH=y CONFIG_ESP_ROM_HAS_ETS_PRINTF_BUG=y +CONFIG_ESP_ROM_HAS_NEWLIB=y CONFIG_ESP_ROM_HAS_NEWLIB_NANO_FORMAT=y +CONFIG_ESP_ROM_HAS_NEWLIB_32BIT_TIME=y CONFIG_ESP_ROM_NEEDS_SET_CACHE_MMU_SIZE=y CONFIG_ESP_ROM_RAM_APP_NEEDS_MMU_INIT=y CONFIG_ESP_ROM_HAS_FLASH_COUNT_PAGES_BUG=y CONFIG_ESP_ROM_HAS_CACHE_SUSPEND_WAITI_BUG=y CONFIG_ESP_ROM_HAS_CACHE_WRITEBACK_BUG=y +CONFIG_ESP_ROM_HAS_SW_FLOAT=y +CONFIG_ESP_ROM_HAS_VERSION=y +CONFIG_ESP_ROM_SUPPORT_DEEP_SLEEP_WAKEUP_STUB=y # # Boot ROM Behavior @@ -447,13 +498,13 @@ CONFIG_ESPTOOLPY_FLASHFREQ_80M_DEFAULT=y CONFIG_ESPTOOLPY_FLASHFREQ="80m" # CONFIG_ESPTOOLPY_FLASHSIZE_1MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_2MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE_4MB=y +# CONFIG_ESPTOOLPY_FLASHSIZE_4MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_8MB is not set -# CONFIG_ESPTOOLPY_FLASHSIZE_16MB is not set +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y # CONFIG_ESPTOOLPY_FLASHSIZE_32MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_64MB is not set # CONFIG_ESPTOOLPY_FLASHSIZE_128MB is not set -CONFIG_ESPTOOLPY_FLASHSIZE="4MB" +CONFIG_ESPTOOLPY_FLASHSIZE="16MB" # CONFIG_ESPTOOLPY_HEADER_FLASHSIZE_UPDATE is not set CONFIG_ESPTOOLPY_BEFORE_RESET=y # CONFIG_ESPTOOLPY_BEFORE_NORESET is not set @@ -500,9 +551,9 @@ CONFIG_ESP_WIFI_AUTH_WPA2_PSK=y # # Compiler options # -# CONFIG_COMPILER_OPTIMIZATION_DEFAULT is not set +CONFIG_COMPILER_OPTIMIZATION_DEBUG=y # CONFIG_COMPILER_OPTIMIZATION_SIZE is not set -CONFIG_COMPILER_OPTIMIZATION_PERF=y +# CONFIG_COMPILER_OPTIMIZATION_PERF is not set # CONFIG_COMPILER_OPTIMIZATION_NONE is not set CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE=y # CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_SILENT is not set @@ -519,7 +570,12 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # CONFIG_COMPILER_STACK_CHECK_MODE_ALL is not set # CONFIG_COMPILER_WARN_WRITE_STRINGS is not set # CONFIG_COMPILER_DISABLE_GCC12_WARNINGS is not set +# CONFIG_COMPILER_DISABLE_GCC13_WARNINGS is not set # CONFIG_COMPILER_DUMP_RTL_FILES is not set +CONFIG_COMPILER_RT_LIB_GCCLIB=y +CONFIG_COMPILER_RT_LIB_NAME="gcc" +# CONFIG_COMPILER_ORPHAN_SECTIONS_WARNING is not set +CONFIG_COMPILER_ORPHAN_SECTIONS_PLACE=y # end of Compiler options # @@ -531,7 +587,14 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # # -# Legacy ADC Configuration +# TWAI Configuration +# +# CONFIG_TWAI_ISR_IN_IRAM is not set +CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y +# end of TWAI Configuration + +# +# Legacy ADC Driver Configuration # # CONFIG_ADC_SUPPRESS_DEPRECATE_WARN is not set @@ -540,100 +603,49 @@ CONFIG_COMPILER_STACK_CHECK_MODE_NONE=y # # CONFIG_ADC_CALI_SUPPRESS_DEPRECATE_WARN is not set # end of Legacy ADC Calibration Configuration -# end of Legacy ADC Configuration +# end of Legacy ADC Driver Configuration # -# SPI Configuration +# Legacy MCPWM Driver Configurations # -# CONFIG_SPI_MASTER_IN_IRAM is not set -CONFIG_SPI_MASTER_ISR_IN_IRAM=y -# CONFIG_SPI_SLAVE_IN_IRAM is not set -CONFIG_SPI_SLAVE_ISR_IN_IRAM=y -# end of SPI Configuration +# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy MCPWM Driver Configurations # -# TWAI Configuration +# Legacy Timer Group Driver Configurations # -# CONFIG_TWAI_ISR_IN_IRAM is not set -CONFIG_TWAI_ERRATA_FIX_LISTEN_ONLY_DOM=y -# end of TWAI Configuration +# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy Timer Group Driver Configurations # -# Temperature sensor Configuration +# Legacy RMT Driver Configurations +# +# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy RMT Driver Configurations + +# +# Legacy I2S Driver Configurations +# +# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy I2S Driver Configurations + +# +# Legacy PCNT Driver Configurations +# +# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy PCNT Driver Configurations + +# +# Legacy SDM Driver Configurations +# +# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set +# end of Legacy SDM Driver Configurations + +# +# Legacy Temperature Sensor Driver Configurations # # CONFIG_TEMP_SENSOR_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set -# end of Temperature sensor Configuration - -# -# UART Configuration -# -# CONFIG_UART_ISR_IN_IRAM is not set -# end of UART Configuration - -# -# GPIO Configuration -# -# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set -# end of GPIO Configuration - -# -# Sigma Delta Modulator Configuration -# -# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_SDM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_SDM_ENABLE_DEBUG_LOG is not set -# end of Sigma Delta Modulator Configuration - -# -# GPTimer Configuration -# -CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y -# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set -# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set -# CONFIG_GPTIMER_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set -# end of GPTimer Configuration - -# -# PCNT Configuration -# -# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set -# CONFIG_PCNT_ISR_IRAM_SAFE is not set -# CONFIG_PCNT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set -# end of PCNT Configuration - -# -# RMT Configuration -# -# CONFIG_RMT_ISR_IRAM_SAFE is not set -# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set -# CONFIG_RMT_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_RMT_ENABLE_DEBUG_LOG is not set -# end of RMT Configuration - -# -# MCPWM Configuration -# -# CONFIG_MCPWM_ISR_IRAM_SAFE is not set -# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set -# CONFIG_MCPWM_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set -# end of MCPWM Configuration - -# -# I2S Configuration -# -# CONFIG_I2S_ISR_IRAM_SAFE is not set -# CONFIG_I2S_SUPPRESS_DEPRECATE_WARN is not set -# CONFIG_I2S_ENABLE_DEBUG_LOG is not set -# end of I2S Configuration - -# -# USB Serial/JTAG Configuration -# -# end of USB Serial/JTAG Configuration +# end of Legacy Temperature Sensor Driver Configurations # end of Driver Configurations # @@ -644,9 +656,23 @@ CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y CONFIG_EFUSE_MAX_BLK_LEN=256 # end of eFuse Bit Manager +# +# ESP-TLS +# +CONFIG_ESP_TLS_USING_MBEDTLS=y +CONFIG_ESP_TLS_USE_DS_PERIPHERAL=y +# CONFIG_ESP_TLS_CLIENT_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER_SESSION_TICKETS is not set +# CONFIG_ESP_TLS_SERVER_CERT_SELECT_HOOK is not set +# CONFIG_ESP_TLS_SERVER_MIN_AUTH_MODE_OPTIONAL is not set +# CONFIG_ESP_TLS_PSK_VERIFICATION is not set +# CONFIG_ESP_TLS_INSECURE is not set +# end of ESP-TLS + # # Wireless Coexistence # +CONFIG_ESP_COEX_ENABLED=y # CONFIG_ESP_COEX_EXTERNAL_COEXIST_ENABLE is not set # end of Wireless Coexistence @@ -656,6 +682,99 @@ CONFIG_EFUSE_MAX_BLK_LEN=256 CONFIG_ESP_ERR_TO_NAME_LOOKUP=y # end of Common ESP-related +# +# ESP-Driver:GPIO Configurations +# +# CONFIG_GPIO_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:GPIO Configurations + +# +# ESP-Driver:GPTimer Configurations +# +CONFIG_GPTIMER_ISR_HANDLER_IN_IRAM=y +# CONFIG_GPTIMER_CTRL_FUNC_IN_IRAM is not set +# CONFIG_GPTIMER_ISR_IRAM_SAFE is not set +# CONFIG_GPTIMER_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:GPTimer Configurations + +# +# ESP-Driver:I2C Configurations +# +# CONFIG_I2C_ISR_IRAM_SAFE is not set +# CONFIG_I2C_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2C Configurations + +# +# ESP-Driver:I2S Configurations +# +# CONFIG_I2S_ISR_IRAM_SAFE is not set +# CONFIG_I2S_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:I2S Configurations + +# +# ESP-Driver:LEDC Configurations +# +# CONFIG_LEDC_CTRL_FUNC_IN_IRAM is not set +# end of ESP-Driver:LEDC Configurations + +# +# ESP-Driver:MCPWM Configurations +# +# CONFIG_MCPWM_ISR_IRAM_SAFE is not set +# CONFIG_MCPWM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_MCPWM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:MCPWM Configurations + +# +# ESP-Driver:PCNT Configurations +# +# CONFIG_PCNT_CTRL_FUNC_IN_IRAM is not set +# CONFIG_PCNT_ISR_IRAM_SAFE is not set +# CONFIG_PCNT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:PCNT Configurations + +# +# ESP-Driver:RMT Configurations +# +# CONFIG_RMT_ISR_IRAM_SAFE is not set +# CONFIG_RMT_RECV_FUNC_IN_IRAM is not set +# CONFIG_RMT_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:RMT Configurations + +# +# ESP-Driver:Sigma Delta Modulator Configurations +# +# CONFIG_SDM_CTRL_FUNC_IN_IRAM is not set +# CONFIG_SDM_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:Sigma Delta Modulator Configurations + +# +# ESP-Driver:SPI Configurations +# +# CONFIG_SPI_MASTER_IN_IRAM is not set +CONFIG_SPI_MASTER_ISR_IN_IRAM=y +# CONFIG_SPI_SLAVE_IN_IRAM is not set +CONFIG_SPI_SLAVE_ISR_IN_IRAM=y +# end of ESP-Driver:SPI Configurations + +# +# ESP-Driver:Temperature Sensor Configurations +# +# CONFIG_TEMP_SENSOR_ENABLE_DEBUG_LOG is not set +# end of ESP-Driver:Temperature Sensor Configurations + +# +# ESP-Driver:UART Configurations +# +# CONFIG_UART_ISR_IN_IRAM is not set +# end of ESP-Driver:UART Configurations + +# +# ESP-Driver:USB Serial/JTAG Configuration +# +CONFIG_USJ_ENABLE_USB_SERIAL_JTAG=y +# end of ESP-Driver:USB Serial/JTAG Configuration + # # Event Loop Library # @@ -664,6 +783,15 @@ CONFIG_ESP_EVENT_POST_FROM_ISR=y CONFIG_ESP_EVENT_POST_FROM_IRAM_ISR=y # end of Event Loop Library +# +# ESP HTTP client +# +# CONFIG_ESP_HTTP_CLIENT_ENABLE_HTTPS is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_BASIC_AUTH is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_DIGEST_AUTH is not set +# CONFIG_ESP_HTTP_CLIENT_ENABLE_CUSTOM_TRANSPORT is not set +# end of ESP HTTP client + # # Hardware Settings # @@ -692,6 +820,7 @@ CONFIG_ESP_MAC_ADDR_UNIVERSE_WIFI_AP=y CONFIG_ESP_MAC_ADDR_UNIVERSE_BT=y CONFIG_ESP_MAC_ADDR_UNIVERSE_ETH=y CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES_FOUR=y +CONFIG_ESP_MAC_UNIVERSAL_MAC_ADDRESSES=4 # CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_TWO is not set CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES_FOUR=y CONFIG_ESP32S3_UNIVERSAL_MAC_ADDRESSES=4 @@ -707,9 +836,9 @@ CONFIG_ESP_SLEEP_MSPI_NEED_ALL_IO_PU=y CONFIG_ESP_SLEEP_RTC_BUS_ISO_WORKAROUND=y CONFIG_ESP_SLEEP_GPIO_RESET_WORKAROUND=y CONFIG_ESP_SLEEP_WAIT_FLASH_READY_EXTRA_DELAY=2000 +# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # CONFIG_ESP_SLEEP_DEBUG is not set CONFIG_ESP_SLEEP_GPIO_ENABLE_INTERNAL_RESISTORS=y -# CONFIG_ESP_SLEEP_CACHE_SAFE_ASSERTION is not set # end of Sleep Config # @@ -729,11 +858,12 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y # end of Peripheral Control # -# GDMA Configuration +# GDMA Configurations # -# CONFIG_GDMA_CTRL_FUNC_IN_IRAM is not set +CONFIG_GDMA_CTRL_FUNC_IN_IRAM=y # CONFIG_GDMA_ISR_IRAM_SAFE is not set -# end of GDMA Configuration +# CONFIG_GDMA_ENABLE_DEBUG_LOG is not set +# end of GDMA Configurations # # Main XTAL Config @@ -741,6 +871,8 @@ CONFIG_PERIPH_CTRL_FUNC_IN_IRAM=y CONFIG_XTAL_FREQ_40=y CONFIG_XTAL_FREQ=40 # end of Main XTAL Config + +CONFIG_ESP_SPI_BUS_LOCK_ISR_FUNCS_IN_IRAM=y # end of Hardware Settings # @@ -781,6 +913,7 @@ CONFIG_ESP_NETIF_USES_TCPIP_WITH_BSD_API=y # # PHY # +CONFIG_ESP_PHY_ENABLED=y CONFIG_ESP_PHY_CALIBRATION_AND_DATA_STORAGE=y # CONFIG_ESP_PHY_INIT_DATA_IN_PARTITION is not set CONFIG_ESP_PHY_MAX_WIFI_TX_POWER=20 @@ -800,7 +933,7 @@ CONFIG_ESP_PHY_CALIBRATION_MODE=0 # # CONFIG_PM_ENABLE is not set CONFIG_PM_POWER_DOWN_CPU_IN_LIGHT_SLEEP=y -CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y +CONFIG_PM_RESTORE_CACHE_TAGMEM_AFTER_LIGHT_SLEEP=y # end of Power Management # @@ -818,11 +951,13 @@ CONFIG_SPIRAM_TYPE_AUTO=y CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY=y CONFIG_SPIRAM_CLK_IO=30 CONFIG_SPIRAM_CS_IO=26 +# CONFIG_SPIRAM_XIP_FROM_PSRAM is not set CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y CONFIG_SPIRAM_RODATA=y CONFIG_SPIRAM_SPEED_80M=y # CONFIG_SPIRAM_SPEED_40M is not set CONFIG_SPIRAM_SPEED=80 +# CONFIG_SPIRAM_ECC_ENABLE is not set CONFIG_SPIRAM_BOOT_INIT=y # CONFIG_SPIRAM_IGNORE_NOTFOUND is not set # CONFIG_SPIRAM_USE_MEMMAP is not set @@ -833,7 +968,6 @@ CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL=16384 # CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP is not set CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL=32768 # CONFIG_SPIRAM_ALLOW_BSS_SEG_EXTERNAL_MEMORY is not set -# CONFIG_SPIRAM_ECC_ENABLE is not set # end of SPI RAM config # end of ESP PSRAM @@ -893,8 +1027,6 @@ CONFIG_ESP32S3_TRACEMEM_RESERVE_DRAM=0x0 # CONFIG_ESP_SYSTEM_PANIC_PRINT_HALT is not set CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set -# CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set -# CONFIG_ESP_SYSTEM_GDBSTUB_RUNTIME is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y @@ -907,8 +1039,8 @@ CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y # end of Memory protection CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=4608 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=40000 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y # CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set @@ -923,8 +1055,8 @@ CONFIG_ESP_CONSOLE_UART_DEFAULT=y CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG=y CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG_ENABLED=y CONFIG_ESP_CONSOLE_UART=y -CONFIG_ESP_CONSOLE_MULTIPLE_UART=y CONFIG_ESP_CONSOLE_UART_NUM=0 +CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 @@ -967,7 +1099,7 @@ CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) # -# High resolution timer (esp_timer) +# ESP Timer (High Resolution Timer) # # CONFIG_ESP_TIMER_PROFILING is not set CONFIG_ESP_TIME_FUNCS_USE_RTC_TIMER=y @@ -977,11 +1109,10 @@ CONFIG_ESP_TIMER_INTERRUPT_LEVEL=1 # CONFIG_ESP_TIMER_SHOW_EXPERIMENTAL is not set CONFIG_ESP_TIMER_TASK_AFFINITY=0x0 CONFIG_ESP_TIMER_TASK_AFFINITY_CPU0=y -CONFIG_ESP_TIMER_ISR_AFFINITY=0x1 CONFIG_ESP_TIMER_ISR_AFFINITY_CPU0=y # CONFIG_ESP_TIMER_SUPPORTS_ISR_DISPATCH_METHOD is not set CONFIG_ESP_TIMER_IMPL_SYSTIMER=y -# end of High resolution timer (esp_timer) +# end of ESP Timer (High Resolution Timer) # # Wi-Fi @@ -1016,6 +1147,9 @@ CONFIG_ESP_WIFI_ENABLE_SAE_PK=y CONFIG_ESP_WIFI_SOFTAP_SAE_SUPPORT=y CONFIG_ESP_WIFI_ENABLE_WPA3_OWE_STA=y # CONFIG_ESP_WIFI_SLP_IRAM_OPT is not set +CONFIG_ESP_WIFI_SLP_DEFAULT_MIN_ACTIVE_TIME=50 +CONFIG_ESP_WIFI_SLP_DEFAULT_MAX_ACTIVE_TIME=10 +CONFIG_ESP_WIFI_SLP_DEFAULT_WAIT_BROADCAST_DATA_TIME=15 # CONFIG_ESP_WIFI_FTM_ENABLE is not set CONFIG_ESP_WIFI_STA_DISCONNECTED_PM_ENABLE=y # CONFIG_ESP_WIFI_GCMP_SUPPORT is not set @@ -1046,6 +1180,49 @@ CONFIG_ESP_WIFI_ENTERPRISE_SUPPORT=y # CONFIG_ESP_WIFI_ENT_FREE_DYNAMIC_BUFFER is not set # end of Wi-Fi +# +# FAT Filesystem support +# +CONFIG_FATFS_VOLUME_COUNT=2 +CONFIG_FATFS_LFN_NONE=y +# CONFIG_FATFS_LFN_HEAP is not set +# CONFIG_FATFS_LFN_STACK is not set +# CONFIG_FATFS_SECTOR_512 is not set +CONFIG_FATFS_SECTOR_4096=y +# CONFIG_FATFS_CODEPAGE_DYNAMIC is not set +CONFIG_FATFS_CODEPAGE_437=y +# CONFIG_FATFS_CODEPAGE_720 is not set +# CONFIG_FATFS_CODEPAGE_737 is not set +# CONFIG_FATFS_CODEPAGE_771 is not set +# CONFIG_FATFS_CODEPAGE_775 is not set +# CONFIG_FATFS_CODEPAGE_850 is not set +# CONFIG_FATFS_CODEPAGE_852 is not set +# CONFIG_FATFS_CODEPAGE_855 is not set +# CONFIG_FATFS_CODEPAGE_857 is not set +# CONFIG_FATFS_CODEPAGE_860 is not set +# CONFIG_FATFS_CODEPAGE_861 is not set +# CONFIG_FATFS_CODEPAGE_862 is not set +# CONFIG_FATFS_CODEPAGE_863 is not set +# CONFIG_FATFS_CODEPAGE_864 is not set +# CONFIG_FATFS_CODEPAGE_865 is not set +# CONFIG_FATFS_CODEPAGE_866 is not set +# CONFIG_FATFS_CODEPAGE_869 is not set +# CONFIG_FATFS_CODEPAGE_932 is not set +# CONFIG_FATFS_CODEPAGE_936 is not set +# CONFIG_FATFS_CODEPAGE_949 is not set +# CONFIG_FATFS_CODEPAGE_950 is not set +CONFIG_FATFS_CODEPAGE=437 +CONFIG_FATFS_FS_LOCK=0 +CONFIG_FATFS_TIMEOUT_MS=10000 +CONFIG_FATFS_PER_FILE_CACHE=y +CONFIG_FATFS_ALLOC_PREFER_EXTRAM=y +# CONFIG_FATFS_USE_FASTSEEK is not set +CONFIG_FATFS_VFS_FSTAT_BLKSIZE=0 +# CONFIG_FATFS_IMMEDIATE_FSYNC is not set +# CONFIG_FATFS_USE_LABEL is not set +CONFIG_FATFS_LINK_LOCK=y +# end of FAT Filesystem support + # # FreeRTOS # @@ -1065,20 +1242,29 @@ CONFIG_FREERTOS_IDLE_TASK_STACKSIZE=1536 # CONFIG_FREERTOS_USE_TICK_HOOK is not set CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 # CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY is not set +CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set +# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set +CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y +CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=2048 CONFIG_FREERTOS_TIMER_QUEUE_LENGTH=10 CONFIG_FREERTOS_QUEUE_REGISTRY_SIZE=0 CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=1 # CONFIG_FREERTOS_USE_TRACE_FACILITY is not set +# CONFIG_FREERTOS_USE_LIST_DATA_INTEGRITY_CHECK_BYTES is not set # CONFIG_FREERTOS_GENERATE_RUN_TIME_STATS is not set +# CONFIG_FREERTOS_USE_APPLICATION_TASK_TAG is not set # end of Kernel # # Port # +CONFIG_FREERTOS_TASK_FUNCTION_WRAPPER=y # CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK is not set CONFIG_FREERTOS_TLSP_DELETION_CALLBACKS=y +# CONFIG_FREERTOS_TASK_PRE_DELETION_HOOK is not set # CONFIG_FREERTOS_ENABLE_STATIC_TASK_CLEAN_UP is not set CONFIG_FREERTOS_CHECK_MUTEX_GIVEN_BY_OWNER=y CONFIG_FREERTOS_ISR_STACKSIZE=1536 @@ -1088,14 +1274,16 @@ CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL1=y # CONFIG_FREERTOS_CORETIMER_SYSTIMER_LVL3 is not set CONFIG_FREERTOS_SYSTICK_USES_SYSTIMER=y # CONFIG_FREERTOS_PLACE_FUNCTIONS_INTO_FLASH is not set -# CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH is not set # CONFIG_FREERTOS_CHECK_PORT_CRITICAL_COMPLIANCE is not set -CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y # end of Port +CONFIG_FREERTOS_PORT=y CONFIG_FREERTOS_NO_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y +CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y +CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y +CONFIG_FREERTOS_NUMBER_OF_CORES=2 # end of FreeRTOS # @@ -1117,10 +1305,13 @@ CONFIG_HAL_SPI_SLAVE_FUNC_IN_IRAM=y CONFIG_HEAP_POISONING_DISABLED=y # CONFIG_HEAP_POISONING_LIGHT is not set # CONFIG_HEAP_POISONING_COMPREHENSIVE is not set -CONFIG_HEAP_TRACING_OFF=y +# CONFIG_HEAP_TRACING_OFF is not set # CONFIG_HEAP_TRACING_STANDALONE is not set -# CONFIG_HEAP_TRACING_TOHOST is not set +CONFIG_HEAP_TRACING_TOHOST=y +CONFIG_HEAP_TRACING=y +CONFIG_HEAP_TRACING_STACK_DEPTH=2 # CONFIG_HEAP_USE_HOOKS is not set +# CONFIG_HEAP_TASK_TRACKING is not set # CONFIG_HEAP_ABORT_WHEN_ALLOCATION_FAILS is not set # CONFIG_HEAP_PLACE_FUNCTION_INTO_FLASH is not set # end of Heap memory debugging @@ -1139,6 +1330,7 @@ CONFIG_LOG_MAXIMUM_EQUALS_DEFAULT=y # CONFIG_LOG_MAXIMUM_LEVEL_DEBUG is not set # CONFIG_LOG_MAXIMUM_LEVEL_VERBOSE is not set CONFIG_LOG_MAXIMUM_LEVEL=3 +# CONFIG_LOG_MASTER_LEVEL is not set CONFIG_LOG_COLORS=y CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # CONFIG_LOG_TIMESTAMP_SOURCE_SYSTEM is not set @@ -1147,6 +1339,7 @@ CONFIG_LOG_TIMESTAMP_SOURCE_RTOS=y # # LWIP # +CONFIG_LWIP_ENABLE=y CONFIG_LWIP_LOCAL_HOSTNAME="espressif" # CONFIG_LWIP_NETIF_API is not set CONFIG_LWIP_TCPIP_TASK_PRIO=18 @@ -1193,6 +1386,7 @@ CONFIG_LWIP_DHCP_COARSE_TIMER_SECS=1 CONFIG_LWIP_DHCPS=y CONFIG_LWIP_DHCPS_LEASE_UNIT=60 CONFIG_LWIP_DHCPS_MAX_STATION_NUM=8 +CONFIG_LWIP_DHCPS_STATIC_ENTRIES=y # end of DHCP server # CONFIG_LWIP_AUTOIP is not set @@ -1220,6 +1414,7 @@ CONFIG_LWIP_TCP_FIN_WAIT_TIMEOUT=20000 CONFIG_LWIP_TCP_SND_BUF_DEFAULT=5760 CONFIG_LWIP_TCP_WND_DEFAULT=5760 CONFIG_LWIP_TCP_RECVMBOX_SIZE=6 +CONFIG_LWIP_TCP_ACCEPTMBOX_SIZE=6 CONFIG_LWIP_TCP_QUEUE_OOSEQ=y CONFIG_LWIP_TCP_OOSEQ_TIMEOUT=6 CONFIG_LWIP_TCP_OOSEQ_MAX_PBUFS=4 @@ -1275,6 +1470,8 @@ CONFIG_LWIP_MAX_RAW_PCBS=16 CONFIG_LWIP_SNTP_MAX_SERVERS=1 # CONFIG_LWIP_DHCP_GET_NTP_SRV is not set CONFIG_LWIP_SNTP_UPDATE_DELAY=3600000 +CONFIG_LWIP_SNTP_STARTUP_DELAY=y +CONFIG_LWIP_SNTP_MAXIMUM_STARTUP_DELAY=5000 # end of SNTP # @@ -1345,6 +1542,7 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_FULL=y # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_CMN is not set # CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEFAULT_NONE is not set # CONFIG_MBEDTLS_CUSTOM_CERTIFICATE_BUNDLE is not set +# CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_DEPRECATED_LIST is not set CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 # end of Certificate Bundle @@ -1352,9 +1550,12 @@ CONFIG_MBEDTLS_CERTIFICATE_BUNDLE_MAX_CERTS=200 CONFIG_MBEDTLS_CMAC_C=y CONFIG_MBEDTLS_HARDWARE_AES=y CONFIG_MBEDTLS_AES_USE_INTERRUPT=y +CONFIG_MBEDTLS_AES_INTERRUPT_LEVEL=0 # CONFIG_MBEDTLS_GCM_SUPPORT_NON_AES_CIPHER is not set CONFIG_MBEDTLS_HARDWARE_MPI=y +# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set CONFIG_MBEDTLS_MPI_USE_INTERRUPT=y +CONFIG_MBEDTLS_MPI_INTERRUPT_LEVEL=0 CONFIG_MBEDTLS_HARDWARE_SHA=y CONFIG_MBEDTLS_ROM_MD5=y # CONFIG_MBEDTLS_ATCA_HW_ECDSA_SIGN is not set @@ -1439,9 +1640,37 @@ CONFIG_MBEDTLS_ECP_FIXED_POINT_OPTIM=y # CONFIG_MBEDTLS_CHACHA20_C is not set # CONFIG_MBEDTLS_HKDF_C is not set # CONFIG_MBEDTLS_THREADING_C is not set -# CONFIG_MBEDTLS_LARGE_KEY_SOFTWARE_MPI is not set +CONFIG_MBEDTLS_ERROR_STRINGS=y # end of mbedTLS +# +# ESP-MQTT Configurations +# +CONFIG_MQTT_PROTOCOL_311=y +# CONFIG_MQTT_PROTOCOL_5 is not set +CONFIG_MQTT_TRANSPORT_SSL=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET=y +CONFIG_MQTT_TRANSPORT_WEBSOCKET_SECURE=y +# CONFIG_MQTT_MSG_ID_INCREMENTAL is not set +# CONFIG_MQTT_SKIP_PUBLISH_IF_DISCONNECTED is not set +# CONFIG_MQTT_REPORT_DELETED_MESSAGES is not set +CONFIG_MQTT_USE_CUSTOM_CONFIG=y +CONFIG_MQTT_TCP_DEFAULT_PORT=1883 +CONFIG_MQTT_SSL_DEFAULT_PORT=8883 +CONFIG_MQTT_WS_DEFAULT_PORT=80 +CONFIG_MQTT_WSS_DEFAULT_PORT=443 +CONFIG_MQTT_BUFFER_SIZE=1024 +CONFIG_MQTT_TASK_STACK_SIZE=6144 +# CONFIG_MQTT_DISABLE_API_LOCKS is not set +CONFIG_MQTT_TASK_PRIORITY=5 +CONFIG_MQTT_POLL_READ_TIMEOUT_MS=10000 +CONFIG_MQTT_EVENT_QUEUE_SIZE=1 +# CONFIG_MQTT_TASK_CORE_SELECTION_ENABLED is not set +# CONFIG_MQTT_OUTBOX_DATA_ON_EXTERNAL_MEMORY is not set +# CONFIG_MQTT_CUSTOM_OUTBOX is not set +CONFIG_MQTT_OUTBOX_EXPIRED_TIMEOUT_MS=30000 +# end of ESP-MQTT Configurations + # # Newlib # @@ -1458,10 +1687,14 @@ CONFIG_NEWLIB_TIME_SYSCALL_USE_RTC_HRT=y # CONFIG_NEWLIB_TIME_SYSCALL_USE_NONE is not set # end of Newlib +CONFIG_STDATOMIC_S32C1I_SPIRAM_WORKAROUND=y + # # NVS # +# CONFIG_NVS_ENCRYPTION is not set # CONFIG_NVS_ASSERT_ERROR_CHECK is not set +# CONFIG_NVS_LEGACY_DUP_KEYS_COMPATIBILITY is not set # end of NVS # @@ -1509,6 +1742,9 @@ CONFIG_SPI_FLASH_HPM_AUTO=y CONFIG_SPI_FLASH_HPM_ON=y CONFIG_SPI_FLASH_HPM_DC_AUTO=y # CONFIG_SPI_FLASH_HPM_DC_DISABLE is not set +CONFIG_SPI_FLASH_SUSPEND_QVL_SUPPORTED=y +# CONFIG_SPI_FLASH_AUTO_SUSPEND is not set +CONFIG_SPI_FLASH_SUSPEND_TSUS_VAL_US=50 # end of Optional and Experimental Features (READ DOCS FIRST) # end of Main Flash configuration @@ -1553,6 +1789,19 @@ CONFIG_SPI_FLASH_SUPPORT_MXIC_OPI_CHIP=y CONFIG_SPI_FLASH_ENABLE_ENCRYPTED_READ_WRITE=y # end of SPI Flash driver +# +# TCP Transport +# + +# +# Websocket +# +CONFIG_WS_TRANSPORT=y +CONFIG_WS_BUFFER_SIZE=1024 +# CONFIG_WS_DYNAMIC_BUFFER is not set +# end of Websocket +# end of TCP Transport + # # Virtual file system # @@ -1571,10 +1820,18 @@ CONFIG_VFS_SEMIHOSTFS_MAX_MOUNT_POINTS=1 # end of Host File System I/O (Semihosting) # end of Virtual file system +# +# Wear Levelling +# +# CONFIG_WL_SECTOR_SIZE_512 is not set +CONFIG_WL_SECTOR_SIZE_4096=y +CONFIG_WL_SECTOR_SIZE=4096 +# end of Wear Levelling + # # ESP LCD TOUCH # -CONFIG_ESP_LCD_TOUCH_MAX_POINTS=5 +CONFIG_ESP_LCD_TOUCH_MAX_POINTS=1 CONFIG_ESP_LCD_TOUCH_MAX_BUTTONS=1 # end of ESP LCD TOUCH @@ -1598,17 +1855,20 @@ CONFIG_LV_COLOR_DEPTH=16 # # Memory Settings # -# CONFIG_LV_USE_BUILTIN_MALLOC is not set -CONFIG_LV_USE_CLIB_MALLOC=y +CONFIG_LV_USE_BUILTIN_MALLOC=y +# CONFIG_LV_USE_CLIB_MALLOC is not set # CONFIG_LV_USE_MICROPYTHON_MALLOC is not set # CONFIG_LV_USE_RTTHREAD_MALLOC is not set # CONFIG_LV_USE_CUSTOM_MALLOC is not set -# CONFIG_LV_USE_BUILTIN_STRING is not set -CONFIG_LV_USE_CLIB_STRING=y +CONFIG_LV_USE_BUILTIN_STRING=y +# CONFIG_LV_USE_CLIB_STRING is not set # CONFIG_LV_USE_CUSTOM_STRING is not set # CONFIG_LV_USE_BUILTIN_SPRINTF is not set CONFIG_LV_USE_CLIB_SPRINTF=y # CONFIG_LV_USE_CUSTOM_SPRINTF is not set +CONFIG_LV_MEM_SIZE_KILOBYTES=64 +CONFIG_LV_MEM_POOL_EXPAND_SIZE_KILOBYTES=0 +CONFIG_LV_MEM_ADR=0x0 # end of Memory Settings # @@ -1627,6 +1887,7 @@ CONFIG_LV_OS_NONE=y # CONFIG_LV_OS_CMSIS_RTOS2 is not set # CONFIG_LV_OS_RTTHREAD is not set # CONFIG_LV_OS_WINDOWS is not set +# CONFIG_LV_OS_MQX is not set # CONFIG_LV_OS_CUSTOM is not set CONFIG_LV_USE_OS=0 # end of Operating System (OS) @@ -1638,10 +1899,20 @@ CONFIG_LV_DRAW_BUF_STRIDE_ALIGN=1 CONFIG_LV_DRAW_BUF_ALIGN=4 CONFIG_LV_DRAW_LAYER_SIMPLE_BUF_SIZE=24576 CONFIG_LV_USE_DRAW_SW=y +CONFIG_LV_DRAW_SW_SUPPORT_RGB565=y +CONFIG_LV_DRAW_SW_SUPPORT_RGB565A8=y +CONFIG_LV_DRAW_SW_SUPPORT_RGB888=y +CONFIG_LV_DRAW_SW_SUPPORT_XRGB8888=y +CONFIG_LV_DRAW_SW_SUPPORT_ARGB8888=y +# CONFIG_LV_DRAW_SW_SUPPORT_L8 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_AL88 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_A8 is not set +# CONFIG_LV_DRAW_SW_SUPPORT_I1 is not set CONFIG_LV_DRAW_SW_DRAW_UNIT_CNT=1 # CONFIG_LV_USE_DRAW_ARM2D_SYNC is not set CONFIG_LV_USE_NATIVE_HELIUM_ASM=y CONFIG_LV_DRAW_SW_COMPLEX=y +# CONFIG_LV_USE_DRAW_SW_COMPLEX_GRADIENTS is not set CONFIG_LV_DRAW_SW_SHADOW_CACHE_SIZE=0 CONFIG_LV_DRAW_SW_CIRCLE_CACHE_SIZE=4 CONFIG_LV_DRAW_SW_ASM_NONE=y @@ -1664,7 +1935,26 @@ CONFIG_LV_USE_DRAW_SW_ASM=0 # # Logging # -# CONFIG_LV_USE_LOG is not set +CONFIG_LV_USE_LOG=y +# CONFIG_LV_LOG_LEVEL_TRACE is not set +# CONFIG_LV_LOG_LEVEL_INFO is not set +CONFIG_LV_LOG_LEVEL_WARN=y +# CONFIG_LV_LOG_LEVEL_ERROR is not set +# CONFIG_LV_LOG_LEVEL_USER is not set +# CONFIG_LV_LOG_LEVEL_NONE is not set +CONFIG_LV_LOG_LEVEL=2 +CONFIG_LV_LOG_PRINTF=y +# CONFIG_LV_LOG_USE_TIMESTAMP is not set +CONFIG_LV_LOG_USE_FILE_LINE=y +# CONFIG_LV_LOG_TRACE_MEM is not set +# CONFIG_LV_LOG_TRACE_TIMER is not set +CONFIG_LV_LOG_TRACE_INDEV=y +# CONFIG_LV_LOG_TRACE_DISP_REFR is not set +# CONFIG_LV_LOG_TRACE_EVENT is not set +# CONFIG_LV_LOG_TRACE_OBJ_CREATE is not set +# CONFIG_LV_LOG_TRACE_LAYOUT is not set +# CONFIG_LV_LOG_TRACE_ANIM is not set +CONFIG_LV_LOG_TRACE_CACHE=y # end of Logging # @@ -1672,7 +1962,7 @@ CONFIG_LV_USE_DRAW_SW_ASM=0 # CONFIG_LV_USE_ASSERT_NULL=y CONFIG_LV_USE_ASSERT_MALLOC=y -# CONFIG_LV_USE_ASSERT_STYLE is not set +CONFIG_LV_USE_ASSERT_STYLE=y # CONFIG_LV_USE_ASSERT_MEM_INTEGRITY is not set # CONFIG_LV_USE_ASSERT_OBJ is not set CONFIG_LV_ASSERT_HANDLER_INCLUDE="assert.h" @@ -1696,7 +1986,6 @@ CONFIG_LV_GRADIENT_MAX_STOPS=2 CONFIG_LV_COLOR_MIX_ROUND_OFS=128 # CONFIG_LV_OBJ_STYLE_CACHE is not set # CONFIG_LV_USE_OBJ_ID is not set -# CONFIG_LV_USE_OBJ_ID_BUILTIN is not set # CONFIG_LV_USE_OBJ_PROPERTY is not set # end of Others # end of Feature Configuration @@ -1708,6 +1997,8 @@ CONFIG_LV_COLOR_MIX_ROUND_OFS=128 CONFIG_LV_ATTRIBUTE_MEM_ALIGN_SIZE=1 CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y # CONFIG_LV_USE_FLOAT is not set +# CONFIG_LV_USE_MATRIX is not set +# CONFIG_LV_USE_PRIVATE_API is not set # end of Compiler Settings # @@ -1719,33 +2010,35 @@ CONFIG_LV_ATTRIBUTE_FAST_MEM_USE_IRAM=y # # CONFIG_LV_FONT_MONTSERRAT_8 is not set # CONFIG_LV_FONT_MONTSERRAT_10 is not set -CONFIG_LV_FONT_MONTSERRAT_12=y +# CONFIG_LV_FONT_MONTSERRAT_12 is not set CONFIG_LV_FONT_MONTSERRAT_14=y -CONFIG_LV_FONT_MONTSERRAT_16=y +# CONFIG_LV_FONT_MONTSERRAT_16 is not set # CONFIG_LV_FONT_MONTSERRAT_18 is not set # CONFIG_LV_FONT_MONTSERRAT_20 is not set # CONFIG_LV_FONT_MONTSERRAT_22 is not set # CONFIG_LV_FONT_MONTSERRAT_24 is not set -CONFIG_LV_FONT_MONTSERRAT_26=y +# CONFIG_LV_FONT_MONTSERRAT_26 is not set # CONFIG_LV_FONT_MONTSERRAT_28 is not set # CONFIG_LV_FONT_MONTSERRAT_30 is not set # CONFIG_LV_FONT_MONTSERRAT_32 is not set # CONFIG_LV_FONT_MONTSERRAT_34 is not set # CONFIG_LV_FONT_MONTSERRAT_36 is not set # CONFIG_LV_FONT_MONTSERRAT_38 is not set -# CONFIG_LV_FONT_MONTSERRAT_40 is not set +CONFIG_LV_FONT_MONTSERRAT_40=y # CONFIG_LV_FONT_MONTSERRAT_42 is not set # CONFIG_LV_FONT_MONTSERRAT_44 is not set # CONFIG_LV_FONT_MONTSERRAT_46 is not set # CONFIG_LV_FONT_MONTSERRAT_48 is not set # CONFIG_LV_FONT_MONTSERRAT_28_COMPRESSED is not set # CONFIG_LV_FONT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_SIMSUN_14_CJK is not set # CONFIG_LV_FONT_SIMSUN_16_CJK is not set # CONFIG_LV_FONT_UNSCII_8 is not set # CONFIG_LV_FONT_UNSCII_16 is not set # end of Enable built-in fonts # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_8 is not set +# CONFIG_LV_FONT_DEFAULT_MONTSERRAT_10 is not set # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_12 is not set CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_16 is not set @@ -1767,6 +2060,7 @@ CONFIG_LV_FONT_DEFAULT_MONTSERRAT_14=y # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_48 is not set # CONFIG_LV_FONT_DEFAULT_MONTSERRAT_28_COMPRESSED is not set # CONFIG_LV_FONT_DEFAULT_DEJAVU_16_PERSIAN_HEBREW is not set +# CONFIG_LV_FONT_DEFAULT_SIMSUN_14_CJK is not set # CONFIG_LV_FONT_DEFAULT_SIMSUN_16_CJK is not set # CONFIG_LV_FONT_DEFAULT_UNSCII_8 is not set # CONFIG_LV_FONT_DEFAULT_UNSCII_16 is not set @@ -1795,10 +2089,7 @@ CONFIG_LV_USE_ARC=y CONFIG_LV_USE_BAR=y CONFIG_LV_USE_BUTTON=y CONFIG_LV_USE_BUTTONMATRIX=y -CONFIG_LV_USE_CALENDAR=y -# CONFIG_LV_CALENDAR_WEEK_STARTS_MONDAY is not set -CONFIG_LV_USE_CALENDAR_HEADER_ARROW=y -CONFIG_LV_USE_CALENDAR_HEADER_DROPDOWN=y +# CONFIG_LV_USE_CALENDAR is not set CONFIG_LV_USE_CANVAS=y CONFIG_LV_USE_CHART=y CONFIG_LV_USE_CHECKBOX=y @@ -1815,7 +2106,6 @@ CONFIG_LV_USE_LINE=y CONFIG_LV_USE_LIST=y CONFIG_LV_USE_MENU=y CONFIG_LV_USE_MSGBOX=y -CONFIG_LV_USE_OBSERVER=y CONFIG_LV_USE_ROLLER=y CONFIG_LV_USE_SCALE=y CONFIG_LV_USE_SLIDER=y @@ -1853,13 +2143,19 @@ CONFIG_LV_USE_GRID=y # # 3rd Party Libraries # -# CONFIG_LV_USE_FS_STDIO is not set +CONFIG_LV_FS_DEFAULT_DRIVE_LETTER=0 +CONFIG_LV_USE_FS_STDIO=y +CONFIG_LV_FS_STDIO_LETTER=65 +CONFIG_LV_FS_STDIO_PATH="" +CONFIG_LV_FS_STDIO_CACHE_SIZE=0 # CONFIG_LV_USE_FS_POSIX is not set # CONFIG_LV_USE_FS_WIN32 is not set # CONFIG_LV_USE_FS_FATFS is not set # CONFIG_LV_USE_FS_MEMFS is not set # CONFIG_LV_USE_FS_LITTLEFS is not set -# CONFIG_LV_USE_LODEPNG is not set +# CONFIG_LV_USE_FS_ARDUINO_ESP_LITTLEFS is not set +# CONFIG_LV_USE_FS_ARDUINO_SD is not set +CONFIG_LV_USE_LODEPNG=y # CONFIG_LV_USE_LIBPNG is not set # CONFIG_LV_USE_BMP is not set # CONFIG_LV_USE_TJPGD is not set @@ -1882,22 +2178,13 @@ CONFIG_LV_USE_GRID=y # # CONFIG_LV_USE_SNAPSHOT is not set CONFIG_LV_USE_SYSMON=y -CONFIG_LV_USE_PERF_MONITOR=y -# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_LEFT is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_MID is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_TOP_RIGHT is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_LEFT is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_MID is not set -CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT=y -# CONFIG_LV_PERF_MONITOR_ALIGN_LEFT_MID is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_RIGHT_MID is not set -# CONFIG_LV_PERF_MONITOR_ALIGN_CENTER is not set -# CONFIG_LV_USE_PERF_MONITOR_LOG_MODE is not set -# CONFIG_LV_USE_MONKEY is not set +# CONFIG_LV_USE_PERF_MONITOR is not set # CONFIG_LV_USE_PROFILER is not set +# CONFIG_LV_USE_MONKEY is not set # CONFIG_LV_USE_GRIDNAV is not set -# CONFIG_LV_USE_FRAGMENT is not set +CONFIG_LV_USE_FRAGMENT=y # CONFIG_LV_USE_IMGFONT is not set +CONFIG_LV_USE_OBSERVER=y # CONFIG_LV_USE_IME_PINYIN is not set # CONFIG_LV_USE_FILE_EXPLORER is not set # end of Others @@ -1907,6 +2194,7 @@ CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT=y # # CONFIG_LV_USE_SDL is not set # CONFIG_LV_USE_X11 is not set +# CONFIG_LV_USE_WAYLAND is not set # CONFIG_LV_USE_LINUX_FBDEV is not set # CONFIG_LV_USE_NUTTX is not set # CONFIG_LV_USE_LINUX_DRM is not set @@ -1918,13 +2206,15 @@ CONFIG_LV_PERF_MONITOR_ALIGN_BOTTOM_RIGHT=y # CONFIG_LV_USE_ST7796 is not set # CONFIG_LV_USE_ILI9341 is not set # CONFIG_LV_USE_GENERIC_MIPI is not set -# CONFIG_LV_USE_WINDOWS is not set +# CONFIG_LV_USE_RENESAS_GLCDC is not set +# CONFIG_LV_USE_OPENGLES is not set +# CONFIG_LV_USE_QNX is not set # end of Devices # # Examples # -CONFIG_LV_BUILD_EXAMPLES=y +# CONFIG_LV_BUILD_EXAMPLES is not set # end of Examples # @@ -1961,8 +2251,9 @@ CONFIG_FLASHMODE_QIO=y # CONFIG_FLASHMODE_DIO is not set # CONFIG_FLASHMODE_DOUT is not set CONFIG_MONITOR_BAUD=115200 -# CONFIG_OPTIMIZATION_LEVEL_DEBUG is not set -# CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG is not set +CONFIG_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_LEVEL_DEBUG=y +CONFIG_COMPILER_OPTIMIZATION_DEFAULT=y # CONFIG_OPTIMIZATION_LEVEL_RELEASE is not set # CONFIG_COMPILER_OPTIMIZATION_LEVEL_RELEASE is not set CONFIG_OPTIMIZATION_ASSERTIONS_ENABLED=y @@ -1975,9 +2266,9 @@ CONFIG_STACK_CHECK_NONE=y # CONFIG_STACK_CHECK_STRONG is not set # CONFIG_STACK_CHECK_ALL is not set # CONFIG_WARN_WRITE_STRINGS is not set -# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EXTERNAL_COEX_ENABLE is not set # CONFIG_ESP_WIFI_EXTERNAL_COEXIST_ENABLE is not set +# CONFIG_MCPWM_ISR_IN_IRAM is not set # CONFIG_EVENT_LOOP_PROFILING is not set CONFIG_POST_EVENTS_FROM_ISR=y CONFIG_POST_EVENTS_FROM_IRAM_ISR=y @@ -1995,6 +2286,7 @@ CONFIG_ESP32_PHY_MAX_TX_POWER=20 # CONFIG_REDUCE_PHY_TX_POWER is not set # CONFIG_ESP32_REDUCE_PHY_TX_POWER is not set CONFIG_ESP_SYSTEM_PM_POWER_DOWN_CPU=y +CONFIG_PM_POWER_DOWN_TAGMEM_IN_LIGHT_SLEEP=y CONFIG_ESP32S3_SPIRAM_SUPPORT=y CONFIG_DEFAULT_PSRAM_CLK_IO=30 CONFIG_DEFAULT_PSRAM_CS_IO=26 @@ -2003,8 +2295,8 @@ CONFIG_DEFAULT_PSRAM_CS_IO=26 CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240=y CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=240 CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 -CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=3584 +CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=4608 +CONFIG_MAIN_TASK_STACK_SIZE=40000 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set