Hi Tiago, I believe the issue isn’t related to the CONFIG_PM macro. From what I understand, it’s possible to independently put both the MCU and the WiFi transceiver into low-power mode.
For now, I’d like to focus on putting only the MCU to sleep by calling the esp_light_sleep_start() function, similar to what was done here: https ://github.com/roblatour/SolarWeatherStationII/blob /cdf04e0e0bd931095254a0b11b61f24d7053ff7d/main/main.c#L845 As you can see in the code above, the implementation simply calls the sleep function without handling any power manager related to WiFi, and in this case, the MCU can wake from sleep. However, in my implementation, this isn’t happening. I’ve implemented wake-up via timer and button and validated it using a standard configuration. When using WiFi, though, the MCU isn’t receiving interrupts. I’m concerned that something similar to what happened here might be occurring: https://github.com/apache/nuttx/issues/13303 Do you think I should investigate the configurations further, or could there be something in NuttX that’s masking interrupts during sleep (possibly related to the RTC)? Em qua., 13 de nov. de 2024 às 09:45, Tiago Medicci Serrano < tiago.medi...@gmail.com> escreveu: > Hi Felipe, > > Please check the occurrences of `CONFIG_PM_ENABLE` > < > https://github.com/espressif/esp-idf/blob/2c8de044a3c61a060c70d4072d2606e216be81d4/components/esp_wifi/esp32c6/esp_adapter.c#L282 > > > on ESP-IDF's Wi-Fi driver of ESP32-C6. Its counterpart in NuttX would be > `CONFIG_PM` > < > https://github.com/apache/incubator-nuttx/blob/b3727f67bee3ab1550157c1bd4101168a7689ff3/arch/risc-v/src/esp32c6/esp_wifi_adapter.c#L1544 > >. > Note that `wifi_apb80m_request` > < > https://github.com/espressif/esp-idf/blob/cf2bdb08f4aa583a816771eb99aa2815c2434cc1/components/esp_wifi/src/wifi_init.c#L456 > > > is not defined anywhere in NuttX, so I suppose `CONFIG_PM` is not enabled > in your configuration. > > My suggestion: using ESP-IDF, try the Wi-Fi "as-is" (without the light > sleep enabled) and save the generated `sdkconfig.h`. Try the same with > light sleep enabled: validate its behavior/power consumption and save the > newer `sdkconfig.h`. Compare both to check which variables were introduced > and, then, check the Wi-Fi-related sources (especially under > `components/esp-wifi` > < > https://github.com/espressif/esp-idf/tree/cf2bdb08f4aa583a816771eb99aa2815c2434cc1/components/esp_wifi > >, > but check other occurrences outside this folder too!). The same > implementation should be introduced in NuttX (the one related to ` > wifi_apb80m_request > < > https://github.com/espressif/esp-idf/blob/cf2bdb08f4aa583a816771eb99aa2815c2434cc1/components/esp_wifi/src/wifi_init.c#L456 > >` > is just one of them, others may be necessary). Also, I recommend adding the > configs to `esp-hal-3rdparty/nuttx/esp32c6/include/sdkconfig.h` > conditionally (if NuttX's `CONFIG_PM` is defined, you define ESP-IDF's > related configs on it). > > I hope this helps. > > Best regards, > > Em ter., 12 de nov. de 2024 às 09:33, Felipe Moura Oliveira < > moura....@gmail.com> escreveu: > > > Hello Tiago. > > > > When I am using WIFI config and enabling Auto-Sleep, the mcu can no > longer > > wake up from light sleep, so it ends up restarting because of WD. > > > > Em ter., 12 de nov. de 2024 às 08:47, Tiago Medicci Serrano < > > tiago.medi...@gmail.com> escreveu: > > > > > Hi Felipe, > > > > > > What exactly is your problem regarding light sleep and Wi-Fi? > > > > > > If I'm not mistaken, some hooks must be implemented in the Wi-Fi driver > > > too. My suggestion: take a look at IDF's implementation and try light > > sleep > > > with/without Wi-Fi: compare the `sdkconfig.h` enabling/disabling light > > > sleep. Then, check which configs are on the Wi-Fi related files. > > > > > > Looking towards hearing from you soon. > > > > > > Best regards, > > > > > > Em seg., 11 de nov. de 2024 às 17:52, Felipe Moura Oliveira < > > > moura....@gmail.com> escreveu: > > > > > > > Hello everyone, > > > > > > > > Tiago, actually I am able to compile and run light sleep using nsh > > > > configuration, but it's failing when I am using wifi configuration. I > > > tried > > > > it by myself but I cannot solve it, can you give some help please? > > > > I push a draft to you look it easely: > > > > https://github.com/apache/nuttx/pull/14726 > > > > > > > > You can config a work example running the following cmd: > > > > ./tools/configure.sh esp32c6-devkitc:sleep_test > > > > > > > > This config basically is nsh + CONFIG_ESP_AUTO_SLEEP=y and > > > > CONFIG_EXAMPLES_HELLO=y. Auto_sleep is new config done by me, > > > > > > > > Please, change hello_main.c with the code below: > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * apps/examples/hello/hello_main.c > > > > */ > > > > > > > > #include <nuttx/config.h> > > > > #include <stdio.h> > > > > #include <stdint.h> > > > > #include <time.h> > > > > #include <unistd.h> > > > > #include <pthread.h> > > > > #include <stdlib.h> > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * Definitions > > > > > > > > > > > > > > ****************************************************************************/ > > > > > > > > #define NUM_THREADS 5 > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * Private Data > > > > > > > > > > > > > > ****************************************************************************/ > > > > > > > > struct thread_info { > > > > int thread_id; > > > > unsigned int sleep_time; > > > > }; > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * Private Functions > > > > > > > > > > > > > > ****************************************************************************/ > > > > > > > > void *thread_func(void *arg) > > > > { > > > > struct thread_info *tinfo = (struct thread_info *)arg; > > > > volatile uint32_t i = 0; > > > > struct timespec ts_start, ts_end; > > > > time_t elapsed; > > > > > > > > // Get the start time > > > > clock_gettime(CLOCK_MONOTONIC, &ts_start); > > > > > > > > while (1) > > > > { > > > > i++; > > > > clock_gettime(CLOCK_MONOTONIC, &ts_end); > > > > elapsed = ts_end.tv_sec - ts_start.tv_sec; > > > > printf("Hello, World!! [Thread %d] Iteration: %lu | Elapsed time: %ld > > > > seconds\n", > > > > tinfo->thread_id, i, (long)elapsed); > > > > ts_start = ts_end; > > > > sleep(tinfo->sleep_time); > > > > } > > > > > > > > return NULL; > > > > } > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * Public Functions > > > > > > > > > > > > > > ****************************************************************************/ > > > > > > > > > > > > > > > > > > /**************************************************************************** > > > > * main > > > > > > > > > > > > > > ****************************************************************************/ > > > > > > > > int main(int argc, FAR char *argv[]) > > > > { > > > > pthread_t threads[NUM_THREADS]; > > > > struct thread_info tinfo[NUM_THREADS]; > > > > int ret; > > > > > > > > unsigned int sleep_times[NUM_THREADS] = {15, 11, 30, 70, 25}; > > > > > > > > for (int i = 0; i < NUM_THREADS; i++) > > > > { > > > > tinfo[i].thread_id = i + 1; > > > > tinfo[i].sleep_time = sleep_times[i]; > > > > > > > > ret = pthread_create(&threads[i], NULL, thread_func, &tinfo[i]); > > > > if (ret != 0) > > > > { > > > > printf("Error creating thread %d: %d\n", i + 1, ret); > > > > exit(EXIT_FAILURE); > > > > } > > > > } > > > > int app_ret = 0; > > > > if (app_ret == -1) { > > > > printf("Error executing command\n"); > > > > } else { > > > > printf("Application finished with return code: %d\n", app_ret); > > > > } > > > > > > > > while (1) > > > > { > > > > printf("Hello, World!! [Main Thread]\n"); > > > > sleep(10); > > > > } > > > > > > > > return 0; > > > > } > > > > > > > > > > > > > > > > You will see output below: > > > > nsh> hello > > > > Aplicação finalizou com código de retorno: 0 > > > > Hello, World!! [Main Thread] > > > > Hello, World!! [Thread 1] Iteração: 1 | Tempo decorrido: 0 segundos > > > > Hello, World!! [Thread 2] It*pmu_*eração: 1 | Tempo decorrido: 0 > > segundos > > > > Hello, World!! [Thread 3] Iteração: 1 | Tempo decorrido: 0 segundos > > > > Hello, World!! [Thread 4] Iteração: 1 | Tempo decorrido: 0 segundos > > > > Hello, World!! [Thread 5] Iteração: 1 | Tempo decorrido: 0 segundos > > > > *pmu_*Hello, World!! [Main Thread] > > > > Hello, World!! [Thread 2] Iteração: 2 | Tempo decorrido: 11 segundos > > > > Hello, World!! [Thread 1] Iteração: 2 | Tempo decorrido: 16 segundos > > > > > > > > I was able to power consumption below 1 mA when mcu is in idle mode, > so > > > it > > > > is in light sleep. > > > > > > > > Later, making a distclean, running wifi config and adding > > > > CONFIG_ESP_AUTO_SLEEP=y and CONFIG_EXAMPLES_HELLO=y, you will see > that > > > the > > > > mcu goes to sleep and not return. > > > > > > > > Em seg., 4 de nov. de 2024 às 08:48, Tiago Medicci Serrano < > > > > tiago.medi...@gmail.com> escreveu: > > > > > > > > > Hi Felipe, good to hear about your progress here! > > > > > > > > > > These functions are ROM-defined functions. By checking the TRM, you > > can > > > > see > > > > > a read-only flash partition that holds some functions (widely used > > > > > functions, like malloc and internal functions). > > > > > > > > > > ets_get_cpu_frequency > > > > > < > > > > > > > > > > > > > > > https://github.com/espressif/esp-hal-3rdparty/blob/1a1545b6ffb54029259ba8691d9ee200bfda2471/components/esp_rom/esp32c6/ld/esp32c6.rom.ld#L32 > > > > > > > > > > > is > > > > > one of these internal functions. They are defined directly at the > > > linker > > > > > script. > > > > > > > > > > If I understood correctly, these functions are crashing when it's > > being > > > > > called, right? If so, can you: > > > > > > > > > > 1. Share the crash dump > > > > > 2. Use GDB and try to check where/why it fails: it may trying to > > > > access > > > > > some prohibited memory region or even trying to call an > > unregistered > > > > > callback. > > > > > > > > > > Thanks! > > > > > > > > > > Em sex., 1 de nov. de 2024 às 13:41, Felipe Moura Oliveira < > > > > > moura....@gmail.com> escreveu: > > > > > > > > > > > Hello everyone, > > > > > > > > > > > > Tiago, I am trying to work with light sleep for now, after it > work > > > will > > > > > go > > > > > > ahead with deep sleep. To run in light sleep I don't need to > change > > > > > linker > > > > > > so I was able to build and flash without "image" issues. > > > > > > Now I am facing other kind of issue: > > > > > > Some functions refers to "ets" function and I don't know how > handle > > > > this, > > > > > > for instance: > > > > > > > > > > > > /** > > > > > > * @brief Get the real CPU ticks per us > > > > > > * > > > > > > * @return CPU ticks per us > > > > > > */ > > > > > > uint32_t esp_rom_get_cpu_ticks_per_us(void); > > > > > > > > > > > > This function is necessary in the *sleep_modes.c* file. During > > > execute > > > > > code > > > > > > I am facing crash when this function is called, its happen > because > > > its > > > > > > implementation is a reference to other function: > > > > > > > > > > > > > > > > > > > > > > > > > > > arch/risc-v/src/esp32c6/esp-hal-3rdparty/components/esp_rom/esp32c6/ld/esp32c6.rom.api.ld:46:PROVIDE > > > > > > ( *esp_rom_get_cpu_ticks_per_us* = ets_get_cpu_frequency ); > > > > > > > > > > > > I cannot find *ets_get_cpu_frequency*, so how should I handle it? > > > > > > > > > > > > PS: I have another situation like this, when I try to call > > > > > > *esp_rom_set_cpu_ticks_per_us* function. > > > > > > > > > > > > Regards. > > > > > > > > > > > > Em ter., 29 de out. de 2024 às 13:24, Felipe Moura Oliveira < > > > > > > moura....@gmail.com> escreveu: > > > > > > > > > > > > > Hello Tiago. > > > > > > > > > > > > > > Please look de draft here: > > > > https://github.com/apache/nuttx/pull/14548 > > > > > > > > > > > > > > This branch will refer to the updated 3rd-party in my repo. > > > > > > > > > > > > > > You only need to enable PM in menuconfig and it will be enough > to > > > see > > > > > > > changes. > > > > > > > > > > > > > > Em ter., 29 de out. de 2024 às 13:10, Tiago Medicci Serrano < > > > > > > > tiago.medi...@gmail.com> escreveu: > > > > > > > > > > > > > >> Hi Felipe, > > > > > > >> > > > > > > >> Can you share your PR as a draft on GH to make it easier to > > check > > > > the > > > > > > >> files > > > > > > >> (and the build process)? > > > > > > >> > > > > > > >> Em ter., 29 de out. de 2024 às 12:41, Felipe Moura Oliveira < > > > > > > >> moura....@gmail.com> escreveu: > > > > > > >> > > > > > > >> > Hello Tiago, > > > > > > >> > > > > > > > >> > I "finished" the port, but after it my esp32c6 dev kit is > > > > resetting. > > > > > > >> Maybe > > > > > > >> > the issue is related my changes in > > > > > > >> > boards/risc-v/esp32c6/common/scripts/esp32c6_sections.ld. > Can > > > you > > > > > give > > > > > > >> some > > > > > > >> > tips about how to go ahead? > > > > > > >> > > > > > > > >> > Below you can see nuttx report: > > > > > > >> > Build:Sep 19 2022 > > > > > > >> > rst:0x7 (TG0_WDT_HPSYS),boot:0x7f (SPI_FAST_FLASH_BOOT) > > > > > > >> > Saved PC:0x40018bea > > > > > > >> > SPIWP:0xee > > > > > > >> > mode:DIO, clock div:2 > > > > > > >> > load:0x40800000,len:0x61e0 > > > > > > >> > load:0x408061e0,len:0xc34 > > > > > > >> > load:0x50000000,len:0x20 > > > > > > >> > load:0x5000001e,len:0x24 > > > > > > >> > Invalid image block, can't boot. > > > > > > >> > ets_main.c 331 > > > > > > >> > ESP-ROM:esp32c6-20220919 > > > > > > >> > > > > > > > >> > Em ter., 29 de out. de 2024 às 08:46, Felipe Moura Oliveira > < > > > > > > >> > moura....@gmail.com> escreveu: > > > > > > >> > > > > > > > >> > > Hello everyone, > > > > > > >> > > > > > > > > >> > > I was able to solve linker issues, editing the linker by > > > > myself. I > > > > > > >> need > > > > > > >> > to > > > > > > >> > > finish more than one build issue before testing it, so I > > will > > > > see > > > > > > if I > > > > > > >> > made > > > > > > >> > > the right changes in linker. > > > > > > >> > > > > > > > > >> > > Em seg., 28 de out. de 2024 às 16:01, Felipe Moura > Oliveira > > < > > > > > > >> > > moura....@gmail.com> escreveu: > > > > > > >> > > > > > > > > >> > >> *Hello everyone, Tiago,* > > > > > > >> > >> > > > > > > >> > >> I have made progress with the build issue I was > > encountering > > > > and > > > > > am > > > > > > >> now > > > > > > >> > >> "stuck" at what I believe is one of the final stages. I > am > > > > > > >> experiencing > > > > > > >> > the > > > > > > >> > >> following compilation error: > > > > > > >> > >> LD: nuttx > > > > > > >> > >> riscv-none-elf-ld: warning: > > > > > > >> > /home/felipe-moura/nuttxspace/nuttx-felipe/nuttx > > > > > > >> > >> has a LOAD segment with RWX permissions > > > > > > >> > >> riscv-none-elf-ld: > > > > > > >> /home/felipe-moura/nuttxspace/nuttx-felipe/staging/ > > > > > > >> > >> libarch.a(sleep_modes.o): in function > > > > > > >> > >> `esp_set_deep_sleep_wake_stub_default_entry': > > > > > > >> > >> sleep_modes.c:(.rtc.text.4+0x0): undefined reference to > > > > > > >> > >> `_rtc_force_fast_end' > > > > > > >> > >> riscv-none-elf-ld: sleep_modes.c:(.rtc.text.4+0x4): > > undefined > > > > > > >> reference > > > > > > >> > >> to `_rtc_text_start' > > > > > > >> > >> riscv-none-elf-ld: sleep_modes.c:(.rtc.text.4+0x8): > > undefined > > > > > > >> reference > > > > > > >> > >> to `_rtc_force_fast_end' > > > > > > >> > >> riscv-none-elf-ld: sleep_modes.c:(.rtc.text.4+0xc): > > undefined > > > > > > >> reference > > > > > > >> > >> to `_rtc_text_start' > > > > > > >> > >> riscv-none-elf-ld: > > > > > > >> > >> > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > /home/felipe-moura/nuttxspace/nuttx-felipe/staging/libarch.a(sleep_cpu.o): > > > > > > >> > >> in function `esp_sleep_cpu_retention': > > > > > > >> > >> sleep_cpu.c:(.iram1.8+0x200): undefined reference to > > > > > > >> > >> `rv_core_critical_regs_save' > > > > > > >> > >> riscv-none-elf-ld: sleep_cpu.c:(.iram1.8+0x21e): > undefined > > > > > > reference > > > > > > >> to > > > > > > >> > >> `rv_core_critical_regs_restore' > > > > > > >> > >> riscv-none-elf-ld: sleep_cpu.c:(.iram1.8+0x226): > undefined > > > > > > reference > > > > > > >> to > > > > > > >> > >> `rv_core_critical_regs_restore' > > > > > > >> > >> make[1]: *** [Makefile:189: nuttx] Error 1 > > > > > > >> > >> make: *** [tools/Unix.mk:551: nuttx] Error 2 > > > > > > >> > >> > > > > > > >> > >> I would greatly appreciate your assistance. > > > > > > >> > >> > > > > > > >> > >> Focusing on the item _rtc_text_start, I see that it is > > > defined > > > > in > > > > > > the > > > > > > >> > >> file: > > > > > > >> > >> > > > > > > >> > > > > > > > arch/risc-v/src/chip/esp-hal-3rdparty/components/esp_system/ld/esp32c6/ > > > > > > >> > >> sections.ld.in > > > > > > >> > >> > > > > > > >> > >> However, I am unsure how to add this file to the complete > > > > linking > > > > > > >> > >> process. I added this file to hal_esp32c6.mk, but I > > received > > > > the > > > > > > >> > >> following error: > > > > > > >> > >> LD: nuttx > > > > > > >> > >> > > > > > > >> > > > > > > > >> > > > > > > > > > > > > riscv-none-elf-ld:/home/felipe-moura/nuttxspace/nuttx-felipe/arch/risc-v/ > > > > > > >> > >> > src/chip/esp-hal-3rdparty/components/esp_system/ld/esp32c6/ > > > > > > >> > >> sections.ld.in.tmp:113 cannot move location counter > > backwards > > > > > (from > > > > > > >> > >> 40809800 to 40800000) > > > > > > >> > >> make[1]: *** [Makefile:189: nuttx] Error 1 > > > > > > >> > >> make: *** [tools/Unix.mk:551: nuttx] Error 2 > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> > >> Does anyone have any tips or suggestions that could help > me > > > > move > > > > > > >> forward > > > > > > >> > >> with this process? > > > > > > >> > >> > > > > > > >> > >> Thank you in advance for your help. > > > > > > >> > >> > > > > > > >> > >> *Best regards,* > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> > >> Em sex., 25 de out. de 2024 às 12:02, Tiago Medicci > > Serrano < > > > > > > >> > >> tiago.medi...@gmail.com> escreveu: > > > > > > >> > >> > > > > > > >> > >>> Hi Felipe, > > > > > > >> > >>> > > > > > > >> > >>> The RTC GPIO is a feature of the GPIO/RTC driver, so a > > > > > substitute > > > > > > >> for > > > > > > >> > >>> this > > > > > > >> > >>> function should be part > > > > > > >> > >>> of > > `nuttx/arch/risc-v/src/common/espressif/esp_rtc_gpio.c`. > > > > That > > > > > > >> being > > > > > > >> > >>> said, you can either implement it (and define it as a > > macro, > > > > on > > > > > > >> HAL) or > > > > > > >> > >>> you > > > > > > >> > >>> can either ignore these functions related to GPIO wakeup > > > from > > > > > > sleep > > > > > > >> for > > > > > > >> > >>> now > > > > > > >> > >>> (using, for instance, the `#ifndef __NuttX__`). It's up > to > > > > you: > > > > > if > > > > > > >> the > > > > > > >> > >>> GPIO > > > > > > >> > >>> wakeup isn't mandatory, it'd go baby steps, removing > this > > > > > feature > > > > > > >> for > > > > > > >> > >>> now. > > > > > > >> > >>> > > > > > > >> > >>> Best regards, > > > > > > >> > >>> > > > > > > >> > >>> Em sex., 25 de out. de 2024 às 09:33, Felipe Moura > > Oliveira > > > < > > > > > > >> > >>> moura....@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > >> > >>> > Hello Tiago, > > > > > > >> > >>> > > > > > > > >> > >>> > Thank you for your assistance earlier. > > > > > > >> > >>> > > > > > > > >> > >>> > I would like to discuss further the necessity of the > > > > > > >> > >>> > esp_driver_gpio/include/rtc_io.h file, which is only > > > > available > > > > > > in > > > > > > >> the > > > > > > >> > >>> IDF. > > > > > > >> > >>> > > > > > > > >> > >>> > In sleep_modes.c, there is the following code snippet: > > > > > > >> > >>> > esp_err_t esp_sleep_enable_ext1_wakeup_io(uint64_t > > > io_mask, > > > > > > >> > >>> > esp_sleep_ext1_wakeup_mode_t level_mode) > > > > > > >> > >>> > { > > > > > > >> > >>> > if (io_mask == 0 && level_mode > > > > ESP_EXT1_WAKEUP_ANY_HIGH) { > > > > > > >> > >>> > return ESP_ERR_INVALID_ARG; > > > > > > >> > >>> > } > > > > > > >> > >>> > // Translate bit map of GPIO numbers into the bit map > of > > > RTC > > > > > IO > > > > > > >> > numbers > > > > > > >> > >>> > uint32_t rtc_gpio_mask = 0; > > > > > > >> > >>> > for (int gpio = 0; io_mask; ++gpio, io_mask >>= 1) { > > > > > > >> > >>> > if ((io_mask & 1) == 0) { > > > > > > >> > >>> > continue; > > > > > > >> > >>> > } > > > > > > >> > >>> > if (!esp_sleep_is_valid_wakeup_gpio(gpio)) { > > > > > > >> > >>> > ESP_LOGE(TAG, "Not an RTC IO: GPIO%d", gpio); > > > > > > >> > >>> > return ESP_ERR_INVALID_ARG; > > > > > > >> > >>> > } > > > > > > >> > >>> > rtc_gpio_mask |= BIT(rtc_io_number_get(gpio)); > > > > > > >> > >>> > } > > > > > > >> > >>> > > > > > > > >> > >>> > I believe this code is essential for compilation. The > > > > function > > > > > > >> > >>> > rtc_io_number_get is located at the following path in > > the > > > > IDF: > > > > > > >> > >>> > components/esp_driver_gpio/include/driver/rtc_io.h. > > > > > > >> > >>> > > > > > > > >> > >>> > However, the esp_driver_gpio folder is not present in > > the > > > > > > >> 3rd-party > > > > > > >> > >>> > directory. In this case, what is the recommended > > procedure > > > > to > > > > > > >> > proceed? > > > > > > >> > >>> > > > > > > > >> > >>> > Thank you again for your support. > > > > > > >> > >>> > > > > > > > >> > >>> > Em sex., 25 de out. de 2024 às 08:52, Tiago Medicci > > > Serrano > > > > < > > > > > > >> > >>> > tiago.medi...@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > >> > >>> > > Hi Felipe, > > > > > > >> > >>> > > > > > > > > >> > >>> > > `esp_private/pm_impl.h` is from the component > `esp_pm` > > > of > > > > > > >> ESP-IDF, > > > > > > >> > >>> which > > > > > > >> > >>> > is > > > > > > >> > >>> > > a driver directly. Same for > > > > > `esp_driver_gpio/include/rtc_io.h` > > > > > > >> > >>> (here, a > > > > > > >> > >>> > > detail: I wasn't able to find this path on IDF, so > > make > > > > sure > > > > > > you > > > > > > >> > are > > > > > > >> > >>> > > checking under the `release/v5.1` branch, which the > > HAL > > > > was > > > > > > >> based). > > > > > > >> > >>> The > > > > > > >> > >>> > HAL > > > > > > >> > >>> > > repository doesn't contain ESP-IDF drivers, which > are > > > > always > > > > > > >> > >>> implemented > > > > > > >> > >>> > on > > > > > > >> > >>> > > NuttX. For `esp_cpu.h`, it's already on HAL (at > > > > > > >> > >>> > > > > > > > > `esp-hal-3rdparty/components/esp_hw_support/include/esp_cpu.h`). > > > > > > >> > >>> > > > > > > > > >> > >>> > > The files under > > > > `esp-hal-3rdparty/components/esp_hw_support` > > > > > > >> > >>> > > (`sleep_modes.c`, for instance) MAY be used to > > implement > > > > the > > > > > > >> > driver. > > > > > > >> > >>> This > > > > > > >> > >>> > > is, mostly, a wrapping layer under the function of > > > > `esp_rom` > > > > > > and > > > > > > >> > >>> `hal` > > > > > > >> > >>> > > components. However, they still may refer to ESP-IDF > > > > > drivers. > > > > > > >> That > > > > > > >> > >>> being > > > > > > >> > >>> > > said, you can check if removing such dependencies is > > > > > possible. > > > > > > >> We > > > > > > >> > >>> usually > > > > > > >> > >>> > > do that with conditional macros. A good starting > point > > > is > > > > to > > > > > > >> check > > > > > > >> > >>> for > > > > > > >> > >>> > > `#ifdef __NuttX__` on these sources and headers: we > > use > > > > them > > > > > > to > > > > > > >> > >>> > remove/add > > > > > > >> > >>> > > headers and functions that aren't available on > > > > NuttX/needed > > > > > by > > > > > > >> > NuttX. > > > > > > >> > >>> > > > > > > > > >> > >>> > > Best regards, > > > > > > >> > >>> > > > > > > > > >> > >>> > > Em qui., 24 de out. de 2024 às 19:46, Felipe Moura > > > > Oliveira > > > > > < > > > > > > >> > >>> > > moura....@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > >> > >>> > > > Hello all, > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > Tiago, > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > I have a question regarding the porting process. > > > > > > >> Specifically, I > > > > > > >> > >>> need > > > > > > >> > >>> > to > > > > > > >> > >>> > > > add the sleep_modes.c file to the compilation > > process. > > > > Am > > > > > I > > > > > > on > > > > > > >> > the > > > > > > >> > >>> > right > > > > > > >> > >>> > > > path with this approach? > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > To achieve this, I modified the hal_esp32c6.mk > file > > > by > > > > > > adding > > > > > > >> > >>> > > > sleep_modes.c. > > > > > > >> > >>> > > > However, I am facing some issues: within > > > sleep_modes.c, > > > > > some > > > > > > >> > >>> #include > > > > > > >> > >>> > > > statements reference files that are not available > in > > > the > > > > > > >> > 3rd-party > > > > > > >> > >>> > > > directory but are only present in the IDF. For > > > example: > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > - esp_private/pm_impl.h > > > > > > >> > >>> > > > - esp_cpu.h > > > > > > >> > >>> > > > - components/esp_driver_gpio/include/rtc_io.h > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > I need those includes because sleep_modes.c uses > > > > function > > > > > > from > > > > > > >> > >>> there. > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > Could you please advise if it's possible to > > > incorporate > > > > > > these > > > > > > >> IDF > > > > > > >> > >>> > folders > > > > > > >> > >>> > > > into the 3rd-party directory, or if that approach > is > > > not > > > > > > >> > >>> recommended? > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > Thank you for your assistance. > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > Best regards, > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > Em qua., 23 de out. de 2024 às 15:21, Tiago > Medicci > > > > > Serrano > > > > > > < > > > > > > >> > >>> > > > tiago.medi...@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > > Hi, > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > Just another note to guide your development: we > > > don't > > > > > > >> develop > > > > > > >> > >>> > anything > > > > > > >> > >>> > > on > > > > > > >> > >>> > > > > `esp-hal-3rdparty`: most of the code we use from > > it > > > is > > > > > > >> derived > > > > > > >> > >>> from > > > > > > >> > >>> > the > > > > > > >> > >>> > > > > path > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > https://github.com/espressif/esp-hal-3rdparty/tree/release/v5.1.c/components/hal > > > > > > >> > >>> > > > > (essentially, header files from > > > > > > >> > >>> `components/hal/<chip>/include/hal`, > > > > > > >> > >>> > > > except > > > > > > >> > >>> > > > > for some of the sources files that use the hal > > > > functions > > > > > > at > > > > > > >> > >>> > > > > `components/hal` to implement some function we > may > > > > use). > > > > > > You > > > > > > >> > can > > > > > > >> > >>> > take a > > > > > > >> > >>> > > > > look at the branch ` > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > > > >> > > > > > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c` > <https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > <https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > > <https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > > > < > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > > > > < > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > > > > > < > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c> > > > > > > >> < > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > > > > > >> > < > > > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > > > > > > >> > >>> < > > > > > > >> > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > >> > >>> > < > > > > > > >> > > > > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > > >> > >>> > > < > > > > > > >> > >>> > > > > > > >> > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > >> > >>> > > > < > > > > > > >> > >>> > > > > > > >> > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > > > >> > >>> > > > > < > > > > > > >> > >>> > > > > > > > >> > > > > https://github.com/espressif/esp-hal-3rdparty/commits/release/v5.1.c > > > > > > >> > > > > > > > > >> > >>> > > > and > > > > > > >> > >>> > > > > especially the commits beginning > > > > > > >> > >>> > > > > with faaa46ebfb37fba4250de831efbbf2862958c344 to > > > check > > > > > the > > > > > > >> kind > > > > > > >> > >>> of > > > > > > >> > >>> > > > changes > > > > > > >> > >>> > > > > we do in hal. Essentially, we create a wrapper > > layer > > > > to > > > > > > >> make it > > > > > > >> > >>> > > > independent > > > > > > >> > >>> > > > > of the host OS. > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > *Drivers must always be implemented on NuttX!* > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > That being said, you can either 1) try to adapt > > the > > > > > > >> > >>> implementation of > > > > > > >> > >>> > > > other > > > > > > >> > >>> > > > > devices to use the HAL functions or 2) get some > > > > > > inspiration > > > > > > >> on > > > > > > >> > >>> how > > > > > > >> > >>> > IDF > > > > > > >> > >>> > > > > implements PM. I'd stick with the 2nd option > > before > > > > > simply > > > > > > >> > >>> trying to > > > > > > >> > >>> > > > adapt > > > > > > >> > >>> > > > > an existing implementation (from ESP32-C3 legacy > > or > > > > from > > > > > > >> > >>> > > ESP32/ESP32-S3). > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > Best regards, > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > Em qua., 23 de out. de 2024 às 13:35, Felipe > Moura > > > > > > Oliveira > > > > > > >> < > > > > > > >> > >>> > > > > moura....@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > Hello Tiago. > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > Thank you for clarification, I will follow > your > > > > > > >> instructions. > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > Em qua., 23 de out. de 2024 às 13:01, Tiago > > > Medicci > > > > > > >> Serrano < > > > > > > >> > >>> > > > > > tiago.medi...@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > > Hi Felipe, > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > Just complementing: use your forked version > of > > > the > > > > > HAL > > > > > > >> > >>> during the > > > > > > >> > >>> > > > > > > development. As soon as you have a working > > > > version, > > > > > > you > > > > > > >> can > > > > > > >> > >>> > submit > > > > > > >> > >>> > > on > > > > > > >> > >>> > > > > the > > > > > > >> > >>> > > > > > > official repository. > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > Best regards, > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > Em qua., 23 de out. de 2024 às 12:58, Tiago > > > > Medicci > > > > > > >> > Serrano < > > > > > > >> > >>> > > > > > > tiago.medi...@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > > Hi Felipe, > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > Thanks for asking! You should follow the > > path > > > > > using > > > > > > >> the > > > > > > >> > >>> > functions > > > > > > >> > >>> > > > on > > > > > > >> > >>> > > > > > > > esp-hal-3rdparty. You can fork the > > repository > > > > and > > > > > > use > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > > >> > > `ESP_HAL_3RDPARTY_VERSION=b4c723a119344b4b71d69819019d55637fb570fd > > > > > > >> > >>> > > > > > > > ESP_HAL_3RDPARTY_URL="g...@github.com: > > > > > > >> > >>> > > > tmedicci/esp-hal-3rdparty.git"` > > > > > > >> > >>> > > > > > env > > > > > > >> > >>> > > > > > > > vars (globally or before the make command) > > to > > > > use > > > > > > your > > > > > > >> > >>> version > > > > > > >> > >>> > of > > > > > > >> > >>> > > > the > > > > > > >> > >>> > > > > > > HAL. > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > I just wanted to share some thoughts: > using > > > the > > > > > HAL > > > > > > >> > >>> enables us > > > > > > >> > >>> > to > > > > > > >> > >>> > > > > make > > > > > > >> > >>> > > > > > > the > > > > > > >> > >>> > > > > > > > feature available for all the Espressif > > > devices > > > > > > >> (please > > > > > > >> > >>> don't > > > > > > >> > >>> > > > bother > > > > > > >> > >>> > > > > > with > > > > > > >> > >>> > > > > > > > that now, as soon as you submit it, we can > > > test > > > > > for > > > > > > >> the > > > > > > >> > >>> other > > > > > > >> > >>> > > > devices > > > > > > >> > >>> > > > > > and > > > > > > >> > >>> > > > > > > > eventually make any adjustments). Although > > > it's > > > > > > >> possible > > > > > > >> > to > > > > > > >> > >>> > > > > reimplement > > > > > > >> > >>> > > > > > > > these functions on NuttX, we don't > recommend > > > > that > > > > > > >> because > > > > > > >> > >>> of > > > > > > >> > >>> > the > > > > > > >> > >>> > > > > first > > > > > > >> > >>> > > > > > > > statement (the ability to use for the > other > > > > > > devices): > > > > > > >> in > > > > > > >> > >>> that > > > > > > >> > >>> > > case > > > > > > >> > >>> > > > we > > > > > > >> > >>> > > > > > > > wouldn't be able to support the feature. > You > > > can > > > > > > take > > > > > > >> a > > > > > > >> > >>> look on > > > > > > >> > >>> > > IDF > > > > > > >> > >>> > > > > for > > > > > > >> > >>> > > > > > > > some inspiration on how it's implemented. > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > Please let me know if you have any > > questions. > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > Best regards, > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > Em qua., 23 de out. de 2024 às 12:38, > Felipe > > > > Moura > > > > > > >> > >>> Oliveira < > > > > > > >> > >>> > > > > > > > moura....@gmail.com> escreveu: > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > >> Hello everyone, > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> Our project has reached a point where we > > need > > > > the > > > > > > >> Power > > > > > > >> > >>> > Manager > > > > > > >> > >>> > > > > > > >> functionality, which is not yet available > > in > > > > the > > > > > > >> > ESP32C6. > > > > > > >> > >>> I am > > > > > > >> > >>> > > > > > studying > > > > > > >> > >>> > > > > > > to > > > > > > >> > >>> > > > > > > >> start the implementation, but I am > confused > > > > about > > > > > > the > > > > > > >> > >>> correct > > > > > > >> > >>> > > way > > > > > > >> > >>> > > > to > > > > > > >> > >>> > > > > > > >> approach this. > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> There is a Power Manager implementation > for > > > the > > > > > > >> ESP32C3, > > > > > > >> > >>> but > > > > > > >> > >>> > it > > > > > > >> > >>> > > > > seems > > > > > > >> > >>> > > > > > to > > > > > > >> > >>> > > > > > > >> follow the legacy methodology. In fact, > the > > > > file > > > > > > >> > >>> > esp32c3_idle.c > > > > > > >> > >>> > > is > > > > > > >> > >>> > > > > > > located > > > > > > >> > >>> > > > > > > >> in the path > arch/risc-v/src/esp32c3-legacy. > > > In > > > > > this > > > > > > >> > >>> > methodology, > > > > > > >> > >>> > > > > > > functions > > > > > > >> > >>> > > > > > > >> are re-implemented from the Espressif > > driver. > > > > For > > > > > > >> > >>> example, the > > > > > > >> > >>> > > > > > function > > > > > > >> > >>> > > > > > > >> esp32c3_light_sleep_start(), which is > > > currently > > > > > > >> > available > > > > > > >> > >>> in > > > > > > >> > >>> > > > > > > >> > esp32c6/esp-hal-3rdparty/.../sleep_modes.c. > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> I tried using the implementations from > > > > > > >> esp-hal-3rdparty > > > > > > >> > to > > > > > > >> > >>> > > develop > > > > > > >> > >>> > > > > the > > > > > > >> > >>> > > > > > > >> Power Manager for the ESP32C6 in NuttX, > but > > > the > > > > > > files > > > > > > >> > >>> still > > > > > > >> > >>> > have > > > > > > >> > >>> > > > > many > > > > > > >> > >>> > > > > > > >> dependencies on items that are not > present > > in > > > > > > NuttX. > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> My question is: Should I try to make the > > > Power > > > > > > >> Manager > > > > > > >> > >>> work > > > > > > >> > >>> > > using > > > > > > >> > >>> > > > > the > > > > > > >> > >>> > > > > > > >> functions in esp-hal-3rdparty, even if it > > > > > requires > > > > > > >> > making > > > > > > >> > >>> > > changes > > > > > > >> > >>> > > > to > > > > > > >> > >>> > > > > > the > > > > > > >> > >>> > > > > > > >> 3rd-party code? Or should I re-implement > > the > > > > > > >> functions > > > > > > >> > >>> within > > > > > > >> > >>> > > > NuttX, > > > > > > >> > >>> > > > > > > even > > > > > > >> > >>> > > > > > > >> if, in this case, there are functions > with > > > the > > > > > same > > > > > > >> > scope > > > > > > >> > >>> and > > > > > > >> > >>> > > > > > > >> implementation in different files, where > > one > > > is > > > > > > >> > compiled, > > > > > > >> > >>> and > > > > > > >> > >>> > > the > > > > > > >> > >>> > > > > > other > > > > > > >> > >>> > > > > > > is > > > > > > >> > >>> > > > > > > >> not? > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > >> -- > > > > > > >> > >>> > > > > > > >> *Felipe Moura de Oliveira* > > > > > > >> > >>> > > > > > > >> *Universidade Federal de Minas Gerais* > > > > > > >> > >>> > > > > > > >> Linkedin < > > > > > > >> > >>> > https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > >> > >>> > > > > > > >> < > > > https://twitter.com/FelipeMOliveir?lang=pt-br > > > > > > > > > > > >> > >>> > > > > > > >> > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > -- > > > > > > >> > >>> > > > > > > > Tiago Medicci Serrano > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > Embedded Software Engineer > > > > > > >> > >>> > > > > > > > MSc Electronics/Microelectronics > > > > > > >> > >>> > > > > > > > m: +55 (19) 981403886 <+55+(19)+981403886> > > > > > > >> > >>> > > > > > > > e: tiago.medi...@gmail.com > > > > > > >> > >>> > > > > > > > a: Campinas, Brazil > > > > > > >> > >>> > > > > > > > Follow me: > > > > > > >> > >>> > > > > > > > < > > > > > https://www.linkedin.com/in/tiago-serrano-924458b6 > > > > > > > > > > > > > >> > >>> > > > > > > > <https://github.com/tmedicci> > > > > > > >> > >>> > > > > > > > > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > -- > > > > > > >> > >>> > > > > > > Tiago Medicci Serrano > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > Embedded Software Engineer > > > > > > >> > >>> > > > > > > MSc Electronics/Microelectronics > > > > > > >> > >>> > > > > > > m: +55 (19) 981403886 <+55+(19)+981403886> > > > > > > >> > >>> > > > > > > e: tiago.medi...@gmail.com > > > > > > >> > >>> > > > > > > a: Campinas, Brazil > > > > > > >> > >>> > > > > > > Follow me: > > > > > > >> > >>> > > > > > > < > > > > https://www.linkedin.com/in/tiago-serrano-924458b6 > > > > > > > > > > > > >> > >>> > > > > > > <https://github.com/tmedicci> > > > > > > >> > >>> > > > > > > > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > -- > > > > > > >> > >>> > > > > > *Felipe Moura de Oliveira* > > > > > > >> > >>> > > > > > *Universidade Federal de Minas Gerais* > > > > > > >> > >>> > > > > > Linkedin < > > > > > > >> > https://www.linkedin.com/in/felipe-oliveira-75a651a0 > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > < > https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > >>> > > > > > > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > -- > > > > > > >> > >>> > > > > Tiago Medicci Serrano > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > Embedded Software Engineer > > > > > > >> > >>> > > > > MSc Electronics/Microelectronics > > > > > > >> > >>> > > > > m: +55 (19) 981403886 <+55+(19)+981403886> > > > > > > >> > >>> > > > > e: tiago.medi...@gmail.com > > > > > > >> > >>> > > > > a: Campinas, Brazil > > > > > > >> > >>> > > > > Follow me: > > > > > > >> > >>> > > > > < > > https://www.linkedin.com/in/tiago-serrano-924458b6 > > > > > > > > > > >> > >>> > > > > <https://github.com/tmedicci> > > > > > > >> > >>> > > > > > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > -- > > > > > > >> > >>> > > > *Felipe Moura de Oliveira* > > > > > > >> > >>> > > > *Universidade Federal de Minas Gerais* > > > > > > >> > >>> > > > Linkedin < > > > > > > >> https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > >> > >>> > > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > >>> > > > > > > > > > >> > >>> > > > > > > > > >> > >>> > > > > > > > > >> > >>> > > -- > > > > > > >> > >>> > > Tiago Medicci Serrano > > > > > > >> > >>> > > > > > > > > >> > >>> > > Embedded Software Engineer > > > > > > >> > >>> > > MSc Electronics/Microelectronics > > > > > > >> > >>> > > m: +55 (19) 981403886 <+55+(19)+981403886> > > > > > > >> > >>> > > e: tiago.medi...@gmail.com > > > > > > >> > >>> > > a: Campinas, Brazil > > > > > > >> > >>> > > Follow me: > > > > > > >> > >>> > > <https://www.linkedin.com/in/tiago-serrano-924458b6 > > > > > > > > >> > >>> > > <https://github.com/tmedicci> > > > > > > >> > >>> > > > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > > >> > >>> > -- > > > > > > >> > >>> > *Felipe Moura de Oliveira* > > > > > > >> > >>> > *Universidade Federal de Minas Gerais* > > > > > > >> > >>> > Linkedin < > > > > > https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > >> > >>> > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > >>> > > > > > > > >> > >>> > > > > > > >> > >> > > > > > > >> > >> > > > > > > >> > >> -- > > > > > > >> > >> *Felipe Moura de Oliveira* > > > > > > >> > >> *Universidade Federal de Minas Gerais* > > > > > > >> > >> Linkedin < > > > https://www.linkedin.com/in/felipe-oliveira-75a651a0 > > > > > > > > > > > >> > >> <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > >> > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > -- > > > > > > >> > > *Felipe Moura de Oliveira* > > > > > > >> > > *Universidade Federal de Minas Gerais* > > > > > > >> > > Linkedin < > > > https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > >> > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > >> > -- > > > > > > >> > *Felipe Moura de Oliveira* > > > > > > >> > *Universidade Federal de Minas Gerais* > > > > > > >> > Linkedin < > > https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > >> > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > *Felipe Moura de Oliveira* > > > > > > > *Universidade Federal de Minas Gerais* > > > > > > > Linkedin <https://www.linkedin.com/in/felipe-oliveira-75a651a0 > > > > > > > > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > *Felipe Moura de Oliveira* > > > > > > *Universidade Federal de Minas Gerais* > > > > > > Linkedin <https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > > > > > > > > > > > > > > > > > > -- > > > > *Felipe Moura de Oliveira* > > > > *Universidade Federal de Minas Gerais* > > > > Linkedin <https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > > > > > > > > > > > -- > > *Felipe Moura de Oliveira* > > *Universidade Federal de Minas Gerais* > > Linkedin <https://www.linkedin.com/in/felipe-oliveira-75a651a0> > > <https://twitter.com/FelipeMOliveir?lang=pt-br> > > > -- *Felipe Moura de Oliveira* *Universidade Federal de Minas Gerais* Linkedin <https://www.linkedin.com/in/felipe-oliveira-75a651a0> <https://twitter.com/FelipeMOliveir?lang=pt-br>