diff --git a/.gitignore b/.gitignore
index 6818f9d1..e1534eed 100755
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@
sdkconfig
sdkconfig
sdkconfig
+.project
diff --git a/.project b/.project
index 2b48ebfb..bd19dfcf 100755
--- a/.project
+++ b/.project
@@ -17,6 +17,4588 @@
org.eclipse.cdt.core.ccnature
com.espressif.idf.core.idfNature
+
+
+ esp_idf_components/app_trace/app_trace.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_trace/app_trace.c
+
+
+ esp_idf_components/app_trace/app_trace_util.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_trace/app_trace_util.c
+
+
+ esp_idf_components/app_trace/host_file_io.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_trace/host_file_io.c
+
+
+ esp_idf_components/app_update/esp_app_desc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_update/esp_app_desc.c
+
+
+ esp_idf_components/app_update/esp_ota_ops.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_update/esp_ota_ops.c
+
+
+ esp_idf_components/console/commands.c
+ 1
+ C:/Development/esp/esp-idf-44/components/console/commands.c
+
+
+ esp_idf_components/console/esp_console_repl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/console/esp_console_repl.c
+
+
+ esp_idf_components/console/split_argv.c
+ 1
+ C:/Development/esp/esp-idf-44/components/console/split_argv.c
+
+
+ esp_idf_components/cxx/cxx_exception_stubs.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/cxx/cxx_exception_stubs.cpp
+
+
+ esp_idf_components/cxx/cxx_guards.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/cxx/cxx_guards.cpp
+
+
+ esp_idf_components/driver/adc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/adc.c
+
+
+ esp_idf_components/driver/adc_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/adc_common.c
+
+
+ esp_idf_components/driver/adc_deprecated.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/adc_deprecated.c
+
+
+ esp_idf_components/driver/dac_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/dac_common.c
+
+
+ esp_idf_components/driver/gpio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/gpio.c
+
+
+ esp_idf_components/driver/i2c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/i2c.c
+
+
+ esp_idf_components/driver/i2s.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/i2s.c
+
+
+ esp_idf_components/driver/ledc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/ledc.c
+
+
+ esp_idf_components/driver/mcpwm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/mcpwm.c
+
+
+ esp_idf_components/driver/pcnt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/pcnt.c
+
+
+ esp_idf_components/driver/periph_ctrl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/periph_ctrl.c
+
+
+ esp_idf_components/driver/rmt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/rmt.c
+
+
+ esp_idf_components/driver/rtc_io.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/rtc_io.c
+
+
+ esp_idf_components/driver/rtc_module.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/rtc_module.c
+
+
+ esp_idf_components/driver/sdio_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdio_slave.c
+
+
+ esp_idf_components/driver/sdmmc_host.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdmmc_host.c
+
+
+ esp_idf_components/driver/sdmmc_transaction.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdmmc_transaction.c
+
+
+ esp_idf_components/driver/sdspi_crc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdspi_crc.c
+
+
+ esp_idf_components/driver/sdspi_host.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdspi_host.c
+
+
+ esp_idf_components/driver/sdspi_transaction.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sdspi_transaction.c
+
+
+ esp_idf_components/driver/sigmadelta.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/sigmadelta.c
+
+
+ esp_idf_components/driver/spi_bus_lock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/spi_bus_lock.c
+
+
+ esp_idf_components/driver/spi_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/spi_common.c
+
+
+ esp_idf_components/driver/spi_master.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/spi_master.c
+
+
+ esp_idf_components/driver/spi_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/spi_slave.c
+
+
+ esp_idf_components/driver/timer.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/timer.c
+
+
+ esp_idf_components/driver/touch_sensor_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/touch_sensor_common.c
+
+
+ esp_idf_components/driver/twai.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/twai.c
+
+
+ esp_idf_components/driver/uart.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/uart.c
+
+
+ esp_idf_components/esp-tls/esp_tls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp-tls/esp_tls.c
+
+
+ esp_idf_components/esp-tls/esp_tls_error_capture.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp-tls/esp_tls_error_capture.c
+
+
+ esp_idf_components/esp-tls/esp_tls_mbedtls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp-tls/esp_tls_mbedtls.c
+
+
+ esp_idf_components/esp_adc_cal/esp_adc_cal_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_adc_cal/esp_adc_cal_esp32.c
+
+
+ esp_idf_components/esp_event/default_event_loop.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_event/default_event_loop.c
+
+
+ esp_idf_components/esp_event/esp_event.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_event/esp_event.c
+
+
+ esp_idf_components/esp_event/esp_event_private.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_event/esp_event_private.c
+
+
+ esp_idf_components/esp_event/event_loop_legacy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_event/event_loop_legacy.c
+
+
+ esp_idf_components/esp_event/event_send.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_event/event_send.c
+
+
+ esp_idf_components/esp_http_client/esp_http_client.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_client/esp_http_client.c
+
+
+ esp_idf_components/esp_hw_support/clk_ctrl_os.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/clk_ctrl_os.c
+
+
+ esp_idf_components/esp_hw_support/compare_set.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/compare_set.c
+
+
+ esp_idf_components/esp_hw_support/cpu_util.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/cpu_util.c
+
+
+ esp_idf_components/esp_hw_support/esp_async_memcpy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/esp_async_memcpy.c
+
+
+ esp_idf_components/esp_hw_support/esp_clk.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/esp_clk.c
+
+
+ esp_idf_components/esp_hw_support/hw_random.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/hw_random.c
+
+
+ esp_idf_components/esp_hw_support/intr_alloc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/intr_alloc.c
+
+
+ esp_idf_components/esp_hw_support/mac_addr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/mac_addr.c
+
+
+ esp_idf_components/esp_hw_support/regi2c_ctrl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/regi2c_ctrl.c
+
+
+ esp_idf_components/esp_hw_support/sleep_gpio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/sleep_gpio.c
+
+
+ esp_idf_components/esp_hw_support/sleep_mac_bb.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/sleep_mac_bb.c
+
+
+ esp_idf_components/esp_hw_support/sleep_modes.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/sleep_modes.c
+
+
+ esp_idf_components/esp_netif/esp_netif_defaults.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/esp_netif_defaults.c
+
+
+ esp_idf_components/esp_netif/esp_netif_handlers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/esp_netif_handlers.c
+
+
+ esp_idf_components/esp_netif/esp_netif_objects.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/esp_netif_objects.c
+
+
+ esp_idf_components/esp_pm/pm_impl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_pm/pm_impl.c
+
+
+ esp_idf_components/esp_pm/pm_locks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_pm/pm_locks.c
+
+
+ esp_idf_components/esp_pm/pm_trace.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_pm/pm_trace.c
+
+
+ esp_idf_components/esp_ringbuf/ringbuf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_ringbuf/ringbuf.c
+
+
+ esp_idf_components/esp_serial_slave_link/essl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_serial_slave_link/essl.c
+
+
+ esp_idf_components/esp_serial_slave_link/essl_sdio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_serial_slave_link/essl_sdio.c
+
+
+ esp_idf_components/esp_serial_slave_link/essl_spi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_serial_slave_link/essl_spi.c
+
+
+ esp_idf_components/esp_system/crosscore_int.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/crosscore_int.c
+
+
+ esp_idf_components/esp_system/dbg_stubs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/dbg_stubs.c
+
+
+ esp_idf_components/esp_system/esp_err.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/esp_err.c
+
+
+ esp_idf_components/esp_system/esp_system.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/esp_system.c
+
+
+ esp_idf_components/esp_system/freertos_hooks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/freertos_hooks.c
+
+
+ esp_idf_components/esp_system/int_wdt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/int_wdt.c
+
+
+ esp_idf_components/esp_system/panic.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/panic.c
+
+
+ esp_idf_components/esp_system/stack_check.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/stack_check.c
+
+
+ esp_idf_components/esp_system/startup.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/startup.c
+
+
+ esp_idf_components/esp_system/system_time.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/system_time.c
+
+
+ esp_idf_components/esp_system/task_wdt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/task_wdt.c
+
+
+ esp_idf_components/esp_system/ubsan.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/ubsan.c
+
+
+ esp_idf_components/esp_system/xt_wdt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/xt_wdt.c
+
+
+ esp_idf_components/esp_websocket_client/esp_websocket_client.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_websocket_client/esp_websocket_client.c
+
+
+ esp_idf_components/freertos/FreeRTOS-openocd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/FreeRTOS-openocd.c
+
+
+ esp_idf_components/freertos/croutine.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/croutine.c
+
+
+ esp_idf_components/freertos/event_groups.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/event_groups.c
+
+
+ esp_idf_components/freertos/freertos_v8_compat.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/freertos_v8_compat.c
+
+
+ esp_idf_components/freertos/list.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/list.c
+
+
+ esp_idf_components/freertos/queue.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/queue.c
+
+
+ esp_idf_components/freertos/stream_buffer.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/stream_buffer.c
+
+
+ esp_idf_components/freertos/tasks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/tasks.c
+
+
+ esp_idf_components/freertos/timers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/timers.c
+
+
+ esp_idf_components/hal/adc_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/adc_hal.c
+
+
+ esp_idf_components/hal/aes_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/aes_hal.c
+
+
+ esp_idf_components/hal/cpu_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/cpu_hal.c
+
+
+ esp_idf_components/hal/dac_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/dac_hal.c
+
+
+ esp_idf_components/hal/emac_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/emac_hal.c
+
+
+ esp_idf_components/hal/gpio_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/gpio_hal.c
+
+
+ esp_idf_components/hal/i2c_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/i2c_hal.c
+
+
+ esp_idf_components/hal/i2c_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/i2c_hal_iram.c
+
+
+ esp_idf_components/hal/i2s_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/i2s_hal.c
+
+
+ esp_idf_components/hal/interrupt_controller_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/interrupt_controller_hal.c
+
+
+ esp_idf_components/hal/ledc_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/ledc_hal.c
+
+
+ esp_idf_components/hal/ledc_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/ledc_hal_iram.c
+
+
+ esp_idf_components/hal/mcpwm_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/mcpwm_hal.c
+
+
+ esp_idf_components/hal/mpu_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/mpu_hal.c
+
+
+ esp_idf_components/hal/pcnt_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/pcnt_hal.c
+
+
+ esp_idf_components/hal/rmt_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/rmt_hal.c
+
+
+ esp_idf_components/hal/rtc_io_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/rtc_io_hal.c
+
+
+ esp_idf_components/hal/sdio_slave_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/sdio_slave_hal.c
+
+
+ esp_idf_components/hal/sha_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/sha_hal.c
+
+
+ esp_idf_components/hal/sigmadelta_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/sigmadelta_hal.c
+
+
+ esp_idf_components/hal/soc_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/soc_hal.c
+
+
+ esp_idf_components/hal/spi_flash_encrypt_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_flash_encrypt_hal_iram.c
+
+
+ esp_idf_components/hal/spi_flash_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_flash_hal.c
+
+
+ esp_idf_components/hal/spi_flash_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_flash_hal_iram.c
+
+
+ esp_idf_components/hal/spi_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_hal.c
+
+
+ esp_idf_components/hal/spi_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_hal_iram.c
+
+
+ esp_idf_components/hal/spi_slave_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_slave_hal.c
+
+
+ esp_idf_components/hal/spi_slave_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/spi_slave_hal_iram.c
+
+
+ esp_idf_components/hal/timer_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/timer_hal.c
+
+
+ esp_idf_components/hal/touch_sensor_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/touch_sensor_hal.c
+
+
+ esp_idf_components/hal/twai_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/twai_hal.c
+
+
+ esp_idf_components/hal/twai_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/twai_hal_iram.c
+
+
+ esp_idf_components/hal/uart_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/uart_hal.c
+
+
+ esp_idf_components/hal/uart_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/uart_hal_iram.c
+
+
+ esp_idf_components/hal/wdt_hal_iram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/wdt_hal_iram.c
+
+
+ esp_idf_components/heap/heap_caps.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/heap_caps.c
+
+
+ esp_idf_components/heap/heap_caps_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/heap_caps_init.c
+
+
+ esp_idf_components/heap/heap_tlsf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/heap_tlsf.c
+
+
+ esp_idf_components/heap/multi_heap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/multi_heap.c
+
+
+ esp_idf_components/log/log.c
+ 1
+ C:/Development/esp/esp-idf-44/components/log/log.c
+
+
+ esp_idf_components/log/log_buffers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/log/log_buffers.c
+
+
+ esp_idf_components/log/log_freertos.c
+ 1
+ C:/Development/esp/esp-idf-44/components/log/log_freertos.c
+
+
+ esp_idf_components/mdns/mdns.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mdns/mdns.c
+
+
+ esp_idf_components/mdns/mdns_console.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mdns/mdns_console.c
+
+
+ esp_idf_components/mdns/mdns_networking_lwip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mdns/mdns_networking_lwip.c
+
+
+ esp_idf_components/newlib/abort.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/abort.c
+
+
+ esp_idf_components/newlib/assert.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/assert.c
+
+
+ esp_idf_components/newlib/heap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/heap.c
+
+
+ esp_idf_components/newlib/locks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/locks.c
+
+
+ esp_idf_components/newlib/newlib_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/newlib_init.c
+
+
+ esp_idf_components/newlib/poll.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/poll.c
+
+
+ esp_idf_components/newlib/pthread.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/pthread.c
+
+
+ esp_idf_components/newlib/random.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/random.c
+
+
+ esp_idf_components/newlib/realpath.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/realpath.c
+
+
+ esp_idf_components/newlib/reent_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/reent_init.c
+
+
+ esp_idf_components/newlib/stdatomic.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/stdatomic.c
+
+
+ esp_idf_components/newlib/syscalls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/syscalls.c
+
+
+ esp_idf_components/newlib/sysconf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/sysconf.c
+
+
+ esp_idf_components/newlib/termios.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/termios.c
+
+
+ esp_idf_components/newlib/time.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/time.c
+
+
+ esp_idf_components/perfmon/xtensa_perfmon_access.c
+ 1
+ C:/Development/esp/esp-idf-44/components/perfmon/xtensa_perfmon_access.c
+
+
+ esp_idf_components/perfmon/xtensa_perfmon_apis.c
+ 1
+ C:/Development/esp/esp-idf-44/components/perfmon/xtensa_perfmon_apis.c
+
+
+ esp_idf_components/perfmon/xtensa_perfmon_masks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/perfmon/xtensa_perfmon_masks.c
+
+
+ esp_idf_components/pthread/pthread.c
+ 1
+ C:/Development/esp/esp-idf-44/components/pthread/pthread.c
+
+
+ esp_idf_components/pthread/pthread_cond_var.c
+ 1
+ C:/Development/esp/esp-idf-44/components/pthread/pthread_cond_var.c
+
+
+ esp_idf_components/pthread/pthread_local_storage.c
+ 1
+ C:/Development/esp/esp-idf-44/components/pthread/pthread_local_storage.c
+
+
+ esp_idf_components/pthread/pthread_rwlock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/pthread/pthread_rwlock.c
+
+
+ esp_idf_components/sdmmc/sdmmc_cmd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_cmd.c
+
+
+ esp_idf_components/sdmmc/sdmmc_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_common.c
+
+
+ esp_idf_components/sdmmc/sdmmc_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_init.c
+
+
+ esp_idf_components/sdmmc/sdmmc_io.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_io.c
+
+
+ esp_idf_components/sdmmc/sdmmc_mmc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_mmc.c
+
+
+ esp_idf_components/sdmmc/sdmmc_sd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/sdmmc/sdmmc_sd.c
+
+
+ esp_idf_components/soc/lldesc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/lldesc.c
+
+
+ esp_idf_components/soc/soc_include_legacy_warn.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/soc_include_legacy_warn.c
+
+
+ esp_idf_components/spi_flash/cache_utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/cache_utils.c
+
+
+ esp_idf_components/spi_flash/esp_flash_api.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/esp_flash_api.c
+
+
+ esp_idf_components/spi_flash/esp_flash_spi_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/esp_flash_spi_init.c
+
+
+ esp_idf_components/spi_flash/flash_mmap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/flash_mmap.c
+
+
+ esp_idf_components/spi_flash/flash_ops.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/flash_ops.c
+
+
+ esp_idf_components/spi_flash/memspi_host_driver.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/memspi_host_driver.c
+
+
+ esp_idf_components/spi_flash/partition.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/partition.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_boya.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_boya.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_drivers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_drivers.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_gd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_gd.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_generic.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_generic.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_issi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_issi.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_mxic.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_mxic.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_mxic_opi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_mxic_opi.c
+
+
+ esp_idf_components/spi_flash/spi_flash_chip_winbond.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_chip_winbond.c
+
+
+ esp_idf_components/spi_flash/spi_flash_os_func_app.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_os_func_app.c
+
+
+ esp_idf_components/spi_flash/spi_flash_os_func_noos.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/spi_flash_os_func_noos.c
+
+
+ esp_idf_components/spiffs/esp_spiffs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/esp_spiffs.c
+
+
+ esp_idf_components/spiffs/spiffs_api.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs_api.c
+
+
+ esp_idf_components/tcp_transport/transport.c
+ 1
+ C:/Development/esp/esp-idf-44/components/tcp_transport/transport.c
+
+
+ esp_idf_components/tcp_transport/transport_ssl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/tcp_transport/transport_ssl.c
+
+
+ esp_idf_components/tcp_transport/transport_utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/tcp_transport/transport_utils.c
+
+
+ esp_idf_components/tcp_transport/transport_ws.c
+ 1
+ C:/Development/esp/esp-idf-44/components/tcp_transport/transport_ws.c
+
+
+ esp_idf_components/tcpip_adapter/tcpip_adapter_compat.c
+ 1
+ C:/Development/esp/esp-idf-44/components/tcpip_adapter/tcpip_adapter_compat.c
+
+
+ esp_idf_components/ulp/ulp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/ulp/ulp.c
+
+
+ esp_idf_components/ulp/ulp_macro.c
+ 1
+ C:/Development/esp/esp-idf-44/components/ulp/ulp_macro.c
+
+
+ esp_idf_components/unity/unity_port_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/unity/unity_port_esp32.c
+
+
+ esp_idf_components/unity/unity_runner.c
+ 1
+ C:/Development/esp/esp-idf-44/components/unity/unity_runner.c
+
+
+ esp_idf_components/vfs/vfs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/vfs/vfs.c
+
+
+ esp_idf_components/vfs/vfs_console.c
+ 1
+ C:/Development/esp/esp-idf-44/components/vfs/vfs_console.c
+
+
+ esp_idf_components/vfs/vfs_eventfd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/vfs/vfs_eventfd.c
+
+
+ esp_idf_components/vfs/vfs_semihost.c
+ 1
+ C:/Development/esp/esp-idf-44/components/vfs/vfs_semihost.c
+
+
+ esp_idf_components/vfs/vfs_uart.c
+ 1
+ C:/Development/esp/esp-idf-44/components/vfs/vfs_uart.c
+
+
+ esp_idf_components/wear_levelling/Partition.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/Partition.cpp
+
+
+ esp_idf_components/wear_levelling/SPI_Flash.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/SPI_Flash.cpp
+
+
+ esp_idf_components/wear_levelling/WL_Ext_Perf.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/WL_Ext_Perf.cpp
+
+
+ esp_idf_components/wear_levelling/WL_Ext_Safe.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/WL_Ext_Safe.cpp
+
+
+ esp_idf_components/wear_levelling/WL_Flash.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/WL_Flash.cpp
+
+
+ esp_idf_components/wear_levelling/crc32.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/crc32.cpp
+
+
+ esp_idf_components/wear_levelling/wear_levelling.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/wear_levelling/wear_levelling.cpp
+
+
+ esp_idf_components/xtensa/eri.c
+ 1
+ C:/Development/esp/esp-idf-44/components/xtensa/eri.c
+
+
+ esp_idf_components/xtensa/xt_trax.c
+ 1
+ C:/Development/esp/esp-idf-44/components/xtensa/xt_trax.c
+
+
+ esp_idf_components/xtensa/xtensa_intr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/xtensa/xtensa_intr.c
+
+
+ esp_idf_components/xtensa/xtensa_intr_asm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/xtensa/xtensa_intr_asm.S
+
+
+ esp_idf_components/app_trace/gcov/gcov_rtio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/app_trace/gcov/gcov_rtio.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_clock_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_clock_init.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_common.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_common_loader.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_common_loader.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_efuse_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_efuse_esp32.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_flash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_flash.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_flash_config_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_flash_config_esp32.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_mem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_mem.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_random.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_random.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_random_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_random_esp32.c
+
+
+ esp_idf_components/bootloader_support/src/bootloader_utility.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/bootloader_utility.c
+
+
+ esp_idf_components/bootloader_support/src/esp_image_format.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/esp_image_format.c
+
+
+ esp_idf_components/bootloader_support/src/flash_encrypt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/flash_encrypt.c
+
+
+ esp_idf_components/bootloader_support/src/flash_partitions.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/flash_partitions.c
+
+
+ esp_idf_components/bootloader_support/src/flash_qio_mode.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/flash_qio_mode.c
+
+
+ esp_idf_components/bootloader_support/src/secure_boot.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/secure_boot.c
+
+
+ esp_idf_components/console/argtable3/argtable3.c
+ 1
+ C:/Development/esp/esp-idf-44/components/console/argtable3/argtable3.c
+
+
+ esp_idf_components/console/linenoise/linenoise.c
+ 1
+ C:/Development/esp/esp-idf-44/components/console/linenoise/linenoise.c
+
+
+ esp_idf_components/driver/esp32/adc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/esp32/adc.c
+
+
+ esp_idf_components/driver/esp32/dac.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/esp32/dac.c
+
+
+ esp_idf_components/driver/esp32/touch_sensor.c
+ 1
+ C:/Development/esp/esp-idf-44/components/driver/esp32/touch_sensor.c
+
+
+ esp_idf_components/efuse/esp32/esp_efuse_fields.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/esp32/esp_efuse_fields.c
+
+
+ esp_idf_components/efuse/esp32/esp_efuse_table.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/esp32/esp_efuse_table.c
+
+
+ esp_idf_components/efuse/esp32/esp_efuse_utility.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/esp32/esp_efuse_utility.c
+
+
+ esp_idf_components/efuse/src/esp_efuse_api.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/src/esp_efuse_api.c
+
+
+ esp_idf_components/efuse/src/esp_efuse_api_key_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/src/esp_efuse_api_key_esp32.c
+
+
+ esp_idf_components/efuse/src/esp_efuse_fields.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/src/esp_efuse_fields.c
+
+
+ esp_idf_components/efuse/src/esp_efuse_utility.c
+ 1
+ C:/Development/esp/esp-idf-44/components/efuse/src/esp_efuse_utility.c
+
+
+ esp_idf_components/esp-tls/esp-tls-crypto/esp_tls_crypto.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp-tls/esp-tls-crypto/esp_tls_crypto.c
+
+
+ esp_idf_components/esp_common/src/esp_err_to_name.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_common/src/esp_err_to_name.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_mac_esp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_mac_esp.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_netif_glue.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_netif_glue.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy_dp83848.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy_dp83848.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy_ip101.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy_ip101.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy_ksz80xx.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy_ksz80xx.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy_lan87xx.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy_lan87xx.c
+
+
+ esp_idf_components/esp_eth/src/esp_eth_phy_rtl8201.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_eth/src/esp_eth_phy_rtl8201.c
+
+
+ esp_idf_components/esp_gdbstub/esp_common/gdbstub_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_gdbstub/esp_common/gdbstub_common.c
+
+
+ esp_idf_components/esp_gdbstub/src/gdbstub.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_gdbstub/src/gdbstub.c
+
+
+ esp_idf_components/esp_gdbstub/src/packet.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_gdbstub/src/packet.c
+
+
+ esp_idf_components/esp_gdbstub/xtensa/gdbstub-entry.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_gdbstub/xtensa/gdbstub-entry.S
+
+
+ esp_idf_components/esp_gdbstub/xtensa/gdbstub_xtensa.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_gdbstub/xtensa/gdbstub_xtensa.c
+
+
+ esp_idf_components/esp_hid/src/esp_hid_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hid/src/esp_hid_common.c
+
+
+ esp_idf_components/esp_hid/src/esp_hidd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hid/src/esp_hidd.c
+
+
+ esp_idf_components/esp_hid/src/esp_hidh.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hid/src/esp_hidh.c
+
+
+ esp_idf_components/esp_http_client/lib/http_auth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_client/lib/http_auth.c
+
+
+ esp_idf_components/esp_http_client/lib/http_header.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_client/lib/http_header.c
+
+
+ esp_idf_components/esp_http_client/lib/http_utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_client/lib/http_utils.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_main.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_main.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_parse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_parse.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_sess.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_sess.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_txrx.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_txrx.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_uri.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_uri.c
+
+
+ esp_idf_components/esp_http_server/src/httpd_ws.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/httpd_ws.c
+
+
+ esp_idf_components/esp_https_ota/src/esp_https_ota.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_https_ota/src/esp_https_ota.c
+
+
+ esp_idf_components/esp_ipc/src/esp_ipc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_ipc/src/esp_ipc.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_common.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_io.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_io.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_io_i2c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_io_i2c.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_io_i2s.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_io_i2s.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_io_i80.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_io_i80.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_io_spi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_io_spi.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_nt35510.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_nt35510.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_ops.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_ops.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_ssd1306.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_ssd1306.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_panel_st7789.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_panel_st7789.c
+
+
+ esp_idf_components/esp_lcd/src/esp_lcd_rgb_panel.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_lcd/src/esp_lcd_rgb_panel.c
+
+
+ esp_idf_components/esp_local_ctrl/proto-c/esp_local_ctrl.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_local_ctrl/proto-c/esp_local_ctrl.pb-c.c
+
+
+ esp_idf_components/esp_local_ctrl/src/esp_local_ctrl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_local_ctrl/src/esp_local_ctrl.c
+
+
+ esp_idf_components/esp_local_ctrl/src/esp_local_ctrl_handler.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_local_ctrl/src/esp_local_ctrl_handler.c
+
+
+ esp_idf_components/esp_netif/loopback/esp_netif_loopback.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/loopback/esp_netif_loopback.c
+
+
+ esp_idf_components/esp_netif/lwip/esp_netif_lwip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/lwip/esp_netif_lwip.c
+
+
+ esp_idf_components/esp_netif/lwip/esp_netif_lwip_defaults.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/lwip/esp_netif_lwip_defaults.c
+
+
+ esp_idf_components/esp_netif/lwip/esp_netif_sta_list.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_netif/lwip/esp_netif_sta_list.c
+
+
+ esp_idf_components/esp_phy/src/phy_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_phy/src/phy_init.c
+
+
+ esp_idf_components/esp_rom/patches/esp_rom_crc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_rom/patches/esp_rom_crc.c
+
+
+ esp_idf_components/esp_rom/patches/esp_rom_longjmp.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_rom/patches/esp_rom_longjmp.S
+
+
+ esp_idf_components/esp_rom/patches/esp_rom_sys.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_rom/patches/esp_rom_sys.c
+
+
+ esp_idf_components/esp_rom/patches/esp_rom_tjpgd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_rom/patches/esp_rom_tjpgd.c
+
+
+ esp_idf_components/esp_rom/patches/esp_rom_uart.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_rom/patches/esp_rom_uart.c
+
+
+ esp_idf_components/esp_system/port/brownout.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/brownout.c
+
+
+ esp_idf_components/esp_system/port/cpu_start.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/cpu_start.c
+
+
+ esp_idf_components/esp_system/port/panic_handler.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/panic_handler.c
+
+
+ esp_idf_components/esp_timer/src/esp_timer.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_timer/src/esp_timer.c
+
+
+ esp_idf_components/esp_timer/src/esp_timer_impl_lac.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_timer/src/esp_timer_impl_lac.c
+
+
+ esp_idf_components/esp_timer/src/ets_timer_legacy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_timer/src/ets_timer_legacy.c
+
+
+ esp_idf_components/esp_timer/src/system_time.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_timer/src/system_time.c
+
+
+ esp_idf_components/esp_wifi/esp32/esp_adapter.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/esp32/esp_adapter.c
+
+
+ esp_idf_components/esp_wifi/src/coexist.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/coexist.c
+
+
+ esp_idf_components/esp_wifi/src/lib_printf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/lib_printf.c
+
+
+ esp_idf_components/esp_wifi/src/mesh_event.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/mesh_event.c
+
+
+ esp_idf_components/esp_wifi/src/smartconfig.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/smartconfig.c
+
+
+ esp_idf_components/esp_wifi/src/smartconfig_ack.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/smartconfig_ack.c
+
+
+ esp_idf_components/esp_wifi/src/wifi_default.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/wifi_default.c
+
+
+ esp_idf_components/esp_wifi/src/wifi_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/wifi_init.c
+
+
+ esp_idf_components/esp_wifi/src/wifi_netif.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_wifi/src/wifi_netif.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_binary.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_binary.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_checksum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_checksum.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_common.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_elf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_elf.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_flash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_flash.c
+
+
+ esp_idf_components/espcoredump/src/core_dump_uart.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/core_dump_uart.c
+
+
+ esp_idf_components/fatfs/diskio/diskio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/diskio/diskio.c
+
+
+ esp_idf_components/fatfs/diskio/diskio_rawflash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/diskio/diskio_rawflash.c
+
+
+ esp_idf_components/fatfs/diskio/diskio_sdmmc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/diskio/diskio_sdmmc.c
+
+
+ esp_idf_components/fatfs/diskio/diskio_wl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/diskio/diskio_wl.c
+
+
+ esp_idf_components/fatfs/src/ff.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/src/ff.c
+
+
+ esp_idf_components/fatfs/src/ffunicode.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/src/ffunicode.c
+
+
+ esp_idf_components/fatfs/vfs/vfs_fat.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/vfs/vfs_fat.c
+
+
+ esp_idf_components/fatfs/vfs/vfs_fat_sdmmc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/vfs/vfs_fat_sdmmc.c
+
+
+ esp_idf_components/fatfs/vfs/vfs_fat_spiflash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/vfs/vfs_fat_spiflash.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_master.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_master.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_master_serial.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_master_serial.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_master_tcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_master_tcp.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_slave.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_slave_serial.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_slave_serial.c
+
+
+ esp_idf_components/freemodbus/common/esp_modbus_slave_tcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/common/esp_modbus_slave_tcp.c
+
+
+ esp_idf_components/freemodbus/modbus/mb.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/mb.c
+
+
+ esp_idf_components/freemodbus/modbus/mb_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/mb_m.c
+
+
+ esp_idf_components/freemodbus/port/port.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/port.c
+
+
+ esp_idf_components/freemodbus/port/portevent.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portevent.c
+
+
+ esp_idf_components/freemodbus/port/portevent_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portevent_m.c
+
+
+ esp_idf_components/freemodbus/port/portother.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portother.c
+
+
+ esp_idf_components/freemodbus/port/portother_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portother_m.c
+
+
+ esp_idf_components/freemodbus/port/portserial.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portserial.c
+
+
+ esp_idf_components/freemodbus/port/portserial_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/portserial_m.c
+
+
+ esp_idf_components/freemodbus/port/porttimer.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/porttimer.c
+
+
+ esp_idf_components/freemodbus/port/porttimer_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/port/porttimer_m.c
+
+
+ esp_idf_components/freertos/esp_additions/task_snapshot.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/esp_additions/task_snapshot.c
+
+
+ esp_idf_components/freertos/port/port_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/port_common.c
+
+
+ esp_idf_components/freertos/port/port_systick.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/port_systick.c
+
+
+ esp_idf_components/hal/esp32/adc_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/esp32/adc_hal.c
+
+
+ esp_idf_components/hal/esp32/brownout_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/esp32/brownout_hal.c
+
+
+ esp_idf_components/hal/esp32/gpio_hal_workaround.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/esp32/gpio_hal_workaround.c
+
+
+ esp_idf_components/hal/esp32/interrupt_descriptor_table.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/esp32/interrupt_descriptor_table.c
+
+
+ esp_idf_components/hal/esp32/touch_sensor_hal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/hal/esp32/touch_sensor_hal.c
+
+
+ esp_idf_components/heap/port/memory_layout_utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/port/memory_layout_utils.c
+
+
+ esp_idf_components/jsmn/src/jsmn.c
+ 1
+ C:/Development/esp/esp-idf-44/components/jsmn/src/jsmn.c
+
+
+ esp_idf_components/json/cJSON/cJSON.c
+ 1
+ C:/Development/esp/esp-idf-44/components/json/cJSON/cJSON.c
+
+
+ esp_idf_components/json/cJSON/cJSON_Utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/json/cJSON/cJSON_Utils.c
+
+
+ esp_idf_components/libsodium/port/randombytes_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/port/randombytes_esp32.c
+
+
+ esp_idf_components/mbedtls/esp_crt_bundle/esp_crt_bundle.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/esp_crt_bundle/esp_crt_bundle.c
+
+
+ esp_idf_components/mbedtls/port/esp_bignum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/esp_bignum.c
+
+
+ esp_idf_components/mbedtls/port/esp_hardware.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/esp_hardware.c
+
+
+ esp_idf_components/mbedtls/port/esp_mem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/esp_mem.c
+
+
+ esp_idf_components/mbedtls/port/esp_timing.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/esp_timing.c
+
+
+ esp_idf_components/mbedtls/port/mbedtls_debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/mbedtls_debug.c
+
+
+ esp_idf_components/mbedtls/port/net_sockets.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/net_sockets.c
+
+
+ esp_idf_components/mqtt/esp-mqtt/mqtt_client.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mqtt/esp-mqtt/mqtt_client.c
+
+
+ esp_idf_components/newlib/port/esp_time_impl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/newlib/port/esp_time_impl.c
+
+
+ esp_idf_components/nghttp/port/http_parser.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/port/http_parser.c
+
+
+ esp_idf_components/nvs_flash/src/nvs_api.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_api.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_cxx_api.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_cxx_api.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_handle_locked.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_handle_locked.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_handle_simple.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_handle_simple.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_item_hash_list.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_item_hash_list.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_page.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_page.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_pagemanager.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_pagemanager.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_partition.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_partition.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_partition_lookup.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_partition_lookup.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_partition_manager.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_partition_manager.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_storage.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_storage.cpp
+
+
+ esp_idf_components/nvs_flash/src/nvs_types.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/nvs_flash/src/nvs_types.cpp
+
+
+ esp_idf_components/openssl/library/ssl_bio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_bio.c
+
+
+ esp_idf_components/openssl/library/ssl_cert.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_cert.c
+
+
+ esp_idf_components/openssl/library/ssl_err.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_err.c
+
+
+ esp_idf_components/openssl/library/ssl_lib.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_lib.c
+
+
+ esp_idf_components/openssl/library/ssl_methods.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_methods.c
+
+
+ esp_idf_components/openssl/library/ssl_pkey.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_pkey.c
+
+
+ esp_idf_components/openssl/library/ssl_stack.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_stack.c
+
+
+ esp_idf_components/openssl/library/ssl_x509.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/library/ssl_x509.c
+
+
+ esp_idf_components/openssl/platform/ssl_pm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/platform/ssl_pm.c
+
+
+ esp_idf_components/openssl/platform/ssl_port.c
+ 1
+ C:/Development/esp/esp-idf-44/components/openssl/platform/ssl_port.c
+
+
+ esp_idf_components/protocomm/proto-c/constants.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/proto-c/constants.pb-c.c
+
+
+ esp_idf_components/protocomm/proto-c/sec0.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/proto-c/sec0.pb-c.c
+
+
+ esp_idf_components/protocomm/proto-c/sec1.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/proto-c/sec1.pb-c.c
+
+
+ esp_idf_components/protocomm/proto-c/session.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/proto-c/session.pb-c.c
+
+
+ esp_idf_components/soc/esp32/adc_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/adc_periph.c
+
+
+ esp_idf_components/soc/esp32/dac_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/dac_periph.c
+
+
+ esp_idf_components/soc/esp32/gpio_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/gpio_periph.c
+
+
+ esp_idf_components/soc/esp32/i2c_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/i2c_periph.c
+
+
+ esp_idf_components/soc/esp32/i2s_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/i2s_periph.c
+
+
+ esp_idf_components/soc/esp32/interrupts.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/interrupts.c
+
+
+ esp_idf_components/soc/esp32/lcd_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/lcd_periph.c
+
+
+ esp_idf_components/soc/esp32/ledc_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/ledc_periph.c
+
+
+ esp_idf_components/soc/esp32/mcpwm_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/mcpwm_periph.c
+
+
+ esp_idf_components/soc/esp32/pcnt_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/pcnt_periph.c
+
+
+ esp_idf_components/soc/esp32/rmt_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/rmt_periph.c
+
+
+ esp_idf_components/soc/esp32/rtc_io_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/rtc_io_periph.c
+
+
+ esp_idf_components/soc/esp32/sdio_slave_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/sdio_slave_periph.c
+
+
+ esp_idf_components/soc/esp32/sdmmc_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/sdmmc_periph.c
+
+
+ esp_idf_components/soc/esp32/sigmadelta_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/sigmadelta_periph.c
+
+
+ esp_idf_components/soc/esp32/spi_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/spi_periph.c
+
+
+ esp_idf_components/soc/esp32/timer_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/timer_periph.c
+
+
+ esp_idf_components/soc/esp32/touch_sensor_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/touch_sensor_periph.c
+
+
+ esp_idf_components/soc/esp32/uart_periph.c
+ 1
+ C:/Development/esp/esp-idf-44/components/soc/esp32/uart_periph.c
+
+
+ esp_idf_components/spi_flash/esp32/flash_ops_esp32.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/esp32/flash_ops_esp32.c
+
+
+ esp_idf_components/spi_flash/esp32/spi_flash_rom_patch.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spi_flash/esp32/spi_flash_rom_patch.c
+
+
+ esp_idf_components/wifi_provisioning/proto-c/wifi_config.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/proto-c/wifi_config.pb-c.c
+
+
+ esp_idf_components/wifi_provisioning/proto-c/wifi_constants.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/proto-c/wifi_constants.pb-c.c
+
+
+ esp_idf_components/wifi_provisioning/proto-c/wifi_scan.pb-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/proto-c/wifi_scan.pb-c.c
+
+
+ esp_idf_components/wifi_provisioning/src/handlers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/handlers.c
+
+
+ esp_idf_components/wifi_provisioning/src/manager.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/manager.c
+
+
+ esp_idf_components/wifi_provisioning/src/scheme_console.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/scheme_console.c
+
+
+ esp_idf_components/wifi_provisioning/src/scheme_softap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/scheme_softap.c
+
+
+ esp_idf_components/wifi_provisioning/src/wifi_config.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/wifi_config.c
+
+
+ esp_idf_components/wifi_provisioning/src/wifi_scan.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wifi_provisioning/src/wifi_scan.c
+
+
+ esp_idf_components/wpa_supplicant/port/os_xtensa.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/port/os_xtensa.c
+
+
+ esp_idf_components/bootloader_support/src/idf/bootloader_sha.c
+ 1
+ C:/Development/esp/esp-idf-44/components/bootloader_support/src/idf/bootloader_sha.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborencoder.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborencoder.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborencoder_close_container_checked.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborencoder_close_container_checked.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborerrorstrings.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborerrorstrings.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborparser.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborparser.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborparser_dup_string.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborparser_dup_string.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborpretty.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborpretty.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborpretty_stdio.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborpretty_stdio.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cbortojson.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cbortojson.c
+
+
+ esp_idf_components/cbor/tinycbor/src/cborvalidation.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/cborvalidation.c
+
+
+ esp_idf_components/cbor/tinycbor/src/open_memstream.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cbor/tinycbor/src/open_memstream.c
+
+
+ esp_idf_components/cmock/CMock/src/cmock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/cmock/CMock/src/cmock.c
+
+
+ esp_idf_components/coap/libcoap/src/address.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/address.c
+
+
+ esp_idf_components/coap/libcoap/src/async.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/async.c
+
+
+ esp_idf_components/coap/libcoap/src/block.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/block.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_asn1.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_asn1.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_cache.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_cache.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_debug.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_event.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_event.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_hashkey.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_hashkey.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_io.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_io.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_mbedtls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_mbedtls.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_notls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_notls.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_prng.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_prng.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_session.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_session.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_tcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_tcp.c
+
+
+ esp_idf_components/coap/libcoap/src/coap_time.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/coap_time.c
+
+
+ esp_idf_components/coap/libcoap/src/encode.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/encode.c
+
+
+ esp_idf_components/coap/libcoap/src/mem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/mem.c
+
+
+ esp_idf_components/coap/libcoap/src/net.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/net.c
+
+
+ esp_idf_components/coap/libcoap/src/option.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/option.c
+
+
+ esp_idf_components/coap/libcoap/src/pdu.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/pdu.c
+
+
+ esp_idf_components/coap/libcoap/src/resource.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/resource.c
+
+
+ esp_idf_components/coap/libcoap/src/str.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/str.c
+
+
+ esp_idf_components/coap/libcoap/src/subscribe.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/subscribe.c
+
+
+ esp_idf_components/coap/libcoap/src/uri.c
+ 1
+ C:/Development/esp/esp-idf-44/components/coap/libcoap/src/uri.c
+
+
+ esp_idf_components/esp_http_server/src/util/ctrl_sock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_http_server/src/util/ctrl_sock.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/cache_sram_mmu.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/cache_sram_mmu.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/chip_info.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/chip_info.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/dport_access.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/dport_access.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/esp_himem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/esp_himem.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_clk.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_clk.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_clk_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_clk_init.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_init.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_pm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_pm.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_sleep.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_sleep.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_time.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_time.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/rtc_wdt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/rtc_wdt.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/spiram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/spiram.c
+
+
+ esp_idf_components/esp_hw_support/port/esp32/spiram_psram.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_hw_support/port/esp32/spiram_psram.c
+
+
+ esp_idf_components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr.c
+
+
+ esp_idf_components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr_handler.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr_handler.S
+
+
+ esp_idf_components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr_routines.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_ipc/src/esp_ipc_isr/esp_ipc_isr_routines.S
+
+
+ esp_idf_components/fatfs/port/freertos/ffsystem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/fatfs/port/freertos/ffsystem.c
+
+
+ esp_idf_components/freemodbus/modbus/ascii/mbascii.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/ascii/mbascii.c
+
+
+ esp_idf_components/freemodbus/modbus/ascii/mbascii_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/ascii/mbascii_m.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfunccoils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfunccoils.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfunccoils_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfunccoils_m.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncdiag.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncdiag.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncdisc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncdisc.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncdisc_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncdisc_m.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncholding.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncholding.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncholding_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncholding_m.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncinput.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncinput.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncinput_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncinput_m.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbfuncother.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbfuncother.c
+
+
+ esp_idf_components/freemodbus/modbus/functions/mbutils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/functions/mbutils.c
+
+
+ esp_idf_components/freemodbus/modbus/rtu/mbcrc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/rtu/mbcrc.c
+
+
+ esp_idf_components/freemodbus/modbus/rtu/mbrtu.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/rtu/mbrtu.c
+
+
+ esp_idf_components/freemodbus/modbus/rtu/mbrtu_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/rtu/mbrtu_m.c
+
+
+ esp_idf_components/freemodbus/modbus/tcp/mbtcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/tcp/mbtcp.c
+
+
+ esp_idf_components/freemodbus/modbus/tcp/mbtcp_m.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/modbus/tcp/mbtcp_m.c
+
+
+ esp_idf_components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/serial_master/modbus_controller/mbc_serial_master.c
+
+
+ esp_idf_components/freemodbus/serial_slave/modbus_controller/mbc_serial_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/serial_slave/modbus_controller/mbc_serial_slave.c
+
+
+ esp_idf_components/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/tcp_master/modbus_controller/mbc_tcp_master.c
+
+
+ esp_idf_components/freemodbus/tcp_master/port/port_tcp_master.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/tcp_master/port/port_tcp_master.c
+
+
+ esp_idf_components/freemodbus/tcp_slave/modbus_controller/mbc_tcp_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/tcp_slave/modbus_controller/mbc_tcp_slave.c
+
+
+ esp_idf_components/freemodbus/tcp_slave/port/port_tcp_slave.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freemodbus/tcp_slave/port/port_tcp_slave.c
+
+
+ esp_idf_components/freertos/port/xtensa/port.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/port.c
+
+
+ esp_idf_components/freertos/port/xtensa/portasm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/portasm.S
+
+
+ esp_idf_components/freertos/port/xtensa/xtensa_context.S
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/xtensa_context.S
+
+
+ esp_idf_components/freertos/port/xtensa/xtensa_init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/xtensa_init.c
+
+
+ esp_idf_components/freertos/port/xtensa/xtensa_overlay_os_hook.c
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/xtensa_overlay_os_hook.c
+
+
+ esp_idf_components/freertos/port/xtensa/xtensa_vector_defaults.S
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/xtensa_vector_defaults.S
+
+
+ esp_idf_components/freertos/port/xtensa/xtensa_vectors.S
+ 1
+ C:/Development/esp/esp-idf-44/components/freertos/port/xtensa/xtensa_vectors.S
+
+
+ esp_idf_components/heap/port/esp32/memory_layout.c
+ 1
+ C:/Development/esp/esp-idf-44/components/heap/port/esp32/memory_layout.c
+
+
+ esp_idf_components/lwip/apps/dhcpserver/dhcpserver.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/apps/dhcpserver/dhcpserver.c
+
+
+ esp_idf_components/lwip/apps/ping/esp_ping.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/apps/ping/esp_ping.c
+
+
+ esp_idf_components/lwip/apps/ping/ping.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/apps/ping/ping.c
+
+
+ esp_idf_components/lwip/apps/ping/ping_sock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/apps/ping/ping_sock.c
+
+
+ esp_idf_components/lwip/apps/sntp/sntp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/apps/sntp/sntp.c
+
+
+ esp_idf_components/lwip/port/esp32/vfs_lwip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/vfs_lwip.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/aes.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/aes.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/aesni.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/aesni.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/arc4.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/arc4.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/aria.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/aria.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/asn1parse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/asn1parse.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/asn1write.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/asn1write.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/base64.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/base64.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/bignum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/bignum.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/blowfish.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/blowfish.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/camellia.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/camellia.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ccm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ccm.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/certs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/certs.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/chacha20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/chacha20.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/chachapoly.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/chachapoly.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/cipher.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/cipher.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/cipher_wrap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/cipher_wrap.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/cmac.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/cmac.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ctr_drbg.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ctr_drbg.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/debug.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/des.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/des.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/dhm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/dhm.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ecdh.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ecdh.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ecdsa.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ecdsa.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ecjpake.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ecjpake.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ecp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ecp.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ecp_curves.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ecp_curves.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/entropy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/entropy.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/entropy_poll.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/entropy_poll.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/error.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/error.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/gcm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/gcm.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/havege.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/havege.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/hkdf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/hkdf.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/hmac_drbg.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/hmac_drbg.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/md.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/md.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/md2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/md2.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/md4.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/md4.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/md5.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/md5.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/md_wrap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/md_wrap.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/memory_buffer_alloc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/memory_buffer_alloc.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/nist_kw.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/nist_kw.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/oid.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/oid.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/padlock.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/padlock.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pem.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pk.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pk.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pk_wrap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pk_wrap.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pkcs11.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pkcs11.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pkcs12.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pkcs12.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pkcs5.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pkcs5.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pkparse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pkparse.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/pkwrite.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/pkwrite.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/platform.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/platform.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/platform_util.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/platform_util.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/poly1305.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ripemd160.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ripemd160.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/rsa.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/rsa.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/rsa_internal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/rsa_internal.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/sha1.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/sha1.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/sha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/sha256.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/sha512.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/sha512.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_cache.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_cache.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_ciphersuites.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_ciphersuites.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_cli.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_cli.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_cookie.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_cookie.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_srv.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_srv.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_ticket.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_ticket.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/ssl_tls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/ssl_tls.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/threading.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/threading.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/timing.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/timing.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/version.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/version.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/version_features.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/version_features.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509_create.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509_create.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509_crl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509_crl.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509_crt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509_crt.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509_csr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509_csr.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509write_crt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509write_crt.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/x509write_csr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/x509write_csr.c
+
+
+ esp_idf_components/mbedtls/mbedtls/library/xtea.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/mbedtls/library/xtea.c
+
+
+ esp_idf_components/mbedtls/port/aes/esp_aes_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/aes/esp_aes_common.c
+
+
+ esp_idf_components/mbedtls/port/aes/esp_aes_xts.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/aes/esp_aes_xts.c
+
+
+ esp_idf_components/mbedtls/port/esp32/bignum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/esp32/bignum.c
+
+
+ esp_idf_components/mbedtls/port/md/esp_md.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/md/esp_md.c
+
+
+ esp_idf_components/mbedtls/port/sha/esp_sha.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/sha/esp_sha.c
+
+
+ esp_idf_components/mqtt/esp-mqtt/lib/mqtt_msg.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mqtt/esp-mqtt/lib/mqtt_msg.c
+
+
+ esp_idf_components/mqtt/esp-mqtt/lib/mqtt_outbox.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mqtt/esp-mqtt/lib/mqtt_outbox.c
+
+
+ esp_idf_components/mqtt/esp-mqtt/lib/platform_esp32_idf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mqtt/esp-mqtt/lib/platform_esp32_idf.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_buf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_buf.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_callbacks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_callbacks.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_debug.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_frame.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_frame.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_hd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_hd.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_hd_huffman.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_hd_huffman.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_hd_huffman_data.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_hd_huffman_data.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_helper.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_helper.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_http.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_http.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_map.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_map.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_mem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_mem.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_npn.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_npn.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_option.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_option.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_outbound_item.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_outbound_item.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_pq.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_pq.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_priority_spec.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_priority_spec.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_queue.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_queue.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_rcbuf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_rcbuf.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_session.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_session.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_stream.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_stream.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_submit.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_submit.c
+
+
+ esp_idf_components/nghttp/nghttp2/lib/nghttp2_version.c
+ 1
+ C:/Development/esp/esp-idf-44/components/nghttp/nghttp2/lib/nghttp2_version.c
+
+
+ esp_idf_components/protobuf-c/protobuf-c/protobuf-c/protobuf-c.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protobuf-c/protobuf-c/protobuf-c/protobuf-c.c
+
+
+ esp_idf_components/protocomm/src/common/protocomm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/src/common/protocomm.c
+
+
+ esp_idf_components/protocomm/src/security/security0.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/src/security/security0.c
+
+
+ esp_idf_components/protocomm/src/security/security1.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/src/security/security1.c
+
+
+ esp_idf_components/protocomm/src/transports/protocomm_console.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/src/transports/protocomm_console.c
+
+
+ esp_idf_components/protocomm/src/transports/protocomm_httpd.c
+ 1
+ C:/Development/esp/esp-idf-44/components/protocomm/src/transports/protocomm_httpd.c
+
+
+ esp_idf_components/spiffs/spiffs/src/spiffs_cache.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs/src/spiffs_cache.c
+
+
+ esp_idf_components/spiffs/spiffs/src/spiffs_check.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs/src/spiffs_check.c
+
+
+ esp_idf_components/spiffs/spiffs/src/spiffs_gc.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs/src/spiffs_gc.c
+
+
+ esp_idf_components/spiffs/spiffs/src/spiffs_hydrogen.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs/src/spiffs_hydrogen.c
+
+
+ esp_idf_components/spiffs/spiffs/src/spiffs_nucleus.c
+ 1
+ C:/Development/esp/esp-idf-44/components/spiffs/spiffs/src/spiffs_nucleus.c
+
+
+ esp_idf_components/unity/unity/src/unity.c
+ 1
+ C:/Development/esp/esp-idf-44/components/unity/unity/src/unity.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_dpp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_dpp.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_hostap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_hostap.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_wpa2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_wpa2.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_wpa3.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_wpa_main.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_wpas_glue.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_wpas_glue.c
+
+
+ esp_idf_components/wpa_supplicant/esp_supplicant/src/esp_wps.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/esp_supplicant/src/esp_wps.c
+
+
+ esp_idf_components/wpa_supplicant/src/ap/ap_config.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/ap/ap_config.c
+
+
+ esp_idf_components/wpa_supplicant/src/ap/ieee802_1x.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/ap/ieee802_1x.c
+
+
+ esp_idf_components/wpa_supplicant/src/ap/wpa_auth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/ap/wpa_auth.c
+
+
+ esp_idf_components/wpa_supplicant/src/ap/wpa_auth_ie.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/ap/wpa_auth_ie.c
+
+
+ esp_idf_components/wpa_supplicant/src/common/dpp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/common/dpp.c
+
+
+ esp_idf_components/wpa_supplicant/src/common/sae.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/common/sae.c
+
+
+ esp_idf_components/wpa_supplicant/src/common/wpa_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/common/wpa_common.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-ccm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-ccm.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-gcm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-gcm.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-omac1.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-omac1.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-siv.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-siv.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-unwrap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-unwrap.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/aes-wrap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/aes-wrap.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/ccmp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/ccmp.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/crypto_mbedtls-bignum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/crypto_mbedtls-bignum.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/crypto_mbedtls-ec.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/crypto_mbedtls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/crypto_mbedtls.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/crypto_ops.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/crypto_ops.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/des-internal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/des-internal.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/dh_group5.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/dh_group5.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/dh_groups.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/dh_groups.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/md4-internal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/md4-internal.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/ms_funcs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/ms_funcs.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/rc4.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/rc4.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha1-prf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha1-prf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha1-tlsprf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha1-tlsprf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha256-kdf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha256-kdf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha256-prf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha256-prf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha256-tlsprf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha256-tlsprf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha384-prf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha384-prf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/sha384-tlsprf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/sha384-tlsprf.c
+
+
+ esp_idf_components/wpa_supplicant/src/crypto/tls_mbedtls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/crypto/tls_mbedtls.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/chap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/chap.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_common.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_mschapv2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_mschapv2.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_peap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_peap.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_peap_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_peap_common.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_tls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_tls.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_tls_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_tls_common.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/eap_ttls.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/eap_ttls.c
+
+
+ esp_idf_components/wpa_supplicant/src/eap_peer/mschapv2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/eap_peer/mschapv2.c
+
+
+ esp_idf_components/wpa_supplicant/src/rsn_supp/pmksa_cache.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/rsn_supp/pmksa_cache.c
+
+
+ esp_idf_components/wpa_supplicant/src/rsn_supp/wpa.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/rsn_supp/wpa.c
+
+
+ esp_idf_components/wpa_supplicant/src/rsn_supp/wpa_ie.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/rsn_supp/wpa_ie.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/base64.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/base64.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/bitfield.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/bitfield.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/common.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/ext_password.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/ext_password.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/json.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/json.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/uuid.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/uuid.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/wpa_debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/wpa_debug.c
+
+
+ esp_idf_components/wpa_supplicant/src/utils/wpabuf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/utils/wpabuf.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_attr_build.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_attr_build.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_attr_parse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_attr_parse.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_attr_process.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_attr_process.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_common.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_dev_attr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_dev_attr.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_enrollee.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_enrollee.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_registrar.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_registrar.c
+
+
+ esp_idf_components/wpa_supplicant/src/wps/wps_validate.c
+ 1
+ C:/Development/esp/esp-idf-44/components/wpa_supplicant/src/wps/wps_validate.c
+
+
+ esp_idf_components/asio/asio/asio/src/asio.cpp
+ 1
+ C:/Development/esp/esp-idf-44/components/asio/asio/asio/src/asio.cpp
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/debug_helpers.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/debug_helpers.c
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/debug_helpers_asm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/debug_helpers_asm.S
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/expression_with_stack.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/expression_with_stack.c
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/expression_with_stack_asm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/expression_with_stack_asm.S
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/panic_arch.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/panic_arch.c
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/panic_handler_asm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/panic_handler_asm.S
+
+
+ esp_idf_components/esp_system/port/arch/xtensa/trax.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/arch/xtensa/trax.c
+
+
+ esp_idf_components/esp_system/port/soc/esp32/cache_err_int.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/soc/esp32/cache_err_int.c
+
+
+ esp_idf_components/esp_system/port/soc/esp32/clk.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/soc/esp32/clk.c
+
+
+ esp_idf_components/esp_system/port/soc/esp32/highint_hdl.S
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/soc/esp32/highint_hdl.S
+
+
+ esp_idf_components/esp_system/port/soc/esp32/reset_reason.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/soc/esp32/reset_reason.c
+
+
+ esp_idf_components/esp_system/port/soc/esp32/system_internal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/esp_system/port/soc/esp32/system_internal.c
+
+
+ esp_idf_components/espcoredump/src/port/xtensa/core_dump_port.c
+ 1
+ C:/Development/esp/esp-idf-44/components/espcoredump/src/port/xtensa/core_dump_port.c
+
+
+ esp_idf_components/expat/expat/expat/lib/xmlparse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/expat/expat/expat/lib/xmlparse.c
+
+
+ esp_idf_components/expat/expat/expat/lib/xmlrole.c
+ 1
+ C:/Development/esp/esp-idf-44/components/expat/expat/expat/lib/xmlrole.c
+
+
+ esp_idf_components/expat/expat/expat/lib/xmltok.c
+ 1
+ C:/Development/esp/esp-idf-44/components/expat/expat/expat/lib/xmltok.c
+
+
+ esp_idf_components/expat/expat/expat/lib/xmltok_impl.c
+ 1
+ C:/Development/esp/esp-idf-44/components/expat/expat/expat/lib/xmltok_impl.c
+
+
+ esp_idf_components/expat/expat/expat/lib/xmltok_ns.c
+ 1
+ C:/Development/esp/esp-idf-44/components/expat/expat/expat/lib/xmltok_ns.c
+
+
+ esp_idf_components/lwip/lwip/src/api/api_lib.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/api_lib.c
+
+
+ esp_idf_components/lwip/lwip/src/api/api_msg.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/api_msg.c
+
+
+ esp_idf_components/lwip/lwip/src/api/err.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/err.c
+
+
+ esp_idf_components/lwip/lwip/src/api/if_api.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/if_api.c
+
+
+ esp_idf_components/lwip/lwip/src/api/netbuf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/netbuf.c
+
+
+ esp_idf_components/lwip/lwip/src/api/netdb.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/netdb.c
+
+
+ esp_idf_components/lwip/lwip/src/api/netifapi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/netifapi.c
+
+
+ esp_idf_components/lwip/lwip/src/api/sockets.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/sockets.c
+
+
+ esp_idf_components/lwip/lwip/src/api/tcpip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/api/tcpip.c
+
+
+ esp_idf_components/lwip/lwip/src/core/def.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/def.c
+
+
+ esp_idf_components/lwip/lwip/src/core/dns.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/dns.c
+
+
+ esp_idf_components/lwip/lwip/src/core/inet_chksum.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/inet_chksum.c
+
+
+ esp_idf_components/lwip/lwip/src/core/init.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/init.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ip.c
+
+
+ esp_idf_components/lwip/lwip/src/core/mem.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/mem.c
+
+
+ esp_idf_components/lwip/lwip/src/core/memp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/memp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/netif.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/netif.c
+
+
+ esp_idf_components/lwip/lwip/src/core/pbuf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/pbuf.c
+
+
+ esp_idf_components/lwip/lwip/src/core/raw.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/raw.c
+
+
+ esp_idf_components/lwip/lwip/src/core/stats.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/stats.c
+
+
+ esp_idf_components/lwip/lwip/src/core/sys.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/sys.c
+
+
+ esp_idf_components/lwip/lwip/src/core/tcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/tcp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/tcp_in.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/tcp_in.c
+
+
+ esp_idf_components/lwip/lwip/src/core/tcp_out.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/tcp_out.c
+
+
+ esp_idf_components/lwip/lwip/src/core/timeouts.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/timeouts.c
+
+
+ esp_idf_components/lwip/lwip/src/core/udp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/udp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ethernet.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ethernet.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/lowpan6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/lowpan6.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/slipif.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/slipif.c
+
+
+ esp_idf_components/lwip/port/esp32/debug/lwip_debug.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/debug/lwip_debug.c
+
+
+ esp_idf_components/lwip/port/esp32/freertos/sys_arch.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/freertos/sys_arch.c
+
+
+ esp_idf_components/lwip/port/esp32/hooks/lwip_default_hooks.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/hooks/lwip_default_hooks.c
+
+
+ esp_idf_components/lwip/port/esp32/hooks/tcp_isn_default.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/hooks/tcp_isn_default.c
+
+
+ esp_idf_components/lwip/port/esp32/netif/dhcp_state.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/netif/dhcp_state.c
+
+
+ esp_idf_components/lwip/port/esp32/netif/ethernetif.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/netif/ethernetif.c
+
+
+ esp_idf_components/lwip/port/esp32/netif/wlanif.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/port/esp32/netif/wlanif.c
+
+
+ esp_idf_components/mbedtls/port/aes/block/esp_aes.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/aes/block/esp_aes.c
+
+
+ esp_idf_components/mbedtls/port/sha/parallel_engine/esp_sha1.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/sha/parallel_engine/esp_sha1.c
+
+
+ esp_idf_components/mbedtls/port/sha/parallel_engine/esp_sha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/sha/parallel_engine/esp_sha256.c
+
+
+ esp_idf_components/mbedtls/port/sha/parallel_engine/esp_sha512.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/sha/parallel_engine/esp_sha512.c
+
+
+ esp_idf_components/mbedtls/port/sha/parallel_engine/sha.c
+ 1
+ C:/Development/esp/esp-idf-44/components/mbedtls/port/sha/parallel_engine/sha.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_auth/crypto_auth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_auth/crypto_auth.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_easy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_easy.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_seal.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/crypto_box_seal.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/crypto_generichash.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_hash/crypto_hash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_hash/crypto_hash.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_kdf/crypto_kdf.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_kdf/crypto_kdf.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_kx/crypto_kx.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_kx/crypto_kx.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/crypto_onetimeauth.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/crypto_pwhash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/crypto_pwhash.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/crypto_scalarmult.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_secretbox/crypto_secretbox_easy.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_shorthash/crypto_shorthash.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/crypto_sign.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/crypto_sign.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/crypto_stream.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/crypto_stream.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/randombytes/randombytes.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/randombytes/randombytes.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/sodium/codecs.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/sodium/codecs.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/sodium/core.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/sodium/core.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/sodium/runtime.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/sodium/runtime.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/sodium/utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/sodium/utils.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/sodium/version.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/sodium/version.c
+
+
+ esp_idf_components/lwip/lwip/src/apps/netbiosns/netbiosns.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/apps/netbiosns/netbiosns.c
+
+
+ esp_idf_components/lwip/lwip/src/apps/sntp/sntp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/apps/sntp/sntp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/autoip.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/autoip.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/dhcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/dhcp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/etharp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/etharp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/icmp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/icmp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/igmp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/igmp.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/ip4.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/ip4.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/ip4_addr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/ip4_addr.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/ip4_frag.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/ip4_frag.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv4/ip4_napt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv4/ip4_napt.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/dhcp6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/dhcp6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/ethip6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/ethip6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/icmp6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/icmp6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/inet6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/inet6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/ip6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/ip6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/ip6_addr.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/ip6_addr.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/ip6_frag.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/ip6_frag.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/mld6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/mld6.c
+
+
+ esp_idf_components/lwip/lwip/src/core/ipv6/nd6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/core/ipv6/nd6.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/auth.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/auth.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/ccp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/ccp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/chap-md5.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/chap-md5.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/chap-new.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/chap-new.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/chap_ms.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/chap_ms.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/demand.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/demand.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/eap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/eap.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/ecp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/ecp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/eui64.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/eui64.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/fsm.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/fsm.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/ipcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/ipcp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/ipv6cp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/ipv6cp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/lcp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/lcp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/magic.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/magic.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/mppe.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/mppe.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/multilink.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/multilink.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/ppp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/ppp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/pppapi.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/pppapi.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/pppcrypt.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/pppcrypt.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/pppoe.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/pppoe.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/pppol2tp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/pppol2tp.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/pppos.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/pppos.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/upap.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/upap.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/utils.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/utils.c
+
+
+ esp_idf_components/lwip/lwip/src/netif/ppp/vj.c
+ 1
+ C:/Development/esp/esp-idf-44/components/lwip/lwip/src/netif/ppp/vj.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha256/auth_hmacsha256.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512/auth_hmacsha512.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_auth/hmacsha512256/auth_hmacsha512256.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_seal_curve25519xchacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/core_ed25519.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/core_ed25519.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/core_ristretto255.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/core_ristretto255.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/hchacha20/core_hchacha20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/core_hsalsa20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/generichash_blake2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/generichash_blake2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_hash/sha256/hash_sha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_hash/sha256/hash_sha256.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_hash/sha512/hash_sha512.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_hash/sha512/hash_sha512.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_kdf/blake2b/kdf_blake2b.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/onetimeauth_poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-core.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-encoding.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx512f.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-avx512f.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2-fill-block-ssse3.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/argon2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/blake2b-long.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2i.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/argon2/pwhash_argon2id.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/crypto_scrypt-common.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pbkdf2-sha256.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/pwhash_scryptsalsa208sha256.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/scrypt_platform.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/scalarmult_curve25519.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_secretbox/xchacha20poly1305/secretbox_xchacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_secretbox/xsalsa20poly1305/secretbox_xsalsa20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_secretstream/xchacha20poly1305/secretstream_xchacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphash24.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/shorthash_siphashx24.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/sign_ed25519.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/stream_chacha20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/stream_salsa20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa2012/stream_salsa2012.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa208/stream_salsa208.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/xchacha20/stream_xchacha20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/xsalsa20/stream_xsalsa20.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_verify/sodium/verify.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_verify/sodium/verify.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_aead/chacha20poly1305/sodium/aead_chacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_aead/xchacha20poly1305/sodium/aead_xchacha20poly1305.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/ed25519/ref10/ed25519_ref10.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/hsalsa20/ref2/core_hsalsa20_ref2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_core/salsa/ref/core_salsa_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-avx2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-compress-ssse3.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/blake2b-ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_generichash/blake2b/ref/generichash_blake2b.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_hash/sha256/cp/hash_sha256_cp.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_hash/sha512/cp/hash_sha512_cp.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_onetimeauth/poly1305/donna/poly1305_donna.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_pwhash/scryptsalsa208sha256/nosse/pwhash_scryptsalsa208sha256_nosse.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/ref10/x25519_ref10.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/consts.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/curve25519_sandy2x.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_invert.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_mul.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_nsquare.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe51_pack.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/fe_frombytes_sandy2x.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/ladder.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/curve25519/sandy2x/sandy2x.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/ed25519/ref10/scalarmult_ed25519_ref10.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_scalarmult/ristretto255/ref10/scalarmult_ristretto255_ref10.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_scalarmult/ristretto255/ref10/scalarmult_ristretto255_ref10.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphash24_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_shorthash/siphash24/ref/shorthash_siphashx24_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/keypair.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/obsolete.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/open.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_sign/ed25519/ref10/sign.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-avx2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/dolbeau/chacha20_dolbeau-ssse3.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/chacha20/ref/chacha20_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/ref/salsa20_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6-asm.S
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6/salsa20_xmm6.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-avx2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa20/xmm6int/salsa20_xmm6int-sse2.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa2012/ref/stream_salsa2012_ref.c
+
+
+ esp_idf_components/libsodium/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c
+ 1
+ C:/Development/esp/esp-idf-44/components/libsodium/libsodium/src/libsodium/crypto_stream/salsa208/ref/stream_salsa208_ref.c
+
+
IOT_SOLUTION_PATH
diff --git a/Makefile b/Makefile
index e5c2a9c2..973108de 100755
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
# project subdirectory.
#
-PROJECT_NAME := hello-world
+PROJECT_NAME := grownode
include $(IDF_PATH)/make/project.mk
diff --git a/README.md b/README.md
old mode 100755
new mode 100644
diff --git a/components/grownode/CMakeLists.txt b/components/grownode/CMakeLists.txt
index b891c1c7..f1be67a3 100755
--- a/components/grownode/CMakeLists.txt
+++ b/components/grownode/CMakeLists.txt
@@ -113,7 +113,7 @@ else()
if(DEFINED ENV{IDF_LIB_PATH})
list(APPEND components_required
- "bmp280" "ds18x20"
+ "bmp280" "ds18x20" "ina219"
)
endif()
@@ -143,6 +143,7 @@ else()
"leaves/gn_gpio.c"
"leaves/gn_led.c"
"leaves/gn_leaf_status_led.c"
+ "leaves/gn_leaf_ina219.c"
"test/test_grownode.c"
"test/test_pump.c"
"test/test_ds18b20.c"
@@ -152,6 +153,7 @@ else()
"boards/gn_hydroboard2.c"
"boards/gn_easypot1.c"
"boards/gn_blink.c"
+ "boards/gn_oscilloscope.c"
REQUIRES "${components_required}"
INCLUDE_DIRS
diff --git a/components/grownode/boards/gn_blink.c b/components/grownode/boards/gn_blink.c
index 34d49d83..5bc9834f 100644
--- a/components/grownode/boards/gn_blink.c
+++ b/components/grownode/boards/gn_blink.c
@@ -24,14 +24,15 @@
void led_blink_callback(const gn_leaf_handle_t blink) {
- bool status;
+ bool status = false;
//gets the previous parameter status
gn_leaf_param_get_bool(blink, GN_GPIO_PARAM_TOGGLE, &status);
+ ESP_LOGD(TAG, "blinking - old status = %d", status);
//invert the status
status = !status;
- ESP_LOGI(TAG, "blinking - %d", status);
+ ESP_LOGI(TAG, "blinking - new status = %d", status);
//set the new parameter
gn_leaf_param_set_bool(blink, GN_GPIO_PARAM_TOGGLE, status);
@@ -48,6 +49,8 @@ void led_blink_callback(const gn_leaf_handle_t blink) {
*/
void gn_configure_blink(gn_node_handle_t node) {
+ esp_log_level_set("gn_leaf_gpio", esp_log_level_get(TAG));
+
//fastcreate call
gn_leaf_handle_t blink = gn_gpio_fastcreate(node, "blink", 2, false, false);
@@ -57,7 +60,7 @@ void gn_configure_blink(gn_node_handle_t node) {
esp_timer_create_args_t timer_args = { .callback = &led_blink_callback,
.arg = blink, .name = "blink_timer" };
esp_timer_create(&timer_args, &timer_handler);
- esp_timer_start_periodic(timer_handler, 5 * 1000000);
+ esp_timer_start_periodic(timer_handler, 2 * 1000000);
}
diff --git a/components/grownode/boards/gn_easypot1.c b/components/grownode/boards/gn_easypot1.c
index 380aa306..38acb2d3 100644
--- a/components/grownode/boards/gn_easypot1.c
+++ b/components/grownode/boards/gn_easypot1.c
@@ -20,6 +20,8 @@
#include "gn_capacitive_moisture_sensor.h"
#include "gn_ds18b20.h"
#include "gn_led.h"
+#include "gn_gpio.h"
+#include "soc/touch_sensor_channel.h"
#include "gn_easypot1.h"
@@ -30,8 +32,8 @@ gn_leaf_handle_t moist, temp, led_moist, led_temp;
double moist_last, temp_last;
//sets the tresholds
-const double moist_min = 1;
-const double moist_max = 3;
+const double moist_min = 20;
+const double moist_max = 70;
const double temp_min = 15;
const double temp_max = 28;
@@ -39,61 +41,59 @@ const double temp_max = 28;
const double blink_time_high = 300;
const double blink_time_low = 2000;
-void moisture_callback(const gn_leaf_handle_t moist) {
+void _gn_easypot1_callback() {
- double moist_act;
- gn_leaf_param_get_double(moist, GN_CMS_PARAM_ACT_LEVEL, &moist_act);
- gn_log(TAG, GN_LOG_INFO, "easypot1 - measuring moisture: %f", moist_act);
+ double temp_act = 0;
+ gn_leaf_param_get_double(temp, GN_DS18B20_PARAM_SENSOR_NAMES[0], &temp_act);
+ gn_log(TAG, GN_LOG_DEBUG, "easypot1 - measuring temp: %f", temp_act);
//turn on the LED if low with a specific frequency
- if (moist_act < moist_min && moist_last >= moist_min) {
- gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, true);
- gn_leaf_param_set_double(led_moist, GN_LED_PARAM_BLINK_TIME_MS,
+ if (temp_act < temp_min && temp_last >= temp_min) {
+ gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, true);
+ gn_leaf_param_set_double(led_temp, GN_LED_PARAM_BLINK_TIME_MS,
blink_time_low);
}
//turn on the LED if high with a specific frequency
- else if (moist_act > moist_max && moist_last <= moist_max) {
- gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, true);
- gn_leaf_param_set_double(led_moist, GN_LED_PARAM_BLINK_TIME_MS,
+ else if (temp_act > temp_max && temp_last <= temp_max) {
+ gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, true);
+ gn_leaf_param_set_double(led_temp, GN_LED_PARAM_BLINK_TIME_MS,
blink_time_high);
}
//turn off the LED if under normal threshold
- else if (moist_act <= moist_max && moist_act >= moist_min) {
- gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, false);
+ else if (temp_act <= temp_max && temp_act >= temp_min) {
+ gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, false);
}
- moist_last = moist_act;
-
-}
-
-void temp_callback(const gn_leaf_handle_t temp) {
+ temp_last = temp_act;
- double temp_act;
- gn_leaf_param_get_double(temp, GN_CMS_PARAM_ACT_LEVEL, &temp_act);
- gn_log(TAG, GN_LOG_INFO, "easypot1 - measuring temp: %f", temp_act);
+ double moist_act = 0;
+ gn_leaf_param_get_double(moist, GN_CMS_PARAM_ACT_LEVEL, &moist_act);
+ gn_log(TAG, GN_LOG_DEBUG, "easypot1 - measuring moisture: %f", moist_act);
//turn on the LED if low with a specific frequency
- if (temp_act < temp_min && temp_last >= temp_min) {
- gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, true);
- gn_leaf_param_set_double(led_temp, GN_LED_PARAM_BLINK_TIME_MS,
+ if (moist_act < moist_min && moist_last >= moist_min) {
+ gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, true);
+ gn_leaf_param_set_double(led_moist, GN_LED_PARAM_BLINK_TIME_MS,
blink_time_low);
}
//turn on the LED if high with a specific frequency
- else if (temp_act > temp_max && temp_last <= temp_max) {
- gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, true);
- gn_leaf_param_set_double(led_temp, GN_LED_PARAM_BLINK_TIME_MS,
+ else if (moist_act > moist_max && moist_last <= moist_max) {
+ gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, true);
+ gn_leaf_param_set_double(led_moist, GN_LED_PARAM_BLINK_TIME_MS,
blink_time_high);
}
//turn off the LED if under normal threshold
- else if (temp_act <= temp_max && temp_act >= temp_min) {
- gn_leaf_param_set_bool(led_temp, GN_LED_PARAM_TOGGLE, false);
+ else if (moist_act <= moist_max && moist_act >= moist_min) {
+ gn_leaf_param_set_bool(led_moist, GN_LED_PARAM_TOGGLE, false);
}
- temp_last = temp_act;
+ moist_last = moist_act;
+
+ gn_log(TAG, GN_LOG_DEBUG, "easypot1 - callback ended");
}
@@ -104,48 +104,44 @@ void temp_callback(const gn_leaf_handle_t temp) {
void gn_configure_easypot1(gn_node_handle_t node) {
//leaves
- //esp_log_level_set("gn_leaf_led", ESP_LOG_INFO);
+ esp_log_level_set("gn_leaf_led", esp_log_level_get(TAG));
+ esp_log_level_set("gn_leaf_gpio", esp_log_level_get(TAG));
+ esp_log_level_set("gn_leaf_cms", esp_log_level_get(TAG));
+ esp_log_level_set("gn_leaf_ds18b20", esp_log_level_get(TAG));
//creates the moisture sensor
moist = gn_leaf_create(node, "moist", gn_capacitive_moisture_sensor_config,
- 4096);
- //set the channel 4
- gn_leaf_param_init_double(moist, GN_CMS_PARAM_ADC_CHANNEL, 4); //GPIO12
+ 4096, GN_LEAF_TASK_PRIORITY);
+ //set the channel
+ gn_leaf_param_init_double(moist, GN_CMS_PARAM_ADC_CHANNEL, 5); //gpio33
//set update time
- gn_leaf_param_init_double(moist, GN_CMS_PARAM_UPDATE_TIME_SEC, 5);
+ gn_leaf_param_init_double(moist, GN_CMS_PARAM_UPDATE_TIME_SEC, 15);
//set initial status to active (on)
gn_leaf_param_init_bool(moist, GN_CMS_PARAM_ACTIVE, true);
//creates the temperature sensor
- temp = gn_leaf_create(node, "temp", gn_ds18b20_config, 4096);
+ temp = gn_leaf_create(node, "temp", gn_ds18b20_config, 4096, GN_LEAF_TASK_PRIORITY);
//set GPIO
- gn_leaf_param_init_double(temp, GN_DS18B20_PARAM_GPIO, 0);
+ gn_leaf_param_init_double(temp, GN_DS18B20_PARAM_GPIO, 26);
//set update time
- gn_leaf_param_init_double(temp, GN_DS18B20_PARAM_UPDATE_TIME_SEC, 5);
+ gn_leaf_param_init_double(temp, GN_DS18B20_PARAM_UPDATE_TIME_SEC, 15);
//set initial status to active (on)
gn_leaf_param_init_bool(temp, GN_DS18B20_PARAM_ACTIVE, true);
//create the temp led leaf
- led_temp = gn_leaf_create(node, "led_temp", gn_led_config, 4096);
- gn_leaf_param_init_double(led_temp, GN_LED_PARAM_GPIO, 1);
+ led_temp = gn_leaf_create(node, "led_temp", gn_led_config, 4096, GN_LEAF_TASK_PRIORITY);
+ gn_leaf_param_init_double(led_temp, GN_LED_PARAM_GPIO, 14);
//create the moisture led leaf
- led_moist = gn_leaf_create(node, "led_moist", gn_led_config, 4096);
- gn_leaf_param_init_double(led_moist, GN_LED_PARAM_GPIO, 2);
-
- //creates a timer that checks moisture every seconds, using esp_timer API
- esp_timer_handle_t timer_moisture_handler;
- esp_timer_create_args_t timer_moisture_args = { .callback =
- &moisture_callback, .name = "moist_timer" };
- esp_timer_create(&timer_moisture_args, &timer_moisture_handler);
- esp_timer_start_periodic(timer_moisture_handler, 1 * 1000000);
-
- //creates a timer that checks temperature every seconds, using esp_timer API
- esp_timer_handle_t timer_temp_handler;
- esp_timer_create_args_t timer_temp_args = { .callback = &temp_callback,
- .name = "temp_timer" };
- esp_timer_create(&timer_temp_args, &timer_temp_handler);
- esp_timer_start_periodic(timer_temp_handler, 1 * 1000000);
+ led_moist = gn_leaf_create(node, "led_moist", gn_led_config, 4096, GN_LEAF_TASK_PRIORITY);
+ gn_leaf_param_init_double(led_moist, GN_LED_PARAM_GPIO, 27);
+
+ //creates a timer that checks temperature and moisture, using esp_timer API
+ esp_timer_handle_t sensor_temp_handler;
+ esp_timer_create_args_t sensor_temp_args = { .callback = &_gn_easypot1_callback,
+ .name = "easypot1_timer" };
+ esp_timer_create(&sensor_temp_args, &sensor_temp_handler);
+ esp_timer_start_periodic(sensor_temp_handler, 30 * 1000000);
}
diff --git a/components/grownode/boards/gn_hydroboard1.c b/components/grownode/boards/gn_hydroboard1.c
index ac28b59a..9d17f53c 100644
--- a/components/grownode/boards/gn_hydroboard1.c
+++ b/components/grownode/boards/gn_hydroboard1.c
@@ -33,32 +33,32 @@
void gn_configure_hydroboard1(gn_node_handle_t node) {
gn_leaf_handle_t lights1in = gn_leaf_create(node, "lights1in",
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(lights1in, GN_GPIO_PARAM_GPIO, 25);
gn_leaf_param_init_bool(lights1in, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t lights2in = gn_leaf_create(node, "lights2in",
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(lights2in, GN_GPIO_PARAM_GPIO, 5);
gn_leaf_param_init_bool(lights2in, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t plt_a = gn_leaf_create(node, "plt_a",
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(plt_a, GN_GPIO_PARAM_GPIO, 23);
gn_leaf_param_init_bool(plt_a, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t plt_b = gn_leaf_create(node, "plt_b",
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(plt_b, GN_GPIO_PARAM_GPIO, 17);
gn_leaf_param_init_bool(plt_b, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t waterpumpin = gn_leaf_create(node, "waterpumpin",
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(waterpumpin, GN_GPIO_PARAM_GPIO, 19);
gn_leaf_param_init_bool(waterpumpin, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t waterlevelin = gn_leaf_create(node, "waterlevelin",
- gn_capacitive_water_level_config, 4096);
+ gn_capacitive_water_level_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(waterlevelin, GN_CWL_PARAM_ACTIVE, true);
gn_leaf_param_init_double(waterlevelin, GN_CWL_PARAM_TOUCH_CHANNEL, 2);
gn_leaf_param_init_double(waterlevelin, GN_CWL_PARAM_UPDATE_TIME_SEC, 10);
@@ -66,7 +66,7 @@ void gn_configure_hydroboard1(gn_node_handle_t node) {
gn_leaf_param_init_double(waterlevelin, GN_CWL_PARAM_MAX_LEVEL, 2048);
gn_leaf_handle_t hcc_speed = gn_leaf_create(node, "hcc",
- gn_pump_hs_config, 4096);
+ gn_pump_hs_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(hcc_speed, GN_PUMP_HS_PARAM_CHANNEL, 0);
gn_leaf_param_init_double(hcc_speed, GN_PUMP_HS_PARAM_GPIO_POWER, 18);
gn_leaf_param_init_double(hcc_speed, GN_PUMP_HS_PARAM_POWER, 0);
@@ -74,7 +74,7 @@ void gn_configure_hydroboard1(gn_node_handle_t node) {
gn_leaf_param_init_bool(hcc_speed, GN_PUMP_HS_PARAM_TOGGLE, false);
gn_leaf_handle_t fan_speed = gn_leaf_create(node, "fan",
- gn_pump_hs_config, 4096);
+ gn_pump_hs_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(fan_speed, GN_PUMP_HS_PARAM_CHANNEL, 1);
gn_leaf_param_init_double(fan_speed, GN_PUMP_HS_PARAM_GPIO_POWER, 27);
gn_leaf_param_init_double(fan_speed, GN_PUMP_HS_PARAM_POWER, 0);
@@ -82,14 +82,14 @@ void gn_configure_hydroboard1(gn_node_handle_t node) {
gn_leaf_param_init_bool(fan_speed, GN_PUMP_HS_PARAM_TOGGLE, false);
gn_leaf_handle_t bme280 = gn_leaf_create(node, "bme280",
- gn_bme280_config, 8192);
+ gn_bme280_config, 8192, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(bme280, GN_BME280_PARAM_SDA, 21);
gn_leaf_param_init_double(bme280, GN_BME280_PARAM_SCL, 22);
gn_leaf_param_init_bool(bme280, GN_BME280_PARAM_ACTIVE, true);
gn_leaf_param_init_double(bme280, GN_BME280_PARAM_UPDATE_TIME_SEC, 10);
gn_leaf_handle_t ds18b20 = gn_leaf_create(node, "ds18b20",
- gn_ds18b20_config, 4096);
+ gn_ds18b20_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(ds18b20, GN_DS18B20_PARAM_GPIO, 4);
gn_leaf_param_init_bool(ds18b20, GN_DS18B20_PARAM_ACTIVE, true);
gn_leaf_param_init_double(ds18b20, GN_DS18B20_PARAM_UPDATE_TIME_SEC, 5);
diff --git a/components/grownode/boards/gn_hydroboard2.c b/components/grownode/boards/gn_hydroboard2.c
index 0f8e07b6..99c0b98f 100644
--- a/components/grownode/boards/gn_hydroboard2.c
+++ b/components/grownode/boards/gn_hydroboard2.c
@@ -59,59 +59,59 @@ void gn_configure_hydroboard2(gn_node_handle_t node) {
const char *LIGHT_2 = "lig_2";
gn_leaf_handle_t lights1in = gn_leaf_create(node, LIGHT_1,
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(lights1in, GN_GPIO_PARAM_GPIO, 25);
gn_leaf_param_init_bool(lights1in, GN_GPIO_PARAM_INVERTED, true);
gn_leaf_param_init_bool(lights1in, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t lights2in = gn_leaf_create(node, LIGHT_2,
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(lights2in, GN_GPIO_PARAM_GPIO, 33);
gn_leaf_param_init_bool(lights2in, GN_GPIO_PARAM_INVERTED, true);
gn_leaf_param_init_bool(lights2in, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t plt_a = gn_leaf_create(node, PLT_HOT,
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(plt_a, GN_GPIO_PARAM_GPIO, 5);
gn_leaf_param_init_bool(plt_a, GN_GPIO_PARAM_INVERTED, true);
gn_leaf_param_init_bool(plt_a, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t plt_b = gn_leaf_create(node, PLT_COOL,
- gn_gpio_config, 4096);
+ gn_gpio_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(plt_b, GN_GPIO_PARAM_GPIO, 23);
gn_leaf_param_init_bool(plt_b, GN_GPIO_PARAM_INVERTED, true);
gn_leaf_param_init_bool(plt_b, GN_GPIO_PARAM_TOGGLE, false);
gn_leaf_handle_t wat_pump = gn_leaf_create(node, WAT_PUMP,
- gn_leaf_pwm_config, 4096);
+ gn_leaf_pwm_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(wat_pump, GN_LEAF_PWM_PARAM_TOGGLE, false);
gn_leaf_param_init_double(wat_pump, GN_LEAF_PWM_PARAM_GPIO, 16);
gn_leaf_param_init_double(wat_pump, GN_LEAF_PWM_PARAM_CHANNEL, 0);
gn_leaf_param_init_double(wat_pump, GN_LEAF_PWM_PARAM_POWER, 0);
gn_leaf_handle_t plt_pump = gn_leaf_create(node, PLT_PUMP,
- gn_leaf_pwm_config, 4096);
+ gn_leaf_pwm_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(plt_pump, GN_LEAF_PWM_PARAM_TOGGLE, false);
gn_leaf_param_init_double(plt_pump, GN_LEAF_PWM_PARAM_GPIO, 19);
gn_leaf_param_init_double(plt_pump, GN_LEAF_PWM_PARAM_CHANNEL, 1);
gn_leaf_param_init_double(plt_pump, GN_LEAF_PWM_PARAM_POWER, 0);
gn_leaf_handle_t plt_fan = gn_leaf_create(node, PLT_FAN,
- gn_leaf_pwm_config, 4096);
+ gn_leaf_pwm_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(plt_fan, GN_LEAF_PWM_PARAM_TOGGLE, false);
gn_leaf_param_init_double(plt_fan, GN_LEAF_PWM_PARAM_GPIO, 18);
gn_leaf_param_init_double(plt_fan, GN_LEAF_PWM_PARAM_CHANNEL, 2);
gn_leaf_param_init_double(plt_fan, GN_LEAF_PWM_PARAM_POWER, 0);
gn_leaf_handle_t env_fan = gn_leaf_create(node, ENV_FAN,
- gn_leaf_pwm_config, 4096);
+ gn_leaf_pwm_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(env_fan, GN_LEAF_PWM_PARAM_TOGGLE, false);
gn_leaf_param_init_double(env_fan, GN_LEAF_PWM_PARAM_GPIO, 27);
gn_leaf_param_init_double(env_fan, GN_LEAF_PWM_PARAM_CHANNEL, 3);
gn_leaf_param_init_double(env_fan, GN_LEAF_PWM_PARAM_POWER, 0);
gn_leaf_handle_t wat_lev = gn_leaf_create(node, WAT_LEV,
- gn_capacitive_water_level_config, 4096);
+ gn_capacitive_water_level_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_bool(wat_lev, GN_CWL_PARAM_ACTIVE, true);
gn_leaf_param_init_double(wat_lev, GN_CWL_PARAM_TOUCH_CHANNEL, 1);
gn_leaf_param_init_double(wat_lev, GN_CWL_PARAM_UPDATE_TIME_SEC, 10);
@@ -119,20 +119,20 @@ void gn_configure_hydroboard2(gn_node_handle_t node) {
gn_leaf_param_init_double(wat_lev, GN_CWL_PARAM_MAX_LEVEL, 2048);
gn_leaf_handle_t env_thp = gn_leaf_create(node, BME280,
- gn_bme280_config, 8192);
+ gn_bme280_config, 8192, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(env_thp, GN_BME280_PARAM_SDA, 21);
gn_leaf_param_init_double(env_thp, GN_BME280_PARAM_SCL, 22);
gn_leaf_param_init_bool(env_thp, GN_BME280_PARAM_ACTIVE, true);
gn_leaf_param_init_double(env_thp, GN_BME280_PARAM_UPDATE_TIME_SEC, 10);
gn_leaf_handle_t temps = gn_leaf_create(node, DS18B20,
- gn_ds18b20_config, 4096);
+ gn_ds18b20_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(temps, GN_DS18B20_PARAM_GPIO, 4);
gn_leaf_param_init_bool(temps, GN_DS18B20_PARAM_ACTIVE, true);
gn_leaf_param_init_double(temps, GN_DS18B20_PARAM_UPDATE_TIME_SEC, 5);
gn_leaf_handle_t watering_control = gn_leaf_create(node,
- "watering_control", gn_hb2_watering_control_config, 4096);
+ "watering_control", gn_hb2_watering_control_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(watering_control,
GN_HYDROBOARD2_WAT_CTR_PARAM_WATERING_INTERVAL_SEC, 60 * 1);
gn_leaf_param_init_double(watering_control,
@@ -155,7 +155,7 @@ void gn_configure_hydroboard2(gn_node_handle_t node) {
gn_leaf_param_init_string(watering_control, GN_HYDROBOARD2_WAT_CTR_PARAM_LEAF_LIGHT_2, LIGHT_2);
gn_leaf_handle_t led = gn_leaf_create(node, "led",
- gn_leaf_status_led_config, 4096);
+ gn_leaf_status_led_config, 4096, GN_LEAF_TASK_PRIORITY);
gn_leaf_param_init_double(led, GN_LEAF_STATUS_LED_PARAM_GPIO, 32);
}
diff --git a/components/grownode/boards/gn_oscilloscope.c b/components/grownode/boards/gn_oscilloscope.c
new file mode 100644
index 00000000..31b29995
--- /dev/null
+++ b/components/grownode/boards/gn_oscilloscope.c
@@ -0,0 +1,52 @@
+// Copyright 2021 Nicola Muratori (nicola.muratori@gmail.com)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include
+
+#include "esp_log.h"
+
+#include "grownode.h"
+#include "gn_leaf_ina219.h"
+
+#include "gn_oscilloscope.h"
+
+#define TAG "gn_oscilloscope"
+
+
+
+/**
+ * @brief
+ *
+ */
+void gn_configure_oscilloscope(gn_node_handle_t node) {
+
+ esp_log_level_set("gn_leaf_ina219", esp_log_level_get(TAG));
+
+ gn_leaf_handle_t ina219 = gn_leaf_create(node, "ina219", gn_leaf_ina219_config, 8192, GN_LEAF_TASK_PRIORITY);
+ gn_leaf_param_init_bool(ina219, GN_LEAF_INA219_PARAM_ACTIVE, true);
+
+ char* ip = calloc(16, sizeof(char));
+ strncpy(ip, "192.168.1.20", 16);
+
+ gn_leaf_param_init_string(ina219, GN_LEAF_INA219_PARAM_IP, ip);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_PORT, 8094);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SAMPLING_CYCLES, 10);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL, 100);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SDA, 26);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SCL, 27);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_WORKING_MODE, 1);
+
+
+}
+
diff --git a/components/grownode/boards/gn_oscilloscope.h b/components/grownode/boards/gn_oscilloscope.h
new file mode 100644
index 00000000..d6011e50
--- /dev/null
+++ b/components/grownode/boards/gn_oscilloscope.h
@@ -0,0 +1,30 @@
+// Copyright 2021 Nicola Muratori (nicola.muratori@gmail.com)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef MAIN_GN_OSCILLOSCOPE_H_
+#define MAIN_GN_OSCILLOSCOPE_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "grownode.h"
+
+void gn_configure_oscilloscope(gn_node_handle_t node);
+
+#ifdef __cplusplus
+}
+#endif //__cplusplus
+
+#endif /* MAIN_GN_OSCILLOSCOPE_H_ */
diff --git a/components/grownode/gn_commons.c b/components/grownode/gn_commons.c
index a54592f4..65351e4f 100755
--- a/components/grownode/gn_commons.c
+++ b/components/grownode/gn_commons.c
@@ -100,11 +100,11 @@ gn_leaf_param_validator_result_t gn_validator_double_positive(
double _p1 = **(double**) param_value;
ESP_LOGD(TAG, "gn_validator_double_positive - param: %f", _p1);
- if (min > **(double**) param_value) {
- memcpy(param_value, &zero, sizeof(min));
+ if (**(double**) param_value < zero) {
+ memcpy(param_value, &zero, sizeof(double));
return GN_LEAF_PARAM_VALIDATOR_ERROR_BELOW_MIN;
- } else if (max < **(double**) param_value) {
- memcpy(param_value, &max, sizeof(max));
+ } else if (**(double**) param_value >= max) {
+ memcpy(param_value, &max, sizeof(double));
return GN_LEAF_PARAM_VALIDATOR_ERROR_ABOVE_MAX;
}
@@ -125,11 +125,11 @@ gn_leaf_param_validator_result_t gn_validator_double(
double _p1 = **(double**) param_value;
ESP_LOGD(TAG, "gn_validator_double - param: %f", _p1);
- if (min > **(double**) param_value) {
- memcpy(param_value, &min, sizeof(min));
+ if (**(double**) param_value < min) {
+ memcpy(param_value, &min, sizeof(double));
return GN_LEAF_PARAM_VALIDATOR_ERROR_BELOW_MIN;
- } else if (max < **(double**) param_value) {
- memcpy(param_value, &max, sizeof(max));
+ } else if (**(double**) param_value >= max) {
+ memcpy(param_value, &max, sizeof(double));
return GN_LEAF_PARAM_VALIDATOR_ERROR_ABOVE_MAX;
}
diff --git a/components/grownode/gn_commons.h b/components/grownode/gn_commons.h
index 4e5afd02..70544072 100755
--- a/components/grownode/gn_commons.h
+++ b/components/grownode/gn_commons.h
@@ -24,9 +24,12 @@
extern "C" {
#endif
-#define GN_NODE_NAME_SIZE 32
-#define GN_LEAF_NAME_SIZE 32
+#define GN_LEAF_TASK_PRIORITY 1
+
+#define GN_NODE_NAME_SIZE 16
+#define GN_LEAF_NAME_SIZE 16
#define GN_LEAF_PARAM_NAME_SIZE 32
+#define GN_LEAF_PARAM_VAL_SIZE 64
#define GN_LEAF_DATA_SIZE 512
#define GN_NODE_DATA_SIZE 512
#define GN_LEAF_DESC_TYPE_SIZE 32
@@ -41,22 +44,6 @@ extern "C" {
*/
static const int16_t GN_CONFIG_MAX_SERVER_KEEPALIVE_SEC = 3600;
-typedef struct {
- bool provisioning_security;
- char provisioning_password[9];
- int16_t wifi_retries_before_reset_provisioning; /*!< -1 to never lose provisioning (warning: in case of SSID change, no way to reset!*/
- bool server_board_id_topic;
- char server_base_topic[80];
- char server_url[255];
- uint32_t server_keepalive_timer_sec;
- bool server_discovery;
- char server_discovery_prefix[80];
- char firmware_url[255];
- char sntp_url[255];
-} gn_config_init_param_t;
-
-typedef struct gn_config_init_param_t *gn_config_init_param_handle_t;
-
typedef enum {
GN_NODE_STATUS_NOT_INITIALIZED = 0,
GN_NODE_STATUS_INITIALIZING = 1,
@@ -71,9 +58,16 @@ typedef enum {
GN_NODE_STATUS_ERROR_MISSING_SERVER_URL = 10,
GN_NODE_STATUS_ERROR_BAD_SERVER_KEEPALIVE_SEC = 11,
GN_NODE_STATUS_ERROR_MISSING_SNTP_URL = 12,
- GN_NODE_STATUS_ERROR_MISSING_SERVER_DISCOVERY_PREFIX = 13
+ GN_NODE_STATUS_ERROR_MISSING_SERVER_DISCOVERY_PREFIX = 13,
+ GN_NODE_STATUS_SLEEPING = 14
} gn_node_status_t;
+typedef enum {
+ GN_SLEEP_MODE_NONE = 0,
+ GN_SLEEP_MODE_LIGHT = 1,
+ GN_SLEEP_MODE_DEEP = 2
+} gn_sleep_mode_t;
+
const char *gn_config_status_descriptions [14];
typedef enum {
@@ -118,6 +112,28 @@ typedef enum {
GN_LOG_ERROR = ESP_LOG_ERROR,
} gn_log_level_t;
+typedef struct {
+ bool provisioning_security;
+ char provisioning_password[9];
+ int16_t wifi_retries_before_reset_provisioning; /*!< -1 to never lose provisioning (warning: in case of SSID change, no way to reset!*/
+ bool server_board_id_topic;
+ char server_base_topic[80];
+ char server_url[255];
+ uint16_t server_keepalive_timer_sec;
+ bool server_discovery;
+ char server_discovery_prefix[80];
+ char firmware_url[255];
+ char sntp_url[255];
+ uint64_t wakeup_time_millisec; /*! if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must stay on (counted from boot) !*/
+ uint64_t sleep_time_millisec; /*! if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must sleep !*/
+ uint64_t sleep_delay_millisec; /*! if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must stay on waiting for leaves to complete its job before sleeping!*/
+ gn_sleep_mode_t sleep_mode; /*! define if and how the board must sleep !*/
+
+} gn_config_init_param_t;
+
+typedef struct gn_config_init_param_t *gn_config_init_param_handle_t;
+
+
typedef void *gn_leaf_handle_t;
typedef void *gn_node_handle_t;
typedef void *gn_config_handle_t;
diff --git a/components/grownode/gn_event_source.h b/components/grownode/gn_event_source.h
index ee1cad24..437117bd 100755
--- a/components/grownode/gn_event_source.h
+++ b/components/grownode/gn_event_source.h
@@ -69,8 +69,11 @@ typedef enum {
GN_SRV_KEEPALIVE_TRIGGERED_EVENT = 0x503,
//node events
- GN_NODE_STARTED_EVENT = 0x601
+ GN_NODE_STARTED_EVENT = 0x601,
+ //power events
+ GN_NODE_DEEP_SLEEP_START_EVENT = 0x701,
+ GN_NODE_LIGHT_SLEEP_START_EVENT = 0x702
} gn_event_id_t;
diff --git a/components/grownode/gn_mqtt_protocol.c b/components/grownode/gn_mqtt_protocol.c
index a1236b9e..a5b9df6a 100755
--- a/components/grownode/gn_mqtt_protocol.c
+++ b/components/grownode/gn_mqtt_protocol.c
@@ -32,8 +32,10 @@ extern "C" {
#define TAG "gn_mqtt_protocol"
EventGroupHandle_t _gn_event_group_mqtt;
-const int _GN_MQTT_CONNECTED_OK_EVENT_BIT = BIT0;
-const int _GN_MQTT_CONNECTED_KO_EVENT_BIT = BIT1;
+const int _GN_MQTT_CONNECTED_EVENT_BIT = BIT0;
+const int _GN_MQTT_DISCONNECT_EVENT_BIT = BIT1;
+
+const int _GN_MQTT_DEBUG_WAIT_MS = 500;
//static gn_server_status_t status = GN_SERVER_DISCONNECTED;
@@ -74,8 +76,7 @@ inline char* _gn_mqtt_build_node_name(gn_config_handle_intl_t config) {
}
-void _gn_mqtt_build_leaf_command_topic(gn_leaf_handle_t _leaf_config,
- char *buf) {
+void _gn_mqtt_build_leaf_command_topic(gn_leaf_handle_t _leaf_config, char *buf) {
gn_leaf_config_handle_intl_t leaf_config =
(gn_leaf_config_handle_intl_t) _leaf_config;
@@ -87,8 +88,10 @@ void _gn_mqtt_build_leaf_command_topic(gn_leaf_handle_t _leaf_config,
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), 13);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, leaf_config->name, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -99,8 +102,7 @@ void _gn_mqtt_build_leaf_command_topic(gn_leaf_handle_t _leaf_config,
}
void _gn_mqtt_build_leaf_parameter_command_topic(
- const gn_leaf_handle_t _leaf_config, const char *param_name,
- char *buf) {
+ const gn_leaf_handle_t _leaf_config, const char *param_name, char *buf) {
gn_leaf_config_handle_intl_t leaf_config =
(gn_leaf_config_handle_intl_t) _leaf_config;
@@ -112,8 +114,10 @@ void _gn_mqtt_build_leaf_parameter_command_topic(
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, leaf_config->name, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -125,8 +129,8 @@ void _gn_mqtt_build_leaf_parameter_command_topic(
}
-void _gn_mqtt_build_leaf_parameter_status_topic(
- gn_leaf_handle_t _leaf_config, char *param_name, char *buf) {
+void _gn_mqtt_build_leaf_parameter_status_topic(gn_leaf_handle_t _leaf_config,
+ char *param_name, char *buf) {
gn_leaf_config_handle_intl_t leaf_config =
(gn_leaf_config_handle_intl_t) _leaf_config;
@@ -138,8 +142,10 @@ void _gn_mqtt_build_leaf_parameter_status_topic(
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, leaf_config->name, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -151,8 +157,7 @@ void _gn_mqtt_build_leaf_parameter_status_topic(
}
-void _gn_mqtt_build_leaf_status_topic(gn_leaf_handle_t _leaf_config,
- char *buf) {
+void _gn_mqtt_build_leaf_status_topic(gn_leaf_handle_t _leaf_config, char *buf) {
gn_leaf_config_handle_intl_t leaf_config =
(gn_leaf_config_handle_intl_t) _leaf_config;
@@ -164,8 +169,10 @@ void _gn_mqtt_build_leaf_status_topic(gn_leaf_handle_t _leaf_config,
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, leaf_config->name, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -179,9 +186,11 @@ void _gn_mqtt_build_status_topic(gn_config_handle_intl_t config, char *buf) {
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, _GN_MQTT_STATUS_MESS, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -194,8 +203,10 @@ void _gn_mqtt_build_log_topic(gn_config_handle_intl_t config, char *buf) {
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, _GN_MQTT_LOG_MESS, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -206,9 +217,11 @@ void _gn_mqtt_build_log_topic(gn_config_handle_intl_t config, char *buf) {
void _gn_mqtt_build_command_topic(gn_config_handle_intl_t config, char *buf) {
strncpy(buf, config->config_init_params->server_base_topic,
_GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
+ //strncat(buf, config->node_handle->name, _GN_MQTT_MAX_TOPIC_LENGTH);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
if (config->config_init_params->server_board_id_topic) {
- strncat(buf, _gn_mqtt_build_node_name(config), 12);
+ strncat(buf, _gn_mqtt_build_node_name(config), GN_MQTT_NODE_NAME_SIZE);
strncat(buf, "/", _GN_MQTT_MAX_TOPIC_LENGTH);
}
strncat(buf, _GN_MQTT_COMMAND_MESS, _GN_MQTT_MAX_TOPIC_LENGTH);
@@ -257,7 +270,7 @@ void _gn_mqtt_build_command_topic(gn_config_handle_intl_t config, char *buf) {
*
* @return status of the operation
*/
-gn_err_t gn_mqtt_publish_leaf(gn_leaf_handle_t _leaf_config) {
+gn_err_t gn_mqtt_subscribe_leaf(gn_leaf_handle_t _leaf_config) {
if (!_leaf_config)
return GN_RET_ERR;
@@ -282,20 +295,20 @@ gn_err_t gn_mqtt_publish_leaf(gn_leaf_handle_t _leaf_config) {
if (!config)
return GN_RET_ERR;
- ESP_LOGD(TAG, "publishing leaf %s", leaf_config->name);
-
char topic[_GN_MQTT_MAX_TOPIC_LENGTH];
_gn_mqtt_build_leaf_command_topic(leaf_config, topic);
- ESP_LOGD(TAG, "subscribing leaf. topic: %s", topic);
+ if (esp_log_level_get(TAG) == ESP_LOG_DEBUG) {
+ ESP_LOGD(TAG, "gn_mqtt_subscribe_leaf - topic = %s. now waiting %d ms",
+ topic, _GN_MQTT_DEBUG_WAIT_MS);
+ vTaskDelay(_GN_MQTT_DEBUG_WAIT_MS / portTICK_PERIOD_MS);
+ }
if (esp_mqtt_client_subscribe(config->mqtt_client, topic, 0) == -1) {
ESP_LOGE(TAG, "subscribing error");
return GN_RET_ERR_MQTT_SUBSCRIBE;
}
- ESP_LOGD(TAG, "sent subscribe successful, topic = %s", topic);
-
//notify
if (config->config_init_params->server_discovery) {
@@ -305,7 +318,7 @@ gn_err_t gn_mqtt_publish_leaf(gn_leaf_handle_t _leaf_config) {
char *_d_payload = calloc(_GN_MQTT_MAX_PAYLOAD_LENGTH + 1,
sizeof(char));
- ESP_LOGD(TAG, "gn_mqtt_send_node_config - building node config: %s",
+ ESP_LOGD(TAG, "gn_mqtt_subscribe_leaf - building node config: %s",
_node_config->name);
gn_leaf_param_handle_intl_t _param =
@@ -316,14 +329,14 @@ gn_err_t gn_mqtt_publish_leaf(gn_leaf_handle_t _leaf_config) {
cJSON *root = cJSON_CreateObject();
//build parameter ID
- char d_param_id[_GN_MQTT_MAX_TOPIC_LENGTH + 1] = { 0 };
+ char d_param_id[_GN_MQTT_MAX_TOPIC_LENGTH] = { 0 };
strncpy(d_param_id, _node_config->config->deviceName,
_GN_MQTT_MAX_TOPIC_LENGTH);
- strncat(d_param_id, "-", _GN_MQTT_MAX_TOPIC_LENGTH);
+ strncat(d_param_id, "-", _GN_MQTT_MAX_TOPIC_LENGTH - 1);
strncat(d_param_id, leaf_config->name,
- _GN_MQTT_MAX_TOPIC_LENGTH);
- strncat(d_param_id, "-", _GN_MQTT_MAX_TOPIC_LENGTH);
- strncat(d_param_id, _param->name, _GN_MQTT_MAX_TOPIC_LENGTH);
+ _GN_MQTT_MAX_TOPIC_LENGTH - 1);
+ strncat(d_param_id, "-", _GN_MQTT_MAX_TOPIC_LENGTH - 1);
+ strncat(d_param_id, _param->name, _GN_MQTT_MAX_TOPIC_LENGTH - 1);
//build payload
strncpy(_d_msg_topic,
@@ -395,7 +408,7 @@ gn_err_t gn_mqtt_subscribe_leaf_param(gn_leaf_param_handle_t _param) {
gn_config_handle_intl_t config =
(gn_config_handle_intl_t) node_config->config;
- ESP_LOGD(TAG, "subscribing param %s on %s", param->name, leaf_config->name);
+ //ESP_LOGD(TAG, "subscribing param %s on %s", param->name, leaf_config->name);
char topic[_GN_MQTT_MAX_TOPIC_LENGTH];
_gn_mqtt_build_leaf_parameter_command_topic(leaf_config, param->name,
@@ -404,10 +417,15 @@ gn_err_t gn_mqtt_subscribe_leaf_param(gn_leaf_param_handle_t _param) {
ESP_LOGD(TAG, "gn_mqtt_subscribe_leaf_param. topic: %s", topic);
int msg_id = esp_mqtt_client_subscribe(config->mqtt_client, topic, 0);
- ESP_LOGD(TAG, "sent subscribe successful, topic = %s, msg_id=%d", topic,
- msg_id);
- return GN_RET_OK;
+ if (esp_log_level_get(TAG) == ESP_LOG_DEBUG) {
+ ESP_LOGD(TAG,
+ "gn_mqtt_subscribe_leaf_param, topic = %s, msg_id=%d. now waiting %d ms",
+ topic, msg_id, _GN_MQTT_DEBUG_WAIT_MS);
+ vTaskDelay(_GN_MQTT_DEBUG_WAIT_MS / portTICK_PERIOD_MS);
+ }
+
+ return msg_id == -1 ? GN_RET_ERR : GN_RET_OK;
#else
return GN_RET_OK;
@@ -433,8 +451,7 @@ gn_err_t gn_mqtt_send_node_config(gn_node_handle_t _node_config) {
if (!_node_config)
return GN_RET_ERR_INVALID_ARG;
- gn_node_handle_intl_t __node_config =
- (gn_node_handle_intl_t) _node_config;
+ gn_node_handle_intl_t __node_config = (gn_node_handle_intl_t) _node_config;
if (!__node_config->config)
return GN_RET_ERR_INVALID_ARG;
@@ -452,8 +469,7 @@ gn_err_t gn_mqtt_send_node_config(gn_node_handle_t _node_config) {
msg->config = _node_config;
strncpy(msg->topic, _gn_sts_topic, _GN_MQTT_MAX_TOPIC_LENGTH);
- gn_node_handle_intl_t node_config =
- (gn_node_handle_intl_t) _node_config;
+ gn_node_handle_intl_t node_config = (gn_node_handle_intl_t) _node_config;
gn_config_handle_intl_t config =
(gn_config_handle_intl_t) node_config->config;
@@ -589,8 +605,6 @@ gn_err_t gn_mqtt_send_leaf_param(gn_leaf_param_handle_t _param) {
_gn_mqtt_build_leaf_parameter_status_topic(param->leaf_config, param->name,
_topic);
- size_t len = 0;
-
switch (param->param_val->t) {
case GN_VAL_TYPE_BOOLEAN:
if (param->param_val->v.b) {
@@ -600,8 +614,8 @@ gn_err_t gn_mqtt_send_leaf_param(gn_leaf_param_handle_t _param) {
}
break;
case GN_VAL_TYPE_STRING:
- len = strlen(param->param_val->v.s);
- strncpy(buf, param->param_val->v.s, len > _GN_MQTT_MAX_PAYLOAD_LENGTH? _GN_MQTT_MAX_PAYLOAD_LENGTH: len);
+ //size_t len = strlen(param->param_val->v.s);
+ strncpy(buf, param->param_val->v.s, _GN_MQTT_MAX_PAYLOAD_LENGTH);
break;
case GN_VAL_TYPE_DOUBLE:
snprintf(buf, 31, "%f", param->param_val->v.d);
@@ -626,8 +640,12 @@ gn_err_t gn_mqtt_send_leaf_param(gn_leaf_param_handle_t _param) {
if (msg_id == -1)
goto fail;
- ESP_LOGD(TAG, "sent publish successful, msg_id=%d, topic=%s, payload=%s",
- msg_id, _topic, buf);
+ if (esp_log_level_get(TAG) == ESP_LOG_DEBUG) {
+ ESP_LOGD(TAG,
+ "sent publish successful, msg_id=%d, topic=%s, payload=%s. now waiting %d ms",
+ msg_id, _topic, buf, _GN_MQTT_DEBUG_WAIT_MS);
+ vTaskDelay(_GN_MQTT_DEBUG_WAIT_MS / portTICK_PERIOD_MS);
+ }
fail: {
free(buf);
@@ -763,7 +781,7 @@ gn_err_t gn_mqtt_send_startup_message(gn_config_handle_t _config) {
gn_config_handle_intl_t config = (gn_config_handle_intl_t) _config;
- //if (config->status != GN_CONFIG_STATUS_COMPLETED)
+ //if (config->status != GN_NODE_STATUS_STARTED)
// return GN_RET_OK;
//build
@@ -1037,8 +1055,7 @@ gn_err_t gn_mqtt_send_ota_message(gn_config_handle_t _config) {
* @return GN_RET_ERR_INVALID_ARG if _config is null
* @return GN_RET_ERR_MQTT_ERROR if not possible to send message
*/
-gn_err_t gn_mqtt_send_leaf_message(gn_leaf_handle_t _leaf,
- const char *msg) {
+gn_err_t gn_mqtt_send_leaf_message(gn_leaf_handle_t _leaf, const char *msg) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -1059,11 +1076,16 @@ gn_err_t gn_mqtt_send_leaf_message(gn_leaf_handle_t _leaf,
char buf[_GN_MQTT_MAX_TOPIC_LENGTH];
_gn_mqtt_build_command_topic(node_config->config, buf);
-//publish
- ESP_LOGD(TAG, "publish topic %s, msg=%s", buf, msg);
int msg_id = esp_mqtt_client_publish(config->mqtt_client, buf, msg, 0, 0,
0);
+//publish
+ if (esp_log_level_get(TAG) == ESP_LOG_DEBUG) {
+ ESP_LOGD(TAG, "publish topic %s, msg=%s. now waiting %d ms", buf, msg,
+ _GN_MQTT_DEBUG_WAIT_MS);
+ vTaskDelay(_GN_MQTT_DEBUG_WAIT_MS / portTICK_PERIOD_MS);
+ }
+
return ((msg_id == -1) ? (GN_RET_ERR_MQTT_ERROR) : (GN_RET_OK));
#else
@@ -1108,8 +1130,7 @@ esp_err_t _gn_mqtt_on_connected(gn_config_handle_t config) {
goto fail;
}
- return xEventGroupSetBits(_gn_event_group_mqtt,
- _GN_MQTT_CONNECTED_OK_EVENT_BIT);
+ return ESP_OK;
fail:
@@ -1141,9 +1162,6 @@ esp_err_t _gn_mqtt_on_disconnected(gn_config_handle_t config) {
ESP_LOGE(TAG, "failed to send GN_SERVER_DISCONNECTED_EVENT event");
}
- ESP_LOGD(TAG, "_GN_MQTT_CONNECTED_KO_EVENT_BIT");
-
- xEventGroupSetBits(_gn_event_group_mqtt, _GN_MQTT_CONNECTED_KO_EVENT_BIT);
return ESP_OK;
#else
@@ -1175,7 +1193,7 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
switch ((esp_mqtt_event_id_t) event_id) {
case MQTT_EVENT_CONNECTED:
ESP_LOGD(TAG, "MQTT_EVENT_CONNECTED");
- _gn_mqtt_on_connected(config);
+ xEventGroupSetBits(_gn_event_group_mqtt, _GN_MQTT_CONNECTED_EVENT_BIT);
/*
msg_id = esp_mqtt_client_publish(client, "/topic/qos1", "data_3", 0, 1,
@@ -1194,18 +1212,22 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
break;
case MQTT_EVENT_DISCONNECTED:
ESP_LOGD(TAG, "MQTT_EVENT_DISCONNECTED");
+ xEventGroupSetBits(_gn_event_group_mqtt, _GN_MQTT_DISCONNECT_EVENT_BIT);
_gn_mqtt_on_disconnected(config);
- break;
- case MQTT_EVENT_SUBSCRIBED:
- ESP_LOGD(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
- break;
- case MQTT_EVENT_UNSUBSCRIBED:
- ESP_LOGD(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
- break;
- case MQTT_EVENT_PUBLISHED:
- ESP_LOGD(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
break;
+
+ /*
+ case MQTT_EVENT_SUBSCRIBED:
+ ESP_LOGD(TAG, "MQTT_EVENT_SUBSCRIBED, msg_id=%d", event->msg_id);
+ break;
+ case MQTT_EVENT_UNSUBSCRIBED:
+ ESP_LOGD(TAG, "MQTT_EVENT_UNSUBSCRIBED, msg_id=%d", event->msg_id);
+ break;
+ case MQTT_EVENT_PUBLISHED:
+ ESP_LOGD(TAG, "MQTT_EVENT_PUBLISHED, msg_id=%d", event->msg_id);
+ break;
+ */
case MQTT_EVENT_DATA:
//TODO here the code to forward the call to appropriate node/leaf or system handler. start from remote OTA and RST
ESP_LOGD(TAG, "MQTT_EVENT_DATA");
@@ -1219,6 +1241,12 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
== 0) {
//ota message
+ if (event->retain) {
+ //clear retain message
+ esp_mqtt_client_publish(config->mqtt_client, _gn_cmd_topic,
+ "", 0, 1, true);
+ }
+
esp_event_post_to(config->event_loop, GN_BASE_EVENT,
GN_NET_OTA_START, NULL, 0, portMAX_DELAY);
@@ -1226,6 +1254,12 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
event->data_len) == 0) {
//rst message
+ if (event->retain) {
+ //clear retain message
+ esp_mqtt_client_publish(config->mqtt_client, _gn_cmd_topic,
+ "", 0, 1, true);
+ }
+
esp_event_post_to(config->event_loop, GN_BASE_EVENT,
GN_NET_RST_START, NULL, 0, portMAX_DELAY);
@@ -1233,6 +1267,12 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
event->data_len) == 0) {
//rst message
+ if (event->retain) {
+ //clear retain message
+ esp_mqtt_client_publish(config->mqtt_client, _gn_cmd_topic,
+ "", 0, 1, true);
+ }
+
esp_event_post_to(config->event_loop, GN_BASE_EVENT,
GN_NET_RBT_START, NULL, 0, portMAX_DELAY);
@@ -1244,16 +1284,16 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
char param_topic[_GN_MQTT_MAX_TOPIC_LENGTH];
gn_leaf_parameter_event_t evt;
- for (int i = 0; i < config->node_config->leaves.last; i++) {
+ for (int i = 0; i < config->node_handle->leaves.last; i++) {
//message is for this leaf
_gn_mqtt_build_leaf_command_topic(
- config->node_config->leaves.at[i], leaf_topic);
+ config->node_handle->leaves.at[i], leaf_topic);
if (strncmp(leaf_topic, event->topic, event->topic_len) == 0) {
evt.id = GN_LEAF_MESSAGE_RECEIVED_EVENT;
strncpy(evt.leaf_name,
- config->node_config->leaves.at[i]->name,
+ config->node_handle->leaves.at[i]->name,
GN_LEAF_NAME_SIZE);
//evt.data = event->data;
memcpy(&evt.data[0], event->data,
@@ -1266,35 +1306,35 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
if (esp_event_post_to(config->event_loop, GN_BASE_EVENT,
evt.id, &evt, sizeof(evt), portMAX_DELAY) != ESP_OK) {
ESP_LOGE(TAG, "not possible to send message to leaf %s",
- config->node_config->leaves.at[i]->name);
+ config->node_handle->leaves.at[i]->name);
}
//send message to the interested leaf
- _gn_send_event_to_leaf(config->node_config->leaves.at[i],
+ _gn_send_event_to_leaf(config->node_handle->leaves.at[i],
&evt);
break;
}
gn_leaf_param_handle_intl_t _param =
- (gn_leaf_param_handle_intl_t) config->node_config->leaves.at[i]->params;
+ (gn_leaf_param_handle_intl_t) config->node_handle->leaves.at[i]->params;
while (_param) {
//message is for a parameter of this leaf
_gn_mqtt_build_leaf_parameter_command_topic(
- config->node_config->leaves.at[i], _param->name,
+ config->node_handle->leaves.at[i], _param->name,
param_topic);
if (strncmp(param_topic, event->topic, event->topic_len)
== 0) {
if (GN_RET_OK
!= _gn_leaf_parameter_update(
- config->node_config->leaves.at[i],
+ config->node_handle->leaves.at[i],
_param->name, event->data,
event->data_len)) {
ESP_LOGE(TAG,
"error in updating parameter %s with value %s to leaf %s",
_param->name, event->data,
- config->node_config->leaves.at[i]->name);
+ config->node_handle->leaves.at[i]->name);
break;
}
@@ -1344,7 +1384,7 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
}
break;
default:
- ESP_LOGD(TAG, "Other event id:%d", event->event_id);
+ //ESP_LOGD(TAG, "Other event id:%d", event->event_id);
break;
}
@@ -1361,7 +1401,7 @@ void _gn_mqtt_event_handler(void *handler_args, esp_event_base_t base,
* @return GN_RET_ERR_MQTT_ERROR in case of MQTT errors
* @return GN_RET_ERR in case of general errors
*/
-gn_err_t gn_mqtt_init(gn_config_handle_t config) {
+gn_err_t gn_mqtt_start(gn_config_handle_t config) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -1369,6 +1409,9 @@ gn_err_t gn_mqtt_init(gn_config_handle_t config) {
_gn_event_group_mqtt = xEventGroupCreate();
+ xEventGroupClearBits(_gn_event_group_mqtt, _GN_MQTT_DISCONNECT_EVENT_BIT);
+ xEventGroupClearBits(_gn_event_group_mqtt, _GN_MQTT_CONNECTED_EVENT_BIT);
+
char _topic[_GN_MQTT_MAX_TOPIC_LENGTH];
_gn_mqtt_build_status_topic(_config, _topic);
@@ -1385,7 +1428,6 @@ gn_err_t gn_mqtt_init(gn_config_handle_t config) {
return GN_RET_ERR_INVALID_ARG;
}
- /* The last argument may be used to pass data to the event handler, in this example mqtt_event_handler */
ESP_ERROR_CHECK(
esp_mqtt_client_register_event(client, (esp_mqtt_event_id_t) ESP_EVENT_ANY_ID, _gn_mqtt_event_handler, NULL));
@@ -1405,44 +1447,29 @@ gn_err_t gn_mqtt_init(gn_config_handle_t config) {
_gn_mqtt_build_status_topic(_config, _gn_sts_topic);
_gn_mqtt_build_log_topic(_config, _gn_log_topic);
+ ESP_LOGI(TAG, "gn_mqtt_init waiting to connect");
+
EventBits_t uxBits;
uxBits = xEventGroupWaitBits(_gn_event_group_mqtt,
- _GN_MQTT_CONNECTED_OK_EVENT_BIT | _GN_MQTT_CONNECTED_KO_EVENT_BIT,
- pdTRUE,
+ _GN_MQTT_CONNECTED_EVENT_BIT | _GN_MQTT_DISCONNECT_EVENT_BIT,
+ pdFALSE,
pdFALSE, portMAX_DELAY);
- if ((uxBits & _GN_MQTT_CONNECTED_OK_EVENT_BIT) != 0) {
- ESP_LOGI(TAG, "MQTT connection successful");
-
- /*
- //publish server connected event
- if (ESP_OK
- != esp_event_post_to(_config->event_loop, GN_BASE_EVENT,
- GN_SERVER_CONNECTED_EVENT,
- NULL, 0, portMAX_DELAY)) {
- ESP_LOGE(TAG, "failed to send GN_SERVER_CONNECTED_EVENT event");
- goto fail;
- }
- */
+ if ((uxBits & _GN_MQTT_CONNECTED_EVENT_BIT) != 0) {
+ ESP_LOGD(TAG, "gn_mqtt_init connection successful. returning");
+ _gn_mqtt_on_connected(config);
return GN_RET_OK;
}
- else if ((uxBits & _GN_MQTT_CONNECTED_KO_EVENT_BIT) != 0) {
- ESP_LOGE(TAG, "MQTT connection error");
- //publish server disconnected event
- /*
- if (ESP_OK
- != esp_event_post_to(_config->event_loop, GN_BASE_EVENT,
- GN_SERVER_DISCONNECTED_EVENT,
- NULL, 0, portMAX_DELAY)) {
- ESP_LOGE(TAG, "failed to send GN_SERVER_DISCONNECTED_EVENT event");
- return ESP_FAIL;
- }
- */
+ else if ((uxBits & _GN_MQTT_DISCONNECT_EVENT_BIT) != 0) {
+
+ ESP_LOGE(TAG, "gn_mqtt_init connection error. returning");
return GN_RET_ERR_MQTT_ERROR;
+
} else {
//should never reach here
+ ESP_LOGE(TAG, "gn_mqtt_init control flow error. returning");
return GN_RET_ERR;
}
@@ -1452,6 +1479,156 @@ gn_err_t gn_mqtt_init(gn_config_handle_t config) {
}
+/**
+ * @brief stops the MQTT subsystem. this requires the client to be reinitialized
+ *
+ * @param config the configuration to use
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of null _conf
+ * @return GN_RET_ERR in case of general errors
+ */
+
+gn_err_t gn_mqtt_stop(gn_config_handle_t config) {
+
+#ifdef CONFIG_GROWNODE_WIFI_ENABLED
+
+ if (!config)
+ return GN_RET_ERR_INVALID_ARG;
+
+ gn_config_handle_intl_t _config = (gn_config_handle_intl_t) config;
+
+ if (!_config->mqtt_client)
+ return GN_RET_ERR_INVALID_ARG;
+
+ esp_err_t esp_ret;
+ esp_ret = esp_mqtt_client_disconnect(_config->mqtt_client);
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_mqtt_client_disconnect: %s",
+ esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ esp_ret = esp_mqtt_client_stop(_config->mqtt_client);
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_mqtt_client_stop: %s",
+ esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ /*
+ ESP_LOGI(TAG, "gn_mqtt_stop waiting to disconnect");
+
+ xEventGroupWaitBits(_gn_event_group_mqtt, _GN_MQTT_DISCONNECT_EVENT_BIT,
+ pdFALSE,
+ pdFALSE, portMAX_DELAY);
+
+ xEventGroupClearBits(_gn_event_group_mqtt, _GN_MQTT_DISCONNECT_EVENT_BIT);
+ xEventGroupClearBits(_gn_event_group_mqtt, _GN_MQTT_CONNECTED_EVENT_BIT);
+
+ ESP_LOGI(TAG, "gn_mqtt_stop returning");
+ */
+
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
+
+}
+
+/**
+ * @brief disconnect the MQTT subsystem, this is useful if the reconnection using same client is planned. use gn_mqtt_reconnect to restart
+ *
+ * @param config the configuration to use
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of null _conf
+ * @return GN_RET_ERR in case of general errors
+ */
+
+gn_err_t gn_mqtt_disconnect(gn_config_handle_t config) {
+
+#ifdef CONFIG_GROWNODE_WIFI_ENABLED
+
+ if (!config)
+ return GN_RET_ERR_INVALID_ARG;
+
+ gn_config_handle_intl_t _config = (gn_config_handle_intl_t) config;
+
+ if (!_config->mqtt_client)
+ return GN_RET_ERR_INVALID_ARG;
+
+ esp_err_t esp_ret;
+ esp_ret = esp_mqtt_client_disconnect(_config->mqtt_client);
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_mqtt_client_disconnect: %s",
+ esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ /*
+ ESP_LOGI(TAG, "gn_mqtt_disconnect waiting to disconnect");
+
+ EventBits_t uxBits;
+ uxBits = xEventGroupWaitBits(_gn_event_group_mqtt,
+ _GN_MQTT_DISCONNECT_EVENT_BIT,
+ pdFALSE,
+ pdFALSE, portMAX_DELAY);
+
+ ESP_LOGI(TAG, "gn_mqtt_disconnect returning");
+ */
+
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
+
+}
+
+/**
+ * @brief reconnect the MQTT subsystem keeping the client configuration
+ *
+ * @param config the configuration to use
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of null _conf
+ * @return GN_RET_ERR in case of general errors
+ */
+
+gn_err_t gn_mqtt_reconnect(gn_config_handle_t config) {
+
+#ifdef CONFIG_GROWNODE_WIFI_ENABLED
+
+ if (!config)
+ return GN_RET_ERR_INVALID_ARG;
+
+ gn_config_handle_intl_t _config = (gn_config_handle_intl_t) config;
+
+ if (!_config->mqtt_client)
+ return GN_RET_ERR_INVALID_ARG;
+
+ esp_err_t esp_ret;
+ esp_ret = esp_mqtt_client_reconnect(_config->mqtt_client);
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_mqtt_client_disconnect: %s",
+ esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ ESP_LOGD(TAG, "gn_mqtt_reconnect waiting to connect");
+
+ xEventGroupWaitBits(_gn_event_group_mqtt, _GN_MQTT_CONNECTED_EVENT_BIT,
+ pdFALSE,
+ pdFALSE, portMAX_DELAY);
+
+ ESP_LOGD(TAG, "gn_mqtt_reconnect returning");
+
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
+}
+
/*
static void test() {
diff --git a/components/grownode/gn_mqtt_protocol.h b/components/grownode/gn_mqtt_protocol.h
index 65564d96..6c511d6c 100755
--- a/components/grownode/gn_mqtt_protocol.h
+++ b/components/grownode/gn_mqtt_protocol.h
@@ -33,13 +33,21 @@ extern "C" {
#define _GN_MQTT_PAYLOAD_OTA "OTA"
#define _GN_MQTT_PAYLOAD_RBT "RBT"
+#define GN_MQTT_NODE_NAME_SIZE 13
+
#define _GN_MQTT_DEFAULT_QOS 0
-gn_err_t gn_mqtt_publish_leaf(gn_leaf_handle_t leaf_config);
+gn_err_t gn_mqtt_subscribe_leaf(gn_leaf_handle_t leaf_config);
esp_err_t gn_mqtt_subscribe_leaf_param(gn_leaf_param_handle_t param);
-gn_err_t gn_mqtt_init(gn_config_handle_t config);
+gn_err_t gn_mqtt_start(gn_config_handle_t config);
+
+gn_err_t gn_mqtt_stop(gn_config_handle_t config);
+
+gn_err_t gn_mqtt_disconnect(gn_config_handle_t config);
+
+gn_err_t gn_mqtt_reconnect(gn_config_handle_t config);
gn_err_t gn_mqtt_send_node_config(gn_node_handle_t conf);
diff --git a/components/grownode/gn_network.c b/components/grownode/gn_network.c
index 8d78c716..6f67aa9e 100755
--- a/components/grownode/gn_network.c
+++ b/components/grownode/gn_network.c
@@ -57,6 +57,8 @@ extern "C" {
const int GN_WIFI_CONNECTED_EVENT = BIT0;
const int GN_WIFI_FAIL_EVENT = BIT2;
const int GN_PROV_END_EVENT = BIT1;
+const int GN_WIFI_DISCONNECTED_EVENT = BIT3;
+const int GN_WIFI_STOPPED_EVENT = BIT4;
EventGroupHandle_t _gn_event_group_wifi;
int s_retry_num = 0;
@@ -72,6 +74,7 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
if (event_base == WIFI_PROV_EVENT) {
switch (event_id) {
+
case WIFI_PROV_START:
ESP_LOGD(TAG, "WIFI_PROV_START");
gn_log(TAG, GN_LOG_INFO, "Provisioning Started");
@@ -85,6 +88,7 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
(const char* ) wifi_sta_cfg->password);
break;
}
+
case WIFI_PROV_CRED_FAIL: {
ESP_LOGD(TAG, "WIFI_PROV_CRED_FAIL");
wifi_prov_sta_fail_reason_t *reason =
@@ -98,9 +102,11 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
gn_reboot();
break;
}
+
case WIFI_PROV_CRED_SUCCESS:
ESP_LOGD(TAG, "WIFI_PROV_CRED_SUCCESS");
break;
+
case WIFI_PROV_END:
ESP_LOGD(TAG, "WIFI_PROV_END");
gn_log(TAG, GN_LOG_INFO, "Provisioning OK");
@@ -108,10 +114,13 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
default:
break;
}
+
} else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
+
ESP_LOGD(TAG, "WIFI_EVENT_STA_START");
esp_wifi_connect();
} else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) {
+
ESP_LOGD(TAG, "IP_EVENT_STA_GOT_IP");
s_retry_num = 0;
ip_event_got_ip_t *event = (ip_event_got_ip_t*) event_data;
@@ -128,7 +137,7 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
memcpy(_conf->macAddress, eth_mac, 6);
strcpy(_conf->deviceName, deviceName);
- snprintf(log, 41, "%s-%d.%d.%d.%d", deviceName,
+ snprintf(log, 52, "board:%s -IP: %d.%d.%d.%d", deviceName,
IP2STR(&event->ip_info.ip));
gn_log(TAG, GN_LOG_DEBUG, log);
@@ -144,33 +153,50 @@ void _gn_wifi_event_handler(void *arg, esp_event_base_t event_base,
} else if (event_base == WIFI_EVENT
&& event_id == WIFI_EVENT_STA_DISCONNECTED) {
ESP_LOGD(TAG, "WIFI_EVENT_STA_DISCONNECTED");
- wifi_event_sta_disconnected_t *disconnected = (wifi_event_sta_disconnected_t *) event_data;
- ESP_LOGE(TAG,"Wifi disconnected. reason: %d", disconnected->reason);
+ wifi_event_sta_disconnected_t *disconnected =
+ (wifi_event_sta_disconnected_t*) event_data;
+ ESP_LOGD(TAG, "wifi_event_sta_disconnected_t reason: %d",
+ disconnected->reason);
//ESP_LOGI(TAG, "Disconnected. Connecting to the AP again.");
esp_event_post_to(_conf->event_loop, GN_BASE_EVENT,
GN_NET_DISCONNECTED_EVENT, NULL, 0,
portMAX_DELAY);
- if (_conf->config_init_params->wifi_retries_before_reset_provisioning
- == -1
- || s_retry_num
- < _conf->config_init_params->wifi_retries_before_reset_provisioning) {
- ESP_LOGI(TAG, "Retry to connect - attempt %i of %i", s_retry_num, _conf->config_init_params->wifi_retries_before_reset_provisioning);
- s_retry_num++;
- esp_wifi_connect();
- } else {
- xEventGroupSetBits(_gn_event_group_wifi, GN_WIFI_FAIL_EVENT);
+ xEventGroupSetBits(_gn_event_group_wifi, GN_WIFI_DISCONNECTED_EVENT);
+
+ //WIFI_REASON_ASSOC_LEAVE means that is a voluntary disconnect, do not retry to reconnect
+ if (disconnected->reason != WIFI_REASON_ASSOC_LEAVE) {
+
+ if (_conf->config_init_params->wifi_retries_before_reset_provisioning
+ == -1
+ || s_retry_num
+ < _conf->config_init_params->wifi_retries_before_reset_provisioning) {
+ ESP_LOGI(TAG, "Retry to connect - attempt %i of %i",
+ s_retry_num,
+ _conf->config_init_params->wifi_retries_before_reset_provisioning);
+ s_retry_num++;
+ esp_wifi_connect();
+ } else {
+ xEventGroupSetBits(_gn_event_group_wifi, GN_WIFI_FAIL_EVENT);
+ }
+ //ESP_LOGI(TAG,"connect to the AP fail");
}
- //ESP_LOGI(TAG,"connect to the AP fail");
+ } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_STOP) {
+
+ xEventGroupSetBits(_gn_event_group_wifi, GN_WIFI_STOPPED_EVENT);
+
+ } else {
+ ESP_LOGD(TAG, "other event received. event_base = %s, event_id = %d",
+ event_base, event_id);
}
#endif
}
-void _gn_wifi_init_sta(void) {
+gn_err_t _gn_wifi_init_sta(void) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -180,21 +206,28 @@ void _gn_wifi_init_sta(void) {
EventBits_t bits = xEventGroupWaitBits(_gn_event_group_wifi,
GN_WIFI_CONNECTED_EVENT | GN_WIFI_FAIL_EVENT,
- pdFALSE,
+ pdTRUE,
pdFALSE,
portMAX_DELAY);
if (bits & GN_WIFI_CONNECTED_EVENT) {
- gn_log(TAG, GN_LOG_INFO, "Connected to AP");
+ ESP_LOGI(TAG, "_gn_wifi_init_sta - connected");
} else if (bits & GN_WIFI_FAIL_EVENT) {
- gn_log(TAG, GN_LOG_ERROR, "Failed to connect to AP. Resetting Provisioning Status");
+ ESP_LOGE(TAG,
+ "_gn_wifi_init_sta - Failed to connect to AP. Resetting Provisioning Status");
wifi_prov_mgr_reset_provisioning();
gn_reboot();
+ return GN_RET_ERR;
} else {
- gn_log(TAG, GN_LOG_ERROR, "UNEXPECTED EVENT");
+ ESP_LOGE(TAG, "_gn_wifi_init_sta - UNEXPECTED EVENT");
+ return GN_RET_ERR;
}
-#endif
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
}
@@ -238,7 +271,7 @@ esp_err_t _gn_wifi_custom_prov_data_handler(uint32_t session_id,
return ESP_OK;
}
-esp_err_t _gn_init_wifi(gn_config_handle_intl_t conf) {
+esp_err_t gn_wifi_init(gn_config_handle_intl_t conf) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -336,8 +369,6 @@ esp_err_t _gn_init_wifi(gn_config_handle_intl_t conf) {
* for encryption/decryption of messages.
*/
-
-
wifi_prov_security_t security = WIFI_PROV_SECURITY_0;
if (_conf->config_init_params->provisioning_security) {
@@ -430,7 +461,7 @@ esp_err_t _gn_init_wifi(gn_config_handle_intl_t conf) {
static bool time_sync_init_done = false;
#endif
-esp_err_t _gn_init_time_sync(gn_config_handle_t conf) {
+esp_err_t gn_wifi_time_sync_init(gn_config_handle_t conf) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -454,7 +485,7 @@ esp_err_t _gn_init_time_sync(gn_config_handle_t conf) {
}
-void _gn_ota_task(void *pvParameter) {
+void gn_ota_task(void *pvParameter) {
#ifdef CONFIG_GROWNODE_WIFI_ENABLED
@@ -494,6 +525,81 @@ void _gn_ota_task(void *pvParameter) {
}
+/**
+ * @brief stops the wifi connection, this is usually done in power saving mode
+ *
+ * @param config the configuration to use
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of null _conf
+ * @return GN_RET_ERR in case of general errors
+ */
+gn_err_t gn_wifi_stop(gn_config_handle_t config) {
+
+#ifdef CONFIG_GROWNODE_WIFI_ENABLED
+
+ if (!config)
+ return GN_RET_ERR_INVALID_ARG;
+
+ //gn_config_handle_intl_t _config = (gn_config_handle_intl_t) config;
+
+ esp_err_t esp_ret;
+ esp_ret = esp_wifi_disconnect();
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_wifi_disconnect: %s",
+ esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ ESP_LOGD(TAG, "gn_wifi_stop - Start Wait for Wi-Fi disconnection");
+
+ xEventGroupWaitBits(_gn_event_group_wifi, GN_WIFI_DISCONNECTED_EVENT,
+ pdTRUE,
+ pdFALSE, portMAX_DELAY);
+
+ ESP_LOGD(TAG, "gn_wifi_stop - End Wait for Wi-Fi disconnection");
+
+ esp_ret = esp_wifi_stop();
+ if (esp_ret != ESP_OK) {
+ ESP_LOGE(TAG, "Error on esp_wifi_stop: %s", esp_err_to_name(esp_ret));
+ return GN_RET_ERR;
+ }
+
+ xEventGroupWaitBits(_gn_event_group_wifi, GN_WIFI_STOPPED_EVENT,
+ pdTRUE,
+ pdFALSE, portMAX_DELAY);
+
+ ESP_LOGD(TAG, "gn_wifi_stop - returning");
+
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
+
+}
+
+/**
+ * @brief reconnect the MQTT subsystem keeping the client configuration
+ *
+ * @param config the configuration to use
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of null _conf
+ * @return GN_RET_ERR in case of general errors
+ */
+gn_err_t gn_wifi_start(gn_config_handle_t conf) {
+
+#ifdef CONFIG_GROWNODE_WIFI_ENABLED
+
+ _gn_wifi_init_sta();
+
+ return GN_RET_OK;
+
+#else
+ return GN_RET_OK;
+#endif /* CONFIG_GROWNODE_WIFI_ENABLED */
+
+}
+
#ifdef __cplusplus
}
#endif //__cplusplus
diff --git a/components/grownode/gn_network.h b/components/grownode/gn_network.h
index 9d463925..d6d1680d 100755
--- a/components/grownode/gn_network.h
+++ b/components/grownode/gn_network.h
@@ -19,9 +19,12 @@
extern "C" {
#endif
-esp_err_t _gn_init_wifi(gn_config_handle_t conf);
-void _gn_ota_task(void *pvParameter);
-esp_err_t _gn_init_time_sync(gn_config_handle_t conf);
+esp_err_t gn_wifi_init(gn_config_handle_t conf);
+void gn_ota_task(void *pvParameter);
+esp_err_t gn_wifi_time_sync_init(gn_config_handle_t conf);
+
+gn_err_t gn_wifi_stop(gn_config_handle_t conf);
+gn_err_t gn_wifi_start(gn_config_handle_t conf);
#ifdef __cplusplus
}
diff --git a/components/grownode/grownode.c b/components/grownode/grownode.c
index 931f2f3e..0462f9d7 100755
--- a/components/grownode/grownode.c
+++ b/components/grownode/grownode.c
@@ -37,6 +37,7 @@ extern "C" {
#include "esp_err.h"
#include "esp_spiffs.h"
#include "esp_vfs.h"
+#include "esp_sleep.h"
#if CONFIG_GROWNODE_WIFI_ENABLED
@@ -84,6 +85,9 @@ esp_event_loop_handle_t gn_event_loop = NULL;
gn_config_handle_intl_t _gn_default_conf = NULL;
+//remember last sleep reason
+RTC_DATA_ATTR static gn_sleep_mode_t wakeup_reason = GN_SLEEP_MODE_NONE;
+
//SemaphoreHandle_t _gn_xEvtSemaphore;
ESP_EVENT_DEFINE_BASE(GN_BASE_EVENT);
@@ -101,20 +105,23 @@ gn_err_t _gn_leaf_start(gn_leaf_config_handle_intl_t leaf_config) {
int ret = GN_RET_OK;
ESP_LOGI(TAG, "_gn_leaf_start %s", leaf_config->name);
+ TaskHandle_t task_handle;
+
if (xTaskCreate((void*) leaf_config->leaf_descriptor->callback,
- leaf_config->name, leaf_config->task_size, leaf_config, 1, //configMAX_PRIORITIES - 1,
- NULL) != pdPASS) {
- gn_log(TAG, GN_LOG_ERROR, "failed to create lef task for %s",
- leaf_config->name);
+ leaf_config->name, leaf_config->task_size, leaf_config, GN_LEAF_TASK_PRIORITY, //configMAX_PRIORITIES - 1,
+ &task_handle) != pdPASS) {
+ ESP_LOGE(TAG, "failed to create lef task for %s", leaf_config->name);
goto fail;
}
+ leaf_config->task_handle = task_handle;
- vTaskDelay(pdMS_TO_TICKS(100));
+ while (eTaskGetState(task_handle) != eBlocked)
+ vTaskDelay(pdMS_TO_TICKS(100));
//gn_display_leaf_start(leaf_config);
//notice network of the leaf added
- ret = gn_mqtt_publish_leaf(leaf_config);
+ ret = gn_mqtt_subscribe_leaf(leaf_config);
ESP_LOGI(TAG, "_gn_start_leaf %s completed", leaf_config->name);
return ret;
@@ -183,8 +190,7 @@ esp_err_t _gn_init_spiffs(gn_config_handle_intl_t conf) {
size_t total = 0, used = 0;
ret = esp_spiffs_info(NULL, &total, &used);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
- "Failed to get SPIFFS partition information (%s)",
+ ESP_LOGE(TAG, "Failed to get SPIFFS partition information (%s)",
esp_err_to_name(ret));
} else {
ESP_LOGD(TAG, "Partition size: total: %d, used: %d", total, used);
@@ -194,31 +200,51 @@ esp_err_t _gn_init_spiffs(gn_config_handle_intl_t conf) {
}
-#define TIMER_DIVIDER (16) // Hardware timer clock divider
-#define TIMER_SCALE (TIMER_BASE_CLK / TIMER_DIVIDER) // convert counter value to seconds
+/*
+ #define TIMER_DIVIDER (16) // Hardware timer clock divider
+ #define TIMER_SCALE (TIMER_BASE_CLK / TIMER_DIVIDER) // convert counter value to seconds
+
+ static bool IRAM_ATTR _gn_timer_callback_isr(void *args) {
+ BaseType_t high_task_awoken = pdFALSE;
+ if (!gn_event_loop)
+ return high_task_awoken;
+ esp_event_isr_post_to(gn_event_loop, GN_BASE_EVENT,
+ GN_SRV_KEEPALIVE_TRIGGERED_EVENT, NULL, 0, &high_task_awoken);
+ return high_task_awoken == pdTRUE;
+ }
+ */
-static bool IRAM_ATTR _gn_timer_callback_isr(void *args) {
- BaseType_t high_task_awoken = pdFALSE;
- if (!gn_event_loop)
- return high_task_awoken;
- esp_event_isr_post_to(gn_event_loop, GN_BASE_EVENT,
- GN_SRV_KEEPALIVE_TRIGGERED_EVENT, NULL, 0, &high_task_awoken);
- return high_task_awoken == pdTRUE;
+void _gn_keepalive_callback(gn_config_handle_intl_t conf) {
+ ESP_LOGI(TAG, "_gn_keepalive_callback");
+ esp_event_post_to(gn_event_loop, GN_BASE_EVENT,
+ GN_SRV_KEEPALIVE_TRIGGERED_EVENT, NULL, 0, portMAX_DELAY);
}
-void _gn_keepalive_start() {
+void _gn_keepalive_start(gn_config_handle_intl_t conf) {
+
+ if (!conf->keepalive_timer_handler)
+ return;
+ //timer_start(TIMER_GROUP_0, TIMER_0);
+ if (!esp_timer_is_active(conf->keepalive_timer_handler))
+ esp_timer_start_periodic(conf->keepalive_timer_handler,
+ conf->config_init_params->server_keepalive_timer_sec * 1000000);
ESP_LOGD(TAG, "timer started");
- timer_start(TIMER_GROUP_0, TIMER_0);
}
-void _gn_keepalive_stop() {
+void _gn_keepalive_stop(gn_config_handle_intl_t conf) {
+
+ if (!conf->keepalive_timer_handler)
+ return;
+ //timer_pause(TIMER_GROUP_0, TIMER_0);
+ if (!esp_timer_is_active(conf->keepalive_timer_handler))
+ esp_timer_stop(conf->keepalive_timer_handler);
ESP_LOGD(TAG, "timer paused");
- timer_pause(TIMER_GROUP_0, TIMER_0);
}
-gn_leaf_config_handle_intl_t _gn_leaf_get_by_name(char *leaf_name) {
+gn_leaf_config_handle_intl_t _gn_leaf_get_by_name(gn_config_handle_intl_t conf,
+ char *leaf_name) {
- gn_leaves_list leaves = _gn_default_conf->node_config->leaves;
+ gn_leaves_list leaves = conf->node_handle->leaves;
for (int i = 0; i < leaves.last; i++) {
if (strcmp(leaves.at[i]->name, leaf_name) == 0) {
@@ -240,6 +266,12 @@ gn_leaf_config_handle_intl_t _gn_leaf_get_by_name(char *leaf_name) {
gn_err_t _gn_send_event_to_leaf(gn_leaf_config_handle_intl_t leaf_config,
gn_leaf_parameter_event_handle_t evt) {
+ if (!leaf_config || !evt)
+ return GN_RET_ERR_INVALID_ARG;
+
+ if (leaf_config->node_config->config->status != GN_NODE_STATUS_STARTED)
+ return GN_RET_ERR_NODE_NOT_STARTED;
+
ESP_LOGD(TAG_EVENT,
"_gn_send_event_to_leaf - id: %d, param %s, leaf %s, data %.*s",
evt->id, evt->param_name, evt->leaf_name, evt->data_size,
@@ -248,8 +280,8 @@ gn_err_t _gn_send_event_to_leaf(gn_leaf_config_handle_intl_t leaf_config,
//make sure data will end with terminating char
evt->data[evt->data_size] = '\0';
- if (xQueueSend(leaf_config->event_queue, evt, portMAX_DELAY) != pdTRUE) {
- gn_log(TAG, GN_LOG_ERROR, "not possible to send message to leaf %s",
+ if (xQueueSend(leaf_config->event_queue, evt, pdMS_TO_TICKS(1000)) != pdTRUE) {
+ ESP_LOGE(TAG, "not possible to send message to leaf %s",
leaf_config->name);
return GN_RET_ERR_EVENT_NOT_SENT;
}
@@ -257,9 +289,14 @@ gn_err_t _gn_send_event_to_leaf(gn_leaf_config_handle_intl_t leaf_config,
return GN_RET_OK;
}
-void _gn_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
+void _gn_evt_handler(void *handler_data, esp_event_base_t base, int32_t id,
void *event_data) {
+ if (!handler_data)
+ return;
+
+ gn_config_handle_intl_t conf = (gn_config_handle_intl_t) handler_data;
+
//if (pdTRUE == xSemaphoreTake(_gn_xEvtSemaphore, portMAX_DELAY)) {
ESP_LOGD(TAG_EVENT, "_gn_evt_handler event: %d", id);
@@ -285,23 +322,24 @@ void _gn_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
break;
case GN_SRV_CONNECTED_EVENT:
- //start keepalive service
- if (!_gn_default_conf)
+
+ if (!conf)
break;
//from unknown status: reboot - to keep consistency
- if (_gn_default_conf->status != GN_NODE_STATUS_READY_TO_START
- && _gn_default_conf->status != GN_NODE_STATUS_STARTED) {
+ if (conf->status != GN_NODE_STATUS_READY_TO_START
+ && conf->status != GN_NODE_STATUS_STARTED) {
gn_reboot();
break;
}
- _gn_keepalive_start();
+ //start keepalive service
+ _gn_keepalive_start(conf);
break;
case GN_SRV_DISCONNECTED_EVENT:
//stop keepalive service
- _gn_keepalive_stop();
+ _gn_keepalive_stop(conf);
break;
/*
@@ -326,8 +364,7 @@ void _gn_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
case GN_SRV_KEEPALIVE_TRIGGERED_EVENT:
//publish node
- if (gn_mqtt_send_node_config(_gn_default_conf->node_config)
- != GN_RET_OK) {
+ if (gn_mqtt_send_node_config(conf->node_handle) != GN_RET_OK) {
ESP_LOGE(TAG, "Error in sending node config message");
}
break;
@@ -337,7 +374,7 @@ void _gn_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
gn_leaf_parameter_event_handle_t evt =
(gn_leaf_parameter_event_handle_t) event_data;
- gn_leaf_config_handle_intl_t leaf_config = _gn_leaf_get_by_name(
+ gn_leaf_config_handle_intl_t leaf_config = _gn_leaf_get_by_name(conf,
evt->leaf_name);
if (leaf_config != NULL) {
@@ -373,21 +410,29 @@ esp_err_t _gn_init_keepalive_timer(gn_config_handle_intl_t conf) {
ESP_LOGD(TAG, "_gn_init_keepalive_timer");
- if (conf->config_init_params->server_keepalive_timer_sec)
+ if (conf->config_init_params->server_keepalive_timer_sec == 0)
return ESP_OK;
- timer_config_t config = { .divider = TIMER_DIVIDER, .counter_dir =
- TIMER_COUNT_UP, .counter_en = TIMER_PAUSE, .alarm_en =
- TIMER_ALARM_EN, .auto_reload = 1, }; // default clock source is APB
- timer_init(TIMER_GROUP_0, TIMER_0, &config);
- timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0);
- timer_set_alarm_value(TIMER_GROUP_0, TIMER_0,
- conf->config_init_params->server_keepalive_timer_sec * TIMER_SCALE);
- timer_enable_intr(TIMER_GROUP_0, TIMER_0);
- return timer_isr_callback_add(TIMER_GROUP_0, TIMER_0,
- _gn_timer_callback_isr,
- NULL, 0);
+ /*
+ timer_config_t config = { .divider = TIMER_DIVIDER, .counter_dir =
+ TIMER_COUNT_UP, .counter_en = TIMER_PAUSE, .alarm_en =
+ TIMER_ALARM_EN, .auto_reload = 1, }; // default clock source is APB
+ timer_init(TIMER_GROUP_0, TIMER_0, &config);
+ timer_set_counter_value(TIMER_GROUP_0, TIMER_0, 0);
+ timer_set_alarm_value(TIMER_GROUP_0, TIMER_0,
+ conf->config_init_params->server_keepalive_timer_sec * TIMER_SCALE);
+ timer_enable_intr(TIMER_GROUP_0, TIMER_0);
+ return timer_isr_callback_add(TIMER_GROUP_0, TIMER_0,
+ _gn_timer_callback_isr,
+ NULL, 0);
+ */
+ //creates the blink timer
+ const esp_timer_create_args_t keepalive_timer_args = { .callback =
+ &_gn_keepalive_callback, .arg = conf, .name = "keepalive_timer" };
+
+ return esp_timer_create(&keepalive_timer_args,
+ &conf->keepalive_timer_handler);
}
/**
@@ -632,14 +677,13 @@ gn_node_handle_t gn_node_create(gn_config_handle_t config, const char *name) {
if (config == NULL
|| ((gn_config_handle_intl_t) config)->mqtt_client == NULL
|| name == NULL) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_create_node failed. parameters not correct");
+ ESP_LOGE(TAG, "gn_create_node failed. parameters not correct");
return NULL;
}
gn_node_handle_intl_t n_c = _gn_node_config_create();
- strncpy(n_c->name, name, GN_NODE_NAME_SIZE);
+ strncpy(n_c->name, name, GN_NODE_NAME_SIZE-1);
//n_c->event_loop = config->event_loop;
n_c->config = config;
@@ -647,7 +691,7 @@ gn_node_handle_t gn_node_create(gn_config_handle_t config, const char *name) {
gn_leaves_list leaves = { .size = GN_NODE_LEAVES_MAX_SIZE, .last = 0 };
n_c->leaves = leaves;
- ((gn_config_handle_intl_t) config)->node_config = n_c;
+ ((gn_config_handle_intl_t) config)->node_handle = n_c;
return n_c;
}
@@ -700,6 +744,16 @@ gn_err_t gn_node_start(gn_node_handle_t node) {
ESP_LOGD(TAG, "gn_start_node: %s, leaves: %d", _node->name,
_node->leaves.last);
+ _node->config->status = GN_NODE_STATUS_STARTED;
+
+ if (ESP_OK
+ != esp_event_post_to(_node->config->event_loop, GN_BASE_EVENT,
+ GN_NODE_STARTED_EVENT,
+ NULL, 0, portMAX_DELAY)) {
+ ESP_LOGE(TAG, "failed to send GN_SERVER_CONNECTED_EVENT event");
+ return GN_RET_ERR_EVENT_LOOP_ERROR;
+ }
+
//publish node
//if (gn_mqtt_send_node_config(node) != ESP_OK)
//return ESP_FAIL;
@@ -707,24 +761,244 @@ gn_err_t gn_node_start(gn_node_handle_t node) {
//run leaves
for (int i = 0; i < _node->leaves.last; i++) {
//ESP_LOGD(TAG, "starting leaf: %d", i);
- if (_gn_leaf_start(_node->leaves.at[i]) != GN_RET_OK)
+ if (_gn_leaf_start(_node->leaves.at[i]) != GN_RET_OK) {
+ ESP_LOGE(TAG, "failed to start leaf: %s",
+ _node->leaves.at[i]->name);
+ _node->config->status = GN_NODE_STATUS_ERROR;
return GN_RET_ERR_NODE_NOT_STARTED;
+ }
}
- _node->config->status = GN_NODE_STATUS_STARTED;
+ //if first boot, send parameter status
+ if (wakeup_reason == GN_SLEEP_MODE_NONE)
+ ret = gn_send_node_leaf_param_status(node);
+
+ return ret;
+
+}
+
+/**
+ * @brief execute the main grownode loop
+ *
+ * depending on the configuration it can just wait for the leaf to execute or set the board in low power mode
+ *
+ * @param node the node to be started
+ *
+ * @return GN_RET_ERR in case of errors. this function should never return in normal circumstances.
+ */
+gn_err_t gn_node_loop(gn_node_handle_t node) {
+
+ if (!node)
+ return GN_RET_ERR_INVALID_ARG;
+
+ gn_node_handle_intl_t _node = (gn_node_handle_intl_t) node;
+
+ if (_node->config->config_init_params->sleep_mode == GN_SLEEP_MODE_NONE) {
+
+ while (true) {
+ ESP_LOGI(TAG,
+ "looping. grownode startup status: %s, sleep mode = %d",
+ gn_get_status_description(
+ ((gn_node_handle_intl_t )node)->config),
+ _node->config->config_init_params->sleep_mode);
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
+ }
+
+ } else if (_node->config->config_init_params->sleep_mode
+ == GN_SLEEP_MODE_DEEP) {
+
+ ESP_LOGI(TAG,
+ "working. grownode startup status: %s, sleep mode = deep, sleep in %"PRIu64" millisec",
+ gn_get_status_description(
+ ((gn_node_handle_intl_t )node)->config),
+ _node->config->config_init_params->wakeup_time_millisec);
+ vTaskDelay(
+ _node->config->config_init_params->wakeup_time_millisec
+ / portTICK_PERIOD_MS);
+ gn_node_sleep(node, GN_SLEEP_MODE_DEEP,
+ _node->config->config_init_params->sleep_delay_millisec,
+ _node->config->config_init_params->sleep_time_millisec);
+ //not needed to cycle as the board will restart
+
+ } else if (_node->config->config_init_params->sleep_mode
+ == GN_SLEEP_MODE_LIGHT) {
+
+ while (true) {
+ ESP_LOGI(TAG,
+ "working. grownode startup status: %s, sleep mode = light, sleep in %"PRIu64" millisec",
+ gn_get_status_description(
+ ((gn_node_handle_intl_t )node)->config),
+ _node->config->config_init_params->wakeup_time_millisec);
+ vTaskDelay(
+ _node->config->config_init_params->wakeup_time_millisec
+ / portTICK_PERIOD_MS);
+ gn_node_sleep(node, GN_SLEEP_MODE_LIGHT,
+ _node->config->config_init_params->sleep_delay_millisec,
+ _node->config->config_init_params->sleep_time_millisec);
+ ESP_LOGD(TAG, "waking up from light sleep");
+ }
+
+ } else {
+ ESP_LOGW(TAG, "sleep mode unrecognized: %d",
+ (int )_node->config->config_init_params->sleep_mode);
+
+ while (true) {
+ ESP_LOGI(TAG,
+ "looping. grownode startup status: %s, sleep mode = %d",
+ gn_get_status_description(
+ ((gn_node_handle_intl_t )node)->config),
+ _node->config->config_init_params->sleep_mode);
+ vTaskDelay(1000 / portTICK_PERIOD_MS);
+ }
- if (ESP_OK
- != esp_event_post_to(_node->config->event_loop, GN_BASE_EVENT,
- GN_NODE_STARTED_EVENT,
- NULL, 0, portMAX_DELAY)) {
- gn_log(TAG, GN_LOG_ERROR,
- "failed to send GN_SERVER_CONNECTED_EVENT event");
- return GN_RET_ERR_EVENT_LOOP_ERROR;
}
- ret = gn_send_node_leaf_param_status(node);
+ return GN_RET_OK;
- return ret;
+}
+
+/**
+ * TODO warning: this is not working, seems that eTaskGetState blocks the main task sometimes
+ */
+void _gn_wait_for_blocked_leaves(gn_node_handle_intl_t _node) {
+
+ /*
+ if (!_node) return;
+
+ //waits until all leaves has reached blocked status
+ int leaves_count = _node->leaves.last;
+ ESP_LOGI(TAG, "leaves_count %d", leaves_count);
+
+ bool leaves_working = false;
+ bool this_leaf_working = false;
+
+ while (!leaves_working) {
+
+ for (int i = 0; i < leaves_count; i++) {
+ if (_node->leaves.at[i] && _node->leaves.at[i]->task_handle) {
+ this_leaf_working = eTaskGetState(
+ _node->leaves.at[i]->task_handle) == eRunning;
+ leaves_working = this_leaf_working || leaves_working;
+ if (this_leaf_working) {
+ ESP_LOGI(TAG, "leaves working: %s",
+ _node->leaves.at[i]->name);
+ }
+ }
+ }
+
+ if (leaves_working)
+ vTaskDelay(pdMS_TO_TICKS(5));
+ }
+ */
+
+}
+
+/**
+ * @brief enter in sleep mode, disabling networking and releasing resources.
+ *
+ * @param node the node to sleep
+ * @param delay_msec the delay to wait before sleeping
+ * @param sleep_mode the type of sleep
+ * @param millisec for how long
+ *
+ * @return GN_RET_ERR_INVALID_ARG in case of node null
+ * @return GN_RET_OK if sleep cycle is completed successfully (only in light sleep, otherwise board restarts)
+ */
+gn_err_t gn_node_sleep(gn_node_handle_t node, gn_sleep_mode_t sleep_mode,
+ uint64_t delay_msec, uint64_t millisec) {
+
+ if (!node)
+ return GN_RET_ERR_INVALID_ARG;
+
+ gn_node_handle_intl_t _node = (gn_node_handle_intl_t) node;
+
+ if (sleep_mode == GN_SLEEP_MODE_DEEP) {
+
+ if (ESP_OK
+ != esp_event_post_to(_node->config->event_loop, GN_BASE_EVENT,
+ GN_NODE_DEEP_SLEEP_START_EVENT,
+ NULL, 0, portMAX_DELAY)) {
+ ESP_LOGE(TAG,
+ "failed to send GN_NODE_DEEP_SLEEP_START_EVENT event");
+ return GN_RET_ERR_EVENT_LOOP_ERROR;
+ }
+
+ //gives some time to handle the event
+ if (delay_msec > 0) {
+
+ ESP_LOGI(TAG, "Preparing deep sleep in %"PRIu64" millisec",
+ delay_msec);
+
+ vTaskDelay(delay_msec / portTICK_PERIOD_MS);
+ }
+
+ _node->config->status = GN_NODE_STATUS_SLEEPING;
+ //stop mqtt
+ gn_mqtt_stop(_node->config);
+
+ //stop wifi
+ gn_wifi_stop(_node->config);
+
+ ESP_LOGI(TAG, "Entering deep sleep for %"PRIu64" millisec", millisec);
+
+ wakeup_reason = GN_SLEEP_MODE_DEEP;
+
+ //_gn_wait_for_blocked_leaves(_node);
+ esp_deep_sleep(millisec * 1000LL);
+
+ //start wifi
+ gn_wifi_start(_node->config);
+
+ //start mqtt
+ gn_mqtt_start(_node->config);
+ _node->config->status = GN_NODE_STATUS_STARTED;
+ }
+
+ else if (sleep_mode == GN_SLEEP_MODE_LIGHT) {
+
+ if (ESP_OK
+ != esp_event_post_to(_node->config->event_loop, GN_BASE_EVENT,
+ GN_NODE_LIGHT_SLEEP_START_EVENT,
+ NULL, 0, portMAX_DELAY)) {
+ ESP_LOGE(TAG,
+ "failed to send GN_NODE_LIGHT_SLEEP_START_EVENT event");
+ return GN_RET_ERR_EVENT_LOOP_ERROR;
+ }
+
+ //gives some time to handle the event
+ if (delay_msec > 0) {
+
+ ESP_LOGI(TAG, "Preparing deep sleep in %"PRIu64" millisec",
+ delay_msec);
+
+ vTaskDelay(delay_msec / portTICK_PERIOD_MS);
+ }
+
+ _node->config->status = GN_NODE_STATUS_SLEEPING;
+ //stop mqtt
+ gn_mqtt_stop(_node->config);
+
+ //stop wifi
+ gn_wifi_stop(_node->config);
+
+ ESP_LOGI(TAG, "Entering light sleep for %"PRIu64" millisec", millisec);
+
+ wakeup_reason = GN_SLEEP_MODE_LIGHT;
+
+ _gn_wait_for_blocked_leaves(_node);
+ esp_sleep_enable_timer_wakeup(millisec * 1000LL);
+ esp_light_sleep_start();
+
+ //start wifi
+ gn_wifi_start(_node->config);
+
+ //start mqtt
+ gn_mqtt_start(_node->config);
+ _node->config->status = GN_NODE_STATUS_STARTED;
+
+ }
+
+ return GN_RET_OK;
}
@@ -745,7 +1019,7 @@ gn_leaf_config_handle_intl_t _gn_leaf_config_create() {
* @brief gets the name of the node referenced by the handle
*
* @param node_config the handle to be queried
- * @param name the pointer where the name will be set. set lenght to GN_LEAF_NAME_SIZE
+ * @param name the pointer where the name will be set. set length to GN_NODE_NAME_SIZE
*
* @return GN_RET_ERR_INVALID_ARG if the handle is not valid
* @return GN_RET_OK if everything OK
@@ -755,8 +1029,7 @@ gn_err_t gn_node_get_name(gn_node_handle_t node_config, char *name) {
if (!node_config)
return GN_RET_ERR_INVALID_ARG;
- strncpy(name, ((gn_node_handle_intl_t) node_config)->name,
- strlen(((gn_node_handle_intl_t) node_config)->name) + 1);
+ strcpy(name, ((gn_node_handle_intl_t) node_config)->name);
return GN_RET_OK;
@@ -771,35 +1044,37 @@ gn_err_t gn_node_get_name(gn_node_handle_t node_config, char *name) {
* @param name the name of the leaf to be created
* @param callback the callback to be called to configure the leaf
* @param task callback function of the leaf task
- * @param task_size the size of the task to be memory allocated
+ * @param task_size the size of the task to be memory allocated (see freertos documentation)
+ * @param priority the task priority (see freertos documentation)
*
* @return an handle to the leaf config
* @return NULL if the handle cannot be created
*
*/
gn_leaf_handle_t gn_leaf_create(gn_node_handle_t node_config, const char *name,
- gn_leaf_config_callback callback, size_t task_size) { //, gn_leaf_display_task_t display_task) {
+ gn_leaf_config_callback callback, size_t task_size, UBaseType_t priority) { //, gn_leaf_display_task_t display_task) {
gn_node_handle_intl_t node_cfg = (gn_node_handle_intl_t) node_config;
if (node_cfg == NULL || node_cfg->config == NULL || name == NULL
|| node_cfg->config->mqtt_client == NULL) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_create failed. parameters not correct");
+ ESP_LOGE(TAG, "gn_leaf_create failed. parameters not correct");
return NULL;
}
gn_leaf_config_handle_intl_t l_c = _gn_leaf_config_create();
gn_node_handle_intl_t n_c = node_cfg;
- strncpy(l_c->name, name, GN_LEAF_NAME_SIZE);
+ strncpy(l_c->name, name, GN_LEAF_NAME_SIZE-1);
l_c->node_config = node_cfg;
//l_c->task_cb = task;
l_c->task_size = task_size;
+ l_c->priority = priority;
l_c->leaf_context = gn_leaf_context_create();
l_c->display_container = NULL;
//l_c->display_task = display_task;
- l_c->event_queue = xQueueCreate(1, sizeof(gn_leaf_parameter_event_t));
+ l_c->event_queue = xQueueCreate(GN_NODE_LEAF_QUEUE_SIZE,
+ sizeof(gn_leaf_parameter_event_t));
if (l_c->event_queue == NULL) {
return NULL;
}
@@ -810,7 +1085,7 @@ gn_leaf_handle_t gn_leaf_create(gn_node_handle_t node_config, const char *name,
//TODO add leaf to node. implement dynamic array
if (n_c->leaves.last >= n_c->leaves.size - 1) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_create failed. not possible to add more than %d leaves to a node",
n_c->leaves.size);
return NULL;
@@ -847,7 +1122,7 @@ gn_err_t _gn_leaf_destroy(gn_leaf_handle_t leaf_config) {
* @brief gets the name of the leaf referenced by the handle
*
* @param leaf_config the handle to be queried
- * @param name the pointer where the name will be set. set lenght to GN_LEAF_NAME_SIZE
+ * @param name the pointer where the name will be set. set length to GN_LEAF_NAME_SIZE
*
* @return GN_RET_ERR_INVALID_ARG if the handle is not valid
* @return GN_RET_OK if everything OK
@@ -857,8 +1132,7 @@ gn_err_t gn_leaf_get_name(gn_leaf_handle_t leaf_config, char *name) {
if (!leaf_config)
return GN_RET_ERR_INVALID_ARG;
- strncpy(name, ((gn_leaf_config_handle_intl_t) leaf_config)->name,
- strlen(((gn_leaf_config_handle_intl_t) leaf_config)->name) + 1);
+ strcpy(name, ((gn_leaf_config_handle_intl_t) leaf_config)->name);
return GN_RET_OK;
@@ -953,7 +1227,7 @@ void _gn_leaf_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
if (_gn_send_event_to_leaf(leaf_config, evt) == GN_RET_OK) {
//ESP_LOGD(TAG, "_gn_leaf_evt_handler OK");
} else {
- gn_log(TAG, GN_LOG_ERROR, "_gn_leaf_evt_handler ERROR");
+ ESP_LOGE(TAG, "_gn_leaf_evt_handler ERROR");
}
} else {
@@ -974,7 +1248,7 @@ void _gn_leaf_evt_handler(void *handler_args, esp_event_base_t base, int32_t id,
if (_gn_send_event_to_leaf(leaf_config, &evt) == GN_RET_OK) {
//ESP_LOGD(TAG, "_gn_leaf_evt_handler OK");
} else {
- gn_log(TAG, GN_LOG_ERROR, "_gn_leaf_evt_handler ERROR");
+ ESP_LOGE(TAG, "_gn_leaf_evt_handler ERROR");
}
}
@@ -1055,7 +1329,7 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
gn_validator_callback_t validator) {
if (!name) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_create incorrect parameters");
+ ESP_LOGE(TAG, "gn_leaf_param_create incorrect parameters");
return NULL;
}
@@ -1066,9 +1340,9 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
//ESP_LOGD(TAG, "building storage tag..");
if (storage == GN_LEAF_PARAM_STORAGE_PERSISTED) {
- //check parameter stored
+//check parameter stored
int _len = (strlen(_leaf_config->name) + strlen(name) + 2);
- //ESP_LOGD(TAG, "..len: %i", _len);
+//ESP_LOGD(TAG, "..len: %i", _len);
char *_buf = (char*) calloc(_len, sizeof(char));
memcpy(_buf, _leaf_config->name,
@@ -1080,10 +1354,10 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
_buf[_len - 1] = '\0';
- //ESP_LOGD(TAG, ".. storage tag: %s", _buf);
+//ESP_LOGD(TAG, ".. storage tag: %s", _buf);
char *value = 0;
- //check if existing
+//check if existing
ESP_LOGD(TAG, "check stored value for key %s", _buf);
if (gn_storage_get(_buf, (void**) &value) == ESP_OK) {
@@ -1107,7 +1381,7 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
free(value);
break;
default:
- gn_log(TAG, GN_LOG_ERROR, "param type not handled");
+ ESP_LOGE(TAG, "param type not handled");
free(value);
free(_buf);
return NULL;
@@ -1135,8 +1409,7 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
switch (type) {
case GN_VAL_TYPE_STRING:
if (!val.s) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_create incorrect string parameter");
+ ESP_LOGE(TAG, "gn_leaf_param_create incorrect string parameter");
return NULL;
}
_val.s = strdup(val.s);
@@ -1148,7 +1421,7 @@ gn_leaf_param_handle_t gn_leaf_param_create(gn_leaf_handle_t leaf_config,
_val.d = val.d;
break;
default:
- gn_log(TAG, GN_LOG_ERROR, "param type not handled");
+ ESP_LOGE(TAG, "param type not handled");
return NULL;
break;
}
@@ -1222,15 +1495,15 @@ gn_err_t gn_leaf_param_init_string(const gn_leaf_handle_t leaf_config,
validate);
if (val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
&& val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
- strncpy(_val->v.s, *validate, strlen(*validate));
+ strcpy(_val->v.s, *validate);
ESP_LOGD(TAG, "processing validator - result: %d", (int ) val_ret);
} else {
- strncpy(_val->v.s, val, strlen(val));
+ strcpy(_val->v.s, val);
}
}
//store the parameter
- if (gn_storage_set(_buf, (void**) &val, strlen(val)) != ESP_OK) {
+ if (gn_storage_set(_buf, (void*) val, strlen(val)+1) != ESP_OK) {
ESP_LOGW(TAG,
"not possible to store leaf parameter value - key %s value %s",
_buf, val);
@@ -1244,15 +1517,15 @@ gn_err_t gn_leaf_param_init_string(const gn_leaf_handle_t leaf_config,
strcpy(evt.param_name, _param->name);
evt.id = GN_LEAF_PARAM_INITIALIZED_EVENT;
//evt.data = calloc((strlen(_param->param_val->v.s) + 1) * sizeof(char));
- strncpy(evt.data, _param->param_val->v.s, GN_LEAF_DATA_SIZE);
+ strncpy(evt.data, _param->param_val->v.s, GN_LEAF_DATA_SIZE-1);
esp_err_t ret = esp_event_post_to(
_leaf_config->node_config->config->event_loop, GN_BASE_EVENT,
evt.id, &evt, sizeof(evt), portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_init_string - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1273,20 +1546,25 @@ gn_err_t gn_leaf_param_init_string(const gn_leaf_handle_t leaf_config,
* @param val the value to set (null terminated)
*
* @return GN_RET_OK if the parameter is set
- * @return GN_RET_ERR_INVALID_ARG in case of input errors
+ * @return GN_RET_ERR_INVALID_ARG in case of input errors or validation error
* @return GN_RET_ERR in case of messaging error
*/
gn_err_t gn_leaf_param_write_string(const gn_leaf_handle_t leaf_config,
const char *name, char *val) {
- if (!leaf_config || !name || !val)
+ if (!leaf_config || !name) {
+ ESP_LOGD(TAG, "gn_leaf_param_write_string: GN_RET_ERR_INVALID_ARG");
return GN_RET_ERR_INVALID_ARG;
+ }
gn_leaf_param_handle_intl_t _param =
(gn_leaf_param_handle_intl_t) gn_leaf_param_get_param_handle(
leaf_config, name);
- if (!_param)
+
+ if (!_param) {
+ ESP_LOGD(TAG, "gn_leaf_param_write_string: param not found");
return GN_RET_ERR_INVALID_ARG;
+ }
//ESP_LOGD(TAG, "gn_leaf_param_set_string - param:%s value:%s", name, val);
//ESP_LOGD(TAG, " old value %s", _param->param_val->v.s);
@@ -1294,6 +1572,31 @@ gn_err_t gn_leaf_param_write_string(const gn_leaf_handle_t leaf_config,
gn_leaf_config_handle_intl_t _leaf_config =
(gn_leaf_config_handle_intl_t) leaf_config;
+ if (_param->validator) {
+ char **validate = &val;
+ gn_leaf_param_validator_result_t ret = _param->validator(_param,
+ (void**) validate);
+ if (ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
+ && ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
+ _param->param_val->v.s = (char*) realloc(_param->param_val->v.s,
+ sizeof(char) * (strlen(*validate) + 1));
+ memset(_param->param_val->v.s, 0,
+ sizeof(char) * (strlen(*validate) + 1));
+ strcpy(_param->param_val->v.s, *validate);
+ } else {
+ ESP_LOGD(TAG,
+ "gn_leaf_param_write_string: validation error. code %d",
+ (int )ret);
+ return GN_RET_ERR_INVALID_ARG;
+ }
+//ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
+ } else {
+ _param->param_val->v.s = (char*) realloc(_param->param_val->v.s,
+ sizeof(char) * (strlen(val) + 1));
+ memset(_param->param_val->v.s, 0, sizeof(char) * (strlen(val) + 1));
+ strncpy(_param->param_val->v.s, val, GN_LEAF_PARAM_VAL_SIZE -1);
+ }
+
if (_param->storage == GN_LEAF_PARAM_STORAGE_PERSISTED) {
int _len = (strlen(_leaf_config->name) + strlen(name) + 2);
@@ -1308,7 +1611,7 @@ gn_err_t gn_leaf_param_write_string(const gn_leaf_handle_t leaf_config,
_buf[_len] = '\0';
- if (gn_storage_set(_buf, (void**) &val, strlen(val)) != ESP_OK) {
+ if (gn_storage_set(_buf, (void*) val, strlen(val)) != ESP_OK) {
ESP_LOGW(TAG,
"not possible to store leaf parameter value - key %s value %s",
_buf, val);
@@ -1320,27 +1623,8 @@ gn_err_t gn_leaf_param_write_string(const gn_leaf_handle_t leaf_config,
}
- if (_param->validator) {
- char **validate = &val;
- gn_leaf_param_validator_result_t ret = _param->validator(_param,
- (void**) validate);
- if (ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
- && ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
- _param->param_val->v.s = (char*) realloc(_param->param_val->v.s,
- sizeof(char) * (strlen(*validate) + 1));
- memset(_param->param_val->v.s, 0,
- sizeof(char) * (strlen(*validate) + 1));
- strncpy(_param->param_val->v.s, *validate, strlen(*validate));
- }
- //ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
- } else {
- _param->param_val->v.s = (char*) realloc(_param->param_val->v.s,
- sizeof(char) * (strlen(val) + 1));
- memset(_param->param_val->v.s, 0, sizeof(char) * (strlen(val) + 1));
- strncpy(_param->param_val->v.s, val, strlen(val));
- }
-
- //ESP_LOGD(TAG, "gn_leaf_param_set - result %s", _param->param_val->v.s);
+ ESP_LOGD(TAG, "gn_leaf_param_write_string - result: %s",
+ _param->param_val->v.s);
//notify event loop
gn_leaf_parameter_event_t evt;
@@ -1348,15 +1632,15 @@ gn_err_t gn_leaf_param_write_string(const gn_leaf_handle_t leaf_config,
strcpy(evt.param_name, _param->name);
evt.id = GN_LEAF_PARAM_CHANGED_EVENT;
//evt.data = calloc((strlen(_param->param_val->v.s) + 1) * sizeof(char));
- strncpy(evt.data, _param->param_val->v.s, GN_LEAF_DATA_SIZE);
+ strncpy(evt.data, _param->param_val->v.s, GN_LEAF_DATA_SIZE-1);
esp_err_t ret = esp_event_post_to(
_leaf_config->node_config->config->event_loop, GN_BASE_EVENT,
evt.id, &evt, sizeof(evt), portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_set_string - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ ESP_LOGD(TAG,
+ "gn_leaf_param_write_string - not possible to send param message to event loop - id:%d, size:%d - result: %d",
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1490,9 +1774,9 @@ gn_err_t gn_leaf_param_init_bool(const gn_leaf_handle_t leaf_config,
_leaf_config->node_config->config->event_loop, GN_BASE_EVENT,
evt.id, &evt, sizeof(evt), portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_init_bool - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1513,19 +1797,24 @@ gn_err_t gn_leaf_param_init_bool(const gn_leaf_handle_t leaf_config,
* @param val the value to set (null terminated)
*
* @return GN_RET_OK if the parameter is set
- * @return GN_RET_ERR_INVALID_ARG in case of input errors
+ * @return GN_RET_ERR_INVALID_ARG in case of input errors or validation error
*/
gn_err_t gn_leaf_param_write_bool(const gn_leaf_handle_t leaf_config,
const char *name, bool val) {
- if (!leaf_config || !name)
+ if (!leaf_config || !name) {
+ ESP_LOGD(TAG, "gn_leaf_param_write_bool: GN_RET_ERR_INVALID_ARG");
return GN_RET_ERR_INVALID_ARG;
+ }
gn_leaf_param_handle_intl_t _param =
(gn_leaf_param_handle_intl_t) gn_leaf_param_get_param_handle(
leaf_config, name);
- if (!_param)
+
+ if (!_param) {
+ ESP_LOGD(TAG, "gn_leaf_param_write_bool: param not found");
return GN_RET_ERR_INVALID_ARG;
+ }
//ESP_LOGD(TAG, "gn_leaf_param_set_bool %s %d", name, val);
//ESP_LOGD(TAG, " old value %d", _param->param_val->v.b);
@@ -1533,6 +1822,27 @@ gn_err_t gn_leaf_param_write_bool(const gn_leaf_handle_t leaf_config,
gn_leaf_config_handle_intl_t _leaf_config =
(gn_leaf_config_handle_intl_t) leaf_config;
+ if (_param->validator) {
+ bool *p = &val;
+ bool **validate = &p;
+ gn_leaf_param_validator_result_t val_ret = _param->validator(_param,
+ (void**) validate);
+ if (val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
+ && val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
+ _param->param_val->v.b = **validate;
+ //ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
+ } else {
+ ESP_LOGD(TAG, "gn_leaf_param_write_bool: validation error. code %d",
+ val_ret);
+ return GN_RET_ERR_INVALID_ARG;
+ }
+ } else {
+ _param->param_val->v.b = val;
+ }
+
+ ESP_LOGD(TAG, "gn_leaf_param_write_bool: after validator: %d",
+ _param->param_val->v.b);
+
if (_param->storage == GN_LEAF_PARAM_STORAGE_PERSISTED) {
int _len = (strlen(_leaf_config->name) + strlen(name) + 2);
@@ -1547,7 +1857,7 @@ gn_err_t gn_leaf_param_write_bool(const gn_leaf_handle_t leaf_config,
_buf[_len - 1] = '\0';
- //check if existing
+//check if existing
if (gn_storage_set(_buf, (void**) &val, sizeof(bool)) != ESP_OK) {
ESP_LOGW(TAG,
"not possible to store leaf parameter value - key %s value %i",
@@ -1560,20 +1870,8 @@ gn_err_t gn_leaf_param_write_bool(const gn_leaf_handle_t leaf_config,
}
- if (_param->validator) {
- bool *p = &val;
- bool **validate = &p;
- gn_leaf_param_validator_result_t val_ret = _param->validator(_param,
- (void**) validate);
- if (val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
- && val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
- _param->param_val->v.b = **validate;
- //ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
- } else {
- _param->param_val->v.b = val;
- }
- }
- //ESP_LOGD(TAG, "gn_leaf_param_set - result %d", _param->param_val->v.b);
+ ESP_LOGD(TAG, "gn_leaf_param_write_bool - result %d",
+ _param->param_val->v.b);
//notify event loop
gn_leaf_parameter_event_t evt;
@@ -1592,9 +1890,9 @@ gn_err_t gn_leaf_param_write_bool(const gn_leaf_handle_t leaf_config,
evt.id, &evt, sizeof(evt),
portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_set_bool - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ ESP_LOGD(TAG,
+ "gn_leaf_param_write_bool - not possible to send param message to event loop - id:%d, size:%d - result: %d",
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1692,8 +1990,7 @@ gn_err_t gn_leaf_param_init_double(const gn_leaf_handle_t leaf_config,
const char *name, double val) {
if (!leaf_config || !name) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_init_double - wrong parameters");
+ ESP_LOGE(TAG, "gn_leaf_param_init_double - wrong parameters");
return ESP_ERR_INVALID_ARG;
}
@@ -1701,8 +1998,8 @@ gn_err_t gn_leaf_param_init_double(const gn_leaf_handle_t leaf_config,
(gn_leaf_param_handle_intl_t) gn_leaf_param_get_param_handle(
leaf_config, name);
if (!_param) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_init_double - cannot find parameter %s", name);
+ ESP_LOGE(TAG, "gn_leaf_param_init_double - cannot find parameter %s",
+ name);
return ESP_ERR_INVALID_ARG;
}
@@ -1768,9 +2065,9 @@ gn_err_t gn_leaf_param_init_double(const gn_leaf_handle_t leaf_config,
evt.id, &evt, sizeof(evt),
portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_init_double - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1792,19 +2089,23 @@ gn_err_t gn_leaf_param_init_double(const gn_leaf_handle_t leaf_config,
* @param val the value to set
*
* @return GN_RET_OK if the parameter is set
- * @return GN_RET_ERR_INVALID_ARG in case of input errors
+ * @return GN_RET_ERR_INVALID_ARG in case of input errors or validation errors
*/
gn_err_t gn_leaf_param_write_double(const gn_leaf_handle_t leaf_config,
const char *name, double val) {
- if (!leaf_config || !name)
- return ESP_ERR_INVALID_ARG;
+ if (!leaf_config || !name) {
+ ESP_LOGD(TAG, "gn_leaf_param_write_double: GN_RET_ERR_INVALID_ARG");
+ return GN_RET_ERR_INVALID_ARG;
+ }
gn_leaf_param_handle_intl_t _param =
(gn_leaf_param_handle_intl_t) gn_leaf_param_get_param_handle(
leaf_config, name);
+
if (!_param) {
- return ESP_ERR_INVALID_ARG;
+ ESP_LOGD(TAG, "gn_leaf_param_write_double: param not found");
+ return GN_RET_ERR_INVALID_ARG;
}
//ESP_LOGD(TAG, "gn_leaf_param_set_double %s %g", name, val);
@@ -1813,6 +2114,25 @@ gn_err_t gn_leaf_param_write_double(const gn_leaf_handle_t leaf_config,
gn_leaf_config_handle_intl_t _leaf_config =
(gn_leaf_config_handle_intl_t) leaf_config;
+ if (_param->validator) {
+ double *p = &val;
+ double **validate = &p;
+ gn_leaf_param_validator_result_t val_ret = _param->validator(_param,
+ (void**) validate);
+ if (val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
+ && val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED) {
+ _param->param_val->v.d = **validate;
+ } else {
+ ESP_LOGD(TAG,
+ "gn_leaf_param_write_double: validation error. code %d",
+ val_ret);
+ return GN_RET_ERR_INVALID_ARG;
+ }
+//ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
+ } else {
+ _param->param_val->v.d = val;
+ }
+
if (_param->storage == GN_LEAF_PARAM_STORAGE_PERSISTED) {
int _len = (strlen(_leaf_config->name) + strlen(name) + 2);
@@ -1827,7 +2147,7 @@ gn_err_t gn_leaf_param_write_double(const gn_leaf_handle_t leaf_config,
_buf[_len - 1] = '\0';
- //check if existing
+//check if existing
if (gn_storage_set(_buf, (void**) &val, sizeof(double)) != ESP_OK) {
ESP_LOGW(TAG,
"not possible to store leaf parameter value - key %s value %f",
@@ -1840,20 +2160,8 @@ gn_err_t gn_leaf_param_write_double(const gn_leaf_handle_t leaf_config,
}
- if (_param->validator) {
- double *p = &val;
- double **validate = &p;
- gn_leaf_param_validator_result_t val_ret = _param->validator(_param,
- (void**) validate);
- if (val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_GENERIC
- && val_ret != GN_LEAF_PARAM_VALIDATOR_ERROR_NOT_ALLOWED)
- _param->param_val->v.d = **validate;
- //ESP_LOGD(TAG, "processing validator - result: %d", (int )ret);
- } else {
- _param->param_val->v.d = val;
- }
-
- //ESP_LOGD(TAG, "gn_leaf_param_set - result %g", _param->param_val->v.d);
+ ESP_LOGD(TAG, "gn_leaf_param_write_double - result %g",
+ _param->param_val->v.d);
//notify event loop
gn_leaf_parameter_event_t evt;
@@ -1867,9 +2175,9 @@ gn_err_t gn_leaf_param_write_double(const gn_leaf_handle_t leaf_config,
evt.id, &evt, sizeof(evt),
portMAX_DELAY);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_param_set_double - not possible to send param message to event loop - id:%d, size:%d - result: %d",
- evt.id, sizeof(evt), (int) ret);
+ ESP_LOGD(TAG,
+ "gn_leaf_param_write_double - not possible to send param message to event loop - id:%d, size:%d - result: %d",
+ evt.id, sizeof(evt), (int ) ret);
return GN_RET_ERR;
}
@@ -1964,14 +2272,14 @@ gn_err_t _gn_leaf_parameter_update(const gn_leaf_handle_t leaf_config,
while (leaf_params != NULL) {
- //check param name
+//check param name
if (strcmp(param, leaf_params->name) == 0) {
//param is the one to update
//check if has write access
if (leaf_params->access != GN_LEAF_PARAM_ACCESS_NETWORK
&& leaf_params->access != GN_LEAF_PARAM_ACCESS_ALL) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGW(TAG,
"gn_leaf_parameter_update - paramater has no WRITE access, change discarded");
return GN_RET_ERR_LEAF_PARAM_ACCESS_VIOLATION;
}
@@ -1982,7 +2290,7 @@ gn_err_t _gn_leaf_parameter_update(const gn_leaf_handle_t leaf_config,
strncpy(evt.leaf_name, _leaf_config->name,
GN_LEAF_NAME_SIZE);
strncpy(evt.param_name, param,
- GN_LEAF_PARAM_NAME_SIZE);
+ GN_LEAF_PARAM_NAME_SIZE-1);
memcpy(&evt.data[0], data, data_len);
evt.data_size = data_len;
@@ -2032,7 +2340,7 @@ gn_err_t gn_leaf_param_add_to_leaf(const gn_leaf_handle_t leaf,
gn_leaf_param_handle_intl_t new_param = (gn_leaf_param_handle_intl_t) param;
if (!leaf || !new_param) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_add incorrect parameters");
+ ESP_LOGE(TAG, "gn_leaf_param_add incorrect parameters");
return GN_RET_ERR_INVALID_ARG;
}
@@ -2041,10 +2349,9 @@ gn_err_t gn_leaf_param_add_to_leaf(const gn_leaf_handle_t leaf,
while (_param) {
if (strcmp(_param->name, new_param->name) == 0) {
- gn_log(TAG, GN_LOG_ERROR,
- "Parameter with name %s already exists in Leaf %s",
+ ESP_LOGE(TAG, "Parameter with name %s already exists in Leaf %s",
new_param->name,
- ((gn_leaf_config_handle_intl_t) leaf)->name);
+ ((gn_leaf_config_handle_intl_t ) leaf)->name);
return GN_RET_ERR_INVALID_ARG;
}
if (_param->next) {
@@ -2065,17 +2372,17 @@ gn_err_t gn_leaf_param_add_to_leaf(const gn_leaf_handle_t leaf,
ret = gn_mqtt_subscribe_leaf_param(new_param);
if (ret != GN_RET_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_add failed to subscribe param %s of leaf %s",
- new_param->name, ((gn_leaf_config_handle_intl_t) leaf)->name);
+ new_param->name, ((gn_leaf_config_handle_intl_t ) leaf)->name);
return ret;
}
ret = gn_mqtt_send_leaf_param(new_param);
if (ret != GN_RET_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_add failed to send param configuration %s of leaf %s",
- new_param->name, ((gn_leaf_config_handle_intl_t) leaf)->name);
+ new_param->name, ((gn_leaf_config_handle_intl_t ) leaf)->name);
return ret;
}
@@ -2110,7 +2417,7 @@ gn_err_t gn_send_node_leaf_param_status(const gn_node_handle_t _node_config) {
gn_err_t ret = gn_mqtt_send_leaf_param(_param);
if (ret != GN_RET_OK) {
- gn_log(TAG, GN_LOG_ERROR,
+ ESP_LOGE(TAG,
"gn_leaf_param_add failed to send param configuration %s of leaf %s",
_param->name, leaf_config->name);
return ret;
@@ -2144,12 +2451,11 @@ gn_err_t gn_send_leaf_param_change_message(const char *leaf_name,
const char *param_name, const void *message, size_t message_len) {
if (leaf_name == NULL || param_name == NULL || message == NULL) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_send_leaf_param_change_message - invalid args");
+ ESP_LOGE(TAG, "gn_send_leaf_param_change_message - invalid args");
return GN_RET_ERR_INVALID_ARG;
}
- gn_leaves_list leaves = _gn_default_conf->node_config->leaves;
+ gn_leaves_list leaves = _gn_default_conf->node_handle->leaves;
for (int i = 0; i < leaves.last; i++) {
@@ -2160,8 +2466,7 @@ gn_err_t gn_send_leaf_param_change_message(const char *leaf_name,
}
}
- gn_log(TAG, GN_LOG_ERROR,
- "gn_send_leaf_param_change_message(%s) - leaf not found",
+ ESP_LOGE(TAG, "gn_send_leaf_param_change_message(%s) - leaf not found",
leaf_name);
return GN_RET_ERR_LEAF_NOT_FOUND;
}
@@ -2185,7 +2490,7 @@ gn_err_t gn_leaf_param_set_bool(const gn_leaf_handle_t leaf_config,
const char *name,
bool val) {
if (leaf_config == NULL || name == NULL) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_send_bool - invalid args");
+ ESP_LOGE(TAG, "gn_leaf_param_set_bool - invalid args");
return GN_RET_ERR_INVALID_ARG;
}
gn_leaf_config_handle_intl_t _leaf_config =
@@ -2215,7 +2520,7 @@ gn_err_t gn_leaf_param_set_bool(const gn_leaf_handle_t leaf_config,
gn_err_t gn_leaf_param_set_double(const gn_leaf_handle_t leaf_config,
const char *name, double val) {
if (leaf_config == NULL || name == NULL) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_send_bool - invalid args");
+ ESP_LOGE(TAG, "gn_leaf_param_set_double - invalid args");
return GN_RET_ERR_INVALID_ARG;
}
gn_leaf_config_handle_intl_t _leaf_config =
@@ -2245,7 +2550,7 @@ gn_err_t gn_leaf_param_set_double(const gn_leaf_handle_t leaf_config,
gn_err_t gn_leaf_param_set_string(const gn_leaf_handle_t leaf_config,
const char *name, char *val) {
if (leaf_config == NULL || name == NULL) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_send_bool - invalid args");
+ ESP_LOGE(TAG, "gn_leaf_param_set_string - invalid args");
return GN_RET_ERR_INVALID_ARG;
}
gn_leaf_config_handle_intl_t _leaf_config =
@@ -2286,18 +2591,23 @@ gn_leaf_param_handle_t gn_leaf_get_params(gn_leaf_handle_t leaf_config) {
gn_leaf_param_handle_t gn_leaf_param_get_param_handle(
const gn_leaf_handle_t leaf_config, const char *param_name) {
- if (leaf_config == NULL || param_name == NULL) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_param_get incorrect parameters");
+ if (!leaf_config || !param_name) {
+ ESP_LOGD(TAG, "gn_leaf_param_get_param_handle invaoid arguments");
return NULL;
}
gn_leaf_param_handle_intl_t param =
((gn_leaf_config_handle_intl_t) leaf_config)->params;
+ if (!param) {
+ ESP_LOGD(TAG, "gn_leaf_param_get_param_handle incorrect parameter");
+ return NULL;
+ }
+
while (param) {
- //ESP_LOGD(TAG,
- // "gn_leaf_param_get_param_handle - comparing %s (%d) and checking %s (%d)",
- // param_name, strlen(param_name), param->name,
- // strlen(param->name));
+//ESP_LOGD(TAG,
+// "gn_leaf_param_get_param_handle - comparing %s (%d) and checking %s (%d)",
+// param_name, strlen(param_name), param->name,
+// strlen(param->name));
if (strncmp(param->name, param_name, strlen(param_name)) == 0) {
//ESP_LOGD(TAG, "found!");
return param;
@@ -2317,7 +2627,7 @@ void* _gn_leaf_context_add_to_leaf(const gn_leaf_handle_t leaf, char *key,
void *value) {
if (!leaf || !key || !value) {
- gn_log(TAG, GN_LOG_ERROR, "gn_leaf_context_add incorrect parameters");
+ ESP_LOGE(TAG, "gn_leaf_context_add incorrect parameters");
return NULL;
}
@@ -2332,8 +2642,7 @@ void* _gn_leaf_context_add_to_leaf(const gn_leaf_handle_t leaf, char *key,
void* _gn_leaf_context_remove_to_leaf(const gn_leaf_handle_t leaf, char *key) {
if (!leaf || !key) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_context_remove_to_leaf incorrect parameters");
+ ESP_LOGE(TAG, "gn_leaf_context_remove_to_leaf incorrect parameters");
return NULL;
}
@@ -2348,8 +2657,7 @@ void* _gn_leaf_context_remove_to_leaf(const gn_leaf_handle_t leaf, char *key) {
void* _gn_leaf_context_get_key_to_leaf(const gn_leaf_handle_t leaf, char *key) {
if (!leaf || !key) {
- gn_log(TAG, GN_LOG_ERROR,
- "gn_leaf_context_remove_to_leaf incorrect parameters");
+ ESP_LOGE(TAG, "gn_leaf_context_remove_to_leaf incorrect parameters");
return NULL;
}
@@ -2472,7 +2780,7 @@ gn_err_t gn_firmware_update() {
ESP_LOGE(TAG, "OTA message not sent");
}
vTaskDelay(1000 / portTICK_PERIOD_MS);
- xTaskCreate(_gn_ota_task, "gn_ota_task", 8196, NULL, 10,
+ xTaskCreate(gn_ota_task, "gn_ota_task", 8196, NULL, 10,
NULL);
#endif
return GN_RET_OK;
@@ -2541,8 +2849,7 @@ gn_err_t gn_log(char *log_tag, gn_log_level_t level, const char *message, ...) {
portMAX_DELAY);
if (ret != GN_RET_OK) {
- gn_log(TAG, GN_LOG_ERROR, "Not possible to post log event: %s",
- formatted_message);
+ ESP_LOGE(TAG, "Not possible to post log event: %s", formatted_message);
return ret;
}
@@ -2617,10 +2924,6 @@ gn_config_handle_t gn_init(gn_config_init_param_t *config_init) {
ESP_GOTO_ON_ERROR(_gn_evt_handlers_register(_gn_default_conf), err, TAG,
"error _gn_register_event_handlers: %s", esp_err_to_name(ret));
-//heartbeat to check network comm and send periodical system watchdog to the network
- ESP_GOTO_ON_ERROR(_gn_init_keepalive_timer(_gn_default_conf), err, TAG,
- "error on timer init: %s", esp_err_to_name(ret));
-
//init display
#ifdef CONFIG_GROWNODE_DISPLAY_ENABLED
ESP_GOTO_ON_ERROR(gn_init_display(_gn_default_conf), err, TAG,
@@ -2628,18 +2931,24 @@ gn_config_handle_t gn_init(gn_config_init_param_t *config_init) {
#endif
#if CONFIG_GROWNODE_WIFI_ENABLED
-//init wifi
- ESP_GOTO_ON_ERROR(_gn_init_wifi(_gn_default_conf), err_net, TAG,
+
+ //heartbeat to check network comm and send periodical system watchdog to the network
+ ESP_GOTO_ON_ERROR(_gn_init_keepalive_timer(_gn_default_conf), err, TAG,
+ "error on timer init: %s", esp_err_to_name(ret));
+
+ //init wifi
+ ESP_GOTO_ON_ERROR(gn_wifi_init(_gn_default_conf), err_net, TAG,
"error on wifi init: %s", esp_err_to_name(ret));
-//init time sync. note: if bad, continue
- ESP_GOTO_ON_ERROR(_gn_init_time_sync(_gn_default_conf), err_timesync, TAG,
- "error on time sync init: %s", esp_err_to_name(ret));
+ //init time sync. note: if bad, continue
+ ESP_GOTO_ON_ERROR(gn_wifi_time_sync_init(_gn_default_conf), err_timesync,
+ TAG, "error on time sync init: %s", esp_err_to_name(ret));
err_timesync:
-//init mqtt system
- ESP_GOTO_ON_ERROR(gn_mqtt_init(_gn_default_conf), err_srv, TAG,
+ //init mqtt system
+ ESP_GOTO_ON_ERROR(gn_mqtt_start(_gn_default_conf), err_srv, TAG,
"error on server init: %s", esp_err_to_name(ret));
+
#endif
ESP_LOGI(TAG, "grownode startup sequence completed!");
@@ -2687,13 +2996,14 @@ gn_err_t gn_storage_set(const char *key, const void *value,
goto fail;
}
*/
+ ESP_LOGD(TAG_NVS, "gn_storage_set(%s, %s)", key, (char*)value);
nvs_handle_t my_handle;
// Open
err = nvs_open(STORAGE_NAMESPACE, NVS_READWRITE, &my_handle);
if (err != ESP_OK) {
- ESP_LOGE(TAG_NVS, "gn_storage_set() failed -nvs_open() error: %d", err);
+ ESP_LOGD(TAG_NVS, "gn_storage_set() failed -nvs_open() error: %d", err);
goto fail;
}
@@ -2704,7 +3014,7 @@ gn_err_t gn_storage_set(const char *key, const void *value,
err = nvs_set_blob(my_handle, _hashedkey, value, required_size);
if (err != ESP_OK) {
- ESP_LOGE(TAG_NVS, "gn_storage_set() failed -nvs_set_blob() error: %d",
+ ESP_LOGD(TAG_NVS, "gn_storage_set() failed -nvs_set_blob() error: %d",
err);
goto fail;
}
@@ -2712,7 +3022,7 @@ gn_err_t gn_storage_set(const char *key, const void *value,
// Commit
err = nvs_commit(my_handle);
if (err != ESP_OK) {
- ESP_LOGE(TAG_NVS, "gn_storage_set() failed -nvs_commit() error: %d",
+ ESP_LOGD(TAG_NVS, "gn_storage_set() failed -nvs_commit() error: %d",
err);
goto fail;
}
@@ -2762,7 +3072,7 @@ gn_err_t gn_storage_get(const char *key, void **value) {
gn_hash_str(key, _hashedkey, len);
// Read the size of memory space required for blob
- size_t required_size = 0; // value will default to 0, if not set yet in NVS
+ size_t required_size = 0;// value will default to 0, if not set yet in NVS
err = nvs_get_blob(my_handle, _hashedkey, NULL, &required_size);
if (err != ESP_OK && err != ESP_ERR_NVS_NOT_FOUND) {
ESP_LOGD(TAG_NVS, "nvs_get_blob(handle, %s, NULL, %d) - %d", key,
@@ -2772,8 +3082,8 @@ gn_err_t gn_storage_get(const char *key, void **value) {
if (required_size > 0) {
- // Read previously saved blob if available
- *value = malloc(required_size + sizeof(uint32_t));
+// Read previously saved blob if available
+ *value = calloc(required_size + sizeof(uint32_t),1);
err = nvs_get_blob(my_handle, _hashedkey, *value, &required_size);
@@ -2783,7 +3093,7 @@ gn_err_t gn_storage_get(const char *key, void **value) {
free(*value);
goto fail;
}
- ESP_LOGD(TAG_NVS, "gn_storage_get(%s) - %s - ESP_OK", key,
+ ESP_LOGD(TAG_NVS, "gn_storage_get(%s) - %s - OK", key,
(char* ) *value);
} else
goto fail;
diff --git a/components/grownode/grownode.h b/components/grownode/grownode.h
index e155edc6..86778d62 100755
--- a/components/grownode/grownode.h
+++ b/components/grownode/grownode.h
@@ -36,6 +36,7 @@ extern "C" {
#endif /* CONFIG_GROWNODE_PROV_TRANSPORT_BLE */
#define GN_NODE_LEAVES_MAX_SIZE 64
+#define GN_NODE_LEAF_QUEUE_SIZE 3
//functions
gn_node_handle_t gn_node_create(gn_config_handle_t config,
@@ -45,6 +46,10 @@ gn_err_t gn_node_destroy(gn_node_handle_t node);
gn_err_t gn_node_start(gn_node_handle_t node);
+gn_err_t gn_node_loop(gn_node_handle_t node);
+
+gn_err_t gn_node_sleep(gn_node_handle_t node, gn_sleep_mode_t sleep_mode, uint64_t delay_msec, uint64_t millisec);
+
size_t gn_node_get_size(gn_node_handle_t config);
gn_config_handle_t gn_init(gn_config_init_param_t *config_init);
@@ -57,7 +62,7 @@ gn_err_t gn_reboot();
gn_leaf_handle_t gn_leaf_create(gn_node_handle_t node_config,
const char *name, gn_leaf_config_callback callback,
- size_t task_size);
+ size_t task_size, UBaseType_t priority);
gn_leaf_descriptor_handle_t gn_leaf_get_descriptor(
gn_leaf_handle_t leaf_config);
diff --git a/components/grownode/grownode_intl.h b/components/grownode/grownode_intl.h
index def279b0..757a228f 100755
--- a/components/grownode/grownode_intl.h
+++ b/components/grownode/grownode_intl.h
@@ -52,10 +52,11 @@ struct gn_config_t {
esp_event_loop_handle_t event_loop;
wifi_init_config_t wifi_config;
wifi_prov_mgr_config_t prov_config;
+ esp_timer_handle_t keepalive_timer_handler;
char deviceName[17];
uint8_t macAddress[6];
gn_node_status_t status;
- gn_node_handle_intl_t node_config;
+ gn_node_handle_intl_t node_handle;
gn_config_init_param_t *config_init_params;
};
@@ -70,11 +71,13 @@ struct gn_leaf_config_t {
gn_leaf_descriptor_handle_t leaf_descriptor;
char name[GN_LEAF_NAME_SIZE];
size_t task_size;
+ UBaseType_t priority;
gn_node_handle_intl_t node_config;
//gn_leaf_display_task_t display_task;
//gn_leaf_config_handle_t next;
//gn_leaf_task_callback task_cb;
QueueHandle_t event_queue;
+ TaskHandle_t task_handle;
//esp_event_loop_handle_t event_loop;
gn_leaf_param_handle_t params;
//gn_display_handler_t display_handler;
diff --git a/components/grownode/leaves/gn_capacitive_moisture_sensor.c b/components/grownode/leaves/gn_capacitive_moisture_sensor.c
index 879f0bc8..0b458f57 100644
--- a/components/grownode/leaves/gn_capacitive_moisture_sensor.c
+++ b/components/grownode/leaves/gn_capacitive_moisture_sensor.c
@@ -146,7 +146,7 @@ gn_leaf_descriptor_handle_t gn_capacitive_moisture_sensor_config(
gn_cms_data_t *data = malloc(sizeof(gn_cms_data_t));
data->active_param = gn_leaf_param_create(leaf_config, GN_CMS_PARAM_ACTIVE,
- GN_VAL_TYPE_BOOLEAN, (gn_val_t ) { .b = false },
+ GN_VAL_TYPE_BOOLEAN, (gn_val_t ) { .b = true },
GN_LEAF_PARAM_ACCESS_ALL, GN_LEAF_PARAM_STORAGE_PERSISTED,
NULL);
@@ -367,17 +367,25 @@ void gn_cms_task(gn_leaf_handle_t leaf_config) {
ret = esp_timer_create(&water_sensor_timer_args, &data->sensor_timer);
if (ret != ESP_OK) {
gn_log(TAG, GN_LOG_ERROR,
- "[%s] failed to init capacitive moisture sensor timer", leaf_name);
+ "[%s] failed to init capacitive moisture sensor timer",
+ leaf_name);
}
if (ret == ESP_OK && active == true) {
- //start sensor callback
- ret = esp_timer_start_periodic(data->sensor_timer,
- update_time_sec * 1000000);
+ //first shot immediate
+ gn_cms_sensor_collect(leaf_config);
+
+ //then start the periodic wakeup
+ if (ret == ESP_OK) {
+ ret = esp_timer_start_periodic(data->sensor_timer,
+ update_time_sec * 1000000);
+ }
+
if (ret != ESP_OK) {
gn_log(TAG, GN_LOG_ERROR,
- "[%s] failed to start capacitive moisture sensor timer", leaf_name);
+ "[%s] failed to start capacitive moisture sensor timer",
+ leaf_name);
gn_leaf_get_descriptor(leaf_config)->status = GN_LEAF_STATUS_ERROR;
gn_leaf_param_write_bool(leaf_config, GN_CMS_PARAM_ACTIVE, false);
descriptor->status = GN_LEAF_STATUS_ERROR;
diff --git a/components/grownode/leaves/gn_ds18b20.c b/components/grownode/leaves/gn_ds18b20.c
index d1ac5213..1293f961 100755
--- a/components/grownode/leaves/gn_ds18b20.c
+++ b/components/grownode/leaves/gn_ds18b20.c
@@ -49,12 +49,14 @@ void _scan_sensors(int gpio, size_t *sensor_count, ds18x20_addr_t *addrs) {
res = ds18x20_scan_devices(gpio, addrs, GN_DS18B20_MAX_SENSORS,
sensor_count);
if (res != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR, "Sensors scan error %d (%s)", res, esp_err_to_name(res));
+ gn_log(TAG, GN_LOG_ERROR, "Sensors scan error %d (%s)", res,
+ esp_err_to_name(res));
return;
}
- ESP_LOGD(TAG, "%d sensors detected. addr[0]=%llu, addr[1]=%llu",
- *sensor_count, addrs[0], addrs[1]);
+ ESP_LOGD(TAG,
+ "%d sensors detected. addr[0]=%llu, addr[1]=%llu, addr[2]=%llu, addr[3]=%llu",
+ *sensor_count, addrs[0], addrs[1], addrs[2], addrs[3]);
// If there were more sensors found than we have space to handle,
// just report the first MAX_SENSORS..
@@ -76,6 +78,7 @@ typedef struct {
gn_leaf_param_handle_t update_time_param;
gn_leaf_param_handle_t gpio_param;
gn_leaf_param_handle_t active_param;
+ gn_leaf_param_handle_t parasitic_param;
} gn_ds18b20_data_t;
@@ -124,19 +127,24 @@ void gn_ds18b20_temp_sensor_collect(gn_leaf_handle_t leaf_config) {
double gpio;
gn_leaf_param_get_double(leaf_config, GN_DS18B20_PARAM_GPIO, &gpio);
+ bool parasitic;
+ gn_leaf_param_get_bool(leaf_config, GN_DS18B20_PARAM_PARASITIC, ¶sitic);
+
if (active == true) {
- ESP_LOGD(TAG, "[%s] reading from GPIO %d..", leaf_name, (int)gpio);
+ ESP_LOGD(TAG, "[%s] reading from GPIO %d..", leaf_name, (int )gpio);
+ for (int i = 0; i < GN_DS18B20_MAX_SENSORS; i++) {
+ if (data->addrs[i])
+ ds18x20_measure(gpio, data->addrs[i], parasitic);
+ }
//read data from sensors using GPIO parameter
- res = ds18x20_measure_and_read_multi(gpio, data->addrs,
+ res = ds18x20_read_temp_multi(gpio, data->addrs,
data->sensor_count, data->temp);
if (res != ESP_OK) {
gn_log(TAG, GN_LOG_ERROR, "[%s] sensors read error %d (%s)",
- leaf_name,
- res,
- esp_err_to_name(res));
+ leaf_name, res, esp_err_to_name(res));
gn_leaf_get_descriptor(leaf_config)->status = GN_LEAF_STATUS_ERROR;
gn_leaf_param_write_bool(leaf_config, GN_DS18B20_PARAM_ACTIVE,
false);
@@ -147,9 +155,9 @@ void gn_ds18b20_temp_sensor_collect(gn_leaf_handle_t leaf_config) {
for (int j = 0; j < data->sensor_count; j++) {
float temp_c = data->temp[j];
float temp_f = (temp_c * 1.8) + 32;
- ESP_LOGD(TAG, "[%s] sensor %08x%08x (%s) reports %.3f �C (%.3f �F)",
- leaf_name,
- (uint32_t )(data->addrs[j] >> 32),
+ ESP_LOGD(TAG,
+ "[%s] sensor %08x%08x (%s) reports %.3f �C (%.3f �F)",
+ leaf_name, (uint32_t )(data->addrs[j] >> 32),
(uint32_t )data->addrs[j],
(data->addrs[j] & 0xff) == DS18B20_FAMILY_ID ? "DS18B20" : "DS18S20",
temp_c, temp_f);
@@ -164,8 +172,7 @@ void gn_ds18b20_temp_sensor_collect(gn_leaf_handle_t leaf_config) {
}
}
-gn_leaf_descriptor_handle_t gn_ds18b20_config(
- gn_leaf_handle_t leaf_config) {
+gn_leaf_descriptor_handle_t gn_ds18b20_config(gn_leaf_handle_t leaf_config) {
char leaf_name[GN_LEAF_NAME_SIZE];
gn_leaf_get_name(leaf_config, leaf_name);
@@ -201,7 +208,8 @@ gn_leaf_descriptor_handle_t gn_ds18b20_config(
//get gpio from params. default 27
data->gpio_param = gn_leaf_param_create(leaf_config, GN_DS18B20_PARAM_GPIO,
GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d = 27 },
- GN_LEAF_PARAM_ACCESS_NETWORK, GN_LEAF_PARAM_STORAGE_PERSISTED, NULL);
+ GN_LEAF_PARAM_ACCESS_NETWORK, GN_LEAF_PARAM_STORAGE_PERSISTED,
+ NULL);
gn_leaf_param_add_to_leaf(leaf_config, data->gpio_param);
//get params for temp. init to 0
@@ -213,6 +221,12 @@ gn_leaf_descriptor_handle_t gn_ds18b20_config(
gn_leaf_param_add_to_leaf(leaf_config, data->temp_param[i]);
}
+ data->parasitic_param = gn_leaf_param_create(leaf_config,
+ GN_DS18B20_PARAM_PARASITIC, GN_VAL_TYPE_BOOLEAN, (gn_val_t ) { .b =
+ false }, GN_LEAF_PARAM_ACCESS_NODE,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, NULL);
+ gn_leaf_param_add_to_leaf(leaf_config, data->parasitic_param);
+
descriptor->status = GN_LEAF_STATUS_INITIALIZED;
descriptor->data = data;
return descriptor;
@@ -231,7 +245,6 @@ void gn_ds18b20_task(gn_leaf_handle_t leaf_config) {
char leaf_name[GN_LEAF_NAME_SIZE];
gn_leaf_get_name(leaf_config, leaf_name);
-
bool active;
gn_leaf_param_get_bool(leaf_config, GN_DS18B20_PARAM_ACTIVE, &active);
@@ -242,35 +255,45 @@ void gn_ds18b20_task(gn_leaf_handle_t leaf_config) {
gn_leaf_param_get_double(leaf_config, GN_DS18B20_PARAM_UPDATE_TIME_SEC,
&update_time_sec);
-
ESP_LOGD(TAG, "[%s] gn_ds18b20_task", leaf_name);
//init sensors
//setup gpio
- gpio_set_pull_mode(gpio, GPIO_PULLUP_ONLY);
+ //gpio_set_pull_mode(gpio, GPIO_PULLUP_ONLY);
_scan_sensors(gpio, &data->sensor_count, &data->addrs[0]);
//create a timer to update temps
- esp_timer_create_args_t sensor_timer_args =
- { .callback = &gn_ds18b20_temp_sensor_collect, .arg = leaf_config, .name =
- "ds18b20_periodic" };
+ esp_timer_create_args_t sensor_timer_args = { .callback =
+ &gn_ds18b20_temp_sensor_collect, .arg = leaf_config, .name =
+ "ds18b20_periodic" };
esp_err_t ret = esp_timer_create(&sensor_timer_args, &data->sensor_timer);
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR, "[%s] failed to init ds18b20 leaf timer", leaf_name);
+ gn_log(TAG, GN_LOG_ERROR, "[%s] failed to init ds18b20 leaf timer",
+ leaf_name);
descriptor->status = GN_LEAF_STATUS_ERROR;
}
if (ret == ESP_OK && active == true) {
- ret = esp_timer_start_periodic(data->sensor_timer,
- update_time_sec * 1000000);
+
+ //first shot immediate
+ gn_ds18b20_temp_sensor_collect(leaf_config);
+
+ //then start the periodic wakeup
+ if (ret == ESP_OK) {
+ ret = esp_timer_start_periodic(data->sensor_timer,
+ update_time_sec * 1000000);
+ }
+
if (ret != ESP_OK) {
- gn_log(TAG, GN_LOG_ERROR, "[%s] failed to start ds18b20 leaf timer", leaf_name);
+ gn_log(TAG, GN_LOG_ERROR, "[%s] failed to start ds18b20 leaf timer",
+ leaf_name);
gn_leaf_get_descriptor(leaf_config)->status = GN_LEAF_STATUS_ERROR;
- gn_leaf_param_write_bool(data->active_param, GN_DS18B20_PARAM_ACTIVE,
- false);
+ gn_leaf_param_write_bool(data->active_param,
+ GN_DS18B20_PARAM_ACTIVE,
+ false);
descriptor->status = GN_LEAF_STATUS_ERROR;
}
}
@@ -424,8 +447,8 @@ void gn_ds18b20_task(gn_leaf_handle_t leaf_config) {
leaf_name, evt.param_name, evt.data);
//parameter is update time
- if (gn_leaf_event_mask_param(&evt,
- data->update_time_param) == 0) {
+ if (gn_leaf_event_mask_param(&evt, data->update_time_param)
+ == 0) {
gn_leaf_param_write_double(leaf_config,
GN_DS18B20_PARAM_UPDATE_TIME_SEC,
(double) atof(evt.data));
@@ -433,14 +456,15 @@ void gn_ds18b20_task(gn_leaf_handle_t leaf_config) {
esp_timer_start_periodic(data->sensor_timer,
update_time_sec * 1000000);
- } else if (gn_leaf_event_mask_param(&evt,
- data->active_param) == 0) {
+ } else if (gn_leaf_event_mask_param(&evt, data->active_param)
+ == 0) {
bool prev_active = active;
int _active = atoi(evt.data);
//execute change
- gn_leaf_param_write_bool(leaf_config, GN_DS18B20_PARAM_ACTIVE,
+ gn_leaf_param_write_bool(leaf_config,
+ GN_DS18B20_PARAM_ACTIVE,
_active == 0 ? false : true);
active = _active;
@@ -452,8 +476,8 @@ void gn_ds18b20_task(gn_leaf_handle_t leaf_config) {
update_time_sec * 1000000);
}
- } else if (gn_leaf_event_mask_param(&evt,
- data->gpio_param) == 0) {
+ } else if (gn_leaf_event_mask_param(&evt, data->gpio_param)
+ == 0) {
//check limits
int _gpio = atoi(evt.data);
diff --git a/components/grownode/leaves/gn_ds18b20.h b/components/grownode/leaves/gn_ds18b20.h
index 49b4d6d3..d622fa91 100755
--- a/components/grownode/leaves/gn_ds18b20.h
+++ b/components/grownode/leaves/gn_ds18b20.h
@@ -35,6 +35,7 @@ static const char GN_DS18B20_PARAM_UPDATE_TIME_SEC[16] = "upd_time_sec"; /*!< se
static const char GN_DS18B20_PARAM_GPIO[5] = "gpio"; /*!< GPIO connected to the temp sensor */
static const char GN_DS18B20_PARAM_SENSOR_NAMES[GN_DS18B20_MAX_SENSORS][6] = { "temp1", "temp2",
"temp3", "temp4" };
+static const char GN_DS18B20_PARAM_PARASITIC[] = "parasitic"; /*!< whether to use the parasitic mode. */
gn_leaf_descriptor_handle_t gn_ds18b20_config(gn_leaf_handle_t leaf_config);
diff --git a/components/grownode/leaves/gn_gpio.c b/components/grownode/leaves/gn_gpio.c
index af6af737..724e8760 100644
--- a/components/grownode/leaves/gn_gpio.c
+++ b/components/grownode/leaves/gn_gpio.c
@@ -72,8 +72,8 @@ gn_leaf_handle_t gn_gpio_fastcreate(gn_node_handle_t node,
}
//creates the blink leave
- gn_leaf_handle_t leaf = gn_leaf_create(node, leaf_name,
- gn_gpio_config, 4096);
+ gn_leaf_handle_t leaf = gn_leaf_create(node, leaf_name, gn_gpio_config,
+ 4096, GN_LEAF_TASK_PRIORITY);
if (leaf == NULL) {
ESP_LOGE(TAG, "gn_gpio_fastcreate - cannot create leaf %s", leaf_name);
@@ -91,13 +91,18 @@ gn_leaf_handle_t gn_gpio_fastcreate(gn_node_handle_t node,
void gn_gpio_task(gn_leaf_handle_t leaf_config);
typedef struct {
- gn_leaf_param_handle_t gn_gpio_status_param;
+ gn_leaf_param_handle_t gn_gpio_toggle_param;
gn_leaf_param_handle_t gn_gpio_inverted_param;
gn_leaf_param_handle_t gn_gpio_gpio_param;
} gn_gpio_data_t;
gn_leaf_descriptor_handle_t gn_gpio_config(gn_leaf_handle_t leaf_config) {
+ char leaf_name[GN_LEAF_NAME_SIZE];
+ gn_leaf_get_name(leaf_config, leaf_name);
+
+ ESP_LOGD(TAG, "[%s] gn_gpio_config", leaf_name);
+
gn_leaf_descriptor_handle_t descriptor =
(gn_leaf_descriptor_handle_t) malloc(sizeof(gn_leaf_descriptor_t));
strncpy(descriptor->type, GN_LEAF_GPIO_TYPE, GN_LEAF_DESC_TYPE_SIZE);
@@ -106,7 +111,7 @@ gn_leaf_descriptor_handle_t gn_gpio_config(gn_leaf_handle_t leaf_config) {
gn_gpio_data_t *data = malloc(sizeof(gn_gpio_data_t));
- data->gn_gpio_status_param = gn_leaf_param_create(leaf_config,
+ data->gn_gpio_toggle_param = gn_leaf_param_create(leaf_config,
GN_GPIO_PARAM_TOGGLE, GN_VAL_TYPE_BOOLEAN,
(gn_val_t ) { .b = false }, GN_LEAF_PARAM_ACCESS_NETWORK,
GN_LEAF_PARAM_STORAGE_PERSISTED, NULL);
@@ -121,7 +126,7 @@ gn_leaf_descriptor_handle_t gn_gpio_config(gn_leaf_handle_t leaf_config) {
GN_LEAF_PARAM_ACCESS_NETWORK, GN_LEAF_PARAM_STORAGE_PERSISTED,
NULL);
- gn_leaf_param_add_to_leaf(leaf_config, data->gn_gpio_status_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_gpio_toggle_param);
gn_leaf_param_add_to_leaf(leaf_config, data->gn_gpio_inverted_param);
gn_leaf_param_add_to_leaf(leaf_config, data->gn_gpio_gpio_param);
@@ -136,12 +141,12 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
char leaf_name[GN_LEAF_NAME_SIZE];
gn_leaf_get_name(leaf_config, leaf_name);
- ESP_LOGD(TAG, "Initializing gpio leaf %s..", leaf_name);
+ ESP_LOGD(TAG, "[%s] gn_gpio_task", leaf_name);
- const size_t GN_GPIO_STATE_STOP = 0;
- const size_t GN_GPIO_STATE_RUNNING = 1;
+ //const size_t GN_GPIO_STATE_STOP = 0;
+ //const size_t GN_GPIO_STATE_RUNNING = 1;
- size_t gn_gpio_state = GN_GPIO_STATE_RUNNING;
+ //size_t gn_gpio_state = GN_GPIO_STATE_RUNNING;
gn_leaf_parameter_event_t evt;
//retrieves status descriptor from config
@@ -213,13 +218,13 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
//task cycle
while (true) {
- //ESP_LOGD(TAG, "task cycle..");
+ ESP_LOGD(TAG, "[%s] task cycle..", leaf_name);
//check for messages and cycle every 100ms
if (xQueueReceive(gn_leaf_get_event_queue(leaf_config), &evt,
- pdMS_TO_TICKS(100)) == pdPASS) {
+ portMAX_DELAY) == pdPASS) {
- ESP_LOGD(TAG, "%s - received message: %d", leaf_name, evt.id);
+ ESP_LOGD(TAG, "[%s] received message: %d", leaf_name, evt.id);
//event arrived for this node
switch (evt.id) {
@@ -227,32 +232,30 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
//parameter change
case GN_LEAF_PARAM_CHANGE_REQUEST_EVENT:
- ESP_LOGD(TAG, "request to update param %s, data = '%s'",
- evt.param_name, evt.data);
+ ESP_LOGD(TAG, "[%s] request to update param %s, data = '%s'",
+ leaf_name, evt.param_name, evt.data);
//parameter is status
- if (gn_leaf_event_mask_param(&evt, data->gn_gpio_status_param)
+ if (gn_leaf_event_mask_param(&evt, data->gn_gpio_toggle_param)
== 0) {
int _active = atoi(evt.data);
//notify change
+ ESP_LOGD(TAG, "written: %d", _active);
+
gn_leaf_param_write_bool(leaf_config, GN_GPIO_PARAM_TOGGLE,
_active == 0 ? false : true);
status = _active;
- ESP_LOGD(TAG, "%s - gpio %d, toggle %d, inverted %d",
+ ESP_LOGD(TAG, "[%s] - gpio %d, toggle %d, inverted %d",
leaf_name, (int )gpio, status ? 1 : 0,
inverted ? 1 : 0);
//update sensor using the parameter values
- if (gn_gpio_state == GN_GPIO_STATE_RUNNING) {
- gpio_set_level((int) gpio,
- status ?
- (inverted ? 0 : 1) :
- (inverted ? 1 : 0));
- }
+ gpio_set_level((int) gpio,
+ status ? (inverted ? 0 : 1) : (inverted ? 1 : 0));
#ifdef CONFIG_GROWNODE_DISPLAY_ENABLED
if (pdTRUE == gn_display_leaf_refresh_start()) {
@@ -271,22 +274,19 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
int _inverted = atoi(evt.data);
//notify change
- gn_leaf_param_write_bool(leaf_config, GN_GPIO_PARAM_INVERTED,
+ gn_leaf_param_write_bool(leaf_config,
+ GN_GPIO_PARAM_INVERTED,
_inverted == 0 ? false : true);
inverted = _inverted;
- ESP_LOGD(TAG, "%s - gpio %d, toggle %d, inverted %d",
+ ESP_LOGD(TAG, "[%s] - gpio %d, toggle %d, inverted %d",
leaf_name, (int )gpio, status ? 1 : 0,
inverted ? 1 : 0);
//update sensor using the parameter values
- if (gn_gpio_state == GN_GPIO_STATE_RUNNING) {
- gpio_set_level((int) gpio,
- status ?
- (inverted ? 0 : 1) :
- (inverted ? 1 : 0));
- }
+ gpio_set_level((int) gpio,
+ status ? (inverted ? 0 : 1) : (inverted ? 1 : 0));
#ifdef CONFIG_GROWNODE_DISPLAY_ENABLED
if (pdTRUE == gn_display_leaf_refresh_start()) {
@@ -310,17 +310,17 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
//what to do when network is disconnected
case GN_NET_DISCONNECTED_EVENT:
- gn_gpio_state = GN_GPIO_STATE_STOP;
+ //gn_gpio_state = GN_GPIO_STATE_STOP;
break;
//what to do when server is connected
case GN_SRV_CONNECTED_EVENT:
- gn_gpio_state = GN_GPIO_STATE_RUNNING;
+ //gn_gpio_state = GN_GPIO_STATE_RUNNING;
break;
//what to do when server is disconnected
case GN_SRV_DISCONNECTED_EVENT:
- gn_gpio_state = GN_GPIO_STATE_STOP;
+ //gn_gpio_state = GN_GPIO_STATE_STOP;
break;
default:
@@ -330,7 +330,8 @@ void gn_gpio_task(gn_leaf_handle_t leaf_config) {
}
- vTaskDelay(1000 / portTICK_PERIOD_MS);
+ //ESP_LOGD(TAG, "sleeping..");
+ //vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
diff --git a/components/grownode/leaves/gn_leaf_ina219.c b/components/grownode/leaves/gn_leaf_ina219.c
new file mode 100644
index 00000000..865bf7ab
--- /dev/null
+++ b/components/grownode/leaves/gn_leaf_ina219.c
@@ -0,0 +1,490 @@
+// Copyright 2021 Nicola Muratori (nicola.muratori@gmail.com)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef CONFIG_GROWNODE_DISPLAY_ENABLED
+/* Littlevgl specific */
+#ifdef LV_LVGL_H_INCLUDE_SIMPLE
+#include "lvgl.h"
+#else
+#include "lvgl/lvgl.h"
+#endif
+#include "lvgl_helpers.h"
+#endif
+
+#include "esp_log.h"
+
+#include "freertos/FreeRTOS.h"
+#include "freertos/task.h"
+#include "freertos/event_groups.h"
+#include "freertos/semphr.h"
+
+#include "driver/mcpwm.h"
+#include "soc/mcpwm_periph.h"
+
+#include "esp_netif.h"
+
+#include "lwip/err.h"
+#include "lwip/sockets.h"
+#include "lwip/sys.h"
+#include
+
+#include "ina219.h"
+
+#include "gn_commons.h"
+
+#include "gn_leaf_ina219.h"
+
+#define TAG "gn_leaf_ina219"
+
+#define I2C_PORT 0
+#define I2C_ADDR INA219_ADDR_GND_GND
+
+#define IP_STRING_SIZE 16
+
+typedef struct {
+ gn_leaf_param_handle_t gn_leaf_ina219_active_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_ip_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_port_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_sampling_cycles_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_sampling_interval_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_sda_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_scl_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_working_mode_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_power_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_voltage_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_shunt_voltage_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_bus_voltage_param;
+ gn_leaf_param_handle_t gn_leaf_ina219_current_param;
+ ina219_t dev;
+} gn_leaf_ina219_data_t;
+
+void gn_leaf_ina219_task(gn_leaf_handle_t leaf_config);
+
+gn_leaf_descriptor_handle_t gn_leaf_ina219_config(gn_leaf_handle_t leaf_config) {
+
+ ESP_LOGD(TAG, "ina219 configuring..");
+
+ gn_leaf_descriptor_handle_t descriptor =
+ (gn_leaf_descriptor_handle_t) malloc(sizeof(gn_leaf_descriptor_t));
+ strncpy(descriptor->type, GN_LEAF_INA219_TYPE, GN_LEAF_DESC_TYPE_SIZE);
+ descriptor->callback = gn_leaf_ina219_task;
+ descriptor->status = GN_LEAF_STATUS_NOT_INITIALIZED;
+
+ gn_leaf_ina219_data_t *data = malloc(sizeof(gn_leaf_ina219_data_t));
+
+ data->gn_leaf_ina219_active_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_ACTIVE, GN_VAL_TYPE_BOOLEAN, (gn_val_t ) { .b =
+ true }, GN_LEAF_PARAM_ACCESS_ALL,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, gn_validator_boolean);
+
+ data->gn_leaf_ina219_ip_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_IP, GN_VAL_TYPE_STRING, (gn_val_t ) { .s =
+ calloc(16, sizeof(char)) },
+ GN_LEAF_PARAM_ACCESS_ALL, GN_LEAF_PARAM_STORAGE_PERSISTED, NULL);
+
+ data->gn_leaf_ina219_port_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_PORT, GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d =
+ 8094 }, GN_LEAF_PARAM_ACCESS_ALL,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, gn_validator_double_positive);
+
+ data->gn_leaf_ina219_sampling_cycles_param = gn_leaf_param_create(
+ leaf_config, GN_LEAF_INA219_PARAM_SAMPLING_CYCLES,
+ GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d = 1 },
+ GN_LEAF_PARAM_ACCESS_ALL, GN_LEAF_PARAM_STORAGE_PERSISTED,
+ gn_validator_double_positive);
+
+ data->gn_leaf_ina219_sampling_interval_param = gn_leaf_param_create(
+ leaf_config, GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL,
+ GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d = 1000 },
+ GN_LEAF_PARAM_ACCESS_ALL, GN_LEAF_PARAM_STORAGE_PERSISTED,
+ gn_validator_double_positive);
+
+ data->gn_leaf_ina219_sda_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_SDA, GN_VAL_TYPE_DOUBLE,
+ (gn_val_t ) { .d = 26 }, GN_LEAF_PARAM_ACCESS_NODE_INTERNAL,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, gn_validator_double_positive);
+
+ data->gn_leaf_ina219_scl_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_SCL, GN_VAL_TYPE_DOUBLE,
+ (gn_val_t ) { .d = 27 }, GN_LEAF_PARAM_ACCESS_NODE_INTERNAL,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, gn_validator_double_positive);
+
+ data->gn_leaf_ina219_working_mode_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_WORKING_MODE, GN_VAL_TYPE_DOUBLE, (gn_val_t ) {
+ .d = 1 }, GN_LEAF_PARAM_ACCESS_ALL,
+ GN_LEAF_PARAM_STORAGE_PERSISTED, gn_validator_double_positive);
+
+ data->gn_leaf_ina219_power_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_POWER, GN_VAL_TYPE_DOUBLE,
+ (gn_val_t ) { .d = 0 }, GN_LEAF_PARAM_ACCESS_NETWORK,
+ GN_LEAF_PARAM_STORAGE_VOLATILE, NULL);
+
+ data->gn_leaf_ina219_voltage_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_VOLTAGE, GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d =
+ 0 }, GN_LEAF_PARAM_ACCESS_NETWORK,
+ GN_LEAF_PARAM_STORAGE_VOLATILE, NULL);
+
+ data->gn_leaf_ina219_bus_voltage_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_BUS_VOLTAGE, GN_VAL_TYPE_DOUBLE, (gn_val_t ) {
+ .d = 0 }, GN_LEAF_PARAM_ACCESS_NETWORK,
+ GN_LEAF_PARAM_STORAGE_VOLATILE, NULL);
+
+ data->gn_leaf_ina219_shunt_voltage_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_SHUNT_VOLTAGE, GN_VAL_TYPE_DOUBLE,
+ (gn_val_t ) { .d = 0 }, GN_LEAF_PARAM_ACCESS_NETWORK,
+ GN_LEAF_PARAM_STORAGE_VOLATILE, NULL);
+
+ data->gn_leaf_ina219_current_param = gn_leaf_param_create(leaf_config,
+ GN_LEAF_INA219_PARAM_CURRENT, GN_VAL_TYPE_DOUBLE, (gn_val_t ) { .d =
+ 0 }, GN_LEAF_PARAM_ACCESS_NETWORK,
+ GN_LEAF_PARAM_STORAGE_VOLATILE, NULL);
+
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_active_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_ip_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_port_param);
+ gn_leaf_param_add_to_leaf(leaf_config,
+ data->gn_leaf_ina219_sampling_cycles_param);
+ gn_leaf_param_add_to_leaf(leaf_config,
+ data->gn_leaf_ina219_sampling_interval_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_sda_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_scl_param);
+ gn_leaf_param_add_to_leaf(leaf_config,
+ data->gn_leaf_ina219_working_mode_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_voltage_param);
+ gn_leaf_param_add_to_leaf(leaf_config,
+ data->gn_leaf_ina219_bus_voltage_param);
+ gn_leaf_param_add_to_leaf(leaf_config,
+ data->gn_leaf_ina219_shunt_voltage_param);
+ gn_leaf_param_add_to_leaf(leaf_config, data->gn_leaf_ina219_current_param);
+
+ descriptor->status = GN_LEAF_STATUS_INITIALIZED;
+ descriptor->data = data;
+ return descriptor;
+
+}
+
+void gn_leaf_ina219_task(gn_leaf_handle_t leaf_config) {
+
+ char leaf_name[GN_LEAF_NAME_SIZE];
+ gn_leaf_get_name(leaf_config, leaf_name);
+
+ char node_name[GN_NODE_NAME_SIZE];
+ gn_node_get_name(gn_leaf_get_node(leaf_config), node_name);
+
+ ESP_LOGD(TAG, "[%s] - Initializing ..", leaf_name);
+
+ gn_leaf_parameter_event_t evt;
+
+ bool active = true;
+ gn_leaf_param_get_bool(leaf_config, GN_LEAF_INA219_PARAM_ACTIVE, &active);
+
+ char ip[IP_STRING_SIZE];
+ gn_leaf_param_get_string(leaf_config, GN_LEAF_INA219_PARAM_IP, ip,
+ IP_STRING_SIZE);
+
+ double port = 0;
+ gn_leaf_param_get_double(leaf_config, GN_LEAF_INA219_PARAM_PORT, &port);
+
+ double sampling_cycles = 0;
+ gn_leaf_param_get_double(leaf_config, GN_LEAF_INA219_PARAM_SAMPLING_CYCLES,
+ &sampling_cycles);
+
+ double sampling_interval = 0;
+ gn_leaf_param_get_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL, &sampling_interval);
+
+ double sda = 0;
+ gn_leaf_param_get_double(leaf_config, GN_LEAF_INA219_PARAM_SDA, &sda);
+
+ double scl = 0;
+ gn_leaf_param_get_double(leaf_config, GN_LEAF_INA219_PARAM_SCL, &scl);
+
+ double working_mode = 0;
+ gn_leaf_param_get_double(leaf_config, GN_LEAF_INA219_PARAM_WORKING_MODE,
+ &working_mode);
+
+ //retrieves status descriptor from config
+ gn_leaf_ina219_data_t *data =
+ (gn_leaf_ina219_data_t*) gn_leaf_get_descriptor(leaf_config)->data;
+
+ //setup driver
+ memset(&data->dev, 0, sizeof(ina219_t));
+
+ esp_err_t esp_ret;
+ esp_ret = ina219_init_desc(&data->dev, I2C_ADDR, I2C_PORT, (int) sda,
+ (int) scl);
+ ESP_LOGD(TAG, "ina219_init_desc (%d,%d,%d,%d): %s", I2C_ADDR, I2C_PORT,
+ (int )sda, (int )scl, esp_err_to_name(esp_ret));
+
+ esp_ret = ina219_init(&data->dev);
+ ESP_LOGD(TAG, "ina219_init: %s", esp_err_to_name(esp_ret));
+
+ esp_ret = ina219_configure(&data->dev, INA219_BUS_RANGE_16V,
+ INA219_GAIN_0_125, INA219_RES_12BIT_1S, INA219_RES_12BIT_1S,
+ INA219_MODE_CONT_SHUNT_BUS);
+ ESP_LOGD(TAG, "ina219_configure: %s", esp_err_to_name(esp_ret));
+
+ esp_ret = ina219_calibrate(&data->dev, 5.0, 0.1); // 5A max current, 0.1 Ohm shunt resistance
+
+ ESP_LOGD(TAG, "ina219_calibrate: %s", esp_err_to_name(esp_ret));
+
+ int addr_family = 0;
+ int ip_protocol = 0;
+
+ struct sockaddr_in dest_addr;
+ dest_addr.sin_addr.s_addr = inet_addr(ip);
+ dest_addr.sin_family = AF_INET;
+ dest_addr.sin_port = htons((uint16_t )port);
+ addr_family = AF_INET;
+ ip_protocol = IPPROTO_IP;
+
+ int sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
+ if (sock < 0) {
+ ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
+ }
+ ESP_LOGD(TAG, "Socket created, sending to %s:%d", ip, (int )port);
+
+ float bus_voltage = 0, shunt_voltage = 0, current = 0, power = 0;
+ float bus_voltage_instant = 0, shunt_voltage_instant = 0, current_instant =
+ 0, power_instant = 0;
+
+ char total_msg[255];
+
+//task cycle
+ while (true) {
+
+ //ESP_LOGD(TAG, "task cycle..");
+
+ //check for messages
+ if (xQueueReceive(gn_leaf_get_event_queue(leaf_config), &evt,
+ 0) == pdPASS) {
+
+ ESP_LOGD(TAG, "%s - received message: %d", leaf_name, evt.id);
+
+ //event arrived for this node
+ switch (evt.id) {
+
+ //parameter change
+ case GN_LEAF_PARAM_CHANGE_REQUEST_EVENT:
+
+ //parameter is update time
+ if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_active_param) == 0) {
+
+ //bool prev_active = active;
+ int _active = atoi(evt.data);
+
+ //execute change
+ gn_leaf_param_write_bool(leaf_config,
+ GN_LEAF_INA219_PARAM_ACTIVE,
+ _active == 0 ? false : true);
+
+ active = _active;
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_ip_param) == 0) {
+
+ //execute change
+ gn_leaf_param_write_string(leaf_config,
+ GN_LEAF_INA219_PARAM_IP, evt.data);
+ //strncpy(ip, evt.data, IP_STRING_SIZE-1);
+ memcpy(ip, evt.data, IP_STRING_SIZE - 1);
+ ip[15] = 0;
+
+ //restart messaging configuration
+ shutdown(sock, 0);
+ close(sock);
+
+ dest_addr.sin_addr.s_addr = inet_addr(ip);
+ dest_addr.sin_port = htons((uint16_t )port);
+ sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
+ if (sock < 0) {
+ ESP_LOGE(TAG, "Unable to create socket: errno %d",
+ errno);
+ }
+ ESP_LOGI(TAG, "Socket created, sending to %s:%d", ip,
+ (int )port);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_port_param) == 0) {
+
+ port = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_PORT, port);
+
+ //restart messaging configuration
+ shutdown(sock, 0);
+ close(sock);
+
+ dest_addr.sin_addr.s_addr = inet_addr(ip);
+ dest_addr.sin_port = htons((uint16_t )port);
+ sock = socket(addr_family, SOCK_DGRAM, ip_protocol);
+ if (sock < 0) {
+ ESP_LOGE(TAG, "Unable to create socket: errno %d",
+ errno);
+ }
+ ESP_LOGI(TAG, "Socket created, sending to %s:%d", ip,
+ (int )port);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_sampling_cycles_param) == 0) {
+
+ sampling_cycles = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SAMPLING_CYCLES,
+ sampling_cycles);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_sampling_interval_param) == 0) {
+
+ sampling_interval = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL,
+ sampling_interval);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_sda_param) == 0) {
+
+ sda = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SDA, sda);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_scl_param) == 0) {
+
+ scl = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SCL, scl);
+
+ } else if (gn_leaf_event_mask_param(&evt,
+ data->gn_leaf_ina219_working_mode_param) == 0) {
+
+ working_mode = atof(evt.data);
+ //execute change
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_WORKING_MODE, working_mode);
+
+ }
+
+ break;
+
+ default:
+ break;
+
+ }
+
+ }
+
+ if (active) {
+
+ bus_voltage = 0;
+ shunt_voltage = 0;
+ current = 0;
+ power = 0;
+
+ //ESP_LOGD(TAG,"start sampling");
+
+ //retrieve sensor info
+ //sampling configurable
+ for (int i = 0; i < sampling_cycles; i++) {
+
+ ESP_ERROR_CHECK(
+ ina219_get_bus_voltage(&data->dev,
+ &bus_voltage_instant));
+ bus_voltage += bus_voltage_instant;
+
+ ESP_ERROR_CHECK(
+ ina219_get_shunt_voltage(&data->dev,
+ &shunt_voltage_instant));
+ shunt_voltage += shunt_voltage_instant;
+
+ ESP_ERROR_CHECK(
+ ina219_get_current(&data->dev, ¤t_instant));
+ current += current_instant;
+
+ ESP_ERROR_CHECK(ina219_get_power(&data->dev, &power_instant));
+ power += power_instant;
+
+ vTaskDelay(pdMS_TO_TICKS(sampling_interval-0.5)); //0.6msec is the time needed to perform a 12bit measure 1 sample
+
+ }
+
+ //averaging
+ bus_voltage = (bus_voltage / (float) sampling_cycles) * 1000;
+ shunt_voltage = (shunt_voltage / (float) sampling_cycles) * 1000;
+ current = (current / (float) sampling_cycles) * 1000;
+ power = (power / (float) sampling_cycles) * 1000;
+
+ ESP_LOGD(TAG,
+ "VBUS: %.04f mV, VSHUNT: %.04f mV, IBUS: %.04f mA, PBUS: %.04f mW\n",
+ bus_voltage, shunt_voltage, current,
+ power);
+
+ if (working_mode == 0 || working_mode == 2) {
+ int err;
+
+ snprintf(total_msg, 255,
+ "grownode,node=%s,leaf=%s power=%f,current=%f,vbus=%f,vshunt=%f,vload=%f",
+ node_name, leaf_name, power, current,
+ bus_voltage, shunt_voltage,
+ (shunt_voltage + bus_voltage));
+
+ err = sendto(sock, total_msg, strlen(total_msg), 0,
+ (struct sockaddr*) &dest_addr, sizeof(dest_addr));
+ if (err < 0) {
+ ESP_LOGE(TAG, "Error occurred during sending: errno %d",
+ errno);
+ }
+ ESP_LOGD(TAG, "Message sent: %s to %s:%d", total_msg, ip,
+ (int )port);
+ }
+
+ if (working_mode == 1 || working_mode == 2) {
+
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_VOLTAGE,
+ (shunt_voltage + bus_voltage));
+
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_SHUNT_VOLTAGE, shunt_voltage);
+
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_BUS_VOLTAGE, bus_voltage);
+
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_POWER, power);
+
+ gn_leaf_param_write_double(leaf_config,
+ GN_LEAF_INA219_PARAM_CURRENT, current);
+
+ }
+
+ }
+
+ }
+
+}
+
+#ifdef __cplusplus
+}
+#endif //__cplusplus
diff --git a/components/grownode/leaves/gn_leaf_ina219.h b/components/grownode/leaves/gn_leaf_ina219.h
new file mode 100644
index 00000000..c1023115
--- /dev/null
+++ b/components/grownode/leaves/gn_leaf_ina219.h
@@ -0,0 +1,51 @@
+// Copyright 2021 Nicola Muratori (nicola.muratori@gmail.com)
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef MAIN_GN_LEAF_INA219_H_
+#define MAIN_GN_LEAF_INA219_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "grownode.h"
+
+//define type
+static const char GN_LEAF_INA219_TYPE[] = "ina219";
+
+//parameters
+static const char GN_LEAF_INA219_PARAM_ACTIVE[] = "active"; /*!< whether INA219 shall be enabled */
+static const char GN_LEAF_INA219_PARAM_IP[] = "ip"; /*!< ip address of the server */
+static const char GN_LEAF_INA219_PARAM_PORT[] = "port"; /*!< port of the server */
+static const char GN_LEAF_INA219_PARAM_SAMPLING_CYCLES[] = "samp_cycles"; /*!< sampling cycles */
+static const char GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL[] = "samp_interval"; /*!< sampling interval, (approx) in msec */
+static const char GN_LEAF_INA219_PARAM_SDA[] = "sda"; /*!< SDA PIN */
+static const char GN_LEAF_INA219_PARAM_SCL[] = "scl"; /*!< SCL PIN */
+static const char GN_LEAF_INA219_PARAM_WORKING_MODE[] = "working_mode"; /*!< 0 = through UDP via influxdb protocol, 1 = parameters, 2 both*/
+static const char GN_LEAF_INA219_PARAM_POWER[] = "power"; /*!< last power measured, in mW*/
+static const char GN_LEAF_INA219_PARAM_VOLTAGE[] = "voltage"; /*!< last voltage measured, in mV */
+static const char GN_LEAF_INA219_PARAM_SHUNT_VOLTAGE[] = "shunt_voltage"; /*!< last shunt voltage measured, in mV */
+static const char GN_LEAF_INA219_PARAM_BUS_VOLTAGE[] = "bus_voltage"; /*!< last bus voltage measured, in mV */
+static const char GN_LEAF_INA219_PARAM_CURRENT[] = "current"; /*!< last current measured, in mA */
+
+
+
+
+gn_leaf_descriptor_handle_t gn_leaf_ina219_config(gn_leaf_handle_t leaf_config);
+
+#ifdef __cplusplus
+}
+#endif //__cplusplus
+
+#endif /* MAIN_GN_LEAF_INA219_H_ */
diff --git a/components/grownode/test/test_ds18b20.c b/components/grownode/test/test_ds18b20.c
index a389a70d..d341b119 100644
--- a/components/grownode/test/test_ds18b20.c
+++ b/components/grownode/test/test_ds18b20.c
@@ -50,7 +50,7 @@ TEST_CASE("gn_init_add_ds18b20", "[ds18b20]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096);
+ ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
@@ -60,7 +60,7 @@ TEST_CASE("gn_init_add_ds18b20", "[ds18b20]") {
TEST_CASE("gn_leaf_create ds18b20", "[ds18b20]") {
size_t oldsize = gn_node_get_size(node_config);
- ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096);
+ ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), oldsize+1);
TEST_ASSERT(ds18b20_config != NULL);
@@ -78,7 +78,7 @@ TEST_CASE("gn_ds18b20_mqtt_stress_test", "[ds18b20]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096);
+ ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
diff --git a/components/grownode/test/test_pump.c b/components/grownode/test/test_pump.c
index 77e746d4..24a9afb7 100755
--- a/components/grownode/test/test_pump.c
+++ b/components/grownode/test/test_pump.c
@@ -52,7 +52,7 @@ TEST_CASE("gn_init_add_pump", "[pump]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096);
+ pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
@@ -62,7 +62,7 @@ TEST_CASE("gn_init_add_pump", "[pump]") {
TEST_CASE("gn_leaf_create pump", "[pump]") {
size_t oldsize = gn_node_get_size(node_config);
- pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096);
+ pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), oldsize + 1);
TEST_ASSERT(pump_config != NULL);
@@ -85,8 +85,8 @@ TEST_CASE("gn_receive_status_0", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -118,8 +118,8 @@ TEST_CASE("gn_receive_status_1", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -151,8 +151,8 @@ TEST_CASE("gn_receive_power_0", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -184,8 +184,8 @@ TEST_CASE("gn_receive_power_128", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -217,8 +217,8 @@ TEST_CASE("gn_receive_power_500", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -242,7 +242,7 @@ TEST_CASE("gn_pump_mqtt_stress_test", "[pump]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096);
+ pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
@@ -286,8 +286,8 @@ TEST_CASE("gn_pump_mqtt_stress_test", "[pump]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
ESP_LOGD(TAG, "sending command - topic %s, data %s", topic, data);
diff --git a/components/grownode/test/test_pump_control.c b/components/grownode/test/test_pump_control.c
index 54da71b9..fdffe838 100644
--- a/components/grownode/test/test_pump_control.c
+++ b/components/grownode/test/test_pump_control.c
@@ -59,19 +59,19 @@ TEST_CASE("gn_pump_control_stress_test", "[pump_control]") {
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096);
+ pump_config = gn_leaf_create(node_config, "pump", gn_pump_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
ds18b20_config = gn_leaf_create(node_config, "ds18b20", gn_ds18b20_config,
- 4096);
+ 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 2);
ds18b20_config = gn_leaf_create(node_config, "cwl",
- gn_capacitive_water_level_config, 8192);
+ gn_capacitive_water_level_config, 8192, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 3);
pump_control_config = gn_leaf_create(node_config, "pump_control",
- gn_pump_control_config, 4096);
+ gn_pump_control_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 4);
esp_err_t ret = gn_node_start(node_config);
diff --git a/components/grownode/test/test_relay.c b/components/grownode/test/test_relay.c
index c8a93d37..0b38167a 100644
--- a/components/grownode/test/test_relay.c
+++ b/components/grownode/test/test_relay.c
@@ -58,7 +58,7 @@ TEST_CASE("gn_init_add_relay", "[relay]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096);
+ relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
@@ -68,7 +68,7 @@ TEST_CASE("gn_init_add_relay", "[relay]") {
TEST_CASE("gn_leaf_create relay", "[relay]") {
size_t oldsize = gn_node_get_size(node_config);
- relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096);
+ relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), oldsize+1);
TEST_ASSERT(relay_config != NULL);
@@ -90,8 +90,8 @@ TEST_CASE("gn_receive_status_0", "[relay]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -122,8 +122,8 @@ TEST_CASE("gn_receive_status_1", "[relay]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
esp_event_base_t base = "base";
void *handler_args = 0;
@@ -150,7 +150,7 @@ TEST_CASE("gn_relay_mqtt_stress_test", "[relay]") {
gn_node_get_name(node_config, node_name);
TEST_ASSERT_EQUAL_STRING("node", node_name);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 0);
- relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096);
+ relay_config = gn_leaf_create(node_config, "relay", gn_gpio_config, 4096, 1);
TEST_ASSERT_EQUAL(gn_node_get_size(node_config), 1);
esp_err_t ret = gn_node_start(node_config);
TEST_ASSERT_EQUAL(ret, ESP_OK);
@@ -182,8 +182,8 @@ TEST_CASE("gn_relay_mqtt_stress_test", "[relay]") {
event->topic_len = strlen(topic);
event->data_len = strlen(data);
- strncpy(event->topic, topic, event->topic_len);
- strncpy(event->data, data, event->data_len);
+ strcpy(event->topic, topic);
+ strcpy(event->data, data);
ESP_LOGD(TAG, "sending command - topic %s, data %s", topic, data);
diff --git a/docs/boards/boards_oscilloscope.md b/docs/boards/boards_oscilloscope.md
new file mode 100644
index 00000000..a3ebc5f2
--- /dev/null
+++ b/docs/boards/boards_oscilloscope.md
@@ -0,0 +1,71 @@
+---
+hide:
+ - navigation
+---
+
+#Oscilloscope
+
+This is a board dedicated to measure current and power of a circuit using INA219, capable of transferring information to a Telegraf instance or via MQTT. I did it to probe other board power consumption in battery powered mode.
+
+##Features
+
+- Measuring current, voltage, power
+- Configurable sampling interval
+- Configurable number of samples to average per interval
+- Capable of transfer information to other reporting system via UDP using telegraf/influxdb
+
+Measurement Voltage 0V...26V
+Max Current 3.2A
+Max Power 83W
+Operation Voltage 3V...5.5V
+Communication Protocol I2C
+
+##Bill of Material
+
+- 1 [INA219 breakout board](https://it.aliexpress.com/item/1005001636648121.html?_randl_currency=EUR&_randl_shipto=IT&src=google&src=google&albch=shopping&acnt=631-313-3945&slnk=&plac=&mtctp=&albbt=Google_7_shopping&albagn=888888&isSmbActive=false&isSmbAutoCall=false&needSmbHouyi=false&albcp=15227475790&albag=129989760135&trgt=295988246616&crea=it1005001636648121&netw=u&device=c&albpg=295988246616&albpd=it1005001636648121&gclid=CjwKCAiAprGRBhBgEiwANJEY7CEH4F93zjJuso7mPsIiMDksqkgVWJ3XkpnOwNQi1BoqJuPTu2BkWhoCQ5EQAvD_BwE&gclsrc=aw.ds&aff_fcid=6af9e4ff550e4d83a24f6555c830d339-1647082489716-01285-UneMJZVf&aff_fsk=UneMJZVf&aff_platform=aaf&sk=UneMJZVf&aff_trace_key=6af9e4ff550e4d83a24f6555c830d339-1647082489716-01285-UneMJZVf&terminal_id=676d2c3560864e039f8e8255ccf6e8cf&afSmartRedirect=y)
+- [breadboard and wires](https://it.aliexpress.com/item/4000805673115.html?spm=a2g0o.productlist.0.0.13c056a4HYIA1P&algo_pvid=3b89dd30-2e62-4c5e-9f47-a3d1ba448ff9&aem_p4p_detail=20220116111751259270886284480019365032&algo_exp_id=3b89dd30-2e62-4c5e-9f47-a3d1ba448ff9-14&pdp_ext_f=%7B%22sku_id%22%3A%2210000008092850406%22%7D&pdp_pi=-1%3B0.87%3B-1%3BEUR+0.59%40salePrice%3BEUR%3Bsearch-mainSearch)
+
+##Assembling
+
+- Wire your ESP32 to breadboard GND and 3V3
+- Wire your INA219 as per the table
+
+| ESP32 | INA219 |
+| ----------- | ----------- |
+| GND | GND |
+| 5V | VCC |
+| 27 | SCL |
+| 26 | SDA |
+
+![oscilloscope wiring](../../resources/images/oscilloscope_wiring.png)
+
+- Wire your load to be measured to VIN+ and VIN- as per the figure
+
+![oscilloscope load](../../resources/images/oscilloscope_load.png)
+
+##Code
+
+The configuration code, other than `main\main.c` is contained in `components\grownode\boards\oscilloscope.c`. The code is meant to be basic in order to give you some training to basic features.
+
+### The Main
+
+You just need to 'load' the board into the firmware
+
+- add an `include "oscilloscope.h"` directive on the header declarations
+- change the configuration row from the standard `gn_configure_blink(node)` to `gn_configure_oscilloscope(node)`
+
+This will tell the compiler to load the easypot1 code into the firmware upon the next build.
+
+### Playing with code
+
+See the [INA219 leaf reference doc](resources/leaves_list/ina219) to understand how to configure and play with parameters
+
+### Creating a full monitoring system
+
+TODO
+
+### Final Result
+
+Here's a quick demo I did while testing:
+
+
diff --git a/docs/boards/index.md b/docs/boards/index.md
index 4842a275..adce4805 100644
--- a/docs/boards/index.md
+++ b/docs/boards/index.md
@@ -38,4 +38,10 @@ It has an onboard logic to keep the reservoir at desired temperature prior to wa
the board is powered with 220V - 12V 10A power adaptor so it can manage quite a lot of power consumption
-[Board Detail](boards_hb2.md)
\ No newline at end of file
+[Board Detail](boards_hb2.md)
+
+##Oscilloscope
+
+This is a board dedicated to measure current and power of a circuit using INA219, capable of transferring information to a Telegraf instance or via MQTT. I did it to probe other board power consumption in battery powered mode.
+
+[Board Detail](boards_oscilloscope.md)
\ No newline at end of file
diff --git a/docs/reference/leaves_list/ina219.md b/docs/reference/leaves_list/ina219.md
new file mode 100644
index 00000000..586baeb9
--- /dev/null
+++ b/docs/reference/leaves_list/ina219.md
@@ -0,0 +1,56 @@
+
+# INA219
+
+This leaf controls a INA219 current/voltage sensor through I2C protocol.
+
+It is useful when you need control over an electrical load or when running with batteries and you need to measure the battery status.
+
+It can also be used to build an oscilloscope.
+
+## Functionalities
+
+It collects measurements from sensor for `samp_cycles` cycles waiting each cycle a `samp_interval`. After this collection time, it computes the average measure and updates the final value.
+
+This leaf can be used in two ways through the `working_mode` parameter:
+
+- sending measurement to a telegraf server, in influxdb protocol through UDP. This is useful if you want to analyze metrics through influxdb or eg. directly connected to a grafana server
+
+- using internal parameters to store measured values
+
+## Parameters
+
+| name | description | type | default | access | storage | valid values |
+| ----------- | ---------------------------------------- | ------------ | --------- | ------------- | --------- | ---------- |
+| active | whether INA219 shall be enabled | boolean | true | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | true/false |
+| ip | ip address of the server | string | null | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | 16 char array |
+| port | port of the server | double | 8094 | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | true/false |
+| samp_cycles | sampling cycles | double | 1 | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | positive double |
+| samp_interval | sampling interval, (approx) in msec | double | 1000 | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | positive double |
+| sda | SDA PIN | double | 26 | GN_LEAF_PARAM_ACCESS_NODE_INTERNAL | GN_LEAF_PARAM_STORAGE_PERSISTED | positive double |
+| scl | SCL PIN | double | 26 | GN_LEAF_PARAM_ACCESS_NODE_INTERNAL | GN_LEAF_PARAM_STORAGE_PERSISTED | positive double |
+| working_mode | 0 = through UDP via influxdb protocol, 1 = parameters, 2 both | double | 1 | GN_LEAF_PARAM_ACCESS_ALL | GN_LEAF_PARAM_STORAGE_PERSISTED | double positive |
+| power | last power measured, in mW | double | 0 | GN_LEAF_PARAM_ACCESS_NETWORK | GN_LEAF_PARAM_STORAGE_VOLATILE | any |
+| voltage | last voltage measured, in mV | double | 0 | GN_LEAF_PARAM_ACCESS_NETWORK | GN_LEAF_PARAM_STORAGE_VOLATILE | any |
+| shunt_voltage | last shunt voltage measured, in mV | double | 0 | GN_LEAF_PARAM_ACCESS_NETWORK | GN_LEAF_PARAM_STORAGE_VOLATILE | any |
+| bus_voltage | last bus voltage measured, in mV | double | 0 | GN_LEAF_PARAM_ACCESS_NETWORK | GN_LEAF_PARAM_STORAGE_VOLATILE | any |
+| current | last current measured, in mA | double | 0 | GN_LEAF_PARAM_ACCESS_NETWORK | GN_LEAF_PARAM_STORAGE_VOLATILE | any |
+
+## Example
+
+```
+ gn_leaf_handle_t ina219 = gn_leaf_create(node, "ina219", gn_leaf_ina219_config, 8192, GN_LEAF_TASK_PRIORITY);
+ gn_leaf_param_init_bool(ina219, GN_LEAF_INA219_PARAM_ACTIVE, true);
+
+ char* ip = calloc(16, sizeof(char));
+ strncpy(ip, "192.168.1.20", 16);
+
+ gn_leaf_param_init_string(ina219, GN_LEAF_INA219_PARAM_IP, ip);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_PORT, 8094);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SAMPLING_CYCLES, 5);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SAMPLING_INTERVAL, 10);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SDA, 26);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_SCL, 27);
+ gn_leaf_param_init_double(ina219, GN_LEAF_INA219_PARAM_WORKING_MODE, 1);
+
+```
+
diff --git a/docs/reference/mqtt.md b/docs/reference/mqtt.md
index c418f70a..2e8133a5 100644
--- a/docs/reference/mqtt.md
+++ b/docs/reference/mqtt.md
@@ -150,7 +150,7 @@ Parameters involved in the configuration are described in `gn_config_init_param_
### OTA message
-This message informs the node to upload the firmware from the config specified URL.
+This message informs the node to upload the firmware from the config specified URL. This message can be sent also with retained flag = true, and will be resetted by the board upon processing. This in order to call the functionality even if waking up from deep sleep
| From | To |
| ----------- | ----------- |
@@ -176,7 +176,7 @@ This gives the confirmation the OTA message has been processed and the OTA is in
### Reboot message
-This message tells the node to reboot
+This message tells the node to reboot. This message can be sent also with retained flag = true, and will be resetted by the board upon processing. This in order to call the functionality even if waking up from deep sleep
| From | To |
| ----------- | ----------- |
@@ -202,7 +202,7 @@ This gives the confirmation the reboot message has been processed and the board
### Reset message
-This message tells the node to reset the NVS. This will bring to the initial configuration, including provisioning.
+This message tells the node to reset the NVS. This will bring to the initial configuration, including provisioning. This message can be sent also with retained flag = true, and will be resetted by the board upon processing. This in order to call the functionality even if waking up from deep sleep
| From | To |
| ----------- | ----------- |
diff --git a/docs/reference/power_management.md b/docs/reference/power_management.md
new file mode 100644
index 00000000..fd421cc7
--- /dev/null
+++ b/docs/reference/power_management.md
@@ -0,0 +1,36 @@
+
+# Sleep Modes
+
+GrowNode implements Deep and Light sleep functionalities. These are useful to save energy when no active actions are needed and let the board be battery powered.
+
+In order to understand basic sleep mode functionalities, please refer to [ESP32 reference guide](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html)
+
+## Configuration
+
+Sleep management is configured in init parameters:
+
+```
+ gn_config_init_param_t config_init = {
+ ...
+ .wakeup_time_millisec = 5000LL,
+ .sleep_delay_millisec = 50LL,
+ .sleep_time_millisec = 120000LL,
+ .sleep_mode = GN_SLEEP_MODE_DEEP
+ };
+
+```
+
+Main parameters are:
+ - `gn_sleep_mode_t sleep_mode` - define if and how the board must sleep. possible values are GN_SLEEP_MODE_NONE (never sleeps), GN_SLEEP_MODE_LIGHT (light sleep), GN_SLEEP_MODE_DEEP (deep sleep)
+ - `uint64_t wakeup_time_millisec` - if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must stay on (counted from boot)
+ - `uint64_t sleep_time_millisec` - if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must sleep
+ - `uint64_t sleep_delay_millisec` - if sleep mode is GN_SLEEP_MODE_LIGHT or GN_SLEEP_MODE_DEEP, sets for how long the board must stay on waiting for leaves to complete its job before sleeping
+
+## Sleep start cycle (automatic)
+
+In light and deep sleep mode, a timer sets until when the board must stay on. Upon timeout, the board sends to its leaves a GN_NODE_LIGHT_SLEEP_START_EVENT o GN_NODE_DEEP_SLEEP_START_EVENT. This allows the leaves to perform housekeeping work in preparation to sleep. Then, waits for `sleep_delay_millisec`. After this time, its starts checking whether leaves are still working. Once all leaves are in blocking status if releases the MQTT and WIFI connection and start the sleep cycle for `sleep_time_millisec`.
+
+## Manual sleep cycle management
+
+If you want to sleep the board directly from your code, you can use the `gn_err_t gn_node_sleep(gn_node_handle_t node, gn_sleep_mode_t sleep_mode, uint64_t delay_msec, uint64_t millisec)` function. It starts the same cycle called in automatic mode.
+
diff --git a/docs/resources/images/oscilloscope_load.png b/docs/resources/images/oscilloscope_load.png
new file mode 100644
index 00000000..662daa07
Binary files /dev/null and b/docs/resources/images/oscilloscope_load.png differ
diff --git a/docs/resources/images/oscilloscope_wiring.png b/docs/resources/images/oscilloscope_wiring.png
new file mode 100644
index 00000000..c7cbed52
Binary files /dev/null and b/docs/resources/images/oscilloscope_wiring.png differ
diff --git a/ext/esp-idf-lib b/ext/esp-idf-lib
index 3147b587..3817d937 160000
--- a/ext/esp-idf-lib
+++ b/ext/esp-idf-lib
@@ -1 +1 @@
-Subproject commit 3147b5878bf9ae41f358ef542bf55c60a546ed53
+Subproject commit 3817d937f6cc41803133b030b687fb5c1732fee4
diff --git a/main/main.c b/main/main.c
index dafc9c7c..0742450d 100644
--- a/main/main.c
+++ b/main/main.c
@@ -22,14 +22,24 @@
#include "grownode.h"
//include the board you want to start here
-#include "gn_blink.h"
+#include "gn_oscilloscope.h"
+#include "gn_easypot1.h"
#define TASK_STACK_SIZE 8192*4
#define TAG "gn_main"
+#include "esp_check.h"
+
+//switch from LOGI to LOGD
+//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
+#include "esp_log.h"
+
+
void app_main(void) {
+ //vTaskDelay(5000 / portTICK_PERIOD_MS);
+
//set default log level
esp_log_level_set("*", ESP_LOG_INFO);
@@ -40,25 +50,30 @@ void app_main(void) {
esp_log_level_set("grownode", ESP_LOG_INFO);
esp_log_level_set("gn_commons", ESP_LOG_INFO);
esp_log_level_set("gn_nvs", ESP_LOG_INFO);
- esp_log_level_set("gn_mqtt_protocol", ESP_LOG_DEBUG);
+ esp_log_level_set("gn_mqtt_protocol", ESP_LOG_INFO);
esp_log_level_set("gn_network", ESP_LOG_INFO);
esp_log_level_set("gn_display", ESP_LOG_INFO);
//boards
- esp_log_level_set("gn_blink", ESP_LOG_INFO);
+ esp_log_level_set("gn_oscilloscope", ESP_LOG_INFO);
+ esp_log_level_set("gn_easypot1", ESP_LOG_DEBUG);
gn_config_init_param_t config_init = {
.provisioning_security = true,
.provisioning_password = "grownode",
.wifi_retries_before_reset_provisioning = 5,
.server_board_id_topic = false,
- .server_base_topic = "/grownode/test",
- .server_url = "mqtt://192.168.1.170:1883",
- .server_keepalive_timer_sec = 60,
+ .server_base_topic = "grownode",
+ .server_url = "mqtt://192.168.1.10:1883",
+ .server_keepalive_timer_sec = 3600,
.server_discovery = false,
.server_discovery_prefix = "homeassistant",
- .firmware_url = "http://myserver/myfirmware.bin",
- .sntp_url = "pool.ntp.org"
+ .firmware_url = "http://grownode.duckdns.org/grownode/oscilloscope/grownode.bin",
+ .sntp_url = "pool.ntp.org",
+ .wakeup_time_millisec = 5000LL,
+ .sleep_delay_millisec = 50LL,
+ .sleep_time_millisec = 10000LL,
+ .sleep_mode = GN_SLEEP_MODE_NONE
};
//creates the config handle
@@ -72,19 +87,17 @@ void app_main(void) {
}
//creates a new node
- gn_node_handle_t node = gn_node_create(config, "node");
+ gn_node_handle_t node = gn_node_create(config, "oscilloscope");
//the board to start
- gn_configure_blink(node);
+ gn_configure_oscilloscope(node);
+ //gn_configure_easypot1(node);
//finally, start node
gn_node_start(node);
- while (true) {
- vTaskDelay(10000 / portTICK_PERIOD_MS);
- ESP_LOGD(TAG, "grownode startup status: %s",
- gn_get_status_description(config));
- }
+ //handles loop
+ gn_node_loop(node);
}
diff --git a/mkdocs.yml b/mkdocs.yml
index a7b3f666..4005d282 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -24,6 +24,7 @@ nav:
- EasyPot1: 'boards/boards_easypot1.md'
- HydroBoard1: 'boards/boards_hb1.md'
- HydroBoard2: 'boards/boards_hb2.md'
+ - Oscilloscope: 'boards/oscilloscope.md'
- Reference Guide:
- 'reference/index.md'
- 'reference/node.md'
@@ -32,10 +33,12 @@ nav:
- Standard Leaves:
- 'reference/leaves_list/index.md'
- 'reference/leaves_list/bme280.md'
+ - 'reference/leaves_list/ina219.md'
- 'reference/boards.md'
- 'reference/events.md'
- 'reference/networking.md'
- 'reference/mqtt.md'
+ - 'reference/power_management.md'
- 'reference/display.md'
- 'reference/logging.md'
- 'reference/error.md'