espressif / arduino-esp32

Arduino core for the ESP32
GNU Lesser General Public License v2.1
13.57k stars 7.4k forks source link

CMake ERROR when compiling. missing dependencies, cmake doesn't find the correct files #7810

Closed Juanc179 closed 1 year ago

Juanc179 commented 1 year ago

Board

ESP32 DEV MODULE

Device Description

Only the devkit for testing compilation, build and flash.

Hardware Configuration

plain devkit

Version

latest master (checkout manually)

IDE Name

ESP-IDF (Arduino as a component)

Operating System

win 11 21h2

Flash frequency

Default

PSRAM enabled

yes

Upload speed

115200

Description

I am creating a project using Vs code with ESP-IDF with Arduino as a component. When building the project the compilation ends and gives an error code related to the route to this bootloader: "bootloader_flash_config_esp32.c" i looked after it manually and i got to it. The problem is when CMake tries to find it and "edit" or changes the route to it. The route given in the compilation error is ok but the dependency is not. I don't know where to change this, or if it is a problem of Cmake. The project never built before and i haven't changed anything since it was created. i only added the browse and include path to the c_cpp_properties.json for the components. the rest is "stock".

Sketch

#include "Arduino.h" // it is the default project. im checking the compiler!

extern "C" void app_main()
{
    initArduino();
    pinMode(4, OUTPUT);
    digitalWrite(4, HIGH);
    // Do your own thing
}

Debug Message

[0/1] Re-running CMake...
-- Building ESP-IDF components for target esp32
-- Project sdkconfig file C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/sdkconfig
-- App "Pilot-Testing" version: ef12b3f-dirty
-- Adding linker script C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/esp-idf/esp_system/ld/memory.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_system/ld/esp32/sections.ld.in
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.api.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.libgcc.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-data.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.syscalls.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-funcs.ld
-- Adding linker script C:/Users/jcpis/esp/esp-idf/components/soc/esp32/ld/esp32.peripherals.ld
-- Components: app_trace app_update bootloader bootloader_support bt cmock console cxx driver efuse esp-tls esp_adc esp_app_format esp_common esp_eth esp_event esp_gdbstub esp_hid esp_http_client esp_http_server esp_https_ota esp_https_server esp_hw_support esp_lcd esp_local_ctrl esp_netif esp_partition esp_phy esp_pm esp_psram esp_ringbuf esp_rom esp_system esp_timer esp_wifi espcoredump esptool_py fatfs freertos hal heap http_parser idf_test ieee802154 json log lwip main mbedtls mqtt newlib nvs_flash openthread partition_table perfmon protobuf-c protocomm pthread sdmmc soc spi_flash spiffs tcp_transport ulp unity usb vfs wear_levelling wifi_provisioning wpa_supplicant xtensa
-- Component paths: C:/Users/jcpis/esp/esp-idf/components/app_trace C:/Users/jcpis/esp/esp-idf/components/app_update C:/Users/jcpis/esp/esp-idf/components/bootloader C:/Users/jcpis/esp/esp-idf/components/bootloader_support C:/Users/jcpis/esp/esp-idf/components/bt C:/Users/jcpis/esp/esp-idf/components/cmock C:/Users/jcpis/esp/esp-idf/components/console C:/Users/jcpis/esp/esp-idf/components/cxx C:/Users/jcpis/esp/esp-idf/components/driver C:/Users/jcpis/esp/esp-idf/components/efuse C:/Users/jcpis/esp/esp-idf/components/esp-tls C:/Users/jcpis/esp/esp-idf/components/esp_adc C:/Users/jcpis/esp/esp-idf/components/esp_app_format C:/Users/jcpis/esp/esp-idf/components/esp_common C:/Users/jcpis/esp/esp-idf/components/esp_eth C:/Users/jcpis/esp/esp-idf/components/esp_event C:/Users/jcpis/esp/esp-idf/components/esp_gdbstub C:/Users/jcpis/esp/esp-idf/components/esp_hid C:/Users/jcpis/esp/esp-idf/components/esp_http_client C:/Users/jcpis/esp/esp-idf/components/esp_http_server C:/Users/jcpis/esp/esp-idf/components/esp_https_ota C:/Users/jcpis/esp/esp-idf/components/esp_https_server C:/Users/jcpis/esp/esp-idf/components/esp_hw_support C:/Users/jcpis/esp/esp-idf/components/esp_lcd C:/Users/jcpis/esp/esp-idf/components/esp_local_ctrl C:/Users/jcpis/esp/esp-idf/components/esp_netif C:/Users/jcpis/esp/esp-idf/components/esp_partition C:/Users/jcpis/esp/esp-idf/components/esp_phy C:/Users/jcpis/esp/esp-idf/components/esp_pm C:/Users/jcpis/esp/esp-idf/components/esp_psram C:/Users/jcpis/esp/esp-idf/components/esp_ringbuf C:/Users/jcpis/esp/esp-idf/components/esp_rom C:/Users/jcpis/esp/esp-idf/components/esp_system C:/Users/jcpis/esp/esp-idf/components/esp_timer C:/Users/jcpis/esp/esp-idf/components/esp_wifi C:/Users/jcpis/esp/esp-idf/components/espcoredump C:/Users/jcpis/esp/esp-idf/components/esptool_py C:/Users/jcpis/esp/esp-idf/components/fatfs C:/Users/jcpis/esp/esp-idf/components/freertos C:/Users/jcpis/esp/esp-idf/components/hal C:/Users/jcpis/esp/esp-idf/components/heap C:/Users/jcpis/esp/esp-idf/components/http_parser C:/Users/jcpis/esp/esp-idf/components/idf_test C:/Users/jcpis/esp/esp-idf/components/ieee802154 C:/Users/jcpis/esp/esp-idf/components/json C:/Users/jcpis/esp/esp-idf/components/log C:/Users/jcpis/esp/esp-idf/components/lwip C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/main C:/Users/jcpis/esp/esp-idf/components/mbedtls C:/Users/jcpis/esp/esp-idf/components/mqtt C:/Users/jcpis/esp/esp-idf/components/newlib C:/Users/jcpis/esp/esp-idf/components/nvs_flash C:/Users/jcpis/esp/esp-idf/components/openthread C:/Users/jcpis/esp/esp-idf/components/partition_table C:/Users/jcpis/esp/esp-idf/components/perfmon C:/Users/jcpis/esp/esp-idf/components/protobuf-c C:/Users/jcpis/esp/esp-idf/components/protocomm C:/Users/jcpis/esp/esp-idf/components/pthread C:/Users/jcpis/esp/esp-idf/components/sdmmc C:/Users/jcpis/esp/esp-idf/components/soc C:/Users/jcpis/esp/esp-idf/components/spi_flash C:/Users/jcpis/esp/esp-idf/components/spiffs C:/Users/jcpis/esp/esp-idf/components/tcp_transport C:/Users/jcpis/esp/esp-idf/components/ulp C:/Users/jcpis/esp/esp-idf/components/unity C:/Users/jcpis/esp/esp-idf/components/usb C:/Users/jcpis/esp/esp-idf/components/vfs C:/Users/jcpis/esp/esp-idf/components/wear_levelling C:/Users/jcpis/esp/esp-idf/components/wifi_provisioning C:/Users/jcpis/esp/esp-idf/components/wpa_supplicant C:/Users/jcpis/esp/esp-idf/components/xtensa
-- Configuring done
CMake Warning in C:/Users/jcpis/esp/esp-idf/components/bootloader_support/CMakeLists.txt:
  The object file directory

    C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/./

  has 202 characters.  The maximum full path to an object file is 250
  characters (see CMAKE_OBJECT_PATH_MAX).  Object file

    bootloader_flash/src/bootloader_flash_config_esp32.c.obj

  cannot be safely placed under this directory.  The build may not work
  correctly.

-- Generating done
-- Build files have been written to: C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build
[23/830] Performing build step for 'bootloader'
FAILED: bootloader-prefix/src/bootloader-stamp/bootloader-build bootloader/bootloader.elf bootloader/bootloader.bin bootloader/bootloader.map C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/bootloader-prefix/src/bootloader-stamp/bootloader-build C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/bootloader/bootloader.elf C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/bootloader/bootloader.bin C:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/bootloader/bootloader.map
cmd.exe /C "cd /D C:\Users\jcpis\OneDrive\Documents\Proyectos\Indoor-Control-Unit\C_Development\ESP-IDF\Testbenchs\Testbench-MK2.2\Pilot-Testing\build\bootloader && C:\Espressif\tools\cmake\3.24.0\bin\cmake.exe --build ."
[1/17] Linking C static library esp-idf\log\liblog.a
[2/17] Building C object esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash_config_esp32.c.obj
FAILED: esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash_config_esp32.c.obj
C:\Espressif\tools\xtensa-esp32-elf\esp-2022r1-11.2.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-gcc.exe  -IC:/Users/jcpis/OneDrive/Documents/Proyectos/Indoor-Control-Unit/C_Development/ESP-IDF/Testbenchs/Testbench-MK2.2/Pilot-Testing/build/bootloader/config -IC:/Users/jcpis/esp/esp-idf/components/bootloader_support/include -IC:/Users/jcpis/esp/esp-idf/components/bootloader_support/bootloader_flash/include -IC:/Users/jcpis/esp/esp-idf/components/bootloader_support/private_include -IC:/Users/jcpis/esp/esp-idf/components/log/include -IC:/Users/jcpis/esp/esp-idf/components/esp_rom/include -IC:/Users/jcpis/esp/esp-idf/components/esp_rom/include/esp32 -IC:/Users/jcpis/esp/esp-idf/components/esp_rom/esp32 -IC:/Users/jcpis/esp/esp-idf/components/esp_common/include -IC:/Users/jcpis/esp/esp-idf/components/esp_hw_support/include -IC:/Users/jcpis/esp/esp-idf/components/esp_hw_support/include/soc -IC:/Users/jcpis/esp/esp-idf/components/esp_hw_support/include/soc/esp32 -IC:/Users/jcpis/esp/esp-idf/components/esp_hw_support/port/esp32/. -IC:/Users/jcpis/esp/esp-idf/components/esp_hw_support/port/esp32/private_include -IC:/Users/jcpis/esp/esp-idf/components/newlib/platform_include -IC:/Users/jcpis/esp/esp-idf/components/xtensa/include -IC:/Users/jcpis/esp/esp-idf/components/xtensa/esp32/include -IC:/Users/jcpis/esp/esp-idf/components/soc/include -IC:/Users/jcpis/esp/esp-idf/components/soc/esp32/. -IC:/Users/jcpis/esp/esp-idf/components/soc/esp32/include -IC:/Users/jcpis/esp/esp-idf/components/bootloader/subproject/components/micro-ecc -IC:/Users/jcpis/esp/esp-idf/components/bootloader/subproject/components/micro-ecc/micro-ecc -IC:/Users/jcpis/esp/esp-idf/components/spi_flash/include -IC:/Users/jcpis/esp/esp-idf/components/hal/esp32/include -IC:/Users/jcpis/esp/esp-idf/components/hal/include -IC:/Users/jcpis/esp/esp-idf/components/hal/platform_port/include -IC:/Users/jcpis/esp/esp-idf/components/efuse/include -IC:/Users/jcpis/esp/esp-idf/components/efuse/esp32/include -IC:/Users/jcpis/esp/esp-idf/components/esp_app_format/include -mlongcalls -Wno-frame-address  -fdiagnostics-color=always -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -Wno-enum-conversion -gdwarf-4 -ggdb -Os -freorder-blocks -fmacro-prefix-map=C:/Users/jcpis/esp/esp-idf/components/bootloader/subproject=. -fmacro-prefix-map=C:/Users/jcpis/esp/esp-idf=/IDF -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -fno-jump-tables -fno-tree-switch-conversion -fno-stack-protector -std=gnu17 -Wno-old-style-declaration -D_GNU_SOURCE -DIDF_VER=\"v5.0\" -DESP_PLATFORM -DBOOTLOADER_BUILD=1 -Wno-format -MD -MT esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash_config_esp32.c.obj -MF esp-idf\bootloader_support\CMakeFiles\__idf_bootloader_support.dir\bootloader_flash\src\bootloader_flash_config_esp32.c.obj.d -o esp-idf/bootloader_support/CMakeFiles/__idf_bootloader_support.dir/bootloader_flash/src/bootloader_flash_config_esp32.c.obj -c C:/Users/jcpis/esp/esp-idf/components/bootloader_support/bootloader_flash/src/bootloader_flash_config_esp32.c
C:/Users/jcpis/esp/esp-idf/components/bootloader_support/bootloader_flash/src/bootloader_flash_config_esp32.c:187:1: fatal error: opening dependency file esp-idf\bootloader_support\CMakeFiles\__idf_bootloader_support.dir\bootloader_flash\src\bootloader_flash_config_esp32.c.obj.d: No such file or directory
  187 | }
      | ^
compilation terminated.
[3/17] Linking C static library esp-idf\esp_rom\libesp_rom.a
ninja: build stopped: subcommand failed.
[40/830] Building C object esp-idf/mbedtls/mbedtls/library/CMakeFiles/mbedx509.dir/x509_crt.c.obj
ninja: build stopped: subcommand failed.

 *  The terminal process "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -Command ninja " terminated with exit code: 1.

Other Steps to Reproduce

  1. Create project with arduino as a component.
  2. Check there are no spaces on the path to the project folder.
  3. Add the path of the "components" folder to the browse and include path of the "c_cpp_properties.json".
  4. build project
  5. see on the terminal the bootloader missing file(mistake on path to it). (Ass the problem is on CMake i add a few screen shots, maybe im missing something on those files). image image image

I have checked existing issues, online documentation and the Troubleshooting Guide

SuGlider commented 1 year ago

@Juanc179 What is the version of the IDF you have installed in your Win11? idf.py --version

Juanc179 commented 1 year ago

Hi @SuGlider , i tried via CMD and Powershell, also from Python and it doesn't recognize "idf.py" i also tried with "esp-idf.py" and didn't get any results. but, If i search via windows it finds it.... I installed the latest version of IDF (5.0) a few days ago via ESP-IDF extension on vs code. The setup pops up asking for the version and the directory for the install, i choose the latest and didn't touch anything regarding directories. I took a long time installing all the files, time ago i did the same for another project with an older version and it worked just well.

me-no-dev commented 1 year ago

Arduino is not yet compatible with ESP-IDF v5.x, you need to install v4.4.x to use with Arduino :)

SuGlider commented 1 year ago

Hi @SuGlider , i tried via CMD and Powershell, also from Python and it doesn't recognize "idf.py" i also tried with "esp-idf.py" and didn't get any results. but, If i search via windows it finds it....

In order to be able to run idf.py, it is necessary to go to the folder where it is installed, C:\Users\jcpis\esp\esp-idf, and then run 2 scripts, using CMD or Powershell:

C:\Users\jcpis\esp\esp-idf> .\install.bat
C:\Users\jcpis\esp\esp-idf> .\export.bat
C:\Users\jcpis\esp\esp-idf> idy.py --version
ESP-IDF v4.4.2
C:\Users\jcpis\esp\esp-idf>

I installed the latest version of IDF (5.0) a few days ago via ESP-IDF extension on vs code. The setup pops up asking for the version and the directory for the install, i choose the latest and didn't touch anything regarding directories. I took a long time installing all the files, time ago i did the same for another project with an older version and it worked just well.

As @me-no-dev pointed out, Arduino Core 2.0.6 is based on IDF 4.4.3. Each version of Arduino Core has an IDF version linked to it. It is possible to verify it in the Arduino Github site in the Releases area. https://github.com/espressif/arduino-esp32/releases

There is an Espressif Web Site where you can pick the right version of IDF and its Windows Installer: https://dl.espressif.com/dl/esp-idf/?idf=4.4

Juanc179 commented 1 year ago

Hi @SuGlider , thank you all for your time and your responses. I tried the things below.

  1. Eliminate IDF 5.0
  2. Install IDF 4.4.4 succesfully via VS code extension (im no sure if i should download another version, i couldn't find version 4.4.3 as you suggested).
  3. Created a new project with arduino as a component.
  4. Added to Browse / include path the path to the components folder( pulled 2 days ago from git).
  5. build the project with the default code to see if it compiles. Here is the error code, all good until...

[1027/1051] Building CXX object esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj

image image

before compiling vs code detected "Arduino.h", after build; Arduino.h: No such file or directory. All the CMake files, SDK config, dependencies.lock,CMakeLists.txt are by default.

me-no-dev commented 1 year ago

Looks like it's not finding the Arduino component, or not adding it to the include. What are the contents of both CMakeList.txt in your project?

Juanc179 commented 1 year ago

content of Project-Template/main/CMakeLists.txt; idf_component_register( SRCS "main.cpp" INCLUDE_DIRS "" ) Content of Project-Template/CMakeLists.txt

The following lines of boilerplate have to be in your project's

  # CMakeLists in this exact order for cmake to work correctly
  cmake_minimum_required(VERSION 3.5)

  include($ENV{IDF_PATH}/tools/cmake/project.cmake)
  project(project-template)

I don't know if it is related, but only after build it doesn't detect Arduino.h header, if i try to go to the definition it goes just as usual and shows me the content of the file.

SuGlider commented 1 year ago

It seems that there is no `components\arduino\" folder in your project...

image

This is an example of Folder Project Structure for an Arduino RainMaker exmaple: https://github.com/SuGlider/RainMaker_as_Arduino_Component

Here, there are other 2 examples in the same repository: https://github.com/chegewara/arduino-as-component

SuGlider commented 1 year ago

In order to verify if the project is correctly strucutured, please refer to the documentation: https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/esp-idf_component.html

SuGlider commented 1 year ago

This post and the whole issue may also help you:

https://github.com/espressif/arduino-esp32/issues/7839

Juanc179 commented 1 year ago

Hi, the components are in another folder stored in my computer. in the ESP32 programming guide it suggest to have a single componets folder for multiple projects to avoid having to copy and paste the same folder every single time you create a project. I added that path before building and it detected de arduino.h header file. I did this when i created the project, before building.

Juanc179 commented 1 year ago

Adding to my previous comment; should i add that path to a Cmake file? i only added the path in the Browse Path and Include Path inside the c_cpp_properties.json contained in the project folder. Before adding the path: image image

After adding the path; image image

(i created a new project in this example). You can see that it detects the Arduino.h header. After building it stops detecting it but it appears underlined in a different way. Usually the whole line is underlined(before adding paths) but after building it appears only the space between include & "Arduino.h". This happens when i build the project as you've seen before; image during building it uses files that are inside the components folder just as usual, but when it gets to this stepp it fails: [1027/1051] Building CXX object esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj

Juanc179 commented 1 year ago

i followed this doc: https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/esp-idf_component.html

image

Juanc179 commented 1 year ago

@SuGlider i read more in detail the https://github.com/espressif/arduino-esp32/issues/7839 and he's doing another thing, im just trying to compile the code (without any outside library). he's adding libraries outside the usual components. I saw his error message was the same, but im not (yet) trying to add any library. anyways, thank you for tag that issue, i'll look it out again in the future.

Juanc179 commented 1 year ago

Hi, @SuGlider i changed my project conguration like you said and the problem persist. For instance i reinstalled my computer so i have a clean install of ESP-IDF v4.4.4. I added at the start of the project (using New Project command of the extension) the path of my componets folder. The project created succesfully with VS code showing the folder as the image shows below. image The same problem persits....

me-no-dev commented 1 year ago

Looks like your arduino is in components/components/arduino, while it should be components/arduino

Jason2866 commented 1 year ago

Platformio/VSC provides the possibility to compile Arduino as a Component without the need to setup anything yourself. See the example projects how to do.

Juanc179 commented 1 year ago

Looks like your arduino is in components/components/arduino, while it should be components/arduino

Thank you, i checked that box now. I'm adding the components folder directly in the "New project" in the section "add components directory"; there i am putting the path to the /components/arduino folder that i created before. but a new problem came out with cmake. image Down below (at the middle, inside the IDF blue bar) you can see that no kit is selected. wich one should i choose?(i have the mingw64, scan for kits or let cmake decide. neither of 3 options work) i think that an error with the cmake installation has ocurred and the cmake path it not being detected properly. i tried reinstalling the extension but had no luck. im installing all on the defaults paths. This is what i get during the process.... image image

Juanc179 commented 1 year ago

Platformio/VSC provides the possibility to compile Arduino as a Component without the need to setup anything yourself. See the example projects how to do.

Yes, i know that IDE. I tried it last year but i'am more keen towards IDF. at the time PlatformIO had tons of problems and IDF worked well at the first time. Now i tried to update to the latest version and ruined it all :(...

Jason2866 commented 1 year ago

Yes, it was dangerous/tricky to use native IDF and VSC IDF. Latest release (espressif32 @ 6.0.1) does install in an pyenv not anymore global. So this havoc should not happen anymore.

Juanc179 commented 1 year ago

Yes, it was dangerous/tricky to use native IDF and VSC IDF. Latest release (espressif32 @ 6.0.1) does install in an pyenv not anymore global. So this havoc should not happen anymore.

Okay, i'll try platformIO again then. thank you very much all of you @me-no-dev @Jason2866 @SuGlider . I've been more time solving problems than coding