Copy disabled (too large)
Download .txt
Showing preview only (16,888K chars total). Download the full file to get everything.
Repository: cesanta/mongoose
Branch: master
Commit: 60fe56784546
Files: 3936
Total size: 95.8 MB
Directory structure:
gitextract_74yoxmoz/
├── .clang-format
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── config.yml
│ │ └── issue.md
│ └── workflows/
│ ├── cifuzz.yml
│ ├── codeql.yml
│ ├── fuzz.yml
│ ├── nightly.yml
│ ├── nightly_tests.yml
│ ├── on_demand.yml
│ ├── quicktest.yml
│ ├── test.yml
│ └── zephyr.yml
├── LICENSE
├── README.md
├── mongoose.c
├── mongoose.h
├── src/
│ ├── arch.h
│ ├── arch_armcgt.h
│ ├── arch_armgcc.h
│ ├── arch_cube.h
│ ├── arch_esp32.h
│ ├── arch_esp8266.h
│ ├── arch_freertos.h
│ ├── arch_picosdk.h
│ ├── arch_rtthread.h
│ ├── arch_rtx.h
│ ├── arch_threadx.h
│ ├── arch_tirtos.h
│ ├── arch_unix.h
│ ├── arch_win32.h
│ ├── arch_zephyr.h
│ ├── base64.c
│ ├── base64.h
│ ├── config.h
│ ├── dns.c
│ ├── dns.h
│ ├── drivers/
│ │ ├── cmsis.c
│ │ ├── cmsis.h
│ │ ├── cyw.c
│ │ ├── cyw.h
│ │ ├── imxrt.c
│ │ ├── imxrt.h
│ │ ├── nxp_wifi.c
│ │ ├── nxp_wifi.h
│ │ ├── phy.c
│ │ ├── phy.h
│ │ ├── pico-w.c
│ │ ├── pico-w.h
│ │ ├── ppp.c
│ │ ├── ppp.h
│ │ ├── ra.c
│ │ ├── ra.h
│ │ ├── rw612.c
│ │ ├── rw612.h
│ │ ├── same54.c
│ │ ├── same54.h
│ │ ├── sdio.c
│ │ ├── sdio.h
│ │ ├── st67w6.c
│ │ ├── st67w6.h
│ │ ├── stm32f.c
│ │ ├── stm32f.h
│ │ ├── stm32h.c
│ │ ├── stm32h.h
│ │ ├── tm4c.c
│ │ ├── tm4c.h
│ │ ├── tms570.c
│ │ ├── tms570.h
│ │ ├── w5100.c
│ │ ├── w5500.c
│ │ ├── xmc.c
│ │ ├── xmc.h
│ │ ├── xmc7.c
│ │ └── xmc7.h
│ ├── event.c
│ ├── event.h
│ ├── flash.c
│ ├── flash.h
│ ├── fmt.c
│ ├── fmt.h
│ ├── fs.c
│ ├── fs.h
│ ├── fs_fat.c
│ ├── fs_packed.c
│ ├── fs_posix.c
│ ├── http.c
│ ├── http.h
│ ├── iobuf.c
│ ├── iobuf.h
│ ├── json.c
│ ├── json.h
│ ├── l2.c
│ ├── l2.h
│ ├── l2_eth.c
│ ├── l2_ppp.c
│ ├── license.h
│ ├── log.c
│ ├── log.h
│ ├── md5.c
│ ├── md5.h
│ ├── mqtt.c
│ ├── mqtt.h
│ ├── net.c
│ ├── net.h
│ ├── net_builtin.c
│ ├── net_builtin.h
│ ├── net_ft.h
│ ├── net_lwip.h
│ ├── net_rl.h
│ ├── ota.h
│ ├── ota_ch32v307.c
│ ├── ota_dummy.c
│ ├── ota_esp32.c
│ ├── ota_imxrt.c
│ ├── ota_mcxn.c
│ ├── ota_picosdk.c
│ ├── ota_rw612.c
│ ├── ota_stm32f.c
│ ├── ota_stm32h5.c
│ ├── ota_stm32h7.c
│ ├── printf.c
│ ├── printf.h
│ ├── profile.h
│ ├── queue.c
│ ├── queue.h
│ ├── rpc.c
│ ├── rpc.h
│ ├── sha1.c
│ ├── sha1.h
│ ├── sha256.c
│ ├── sha256.h
│ ├── sntp.c
│ ├── sntp.h
│ ├── sock.c
│ ├── ssi.c
│ ├── ssi.h
│ ├── str.c
│ ├── str.h
│ ├── timer.c
│ ├── timer.h
│ ├── tls.h
│ ├── tls_aes128.c
│ ├── tls_aes128.h
│ ├── tls_builtin.c
│ ├── tls_chacha20.c
│ ├── tls_chacha20.h
│ ├── tls_dummy.c
│ ├── tls_mbed.c
│ ├── tls_mbed.h
│ ├── tls_openssl.c
│ ├── tls_openssl.h
│ ├── tls_rsa.c
│ ├── tls_rsa.h
│ ├── tls_uecc.c
│ ├── tls_uecc.h
│ ├── tls_x25519.c
│ ├── tls_x25519.h
│ ├── url.c
│ ├── url.h
│ ├── util.c
│ ├── util.h
│ ├── version.h
│ ├── wifi.h
│ ├── wifi_dummy.c
│ ├── ws.c
│ └── ws.h
├── test/
│ ├── Makefile
│ ├── arduino/
│ │ └── Makefile
│ ├── certs/
│ │ ├── ca.crt
│ │ ├── ca.key
│ │ ├── ca.srl
│ │ ├── client.crt
│ │ ├── client.csr
│ │ ├── client.key
│ │ ├── generate.sh
│ │ ├── server.crt
│ │ ├── server.csr
│ │ └── server.key
│ ├── cgt+make/
│ │ └── Makefile
│ ├── configs/
│ │ └── mongoose_config_full.h
│ ├── cube/
│ │ └── Makefile
│ ├── data/
│ │ ├── ..ddot/
│ │ │ └── index.html
│ │ ├── 404.html
│ │ ├── a.txt
│ │ ├── ca.pem
│ │ ├── dredir/
│ │ │ └── index.html
│ │ ├── e8.crt
│ │ ├── empty.js
│ │ ├── gzip.txt
│ │ ├── index.html
│ │ ├── range.txt
│ │ ├── secret/
│ │ │ └── secret.txt
│ │ ├── ss_ca.pem
│ │ ├── ss_client.pem
│ │ ├── ss_server.pem
│ │ ├── ssi/
│ │ │ ├── f1.txt
│ │ │ ├── index.shtml
│ │ │ ├── nested.shtml
│ │ │ └── recurse.shtml
│ │ ├── ws.hex
│ │ └── київ.txt
│ ├── dhcpd.conf
│ ├── driver_mock.c
│ ├── esp-idf/
│ │ └── Makefile
│ ├── fuzz.c
│ ├── fuzz_tls.c
│ ├── ga_docker_daemon.json
│ ├── gcc+make/
│ │ └── Makefile
│ ├── health.awk
│ ├── health.sh
│ ├── keil/
│ │ ├── Clean
│ │ ├── Makefile
│ │ ├── uniclean.bat
│ │ └── unitest.bat
│ ├── match_changed_files.sh
│ ├── mip_curl.sh
│ ├── mip_port_test.c
│ ├── mip_tap_test.c
│ ├── mip_test.c
│ ├── mip_x_test.c
│ ├── mongoose_custom.c
│ ├── mosquitto.conf
│ ├── mosquitto.conf.macos
│ ├── pack.c
│ ├── pack.js
│ ├── pico-sdk/
│ │ └── Makefile
│ ├── port_tap_bridge.c
│ ├── setup_ga_docker_filesystem.sh
│ ├── setup_ga_network.sh
│ ├── setup_mqtt_server.sh
│ ├── tls_multirec/
│ │ ├── Makefile
│ │ ├── main.c
│ │ ├── mongoose.h
│ │ ├── patched_mongoose.c
│ │ └── tls_multirec.diff
│ ├── unit_test.c
│ ├── wizard/
│ │ ├── Makefile
│ │ └── test.sh
│ ├── xpresso/
│ │ └── Makefile
│ └── zephyr/
│ └── Makefile
└── tutorials/
├── README.md
├── core/
│ ├── README.md
│ ├── embedded-filesystem/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── packed_fs.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── memory/
│ │ └── o1heap/
│ │ ├── Makefile
│ │ └── main.c
│ ├── multi-threaded/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── multi-threaded-12m/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── timers/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── web_root/
│ └── index.html
├── http/
│ ├── README.md
│ ├── device-dashboard/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── certs/
│ │ │ ├── server_cert.pem
│ │ │ └── server_key.pem
│ │ ├── esp32/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── main/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── main.c
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── wifi.c
│ │ │ ├── partitions.csv
│ │ │ └── sdkconfig.defaults
│ │ ├── main.c
│ │ ├── mbedtls_config.h
│ │ ├── microchip/
│ │ │ └── same54-xpro/
│ │ │ ├── Makefile
│ │ │ ├── hal.h
│ │ │ ├── link.ld
│ │ │ ├── main.c
│ │ │ ├── startup.c
│ │ │ └── syscalls.c
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── pack.js
│ │ ├── packed_fs.c
│ │ ├── tailwind.config.js
│ │ └── web_root/
│ │ ├── bundle.js
│ │ ├── components.js
│ │ ├── index.html
│ │ └── main.js
│ ├── file-transfer/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── client.c
│ │ ├── server.c
│ │ ├── upload/
│ │ │ └── README.md
│ │ └── web_root/
│ │ └── index.html
│ ├── file-upload-html-form/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── file-upload-multiple-posts/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── app.js
│ │ └── index.html
│ ├── file-upload-single-post/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── http-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── esp8266/
│ │ │ └── http-client-server/
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ └── src/
│ │ │ ├── Makefile
│ │ │ ├── main/
│ │ │ │ ├── component.mk
│ │ │ │ ├── main.c
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── wifi.c
│ │ │ └── sdkconfig
│ │ ├── main.c
│ │ └── packed_fs.c
│ ├── http-proxy-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── http-restful-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── server.pem
│ ├── http-reverse-proxy/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── http-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── arduino/
│ │ │ ├── esp32-http/
│ │ │ │ ├── esp32-http.ino
│ │ │ │ └── mongoose_config.h
│ │ │ ├── teensy41-http/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── teensy41-http.ino
│ │ │ └── w5500-http/
│ │ │ ├── mongoose_config.h
│ │ │ └── w5500-http.ino
│ │ ├── ca.pem
│ │ ├── crt.pem
│ │ ├── key.pem
│ │ └── main.c
│ ├── http-streaming-client/
│ │ ├── Makefile
│ │ └── main.c
│ ├── huge-response/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── redirect-to-https/
│ │ ├── Makefile
│ │ └── main.c
│ ├── singleton-client/
│ │ ├── Makefile
│ │ └── main.c
│ ├── uart-bridge/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── esp32/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── main/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── cli.c
│ │ │ │ ├── main.c
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── uart.c
│ │ │ │ └── wifi.c
│ │ │ ├── make
│ │ │ ├── partitions.csv
│ │ │ └── sdkconfig.defaults
│ │ ├── main.c
│ │ ├── net.c
│ │ ├── packed_fs.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── video-stream/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ └── wifi-router-dashboard/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ ├── net.c
│ ├── net.h
│ ├── packed_fs.c
│ ├── tailwind.config.js
│ └── web_root/
│ └── main.js
├── infineon/
│ ├── xmc47_relax-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── xmc72_evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── xmc_plt2go_4400-make-baremetal-builtin/
│ ├── Makefile
│ └── README.md
├── micropython/
│ ├── Makefile
│ ├── README.md
│ ├── esp32/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mongoose/
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── main.py
│ └── mongoose/
│ ├── main.c
│ ├── micropython.cmake
│ ├── micropython.mk
│ └── module.c
├── mqtt/
│ ├── README.md
│ ├── mqtt-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── arduino/
│ │ │ ├── esp32-mqtt/
│ │ │ │ ├── esp32-mqtt.ino
│ │ │ │ └── mongoose_config.h
│ │ │ ├── nano-w5500-mqtt/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── w5500-mqtt.ino
│ │ │ ├── sim800-mqtt/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── sim800-mqtt.ino
│ │ │ └── w5500-mqtt/
│ │ │ ├── mongoose_config.h
│ │ │ └── w5500-mqtt.ino
│ │ ├── main.c
│ │ └── microchip/
│ │ └── same54-xpro/
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── startup.c
│ │ └── syscalls.c
│ ├── mqtt-client-aws-iot/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mqtt-dashboard/
│ │ ├── Makefile
│ │ ├── dashboard/
│ │ │ ├── Makefile
│ │ │ ├── bundle.js
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ └── tailwind.config.js
│ │ └── device/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.c
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── net.c
│ │ └── net.h
│ ├── mqtt-over-ws-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mqtt-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── ota-over-mqtt/
│ ├── Makefile
│ └── main.c
├── nxp/
│ ├── frdm-mcxn947-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-xpresso-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-xpresso-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-rw612-xpresso-freertos-builtin-wifi/
│ │ ├── .cproject
│ │ ├── .default_mex
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ ├── Debug/
│ │ │ ├── frdm-rw612-xpresso-freertos-builtin_Debug.ld
│ │ │ ├── frdm-rw612-xpresso-freertos-builtin_Debug_library.ld
│ │ │ └── frdm-rw612-xpresso-freertos-builtin_Debug_memory.ld
│ │ ├── README.md
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── conn_fwloader/
│ │ │ │ ├── fsl_loader.c
│ │ │ │ ├── fsl_loader_utils.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── api_tree_root.h
│ │ │ │ │ ├── fsl_loader.h
│ │ │ │ │ ├── fsl_loader_utils.h
│ │ │ │ │ ├── fusemap.h
│ │ │ │ │ ├── life_cycle.h
│ │ │ │ │ └── nboot_rom_api_table.h
│ │ │ │ ├── life_cycle.c
│ │ │ │ ├── nboot_hal.c
│ │ │ │ └── readme.txt
│ │ │ ├── els_pkc/
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClMemory_ClearSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Clear_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareDPASecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Compare_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecurePow2_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopyWords_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_SetSecure_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClMemory_Set_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_SecureCompare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Internal_SecureCompare_Stub.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ ├── platform_specific_headers.h
│ │ │ │ └── readme.txt
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_config.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ └── AzureWave/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ ├── mflash_file.h
│ │ │ └── readme.txt
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── frdm-rw612-xpresso-freertos-builtin JLink Debug.launch
│ │ ├── frdm-rw612-xpresso-freertos-builtin.mex
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── newlib-freertos.h
│ │ │ │ ├── picolibc-freertos.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ ├── heap_3.c
│ │ │ │ │ └── heap_4.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_rodata.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── app_config.h
│ │ │ ├── main.c
│ │ │ ├── mongoose_config.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_memcpy.S
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── netif_mongoose.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── frdm-rw612-xpresso-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── m-profile/
│ │ │ │ ├── armv8m_mpu.h
│ │ │ │ └── cmsis_gcc_m.h
│ │ │ └── tz_context.h
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ └── clock_config.h
│ │ ├── component/
│ │ │ ├── els_pkc/
│ │ │ │ ├── includes/
│ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ └── platform/
│ │ │ │ │ └── rw61x/
│ │ │ │ │ ├── mcuxClAeadModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClCipherModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClEcc_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHashModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHash_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHmac_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClKey_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClMacModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClRandomModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClRsa_MemoryConsumption.h
│ │ │ │ │ └── mcuxClSession_MemoryConsumption.h
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ └── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity32.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ └── platform_specific_headers.h
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ ├── AzureWave/
│ │ │ │ └── tx_pwr_limits/
│ │ │ │ ├── wlan_txpwrlimit_cfg_WW.h
│ │ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ │ ├── Murata/
│ │ │ │ └── tx_pwr_limits/
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_1XK_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_1ZM_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_2DS_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_2EL_WW.h
│ │ │ │ └── wlan_txpwrlimit_cfg_murata_NH_FCC.h
│ │ │ ├── incl/
│ │ │ │ └── wifi_bt_module_config.h
│ │ │ └── u-blox/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_jody_w5_WW.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_COMMON.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── periph/
│ │ │ │ ├── PERI_ACOMP.h
│ │ │ │ ├── PERI_ADC.h
│ │ │ │ ├── PERI_AHB_SECURE_CTRL.h
│ │ │ │ ├── PERI_AON_SOC_CIU.h
│ │ │ │ ├── PERI_APU.h
│ │ │ │ ├── PERI_BG.h
│ │ │ │ ├── PERI_BLEAPU.h
│ │ │ │ ├── PERI_BUCK11.h
│ │ │ │ ├── PERI_BUCK18.h
│ │ │ │ ├── PERI_CACHE64_CTRL.h
│ │ │ │ ├── PERI_CACHE64_POLSEL.h
│ │ │ │ ├── PERI_CAU.h
│ │ │ │ ├── PERI_CDOG.h
│ │ │ │ ├── PERI_CIU1.h
│ │ │ │ ├── PERI_CIU2.h
│ │ │ │ ├── PERI_CLKCTL0.h
│ │ │ │ ├── PERI_CLKCTL1.h
│ │ │ │ ├── PERI_CRC.h
│ │ │ │ ├── PERI_CTIMER.h
│ │ │ │ ├── PERI_DAC.h
│ │ │ │ ├── PERI_DBGMAILBOX.h
│ │ │ │ ├── PERI_DMA.h
│ │ │ │ ├── PERI_DMIC.h
│ │ │ │ ├── PERI_ELS.h
│ │ │ │ ├── PERI_ENET.h
│ │ │ │ ├── PERI_FLEXCOMM.h
│ │ │ │ ├── PERI_FLEXSPI.h
│ │ │ │ ├── PERI_FREQME.h
│ │ │ │ ├── PERI_GDMA.h
│ │ │ │ ├── PERI_GPIO.h
│ │ │ │ ├── PERI_I2C.h
│ │ │ │ ├── PERI_I2S.h
│ │ │ │ ├── PERI_INPUTMUX.h
│ │ │ │ ├── PERI_ITRC.h
│ │ │ │ ├── PERI_LCDIC.h
│ │ │ │ ├── PERI_MCI_IO_MUX.h
│ │ │ │ ├── PERI_MRT.h
│ │ │ │ ├── PERI_OCOTP.h
│ │ │ │ ├── PERI_OSTIMER.h
│ │ │ │ ├── PERI_PINT.h
│ │ │ │ ├── PERI_PKC.h
│ │ │ │ ├── PERI_PMU.h
│ │ │ │ ├── PERI_POWERQUAD.h
│ │ │ │ ├── PERI_PUF.h
│ │ │ │ ├── PERI_RF_SYSCON.h
│ │ │ │ ├── PERI_ROMCP.h
│ │ │ │ ├── PERI_RSTCTL0.h
│ │ │ │ ├── PERI_RSTCTL1.h
│ │ │ │ ├── PERI_RTC.h
│ │ │ │ ├── PERI_SCT.h
│ │ │ │ ├── PERI_SDU_FBR_CARD.h
│ │ │ │ ├── PERI_SDU_FN0_CARD.h
│ │ │ │ ├── PERI_SDU_FN_CARD.h
│ │ │ │ ├── PERI_SENSOR_CTRL.h
│ │ │ │ ├── PERI_SOCCIU.h
│ │ │ │ ├── PERI_SOC_OTP_CTRL.h
│ │ │ │ ├── PERI_SPI.h
│ │ │ │ ├── PERI_SYSCTL0.h
│ │ │ │ ├── PERI_SYSCTL1.h
│ │ │ │ ├── PERI_SYSCTL2.h
│ │ │ │ ├── PERI_SYSPLL_T3.h
│ │ │ │ ├── PERI_SYSPLL_TCPU.h
│ │ │ │ ├── PERI_SYSPLL_TDDR.h
│ │ │ │ ├── PERI_TRNG.h
│ │ │ │ ├── PERI_USART.h
│ │ │ │ ├── PERI_USBC.h
│ │ │ │ ├── PERI_USIM.h
│ │ │ │ ├── PERI_UTICK.h
│ │ │ │ ├── PERI_WLAPU.h
│ │ │ │ └── PERI_WWDT.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── doc/
│ │ │ ├── readme.md
│ │ │ └── wifi_examples_readme.md
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_i2s_bridge.c
│ │ │ ├── fsl_i2s_bridge.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_inputmux_connections.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_iped.c
│ │ │ ├── fsl_iped.h
│ │ │ ├── fsl_memory.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── edgefast_wifi/
│ │ │ ├── include/
│ │ │ │ └── wpl.h
│ │ │ └── source/
│ │ │ └── wpl_nxp.c
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ └── mflash_file.h
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── frdm-rw612-xpresso-lwip-freertos JLink Debug.launch
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ └── heap_4.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ ├── template/
│ │ │ │ └── ARM_CM33_3_priority_bits/
│ │ │ │ └── FreeRTOSConfig_Gen.h
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── lwip/
│ │ │ ├── BUILDING
│ │ │ ├── CHANGELOG
│ │ │ ├── CMakeLists_upstream.txt
│ │ │ ├── COPYING
│ │ │ ├── ChangeLogKSDK.txt
│ │ │ ├── FEATURES
│ │ │ ├── FILES
│ │ │ ├── README
│ │ │ ├── UPGRADING
│ │ │ ├── codespell_changed_files.sh
│ │ │ ├── codespell_check.sh
│ │ │ ├── doc/
│ │ │ │ ├── FILES
│ │ │ │ ├── NO_SYS_SampleCode.c
│ │ │ │ ├── ZeroCopyRx.c
│ │ │ │ ├── contrib.txt
│ │ │ │ ├── doxygen/
│ │ │ │ │ ├── generate.bat
│ │ │ │ │ ├── generate.sh
│ │ │ │ │ ├── lwip.Doxyfile
│ │ │ │ │ ├── lwip.Doxyfile.cmake.in
│ │ │ │ │ ├── main_page.h
│ │ │ │ │ └── output/
│ │ │ │ │ └── index.html
│ │ │ │ ├── mdns.txt
│ │ │ │ ├── mqtt_client.txt
│ │ │ │ ├── ppp.txt
│ │ │ │ └── savannah.txt
│ │ │ ├── port/
│ │ │ │ ├── README.md
│ │ │ │ ├── arch/
│ │ │ │ │ ├── cc.h
│ │ │ │ │ └── perf.h
│ │ │ │ └── sys_arch/
│ │ │ │ └── dynamic/
│ │ │ │ ├── arch/
│ │ │ │ │ └── sys_arch.h
│ │ │ │ └── sys_arch.c
│ │ │ └── src/
│ │ │ ├── FILES
│ │ │ ├── api/
│ │ │ │ ├── api_lib.c
│ │ │ │ ├── api_msg.c
│ │ │ │ ├── err.c
│ │ │ │ ├── if_api.c
│ │ │ │ ├── netbuf.c
│ │ │ │ ├── netdb.c
│ │ │ │ ├── netifapi.c
│ │ │ │ ├── sockets.c
│ │ │ │ └── tcpip.c
│ │ │ ├── apps/
│ │ │ │ ├── httpsrv/
│ │ │ │ │ ├── httpsrv.c
│ │ │ │ │ ├── httpsrv.h
│ │ │ │ │ ├── httpsrv_base64.c
│ │ │ │ │ ├── httpsrv_base64.h
│ │ │ │ │ ├── httpsrv_config.h
│ │ │ │ │ ├── httpsrv_fs.c
│ │ │ │ │ ├── httpsrv_fs.h
│ │ │ │ │ ├── httpsrv_port.h
│ │ │ │ │ ├── httpsrv_prv.h
│ │ │ │ │ ├── httpsrv_script.c
│ │ │ │ │ ├── httpsrv_script.h
│ │ │ │ │ ├── httpsrv_sha1.c
│ │ │ │ │ ├── httpsrv_sha1.h
│ │ │ │ │ ├── httpsrv_supp.c
│ │ │ │ │ ├── httpsrv_supp.h
│ │ │ │ │ ├── httpsrv_task.c
│ │ │ │ │ ├── httpsrv_tls.c
│ │ │ │ │ ├── httpsrv_tls.h
│ │ │ │ │ ├── httpsrv_utf8.c
│ │ │ │ │ ├── httpsrv_utf8.h
│ │ │ │ │ ├── httpsrv_ws.c
│ │ │ │ │ ├── httpsrv_ws.h
│ │ │ │ │ ├── httpsrv_ws_api.c
│ │ │ │ │ ├── httpsrv_ws_prv.h
│ │ │ │ │ └── mkfs/
│ │ │ │ │ └── mkfs.pl
│ │ │ │ └── mdns/
│ │ │ │ ├── mdns.c
│ │ │ │ ├── mdns_domain.c
│ │ │ │ └── mdns_out.c
│ │ │ ├── core/
│ │ │ │ ├── altcp.c
│ │ │ │ ├── altcp_alloc.c
│ │ │ │ ├── altcp_tcp.c
│ │ │ │ ├── def.c
│ │ │ │ ├── dns.c
│ │ │ │ ├── inet_chksum.c
│ │ │ │ ├── init.c
│ │ │ │ ├── ip.c
│ │ │ │ ├── ipv4/
│ │ │ │ │ ├── acd.c
│ │ │ │ │ ├── autoip.c
│ │ │ │ │ ├── dhcp.c
│ │ │ │ │ ├── etharp.c
│ │ │ │ │ ├── icmp.c
│ │ │ │ │ ├── igmp.c
│ │ │ │ │ ├── ip4.c
│ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ └── ip4_frag.c
│ │ │ │ ├── ipv6/
│ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ ├── ethip6.c
│ │ │ │ │ ├── icmp6.c
│ │ │ │ │ ├── inet6.c
│ │ │ │ │ ├── ip6.c
│ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ ├── mld6.c
│ │ │ │ │ └── nd6.c
│ │ │ │ ├── mem.c
│ │ │ │ ├── memp.c
│ │ │ │ ├── netif.c
│ │ │ │ ├── pbuf.c
│ │ │ │ ├── raw.c
│ │ │ │ ├── stats.c
│ │ │ │ ├── sys.c
│ │ │ │ ├── tcp.c
│ │ │ │ ├── tcp_in.c
│ │ │ │ ├── tcp_out.c
│ │ │ │ ├── timeouts.c
│ │ │ │ └── udp.c
│ │ │ ├── include/
│ │ │ │ ├── compat/
│ │ │ │ │ ├── posix/
│ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── sys/
│ │ │ │ │ │ └── socket.h
│ │ │ │ │ └── stdc/
│ │ │ │ │ └── errno.h
│ │ │ │ ├── lwip/
│ │ │ │ │ ├── acd.h
│ │ │ │ │ ├── altcp.h
│ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ ├── api.h
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ ├── mdns_domain.h
│ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ ├── mdns_out.h
│ │ │ │ │ │ └── mdns_priv.h
│ │ │ │ │ ├── arch.h
│ │ │ │ │ ├── autoip.h
│ │ │ │ │ ├── debug.h
│ │ │ │ │ ├── def.h
│ │ │ │ │ ├── dhcp.h
│ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ ├── dns.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethip6.h
│ │ │ │ │ ├── icmp.h
│ │ │ │ │ ├── icmp6.h
│ │ │ │ │ ├── if_api.h
│ │ │ │ │ ├── igmp.h
│ │ │ │ │ ├── inet.h
│ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ ├── init.h
│ │ │ │ │ ├── ip.h
│ │ │ │ │ ├── ip4.h
│ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ ├── ip6.h
│ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ ├── mem.h
│ │ │ │ │ ├── memp.h
│ │ │ │ │ ├── mld6.h
│ │ │ │ │ ├── nd6.h
│ │ │ │ │ ├── netbuf.h
│ │ │ │ │ ├── netdb.h
│ │ │ │ │ ├── netif.h
│ │ │ │ │ ├── netifapi.h
│ │ │ │ │ ├── opt.h
│ │ │ │ │ ├── pbuf.h
│ │ │ │ │ ├── priv/
│ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ ├── prot/
│ │ │ │ │ │ ├── acd.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ ├── raw.h
│ │ │ │ │ ├── sio.h
│ │ │ │ │ ├── snmp.h
│ │ │ │ │ ├── sockets.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sys.h
│ │ │ │ │ ├── tcp.h
│ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ ├── tcpip.h
│ │ │ │ │ ├── timeouts.h
│ │ │ │ │ └── udp.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.h
│ │ │ │ ├── bridgeif_opts.h
│ │ │ │ ├── etharp.h
│ │ │ │ ├── ethernet.h
│ │ │ │ ├── ieee802154.h
│ │ │ │ ├── lowpan6.h
│ │ │ │ ├── lowpan6_ble.h
│ │ │ │ ├── lowpan6_common.h
│ │ │ │ ├── lowpan6_opts.h
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── ccp.h
│ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ ├── chap-new.h
│ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ ├── eap.h
│ │ │ │ │ ├── ecp.h
│ │ │ │ │ ├── eui64.h
│ │ │ │ │ ├── fsm.h
│ │ │ │ │ ├── ipcp.h
│ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ ├── lcp.h
│ │ │ │ │ ├── magic.h
│ │ │ │ │ ├── mppe.h
│ │ │ │ │ ├── polarssl/
│ │ │ │ │ │ ├── arc4.h
│ │ │ │ │ │ ├── des.h
│ │ │ │ │ │ ├── md4.h
│ │ │ │ │ │ ├── md5.h
│ │ │ │ │ │ └── sha1.h
│ │ │ │ │ ├── ppp.h
│ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ ├── pppapi.h
│ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ ├── pppoe.h
│ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ ├── pppos.h
│ │ │ │ │ ├── upap.h
│ │ │ │ │ └── vj.h
│ │ │ │ ├── slipif.h
│ │ │ │ └── zepif.h
│ │ │ └── netif/
│ │ │ ├── FILES
│ │ │ ├── bridgeif.c
│ │ │ ├── bridgeif_fdb.c
│ │ │ ├── ethernet.c
│ │ │ ├── lowpan6.c
│ │ │ ├── lowpan6_ble.c
│ │ │ ├── lowpan6_common.c
│ │ │ ├── ppp/
│ │ │ │ ├── PPPD_FOLLOWUP
│ │ │ │ ├── auth.c
│ │ │ │ ├── ccp.c
│ │ │ │ ├── chap-md5.c
│ │ │ │ ├── chap-new.c
│ │ │ │ ├── chap_ms.c
│ │ │ │ ├── demand.c
│ │ │ │ ├── eap.c
│ │ │ │ ├── ecp.c
│ │ │ │ ├── eui64.c
│ │ │ │ ├── fsm.c
│ │ │ │ ├── ipcp.c
│ │ │ │ ├── ipv6cp.c
│ │ │ │ ├── lcp.c
│ │ │ │ ├── magic.c
│ │ │ │ ├── mppe.c
│ │ │ │ ├── multilink.c
│ │ │ │ ├── polarssl/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── arc4.c
│ │ │ │ │ ├── des.c
│ │ │ │ │ ├── md4.c
│ │ │ │ │ ├── md5.c
│ │ │ │ │ └── sha1.c
│ │ │ │ ├── ppp.c
│ │ │ │ ├── pppapi.c
│ │ │ │ ├── pppcrypt.c
│ │ │ │ ├── pppoe.c
│ │ │ │ ├── pppol2tp.c
│ │ │ │ ├── pppos.c
│ │ │ │ ├── upap.c
│ │ │ │ ├── utils.c
│ │ │ │ └── vj.c
│ │ │ ├── slipif.c
│ │ │ └── zepif.c
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── FreeRTOSConfigBoard.h
│ │ │ ├── app.h
│ │ │ ├── app_config.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_os_abstraction_config.h
│ │ │ ├── hardware_init.c
│ │ │ ├── lwipopts.h
│ │ │ ├── lwippools.h
│ │ │ ├── main.c
│ │ │ ├── mcux_config.h
│ │ │ ├── mongoose_config.h
│ │ │ ├── pin_mux.c
│ │ │ ├── pin_mux.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── debug_console/
│ │ │ │ ├── fsl_debug_console.c
│ │ │ │ └── fsl_debug_console.h
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_memcpy.S
│ │ │ └── str/
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── dhcpd/
│ │ │ ├── dhcp-bootp.h
│ │ │ ├── dhcp-priv.h
│ │ │ ├── dhcp-server-main.c
│ │ │ ├── dhcp-server.c
│ │ │ ├── dns-server.c
│ │ │ └── dns.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_cal_data_frdmrw61x_1ant.h
│ │ │ ├── wifi_cal_data_rw61x_1ant.h
│ │ │ ├── wifi_cal_data_rw61x_1ant_diversity.h
│ │ │ ├── wifi_cal_data_rw61x_2ant.h
│ │ │ ├── wifi_cal_data_rw61x_3ant_diversity.h
│ │ │ ├── wifi_cal_data_rw61x_override.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── wifi_netif.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── frdm-rw612-xpresso-freertos-lwip-wifi/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ ├── Debug/
│ │ │ ├── frdm-rw612-xpresso-freertos-lwip_Debug.ld
│ │ │ ├── frdm-rw612-xpresso-freertos-lwip_Debug_library.ld
│ │ │ └── frdm-rw612-xpresso-freertos-lwip_Debug_memory.ld
│ │ ├── README.md
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── conn_fwloader/
│ │ │ │ ├── fsl_loader.c
│ │ │ │ ├── fsl_loader_utils.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── api_tree_root.h
│ │ │ │ │ ├── fsl_loader.h
│ │ │ │ │ ├── fsl_loader_utils.h
│ │ │ │ │ ├── fusemap.h
│ │ │ │ │ ├── life_cycle.h
│ │ │ │ │ └── nboot_rom_api_table.h
│ │ │ │ ├── life_cycle.c
│ │ │ │ ├── nboot_hal.c
│ │ │ │ └── readme.txt
│ │ │ ├── els_pkc/
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClMemory_ClearSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Clear_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareDPASecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Compare_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecurePow2_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopyWords_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_SetSecure_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClMemory_Set_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_SecureCompare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Internal_SecureCompare_Stub.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ ├── platform_specific_headers.h
│ │ │ │ └── readme.txt
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_config.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ └── AzureWave/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── edgefast_wifi/
│ │ │ ├── include/
│ │ │ │ └── wpl.h
│ │ │ └── source/
│ │ │ └── wpl_nxp.c
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ ├── mflash_file.h
│ │ │ └── readme.txt
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── newlib-freertos.h
│ │ │ │ ├── picolibc-freertos.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ └── heap_3.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_rodata.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── lwip/
│ │ │ ├── BUILDING
│ │ │ ├── CHANGELOG
│ │ │ ├── COPYING
│ │ │ ├── ChangeLogKSDK.txt
│ │ │ ├── FEATURES
│ │ │ ├── FILES
│ │ │ ├── README
│ │ │ ├── UPGRADING
│ │ │ ├── doc/
│ │ │ │ ├── FILES
│ │ │ │ ├── NO_SYS_SampleCode.c
│ │ │ │ ├── ZeroCopyRx.c
│ │ │ │ ├── contrib.txt
│ │ │ │ ├── doxygen/
│ │ │ │ │ ├── generate.bat
│ │ │ │ │ ├── generate.sh
│ │ │ │ │ ├── lwip.Doxyfile
│ │ │ │ │ ├── lwip.Doxyfile.cmake.in
│ │ │ │ │ ├── main_page.h
│ │ │ │ │ └── output/
│ │ │ │ │ └── index.html
│ │ │ │ ├── mdns.txt
│ │ │ │ ├── mqtt_client.txt
│ │ │ │ ├── ppp.txt
│ │ │ │ └── savannah.txt
│ │ │ ├── port/
│ │ │ │ ├── arch/
│ │ │ │ │ ├── cc.h
│ │ │ │ │ └── perf.h
│ │ │ │ └── sys_arch/
│ │ │ │ └── dynamic/
│ │ │ │ ├── arch/
│ │ │ │ │ └── sys_arch.h
│ │ │ │ └── sys_arch.c
│ │ │ └── src/
│ │ │ ├── FILES
│ │ │ ├── api/
│ │ │ │ ├── api_lib.c
│ │ │ │ ├── api_msg.c
│ │ │ │ ├── err.c
│ │ │ │ ├── if_api.c
│ │ │ │ ├── netbuf.c
│ │ │ │ ├── netdb.c
│ │ │ │ ├── netifapi.c
│ │ │ │ ├── sockets.c
│ │ │ │ └── tcpip.c
│ │ │ ├── core/
│ │ │ │ ├── altcp.c
│ │ │ │ ├── altcp_alloc.c
│ │ │ │ ├── altcp_tcp.c
│ │ │ │ ├── def.c
│ │ │ │ ├── dns.c
│ │ │ │ ├── inet_chksum.c
│ │ │ │ ├── init.c
│ │ │ │ ├── ip.c
│ │ │ │ ├── ipv4/
│ │ │ │ │ ├── acd.c
│ │ │ │ │ ├── autoip.c
│ │ │ │ │ ├── dhcp.c
│ │ │ │ │ ├── etharp.c
│ │ │ │ │ ├── icmp.c
│ │ │ │ │ ├── igmp.c
│ │ │ │ │ ├── ip4.c
│ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ └── ip4_frag.c
│ │ │ │ ├── ipv6/
│ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ ├── ethip6.c
│ │ │ │ │ ├── icmp6.c
│ │ │ │ │ ├── inet6.c
│ │ │ │ │ ├── ip6.c
│ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ ├── mld6.c
│ │ │ │ │ └── nd6.c
│ │ │ │ ├── mem.c
│ │ │ │ ├── memp.c
│ │ │ │ ├── netif.c
│ │ │ │ ├── pbuf.c
│ │ │ │ ├── raw.c
│ │ │ │ ├── stats.c
│ │ │ │ ├── sys.c
│ │ │ │ ├── tcp.c
│ │ │ │ ├── tcp_in.c
│ │ │ │ ├── tcp_out.c
│ │ │ │ ├── timeouts.c
│ │ │ │ └── udp.c
│ │ │ ├── include/
│ │ │ │ ├── compat/
│ │ │ │ │ ├── posix/
│ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── sys/
│ │ │ │ │ │ └── socket.h
│ │ │ │ │ └── stdc/
│ │ │ │ │ └── errno.h
│ │ │ │ ├── lwip/
│ │ │ │ │ ├── acd.h
│ │ │ │ │ ├── altcp.h
│ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ ├── api.h
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ └── lwiperf.h
│ │ │ │ │ ├── arch.h
│ │ │ │ │ ├── autoip.h
│ │ │ │ │ ├── debug.h
│ │ │ │ │ ├── def.h
│ │ │ │ │ ├── dhcp.h
│ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ ├── dns.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethip6.h
│ │ │ │ │ ├── icmp.h
│ │ │ │ │ ├── icmp6.h
│ │ │ │ │ ├── if_api.h
│ │ │ │ │ ├── igmp.h
│ │ │ │ │ ├── inet.h
│ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ ├── init.h
│ │ │ │ │ ├── ip.h
│ │ │ │ │ ├── ip4.h
│ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ ├── ip6.h
│ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ ├── mem.h
│ │ │ │ │ ├── memp.h
│ │ │ │ │ ├── mld6.h
│ │ │ │ │ ├── nd6.h
│ │ │ │ │ ├── netbuf.h
│ │ │ │ │ ├── netdb.h
│ │ │ │ │ ├── netif.h
│ │ │ │ │ ├── netifapi.h
│ │ │ │ │ ├── opt.h
│ │ │ │ │ ├── pbuf.h
│ │ │ │ │ ├── priv/
│ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ ├── prot/
│ │ │ │ │ │ ├── acd.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ ├── raw.h
│ │ │ │ │ ├── sio.h
│ │ │ │ │ ├── snmp.h
│ │ │ │ │ ├── sockets.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sys.h
│ │ │ │ │ ├── tcp.h
│ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ ├── tcpip.h
│ │ │ │ │ ├── timeouts.h
│ │ │ │ │ └── udp.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.h
│ │ │ │ ├── bridgeif_opts.h
│ │ │ │ ├── etharp.h
│ │ │ │ ├── ethernet.h
│ │ │ │ ├── ieee802154.h
│ │ │ │ ├── lowpan6.h
│ │ │ │ ├── lowpan6_ble.h
│ │ │ │ ├── lowpan6_common.h
│ │ │ │ ├── lowpan6_opts.h
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── ccp.h
│ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ ├── chap-new.h
│ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ ├── eap.h
│ │ │ │ │ ├── ecp.h
│ │ │ │ │ ├── eui64.h
│ │ │ │ │ ├── fsm.h
│ │ │ │ │ ├── ipcp.h
│ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ ├── lcp.h
│ │ │ │ │ ├── magic.h
│ │ │ │ │ ├── mppe.h
│ │ │ │ │ ├── polarssl/
│ │ │ │ │ │ ├── arc4.h
│ │ │ │ │ │ ├── des.h
│ │ │ │ │ │ ├── md4.h
│ │ │ │ │ │ ├── md5.h
│ │ │ │ │ │ └── sha1.h
│ │ │ │ │ ├── ppp.h
│ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ ├── pppapi.h
│ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ ├── pppoe.h
│ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ ├── pppos.h
│ │ │ │ │ ├── upap.h
│ │ │ │ │ └── vj.h
│ │ │ │ ├── slipif.h
│ │ │ │ └── zepif.h
│ │ │ └── netif/
│ │ │ ├── FILES
│ │ │ ├── bridgeif.c
│ │ │ ├── bridgeif_fdb.c
│ │ │ ├── ethernet.c
│ │ │ ├── lowpan6.c
│ │ │ ├── lowpan6_ble.c
│ │ │ ├── lowpan6_common.c
│ │ │ ├── ppp/
│ │ │ │ ├── PPPD_FOLLOWUP
│ │ │ │ ├── auth.c
│ │ │ │ ├── ccp.c
│ │ │ │ ├── chap-md5.c
│ │ │ │ ├── chap-new.c
│ │ │ │ ├── chap_ms.c
│ │ │ │ ├── demand.c
│ │ │ │ ├── eap.c
│ │ │ │ ├── ecp.c
│ │ │ │ ├── eui64.c
│ │ │ │ ├── fsm.c
│ │ │ │ ├── ipcp.c
│ │ │ │ ├── ipv6cp.c
│ │ │ │ ├── lcp.c
│ │ │ │ ├── magic.c
│ │ │ │ ├── mppe.c
│ │ │ │ ├── multilink.c
│ │ │ │ ├── polarssl/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── arc4.c
│ │ │ │ │ ├── des.c
│ │ │ │ │ ├── md4.c
│ │ │ │ │ ├── md5.c
│ │ │ │ │ └── sha1.c
│ │ │ │ ├── ppp.c
│ │ │ │ ├── pppapi.c
│ │ │ │ ├── pppcrypt.c
│ │ │ │ ├── pppoe.c
│ │ │ │ ├── pppol2tp.c
│ │ │ │ ├── pppos.c
│ │ │ │ ├── upap.c
│ │ │ │ ├── utils.c
│ │ │ │ └── vj.c
│ │ │ ├── slipif.c
│ │ │ └── zepif.c
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── app_config.h
│ │ │ ├── lwipopts.h
│ │ │ ├── lwippools.h
│ │ │ ├── main.c
│ │ │ ├── main.c_mg_wifi-style
│ │ │ ├── mongoose_config.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_memcpy.S
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── dhcpd/
│ │ │ ├── dhcp-bootp.h
│ │ │ ├── dhcp-priv.h
│ │ │ ├── dhcp-server-main.c
│ │ │ ├── dhcp-server.c
│ │ │ ├── dns-server.c
│ │ │ └── dns.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ ├── hooks/
│ │ │ │ │ │ └── lwip_default_hooks.h
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── hooks/
│ │ │ │ │ └── lwip_default_hooks.c
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── wifi_netif.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── nxp-evkbimxrt1050-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1020-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1024-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1060-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1064-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1160-cm7-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1170-cm4-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1170-cm7-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk64f-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk66f-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk66f-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54018-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54608-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54618-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54628-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54s018m-freertos/
│ │ └── Makefile
│ ├── nxp-mimxrt1020-freertos/
│ │ └── Makefile
│ ├── nxp-twrk65f180m-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-twrkv58f220m-lwip-freertos/
│ │ └── Makefile
│ ├── rt1020-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1020-evk-make-freertos-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-make-freertos-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-xpresso-baremetal-builtin/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cachel1_armv7.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm7.h
│ │ │ └── mpu_armv7.h
│ │ ├── Debug/
│ │ │ ├── board/
│ │ │ │ ├── board.su
│ │ │ │ ├── clock_config.su
│ │ │ │ ├── dcd.su
│ │ │ │ ├── peripherals.su
│ │ │ │ ├── pin_mux.su
│ │ │ │ └── subdir.mk
│ │ │ ├── component/
│ │ │ │ ├── lists/
│ │ │ │ │ ├── fsl_component_generic_list.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ ├── serial_manager/
│ │ │ │ │ ├── fsl_component_serial_manager.su
│ │ │ │ │ ├── fsl_component_serial_port_uart.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ └── uart/
│ │ │ │ ├── fsl_adapter_lpuart.su
│ │ │ │ └── subdir.mk
│ │ │ ├── device/
│ │ │ │ ├── subdir.mk
│ │ │ │ └── system_MIMXRT1062.su
│ │ │ ├── drivers/
│ │ │ │ ├── fsl_clock.su
│ │ │ │ ├── fsl_common.su
│ │ │ │ ├── fsl_common_arm.su
│ │ │ │ ├── fsl_gpio.su
│ │ │ │ ├── fsl_lpuart.su
│ │ │ │ ├── fsl_trng.su
│ │ │ │ └── subdir.mk
│ │ │ ├── makefile
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_library.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_memory.ld
│ │ │ ├── sources.mk
│ │ │ ├── startup/
│ │ │ │ ├── startup_mimxrt1062.su
│ │ │ │ └── subdir.mk
│ │ │ ├── utilities/
│ │ │ │ ├── fsl_assert.su
│ │ │ │ ├── fsl_debug_console.su
│ │ │ │ ├── fsl_str.su
│ │ │ │ └── subdir.mk
│ │ │ └── xip/
│ │ │ ├── evkbmimxrt1060_flexspi_nor_config.su
│ │ │ ├── fsl_flexspi_nor_boot.su
│ │ │ └── subdir.mk
│ │ ├── Test/
│ │ │ ├── board/
│ │ │ │ ├── board.su
│ │ │ │ ├── clock_config.su
│ │ │ │ ├── dcd.su
│ │ │ │ ├── peripherals.su
│ │ │ │ ├── pin_mux.su
│ │ │ │ └── subdir.mk
│ │ │ ├── component/
│ │ │ │ ├── lists/
│ │ │ │ │ ├── fsl_component_generic_list.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ ├── serial_manager/
│ │ │ │ │ ├── fsl_component_serial_manager.su
│ │ │ │ │ ├── fsl_component_serial_port_uart.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ └── uart/
│ │ │ │ ├── fsl_adapter_lpuart.su
│ │ │ │ └── subdir.mk
│ │ │ ├── device/
│ │ │ │ ├── subdir.mk
│ │ │ │ └── system_MIMXRT1062.su
│ │ │ ├── drivers/
│ │ │ │ ├── fsl_clock.su
│ │ │ │ ├── fsl_common.su
│ │ │ │ ├── fsl_common_arm.su
│ │ │ │ ├── fsl_gpio.su
│ │ │ │ ├── fsl_lpuart.su
│ │ │ │ ├── fsl_trng.su
│ │ │ │ └── subdir.mk
│ │ │ ├── makefile
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_library.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_memory.ld
│ │ │ ├── sources.mk
│ │ │ ├── startup/
│ │ │ │ ├── startup_mimxrt1062.su
│ │ │ │ └── subdir.mk
│ │ │ ├── utilities/
│ │ │ │ ├── fsl_assert.su
│ │ │ │ ├── fsl_debug_console.su
│ │ │ │ ├── fsl_str.su
│ │ │ │ └── subdir.mk
│ │ │ └── xip/
│ │ │ ├── evkbmimxrt1060_flexspi_nor_config.su
│ │ │ ├── fsl_flexspi_nor_boot.su
│ │ │ └── subdir.mk
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── dcd.c
│ │ │ ├── dcd.h
│ │ │ ├── peripherals.c
│ │ │ ├── peripherals.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ └── uart/
│ │ │ ├── fsl_adapter_lpuart.c
│ │ │ └── fsl_adapter_uart.h
│ │ ├── device/
│ │ │ ├── MIMXRT1062.h
│ │ │ ├── MIMXRT1062_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_MIMXRT1062.c
│ │ │ └── system_MIMXRT1062.h
│ │ ├── drivers/
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_iomuxc.h
│ │ │ ├── fsl_lpuart.c
│ │ │ ├── fsl_lpuart.h
│ │ │ ├── fsl_nic301.h
│ │ │ ├── fsl_trng.c
│ │ │ └── fsl_trng.h
│ │ ├── middleware/
│ │ │ └── bm/
│ │ │ └── readme.txt
│ │ ├── rt1060-evk-xpresso-baremetal-builtin.mex
│ │ ├── source/
│ │ │ ├── hal.h
│ │ │ ├── main.c
│ │ │ ├── mongoose_config.h
│ │ │ └── syscalls.c
│ │ ├── startup/
│ │ │ └── startup_mimxrt1062.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── xip/
│ │ ├── evkbmimxrt1060_flexspi_nor_config.c
│ │ ├── evkbmimxrt1060_flexspi_nor_config.h
│ │ ├── fsl_flexspi_nor_boot.c
│ │ └── fsl_flexspi_nor_boot.h
│ ├── rt1170-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── link_ram.ld
│ │ └── mbedtls_config.h
│ └── rt1170-evk-make-freertos-builtin/
│ ├── Makefile
│ ├── README.md
│ └── link_ram.ld
├── pico-sdk/
│ ├── pico-2-w-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── pico-2-w-picosdk-baremetal-builtin-ap/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── pico-2-w-picosdk-freertos-lwip/
│ │ ├── CMakeLists.txt
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOS_Kernel_import.cmake
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── lwipopts.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── pico-rmii/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── driver_rp2040_rmii.c
│ │ ├── driver_rp2040_rmii.h
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── pico-rndis-dashboard/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── msc_disk.c
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── pico-rndis-device/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── pico-w-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── pico-w-picosdk-freertos-lwip/
│ │ ├── CMakeLists.txt
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOS_Kernel_import.cmake
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── lwipopts.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── rm2-pico-picosdk-baremetal-builtin/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── w5500-evb-pico-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── w5500-evb-pico2-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── w55rp20-evb-pico-picosdk-baremetal-builtin/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── hal.h
│ ├── main.c
│ ├── mongoose_config.h
│ └── pico_sdk_import.cmake
├── renesas/
│ └── ek-ra6m4-make-baremetal-builtin/
│ ├── Makefile
│ ├── hal.c
│ ├── hal.h
│ ├── link.ld
│ ├── main.c
│ └── mongoose_config.h
├── smtp/
│ ├── README.md
│ └── smtp-client/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── stm32/
│ ├── nucleo-f429zi-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-cube-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ ├── language.settings.xml
│ │ │ ├── org.eclipse.cdt.core.prefs
│ │ │ └── stm32cubeide.project.prefs
│ │ ├── Core/
│ │ │ ├── Inc/
│ │ │ │ ├── FreeRTOSConfig.h
│ │ │ │ ├── hal.h
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ └── stm32f4xx_it.h
│ │ │ ├── Src/
│ │ │ │ ├── freertos.c
│ │ │ │ ├── main.c
│ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ ├── stm32f4xx_hal_timebase_tim.c
│ │ │ │ ├── stm32f4xx_it.c
│ │ │ │ ├── syscalls.c
│ │ │ │ ├── sysmem.c
│ │ │ │ └── system_stm32f4xx.c
│ │ │ └── Startup/
│ │ │ └── startup_stm32f429zitx.s
│ │ ├── Drivers/
│ │ │ ├── BSP/
│ │ │ │ └── Components/
│ │ │ │ └── lan8742/
│ │ │ │ ├── lan8742.c
│ │ │ │ └── lan8742.h
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32F4xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32f429xx.h
│ │ │ │ │ │ ├── stm32f4xx.h
│ │ │ │ │ │ └── system_stm32f4xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32F4xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32f4xx_hal.h
│ │ │ │ ├── stm32f4xx_hal_cortex.h
│ │ │ │ ├── stm32f4xx_hal_def.h
│ │ │ │ ├── stm32f4xx_hal_dma.h
│ │ │ │ ├── stm32f4xx_hal_dma_ex.h
│ │ │ │ ├── stm32f4xx_hal_eth.h
│ │ │ │ ├── stm32f4xx_hal_exti.h
│ │ │ │ ├── stm32f4xx_hal_flash.h
│ │ │ │ ├── stm32f4xx_hal_flash_ex.h
│ │ │ │ ├── stm32f4xx_hal_flash_ramfunc.h
│ │ │ │ ├── stm32f4xx_hal_gpio.h
│ │ │ │ ├── stm32f4xx_hal_gpio_ex.h
│ │ │ │ ├── stm32f4xx_hal_pwr.h
│ │ │ │ ├── stm32f4xx_hal_pwr_ex.h
│ │ │ │ ├── stm32f4xx_hal_rcc.h
│ │ │ │ ├── stm32f4xx_hal_rcc_ex.h
│ │ │ │ ├── stm32f4xx_hal_rng.h
│ │ │ │ ├── stm32f4xx_hal_tim.h
│ │ │ │ ├── stm32f4xx_hal_tim_ex.h
│ │ │ │ ├── stm32f4xx_hal_uart.h
│ │ │ │ ├── stm32f4xx_ll_bus.h
│ │ │ │ ├── stm32f4xx_ll_cortex.h
│ │ │ │ ├── stm32f4xx_ll_dma.h
│ │ │ │ ├── stm32f4xx_ll_exti.h
│ │ │ │ ├── stm32f4xx_ll_gpio.h
│ │ │ │ ├── stm32f4xx_ll_pwr.h
│ │ │ │ ├── stm32f4xx_ll_rcc.h
│ │ │ │ ├── stm32f4xx_ll_rng.h
│ │ │ │ ├── stm32f4xx_ll_system.h
│ │ │ │ ├── stm32f4xx_ll_usart.h
│ │ │ │ └── stm32f4xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32f4xx_hal.c
│ │ │ ├── stm32f4xx_hal_cortex.c
│ │ │ ├── stm32f4xx_hal_dma.c
│ │ │ ├── stm32f4xx_hal_dma_ex.c
│ │ │ ├── stm32f4xx_hal_eth.c
│ │ │ ├── stm32f4xx_hal_exti.c
│ │ │ ├── stm32f4xx_hal_flash.c
│ │ │ ├── stm32f4xx_hal_flash_ex.c
│ │ │ ├── stm32f4xx_hal_flash_ramfunc.c
│ │ │ ├── stm32f4xx_hal_gpio.c
│ │ │ ├── stm32f4xx_hal_pwr.c
│ │ │ ├── stm32f4xx_hal_pwr_ex.c
│ │ │ ├── stm32f4xx_hal_rcc.c
│ │ │ ├── stm32f4xx_hal_rcc_ex.c
│ │ │ ├── stm32f4xx_hal_rng.c
│ │ │ ├── stm32f4xx_hal_tim.c
│ │ │ ├── stm32f4xx_hal_tim_ex.c
│ │ │ └── stm32f4xx_hal_uart.c
│ │ ├── LWIP/
│ │ │ ├── App/
│ │ │ │ ├── lwip.c
│ │ │ │ └── lwip.h
│ │ │ └── Target/
│ │ │ ├── ethernetif.c
│ │ │ ├── ethernetif.h
│ │ │ └── lwipopts.h
│ │ ├── Middlewares/
│ │ │ └── Third_Party/
│ │ │ ├── FreeRTOS/
│ │ │ │ └── Source/
│ │ │ │ ├── CMSIS_RTOS/
│ │ │ │ │ ├── cmsis_os.c
│ │ │ │ │ └── cmsis_os.h
│ │ │ │ ├── LICENSE
│ │ │ │ ├── croutine.c
│ │ │ │ ├── event_groups.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── FreeRTOS.h
│ │ │ │ │ ├── StackMacros.h
│ │ │ │ │ ├── atomic.h
│ │ │ │ │ ├── croutine.h
│ │ │ │ │ ├── deprecated_definitions.h
│ │ │ │ │ ├── event_groups.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── message_buffer.h
│ │ │ │ │ ├── mpu_prototypes.h
│ │ │ │ │ ├── mpu_wrappers.h
│ │ │ │ │ ├── portable.h
│ │ │ │ │ ├── projdefs.h
│ │ │ │ │ ├── queue.h
│ │ │ │ │ ├── semphr.h
│ │ │ │ │ ├── stack_macros.h
│ │ │ │ │ ├── stream_buffer.h
│ │ │ │ │ ├── task.h
│ │ │ │ │ └── timers.h
│ │ │ │ ├── list.c
│ │ │ │ ├── portable/
│ │ │ │ │ ├── GCC/
│ │ │ │ │ │ └── ARM_CM4F/
│ │ │ │ │ │ ├── port.c
│ │ │ │ │ │ └── portmacro.h
│ │ │ │ │ └── MemMang/
│ │ │ │ │ └── heap_4.c
│ │ │ │ ├── queue.c
│ │ │ │ ├── stream_buffer.c
│ │ │ │ ├── tasks.c
│ │ │ │ └── timers.c
│ │ │ └── LwIP/
│ │ │ ├── src/
│ │ │ │ ├── api/
│ │ │ │ │ ├── api_lib.c
│ │ │ │ │ ├── api_msg.c
│ │ │ │ │ ├── err.c
│ │ │ │ │ ├── if_api.c
│ │ │ │ │ ├── netbuf.c
│ │ │ │ │ ├── netdb.c
│ │ │ │ │ ├── netifapi.c
│ │ │ │ │ ├── sockets.c
│ │ │ │ │ └── tcpip.c
│ │ │ │ ├── apps/
│ │ │ │ │ └── mqtt/
│ │ │ │ │ └── mqtt.c
│ │ │ │ ├── core/
│ │ │ │ │ ├── altcp.c
│ │ │ │ │ ├── altcp_alloc.c
│ │ │ │ │ ├── altcp_tcp.c
│ │ │ │ │ ├── def.c
│ │ │ │ │ ├── dns.c
│ │ │ │ │ ├── inet_chksum.c
│ │ │ │ │ ├── init.c
│ │ │ │ │ ├── ip.c
│ │ │ │ │ ├── ipv4/
│ │ │ │ │ │ ├── autoip.c
│ │ │ │ │ │ ├── dhcp.c
│ │ │ │ │ │ ├── etharp.c
│ │ │ │ │ │ ├── icmp.c
│ │ │ │ │ │ ├── igmp.c
│ │ │ │ │ │ ├── ip4.c
│ │ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ │ └── ip4_frag.c
│ │ │ │ │ ├── ipv6/
│ │ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ │ ├── ethip6.c
│ │ │ │ │ │ ├── icmp6.c
│ │ │ │ │ │ ├── inet6.c
│ │ │ │ │ │ ├── ip6.c
│ │ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ │ ├── mld6.c
│ │ │ │ │ │ └── nd6.c
│ │ │ │ │ ├── mem.c
│ │ │ │ │ ├── memp.c
│ │ │ │ │ ├── netif.c
│ │ │ │ │ ├── pbuf.c
│ │ │ │ │ ├── raw.c
│ │ │ │ │ ├── stats.c
│ │ │ │ │ ├── sys.c
│ │ │ │ │ ├── tcp.c
│ │ │ │ │ ├── tcp_in.c
│ │ │ │ │ ├── tcp_out.c
│ │ │ │ │ ├── timeouts.c
│ │ │ │ │ └── udp.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── compat/
│ │ │ │ │ │ ├── posix/
│ │ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ │ └── sys/
│ │ │ │ │ │ │ └── socket.h
│ │ │ │ │ │ └── stdc/
│ │ │ │ │ │ └── errno.h
│ │ │ │ │ ├── lwip/
│ │ │ │ │ │ ├── altcp.h
│ │ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ │ ├── api.h
│ │ │ │ │ │ ├── apps/
│ │ │ │ │ │ │ ├── altcp_proxyconnect.h
│ │ │ │ │ │ │ ├── altcp_tls_mbedtls_opts.h
│ │ │ │ │ │ │ ├── fs.h
│ │ │ │ │ │ │ ├── http_client.h
│ │ │ │ │ │ │ ├── httpd.h
│ │ │ │ │ │ │ ├── httpd_opts.h
│ │ │ │ │ │ │ ├── lwiperf.h
│ │ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ │ ├── mdns_priv.h
│ │ │ │ │ │ │ ├── mqtt.h
│ │ │ │ │ │ │ ├── mqtt_opts.h
│ │ │ │ │ │ │ ├── mqtt_priv.h
│ │ │ │ │ │ │ ├── netbiosns.h
│ │ │ │ │ │ │ ├── netbiosns_opts.h
│ │ │ │ │ │ │ ├── smtp.h
│ │ │ │ │ │ │ ├── smtp_opts.h
│ │ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ │ ├── snmp_core.h
│ │ │ │ │ │ │ ├── snmp_mib2.h
│ │ │ │ │ │ │ ├── snmp_opts.h
│ │ │ │ │ │ │ ├── snmp_scalar.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_framework.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_usm.h
│ │ │ │ │ │ │ ├── snmp_table.h
│ │ │ │ │ │ │ ├── snmp_threadsync.h
│ │ │ │ │ │ │ ├── snmpv3.h
│ │ │ │ │ │ │ ├── sntp.h
│ │ │ │ │ │ │ ├── sntp_opts.h
│ │ │ │ │ │ │ ├── tftp_opts.h
│ │ │ │ │ │ │ └── tftp_server.h
│ │ │ │ │ │ ├── arch.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── debug.h
│ │ │ │ │ │ ├── def.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── err.h
│ │ │ │ │ │ ├── errno.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethip6.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── if_api.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── inet.h
│ │ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ │ ├── init.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ │ ├── mem.h
│ │ │ │ │ │ ├── memp.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── netbuf.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ ├── netif.h
│ │ │ │ │ │ ├── netifapi.h
│ │ │ │ │ │ ├── opt.h
│ │ │ │ │ │ ├── pbuf.h
│ │ │ │ │ │ ├── priv/
│ │ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ │ ├── prot/
│ │ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ │ └── udp.h
│ │ │ │ │ │ ├── raw.h
│ │ │ │ │ │ ├── sio.h
│ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ ├── sockets.h
│ │ │ │ │ │ ├── stats.h
│ │ │ │ │ │ ├── sys.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ │ ├── tcpip.h
│ │ │ │ │ │ ├── timeouts.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ └── netif/
│ │ │ │ │ ├── bridgeif.h
│ │ │ │ │ ├── bridgeif_opts.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethernet.h
│ │ │ │ │ ├── ieee802154.h
│ │ │ │ │ ├── lowpan6.h
│ │ │ │ │ ├── lowpan6_ble.h
│ │ │ │ │ ├── lowpan6_common.h
│ │ │ │ │ ├── lowpan6_opts.h
│ │ │ │ │ ├── ppp/
│ │ │ │ │ │ ├── ccp.h
│ │ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ │ ├── chap-new.h
│ │ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ │ ├── eap.h
│ │ │ │ │ │ ├── ecp.h
│ │ │ │ │ │ ├── eui64.h
│ │ │ │ │ │ ├── fsm.h
│ │ │ │ │ │ ├── ipcp.h
│ │ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ │ ├── lcp.h
│ │ │ │ │ │ ├── magic.h
│ │ │ │ │ │ ├── mppe.h
│ │ │ │ │ │ ├── ppp.h
│ │ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ │ ├── pppapi.h
│ │ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ │ ├── pppoe.h
│ │ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ │ ├── pppos.h
│ │ │ │ │ │ ├── upap.h
│ │ │ │ │ │ └── vj.h
│ │ │ │ │ ├── slipif.h
│ │ │ │ │ └── zepif.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.c
│ │ │ │ ├── bridgeif_fdb.c
│ │ │ │ ├── ethernet.c
│ │ │ │ ├── lowpan6.c
│ │ │ │ ├── lowpan6_ble.c
│ │ │ │ ├── lowpan6_common.c
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── auth.c
│ │ │ │ │ ├── ccp.c
│ │ │ │ │ ├── chap-md5.c
│ │ │ │ │ ├── chap-new.c
│ │ │ │ │ ├── chap_ms.c
│ │ │ │ │ ├── demand.c
│ │ │ │ │ ├── eap.c
│ │ │ │ │ ├── ecp.c
│ │ │ │ │ ├── eui64.c
│ │ │ │ │ ├── fsm.c
│ │ │ │ │ ├── ipcp.c
│ │ │ │ │ ├── ipv6cp.c
│ │ │ │ │ ├── lcp.c
│ │ │ │ │ ├── magic.c
│ │ │ │ │ ├── mppe.c
│ │ │ │ │ ├── multilink.c
│ │ │ │ │ ├── ppp.c
│ │ │ │ │ ├── pppapi.c
│ │ │ │ │ ├── pppcrypt.c
│ │ │ │ │ ├── pppoe.c
│ │ │ │ │ ├── pppol2tp.c
│ │ │ │ │ ├── pppos.c
│ │ │ │ │ ├── upap.c
│ │ │ │ │ ├── utils.c
│ │ │ │ │ └── vj.c
│ │ │ │ ├── slipif.c
│ │ │ │ └── zepif.c
│ │ │ └── system/
│ │ │ ├── OS/
│ │ │ │ └── sys_arch.c
│ │ │ └── arch/
│ │ │ ├── bpstruct.h
│ │ │ ├── cc.h
│ │ │ ├── cpu.h
│ │ │ ├── epstruct.h
│ │ │ ├── init.h
│ │ │ ├── lib.h
│ │ │ ├── perf.h
│ │ │ └── sys_arch.h
│ │ ├── README.md
│ │ ├── STM32F429ZITX_FLASH.ld
│ │ ├── STM32F429ZITX_RAM.ld
│ │ ├── nucleo-f429zi-cube-freertos-lwip.ioc
│ │ └── nucleo-f429zi-cube-freertos-lwip.launch
│ ├── nucleo-f429zi-keil-baremetal/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F429ZITx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f4xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ │ │ └── stm32f4xx_it.c
│ │ │ │ │ ├── startup_stm32f429xx.s
│ │ │ │ │ └── system_stm32f4xx.c
│ │ │ │ └── project.script
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f429zi-keil-freertos/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F429ZITx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f4xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ │ │ └── stm32f4xx_it.c
│ │ │ │ │ ├── startup_stm32f429xx.s
│ │ │ │ │ └── system_stm32f4xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f429zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── nucleo-f429zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ ├── language.settings.xml
│ │ │ └── stm32cubeide.project.prefs
│ │ ├── Core/
│ │ │ ├── Inc/
│ │ │ │ ├── FreeRTOSConfig.h
│ │ │ │ ├── hal.h
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ └── stm32f7xx_it.h
│ │ │ ├── Src/
│ │ │ │ ├── freertos.c
│ │ │ │ ├── main.c
│ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ ├── stm32f7xx_it.c
│ │ │ │ ├── syscalls.c
│ │ │ │ ├── sysmem.c
│ │ │ │ └── system_stm32f7xx.c
│ │ │ └── Startup/
│ │ │ └── startup_stm32f746zgtx.s
│ │ ├── Drivers/
│ │ │ ├── BSP/
│ │ │ │ └── Components/
│ │ │ │ └── lan8742/
│ │ │ │ ├── lan8742.c
│ │ │ │ └── lan8742.h
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32F7xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32f746xx.h
│ │ │ │ │ │ ├── stm32f7xx.h
│ │ │ │ │ │ └── system_stm32f7xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32F7xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32f7xx_hal.h
│ │ │ │ ├── stm32f7xx_hal_cortex.h
│ │ │ │ ├── stm32f7xx_hal_def.h
│ │ │ │ ├── stm32f7xx_hal_dma.h
│ │ │ │ ├── stm32f7xx_hal_dma_ex.h
│ │ │ │ ├── stm32f7xx_hal_eth.h
│ │ │ │ ├── stm32f7xx_hal_exti.h
│ │ │ │ ├── stm32f7xx_hal_flash.h
│ │ │ │ ├── stm32f7xx_hal_flash_ex.h
│ │ │ │ ├── stm32f7xx_hal_gpio.h
│ │ │ │ ├── stm32f7xx_hal_gpio_ex.h
│ │ │ │ ├── stm32f7xx_hal_i2c.h
│ │ │ │ ├── stm32f7xx_hal_i2c_ex.h
│ │ │ │ ├── stm32f7xx_hal_pwr.h
│ │ │ │ ├── stm32f7xx_hal_pwr_ex.h
│ │ │ │ ├── stm32f7xx_hal_rcc.h
│ │ │ │ ├── stm32f7xx_hal_rcc_ex.h
│ │ │ │ ├── stm32f7xx_hal_rng.h
│ │ │ │ ├── stm32f7xx_hal_tim.h
│ │ │ │ ├── stm32f7xx_hal_tim_ex.h
│ │ │ │ ├── stm32f7xx_hal_uart.h
│ │ │ │ ├── stm32f7xx_hal_uart_ex.h
│ │ │ │ ├── stm32f7xx_ll_bus.h
│ │ │ │ ├── stm32f7xx_ll_cortex.h
│ │ │ │ ├── stm32f7xx_ll_dma.h
│ │ │ │ ├── stm32f7xx_ll_exti.h
│ │ │ │ ├── stm32f7xx_ll_gpio.h
│ │ │ │ ├── stm32f7xx_ll_pwr.h
│ │ │ │ ├── stm32f7xx_ll_rcc.h
│ │ │ │ ├── stm32f7xx_ll_rng.h
│ │ │ │ ├── stm32f7xx_ll_system.h
│ │ │ │ ├── stm32f7xx_ll_usart.h
│ │ │ │ └── stm32f7xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32f7xx_hal.c
│ │ │ ├── stm32f7xx_hal_cortex.c
│ │ │ ├── stm32f7xx_hal_dma.c
│ │ │ ├── stm32f7xx_hal_dma_ex.c
│ │ │ ├── stm32f7xx_hal_eth.c
│ │ │ ├── stm32f7xx_hal_exti.c
│ │ │ ├── stm32f7xx_hal_flash.c
│ │ │ ├── stm32f7xx_hal_flash_ex.c
│ │ │ ├── stm32f7xx_hal_gpio.c
│ │ │ ├── stm32f7xx_hal_i2c.c
│ │ │ ├── stm32f7xx_hal_i2c_ex.c
│ │ │ ├── stm32f7xx_hal_pwr.c
│ │ │ ├── stm32f7xx_hal_pwr_ex.c
│ │ │ ├── stm32f7xx_hal_rcc.c
│ │ │ ├── stm32f7xx_hal_rcc_ex.c
│ │ │ ├── stm32f7xx_hal_rng.c
│ │ │ ├── stm32f7xx_hal_tim.c
│ │ │ ├── stm32f7xx_hal_tim_ex.c
│ │ │ ├── stm32f7xx_hal_uart.c
│ │ │ └── stm32f7xx_hal_uart_ex.c
│ │ ├── LWIP/
│ │ │ ├── App/
│ │ │ │ ├── lwip.c
│ │ │ │ └── lwip.h
│ │ │ └── Target/
│ │ │ ├── ethernetif.c
│ │ │ ├── ethernetif.h
│ │ │ └── lwipopts.h
│ │ ├── Middlewares/
│ │ │ └── Third_Party/
│ │ │ ├── FreeRTOS/
│ │ │ │ └── Source/
│ │ │ │ ├── CMSIS_RTOS/
│ │ │ │ │ ├── cmsis_os.c
│ │ │ │ │ └── cmsis_os.h
│ │ │ │ ├── croutine.c
│ │ │ │ ├── event_groups.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── FreeRTOS.h
│ │ │ │ │ ├── StackMacros.h
│ │ │ │ │ ├── croutine.h
│ │ │ │ │ ├── deprecated_definitions.h
│ │ │ │ │ ├── event_groups.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── message_buffer.h
│ │ │ │ │ ├── mpu_prototypes.h
│ │ │ │ │ ├── mpu_wrappers.h
│ │ │ │ │ ├── portable.h
│ │ │ │ │ ├── projdefs.h
│ │ │ │ │ ├── queue.h
│ │ │ │ │ ├── semphr.h
│ │ │ │ │ ├── stack_macros.h
│ │ │ │ │ ├── stream_buffer.h
│ │ │ │ │ ├── task.h
│ │ │ │ │ └── timers.h
│ │ │ │ ├── list.c
│ │ │ │ ├── portable/
│ │ │ │ │ ├── GCC/
│ │ │ │ │ │ └── ARM_CM7/
│ │ │ │ │ │ └── r0p1/
│ │ │ │ │ │ ├── port.c
│ │ │ │ │ │ └── portmacro.h
│ │ │ │ │ └── MemMang/
│ │ │ │ │ └── heap_4.c
│ │ │ │ ├── queue.c
│ │ │ │ ├── stream_buffer.c
│ │ │ │ ├── tasks.c
│ │ │ │ └── timers.c
│ │ │ └── LwIP/
│ │ │ ├── src/
│ │ │ │ ├── api/
│ │ │ │ │ ├── api_lib.c
│ │ │ │ │ ├── api_msg.c
│ │ │ │ │ ├── err.c
│ │ │ │ │ ├── if_api.c
│ │ │ │ │ ├── netbuf.c
│ │ │ │ │ ├── netdb.c
│ │ │ │ │ ├── netifapi.c
│ │ │ │ │ ├── sockets.c
│ │ │ │ │ └── tcpip.c
│ │ │ │ ├── apps/
│ │ │ │ │ └── mqtt/
│ │ │ │ │ └── mqtt.c
│ │ │ │ ├── core/
│ │ │ │ │ ├── altcp.c
│ │ │ │ │ ├── altcp_alloc.c
│ │ │ │ │ ├── altcp_tcp.c
│ │ │ │ │ ├── def.c
│ │ │ │ │ ├── dns.c
│ │ │ │ │ ├── inet_chksum.c
│ │ │ │ │ ├── init.c
│ │ │ │ │ ├── ip.c
│ │ │ │ │ ├── ipv4/
│ │ │ │ │ │ ├── autoip.c
│ │ │ │ │ │ ├── dhcp.c
│ │ │ │ │ │ ├── etharp.c
│ │ │ │ │ │ ├── icmp.c
│ │ │ │ │ │ ├── igmp.c
│ │ │ │ │ │ ├── ip4.c
│ │ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ │ └── ip4_frag.c
│ │ │ │ │ ├── ipv6/
│ │ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ │ ├── ethip6.c
│ │ │ │ │ │ ├── icmp6.c
│ │ │ │ │ │ ├── inet6.c
│ │ │ │ │ │ ├── ip6.c
│ │ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ │ ├── mld6.c
│ │ │ │ │ │ └── nd6.c
│ │ │ │ │ ├── mem.c
│ │ │ │ │ ├── memp.c
│ │ │ │ │ ├── netif.c
│ │ │ │ │ ├── pbuf.c
│ │ │ │ │ ├── raw.c
│ │ │ │ │ ├── stats.c
│ │ │ │ │ ├── sys.c
│ │ │ │ │ ├── tcp.c
│ │ │ │ │ ├── tcp_in.c
│ │ │ │ │ ├── tcp_out.c
│ │ │ │ │ ├── timeouts.c
│ │ │ │ │ └── udp.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── compat/
│ │ │ │ │ │ ├── posix/
│ │ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ │ └── sys/
│ │ │ │ │ │ │ └── socket.h
│ │ │ │ │ │ └── stdc/
│ │ │ │ │ │ └── errno.h
│ │ │ │ │ ├── lwip/
│ │ │ │ │ │ ├── altcp.h
│ │ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ │ ├── api.h
│ │ │ │ │ │ ├── apps/
│ │ │ │ │ │ │ ├── altcp_proxyconnect.h
│ │ │ │ │ │ │ ├── altcp_tls_mbedtls_opts.h
│ │ │ │ │ │ │ ├── fs.h
│ │ │ │ │ │ │ ├── http_client.h
│ │ │ │ │ │ │ ├── httpd.h
│ │ │ │ │ │ │ ├── httpd_opts.h
│ │ │ │ │ │ │ ├── lwiperf.h
│ │ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ │ ├── mdns_priv.h
│ │ │ │ │ │ │ ├── mqtt.h
│ │ │ │ │ │ │ ├── mqtt_opts.h
│ │ │ │ │ │ │ ├── mqtt_priv.h
│ │ │ │ │ │ │ ├── netbiosns.h
│ │ │ │ │ │ │ ├── netbiosns_opts.h
│ │ │ │ │ │ │ ├── smtp.h
│ │ │ │ │ │ │ ├── smtp_opts.h
│ │ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ │ ├── snmp_core.h
│ │ │ │ │ │ │ ├── snmp_mib2.h
│ │ │ │ │ │ │ ├── snmp_opts.h
│ │ │ │ │ │ │ ├── snmp_scalar.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_framework.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_usm.h
│ │ │ │ │ │ │ ├── snmp_table.h
│ │ │ │ │ │ │ ├── snmp_threadsync.h
│ │ │ │ │ │ │ ├── snmpv3.h
│ │ │ │ │ │ │ ├── sntp.h
│ │ │ │ │ │ │ ├── sntp_opts.h
│ │ │ │ │ │ │ ├── tftp_opts.h
│ │ │ │ │ │ │ └── tftp_server.h
│ │ │ │ │ │ ├── arch.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── debug.h
│ │ │ │ │ │ ├── def.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── err.h
│ │ │ │ │ │ ├── errno.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethip6.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── if_api.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── inet.h
│ │ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ │ ├── init.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ │ ├── mem.h
│ │ │ │ │ │ ├── memp.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── netbuf.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ ├── netif.h
│ │ │ │ │ │ ├── netifapi.h
│ │ │ │ │ │ ├── opt.h
│ │ │ │ │ │ ├── pbuf.h
│ │ │ │ │ │ ├── priv/
│ │ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ │ ├── prot/
│ │ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ │ └── udp.h
│ │ │ │ │ │ ├── raw.h
│ │ │ │ │ │ ├── sio.h
│ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ ├── sockets.h
│ │ │ │ │ │ ├── stats.h
│ │ │ │ │ │ ├── sys.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ │ ├── tcpip.h
│ │ │ │ │ │ ├── timeouts.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ └── netif/
│ │ │ │ │ ├── bridgeif.h
│ │ │ │ │ ├── bridgeif_opts.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethernet.h
│ │ │ │ │ ├── ieee802154.h
│ │ │ │ │ ├── lowpan6.h
│ │ │ │ │ ├── lowpan6_ble.h
│ │ │ │ │ ├── lowpan6_common.h
│ │ │ │ │ ├── lowpan6_opts.h
│ │ │ │ │ ├── ppp/
│ │ │ │ │ │ ├── ccp.h
│ │ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ │ ├── chap-new.h
│ │ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ │ ├── eap.h
│ │ │ │ │ │ ├── ecp.h
│ │ │ │ │ │ ├── eui64.h
│ │ │ │ │ │ ├── fsm.h
│ │ │ │ │ │ ├── ipcp.h
│ │ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ │ ├── lcp.h
│ │ │ │ │ │ ├── magic.h
│ │ │ │ │ │ ├── mppe.h
│ │ │ │ │ │ ├── ppp.h
│ │ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ │ ├── pppapi.h
│ │ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ │ ├── pppoe.h
│ │ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ │ ├── pppos.h
│ │ │ │ │ │ ├── upap.h
│ │ │ │ │ │ └── vj.h
│ │ │ │ │ ├── slipif.h
│ │ │ │ │ └── zepif.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.c
│ │ │ │ ├── bridgeif_fdb.c
│ │ │ │ ├── ethernet.c
│ │ │ │ ├── lowpan6.c
│ │ │ │ ├── lowpan6_ble.c
│ │ │ │ ├── lowpan6_common.c
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── auth.c
│ │ │ │ │ ├── ccp.c
│ │ │ │ │ ├── chap-md5.c
│ │ │ │ │ ├── chap-new.c
│ │ │ │ │ ├── chap_ms.c
│ │ │ │ │ ├── demand.c
│ │ │ │ │ ├── eap.c
│ │ │ │ │ ├── ecp.c
│ │ │ │ │ ├── eui64.c
│ │ │ │ │ ├── fsm.c
│ │ │ │ │ ├── ipcp.c
│ │ │ │ │ ├── ipv6cp.c
│ │ │ │ │ ├── lcp.c
│ │ │ │ │ ├── magic.c
│ │ │ │ │ ├── mppe.c
│ │ │ │ │ ├── multilink.c
│ │ │ │ │ ├── ppp.c
│ │ │ │ │ ├── pppapi.c
│ │ │ │ │ ├── pppcrypt.c
│ │ │ │ │ ├── pppoe.c
│ │ │ │ │ ├── pppol2tp.c
│ │ │ │ │ ├── pppos.c
│ │ │ │ │ ├── upap.c
│ │ │ │ │ ├── utils.c
│ │ │ │ │ └── vj.c
│ │ │ │ ├── slipif.c
│ │ │ │ └── zepif.c
│ │ │ └── system/
│ │ │ ├── OS/
│ │ │ │ └── sys_arch.c
│ │ │ └── arch/
│ │ │ ├── bpstruct.h
│ │ │ ├── cc.h
│ │ │ ├── cpu.h
│ │ │ ├── epstruct.h
│ │ │ ├── init.h
│ │ │ ├── lib.h
│ │ │ ├── perf.h
│ │ │ └── sys_arch.h
│ │ ├── README.md
│ │ ├── STM32F746ZGTX_FLASH.ld
│ │ ├── STM32F746ZGTX_RAM.ld
│ │ ├── nucleo-f746zg-cube-freertos-lwip Debug.launch
│ │ └── nucleo-f746zg-cube-freertos-lwip.ioc
│ ├── nucleo-f746zg-keil-baremetal/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos-tcp/
│ │ ├── EventRecorderStub.scvd
│ │ ├── FreeRTOSIPConfig.h
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── phyHandling.c
│ │ ├── phyHandling.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos_cmsis2/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos_cmsis2-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ └── RTX_Conf_CM.c
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx-mdk/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ └── RTX_Conf_CM.c
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── Net_Config.c
│ │ │ │ ├── Net_Config_BSD.h
│ │ │ │ ├── Net_Config_ETH_0.h
│ │ │ │ ├── Net_Config_TCP.h
│ │ │ │ └── Net_Config_UDP.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5-mdk/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── Net_Config.c
│ │ │ │ ├── Net_Config_BSD.h
│ │ │ │ ├── Net_Config_ETH_0.h
│ │ │ │ ├── Net_Config_TCP.h
│ │ │ │ └── Net_Config_UDP.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-f746zg-make-baremetal-builtin-cmsis_driver/
│ │ ├── MX_Device.h
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── RTE_Components.h
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mbedtls_config.h
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── nucleo-f746zg-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── nucleo-f746zg-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-make-freertos-tcp/
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOSIPConfig.h
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── stm32f7xx_hal.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── nucleo-g031-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-h563zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h563zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h723zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h723zg-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h743zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── portenta-h7-cube-baremetal-builtin/
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ └── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ ├── CM4/
│ │ │ ├── .cproject
│ │ │ ├── .project
│ │ │ ├── .settings/
│ │ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ │ ├── language.settings.xml
│ │ │ │ └── stm32cubeide.project.prefs
│ │ │ ├── Core/
│ │ │ │ ├── Inc/
│ │ │ │ │ ├── main.h
│ │ │ │ │ ├── stm32h7xx_hal_conf.h
│ │ │ │ │ └── stm32h7xx_it.h
│ │ │ │ ├── Src/
│ │ │ │ │ ├── main.c
│ │ │ │ │ ├── stm32h7xx_hal_msp.c
│ │ │ │ │ ├── stm32h7xx_it.c
│ │ │ │ │ ├── syscalls.c
│ │ │ │ │ └── sysmem.c
│ │ │ │ └── Startup/
│ │ │ │ └── startup_stm32h747xihx.s
│ │ │ └── STM32H747XIHX_FLASH.ld
│ │ ├── CM7/
│ │ │ ├── .cproject
│ │ │ ├── .project
│ │ │ ├── .settings/
│ │ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ │ ├── language.settings.xml
│ │ │ │ └── stm32cubeide.project.prefs
│ │ │ ├── Core/
│ │ │ │ ├── Inc/
│ │ │ │ │ ├── main.h
│ │ │ │ │ ├── mongoose_config.h
│ │ │ │ │ ├── stm32h7xx_hal_conf.h
│ │ │ │ │ └── stm32h7xx_it.h
│ │ │ │ ├── Src/
│ │ │ │ │ ├── main.c
│ │ │ │ │ ├── stm32h7xx_hal_msp.c
│ │ │ │ │ ├── stm32h7xx_it.c
│ │ │ │ │ ├── syscalls.c
│ │ │ │ │ └── sysmem.c
│ │ │ │ └── Startup/
│ │ │ │ └── startup_stm32h747xihx.s
│ │ │ └── STM32H747XIHX_FLASH.ld
│ │ ├── Common/
│ │ │ └── Src/
│ │ │ └── system_stm32h7xx_dualcore_boot_cm4_cm7.c
│ │ ├── Drivers/
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32H7xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32h747xx.h
│ │ │ │ │ │ ├── stm32h7xx.h
│ │ │ │ │ │ └── system_stm32h7xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_armclang_ltm.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv81mml.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm35p.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32H7xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32h7xx_hal.h
│ │ │ │ ├── stm32h7xx_hal_cortex.h
│ │ │ │ ├── stm32h7xx_hal_def.h
│ │ │ │ ├── stm32h7xx_hal_dma.h
│ │ │ │ ├── stm32h7xx_hal_dma_ex.h
│ │ │ │ ├── stm32h7xx_hal_exti.h
│ │ │ │ ├── stm32h7xx_hal_flash.h
│ │ │ │ ├── stm32h7xx_hal_flash_ex.h
│ │ │ │ ├── stm32h7xx_hal_gpio.h
│ │ │ │ ├── stm32h7xx_hal_gpio_ex.h
│ │ │ │ ├── stm32h7xx_hal_hsem.h
│ │ │ │ ├── stm32h7xx_hal_i2c.h
│ │ │ │ ├── stm32h7xx_hal_i2c_ex.h
│ │ │ │ ├── stm32h7xx_hal_mdma.h
│ │ │ │ ├── stm32h7xx_hal_pwr.h
│ │ │ │ ├── stm32h7xx_hal_pwr_ex.h
│ │ │ │ ├── stm32h7xx_hal_rcc.h
│ │ │ │ ├── stm32h7xx_hal_rcc_ex.h
│ │ │ │ ├── stm32h7xx_hal_rng.h
│ │ │ │ ├── stm32h7xx_hal_rng_ex.h
│ │ │ │ ├── stm32h7xx_hal_tim.h
│ │ │ │ ├── stm32h7xx_hal_tim_ex.h
│ │ │ │ ├── stm32h7xx_hal_uart.h
│ │ │ │ ├── stm32h7xx_hal_uart_ex.h
│ │ │ │ ├── stm32h7xx_ll_bus.h
│ │ │ │ ├── stm32h7xx_ll_cortex.h
│ │ │ │ ├── stm32h7xx_ll_crs.h
│ │ │ │ ├── stm32h7xx_ll_dma.h
│ │ │ │ ├── stm32h7xx_ll_dmamux.h
│ │ │ │ ├── stm32h7xx_ll_exti.h
│ │ │ │ ├── stm32h7xx_ll_gpio.h
│ │ │ │ ├── stm32h7xx_ll_hsem.h
│ │ │ │ ├── stm32h7xx_ll_lpuart.h
│ │ │ │ ├── stm32h7xx_ll_pwr.h
│ │ │ │ ├── stm32h7xx_ll_rcc.h
│ │ │ │ ├── stm32h7xx_ll_rng.h
│ │ │ │ ├── stm32h7xx_ll_system.h
│ │ │ │ ├── stm32h7xx_ll_usart.h
│ │ │ │ └── stm32h7xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32h7xx_hal.c
│ │ │ ├── stm32h7xx_hal_cortex.c
│ │ │ ├── stm32h7xx_hal_dma.c
│ │ │ ├── stm32h7xx_hal_dma_ex.c
│ │ │ ├── stm32h7xx_hal_exti.c
│ │ │ ├── stm32h7xx_hal_flash.c
│ │ │ ├── stm32h7xx_hal_flash_ex.c
│ │ │ ├── stm32h7xx_hal_gpio.c
│ │ │ ├── stm32h7xx_hal_hsem.c
│ │ │ ├── stm32h7xx_hal_i2c.c
│ │ │ ├── stm32h7xx_hal_i2c_ex.c
│ │ │ ├── stm32h7xx_hal_mdma.c
│ │ │ ├── stm32h7xx_hal_pwr.c
│ │ │ ├── stm32h7xx_hal_pwr_ex.c
│ │ │ ├── stm32h7xx_hal_rcc.c
│ │ │ ├── stm32h7xx_hal_rcc_ex.c
│ │ │ ├── stm32h7xx_hal_rng.c
│ │ │ ├── stm32h7xx_hal_rng_ex.c
│ │ │ ├── stm32h7xx_hal_tim.c
│ │ │ ├── stm32h7xx_hal_tim_ex.c
│ │ │ ├── stm32h7xx_hal_uart.c
│ │ │ └── stm32h7xx_hal_uart_ex.c
│ │ ├── Portenta_H7.ioc
│ │ ├── README.md
│ │ └── getfirmware.mk
│ ├── portenta-h7-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.c
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── rm2-nucleo-f429zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── rm2-nucleo-f746zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── stm32h573i-dk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── stm32h573i-dk-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── stm32h747i-disco-make-baremetal-builtin/
│ ├── Makefile
│ ├── README.md
│ └── mbedtls_config.h
├── tcp/
│ ├── README.md
│ ├── modbus-dashboard/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── packed_fs.c
│ │ ├── tailwind.config.js
│ │ └── web_root/
│ │ ├── bundle.js
│ │ ├── index.html
│ │ └── main.js
│ ├── socks5-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── tcp/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── tcpip/
│ ├── README.md
│ ├── pcap-driver/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── tap-driver/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── ti/
│ ├── ek-tm4c1294xl-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── ek-tm4c1294xl-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── cmsis_tm4c.patch
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── startup.c
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tinyusb.patch
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── ek-tm4c1294xl-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── ti-ek-tm4c1294xl-http-server/
│ └── Makefile
├── tls/
│ └── README.md
├── udp/
│ ├── README.md
│ ├── captive-dns-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-sd-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── sntp-time-sync/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── ssdp-search/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── wch/
│ └── ch32v307-make-baremetal-builtin/
│ ├── Makefile
│ ├── hal.c
│ ├── hal.h
│ ├── main.c
│ ├── mongoose_config.h
│ └── vendor/
│ ├── ch32v30x.h
│ ├── core_riscv.c
│ ├── core_riscv.h
│ ├── link.ld
│ ├── startup_ch32v30x_D8C.S
│ └── system_ch32v30x.c
├── websocket/
│ ├── README.md
│ ├── json-rpc-over-websocket/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ └── rpc-over-websocket.js
│ ├── websocket-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── websocket-server/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── test.html
├── webui/
│ ├── README.md
│ ├── live-log/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── webui-login/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── webui-plain/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ └── style.css
│ ├── webui-preact/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── webui-push-rest/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── webui-push-ws/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ └── webui-rest/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── web_root/
│ └── index.html
└── zephyr/
├── Makefile
├── README.md
├── device-dashboard/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── main.c
│ └── mongoose_config.h
├── http-client/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
├── http-server/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
├── mqtt-aws-client/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
└── websocket-server/
├── CMakeLists.txt
├── Makefile
├── overlay-e1000.conf
├── prj.conf
└── src/
├── certs.h
├── main.c
└── mongoose_config.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .clang-format
================================================
BasedOnStyle: Google
AllowShortFunctionsOnASingleLine: false
SpaceAfterCStyleCast: true
PointerBindsToType: false
DerivePointerBinding: false
IncludeBlocks: Preserve
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
================================================
FILE: .github/ISSUE_TEMPLATE/issue.md
================================================
---
name: Issue template
about: Please fill this issue template for reporting Mongoose issues
#title:
#labels:
#assignees:
---
- My goal is: _describe_
- My actions were: _describe_
- My expectation was: _describe_
- The result I saw: _provide logs or description_
- My question is: _your question_
# Environment
- mongoose version: _X.Y_
- Compiler/IDE and SDK: ZZZ version _X.Y_
- Target hardware/board: _?_
- Connectivity chip/module: _?_
- Target RTOS/OS (if applicable): _?_
================================================
FILE: .github/workflows/cifuzz.yml
================================================
name: CIFuzz
on:
schedule:
- cron: '0 2 * * *' # run at 2 AM UTC
# Allow manual runs
workflow_dispatch:
jobs:
Fuzzing:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: Build Fuzzers
id: build
uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
with:
oss-fuzz-project-name: 'mongoose'
dry-run: false
language: c++
- name: Run Fuzzers
uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
with:
oss-fuzz-project-name: 'mongoose'
fuzz-seconds: 600
dry-run: false
language: c++
- name: Upload Crash
uses: actions/upload-artifact@v4
if: failure() && steps.build.outcome == 'success'
with:
name: artifacts
path: ./out/artifacts
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL Scanning"
# https://github.com/github/codeql-action
on:
#schedule:
# - cron: '30 23 * * *' # run at 11:30 PM UTC
# Allow manual runs
workflow_dispatch:
env:
IPV6: 0
jobs:
CodeQL-Build:
runs-on: ubuntu-latest
strategy:
fail-fast: false
permissions:
security-events: write
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: cpp
- run: |
make -C test test CC=gcc ASAN= ASAN_OPTIONS=
./test/setup_ga_network.sh && make -C test mip_test CC=gcc ASAN= ASAN_OPTIONS=
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
================================================
FILE: .github/workflows/fuzz.yml
================================================
name: Fuzz
on:
schedule:
- cron: '0 21 * * *' # run at 9 PM UTC
# Allow manual runs
workflow_dispatch:
env:
CC: clang
jobs:
fuzz:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [fuzz, fuzz_tls]
name: ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: make -C test ${{ matrix.target }} ARGS="-max_total_time=14400"
# as we're not getting access to test units causing a problem, convert from the log:
# base64 -d > dataofdeath
# then paste the base64 data, enter, Ctrl-D; maybe check with hexdump -C dataofdeath
================================================
FILE: .github/workflows/nightly.yml
================================================
name: Full build
on:
schedule:
- cron: '0 22 * * *' # run at 10 PM UTC
# Allow manual runs
workflow_dispatch:
env:
IPV6: 0
jobs:
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
cc: [gcc, clang, g++, clang++]
target: [test]
ssl: ["", BUILTIN, MBEDTLS, OPENSSL, WOLFSSL]
select: ["-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=1"]
exclude:
- ssl: MBEDTLS
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0"
- ssl: MBEDTLS
select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0"
- ssl: OPENSSL
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0"
- ssl: OPENSSL
select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0"
- ssl: WOLFSSL
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0"
- ssl: WOLFSSL
select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0"
include:
- ssl: BUILTIN
cc: gcc
target: test
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=1 -DMG_ENABLE_CHACHA20=0"
name: linux ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
CC: ${{ matrix.cc }}
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }} -DMQTT_LOCALHOST -DNO_ABORT
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: sudo apt -y update ; sudo apt -y install libmbedtls-dev libwolfssl-dev && test/setup_mqtt_server.sh && make -C test ${{ matrix.target }} > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/linux_${{ matrix.target }}_${{ matrix.cc }}_${{ matrix.ssl }}_${{ matrix.select }}_$(date +"%Y%m%d").json"
mip:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
cc: [gcc, clang, g++, clang++]
target: [mip_test, mip_tap_test]
ssl: ["", BUILTIN, MBEDTLS, OPENSSL, WOLFSSL]
# #3226: built-in TCP is currently not working with WolfSSL (builds fine)
exclude:
- ssl: WOLFSSL
target: mip_tap_test
name: ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }}
env:
CC: ${{ matrix.cc }}
SSL: ${{ matrix.ssl }}
TFLAGS: -DMQTT_LOCALHOST -DNO_ABORT
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: if [ "${{ matrix.target }}" == "mip_tap_test" ]; then ./test/setup_ga_network.sh ; export IPV6=0; else export IPV6=1 ; fi && sudo apt -y update ; sudo apt -y install libmbedtls-dev libwolfssl-dev && make -C test ${{ matrix.target }} > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/${{ matrix.target }}_${{ matrix.cc }}_${{ matrix.ssl }}_$(date +"%Y%m%d").json"
mip89:
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: 1 # no parallel runs, to minimize MQTT errors
matrix:
target: [mip_vc98]
name: mip89 ${{ matrix.target }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: make -C test ${{ matrix.target }} IPV6=1
s390:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN]
name: S390 SSL=${{ matrix.ssl }}
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update ; sudo apt -y install binfmt-support qemu-user-static && ./test/setup_mqtt_server.sh && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make -C test s390 SSL=${{ matrix.ssl }} MULTIREC=NO
armhf:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN]
name: ArmHF SSL=${{ matrix.ssl }}
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update ; sudo apt -y install binfmt-support qemu-user-static && ./test/setup_mqtt_server.sh && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make -C test armhf SSL=${{ matrix.ssl }} MULTIREC=NO
unamalgamated-mg_prefix:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN, MBEDTLS, OPENSSL, WOLFSSL]
name: unamalgamated-mg_prefix SSL=${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update ; sudo apt -y install libmbedtls-dev libwolfssl-dev
- run: make -C test unamalgamated SSL=${{ matrix.ssl }} && make -C test mg_prefix
valgrind:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN, MBEDTLS, OPENSSL, WOLFSSL]
name: Valgrind SSL=${{ matrix.ssl }}
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update ; sudo apt -y install libmbedtls-dev libwolfssl-dev valgrind
- run: ./test/setup_mqtt_server.sh && make -C test valgrind SSL=${{ matrix.ssl }}
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN, MBEDTLS, OPENSSL, WOLFSSL]
select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1]
exclude:
- ssl: MBEDTLS
select: -DMG_ENABLE_POLL=0
- ssl: MBEDTLS # see issue#2694
select: -DMG_ENABLE_POLL=1
- ssl: OPENSSL
select: -DMG_ENABLE_POLL=0
- ssl: WOLFSSL
select: -DMG_ENABLE_POLL=0
name: macos SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }} -DMQTT_LOCALHOST ${{ matrix.env.tflags }} -DNO_ABORT -Wno-sign-conversion -Wno-undef # Workarounds for MbedTLS
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: brew install mbedtls wolfssl mosquitto gawk # jq openssl already pre-installed
- run: /opt/homebrew/opt/mosquitto/sbin/mosquitto -c /Users/runner/work/mongoose/mongoose/test/mosquitto.conf.macos &
- run: make -C test test ASAN_OPTIONS= MBEDTLS=$(echo $(brew --cellar)/mbedtls*/*) OPENSSL=$(echo $(brew --cellar)/openssl*/*) WOLFSSL=$(echo $(brew --cellar)/wolfssl*/*) > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/macos_test_cc_${{ matrix.ssl }}_${{ matrix.select }}_$(date +"%Y%m%d").json"
windows:
runs-on: ubuntu-latest
strategy:
fail-fast: false
max-parallel: 1 # no parallel runs, to minimize MQTT errors
matrix:
target: [vc98, vc17, vc22, mingw, mingw++]
ssl: ["", BUILTIN]
select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1]
exclude:
- target: vc98
select: -DMG_ENABLE_POLL=1
name: windows ${{ matrix.target }} SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }} -DMQTT_LOCALHOST -DNO_ABORT
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: ./test/setup_mqtt_server.sh && make -C test ${{ matrix.target }} > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/windows_${{ matrix.target }}_${{ matrix.cc }}_${{ matrix.ssl }}_${{ matrix.select }}_$(date +"%Y%m%d").json"
arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN]
name: Arm SSL=${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
- run: make -C test arm SSL=${{ matrix.ssl }}
riscv:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN]
name: RISC-V SSL=${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
- run: make -C test riscv SSL=${{ matrix.ssl }}
tutorials:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: [-DMG_TLS=MG_TLS_NONE, -DMG_TLS=MG_TLS_BUILTIN]
name: tutorials ${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: sudo apt -y install libpcap-dev
- run: make -C test tutorials CFLAGS_EXTRA="${{ matrix.ssl }}" > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/tutorials_${{ matrix.ssl }}_$(date +"%Y%m%d").json"
- run: make -C test clean_tutorials
tutorials_win:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
ssl: [-DMG_TLS=MG_TLS_NONE, -DMG_TLS=MG_TLS_BUILTIN]
name: tutorials_win ${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
# - uses: egor-tensin/setup-mingw@v2
# with:
# platform: x64
- name: test they build
run: make -C test tutorials_win CFLAGS_EXTRA="${{ matrix.ssl }}"
shell: cmd
- name: test they clean
run: make -C test clean_tutorials_win
shell: cmd
tutorials_mac:
runs-on: macos-latest
env: { HOMEBREW_NO_AUTO_UPDATE: 1 }
strategy:
fail-fast: false
matrix:
ssl: [-DMG_TLS=MG_TLS_NONE, -DMG_TLS=MG_TLS_BUILTIN]
name: tutorials_mac ${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
- run: make -C test tutorials_mac CFLAGS_EXTRA="${{ matrix.ssl }}"
- run: make -C test clean_tutorials_mac
arduino:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: echo # nothing specific to install or do
- run: make -C test/arduino
- run: make -C test/arduino cleanall
# wizard_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path: esp32/esp32-idf
# name: ${{ matrix.example.path }}
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - run: echo # nothing specific to install or do
# fi
# - run: make -C tutorials/${{ matrix.example.path }} build
wizard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: infineon/xmc47_relax-make-baremetal-builtin
- path: infineon/xmc_plt2go_4400-make-baremetal-builtin
- path: infineon/xmc72_evk-make-baremetal-builtin
- path: nxp/frdm-mcxn947-make-baremetal-builtin
- path: nxp/frdm-mcxn947-make-freertos-builtin
- path: nxp/rt1020-evk-make-baremetal-builtin
- path: nxp/rt1060-evk-make-baremetal-builtin
- path: nxp/rt1170-evk-make-baremetal-builtin
- path: pico-sdk/pico-w-picosdk-baremetal-builtin
- path: pico-sdk/pico-2-w-picosdk-baremetal-builtin
- path: pico-sdk/w5500-evb-pico-picosdk-baremetal-builtin
- path: pico-sdk/w5500-evb-pico2-picosdk-baremetal-builtin
- path: stm32/nucleo-f429zi-make-baremetal-builtin
- path: stm32/nucleo-f429zi-make-freertos-builtin
- path: stm32/nucleo-f746zg-make-baremetal-builtin
- path: stm32/nucleo-f746zg-make-freertos-builtin
- path: stm32/nucleo-h563zi-make-baremetal-builtin
- path: stm32/nucleo-h563zi-make-freertos-builtin
- path: stm32/nucleo-h723zg-make-baremetal-builtin
- path: stm32/nucleo-h723zg-make-freertos-builtin
- path: stm32/nucleo-h743zi-make-baremetal-builtin
- path: stm32/nucleo-h743zi-make-freertos-builtin
- path: stm32/stm32h573i-dk-make-baremetal-builtin
- path: stm32/stm32h573i-dk-make-freertos-builtin
- path: ti/ek-tm4c1294xl-make-baremetal-builtin
- path: ti/ek-tm4c1294xl-make-freertos-builtin
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/${{ matrix.example.path }} build
generic_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: micropython/esp32
- path: http/uart-bridge/esp32
- path: http/http-client/esp8266/http-client-server
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: echo # nothing specific to install or do
- run: make -C tutorials/${{ matrix.example.path }} build
generic_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: mqtt/mqtt-client/microchip/same54-xpro
- path: nxp/nxp-frdmk66f-freertos
- path: nxp/nxp-lpcxpresso54s018m-freertos
- path: nxp/nxp-mimxrt1020-freertos
- path: nxp/nxp-evkbimxrt1050-lwip-freertos
- path: nxp/nxp-evkmimxrt1020-lwip-freertos
- path: nxp/nxp-evkmimxrt1024-lwip-freertos
- path: nxp/nxp-evkmimxrt1060-lwip-freertos
- path: nxp/nxp-evkmimxrt1064-lwip-freertos
- path: nxp/nxp-evkmimxrt1160-cm7-lwip-freertos
- path: nxp/nxp-evkmimxrt1170-cm7-lwip-freertos
- path: nxp/nxp-frdmk64f-lwip-freertos
- path: nxp/nxp-frdmk66f-lwip-freertos
- path: nxp/nxp-lpcxpresso54018-lwip-freertos
- path: nxp/nxp-lpcxpresso54608-lwip-freertos
- path: nxp/nxp-lpcxpresso54618-lwip-freertos
- path: nxp/nxp-lpcxpresso54628-lwip-freertos
- path: nxp/nxp-twrk65f180m-lwip-freertos
- path: nxp/nxp-twrkv58f220m-lwip-freertos
- path: pico-sdk/pico-rmii
- path: stm32/nucleo-f429zi-make-baremetal-builtin-rndis
- path: stm32/nucleo-f746zg-make-baremetal-builtin-rndis
- path: stm32/nucleo-g031-make-baremetal-builtin
- path: ti/ti-ek-tm4c1294xl-http-server
- path: ti/ek-tm4c1294xl-make-baremetal-builtin-rndis
name: ${{ matrix.example.path }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/${{ matrix.example.path }} build
device_dashboard_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: esp32
name: ${{ matrix.example.path }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: echo # nothing specific to install or do
- run: make -C tutorials/http/device-dashboard/${{ matrix.example.path }} build
device_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ssl: ["", -DMG_TLS=MG_TLS_BUILTIN]
example:
- path: http/device-dashboard/microchip/same54-xpro
- path: nxp/rt1020-evk-make-freertos-builtin
- path: nxp/rt1060-evk-make-freertos-builtin
- path: nxp/rt1170-evk-make-freertos-builtin
- path: renesas/ek-ra6m4-make-baremetal-builtin
- path: pico-sdk/pico-rndis-dashboard
- path: pico-sdk/pico-w-picosdk-freertos-lwip
- path: pico-sdk/pico-2-w-picosdk-freertos-lwip
- path: stm32/nucleo-f746zg-make-freertos-tcp
- path: stm32/nucleo-f746zg-make-baremetal-builtin-cmsis_driver
name: ${{ matrix.example.path }} ${{ matrix.ssl }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/${{ matrix.example.path }} build CFLAGS_EXTRA="${{ matrix.ssl }}"
# mqtt_dashboard_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path:
# name: ${{ matrix.example.path }}
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - run: echo # nothing specific to install or do
# - run: make -C tutorials/${{ matrix.example.path }} build
mqtt_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: pico-sdk/pico-rndis-device
name: ${{ matrix.example.path }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/${{ matrix.example.path }} build
# dual_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path:
# name: ${{ matrix.example.path }}
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - run: echo # nothing specific to install or do
# - run: make -C tutorials/${{ matrix.example.path }} device_dashboard
# - run: make -C tutorials/${{ matrix.example.path }} mqtt_dashboard
cube_examples:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: sudo pip install yq
- run: cd test/cube && make
================================================
FILE: .github/workflows/nightly_tests.yml
================================================
name: Full test
on:
schedule:
- cron: '0 23 * * *' # run at 11 PM UTC
# Allow manual runs
workflow_dispatch:
env:
IPV6: 0
jobs:
test_f7:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/stm32/nucleo-f746zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-f746zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-f746zg-make-freertos-tcp test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- name: Cube
run: sudo pip install yq
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
- run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
test_f4:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/stm32/nucleo-f429zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-f429zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- name: Cube
run: sudo pip install yq
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
- run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
test_h743:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/stm32/nucleo-h743zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-h743zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# - name: Cube
# run: echo # nothing specific to install or do
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-h743zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
# - run: make -C test/cube PROJECTS=../../tutorials/stm32/nucleo-h743zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
test_h723:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/stm32/nucleo-h723zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-h723zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_h5:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/stm32/nucleo-h563zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/stm32/nucleo-h563zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_rt1020:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/nxp/rt1020-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/nxp/rt1020-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_rt1060:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/nxp/rt1060-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/nxp/rt1060-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_rt1170:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/nxp/rt1170-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/nxp/rt1170-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_ra6m4:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 3 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/renesas/ek-ra6m4-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# - run: make -C tutorials/renesas/ek-ra6m4-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_tm4c:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/ti/ek-tm4c1294xl-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/ti/ek-tm4c1294xl-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_same54:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: baremetal
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/http/device-dashboard/microchip/same54-xpro test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- run: make -C tutorials/mqtt/mqtt-client/microchip/same54-xpro test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_pico_w5500:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- name: SDK
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- run: make -C tutorials/pico-sdk/w5500-evb-pico-picosdk-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
================================================
FILE: .github/workflows/on_demand.yml
================================================
name: On demand ad hoc test
on:
workflow_dispatch:
env:
IPV6: 0
jobs:
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
ssl: [MBEDTLS, WOLFSSL]
select: [-DMG_ENABLE_POLL=1]
name: macos SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }} -DMQTT_LOCALHOST -DNO_ABORT -Wno-sign-conversion -Wno-undef # Workarounds for MbedTLS
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- uses: webfactory/ssh-agent@v0.9.1
with:
ssh-private-key: ${{ secrets.HEALTH_TESTS_SSH_KEY }}
- run: brew install mbedtls wolfssl mosquitto gawk # jq openssl already pre-installed
- run: /opt/homebrew/opt/mosquitto/sbin/mosquitto -c /Users/runner/work/mongoose/mongoose/test/mosquitto.conf.macos &
- run: make -C test test ASAN_OPTIONS= MBEDTLS=$(echo $(brew --cellar)/mbedtls*/*) OPENSSL=$(echo $(brew --cellar)/openssl*/*) WOLFSSL=$(echo $(brew --cellar)/wolfssl*/*) > log
- if: success() || failure()
run: |
cat log
test/health.awk < log > json
scp -o "StrictHostKeyChecking=no" json "root@176.9.217.245:/data/downloads/health/macos_test_cc_${{ matrix.ssl }}_${{ matrix.select }}_$(date +"%Y%m%d").json"
================================================
FILE: .github/workflows/quicktest.yml
================================================
name: Build and test - essentials
on:
push:
paths:
- "**Makefile"
- "**.c"
- "**.h"
# Allow manual runs
workflow_dispatch:
env:
IPV6: 0
jobs:
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
cc: [gcc, clang++]
target: [test, mip_test]
ssl: ["", BUILTIN]
name: linux ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }}
env:
CC: ${{ matrix.cc }}
SSL: ${{ matrix.ssl }}
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: if [ "${{ matrix.target }}" == "test" ]; then ./test/setup_mqtt_server.sh ; fi && make -C test ${{ matrix.target }}
s390:
runs-on: ubuntu-latest
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update ; sudo apt -y install binfmt-support qemu-user-static && ./test/setup_mqtt_server.sh && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make -C test s390
armhf:
runs-on: ubuntu-latest
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update ; sudo apt -y install binfmt-support qemu-user-static && ./test/setup_mqtt_server.sh && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make -C test armhf
unamalgamated-mg_prefix:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: make -C test unamalgamated && make -C test mg_prefix
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
ssl: ["", BUILTIN]
name: macos SSL=${{ matrix.ssl }}
env:
SSL: ${{ matrix.ssl }}
TFLAGS: -DMQTT_LOCALHOST # -DNO_SNTP_CHECK
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: |
brew install mosquitto
/opt/homebrew/opt/mosquitto/sbin/mosquitto -c /Users/runner/work/mongoose/mongoose/test/mosquitto.conf.macos &
make -C test test ASAN_OPTIONS=
windows:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [vc98, vc22, mingw++]
name: windows ${{ matrix.target }}
env:
TFLAGS: -DMQTT_LOCALHOST
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: ./test/setup_mqtt_server.sh && make -C test ${{ matrix.target }}
arm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make -C test arm
riscv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make -C test riscv
tutorials:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: make -C test tutorials_essential
- run: make -C test clean_tutorials_essential
tutorials_win:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
# - uses: egor-tensin/setup-mingw@v2
# with:
# platform: x64
- name: test they build
run: make -C test tutorials_win
shell: cmd
- name: test they clean
run: make -C test clean_tutorials_win
shell: cmd
tutorials_mac:
runs-on: macos-latest
env: { HOMEBREW_NO_AUTO_UPDATE: 1 }
steps:
- uses: actions/checkout@v4
- run: make -C test tutorials_mac
- run: make -C test clean_tutorials_mac
# wizard_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path: esp32/esp32-idf
# name: ${{ matrix.example.path }}
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - run: |
# if ./test/match_changed_files.sh '^src'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
# - if: ${{ env.GO == 1 }}
# run: make -C tutorials/${{ matrix.example.path }} build
wizard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: infineon/xmc47_relax-make-baremetal-builtin
- path: infineon/xmc_plt2go_4400-make-baremetal-builtin
- path: infineon/xmc72_evk-make-baremetal-builtin
- path: nxp/frdm-mcxn947-make-baremetal-builtin
- path: nxp/frdm-mcxn947-make-freertos-builtin
- path: nxp/rt1020-evk-make-baremetal-builtin
- path: nxp/rt1060-evk-make-baremetal-builtin
- path: nxp/rt1170-evk-make-baremetal-builtin
- path: pico-sdk/pico-w-picosdk-baremetal-builtin
- path: pico-sdk/pico-2-w-picosdk-baremetal-builtin
- path: pico-sdk/w5500-evb-pico-picosdk-baremetal-builtin
- path: pico-sdk/w5500-evb-pico2-picosdk-baremetal-builtin
- path: stm32/nucleo-f429zi-make-baremetal-builtin
- path: stm32/nucleo-f429zi-make-freertos-builtin
- path: stm32/nucleo-f746zg-make-baremetal-builtin
- path: stm32/nucleo-f746zg-make-freertos-builtin
- path: stm32/nucleo-h563zi-make-baremetal-builtin
- path: stm32/nucleo-h563zi-make-freertos-builtin
- path: stm32/nucleo-h723zg-make-baremetal-builtin
- path: stm32/nucleo-h723zg-make-freertos-builtin
- path: stm32/nucleo-h743zi-make-baremetal-builtin
- path: stm32/nucleo-h743zi-make-freertos-builtin
- path: stm32/stm32h573i-dk-make-baremetal-builtin
- path: stm32/stm32h573i-dk-make-freertos-builtin
- path: ti/ek-tm4c1294xl-make-baremetal-builtin
- path: ti/ek-tm4c1294xl-make-freertos-builtin
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C tutorials/${{ matrix.example.path }} build
generic_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: http/uart-bridge/esp32
- path: http/http-client/esp8266/http-client-server
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^src|^tutorials/http/uart-bridge|^tutorials/${{ matrix.example.path }}'; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: |
# nothing specific to install or do
- if: ${{ env.GO == 1 }}
run: make -C tutorials/${{ matrix.example.path }} build
generic_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: stm32/nucleo-g031-make-baremetal-builtin
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^src|^tutorials/${{ matrix.example.path }}'; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- if: ${{ env.GO == 1 }}
run: make -C tutorials/${{ matrix.example.path }} build
device_dashboard_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: esp32
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: make -C tutorials/http/device-dashboard/${{ matrix.example.path }} build
device_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: http/device-dashboard/microchip/same54-xpro
- path: nxp/rt1020-evk-make-freertos-builtin
- path: nxp/rt1060-evk-make-freertos-builtin
- path: nxp/rt1170-evk-make-freertos-builtin
- path: renesas/ek-ra6m4-make-baremetal-builtin
- path: pico-sdk/pico-rndis-dashboard
- path: pico-sdk/pico-w-picosdk-freertos-lwip
- path: pico-sdk/pico-2-w-picosdk-freertos-lwip
- path: stm32/nucleo-f746zg-make-freertos-tcp
- path: stm32/nucleo-f746zg-make-baremetal-builtin-cmsis_driver
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|^tutorials/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C tutorials/${{ matrix.example.path }} build
# mqtt_dashboard_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path:
# name: ${{ matrix.example.path }}
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - run: |
# if ./test/match_changed_files.sh '^src|tutorials/mqtt/mqtt-dashboard/device|^tutorials/${{ matrix.example.path }}'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
# - if: ${{ env.GO == 1 }}
# run: make -C tutorials/${{ matrix.example.path }} build
mqtt_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: pico-sdk/pico-rndis-device
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|tutorials/mqtt/mqtt-dashboard/device|^tutorials/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C tutorials/${{ matrix.example.path }} build
cube_examples:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|tutorials/stm32/nucleo-*-cube-*'; then
echo GO=1 >> $GITHUB_ENV
sudo pip install yq
fi
- if: ${{ env.GO == 1 }}
run: cd test/cube && make
# test_f7:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-f7.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# # always run baremetal on core or dashboard or specific example changes; other examples only on specific example changes
# - if: ${{ env.GO == 1 }}
# continue-on-error: true # continue so next test has a chance to re-flash and exit from collisions and flash failures
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-f746zg-make-baremetal-builtin'; then
# make -C tutorials/stm32/nucleo-f746zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f746zg-make-freertos-builtin'; then
# make -C tutorials/stm32/nucleo-f746zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f746zg-make-freertos-tcp'; then
# make -C tutorials/stm32/nucleo-f746zg-make-freertos-tcp test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - name: Cube
# run: |
# echo GO=0 >> $GITHUB_ENV
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f7.*-cube-'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f746zg-cube-baremetal-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
## fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f746zg-cube-freertos-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
## fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f746zg-cube-freertos-lwip'; then
# make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f746zg-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
# fi
#
#
# test_f4:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-f4.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-f429zi-make-baremetal-builtin'; then
# make -C tutorials/stm32/nucleo-f429zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f429zi-make-freertos-builtin'; then
# make -C tutorials/stm32/nucleo-f429zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - name: Cube
# run: |
# echo GO=0 >> $GITHUB_ENV
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f4.*-cube-'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f429zi-cube-baremetal-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
## fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f429zi-cube-freertos-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
## fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-f429zi-cube-freertos-lwip'; then
# make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-f429zi-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
# fi
#
# test_h743:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h74.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h743zi-make-baremetal-builtin'; then
# make -C tutorials/stm32/nucleo-h743zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h743zi-make-freertos-builtin'; then
# make -C tutorials/stm32/nucleo-h743zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
## - name: Cube
## run: |
## echo GO=0 >> $GITHUB_ENV
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h74.*-cube-'; then
## echo GO=1 >> $GITHUB_ENV
## # nothing specific to install or do
## fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h743zi-cube-baremetal-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-h743zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
## fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h743zi-cube-freertos-builtin'; then
## make -C test/cube test PROJECTS=../../tutorials/stm32/nucleo-h743zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
## fi
#
# test_h723:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h72.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h723zg-make-baremetal-builtin'; then
# make -C tutorials/stm32/nucleo-h723zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h723zg-make-freertos-builtin'; then
# make -C tutorials/stm32/nucleo-h723zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_h5:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h5.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/stm32/nucleo-h563zi-make-baremetal-builtin'; then
# make -C tutorials/stm32/nucleo-h563zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/stm32/nucleo-h563zi-make-freertos-builtin'; then
# make -C tutorials/stm32/nucleo-h563zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_rt1020:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/nxp/rt1020.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/nxp/rt1020-evk-make-baremetal-builtin'; then
# make -C tutorials/nxp/rt1020-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/nxp/rt1020-evk-make-freertos-builtin'; then
# make -C tutorials/nxp/rt1020-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_rt1060:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/nxp/rt1060.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/nxp/rt1060-evk-make-baremetal-builtin'; then
# make -C tutorials/nxp/rt1060-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/nxp/rt1060-evk-make-freertos-builtin'; then
# make -C tutorials/nxp/rt1060-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_rt1170:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/nxp/rt1170.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/nxp/rt1170-evk-make-baremetal-builtin'; then
# make -C tutorials/nxp/rt1170-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/nxp/rt1170-evk-make-freertos-builtin'; then
# make -C tutorials/nxp/rt1170-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_ra6m4:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 3 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/renesas/ek-ra6m4.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# continue-on-error: true
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/renesas/ek-ra6m4-make-baremetal-builtin'; then
# make -C tutorials/renesas/ek-ra6m4-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
## - if: ${{ env.GO == 1 }}
## run: |
## if ./test/match_changed_files.sh 'tutorials/renesas/ek-ra6m4-make-freertos-builtin'; then
## make -C tutorials/renesas/ek-ra6m4-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
## fi
#
# test_tm4c:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/ti/ek-tm4c.*-make-" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard|tutorials/ti/ek-tm4c1294xl-make-baremetal-builtin'; then
# make -C tutorials/ti/ek-tm4c1294xl-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh 'tutorials/ti/ek-tm4c1294xl-make-freertos-builtin'; then
# make -C tutorials/ti/ek-tm4c1294xl-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_same54:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - name: baremetal
# run: |
# if ./test/match_changed_files.sh "^src|tutorials/http/device-dashboard|tutorials/mqtt/mqtt-client" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/http/device-dashboard'; then
# make -C tutorials/http/device-dashboard/microchip/same54-xpro test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|tutorials/mqtt/mqtt-client'; then
# make -C tutorials/mqtt/mqtt-client/microchip/same54-xpro test VCON_API_KEY=${{secrets.VCON_API_KEY}}
# fi
#
# test_pico_w5500:
# runs-on: ubuntu-latest
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v4
# with: { fetch-depth: 2 }
# - name: SDK
# run: |
# if ./test/match_changed_files.sh "^src" ; then
# echo GO=1 >> $GITHUB_ENV
# sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
# fi
# - if: ${{ env.GO == 1 }}
# run: make -C tutorials/pico-sdk/w5500-evb-pico-picosdk-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
================================================
FILE: .github/workflows/test.yml
================================================
name: original workflow, outdated # *** YES, OUTDATED *** kept for hystorical/reference purposes, attachment, etc.
on:
workflow_dispatch:
env:
IPV6: 0
jobs:
linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
cc: [gcc, clang, g++, clang++]
target: [test, mip_test]
ssl: ["", MBEDTLS, OPENSSL]
select: ["-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0", "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=1"]
exclude:
- ssl: MBEDTLS
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0"
- ssl: MBEDTLS
select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0"
- ssl: OPENSSL
select: "-DMG_ENABLE_POLL=0 -DMG_ENABLE_EPOLL=0"
- ssl: OPENSSL
select: "-DMG_ENABLE_POLL=1 -DMG_ENABLE_EPOLL=0"
name: linux ${{ matrix.target }} CC=${{ matrix.cc }} SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
CC: ${{ matrix.cc }}
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }}
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: ./test/setup_ga_network.sh && sudo apt -y update ; sudo apt -y install libmbedtls-dev && make ${{ matrix.target }}
s390:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update ; sudo apt -y install qemu binfmt-support qemu-user-static && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make s390
armhf:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update ; sudo apt -y install qemu binfmt-support qemu-user-static && docker run --rm --privileged multiarch/qemu-user-static --reset -p yes && make armhf
linux2:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update ; sudo apt -y install libmbedtls-dev valgrind
- if: ${{ env.GO == 1 }}
run: make unamalgamated && make valgrind && make mg_prefix
macos:
runs-on: macos-latest
strategy:
fail-fast: false
matrix:
ssl: ["", MBEDTLS, OPENSSL]
select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1]
exclude:
- ssl: MBEDTLS
select: -DMG_ENABLE_POLL=0
- ssl: OPENSSL
select: -DMG_ENABLE_POLL=0
name: macos SSL=${{ matrix.ssl }} TFLAGS=${{ matrix.select }}
env:
SSL: ${{ matrix.ssl }}
TFLAGS: ${{ matrix.select }} -DNO_SNTP_CHECK -Wno-sign-conversion # Workaround for MbedTLS 3.5.0
HOMEBREW_NO_AUTO_UPDATE: 1
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: brew install jq mbedtls openssl
- if: ${{ env.GO == 1 }}
run: make test ASAN_OPTIONS= MBEDTLS=`echo /usr/local/Cellar/mbedtls*/*` OPENSSL=`echo /usr/local/Cellar/openssl*/*`
- if: ${{ env.GO == 1 }}
run: make mg_prefix
windows:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target: [vc98, vc17, vc22, mingw, mingw++]
select: [-DMG_ENABLE_POLL=0, -DMG_ENABLE_POLL=1]
exclude:
- target: vc98
select: -DMG_ENABLE_POLL=1
name: windows ${{ matrix.target }} TFLAGS=${{ matrix.select }}
env:
TFLAGS: ${{ matrix.select }}
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^test|^src/.*.[ch]' ; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: make ${{ matrix.target }}
arm:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make arm
riscv:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: make riscv
examples:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: sudo apt -y install libmbedtls-dev libpcap-dev
- run: make examples
- run: make clean
examples_win:
runs-on: windows-latest
steps:
- uses: actions/checkout@v3
# - uses: egor-tensin/setup-mingw@v2
# with:
# platform: x64
- name: test they build
run: make examples_win
shell: cmd
- name: test they clean
run: make clean_examples_win
shell: cmd
examples_mac:
runs-on: macos-latest
env: { HOMEBREW_NO_AUTO_UPDATE: 1 }
steps:
- uses: actions/checkout@v3
- run: make examples_mac
- run: make clean_examples_mac
arduino:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/arduino" ; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/arduino'; then
make -C examples/arduino arduino-xiao
fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|examples/arduino'; then
# make -C examples/arduino arduino-nano
# fi
- if: ${{ env.GO == 1 }}
run: make -C examples/arduino clean
generic_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: esp32/uart-bridge
- path: esp32/micropython
- path: esp8266/http-client-server
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^src|^examples/${{ matrix.example.path }}'; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: |
# nothing specific to install or do
- if: ${{ env.GO == 1 }}
run: make -C examples/${{ matrix.example.path }} build
generic_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: microchip/same54-xpro/mqtt-client
- path: infineon/infineon-xmc4700_4800-lwip-rtx-rtos
- path: nxp/nxp-mimxrt1020-azurertos
- path: nxp/nxp-frdmk66f-freertos
- path: nxp/nxp-lpcxpresso54s018m-freertos
- path: nxp/nxp-mimxrt1020-freertos
- path: nxp/nxp-evkbimxrt1050-lwip-freertos
- path: nxp/nxp-evkmimxrt1020-lwip-freertos
- path: nxp/nxp-evkmimxrt1024-lwip-freertos
- path: nxp/nxp-evkmimxrt1060-lwip-freertos
- path: nxp/nxp-evkmimxrt1064-lwip-freertos
- path: nxp/nxp-evkmimxrt1160-cm7-lwip-freertos
- path: nxp/nxp-evkmimxrt1170-cm7-lwip-freertos
- path: nxp/nxp-frdmk64f-lwip-freertos
- path: nxp/nxp-frdmk66f-lwip-freertos
- path: nxp/nxp-lpcxpresso54018-lwip-freertos
- path: nxp/nxp-lpcxpresso54608-lwip-freertos
- path: nxp/nxp-lpcxpresso54618-lwip-freertos
- path: nxp/nxp-lpcxpresso54628-lwip-freertos
- path: nxp/nxp-twrk65f180m-lwip-freertos
- path: nxp/nxp-twrkv58f220m-lwip-freertos
- path: rp2040/pico-rmii
- path: stm32/nucleo-f429zi-make-baremetal-builtin-rndis
- path: stm32/nucleo-f746zg-make-baremetal-builtin-rndis
- path: stm32/nucleo-g031-make-baremetal-builtin
- path: ti/ti-ek-tm4c1294xl-http-server
- path: ti/ek-tm4c1294xl-make-baremetal-builtin-rndis
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: if ./test/match_changed_files.sh '^src|^examples/${{ matrix.example.path }}'; then echo GO=1 >> $GITHUB_ENV ; fi
- if: ${{ env.GO == 1 }}
run: sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
- if: ${{ env.GO == 1 }}
run: make -C examples/${{ matrix.example.path }} build
device_dashboard_examples:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: esp32/device-dashboard
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|^examples/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/${{ matrix.example.path }} build
device_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: microchip/same54-xpro/device-dashboard
- path: nxp/rt1020-evk-make-baremetal-builtin
- path: nxp/rt1020-evk-make-freertos-builtin
- path: nxp/rt1060-evk-make-baremetal-builtin
- path: nxp/rt1060-evk-make-freertos-builtin
- path: rp2040/pico-rndis-dashboard
- path: rp2040/pico-w
- path: rp2040/pico-w5500
- path: stm32/nucleo-f429zi-make-baremetal-builtin
- path: stm32/nucleo-f429zi-make-freertos-builtin
- path: stm32/nucleo-f746zg-make-baremetal-builtin
- path: stm32/nucleo-f746zg-make-freertos-builtin
- path: stm32/nucleo-f746zg-make-freertos-tcp
- path: stm32/nucleo-f746zg-make-baremetal-builtin-cmsis_driver
- path: stm32/nucleo-h563zi-make-baremetal-builtin
- path: stm32/nucleo-h563zi-make-freertos-builtin
- path: stm32/nucleo-h723zg-make-freertos-builtin
- path: stm32/nucleo-h743zi-make-baremetal-builtin
- path: stm32/nucleo-h743zi-make-freertos-builtin
- path: stm32/stm32h573i-dk-make-baremetal-builtin
- path: stm32/stm32h573i-dk-make-freertos-builtin
- path: ti/ek-tm4c1294xl-make-baremetal-builtin
- path: ti/ek-tm4c1294xl-make-freertos-builtin
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|^examples/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/${{ matrix.example.path }} build
# mqtt_dashboard_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path:
# name: ${{ matrix.example.path }}
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v3
# with: { fetch-depth: 2 }
# - run: |
# if ./test/match_changed_files.sh '^src|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
# - if: ${{ env.GO == 1 }}
# run: make -C examples/${{ matrix.example.path }} build
mqtt_dashboard_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: rp2040/pico-rndis-device
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/${{ matrix.example.path }} build
# dual_examples:
# runs-on: ubuntu-latest
# strategy:
# fail-fast: false
# matrix:
# example:
# - path:
# name: ${{ matrix.example.path }}
# env:
# GO: 0
# steps:
# - uses: actions/checkout@v3
# with: { fetch-depth: 2 }
# - run: |
# if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
# echo GO=1 >> $GITHUB_ENV
# # nothing specific to install or do
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|examples/device-dashboard|^examples/${{ matrix.example.path }}'; then
# make -C examples/${{ matrix.example.path }} device_dashboard
# fi
# - if: ${{ env.GO == 1 }}
# run: |
# if ./test/match_changed_files.sh '^src|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
# make -C examples/${{ matrix.example.path }} mqtt_dashboard
# fi
dual_examples_arm:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- path: stm32/nucleo-h723zg-make-baremetal-builtin
name: ${{ matrix.example.path }}
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|^examples/${{ matrix.example.path }}'; then
make -C examples/${{ matrix.example.path }} device_dashboard
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/mqtt-dashboard/device|^examples/${{ matrix.example.path }}'; then
make -C examples/${{ matrix.example.path }} mqtt_dashboard
fi
cube_examples:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src|examples/stm32/nucleo-*-cube-*'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: cd test/cube && make
zephyr_examples:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- run: |
if ./test/match_changed_files.sh '^src/.*.[ch]|^examples/zephyr'; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr init
- name: minify manifest
if: ${{ env.GO == 1 }}
uses: mikefarah/yq@master
with:
cmd: yq -i eval '(.manifest.defaults, .manifest.remotes, .manifest.projects[] | select(.name == "cmsis" or .name == "hal_stm32" or .name == "mbedtls" or .name == "mcuboot" or .name == "picolibc" | del(.null) ), .manifest.self) as $i ireduce({};setpath($i | path; $i)) | del(.manifest.projects.[].null) | del(..|select(length==0))' examples/zephyr/zephyrproject/zephyr/west.yml
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr update
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr/device-dashboard build
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr/http-client build
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr/http-server build
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr/mqtt-aws-client build
- if: ${{ env.GO == 1 }}
run: make -C examples/zephyr/websocket-server build
test_f7:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/stm32/nucleo-f7.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-make-baremetal-builtin'; then
make -C examples/stm32/nucleo-f746zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-make-freertos-builtin'; then
make -C examples/stm32/nucleo-f746zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-make-freertos-tcp'; then
make -C examples/stm32/nucleo-f746zg-make-freertos-tcp test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- name: Cube
run: |
echo GO=0 >> $GITHUB_ENV
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f7.*-cube-'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-cube-baremetal-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-cube-freertos-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f746zg-cube-freertos-lwip'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f746zg-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=5
fi
test_f4:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/stm32/nucleo-f4.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f429zi-make-baremetal-builtin'; then
make -C examples/stm32/nucleo-f429zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f429zi-make-freertos-builtin'; then
make -C examples/stm32/nucleo-f429zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- name: Cube
run: |
echo GO=0 >> $GITHUB_ENV
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f4.*-cube-'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f429zi-cube-baremetal-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f429zi-cube-freertos-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-f429zi-cube-freertos-lwip'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-f429zi-cube-freertos-lwip VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=2
fi
test_h743:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 3 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/stm32/nucleo-h74.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h743zi-make-baremetal-builtin'; then
make -C examples/stm32/nucleo-h743zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h743zi-make-freertos-builtin'; then
make -C examples/stm32/nucleo-h743zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- name: Cube
run: |
echo GO=0 >> $GITHUB_ENV
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h74.*-cube-'; then
echo GO=1 >> $GITHUB_ENV
# nothing specific to install or do
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h743zi-cube-baremetal-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-h743zi-cube-baremetal-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h743zi-cube-freertos-builtin'; then
make -C test/cube test PROJECTS=../../examples/stm32/nucleo-h743zi-cube-freertos-builtin VCON_API_KEY=${{secrets.VCON_API_KEY}} DEVICE=6
fi
test_h723:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 3 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/stm32/nucleo-h72.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h723zg-make-baremetal-builtin'; then
make -C examples/stm32/nucleo-h723zg-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h723zg-make-freertos-builtin'; then
make -C examples/stm32/nucleo-h723zg-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
test_h5:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 3 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/stm32/nucleo-h5.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h563zi-make-baremetal-builtin'; then
make -C examples/stm32/nucleo-h563zi-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/stm32/nucleo-h563zi-make-freertos-builtin'; then
make -C examples/stm32/nucleo-h563zi-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
test_rt1020:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 3 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/nxp/rt1020.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
#if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/nxp/rt1020-evk-make-baremetal-builtin'; then
if ./test/match_changed_files.sh '^src|examples/nxp/rt1020-evk-make-baremetal-builtin'; then
make -C examples/nxp/rt1020-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
#if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/nxp/rt1020-evk-make-freertos-builtin'; then
if ./test/match_changed_files.sh '^src|examples/nxp/rt1020-evk-make-freertos-builtin'; then
make -C examples/nxp/rt1020-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
test_rt1060:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 3 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/nxp/rt1060.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/nxp/rt1060-evk-make-baremetal-builtin'; then
make -C examples/nxp/rt1060-evk-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
- if: ${{ env.GO == 1 }}
run: |
if ./test/match_changed_files.sh '^src|examples/device-dashboard|examples/nxp/rt1060-evk-make-freertos-builtin'; then
make -C examples/nxp/rt1060-evk-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
fi
test_tm4c:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/ti/ek-tm4c.*-make-" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/ti/ek-tm4c1294xl-make-baremetal-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- if: ${{ env.GO == 1 }}
run: make -C examples/ti/ek-tm4c1294xl-make-freertos-builtin test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_same54:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- name: baremetal
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/microchip/same54-xpro" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/microchip/same54-xpro/device-dashboard test VCON_API_KEY=${{secrets.VCON_API_KEY}}
- if: ${{ env.GO == 1 }}
run: make -C examples/microchip/same54-xpro/mqtt-client test VCON_API_KEY=${{secrets.VCON_API_KEY}}
test_pico_w5500:
runs-on: ubuntu-latest
env:
GO: 0
steps:
- uses: actions/checkout@v3
with: { fetch-depth: 2 }
- name: SDK
run: |
if ./test/match_changed_files.sh "^src|examples/device-dashboard|examples/rp2040/pico-w5500" ; then
echo GO=1 >> $GITHUB_ENV
sudo apt -y update && sudo apt -y install gcc-arm-none-eabi
fi
- if: ${{ env.GO == 1 }}
run: make -C examples/rp2040/pico-w5500 test VCON_API_KEY=${{secrets.VCON_API_KEY}}
================================================
FILE: .github/workflows/zephyr.yml
================================================
name: Zephyr
on:
schedule:
- cron: '0 0 * * *' # run at 12 AM UTC
# Allow manual runs
workflow_dispatch:
jobs:
zephyr_examples:
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
revno: ["--mr v3.7-branch", "--mr v4.2.0", "--mr v4.3.0"] # LTS, latest stable
name: Zephyr ${{ matrix.revno }}
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 2 }
- run: test/setup_ga_docker_filesystem.sh
- run: make -C tutorials/zephyr init REPO=zephyrprojectrtos/ci:v0.28.8 REVNO="${{ matrix.revno }}"
- run: make -C tutorials/zephyr minify REVNO="${{ matrix.revno }}"
- run: make -C tutorials/zephyr update
- run: make -C tutorials/zephyr/device-dashboard build REPO=zephyrprojectrtos/ci:v0.28.8
- run: make -C tutorials/zephyr/http-client build REPO=zephyrprojectrtos/ci:v0.28.8
- run: make -C tutorials/zephyr/http-server build REPO=zephyrprojectrtos/ci:v0.28.8
- run: make -C tutorials/zephyr/mqtt-aws-client build REPO=zephyrprojectrtos/ci:v0.28.8
- run: make -C tutorials/zephyr/websocket-server build REPO=zephyrprojectrtos/ci:v0.28.8
# Latest CI image does not work with pre 4.4, they changed some SDK paths
================================================
FILE: LICENSE
================================================
Copyright (c) 2004-2013 Sergey Lyubka
Copyright (c) 2013-2026 Cesanta Software Limited
All rights reserved
This software is dual-licensed: you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation. For the terms of this
license, see <http://www.gnu.org/licenses/>.
You are free to use this software under the terms of the GNU General
Public License, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
Alternatively, you can license this software under a commercial
license, as set out in <https://mongoose.ws/licensing/>.
================================================
FILE: README.md
================================================
# Mongoose - Embedded Web Server / Embedded Network Library
[](https://opensource.org/licenses/gpl-2.0.php)
[](https://github.com/cesanta/mongoose/actions)
[](https://codecov.io/gh/cesanta/mongoose)
[](https://issues.oss-fuzz.com/issues?sort=-opened&can=1&q=proj:mongoose)
<img src="https://mongoose.ws/images/logo.svg" width="48" height="48" align="left" style="float:left;" /> Mongoose is a network library for C/C++. It provides event-driven non-blocking
APIs for TCP, UDP, HTTP, WebSocket, MQTT, and other protocols. It is designed
for connecting devices and bringing them online. On the market since 2004, used
by vast number of open source and commercial products - it even runs on the
International Space Station! Mongoose makes embedded network programming fast,
robust, and easy. Features include:
- Cross-platform:
- works on Linux/UNIX, MacOS, Windows, Android
- works on ST, NXP, ESP32, Nordic, TI, Microchip, Infineon, Renesas and other chips
- write code once - and it'll work everywhere
- ideal for the unification of the network infrastructure code across company
- Built-in protocols: plain TCP/UDP, SNTP, HTTP, MQTT, Websocket, and other
- Asynchronous DNS resolver
- Tiny static and run-time footprint
- Source code is both ISO C and ISO C++ compliant
- Easy to integrate: just copy [mongoose.c](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.c)
and [mongoose.h](https://raw.githubusercontent.com/cesanta/mongoose/master/mongoose.h) files to your source tree
- Built-in TCP/IP stack with drivers for bare metal or RTOS systems
- Available drivers: STM32F, STM32H; NXP RT1xxx; TI TM4C; Microchip SAME54; Wiznet W5500
- A complete Web device dashboard on bare metal ST Nucleo boards is only 6 files
- For comparison, a CubeIDE generated HTTP example is 400+ files
- Can run on top of an existing TCP/IP stack with BSD API, e.g. lwIP, Zephyr, Azure, etc
- Built-in TLS 1.3 ECC stack. Also can use external TLS libraries - mbedTLS, OpenSSL, or other
- Does not depend on any other software to implement networking
- Built-in firmware updates for STM32 H5, STM32 H7
See https://mongoose.ws/ for complete documentation, videos, case studies, etc.
## Supported platforms
Mongoose can work on top of any TCP/IP stack that supports BSD sockets API.
Platforms supported by the 3rd party TCP/IP stacks:
| TCP/IP stack | Notes |
| :-------------- | :------- |
| **lwIP** | All devices running lwIP, for example ESP32, ESP32S3, ESP32C3, ESP32C6, etc |
| **Zephyr** | All devices supported by Zephyr |
| **Other** | Any other TCP/IP stack that supports BSD socket API, for example Amazon FreeRTOS-TCP |
| **Linux, Mac, Windows** | Workstations, server, single board computers, embedded Linux devices running on MPUs or FPGAs |
Optionally, Mongoose provides its own built-in TCP/IP stack, eliminating the
need for additional software to implement networking functionality. The
built-in stack supports operation in both bare-metal and RTOS environments.
Platforms supported by the Mongoose built-in TCP/IP stack:
| Hardware | Notes |
| :------------- | :------- |
| **STM32** | All STM32 MCUs with built-in Ethernet: STM32Fxx, STM32H5xx, STM32H7xx |
| **NXP** | All NXP MCUs with built-in Ethernet: IMXRT102x, IMXRT104x, IMXRT105x, IMXRT106x, IMXRT117x, RW612, MCXN94x |
| **Microchip** | ATSAME54 MCUs with built-int Ethernet |
| **Renesas** | RA5M, RA6M, RA8M MCUs with built-in Ethernet |
| **Infineon** | XMC4, XMC7 MCUs with built-in Ethernet |
| **Texas Instruments** | TM4C, TMS570 MCUs with built-in Ethernet |
| **Cypress WiFi** | Any MCU with CY43xx WiFi chips, like RP2040 Pico-W, RP2350 Pico2-W, Arduino Portenta |
| **Wiznet Ethernet** | Any MCU that use Wiznet W5500 or Wiznet 5100 MAC+PHY chips |
| **Cellular** | NRF9160, SIM800 |
## Usage Examples
Below are quick snippets that should give an idea how simple the API is and
how easy it is to create applications with it.
Create a simple web server that serves a directory. The behavior of the
HTTP server is specified by its event handler function:
```c
#include "mongoose.h" // To build, run: cc main.c mongoose.c
// HTTP server event handler function
void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
struct mg_http_serve_opts opts = { .root_dir = "./web_root/" };
mg_http_serve_dir(c, hm, &opts);
}
}
int main(void) {
struct mg_mgr mgr; // Declare event manager
mg_mgr_init(&mgr); // Initialise event manager
mg_http_listen(&mgr, "http://0.0.0.0:8000", ev_handler, NULL); // Setup listener
for (;;) { // Run an infinite event loop
mg_mgr_poll(&mgr, 1000);
}
return 0;
}
```
HTTP server implements a REST API that returns current time. JSON formatting:
```c
static void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_HTTP_MSG) {
struct mg_http_message *hm = (struct mg_http_message *) ev_data;
if (mg_match(hm->uri, mg_str("/api/time/get"), NULL)) {
mg_http_reply(c, 200, "", "{%m:%lu}\n", MG_ESC("time"), time(NULL));
} else {
mg_http_reply(c, 500, "", "{%m:%m}\n", MG_ESC("error"), MG_ESC("Unsupported URI"));
}
}
}
```
MQTT client that subscribes to a topic `device1/rx` and
echoes incoming messages to `device1/tx`:
```c
#include "mongoose.h"
static const char *s_mqtt_url = "mqtt://broker.hivemq.com:1883";
static struct mg_connection *s_mqtt_conn = NULL;
// MQTT connection event handler function
static void ev_handler(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_OPEN) {
MG_INFO(("%lu created, connecting to %s ...", c->id, s_mqtt_url));
} else if (ev == MG_EV_MQTT_OPEN) {
struct mg_mqtt_opts opts = {.qos = 1, .topic = mg_str("device1/rx")};
mg_mqtt_sub(c, &opts);
MG_INFO(("%lu connected, subscribing to %s", c->id, opts.topic.buf));
} else if (ev == MG_EV_MQTT_MSG) {
char response[100];
struct mg_mqtt_message *mm = (struct mg_mqtt_message *) ev_data;
struct mg_mqtt_opts opts = {.qos = 1, .topic = mg_str("device1/tx")};
mg_snprintf(response, sizeof(response), "Received [%.*s] / [%.*s]",
mm->topic.len, mm->topic.buf, mm->data.len, mm->data.buf);
opts.message = mg_str(response);
mg_mqtt_pub(c, &opts);
} else if (ev == MG_EV_CLOSE) {
MG_INFO(("%u closing", c->id));
s_mqtt_conn = NULL;
}
}
// Reconnection timer function. If we get disconnected, reconnect again
static void timer_fn(void *arg) {
struct mg_mgr *mgr = (struct mg_mgr *) arg;
if (s_mqtt_conn == NULL) {
struct mg_mqtt_opts opts = {.clean = true};
s_mqtt_conn = mg_mqtt_connect(mgr, s_mqtt_url, &opts, ev_handler, NULL);
}
}
int main() {
struct mg_mgr mgr; // Mongoose event manager. Holds all connections
mg_mgr_init(&mgr); // Initialise event manager
mg_timer_add(&mgr, 3000, MG_TIMER_REPEAT | MG_TIMER_RUN_NOW, timer_fn, &mgr);
for (;;) {
mg_mgr_poll(&mgr, 1000); // Infinite event loop
}
return 0;
}
```
## Commercial use
- Mongoose is used by hundreds of businesses, from Fortune500 giants like
Siemens, Schneider Electric, Broadcom, Bosch, Google, Samsung, Qualcomm, Caterpillar to the small businesses
- Used to solve a wide range of business needs, like implementing Web UI
interface on devices, RESTful API services, telemetry data exchange, remote
control for a product, remote software updates, remote monitoring, and others
- Deployed to hundreds of millions devices in production environment worldwide
- See [Case Studies](https://mongoose.ws/case-studies/) from our respected
customers like [Schneider Electric](https://mongoose.ws/case-studies/schneider-electric/) (industrial automation), [Broadcom](https://mongoose.ws/case-studies/broadcom/) (semiconductors), [Pilz](https://mongoose.ws/case-studies/pilz/) (industrial automation), and others
- See [Testimonials](https://mongoose.ws/testimonials/) from engineers that integrated Mongoose in their commercial products
- We provide [Evaluation and Commercial licensing](https://mongoose.ws/licensing/), [support](https://mongoose.ws/support/), consultancy and [integration
services](https://mongoose.ws/integration/) - don't hesitate to [contact us](https://mongoose.ws/contact/)
## Security
We take security seriously:
1. Mongoose repository runs a
[continuous integration test powered by GitHub](https://github.com/cesanta/mongoose/actions),
which runs through hundreds of unit tests on every commit to the repository.
Our [unit tests](https://github.com/cesanta/mongoose/tree/master/test)
are built with modern address sanitizer technologies, which help to find
security vulnerabilities early
2. Mongoose repository is integrated into Google's
[oss-fuzz continuous fuzzer](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:mongoose)
which scans for potential vulnerabilities continuously
3. We receive periodic vulnerability reports from the independent security
groups like
[Cisco Talos](https://www.cisco.com/c/en/us/products/security/talos.html),
[Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc),
[MITRE Corporation](https://www.mitre.org/),
[Compass Security](https://www.compass-security.com/en/) and others.
In case of the vulnerability found, we act according to the industry best
practice: hold on to the publication, fix the software and notify all our
customers that have an appropriate subscription
4. Some of our customers (for example NASA)
have specific security requirements and run independent security audits,
of which we get notified and in case of any issue, act similar to (3).
## How to report security vulnerabilities
Please send an email to support@cesanta.com, with the full information.
Do NOT create a github issue.
## Articles
Technical guides and deep dives into embedded web servers, WebUI integration and embedded networking technologies:
- [Embedded Web Server: A Comprehensive Guide for Modern Connected Devices](https://mongoose.ws/articles/embedded-web-server-a-comprehensive-guide-for-modern-connected-devices/)
- [Building Embedded Web Device Dashboards](https://mongoose.ws/articles/building-embedded-web-device-dashboard/)
- [ESP32 Device Dashboard: A Step-by-Step Guide for Developers](https://mongoose.ws/articles/esp32-device-dashboard/)
- [How to build an STM32 Web Dashboard](https://mongoose.ws/articles/stm32-device-dashboard/)
- [STM32 WebSocket Guide](https://mongoose.ws/articles/stm32-websocket-guide/)
- [Web File Manager on STM32, ESP32 and Embedded Linux](https://mongoose.ws/articles/building-a-web-file-manager-on-stm32-esp32-embedded-linux/)
- [Web dashboard on Zephyr RTOS](https://mongoose.ws/articles/web-dashboard-on-zephyr-rtos/)
- [Limiting TCP/IP RAM usage on STM32](https://mongoose.ws/articles/limiting-tcpip-ram-usage-on-stm32/)
- [STM32 Ethernet explained](https://mongoose.ws/articles/stm32-ethernet-explained/)
- [MQTT on a Microcontroller](https://mongoose.ws/articles/mqtt-on-a-microcontroller/)
- [STM32 OTA Firmware Update](https://mongoose.ws/articles/stm32-ota-firmware-update/)
- [RP2350 OTA Firmware Update](https://mongoose.ws/articles/rp2350-ota-firmware-update/)
- [STM32 Ethernet and caches](https://mongoose.ws/articles/stm32-ethernet-and-cache/)
- [NXP RW612 OTA Firmware Update](https://mongoose.ws/articles/rw612-ota-firmware-update/)
- [lwIP vs Mongoose - TCP/IP Stack Integration Benchmark](https://mongoose.ws/articles/lwip-vs-mongoose-tcpip-stack-integration/)
## Contributions
Contributions are welcome! Please follow the guidelines below:
- Sign [Cesanta CLA](https://cesanta.com/cla.html) and send GitHub pull request
- Make sure that PRs have only one commit, and deal with one issue only
================================================
FILE: mongoose.c
================================================
// Copyright (c) 2004-2013 Sergey Lyubka
// Copyright (c) 2013-2025 Cesanta Software Limited
// All rights reserved
//
// This software is dual-licensed: you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation. For the terms of this
// license, see http://www.gnu.org/licenses/
//
// You are free to use this software under the terms of the GNU General
// Public License, but WITHOUT ANY WARRANTY; without even the implied
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// Alternatively, you can license this software under a commercial
// license, as set out in https://www.mongoose.ws/licensing/
//
// SPDX-License-Identifier: GPL-2.0-only or commercial
#include "mongoose.h"
#ifdef MG_ENABLE_LINES
#line 1 "src/base64.c"
#endif
static int mg_base64_encode_single(int c) {
if (c < 26) {
return c + 'A';
} else if (c < 52) {
return c - 26 + 'a';
} else if (c < 62) {
return c - 52 + '0';
} else {
return c == 62 ? '+' : '/';
}
}
static int mg_base64_decode_single(int c) {
if (c >= 'A' && c <= 'Z') {
return c - 'A';
} else if (c >= 'a' && c <= 'z') {
return c + 26 - 'a';
} else if (c >= '0' && c <= '9') {
return c + 52 - '0';
} else if (c == '+') {
return 62;
} else if (c == '/') {
return 63;
} else if (c == '=') {
return 64;
} else {
return -1;
}
}
size_t mg_base64_update(unsigned char ch, char *to, size_t n) {
unsigned long rem = (n & 3) % 3;
if (rem == 0) {
to[n] = (char) mg_base64_encode_single(ch >> 2);
to[++n] = (char) ((ch & 3) << 4);
} else if (rem == 1) {
to[n] = (char) mg_base64_encode_single(to[n] | (ch >> 4));
to[++n] = (char) ((ch & 15) << 2);
} else {
to[n] = (char) mg_base64_encode_single(to[n] | (ch >> 6));
to[++n] = (char) mg_base64_encode_single(ch & 63);
n++;
}
return n;
}
size_t mg_base64_final(char *to, size_t n) {
size_t saved = n;
// printf("---[%.*s]\n", n, to);
if (n & 3) n = mg_base64_update(0, to, n);
if ((saved & 3) == 2) n--;
// printf(" %d[%.*s]\n", n, n, to);
while (n & 3) to[n++] = '=';
to[n] = '\0';
return n;
}
size_t mg_base64_encode(const unsigned char *p, size_t n, char *to, size_t dl) {
size_t i, len = 0;
if (dl > 0) to[0] = '\0';
if (dl < ((n / 3) + (n % 3 ? 1 : 0)) * 4 + 1) return 0;
for (i = 0; i < n; i++) len = mg_base64_update(p[i], to, len);
len = mg_base64_final(to, len);
return len;
}
size_t mg_base64_decode(const char *src, size_t n, char *dst, size_t dl) {
const char *end = src == NULL ? NULL : src + n; // Cannot add to NULL
size_t len = 0;
if (dl < n / 4 * 3 + 1) goto fail;
while (src != NULL && src + 3 < end) {
int a = mg_base64_decode_single(src[0]),
b = mg_base64_decode_single(src[1]),
c = mg_base64_decode_single(src[2]),
d = mg_base64_decode_single(src[3]);
if (a == 64 || a < 0 || b == 64 || b < 0 || c < 0 || d < 0) {
goto fail;
}
dst[len++] = (char) ((a << 2) | (b >> 4));
if (src[2] != '=') {
dst[len++] = (char) ((b << 4) | (c >> 2));
if (src[3] != '=') dst[len++] = (char) ((c << 6) | d);
}
src += 4;
}
dst[len] = '\0';
return len;
fail:
if (dl > 0) dst[0] = '\0';
return 0;
}
#ifdef MG_ENABLE_LINES
#line 1 "src/dns.c"
#endif
struct dns_data {
struct dns_data *next;
struct mg_connection *c;
uint64_t expire;
uint16_t txnid;
};
static void mg_sendnsreq(struct mg_connection *, struct mg_str *, int,
struct mg_dns *, bool);
static void mg_dns_free(struct dns_data **head, struct dns_data *d) {
LIST_DELETE(struct dns_data, head, d);
mg_free(d);
}
void mg_resolve_cancel(struct mg_connection *c) {
struct dns_data *tmp, *d;
struct dns_data **head = (struct dns_data **) &c->mgr->active_dns_requests;
for (d = *head; d != NULL; d = tmp) {
tmp = d->next;
if (d->c == c) mg_dns_free(head, d);
}
}
static size_t mg_dns_parse_name_depth(const uint8_t *s, size_t len, size_t ofs,
char *to, size_t tolen, size_t j,
int depth) {
size_t i = 0;
if (tolen > 0 && depth == 0) to[0] = '\0';
if (depth > 5) return 0;
// MG_INFO(("ofs %lx %x %x", (unsigned long) ofs, s[ofs], s[ofs + 1]));
while (ofs + i + 1 < len) {
size_t n = s[ofs + i];
if (n == 0) {
i++;
break;
}
if (n & 0xc0) {
size_t ptr = (((n & 0x3f) << 8) | s[ofs + i + 1]); // 12 is hdr len
// MG_INFO(("PTR %lx", (unsigned long) ptr));
if (ptr + 1 < len && (s[ptr] & 0xc0) == 0 &&
mg_dns_parse_name_depth(s, len, ptr, to, tolen, j, depth + 1) == 0)
return 0;
i += 2;
break;
}
if (ofs + i + n + 1 >= len) return 0;
if (j > 0) {
if (j < tolen) to[j] = '.';
j++;
}
if (j + n < tolen) memcpy(&to[j], &s[ofs + i + 1], n);
j += n;
i += n + 1;
if (j < tolen) to[j] = '\0'; // Zero-terminate this chunk
// MG_INFO(("--> [%s]", to));
}
if (tolen > 0) to[tolen - 1] = '\0'; // Make sure it is nul-term
return i;
}
static size_t mg_dns_parse_name(const uint8_t *s, size_t n, size_t ofs,
char *dst, size_t dstlen) {
return mg_dns_parse_name_depth(s, n, ofs, dst, dstlen, 0, 0);
}
size_t mg_dns_parse_rr(const uint8_t *buf, size_t len, size_t ofs,
bool is_question, struct mg_dns_rr *rr) {
const uint8_t *s = buf + ofs, *e = &buf[len];
memset(rr, 0, sizeof(*rr));
if (len < sizeof(struct mg_dns_header)) return 0; // Too small
if (len > 512) return 0; // Too large, we don't expect that
if (s >= e) return 0; // Overflow
if ((rr->nlen = (uint16_t) mg_dns_parse_name(buf, len, ofs, NULL, 0)) == 0)
return 0;
s += rr->nlen + 4;
if (s > e) return 0;
rr->atype = (uint16_t) (((uint16_t) s[-4] << 8) | s[-3]);
rr->aclass = (uint16_t) (((uint16_t) s[-2] << 8) | s[-1]);
if (is_question) return (size_t) (rr->nlen + 4);
s += 6;
if (s > e) return 0;
rr->alen = (uint16_t) (((uint16_t) s[-2] << 8) | s[-1]);
if (s + rr->alen > e) return 0;
return (size_t) (rr->nlen + rr->alen + 10);
}
bool mg_dns_parse(const uint8_t *buf, size_t len, struct mg_dns_message *dm) {
const struct mg_dns_header *h = (struct mg_dns_header *) buf;
struct mg_dns_rr rr;
size_t i, n, num_answers, ofs = sizeof(*h);
bool is_response;
memset(dm, 0, sizeof(*dm));
if (len < sizeof(*h)) return 0; // Too small, headers dont fit
if (mg_ntohs(h->num_questions) > 1) return 0; // Sanity
num_answers = mg_ntohs(h->num_answers);
if (num_answers > 10) {
MG_DEBUG(("Got %u answers, ignoring beyond 10th one", num_answers));
num_answers = 10; // Sanity cap
}
dm->txnid = mg_ntohs(h->txnid);
is_response = mg_ntohs(h->flags) & 0x8000;
for (i = 0; i < mg_ntohs(h->num_questions); i++) {
if ((n = mg_dns_parse_rr(buf, len, ofs, true, &rr)) == 0) return false;
// MG_INFO(("Q %lu %lu %hu/%hu", ofs, n, rr.atype, rr.aclass));
mg_dns_parse_name(buf, len, ofs, dm->name, sizeof(dm->name));
ofs += n;
}
if (!is_response) {
// For queries, there is no need to parse the answers. In this way,
// we also ensure the domain name (dm->name) is parsed from
// the question field.
return true;
}
for (i = 0; i < num_answers; i++) {
if ((n = mg_dns_parse_rr(buf, len, ofs, false, &rr)) == 0) return false;
// MG_INFO(("A -- %lu %lu %hu/%hu %s", ofs, n, rr.atype, rr.aclass,
// dm->name));
mg_dns_parse_name(buf, len, ofs, dm->name, sizeof(dm->name));
ofs += n;
if (rr.alen == 4 && rr.atype == MG_DNS_RTYPE_A && rr.aclass == 1) {
dm->addr.is_ip6 = false;
memcpy(&dm->addr.addr.ip, &buf[ofs - 4], 4);
dm->resolved = true;
break; // Return success
} else if (rr.alen == 16 && rr.atype == MG_DNS_RTYPE_AAAA &&
rr.aclass == 1) {
dm->addr.is_ip6 = true;
memcpy(&dm->addr.addr.ip, &buf[ofs - 16], 16);
dm->resolved = true;
break; // Return success
}
}
return true;
}
static void dns_cb(struct mg_connection *c, int ev, void *ev_data) {
struct dns_data *d, *tmp;
struct dns_data **head = (struct dns_data **) &c->mgr->active_dns_requests;
if (ev == MG_EV_POLL) {
uint64_t now = *(uint64_t *) ev_data;
for (d = *head; d != NULL; d = tmp) {
tmp = d->next;
// MG_DEBUG ("%lu %lu dns poll", d->expire, now));
if (now > d->expire) mg_error(d->c, "DNS timeout");
}
} else if (ev == MG_EV_READ) {
struct mg_dns_message dm;
int resolved = 0;
if (mg_dns_parse(c->recv.buf, c->recv.len, &dm) == false) {
MG_ERROR(("Unexpected DNS response:"));
mg_hexdump(c->recv.buf, c->recv.len);
} else {
// MG_VERBOSE(("%s %d", dm.name, dm.resolved));
for (d = *head; d != NULL; d = tmp) {
tmp = d->next;
// MG_INFO(("d %p %hu %hu", d, d->txnid, dm.txnid));
if (dm.txnid != d->txnid) continue;
if (d->c->is_resolving) {
if (dm.resolved) {
dm.addr.port = d->c->rem.port; // Save port
d->c->rem = dm.addr; // Copy resolved address
MG_DEBUG(
("%lu %s is %M", d->c->id, dm.name, mg_print_ip, &d->c->rem));
mg_connect_resolved(d->c);
#if MG_ENABLE_IPV6
} else if (dm.addr.is_ip6 == false && dm.name[0] != '\0' &&
c->mgr->use_dns6 == false) {
struct mg_str x = mg_str(dm.name);
mg_sendnsreq(d->c, &x, c->mgr->dnstimeout, &c->mgr->dns6, true);
#endif
} else {
mg_error(d->c, "%s DNS lookup failed", dm.name);
}
} else {
MG_ERROR(("%lu already resolved", d->c->id));
}
mg_dns_free(head, d);
resolved = 1;
}
}
if (!resolved) MG_ERROR(("stray DNS reply"));
c->recv.len = 0;
} else if (ev == MG_EV_CLOSE) {
for (d = *head; d != NULL; d = tmp) {
tmp = d->next;
mg_error(d->c, "DNS error");
mg_dns_free(head, d);
}
}
}
static bool mg_dns_send(struct mg_connection *c, const struct mg_str *name,
uint16_t txnid, bool ipv6) {
struct {
struct mg_dns_header header;
uint8_t data[256];
} pkt;
size_t i, n;
memset(&pkt, 0, sizeof(pkt));
pkt.header.txnid = mg_htons(txnid);
pkt.header.flags = mg_htons(0x100);
pkt.header.num_questions = mg_htons(1);
for (i = n = 0; i < sizeof(pkt.data) - 5; i++) {
if (name->buf[i] == '.' || i >= name->len) {
pkt.data[n] = (uint8_t) (i - n);
memcpy(&pkt.data[n + 1], name->buf + n, i - n);
n = i + 1;
}
if (i >= name->len) break;
}
memcpy(&pkt.data[n], "\x00\x00\x01\x00\x01", 5); // A query
n += 5;
if (ipv6) pkt.data[n - 3] = 0x1c; // AAAA query
// memcpy(&pkt.data[n], "\xc0\x0c\x00\x1c\x00\x01", 6); // AAAA query
// n += 6;
return mg_send(c, &pkt, sizeof(pkt.header) + n);
}
bool mg_dnsc_init(struct mg_mgr *mgr, struct mg_dns *dnsc);
bool mg_dnsc_init(struct mg_mgr *mgr, struct mg_dns *dnsc) {
if (dnsc->url == NULL) {
mg_error(0, "DNS server URL is NULL. Call mg_mgr_init()");
return false;
}
if (dnsc->c == NULL) {
dnsc->c = mg_connect(mgr, dnsc->url, NULL, NULL);
if (dnsc->c == NULL) return false;
dnsc->c->pfn = dns_cb;
}
return true;
}
static void mg_sendnsreq(struct mg_connection *c, struct mg_str *name, int ms,
struct mg_dns *dnsc, bool ipv6) {
struct dns_data *d = NULL;
if (!mg_dnsc_init(c->mgr, dnsc)) {
mg_error(c, "resolver");
} else if ((d = (struct dns_data *) mg_calloc(1, sizeof(*d))) == NULL) {
mg_error(c, "resolve OOM");
} else {
struct dns_data *reqs = (struct dns_data *) c->mgr->active_dns_requests;
uint16_t id;
mg_random(&id, sizeof(uint16_t));
// TODO(): traverse reqs and check id != reqs->txnid; repeat otherwise
if (reqs != NULL) id = (uint16_t) (reqs->txnid + 1); // no collision
d->txnid = id;
d->next = reqs;
c->mgr->active_dns_requests = d;
d->expire = mg_millis() + (uint64_t) ms;
d->c = c;
c->is_resolving = 1;
MG_VERBOSE(("%lu resolving %.*s @ %s, txnid %hu", c->id, (int) name->len,
name->buf, dnsc->url, d->txnid));
if (!mg_dns_send(dnsc->c, name, d->txnid, ipv6)) {
mg_error(dnsc->c, "DNS send");
}
}
}
void mg_resolve(struct mg_connection *c, const char *url) {
struct mg_str host = mg_url_host(url);
c->rem.port = mg_htons(mg_url_port(url));
if (mg_aton(host, &c->rem)) {
// host is an IP address, do not fire name resolution
mg_connect_resolved(c);
} else {
// host is not an IP, send DNS resolution request
struct mg_dns *dns = c->mgr->use_dns6 ? &c->mgr->dns6 : &c->mgr->dns4;
mg_sendnsreq(c, &host, c->mgr->dnstimeout, dns, c->mgr->use_dns6);
}
}
static const uint8_t mdns_answer[] = {
0, 1, // 2 bytes - record type, A
0, 1, // 2 bytes - address class, INET
0, 0, 0, 120, // 4 bytes - TTL
0, 4 // 2 bytes - address length
};
static uint8_t *build_name(struct mg_str *name, uint8_t *p) {
*p++ = (uint8_t) name->len; // label 1
memcpy(p, name->buf, name->len), p += name->len;
*p++ = 5; // label 2
memcpy(p, "local", 5), p += 5;
*p++ = 0; // no more labels
return p;
}
void mg_getlocaddr(struct mg_connection *, struct mg_addr *, struct mg_addr *);
static uint8_t *build_a_record(struct mg_connection *c, uint8_t *p,
struct mg_addr *addr) {
memcpy(p, mdns_answer, sizeof(mdns_answer)), p += sizeof(mdns_answer);
if (addr != NULL && !addr->is_ip6) {
memcpy(p, &addr->addr.ip4, 4), p += 4;
} else {
#if MG_ENABLE_TCPIP
memcpy(p, &c->mgr->ifp->ip, 4), p += 4;
#else
struct mg_addr loc, to;
memset(&loc, 0, sizeof(loc));
to.is_ip6 = false;
to.port = mg_htons(5353);
to.addr.ip4 = MG_IPV4(224, 0, 0, 51);
mg_getlocaddr(c, &to, &loc);
memcpy(p, &loc.addr.ip4, 4), p += 4;
#endif
}
return p;
}
static uint8_t *build_srv_name(uint8_t *p, struct mg_dnssd_record *r) {
*p++ = (uint8_t) r->srvcproto.len - 5; // label 1, up to '._tcp'
memcpy(p, r->srvcproto.buf, r->srvcproto.len), p += r->srvcproto.len;
p[-5] = 4; // label 2, '_tcp', overwrite '.'
*p++ = 5; // label 3
memcpy(p, "local", 5), p += 5;
*p++ = 0; // no more labels
return p;
}
#if 0
// TODO(): for listing
static uint8_t *build_mysrv_name(struct mg_str *name, uint8_t *p,
struct mg_dnssd_record *r) {
*p++ = name->len; // label 1
memcpy(p, name->buf, name->len), p += name->len;
return build_srv_name(p, r);
}
#endif
static uint8_t *build_ptr_record(struct mg_str *name, uint8_t *p, uint16_t o) {
uint16_t offset = mg_htons(o);
memcpy(p, mdns_answer, sizeof(mdns_answer));
p[1] = MG_DNS_RTYPE_PTR; // overwrite record type
p += sizeof(mdns_answer);
p[-1] = (uint8_t) name->len +
3; // overwrite response length, label length + label + offset
*p++ = (uint8_t) name->len; // response: label 1
memcpy(p, name->buf, name->len), p += name->len; // copy label
memcpy(p, &offset, 2);
*p |= 0xC0, p += 2;
return p;
}
static uint8_t *build_srv_record(struct mg_str *name, uint8_t *p,
struct mg_dnssd_record *r, uint16_t o) {
uint16_t port = mg_htons(r->port);
uint16_t offset = mg_htons(o);
memcpy(p, mdns_answer, sizeof(mdns_answer));
p[1] = MG_DNS_RTYPE_SRV; // overwrite record type
p += sizeof(mdns_answer);
p[-1] = (uint8_t) name->len + 9; // overwrite response length (4+2+1+2)
*p++ = 0; // priority
*p++ = 0;
*p++ = 0; // weight
*p++ = 0;
memcpy(p, &port, 2), p += 2; // port
*p++ = (uint8_t) name->len; // label 1
memcpy(p, name->buf, name->len), p += name->len;
memcpy(p, &offset, 2);
*p |= 0xC0, p += 2;
return p;
}
static uint8_t *build_txt_record(uint8_t *p, struct mg_dnssd_record *r) {
uint16_t len = mg_htons((uint16_t) r->txt.len);
memcpy(p, mdns_answer, sizeof(mdns_answer));
p[1] = MG_DNS_RTYPE_TXT; // overwrite record type
p += sizeof(mdns_answer);
memcpy(p - 2, &len, 2); // overwrite response length
memcpy(p, r->txt.buf, r->txt.len), p += r->txt.len; // copy record verbatim
return p;
}
// RFC-6762 16: case-insensitivity --> RFC-1034, 1035
static void handle_mdns_query(struct mg_connection *c) {
struct mg_dns_header *qh = (struct mg_dns_header *) c->recv.buf;
struct mg_dns_rr rr;
size_t n;
// Parse first question, offset 12 is header size
n = mg_dns_parse_rr(c->recv.buf, c->recv.len, 12, true, &rr);
MG_VERBOSE(("mDNS request parsed, result=%d", (int) n));
if (n > 0) {
// RFC-6762 Appendix C, RFC2181 11: m(n + 1-63), max 255 + 0x0
uint8_t buf[sizeof(struct mg_dns_header) + 256 + sizeof(mdns_answer) + 4];
struct mg_dns_header *h = (struct mg_dns_header *) buf;
uint8_t *p = &buf[sizeof(*h)];
char name[256];
uint8_t name_len;
// uint16_t q = mg_ntohs(qh->num_questions);
struct mg_str defname = mg_str((const char *) c->fn_data);
struct mg_str *respname;
struct mg_mdns_req req;
memset(&req, 0, sizeof(req));
req.is_unicast = (rr.aclass & MG_BIT(15)) != 0; // QU
rr.aclass &= (uint16_t) ~MG_BIT(15); // remove "QU" (unicast response)
qh->num_questions = mg_htons(1); // parser sanity
mg_dns_parse_name(c->recv.buf, c->recv.len, 12, name, sizeof(name));
name_len = (uint8_t) strlen(name); // verify it ends in .local
if (name_len <= 6 || strcmp(".local", &name[name_len - 6]) != 0 ||
(rr.aclass != 1 && rr.aclass != 0xff))
return;
name[name_len -= 6] = '\0'; // remove .local
MG_VERBOSE(("RR %u %u %s", (unsigned int) rr.atype,
(unsigned int) rr.aclass, name));
if (rr.atype == MG_DNS_RTYPE_A) {
// TODO(): ensure c->fn_data ends in \0
// if we have a name to match, go; otherwise users will match and fill
// req.r.name and set req.is_resp
if (c->fn_data != NULL && mg_casecmp((char *) c->fn_data, name) != 0)
return;
req.is_resp = (c->fn_data != NULL);
req.reqname = mg_str_n(name, name_len);
} else // users have to match the request to something in their db, then
// fill req.r and set req.is_resp
if (rr.atype == MG_DNS_RTYPE_PTR) {
if (strcmp("_services._dns-sd._udp", name) == 0) req.is_listing = true;
MG_DEBUG(
("PTR request for %s", req.is_listing ? "services listing" : name));
req.reqname = mg_str_n(name, name_len);
} else if (rr.atype == MG_DNS_RTYPE_SRV || rr.atype == MG_DNS_RTYPE_TXT) {
MG_DEBUG(("%s request for %s",
rr.atype == MG_DNS_RTYPE_SRV ? "SRV" : "TXT", name));
// if possible, check it starts with our name, users will check it ends
// in a service name they handle
if (c->fn_data != NULL) {
if (mg_strcasecmp(defname, mg_str_n(name, defname.len)) != 0 ||
name[defname.len] != '.')
return;
req.reqname =
mg_str_n(name + defname.len + 1, name_len - defname.len - 1);
MG_DEBUG(
("That's us, handing %.*s", req.reqname.len, req.reqname.buf));
} else {
req.reqname = mg_str_n(name, name_len);
}
} else { // unhandled record
return;
}
req.rr = &rr;
mg_call(c, MG_EV_MDNS_REQ, &req);
if (!req.is_resp) return;
respname = req.respname.buf != NULL ? &req.respname : &defname;
memset(h, 0, sizeof(*h)); // clear header
h->txnid = req.is_unicast ? qh->txnid : 0; // RFC-6762 18.1
h->num_answers = mg_htons(1); // RFC-6762 6: 0 questions, 1 Answer
h->flags = mg_htons(0x8400); // Authoritative response
if (req.is_listing) {
// TODO(): RFC-6762 6: each responder SHOULD delay its response by a
// random amount of time selected with uniform random distribution in the
// range 20-120 ms.
// TODO():
return;
} else if (rr.atype == MG_DNS_RTYPE_PTR) { // serve PTR + SRV + TXT + A
// TODO(): RFC-6762 6: each responder SHOULD delay its response by a
// random amount of time selected with uniform random distribution in the
// range 20-120 ms. Response to PTR is local_name._myservice._tcp.local
uint8_t *o = p, *aux;
uint16_t offset;
if (respname->buf == NULL || respname->len == 0) return;
h->num_other_prs = mg_htons(3); // 3 additional records
p = build_srv_name(p, req.r);
aux = build_ptr_record(respname, p, (uint16_t) (o - buf));
o = p + sizeof(mdns_answer); // point to PTR response (full srvc name)
offset = mg_htons((uint16_t) (o - buf));
o = p - 7; // point to '.local' label (\x05local\x00)
p = aux;
memcpy(p, &offset, 2); // point to full srvc name, in record
*p |= 0xC0, p += 2;
aux = p;
p = build_srv_record(respname, p, req.r, (uint16_t) (o - buf));
o = aux + sizeof(mdns_answer) + 6; // point to target in SRV
memcpy(p, &offset, 2); // point to full srvc name, in record
*p |= 0xC0, p += 2;
p = build_txt_record(p, req.r);
offset = mg_htons((uint16_t) (o - buf));
memcpy(p, &offset, 2); // point to target name, in record
*p |= 0xC0, p += 2;
p = build_a_record(c, p, req.addr);
} else if (rr.atype == MG_DNS_RTYPE_TXT) {
p = build_srv_name(p, req.r);
p = build_txt_record(p, req.r);
} else if (rr.atype == MG_DNS_RTYPE_SRV) { // serve SRV + A
uint8_t *o, *aux;
uint16_t offset;
if (respname->buf == NULL || respname->len == 0) return;
h->num_other_prs = mg_htons(1); // 1 additional record
p = build_srv_name(p, req.r);
o = p - 7; // point to '.local' label (\x05local\x00)
aux = p;
p = build_srv_record(respname, p, req.r, (uint16_t) (o - buf));
o = aux + sizeof(mdns_answer) + 6; // point to target in SRV
offset = mg_htons((uint16_t) (o - buf));
memcpy(p, &offset, 2); // point to target name, in record
*p |= 0xC0, p += 2;
p = build_a_record(c, p, req.addr);
} else { // A requested
// RFC-6762 6: 0 Auth, 0 Additional RRs
if (respname->buf == NULL || respname->len == 0) return;
p = build_name(respname, p);
p = build_a_record(c, p, req.addr);
}
if (!req.is_unicast) mg_multicast_restore(c, (uint8_t *) &c->loc);
mg_send(c, buf, (size_t) (p - buf)); // And send it!
MG_DEBUG(("%M > %M", mg_print_ip_port, &c->loc, mg_print_ip_port, &c->rem));
MG_DEBUG(("mDNS %s response sent", req.is_unicast ? "unicast" : "mcast"));
}
}
static void handle_mdns_response(struct mg_connection *c) {
struct mg_dns_header *rh = (struct mg_dns_header *) c->recv.buf;
struct mg_dns_rr rr;
size_t n;
// Parse first response, offset 12 is header size
n = mg_dns_parse_rr(c->recv.buf, c->recv.len, 12, false, &rr);
MG_VERBOSE(("mDNS response parsed, result=%d", (int) n));
if (n > 0) {
// RFC-6762 Appendix C, RFC2181 11: m(n + 1-63), max 255 + 0x0
char name[256];
uint8_t name_len;
struct mg_mdns_resp resp;
memset(&resp, 0, sizeof(resp));
if (rh->num_answers > mg_htons(1)) MG_DEBUG(("ignoring > 1 answers"));
mg_dns_parse_name(c->recv.buf, c->recv.len, 12, name, sizeof(name));
name_len = (uint8_t) strlen(name); // verify it ends in .local
MG_VERBOSE(("RR %u %u %s", (unsigned int) rr.atype,
(unsigned int) rr.aclass, name));
if (rr.alen == 4 && rr.atype == MG_DNS_RTYPE_A &&
(rr.aclass & 0x7FFF) == 1) {
resp.addr.is_ip6 = false;
memcpy(resp.addr.addr.ip, (char *) (rh + 1) + n - 4, 4);
MG_DEBUG(("A response from %.*s = %M", name_len, name, mg_print_ip,
&resp.addr));
// } else if (rr.alen == 16 && rr.atype == MG_DNS_RTYPE_AAAA &&
// (rr.aclass & 0x7FFF) == 1) {
// resp.addr.is_ip6 = true;
// memcpy(resp.addr.addr.ip, (char *)(rh + 1) + n - 16], 16);
// MG_DEBUG(("AAAA response from %.*s = %M", name_len, name,
// mg_print_ip, &resp.addr));
} else {
return;
}
resp.name = mg_str_n(name, name_len);
resp.rr = &rr;
mg_call(c, MG_EV_MDNS_RESP, &resp);
}
}
static void handle_mdns_record(struct mg_connection *c) {
struct mg_dns_header *h = (struct mg_dns_header *) c->recv.buf;
if (c->recv.len <= 12) return;
if ((h->flags & mg_htons(0xF800)) == 0) {
// flags -> !resp, opcode=0 => query; ignore other opcodes
handle_mdns_query(c);
} else if ((h->flags & mg_htons(0xF800)) == mg_htons(0x8000)) {
// flags -> resp, opcode=0 => response; ignore other opcodes
handle_mdns_response(c);
}
}
static void mdns_cb(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_READ) {
handle_mdns_record(c);
mg_iobuf_del(&c->recv, 0, c->recv.len);
}
(void) ev_data;
}
void mg_multicast_add(struct mg_connection *c, char *ip);
struct mg_connection *mg_mdns_listen(struct mg_mgr *mgr, mg_event_handler_t fn,
void *fn_data) {
struct mg_connection *c =
mg_listen(mgr, "udp://224.0.0.251:5353", fn, fn_data);
if (c == NULL) return NULL;
c->pfn = mdns_cb, c->pfn_data = fn_data;
mg_multicast_add(c, (char *) "224.0.0.251");
return c;
}
bool mg_mdns_query(struct mg_connection *c, const char *name,
unsigned int rtype) {
struct mg_str name_;
name_.buf = (char *) name, name_.len = strlen(name);
mg_multicast_restore(c, (uint8_t *) &c->loc);
(void) rtype;
return mg_dns_send(c, &name_, 0, false);
}
#ifdef MG_ENABLE_LINES
#line 1 "src/event.c"
#endif
void mg_call(struct mg_connection *c, int ev, void *ev_data) {
#if MG_ENABLE_PROFILE
const char *names[] = {
"EV_ERROR", "EV_OPEN", "EV_POLL", "EV_RESOLVE",
"EV_CONNECT", "EV_ACCEPT", "EV_TLS_HS", "EV_READ",
"EV_WRITE", "EV_CLOSE", "EV_HTTP_MSG", "EV_HTTP_CHUNK",
"EV_WS_OPEN", "EV_WS_MSG", "EV_WS_CTL", "EV_MQTT_CMD",
"EV_MQTT_MSG", "EV_MQTT_OPEN", "EV_SNTP_TIME", "EV_USER"};
if (ev != MG_EV_POLL && ev < (int) (sizeof(names) / sizeof(names[0]))) {
MG_PROF_ADD(c, names[ev]);
}
#endif
// Fire protocol handler first, user handler second. See #2559
if (c->pfn != NULL) c->pfn(c, ev, ev_data);
if (c->fn != NULL) c->fn(c, ev, ev_data);
}
void mg_error(struct mg_connection *c, const char *fmt, ...) {
char buf[64];
va_list ap;
va_start(ap, fmt);
mg_vsnprintf(buf, sizeof(buf), fmt, &ap);
va_end(ap);
MG_ERROR(("%lu %ld %s", c->id, c->fd, buf));
c->is_closing = 1; // Set is_closing before sending MG_EV_CALL
mg_call(c, MG_EV_ERROR, buf); // Let user handler override it
}
#ifdef MG_ENABLE_LINES
#line 1 "src/flash.c"
#endif
#if MG_OTA != MG_OTA_NONE && MG_OTA != MG_OTA_CUSTOM
static char *s_addr; // Current address to write to
static size_t s_size; // Firmware size to flash. In-progress indicator
static uint32_t s_crc32; // Firmware checksum
bool mg_ota_flash_begin(size_t new_firmware_size, struct mg_flash *flash) {
bool ok = false;
if (s_size) {
MG_ERROR(("OTA already in progress. Call mg_ota_end()"));
} else {
size_t half = flash->size / 2;
s_crc32 = 0;
s_addr = (char *) flash->start + half;
MG_DEBUG(("FW %lu bytes, max %lu", new_firmware_size, half));
if (new_firmware_size < half) {
ok = true;
s_size = new_firmware_size;
MG_INFO(("Starting OTA, firmware size %lu", s_size));
} else {
MG_ERROR(("Firmware %lu is too big to fit %lu", new_firmware_size, half));
}
}
return ok;
}
bool mg_ota_flash_write(const void *buf, size_t len, struct mg_flash *flash) {
bool ok = false;
if (s_size == 0) {
MG_ERROR(("OTA is not started, call mg_ota_begin()"));
} else {
size_t len_aligned_down = MG_ROUND_DOWN(len, flash->align);
if (len_aligned_down) ok = flash->write_fn(s_addr, buf, len_aligned_down);
if (len_aligned_down < len) {
size_t left = len - len_aligned_down;
char tmp[flash->align];
memset(tmp, 0xff, sizeof(tmp));
memcpy(tmp, (char *) buf + len_aligned_down, left);
ok = flash->write_fn(s_addr + len_aligned_down, tmp, sizeof(tmp));
}
s_crc32 = mg_crc32(s_crc32, (char *) buf, len); // Update CRC
MG_DEBUG(("%#x %p %lu -> %d", s_addr - len, buf, len, ok));
s_addr += len;
}
return ok;
}
bool mg_ota_flash_end(struct mg_flash *flash) {
char *base = (char *) flash->start + flash->size / 2;
bool ok = false;
if (s_size) {
size_t size = (size_t) (s_addr - base);
uint32_t crc32 = mg_crc32(0, base, s_size);
if (size == s_size && crc32 == s_crc32) ok = true;
MG_DEBUG(("CRC: %x/%x, size: %lu/%lu, status: %s", s_crc32, crc32, s_size,
size, ok ? "ok" : "fail"));
s_size = 0;
if (ok) ok = flash->swap_fn();
}
MG_INFO(("Finishing OTA: %s", ok ? "ok" : "fail"));
return ok;
}
#endif
#ifdef MG_ENABLE_LINES
#line 1 "src/fmt.c"
#endif
static bool is_digit(int c) {
return c >= '0' && c <= '9';
}
static int addexp(char *buf, int e, int sign) {
int n = 0;
buf[n++] = 'e';
buf[n++] = (char) sign;
if (e > 400) return 0;
if (e < 10) buf[n++] = '0';
if (e >= 100) buf[n++] = (char) (e / 100 + '0'), e -= 100 * (e / 100);
if (e >= 10) buf[n++] = (char) (e / 10 + '0'), e -= 10 * (e / 10);
buf[n++] = (char) (e + '0');
return n;
}
static int xisinf(double x) {
union {
double f;
uint64_t u;
} ieee754;
ieee754.f = x;
return ((unsigned) (ieee754.u >> 32) & 0x7fffffff) == 0x7ff00000 &&
((unsigned) ieee754.u == 0);
}
static int xisnan(double x) {
union {
double f;
uint64_t u;
} ieee754;
ieee754.f = x;
return ((unsigned) (ieee754.u >> 32) & 0x7fffffff) +
((unsigned) ieee754.u != 0) >
0x7ff00000;
}
static size_t mg_dtoa(char *dst, size_t dstlen, double d, int width, bool tz) {
char buf[40];
int i, s = 0, n = 0, e = 0;
double t, mul, saved;
if (d == 0.0) return mg_snprintf(dst, dstlen, "%s", "0");
if (xisinf(d)) return mg_snprintf(dst, dstlen, "%s", d > 0 ? "inf" : "-inf");
if (xisnan(d)) return mg_snprintf(dst, dstlen, "%s", "nan");
if (d < 0.0) d = -d, buf[s++] = '-';
// Round
saved = d;
if (tz) {
mul = 1.0;
while (d >= 10.0 && d / mul >= 10.0) mul *= 10.0;
} else {
mul = 0.1;
}
while (d <= 1.0 && d / mul <= 1.0) mul /= 10.0;
for (i = 0, t = mul * 5; i < width; i++) t /= 10.0;
d += t;
// Calculate exponent, and 'mul' for scientific representation
mul = 1.0;
while (d >= 10.0 && d / mul >= 10.0) mul *= 10.0, e++;
while (d < 1.0 && d / mul < 1.0) mul /= 10.0, e--;
// printf(" --> %g %d %g %g\n", saved, e, t, mul);
if (tz && e >= width && width > 1) {
n = (int) mg_dtoa(buf, sizeof(buf), saved / mul, width, tz);
// printf(" --> %.*g %d [%.*s]\n", 10, d / t, e, n, buf);
n += addexp(buf + s + n, e, '+');
return mg_snprintf(dst, dstlen, "%.*s", n, buf);
} else if (tz && e <= -width && width > 1) {
n = (int) mg_dtoa(buf, sizeof(buf), saved / mul, width, tz);
// printf(" --> %.*g %d [%.*s]\n", 10, d / mul, e, n, buf);
n += addexp(buf + s + n, -e, '-');
return mg_snprintf(dst, dstlen, "%.*s", n, buf);
} else {
int targ_width = width;
for (i = 0, t = mul; t >= 1.0 && s + n < (int) sizeof(buf); i++) {
int ch = (int) (d / t);
if (n > 0 || ch > 0) buf[s + n++] = (char) (ch + '0');
d -= ch * t;
t /= 10.0;
}
// printf(" --> [%g] -> %g %g (%d) [%.*s]\n", saved, d, t, n, s + n, buf);
if (n == 0) buf[s++] = '0';
while (t >= 1.0 && n + s < (int) sizeof(buf)) buf[n++] = '0', t /= 10.0;
if (s + n < (int) sizeof(buf)) buf[n + s++] = '.';
// printf(" 1--> [%g] -> [%.*s]\n", saved, s + n, buf);
if (!tz && n > 0) targ_width = width + n;
for (i = 0, t = 0.1; s + n < (int) sizeof(buf) && n < targ_width; i++) {
int ch = (int) (d / t);
buf[s + n++] = (char) (ch + '0');
d -= ch * t;
t /= 10.0;
}
}
while (tz && n > 0 && buf[s + n - 1] == '0') n--; // Trim trailing zeroes
if (tz && n > 0 && buf[s + n - 1] == '.') n--; // Trim trailing dot
n += s;
if (n >= (int) sizeof(buf)) n = (int) sizeof(buf) - 1;
buf[n] = '\0';
return mg_snprintf(dst, dstlen, "%s", buf);
}
static size_t mg_lld(char *buf, int64_t val, bool is_signed, bool is_hex) {
const char *letters = "0123456789abcdef";
uint64_t v = (uint64_t) val;
size_t s = 0, n, i;
if (is_signed && val < 0) buf[s++] = '-', v = (uint64_t) (-val);
// This loop prints a number in reverse order. I guess this is because we
// write numbers from right to left: least significant digit comes last.
// Maybe because we use Arabic numbers, and Arabs write RTL?
if (is_hex) {
for (n = 0; v; v >>= 4) buf[s + n++] = letters[v & 15];
} else {
for (n = 0; v; v /= 10) buf[s + n++] = letters[v % 10];
}
// Reverse a string
for (i = 0; i < n / 2; i++) {
char t = buf[s + i];
buf[s + i] = buf[s + n - i - 1], buf[s + n - i - 1] = t;
}
if (val == 0) buf[n++] = '0'; // Handle special case
return n + s;
}
static size_t scpy(void (*out)(char, void *), void *ptr, char *buf,
size_t len) {
size_t i = 0;
while (i < len && buf[i] != '\0') out(buf[i++], ptr);
return i;
}
size_t mg_xprintf(void (*out)(char, void *), void *ptr, const char *fmt, ...) {
size_t len = 0;
va_list ap;
va_start(ap, fmt);
len = mg_vxprintf(out, ptr, fmt, &ap);
va_end(ap);
return len;
}
size_t mg_vxprintf(void (*out)(char, void *), void *param, const char *fmt,
va_list *ap) {
size_t i = 0, n = 0;
while (fmt[i] != '\0') {
if (fmt[i] == '%') {
size_t j, k, x = 0, is_long = 0, w = 0 /* width */, pr = ~0U /* prec */;
char pad = ' ', minus = 0, c = fmt[++i];
if (c == '#') x++, c = fmt[++i];
if (c == '-') minus++, c = fmt[++i];
if (c == '0') pad = '0', c = fmt[++i];
while (is_digit(c)) w *= 10, w += (size_t) (c - '0'), c = fmt[++i];
if (c == '.') {
c = fmt[++i];
if (c == '*') {
pr = (size_t) va_arg(*ap, int);
c = fmt[++i];
} else {
pr = 0;
while (is_digit(c)) pr *= 10, pr += (size_t) (c - '0'), c = fmt[++i];
}
}
while (c == 'h') c = fmt[++i]; // Treat h and hh as int
if (c == 'l') {
is_long++, c = fmt[++i];
if (c == 'l') is_long++, c = fmt[++i];
}
if (c == 'p') x = 1, is_long = 1;
if (c == 'd' || c == 'u' || c == 'x' || c == 'X' || c == 'p' ||
c == 'g' || c == 'f') {
bool s = (c == 'd'), h = (c == 'x' || c == 'X' || c == 'p');
char tmp[40];
size_t xl = x ? 2 : 0;
if (c == 'g' || c == 'f') {
double v = va_arg(*ap, double);
if (pr == ~0U) pr = 6;
k = mg_dtoa(tmp, sizeof(tmp), v, (int) pr, c == 'g');
} else if (is_long == 2) {
int64_t v = va_arg(*ap, int64_t);
k = mg_lld(tmp, v, s, h);
} else if (is_long == 1) {
long v = va_arg(*ap, long);
k = mg_lld(tmp, s ? (int64_t) v : (int64_t) (unsigned long) v, s, h);
} else {
int v = va_arg(*ap, int);
k = mg_lld(tmp, s ? (int64_t) v : (int64_t) (unsigned) v, s, h);
}
for (j = 0; j < xl && w > 0; j++) w--;
for (j = 0; pad == ' ' && !minus && k < w && j + k < w; j++)
n += scpy(out, param, &pad, 1);
n += scpy(out, param, (char *) "0x", xl);
for (j = 0; pad == '0' && k < w && j + k < w; j++)
n += scpy(out, param, &pad, 1);
n += scpy(out, param, tmp, k);
for (j = 0; pad == ' ' && minus && k < w && j + k < w; j++)
n += scpy(out, param, &pad, 1);
} else if (c == 'm' || c == 'M') {
mg_pm_t f = va_arg(*ap, mg_pm_t);
if (c == 'm') out('"', param);
n += f(out, param, ap);
if (c == 'm') n += 2, out('"', param);
} else if (c == 'c') {
int ch = va_arg(*ap, int);
out((char) ch, param);
n++;
} else if (c == 's') {
char *p = va_arg(*ap, char *);
if (pr == ~0U) pr = p == NULL ? 0 : strlen(p);
for (j = 0; !minus && pr < w && j + pr < w; j++)
n += scpy(out, param, &pad, 1);
n += scpy(out, param, p, pr);
for (j = 0; minus && pr < w && j + pr < w; j++)
n += scpy(out, param, &pad, 1);
} else if (c == '%') {
out('%', param);
n++;
} else {
out('%', param);
out(c, param);
n += 2;
}
i++;
} else {
out(fmt[i], param), n++, i++;
}
}
return n;
}
#ifdef MG_ENABLE_LINES
#line 1 "src/fs.c"
#endif
struct mg_fd *mg_fs_open(struct mg_fs *fs, const char *path, int flags) {
struct mg_fd *fd = (struct mg_fd *) mg_calloc(1, sizeof(*fd));
if (fd != NULL) {
fd->fd = fs->op(path, flags);
fd->fs = fs;
if (fd->fd == NULL) {
mg_free(fd);
fd = NULL;
}
}
return fd;
}
void mg_fs_close(struct mg_fd *fd) {
if (fd != NULL) {
fd->fs->cl(fd->fd);
mg_free(fd);
}
}
struct mg_str mg_file_read(struct mg_fs *fs, const char *path) {
struct mg_str result = {NULL, 0};
void *fp;
fs->st(path, &result.len, NULL);
if ((fp = fs->op(path, MG_FS_READ)) != NULL) {
result.buf = (char *) mg_calloc(1, result.len + 1);
if (result.buf != NULL &&
fs->rd(fp, (void *) result.buf, result.len) != result.len) {
mg_free((void *) result.buf);
result.buf = NULL;
}
fs->cl(fp);
}
if (result.buf == NULL) result.len = 0;
return result;
}
bool mg_file_write(struct mg_fs *fs, const char *path, const void *buf,
size_t len) {
bool result = false;
struct mg_fd *fd;
char tmp[MG_PATH_MAX];
mg_snprintf(tmp, sizeof(tmp), "%s..%d", path, rand());
if ((fd = mg_fs_open(fs, tmp, MG_FS_WRITE)) != NULL) {
result = fs->wr(fd->fd, buf, len) == len;
mg_fs_close(fd);
if (result) {
fs->rm(path);
fs->mv(tmp, path);
} else {
fs->rm(tmp);
}
}
return result;
}
bool mg_file_printf(struct mg_fs *fs, const char *path, const char *fmt, ...) {
va_list ap;
char *data;
bool result = false;
va_start(ap, fmt);
data = mg_vmprintf(fmt, &ap);
va_end(ap);
result = mg_file_write(fs, path, data, strlen(data));
mg_free(data);
return result;
}
// This helper function allows to scan a filesystem in a sequential way,
// without using callback function:
// char buf[100] = "";
// while (mg_fs_ls(&mg_fs_posix, "./", buf, sizeof(buf))) {
// ...
static void mg_fs_ls_fn(const char *filename, void *param) {
struct mg_str *s = (struct mg_str *) param;
if (s->buf[0] == '\0') {
mg_snprintf((char *) s->buf, s->len, "%s", filename);
} else if (strcmp(s->buf, filename) == 0) {
((char *) s->buf)[0] = '\0'; // Fetch next file
}
}
bool mg_fs_ls(struct mg_fs *fs, const char *path, char *buf, size_t len) {
struct mg_str s;
s.buf = buf, s.len = len;
fs->ls(path, mg_fs_ls_fn, &s);
return buf[0] != '\0';
}
#ifdef MG_ENABLE_LINES
#line 1 "src/fs_fat.c"
#endif
#if MG_ENABLE_FATFS
#include <ff.h>
static int mg_days_from_epoch(int y, int m, int d) {
y -= m <= 2;
int era = y / 400;
int yoe = y - era * 400;
int doy = (153 * (m + (m > 2 ? -3 : 9)) + 2) / 5 + d - 1;
int doe = yoe * 365 + yoe / 4 - yoe / 100 + doy;
return era * 146097 + doe - 719468;
}
static time_t mg_timegm(const struct tm *t) {
int year = t->tm_year + 1900;
int month = t->tm_mon; // 0-11
if (month > 11) {
year += month / 12;
month %= 12;
} else if (month < 0) {
int years_diff = (11 - month) / 12;
year -= years_diff;
month += 12 * years_diff;
}
int x = mg_days_from_epoch(year, month + 1, t->tm_mday);
return 60 * (60 * (24L * x + t->tm_hour) + t->tm_min) + t->tm_sec;
}
static time_t ff_time_to_epoch(uint16_t fdate, uint16_t ftime) {
struct tm tm;
memset(&tm, 0, sizeof(struct tm));
tm.tm_sec = (ftime << 1) & 0x3e;
tm.tm_min = ((ftime >> 5) & 0x3f);
tm.tm_hour = ((ftime >> 11) & 0x1f);
tm.tm_mday = (fdate & 0x1f);
tm.tm_mon = ((fdate >> 5) & 0x0f) - 1;
tm.tm_year = ((fdate >> 9) & 0x7f) + 80;
return mg_timegm(&tm);
}
static int ff_stat(const char *path, size_t *size, time_t *mtime) {
FILINFO fi;
if (path[0] == '\0') {
if (size) *size = 0;
if (mtime) *mtime = 0;
return MG_FS_DIR;
} else if (f_stat(path, &fi) == 0) {
if (size) *size = (size_t) fi.fsize;
if (mtime) *mtime = ff_time_to_epoch(fi.fdate, fi.ftime);
return MG_FS_READ | MG_FS_WRITE | ((fi.fattrib & AM_DIR) ? MG_FS_DIR : 0);
} else {
return 0;
}
}
static void ff_list(const char *dir, void (*fn)(const char *, void *),
void *userdata) {
DIR d;
FILINFO fi;
if (f_opendir(&d, dir) == FR_OK) {
while (f_readdir(&d, &fi) == FR_OK && fi.fname[0] != '\0') {
if (!strcmp(fi.fname, ".") || !strcmp(fi.fname, "..")) continue;
fn(fi.fname, userdata);
}
f_closedir(&d);
}
}
static void *ff_open(const char *path, int flags) {
FIL f;
unsigned char mode = FA_READ;
if (flags & MG_FS_WRITE) mode |= FA_WRITE | FA_OPEN_ALWAYS | FA_OPEN_APPEND;
if (f_open(&f, path, mode) == 0) {
FIL *fp;
if ((fp = mg_calloc(1, sizeof(*fp))) != NULL) {
memcpy(fp, &f, sizeof(*fp));
return fp;
}
}
return NULL;
}
static void ff_close(void *fp) {
if (fp != NULL) {
f_close((FIL *) fp);
mg_free(fp);
}
}
static size_t ff_read(void *fp, void *buf, size_t len) {
UINT n = 0, misalign = ((size_t) buf) & 3;
if (misalign) {
char aligned[4];
f_read((FIL *) fp, aligned, len > misalign ? misalign : len, &n);
memcpy(buf, aligned, n);
} else {
f_read((FIL *) fp, buf, len, &n);
}
return n;
}
static size_t ff_write(void *fp, const void *buf, size_t len) {
UINT n = 0;
return f_write((FIL *) fp, (char *) buf, len, &n) == FR_OK ? n : 0;
}
static size_t ff_seek(void *fp, size_t offset) {
f_lseek((FIL *) fp, offset);
return offset;
}
static bool ff_rename(const char *from, const char *to) {
return f_rename(from, to) == FR_OK;
}
static bool ff_remove(const char *path) {
return f_unlink(path) == FR_OK;
}
static bool ff_mkdir(const char *path) {
return f_mkdir(path) == FR_OK;
}
struct mg_fs mg_fs_fat = {ff_stat, ff_list, ff_open, ff_close, ff_read,
ff_write, ff_seek, ff_rename, ff_remove, ff_mkdir};
#endif
#ifdef MG_ENABLE_LINES
#line 1 "src/fs_packed.c"
#endif
struct packed_file {
const char *data;
size_t size;
size_t pos;
};
#if MG_ENABLE_PACKED_FS
#else
const char *mg_unpack(const char *path, size_t *size, time_t *mtime) {
if (size != NULL) *size = 0;
if (mtime != NULL) *mtime = 0;
(void) path;
return NULL;
}
const char *mg_unlist(size_t no) {
(void) no;
return NULL;
}
#endif
struct mg_str mg_unpacked(const char *path) {
size_t len = 0;
const char *buf = mg_unpack(path, &len, NULL);
return mg_str_n(buf, len);
}
static int is_dir_prefix(const char *prefix, size_t n, const char *path) {
// MG_INFO(("[%.*s] [%s] %c", (int) n, prefix, path, path[n]));
return n < strlen(path) && strncmp(prefix, path, n) == 0 &&
(n == 0 || path[n] == '/' || path[n - 1] == '/');
}
static int packed_stat(const char *path, size_t *size, time_t *mtime) {
const char *p;
size_t i, n = strlen(path);
if (mg_unpack(path, size, mtime)) return MG_FS_READ; // Regular file
// Scan all files. If `path` is a dir prefix for any of them, it's a dir
for (i = 0; (p = mg_unlist(i)) != NULL; i++) {
if (is_dir_prefix(path, n, p)) return MG_FS_DIR;
}
return 0;
}
static void packed_list(const char *dir, void (*fn)(const char *, void *),
void *userdata) {
char buf[MG_PATH_MAX], tmp[sizeof(buf)];
const char *path, *begin, *end;
size_t i, n = strlen(dir);
tmp[0] = '\0'; // Previously listed entry
for (i = 0; (path = mg_unlist(i)) != NULL; i++) {
if (!is_dir_prefix(dir, n, path)) continue;
begin = &path[n + 1];
end = strchr(begin, '/');
if (end == NULL) end = begin + strlen(begin);
mg_snprintf(buf, sizeof(buf), "%.*s", (int) (end - begin), begin);
buf[sizeof(buf) - 1] = '\0';
// If this entry has been already listed, skip
// NOTE: we're assuming that file list is sorted alphabetically
if (strcmp(buf, tmp) == 0) continue;
fn(buf, userdata); // Not yet listed, call user function
strcpy(tmp, buf); // And save this entry as listed
}
}
static void *packed_open(const char *path, int flags) {
size_t size = 0;
const char *data = mg_unpack(path, &size, NULL);
struct packed_file *fp = NULL;
if (data == NULL) return NULL;
if (flags & MG_FS_WRITE) return NULL;
if ((fp = (struct packed_file *) mg_calloc(1, sizeof(*fp))) != NULL) {
fp->size = size;
fp->data = data;
}
return (void *) fp;
}
static void packed_close(void *fp) {
if (fp != NULL) mg_free(fp);
}
static size_t packed_read(void *fd, void *buf, size_t len) {
struct packed_file *fp = (struct packed_file *) fd;
if (fp->pos + len > fp->size) len = fp->size - fp->pos;
memcpy(buf, &fp->data[fp->pos], len);
fp->pos += len;
return len;
}
static size_t packed_write(void *fd, const void *buf, size_t len) {
(void) fd, (void) buf, (void) len;
return 0;
}
static size_t packed_seek(void *fd, size_t offset) {
struct packed_file *fp = (struct packed_file *) fd;
fp->pos = offset;
if (fp->pos > fp->size) fp->pos = fp->size;
return fp->pos;
}
static bool packed_rename(const char *from, const char *to) {
(void) from, (void) to;
return false;
}
static bool packed_remove(const char *path) {
(void) path;
return false;
}
static bool packed_mkdir(const char *path) {
(void) path;
return false;
}
struct mg_fs mg_fs_packed = {
packed_stat, packed_list, packed_open, packed_close, packed_read,
packed_write, packed_seek, packed_rename, packed_remove, packed_mkdir};
#ifdef MG_ENABLE_LINES
#line 1 "src/fs_posix.c"
#endif
#if MG_ENABLE_POSIX_FS
#ifndef MG_STAT_STRUCT
#define MG_STAT_STRUCT stat
#endif
#ifndef MG_STAT_FUNC
#define MG_STAT_FUNC stat
#endif
static int p_stat(const char *path, size_t *size, time_t *mtime) {
#if !defined(S_ISDIR)
MG_ERROR(("stat() API is not supported. %p %p %p", path, size, mtime));
return 0;
#else
#if MG_ARCH == MG_ARCH_WIN32
struct _stati64 st;
wchar_t tmp[MG_PATH_MAX];
MultiByteToWideChar(CP_UTF8, 0, path, -1, tmp, sizeof(tmp) / sizeof(tmp[0]));
if (_wstati64(tmp, &st) != 0) return 0;
// If path is a symlink, windows reports 0 in st.st_size.
// Get a real file size by opening it and jumping to the end
if (st.st_size == 0 && (st.st_mode & _S_IFREG)) {
FILE *fp = _wfopen(tmp, L"rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
if (ftell(fp) > 0) st.st_size = ftell(fp); // Use _ftelli64 on win10+
fclose(fp);
}
}
#else
struct MG_STAT_STRUCT st;
if (MG_STAT_FUNC(path, &st) != 0) return 0;
#endif
if (size) *size = (size_t) st.st_size;
if (mtime) *mtime = st.st_mtime;
return MG_FS_READ | MG_FS_WRITE | (S_ISDIR(st.st_mode) ? MG_FS_DIR : 0);
#endif
}
#if MG_ARCH == MG_ARCH_WIN32
struct dirent {
char d_name[MAX_PATH];
};
typedef struct win32_dir {
HANDLE handle;
WIN32_FIND_DATAW info;
struct dirent result;
} DIR;
#if 0
int gettimeofday(struct timeval *tv, void *tz) {
FILETIME ft;
unsigned __int64 tmpres = 0;
if (tv != NULL) {
GetSystemTimeAsFileTime(&ft);
tmpres |= ft.dwHighDateTime;
tmpres <<= 32;
tmpres |= ft.dwLowDateTime;
tmpres /= 10; // convert into microseconds
tmpres -= (int64_t) 11644473600000000;
tv->tv_sec = (long) (tmpres / 1000000UL);
tv->tv_usec = (long) (tmpres % 1000000UL);
}
(void) tz;
return 0;
}
#endif
static int to_wchar(const char *path, wchar_t *wbuf, size_t wbuf_len) {
int ret;
char buf[MAX_PATH * 2], buf2[MAX_PATH * 2], *p;
strncpy(buf, path, sizeof(buf));
buf[sizeof(buf) - 1] = '\0';
// Trim trailing slashes. Leave backslash for paths like "X:\"
p = buf + strlen(buf) - 1;
while (p > buf && p[-1] != ':' && (p[0] == '\\' || p[0] == '/')) *p-- = '\0';
memset(wbuf, 0, wbuf_len * sizeof(wchar_t));
ret = MultiByteToWideChar(CP_UTF8, 0, buf, -1, wbuf, (int) wbuf_len);
// Convert back to Unicode. If doubly-converted string does not match the
// original, something is fishy, reject.
WideCharToMultiByte(CP_UTF8, 0, wbuf, (int) wbuf_len, buf2, sizeof(buf2),
NULL, NULL);
if (strcmp(buf, buf2) != 0) {
wbuf[0] = L'\0';
ret = 0;
}
return ret;
}
DIR *opendir(const char *name) {
DIR *d = NULL;
wchar_t wpath[MAX_PATH];
DWORD attrs;
if (name == NULL) {
SetLastError(ERROR_BAD_ARGUMENTS);
} else if ((d = (DIR *) mg_calloc(1, sizeof(*d))) == NULL) {
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
} else {
to_wchar(name, wpath, sizeof(wpath) / sizeof(wpath[0]));
attrs = GetFileAttributesW(wpath);
if (attrs != 0Xffffffff && (attrs & FILE_ATTRIBUTE_DIRECTORY)) {
(void) wcscat(wpath, L"\\*");
d->handle = FindFirstFileW(wpath, &d->info);
d->result.d_name[0] = '\0';
} else {
mg_free(d);
d = NULL;
}
}
return d;
}
int closedir(DIR *d) {
int result = 0;
if (d != NULL) {
if (d->handle != INVALID_HANDLE_VALUE)
result = FindClose(d->handle) ? 0 : -1;
mg_free(d);
} else {
result = -1;
SetLastError(ERROR_BAD_ARGUMENTS);
}
return result;
}
struct dirent *readdir(DIR *d) {
struct dirent *result = NULL;
if (d != NULL) {
memset(&d->result, 0, sizeof(d->result));
if (d->handle != INVALID_HANDLE_VALUE) {
result = &d->result;
WideCharToMultiByte(CP_UTF8, 0, d->info.cFileName, -1, result->d_name,
sizeof(result->d_name), NULL, NULL);
if (!FindNextFileW(d->handle, &d->info)) {
FindClose(d->handle);
d->handle = INVALID_HANDLE_VALUE;
}
} else {
SetLastError(ERROR_FILE_NOT_FOUND);
}
} else {
SetLastError(ERROR_BAD_ARGUMENTS);
}
return result;
}
#endif
static void p_list(const char *dir, void (*fn)(const char *, void *),
void *userdata) {
#if MG_ENABLE_DIRLIST
struct dirent *dp;
DIR *dirp;
if ((dirp = (opendir(dir))) == NULL) return;
while ((dp = readdir(dirp)) != NULL) {
if (!strcmp(dp->d_name, ".") || !strcmp(dp->d_name, "..")) continue;
fn(dp->d_name, userdata);
}
closedir(dirp);
#else
(void) dir, (void) fn, (void) userdata;
#endif
}
static void *p_open(const char *path, int flags) {
#if MG_ARCH == MG_ARCH_WIN32
const char *mode = flags == MG_FS_READ ? "rb" : "a+b";
wchar_t b1[MG_PATH_MAX], b2[10];
MultiByteToWideChar(CP_UTF8, 0, path, -1, b1, sizeof(b1) / sizeof(b1[0]));
MultiByteToWideChar(CP_UTF8, 0, mode, -1, b2, sizeof(b2) / sizeof(b2[0]));
return (void *) _wfopen(b1, b2);
#else
const char *mode = flags == MG_FS_READ ? "rbe" : "a+be"; // e for CLOEXEC
return (void *) fopen(path, mode);
#endif
}
static void p_close(void *fp) {
fclose((FILE *) fp);
}
static size_t p_read(void *fp, void *buf, size_t len) {
return fread(buf, 1, len, (FILE *) fp);
}
static size_t p_write(void *fp, const void *buf, size_t len) {
return fwrite(buf, 1, len, (FILE *) fp);
}
static size_t p_seek(void *fp, size_t offset) {
#if (defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64) || \
(defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 200112L) || \
(defined(_XOPEN_SOURCE) && _XOPEN_SOURCE >= 600)
if (fseeko((FILE *) fp, (off_t) offset, SEEK_SET) != 0) (void) 0;
#else
if (fseek((FILE *) fp, (long) offset, SEEK_SET) != 0) (void) 0;
#endif
return (size_t) ftell((FILE *) fp);
}
static bool p_rename(const char *from, const char *to) {
return rename(from, to) == 0;
}
static bool p_remove(const char *path) {
return remove(path) == 0;
}
static bool p_mkdir(const char *path) {
return mkdir(path, 0775) == 0;
}
#else
static int p_stat(const char *path, size_t *size, time_t *mtime) {
(void) path, (void) size, (void) mtime;
return 0;
}
static void p_list(const char *path, void (*fn)(const char *, void *),
void *userdata) {
(void) path, (void) fn, (void) userdata;
}
static void *p_open(const char *path, int flags) {
(void) path, (void) flags;
return NULL;
}
static void p_close(void *fp) {
(void) fp;
}
static size_t p_read(void *fd, void *buf, size_t len) {
(void) fd, (void) buf, (void) len;
return 0;
}
static size_t p_write(void *fd, const void *buf, size_t len) {
(void) fd, (void) buf, (void) len;
return 0;
}
static size_t p_seek(void *fd, size_t offset) {
(void) fd, (void) offset;
return (size_t) ~0;
}
static bool p_rename(const char *from, const char *to) {
(void) from, (void) to;
return false;
}
static bool p_remove(const char *path) {
(void) path;
return false;
}
static bool p_mkdir(const char *path) {
(void) path;
return false;
}
#endif
struct mg_fs mg_fs_posix = {p_stat, p_list, p_open, p_close, p_read,
p_write, p_seek, p_rename, p_remove, p_mkdir};
#ifdef MG_ENABLE_LINES
#line 1 "src/http.c"
#endif
static int mg_ncasecmp(const char *s1, const char *s2, size_t len) {
int diff = 0;
if (len > 0) do {
int c = *s1++, d = *s2++;
if (c >= 'A' && c <= 'Z') c += 'a' - 'A';
if (d >= 'A' && d <= 'Z') d += 'a' - 'A';
diff = c - d;
} while (diff == 0 && s1[-1] != '\0' && --len > 0);
return diff;
}
bool mg_to_size_t(struct mg_str str, size_t *val);
bool mg_to_size_t(struct mg_str str, size_t *val) {
size_t i = 0, max = (size_t) -1, max2 = max / 10, result = 0, ndigits = 0;
while (i < str.len && (str.buf[i] == ' ' || str.buf[i] == '\t')) i++;
if (i < str.len && str.buf[i] == '-') return false;
while (i < str.len && str.buf[i] >= '0' && str.buf[i] <= '9') {
size_t digit = (size_t) (str.buf[i] - '0');
if (result > max2) return false; // Overflow
result *= 10;
if (result > max - digit) return false; // Overflow
result += digit;
i++, ndigits++;
}
while (i < str.len && (str.buf[i] == ' ' || str.buf[i] == '\t')) i++;
if (ndigits == 0) return false; // #2322: Content-Length = 1 * DIGIT
if (i != str.len) return false; // Ditto
*val = (size_t) result;
return true;
}
// Chunk deletion marker is the MSB in the "processed" counter
#define MG_DMARK ((size_t) 1 << (sizeof(size_t) * 8 - 1))
// Multipart POST example:
// --xyz
// Content-Disposition: form-data; name="val"
//
// abcdef
// --xyz
// Content-Disposition: form-data; name="foo"; filename="a.txt"
// Content-Type: text/plain
//
// hello world
//
// --xyz--
size_t mg_http_next_multipart(struct mg_str body, size_t ofs,
struct mg_http_part *part) {
struct mg_str cd = mg_str_n("Content-Disposition", 19);
const char *s = body.buf;
size_t b = ofs, h1, h2, b1, b2, max = body.len;
// Init part params
if (part != NULL) part->name = part->filename = part->body = mg_str_n(0, 0);
// Skip boundary
while (b + 2 < max && s[b] != '\r' && s[b + 1] != '\n') b++;
if (b <= ofs || b + 2 >= max) return 0;
// MG_INFO(("B: %zu %zu [%.*s]", ofs, b - ofs, (int) (b - ofs), s));
// Skip headers
h1 = h2 = b + 2;
for (;;) {
while (h2 + 2 < max && s[h2] != '\r' && s[h2 + 1] != '\n') h2++;
if (h2 == h1) break;
if (h2 + 2 >= max) return 0;
// MG_INFO(("Header: [%.*s]", (int) (h2 - h1), &s[h1]));
if (part != NULL && h1 + cd.len + 2 < h2 && s[h1 + cd.len] == ':' &&
mg_ncasecmp(&s[h1], cd.buf, cd.len) == 0) {
struct mg_str v = mg_str_n(&s[h1 + cd.len + 2], h2 - (h1 + cd.len + 2));
part->name = mg_http_get_header_var(v, mg_str_n("name", 4));
part->filename = mg_http_get_header_var(v, mg_str_n("filename", 8));
}
h1 = h2 = h2 + 2;
}
b1 = b2 = h2 + 2;
while (b2 + 2 + (b - ofs) + 2 < max && !(s[b2] == '\r' && s[b2 + 1] == '\n' &&
memcmp(&s[b2 + 2], s, b - ofs) == 0))
b2++;
if (b2 + 2 >= max) return 0;
if (part != NULL) part->body = mg_str_n(&s[b1], b2 - b1);
// MG_INFO(("Body: [%.*s]", (int) (b2 - b1), &s[b1]));
return b2 + 2;
}
void mg_http_bauth(struct mg_connection *c, const char *user,
const char *pass) {
struct mg_str u = mg_str(user), p = mg_str(pass);
size_t need = c->send.len + 36 + (u.len + p.len) * 2;
if (c->send.size < need) mg_iobuf_resize(&c->send, need);
if (c->send.size >= need) {
size_t i, n = 0;
char *buf = (char *) &c->send.buf[c->send.len];
memcpy(buf, "Authorization: Basic ", 21); // DON'T use mg_send!
for (i = 0; i < u.len; i++) {
n = mg_base64_update(((unsigned char *) u.buf)[i], buf + 21, n);
}
if (p.len > 0) {
n = mg_base64_update(':', buf + 21, n);
for (i = 0; i < p.len; i++) {
n = mg_base64_update(((unsigned char *) p.buf)[i], buf + 21, n);
}
}
n = mg_base64_final(buf + 21, n);
c->send.len += 21 + (size_t) n + 2;
memcpy(&c->send.buf[c->send.len - 2], "\r\n", 2);
} else {
MG_ERROR(("%lu oom %d->%d ", c->id, (int) c->send.size, (int) need));
}
}
struct mg_str mg_http_var(struct mg_str buf, struct mg_str name) {
struct mg_str entry, k, v, result = mg_str_n(NULL, 0);
while (mg_span(buf, &entry, &buf, '&')) {
if (mg_span(entry, &k, &v, '=') && name.len == k.len &&
mg_ncasecmp(name.buf, k.buf, k.len) == 0) {
result = v;
break;
}
}
return result;
}
int mg_http_get_var(const struct mg_str *buf, const char *name, char *dst,
size_t dst_len) {
int len;
if (dst != NULL && dst_len > 0) {
dst[0] = '\0'; // If destination buffer is valid, always nul-terminate it
}
if (dst == NULL || dst_len == 0) {
len = -2; // Bad destination
} else if (buf->buf == NULL || name == NULL || buf->len == 0) {
len = -1; // Bad source
} else {
struct mg_str v = mg_http_var(*buf, mg_str(name));
if (v.buf == NULL) {
len = -4; // Name does not exist
} else {
len = mg_url_decode(v.buf, v.len, dst, dst_len, 1);
if (len < 0) len = -3; // Failed to decode
}
}
return len;
}
static bool isx(int c) {
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') ||
(c >= 'A' && c <= 'F');
}
int mg_url_decode(const char *src, size_t src_len, char *dst, size_t dst_len,
int is_form_url_encoded) {
size_t i, j;
for (i = j = 0; i < src_len && j + 1 < dst_len; i++, j++) {
if (src[i] == '%') {
// Use `i + 2 < src_len`, not `i < src_len - 2`, note small src_len
if (i + 2 < src_len && isx(src[i + 1]) && isx(src[i + 2])) {
mg_str_to_num(mg_str_n(src + i + 1, 2), 16, &dst[j], sizeof(uint8_t));
i += 2;
} else {
return -1;
}
} else if (is_form_url_encoded && src[i] == '+') {
dst[j] = ' ';
} else {
dst[j] = src[i];
}
}
if (j < dst_len) dst[j] = '\0'; // Null-terminate the destination
return i >= src_len && j < dst_len ? (int) j : -1;
}
static bool isok(uint8_t c) {
return c == '\n' || c == '\r' || c == '\t' || c >= ' ';
}
int mg_http_get_request_len(const unsigned char *buf, size_t buf_len) {
size_t i;
for (i = 0; i < buf_len; i++) {
if (!isok(buf[i])) return -1;
if ((i > 0 && buf[i] == '\n' && buf[i - 1] == '\n') ||
(i > 3 && buf[i] == '\n' && buf[i - 1] == '\r' && buf[i - 2] == '\n'))
return (int) i + 1;
}
return 0;
}
struct mg_str *mg_http_get_header(struct mg_http_message *h, const char *name) {
size_t i, n = strlen(name), max = sizeof(h->headers) / sizeof(h->headers[0]);
for (i = 0; i < max && h->headers[i].name.len > 0; i++) {
struct mg_str *k = &h->headers[i].name, *v = &h->headers[i].value;
if (n == k->len && mg_ncasecmp(k->buf, name, n) == 0) return v;
}
return NULL;
}
// Is it a valid utf-8 continuation byte
static bool vcb(uint8_t c) {
return (c & 0xc0) == 0x80;
}
// Get character length (valid utf-8). Used to parse method, URI, headers
static size_t clen(const char *s, const char *end) {
const unsigned char *u = (unsigned char *) s, c = *u;
long n = (long) (end - s);
if (c > ' ' && c <= '~') return 1; // Usual ascii printed char
if ((c & 0xe0) == 0xc0 && n > 1 && vcb(u[1])) return 2; // 2-byte UTF8
if ((c & 0xf0) == 0xe0 && n > 2 && vcb(u[1]) && vcb(u[2])) return 3;
if ((c & 0xf8) == 0xf0 && n > 3 && vcb(u[1]) && vcb(u[2]) && vcb(u[3]))
return 4;
return 0;
}
// Skip until the newline. Return advanced `s`, or NULL on error
static const char *skiptorn(const char *s, const char *end, struct mg_str *v) {
v->buf = (char *) s;
while (s < end && s[0] != '\n' && s[0] != '\r') s++, v->len++; // To newline
if (s >= end || (s[0] == '\r' && s[1] != '\n')) return NULL; // Stray \r
if (s < end && s[0] == '\r') s++; // Skip \r
if (s >= end || *s++ != '\n') return NULL; // Skip \n
return s;
}
static bool mg_http_parse_headers(const char *s, const char *end,
struct mg_http_header *h, size_t max_hdrs) {
size_t i, n;
for (i = 0; i < max_hdrs; i++) {
struct mg_str k = {NULL, 0}, v = {NULL, 0};
if (s >= end) return false;
if (s[0] == '\n' || (s[0] == '\r' && s[1] == '\n')) break;
k.buf = (char *) s;
while (s < end && s[0] != ':' && (n = clen(s, end)) > 0) s += n, k.len += n;
if (k.len == 0) return false; // Empty name
if (s >= end || clen(s, end) == 0) return false; // Invalid UTF-8
if (*s++ != ':') return false; // Invalid, not followed by :
// if (clen(s, end) == 0) return false; // Invalid UTF-8
while (s < end && (s[0] == ' ' || s[0] == '\t')) s++; // Skip spaces
if ((s = skiptorn(s, end, &v)) == NULL) return false;
while (v.len > 0 && (v.buf[v.len - 1] == ' ' || v.buf[v.len - 1] == '\t')) {
v.len--; // Trim spaces
}
// MG_INFO(("--HH [%.*s] [%.*s]", (int) k.len, k.buf, (int) v.len, v.buf));
h[i].name = k, h[i].value = v; // Success. Assign values
}
return true;
}
int mg_http_parse(const char *s, size_t len, struct mg_http_message *hm) {
int is_response, req_len = mg_http_get_request_len((unsigned char *) s, len);
const char *end = s == NULL ? NULL : s + req_len, *qs; // Cannot add to NULL
const struct mg_str *cl;
size_t n;
bool version_prefix_valid;
memset(hm, 0, sizeof(*hm));
if (req_len <= 0) return req_len;
hm->message.buf = hm->head.buf = (char *) s;
hm->body.buf = (char *) end;
hm->head.len = (size_t) req_len;
hm->message.len = hm->body.len = (size_t) -1; // Set body length to infinite
// Parse request line
hm->method.buf = (char *) s;
while (s < end && (n = clen(s, end)) > 0) s += n, hm->method.len += n;
while (s < end && s[0] == ' ') s++; // Skip spaces
hm->uri.buf = (char *) s;
while (s < end && (n = clen(s, end)) > 0) s += n, hm->uri.len += n;
while (s < end && s[0] == ' ') s++; // Skip spaces
is_response =
hm->method.len > 5 && (mg_ncasecmp(hm->method.buf, "HTTP/", 5) == 0);
if ((s = skiptorn(s, end, &hm->proto)) == NULL) return false;
// If we're given a version, check that it is HTTP/x.x
version_prefix_valid =
hm->proto.len > 5 && (mg_ncasecmp(hm->proto.buf, "HTTP/", 5) == 0);
if (!is_response && hm->proto.len > 0 &&
(!version_prefix_valid || hm->proto.len != 8 ||
(hm->proto.buf[5] < '0' || hm->proto.buf[5] > '9') ||
(hm->proto.buf[6] != '.') ||
(hm->proto.buf[7] < '0' || hm->proto.buf[7] > '9'))) {
return -1;
}
// If URI contains '?' character, setup query string
if ((qs = (const char *) memchr(hm->uri.buf, '?', hm->uri.len)) != NULL) {
hm->query.buf = (char *) qs + 1;
hm->query.len = (size_t) (&hm->uri.buf[hm->uri.len] - (qs + 1));
hm->uri.len = (size_t) (qs - hm->uri.buf);
}
// Sanity check. Allow protocol/reason to be empty
// Do this check after hm->method.len and hm->uri.len are finalised
if (hm->method.len == 0 || hm->uri.len == 0) return -1;
if (!mg_http_parse_headers(s, end, hm->headers,
sizeof(hm->headers) / sizeof(hm->headers[0])))
return -1; // error when parsing
if ((cl = mg_http_get_header(hm, "Content-Length")) != NULL) {
if (mg_to_size_t(*cl, &hm->body.len) == false) return -1;
hm->message.len = (size_t) req_len + hm->body.len;
}
// mg_http_parse() is used to parse both HTTP requests and HTTP
// responses. If HTTP response does not have Content-Length set, then
// body is read until socket is closed, i.e. body.len is infinite (~0).
//
// For HTTP requests though, if Content-Length is not specified
// set body length to 0.
if (hm->body.len == (size_t) ~0 && !is_response) {
hm->body.len = 0;
hm->message.len = (size_t) req_len;
}
// The 204 (No content) responses also have 0 body length
if (hm->body.len == (size_t) ~0 && is_response &&
mg_strcasecmp(hm->uri, mg_str("204")) == 0) {
hm->body.len = 0;
hm->message.len = (size_t) req_len;
}
if (hm->message.len < (size_t) req_len) return -1; // Overflow protection
return req_len;
}
static void mg_http_vprintf_chunk(struct mg_connection *c, const char *fmt,
va_list *ap) {
size_t len = c->send.len;
if (!mg_send(c, " \r\n", 10)) mg_error(c, "OOM");
mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, ap);
if (c->send.len >= len + 10) {
mg_snprintf((char *) c->send.buf + len, 9, "%08lx", c->send.len - len - 10);
c->send.buf[len + 8] = '\r';
if (c->send.len == len + 10) c->is_resp = 0; // Last chunk, reset marker
}
if (!mg_send(c, "\r\n", 2)) mg_error(c, "OOM");
}
void mg_http_printf_chunk(struct mg_connection *c, const char *fmt, ...) {
va_list ap;
va_start(ap, fmt);
mg_http_vprintf_chunk(c, fmt, &ap);
va_end(ap);
}
void mg_http_write_chunk(struct mg_connection *c, const char *buf, size_t len) {
mg_printf(c, "%lx\r\n", (unsigned long) len);
if (!mg_send(c, buf, len) || !mg_send(c, "\r\n", 2)) mg_error(c, "OOM");
if (len == 0) c->is_resp = 0;
}
// clang-format off
static const char *mg_http_status_code_str(int status_code) {
switch (status_code) {
case 100: return "Continue";
case 101: return "Switching Protocols";
case 102: return "Processing";
case 200: return "OK";
case 201: return "Created";
case 202: return "Accepted";
case 203: return "Non-authoritative Information";
case 204: return "No Content";
case 205: return "Reset Content";
case 206: return "Partial Content";
case 207: return "Multi-Status";
case 208: return "Already Reported";
case 226: return "IM Used";
case 300: return "Multiple Choices";
case 301: return "Moved Permanently";
case 302: return "Found";
case 303: return "See Other";
case 304: return "Not Modified";
case 305: return "Use Proxy";
case 307: return "Temporary Redirect";
case 308: return "Permanent Redirect";
case 400: return "Bad Request";
case 401: return "Unauthorized";
case 402: return "Payment Required";
case 403: return "Forbidden";
case 404: return "Not Found";
case 405: return "Method Not Allowed";
case 406: return "Not Acceptable";
case 407: return "Proxy Authentication Required";
case 408: return "Request Timeout";
case 409: return "Conflict";
case 410: return "Gone";
case 411: return "Length Required";
case 412: return "Precondition Failed";
case 413: return "Payload Too Large";
case 414: return "Request-URI Too Long";
case 415: return "Unsupported Media Type";
case 416: return "Requested Range Not Satisfiable";
case 417: return "Expectation Failed";
case 418: return "I'm a teapot";
case 421: return "Misdirected Request";
case 422: return "Unprocessable Entity";
case 423: return "Locked";
case 424: return "Failed Dependency";
case 426: return "Upgrade Required";
case 428: return "Precondition Required";
case 429: return "Too Many Requests";
case 431: return "Request Header Fields Too Large";
case 444: return "Connection Closed Without Response";
case 451: return "Unavailable For Legal Reasons";
case 499: return "Client Closed Request";
case 500: return "Internal Server Error";
case 501: return "Not Implemented";
case 502: return "Bad Gateway";
case 503: return "Service Unavailable";
case 504: return "Gateway Timeout";
case 505: return "HTTP Version Not Supported";
case 506: return "Variant Also Negotiates";
case 507: return "Insufficient Storage";
case 508: return "Loop Detected";
case 510: return "Not Extended";
case 511: return "Network Authentication Required";
case 599: return "Network Connect Timeout Error";
default: return "";
}
}
// clang-format on
void mg_http_reply(struct mg_connection *c, int code, const char *headers,
const char *fmt, ...) {
va_list ap;
size_t len;
mg_printf(c, "HTTP/1.1 %d %s\r\n%sContent-Length: \r\n\r\n", code,
mg_http_status_code_str(code), headers == NULL ? "" : headers);
len = c->send.len;
va_start(ap, fmt);
mg_vxprintf(mg_pfn_iobuf, &c->send, fmt, &ap);
va_end(ap);
if (c->send.len > 16) {
size_t n = mg_snprintf((char *) &c->send.buf[len - 15], 11, "%-10lu",
(unsigned long) (c->send.len - len));
c->send.buf[len - 15 + n] = ' '; // Change ending 0 to space
}
c->is_resp = 0;
}
static void http_cb(struct mg_connection *, int, void *);
static void restore_http_cb(struct mg_connection *c) {
mg_fs_close((struct mg_fd *) c->pfn_data);
c->pfn_data = NULL;
c->pfn = http_cb;
c->is_resp = 0;
}
char *mg_http_etag(char *buf, size_t len, size_t size, time_t mtime);
char *mg_http_etag(char *buf, size_t len, size_t size, time_t mtime) {
mg_snprintf(buf, len, "\"%lld.%lld\"", (int64_t) mtime, (int64_t) size);
return buf;
}
static void static_cb(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_WRITE || ev == MG_EV_POLL) {
struct mg_fd *fd = (struct mg_fd *) c->pfn_data;
// Read to send IO buffer directly, avoid extra on-stack buffer
size_t n, max = MG_IO_SIZE, space;
size_t *cl = (size_t *) &c->data[(sizeof(c->data) - sizeof(size_t)) /
sizeof(size_t) * sizeof(size_t)];
if (c->send.size < max) mg_iobuf_resize(&c->send, max);
if (c->send.len >= c->send.size) return; // Rate limit
if ((space = c->send.size - c->send.len) > *cl) space = *cl;
n = fd->fs->rd(fd->fd, c->send.buf + c->send.len, space);
c->send.len += n;
*cl -= n;
if (n == 0) restore_http_cb(c);
} else if (ev == MG_EV_CLOSE) {
restore_http_cb(c);
}
(void) ev_data;
}
// Known mime types. Keep it outside guess_content_type() function, since
// some environments don't like it defined there.
// clang-format off
#define MG_C_STR(a) { (char *) (a), sizeof(a) - 1 }
static struct mg_str s_known_types[] = {
MG_C_STR("html"), MG_C_STR("text/html; charset=utf-8"),
MG_C_STR("htm"), MG_C_STR("text/html; charset=utf-8"),
MG_C_STR("css"), MG_C_STR("text/css; charset=utf-8"),
MG_C_STR("js"), MG_C_STR("text/javascript; charset=utf-8"),
MG_C_STR("mjs"), MG_C_STR("text/javascript; charset=utf-8"),
MG_C_STR("gif"), MG_C_STR("image/gif"),
MG_C_STR("png"), MG_C_STR("image/png"),
MG_C_STR("jpg"), MG_C_STR("image/jpeg"),
MG_C_STR("jpeg"), MG_C_STR("image/jpeg"),
MG_C_STR("woff"), MG_C_STR("font/woff"),
MG_C_STR("ttf"), MG_C_STR("font/ttf"),
MG_C_STR("svg"), MG_C_STR("image/svg+xml"),
MG_C_STR("txt"), MG_C_STR("text/plain; charset=utf-8"),
MG_C_STR("avi"), MG_C_STR("video/x-msvideo"),
MG_C_STR("csv"), MG_C_STR("text/csv"),
MG_C_STR("doc"), MG_C_STR("application/msword"),
MG_C_STR("exe"), MG_C_STR("application/octet-stream"),
MG_C_STR("gz"), MG_C_STR("application/gzip"),
MG_C_STR("ico"), MG_C_STR("image/x-icon"),
MG_C_STR("json"), MG_C_STR("application/json"),
MG_C_STR("mov"), MG_C_STR("video/quicktime"),
MG_C_STR("mp3"), MG_C_STR("audio/mpeg"),
MG_C_STR("mp4"), MG_C_STR("video/mp4"),
MG_C_STR("mpeg"), MG_C_STR("video/mpeg"),
MG_C_STR("pdf"), MG_C_STR("application/pdf"),
MG_C_STR("shtml"), MG_C_STR("text/html; charset=utf-8"),
MG_C_STR("tgz"), MG_C_STR("application/tar-gz"),
MG_C_STR("wav"), MG_C_STR("audio/wav"),
MG_C_STR("webp"), MG_C_STR("image/webp"),
MG_C_STR("zip"), MG_C_STR("application/zip"),
MG_C_STR("3gp"), MG_C_STR("video/3gpp"),
{0, 0},
};
// clang-format on
static struct mg_str guess_content_type(struct mg_str path, const char *extra) {
struct mg_str entry, k, v, s = mg_str(extra), asterisk = mg_str_n("*", 1);
size_t i = 0;
// Shrink path to its extension only
while (i < path.len && path.buf[path.len - i - 1] != '.') i++;
path.buf += path.len - i;
path.len = i;
// Process user-provided mime type overrides, if any
while (mg_span(s, &entry, &s, ',')) {
if (mg_span(entry, &k, &v, '=') &&
(mg_strcmp(asterisk, k) == 0 || mg_strcmp(path, k) == 0))
return v;
}
// Process built-in mime types
for (i = 0; s_known_types[i].buf != NULL; i += 2) {
if (mg_strcmp(path, s_known_types[i]) == 0) return s_known_types[i + 1];
}
return mg_str("text/plain; charset=utf-8");
}
static int getrange(struct mg_str *s, size_t *a, size_t *b) {
size_t i, numparsed = 0;
for (i = 0; i + 6 < s->len; i++) {
struct mg_str k, v = mg_str_n(s->buf + i + 6, s->len - i - 6);
if (memcmp(&s->buf[i], "bytes=", 6) != 0) continue;
if (mg_span(v, &k, &v, '-')) {
if (mg_to_size_t(k, a)) numparsed++;
if (v.len > 0 && mg_to_size_t(v, b)) numparsed++;
} else {
if (mg_to_size_t(v, a)) numparsed++;
}
break;
}
return (int) numparsed;
}
void mg_http_serve_file(struct mg_connection *c, struct mg_http_message *hm,
const char *path,
const struct mg_http_serve_opts *opts) {
char etag[64], tmp[MG_PATH_MAX];
struct mg_fs *fs = opts->fs == NULL ? &mg_fs_posix : opts->fs;
struct mg_fd *fd = NULL;
size_t size = 0;
time_t mtime = 0;
struct mg_str *inm = NULL;
struct mg_str mime = guess_content_type(mg_str(path), opts->mime_types);
bool gzip = false;
if (path != NULL) {
// If a browser sends us "Accept-Encoding: gzip", try to open .gz first
struct mg_str *ae = mg_http_get_header(hm, "Accept-Encoding");
if (ae != NULL) {
if (mg_match(*ae, mg_str("*gzip*"), NULL)) {
mg_snprintf(tmp, sizeof(tmp), "%s.gz", path);
fd = mg_fs_open(fs, tmp, MG_FS_READ);
if (fd != NULL) gzip = true, path = tmp;
}
}
// No luck opening .gz? Open what we've told to open
if (fd == NULL) fd = mg_fs_open(fs, path, MG_FS_READ);
}
// Failed to open, and page404 is configured? Open it, then
if (fd == NULL && opts->page404 != NULL) {
fd = mg_fs_open(fs, opts->page404, MG_FS_READ);
path = opts->page404;
mime = guess_content_type(mg_str(path), opts->mime_types);
}
if (fd == NULL || fs->st(path, &size, &mtime) == 0) {
mg_http_reply(c, 404, opts->extra_headers, "Not found\n");
mg_fs_close(fd);
// NOTE: mg_http_etag() call should go first!
} else if (mg_http_etag(etag, sizeof(etag), size, mtime) != NULL &&
(inm = mg_http_get_header(hm, "If-None-Match")) != NULL &&
mg_strcasecmp(*inm, mg_str(etag)) == 0) {
mg_fs_close(fd);
mg_http_reply(c, 304, opts->extra_headers, "");
} else {
int n, status = 200;
char range[100];
size_t r1 = 0, r2 = 0, cl = size;
// Handle Range header
struct mg_str *rh = mg_http_get_header(hm, "Range");
range[0] = '\0';
if (rh != NULL && (n = getrange(rh, &r1, &r2)) > 0) {
// If range is specified like "400-", set second limit to content len
if (n == 1) r2 = cl - 1;
if (r1 > r2 || r2 >= cl) {
status = 416;
cl = 0;
mg_snprintf(range, sizeof(range), "Content-Range: bytes */%lld\r\n",
(int64_t) size);
} else {
status = 206;
cl = r2 - r1 + 1;
mg_snprintf(range, sizeof(range),
"Content-Range: bytes %llu-%llu/%llu\r\n", (uint64_t) r1,
(uint64_t) (r1 + cl - 1), (uint64_t) size);
fs->sk(fd->fd, r1);
}
}
mg_printf(c,
"HTTP/1.1 %d %s\r\n"
"Content-Type: %.*s\r\n"
"Etag: %s\r\n"
"Content-Length: %llu\r\n"
"%s%s%s\r\n",
status, mg_http_status_code_str(status), (int) mime.len, mime.buf,
etag, (uint64_t) cl, gzip ? "Content-Encoding: gzip\r\n" : "",
range, opts->extra_headers ? opts->extra_headers : "");
if (mg_strcasecmp(hm->method, mg_str("HEAD")) == 0 || c->is_closing) {
c->is_resp = 0;
mg_fs_close(fd);
} else { // start serving static content only if not closing, see #3354
// Track to-be-sent content length at the end of c->data, aligned
size_t *clp = (size_t *) &c->data[(sizeof(c->data) - sizeof(size_t)) /
sizeof(size_t) * sizeof(size_t)];
c->pfn = static_cb;
c->pfn_data = fd;
*clp = cl;
}
}
}
struct printdirentrydata {
struct mg_connection *c;
struct mg_http_message *hm;
const struct mg_http_serve_opts *opts;
const char *dir;
};
#if MG_ENABLE_DIRLIST
static void printdirentry(const char *name, void *userdata) {
struct printdirentrydata *d = (struct printdirentrydata *) userdata;
struct mg_fs *fs = d->opts->fs == NULL ? &mg_fs_posix : d->opts->fs;
size_t size = 0;
time_t t = 0;
char path[MG_PATH_MAX], sz[40], mod[40];
int flags, n = 0;
// MG_DEBUG(("[%s] [%s]", d->dir, name));
if (mg_snprintf(path, sizeof(path), "%s%c%s", d->dir, '/', name) >
sizeof(path)) {
MG_ERROR(("%s truncated", name));
} else if ((flags = fs->st(path, &size, &t)) == 0) {
MG_ERROR(("%lu stat(%s)", d->c->id, path));
} else {
const char *slash = flags & MG_FS_DIR ? "/" : "";
if (flags & MG_FS_DIR) {
mg_snprintf(sz, sizeof(sz), "%s", "[DIR]");
} else {
mg_snprintf(sz, sizeof(sz), "%lld", (uint64_t) size);
}
#if defined(MG_HTTP_DIRLIST_TIME_FMT)
{
char time_str[40];
struct tm *time_info = localtime(&t);
strftime(time_str, sizeof time_str, "%Y/%m/%d %H:%M:%S", time_info);
mg_snprintf(mod, sizeof(mod), "%s", time_str);
}
#else
mg_snprintf(mod, sizeof(mod), "%lu", (unsigned long) t);
#endif
n = (int) mg_url_encode(name, strlen(name), path, sizeof(path));
mg_printf(d->c,
" <tr><td><a href=\"%.*s%s\">%s%s</a></td>"
"<td name=%lu>%s</td><td name=%lld>%s</td></tr>\n",
n, path, slash, name, slash, (unsigned long) t, mod,
flags & MG_FS_DIR ? (int64_t) -1 : (int64_t) size, sz);
}
}
static void listdir(struct mg_connection *c, struct mg_http_message *hm,
const struct mg_http_serve_opts *opts, char *dir) {
const char *sort_js_code =
"<script>function srt(tb, sc, so, d) {"
"var tr = Array.prototype.slice.call(tb.rows, 0),"
"tr = tr.sort(function (a, b) { var c1 = a.cells[sc], c2 = b.cells[sc],"
"n1 = c1.getAttribute('name'), n2 = c2.getAttribute('name'), "
"t1 = a.cells[2].getAttribute('name'), "
"t2 = b.cells[2].getAttribute('name'); "
"return so * (t1 < 0 && t2 >= 0 ? -1 : t2 < 0 && t1 >= 0 ? 1 : "
"n1 ? parseInt(n2) - parseInt(n1) : "
"c1.textContent.trim().localeCompare(c2.textContent.trim())); });";
const char *sort_js_code2 =
"for (var i = 0; i < tr.length; i++) tb.appendChild(tr[i]); "
"if (!d) window.location.hash = ('sc=' + sc + '&so=' + so); "
"};"
"window.onload = function() {"
"var tb = document.getElementById('tb');"
"var m = /sc=([012]).so=(1|-1)/.exec(window.location.hash) || [0, 2, 1];"
"var sc = m[1], so = m[2]; document.onclick = function(ev) { "
"var c = ev.target.rel; if (c) {if (c == sc) so *= -1; srt(tb, c, so); "
"sc = c; ev.preventDefault();}};"
"srt(tb, sc, so, true);"
"}"
"</script>";
struct mg_fs *fs = opts->fs == NULL ? &mg_fs_posix : opts->fs;
struct printdirentrydata d = {c, hm, opts, dir};
char tmp[10], buf[MG_PATH_MAX];
size_t off, n;
int len = mg_url_decode(hm->uri.buf, hm->uri.len, buf, sizeof(buf), 0);
struct mg_str uri = len > 0 ? mg_str_n(buf, (size_t) len) : hm->uri;
mg_printf(c,
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/html; charset=utf-8\r\n"
"%s"
"Content-Length: \r\n\r\n",
opts->extra_headers == NULL ? "" : opts->extra_headers);
off = c->send.len; // Start of body
mg_printf(c,
"<!DOCTYPE html><html><head><title>Index of %.*s</title>%s%s"
"<style>th,td {text-align: left; padding-right: 1em; "
"font-family: monospace; }</style></head>"
"<body><h1>Index of %.*s</h1><table cellpadding=\"0\"><thead>"
"<tr><th><a href=\"#\" rel=\"0\">Name</a></th><th>"
"<a href=\"#\" rel=\"1\">Modified</a></th>"
"<th><a href=\"#\" rel=\"2\">Size</a></th></tr>"
"<tr><td colspan=\"3\"><hr></td></tr>"
"</thead>"
"<tbody id=\"tb\">\n",
(int) uri.len, uri.buf, sort_js_code, sort_js_code2, (int) uri.len,
uri.buf);
mg_printf(c, "%s",
" <tr><td><a href=\"..\">..</a></td>"
"<td name=-1></td><td name=-1>[DIR]</td></tr>\n");
fs->ls(dir, printdirentry, &d);
mg_printf(c,
"</tbody><tfoot><tr><td colspan=\"3\"><hr></td></tr></tfoot>"
"</table><address>Mongoose v.%s</address></body></html>\n",
MG_VERSION);
n = mg_snprintf(tmp, sizeof(tmp), "%lu", (unsigned long) (c->send.len - off));
if (n > sizeof(tmp)) n = 0;
memcpy(c->send.buf + off - 12, tmp, n); // Set content length
c->is_resp = 0; // Mark response end
}
#endif
// Resolve requested file into `path` and return its fs->st() result
static int uri_to_path2(struct mg_connection *c, struct mg_http_message *hm,
struct mg_fs *fs, struct mg_str url, struct mg_str dir,
char *path, size_t path_size) {
int flags, tmp;
// Append URI to the root_dir, and sanitize it
size_t n = mg_snprintf(path, path_size, "%.*s", (int) dir.len, dir.buf);
if (n + 2 >= path_size) {
mg_http_reply(c, 400, "", "Exceeded path size");
return -1;
}
path[path_size - 1] = '\0';
// Terminate root dir with slash
if (n > 0 && path[n - 1] != '/') path[n++] = '/', path[n] = '\0';
if (url.len < hm->uri.len) {
mg_url_decode(hm->uri.buf + url.len, hm->uri.len - url.len, path + n,
path_size - n, 0);
}
path[path_size - 1] = '\0'; // Double-check
if (!mg_path_is_sane(mg_str_n(path, path_size))) {
mg_http_reply(c, 400, "", "Invalid path");
return -1;
}
n = strlen(path);
while (n > 1 && path[n - 1] == '/') path[--n] = 0; // Trim trailing slashes
flags = mg_strcmp(hm->uri, mg_str("/")) == 0 ? MG_FS_DIR
: fs->st(path, NULL, NULL);
MG_VERBOSE(("%lu %.*s -> %s %d", c->id, (int) hm->uri.len, hm->uri.buf, path,
flags));
if (flags == 0) {
// Do nothing - let's caller decide
} else if ((flags & MG_FS_DIR) && hm->uri.len > 0 &&
hm->uri.buf[hm->uri.len - 1] != '/') {
mg_printf(c,
"HTTP/1.1 301 Moved\r\n"
"Location: %.*s/\r\n"
"Content-Length: 0\r\n"
"\r\n",
(int) hm->uri.len, hm->uri.buf);
c->is_resp = 0;
flags = -1;
} else if (flags & MG_FS_DIR) {
if (((mg_snprintf(path + n, path_size - n, "/" MG_HTTP_INDEX) > 0 &&
(tmp = fs->st(path, NULL, NULL)) != 0) ||
(mg_snprintf(path + n, path_size - n, "/index.shtml") > 0 &&
(tmp = fs->st(path, NULL, NULL)) != 0))) {
flags = tmp;
} else if ((mg_snprintf(path + n, path_size - n, "/" MG_HTTP_INDEX ".gz") >
0 &&
(tmp = fs->st(path, NULL, NULL)) !=
0)) { // check for gzipped index
flags = tmp;
path[n + 1 + strlen(MG_HTTP_INDEX)] =
'\0'; // Remove appended .gz in index file name
} else {
path[n] = '\0'; // Remove appended index file name
}
}
return flags;
}
static int uri_to_path(struct mg_connection *c, struct mg_http_message *hm,
const struct mg_http_serve_opts *opts, char *path,
size_t path_size) {
struct mg_fs *fs = opts->fs == NULL ? &mg_fs_posix : opts->fs;
struct mg_str k, v, part, s = mg_str(opts->root_dir), u = {NULL, 0}, p = u;
while (mg_span(s, &part, &s, ',')) {
if (!mg_span(part, &k, &v, '=')) k = part, v = mg_str_n(NULL, 0);
if (v.len == 0) v = k, k = mg_str("/"), u = k, p = v;
if (hm->uri.len < k.len) continue;
if (mg_strcmp(k, mg_str_n(hm->uri.buf, k.len)) != 0) continue;
u = k, p = v;
}
return uri_to_path2(c, hm, fs, u, p, path, path_size);
}
void mg_http_serve_dir(struct mg_connection *c, struct mg_http_message *hm,
const struct mg_http_serve_opts *opts) {
char path[MG_PATH_MAX];
const char *sp = opts->ssi_pattern;
int flags = uri_to_path(c, hm, opts, path, sizeof(path));
if (flags < 0) {
// Do nothing: the response has already been sent by uri_to_path()
} else if (flags & MG_FS_DIR) {
#if MG_ENABLE_DIRLIST
listdir(c, hm, opts, path);
#else
mg_http_reply(c, 403, "", "Forbidden\n");
#endif
} else if (flags && sp != NULL && mg_match(mg_str(path), mg_str(sp), NULL)) {
mg_http_serve_ssi(c, opts->root_dir, path);
} else {
mg_http_serve_file(c, hm, path, opts);
}
}
static bool mg_is_url_safe(int c) {
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') || c == '.' || c == '_' || c == '-' || c == '~';
}
size_t mg_url_encode(const char *s, size_t sl, char *buf, size_t len) {
size_t i, n = 0;
for (i = 0; i < sl; i++) {
int c = *(unsigned char *) &s[i];
if (n + 4 >= len) return 0;
if (mg_is_url_safe(c)) {
buf[n++] = s[i];
} else {
mg_snprintf(&buf[n], 4, "%%%M", mg_print_hex, 1, &s[i]);
n += 3;
}
}
if (len > 0 && n < len - 1) buf[n] = '\0'; // Null-terminate the destination
if (len > 0) buf[len - 1] = '\0'; // Always.
return n;
}
void mg_http_creds(struct mg_http_message *hm, char *user, size_t userlen,
char *pass, size_t passlen) {
struct mg_str *v = mg_http_get_header(hm, "Authorization");
user[0] = pass[0] = '\0';
if (v != NULL && v->len > 6 && memcmp(v->buf, "Basic ", 6) == 0) {
char buf[256];
size_t n = mg_base64_decode(v->buf + 6, v->len - 6, buf, sizeof(buf));
const char *p = (const char *) memchr(buf, ':', n > 0 ? n : 0);
if (p != NULL) {
mg_snprintf(user, userlen, "%.*s", p - buf, buf);
mg_snprintf(pass, passlen, "%.*s", n - (size_t) (p - buf) - 1, p + 1);
}
} else if (v != NULL && v->len > 7 && memcmp(v->buf, "Bearer ", 7) == 0) {
mg_snprintf(pass, passlen, "%.*s", (int) v->len - 7, v->buf + 7);
} else if ((v = mg_http_get_header(hm, "Cookie")) != NULL) {
struct mg_str t = mg_http_get_header_var(*v, mg_str_n("access_token", 12));
if (t.len > 0) mg_snprintf(pass, passlen, "%.*s", (int) t.len, t.buf);
} else {
mg_http_get_var(&hm->query, "access_token", pass, passlen);
}
}
static struct mg_str stripquotes(struct mg_str s) {
return s.len > 1 && s.buf[0] == '"' && s.buf[s.len - 1] == '"'
? mg_str_n(s.buf + 1, s.len - 2)
: s;
}
struct mg_str mg_http_get_header_var(struct mg_str s, struct mg_str v) {
size_t i;
for (i = 0; v.len > 0 && i + v.len + 2 < s.len; i++) {
if (s.buf[i + v.len] == '=' && memcmp(&s.buf[i], v.buf, v.len) == 0) {
const char *p = &s.buf[i + v.len + 1], *b = p, *x = &s.buf[s.len];
int q = p < x && *p == '"' ? 1 : 0;
while (p < x &&
(q ? p == b || *p != '"' : *p != ';' && *p != ' ' && *p != ','))
p++;
// MG_INFO(("[%.*s] [%.*s] [%.*s]", (int) s.len, s.buf, (int) v.len,
// v.buf, (int) (p - b), b));
return stripquotes(mg_str_n(b, (size_t) (p - b + q)));
}
}
return mg_str_n(NULL, 0);
}
long mg_http_upload(struct mg_connection *c, struct mg_http_message *hm,
struct mg_fs *fs, const char *dir, size_t max_size) {
char buf[20] = "0", file[MG_PATH_MAX], path[MG_PATH_MAX];
long res = 0, offset;
mg_http_get_var(&hm->query, "offset", buf, sizeof(buf));
mg_http_get_var(&hm->query, "file", file, sizeof(file));
offset = strtol(buf, NULL, 0);
mg_snprintf(path, sizeof(path), "%s%c%s", dir, MG_DIRSEP, file);
if (hm->body.len == 0) {
mg_http_reply(c, 200, "", "%ld", res); // Nothing to write
} else if (file[0] == '\0') {
mg_http_reply(c, 400, "", "file required");
res = -1;
} else if (mg_path_is_sane(mg_str(file)) == false) {
mg_http_reply(c, 400, "", "%s: invalid file", file);
res = -2;
} else if (offset < 0) {
mg_http_reply(c, 400, "", "offset required");
res = -3;
} else if ((size_t) offset + hm->body.len > max_size) {
mg_http_reply(c, 400, "", "%s: over max size of %lu", path,
(unsigned long) max_size);
res = -4;
} else {
struct mg_fd *fd;
size_t current_size = 0;
MG_DEBUG(("%s -> %lu bytes @ %ld", path, hm->body.len, offset));
if (offset == 0) fs->rm(path); // If offset if 0, truncate file
fs->st(path, ¤t_size, NULL);
if (offset > 0 && current_size != (size_t) offset) {
mg_http_reply(c, 400, "", "%s: offset mismatch", path);
res = -5;
} else if ((fd = mg_fs_open(fs, path, MG_FS_WRITE)) == NULL) {
mg_http_reply(c, 400, "", "open(%s)", path);
res = -6;
} else {
res = offset + (long) fs->wr(fd->fd, hm->body.buf, hm->body.len);
mg_fs_close(fd);
mg_http_reply(c, 200, "", "%ld", res);
}
}
return res;
}
int mg_http_status(const struct mg_http_message *hm) {
return atoi(hm->uri.buf);
}
static bool is_hex_digit(int c) {
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') ||
(c >= 'A' && c <= 'F');
}
static int skip_chunk(const char *buf, int len, int *pl, int *dl) {
int i = 0, n = 0;
if (len < 3) return 0;
while (i < len && is_hex_digit(buf[i])) i++;
if (i == 0) return -1; // Error, no length specified
if (i > (int) sizeof(int) * 2) return -1; // Chunk length is too big
if (len < i + 1 || buf[i] != '\r' || buf[i + 1] != '\n') return -1; // Error
if (mg_str_to_num(mg_str_n(buf, (size_t) i), 16, &n, sizeof(int)) == false)
return -1; // Decode chunk length, overflow
if (n < 0) return -1; // Error. TODO(): some checks now redundant
if (n > len - i - 4) return 0; // Chunk not yet fully buffered
if (buf[i + n + 2] != '\r' || buf[i + n + 3] != '\n') return -1; // Error
*pl = i + 2, *dl = n;
return i + 2 + n + 2;
}
static void http_cb(struct mg_connection *c, int ev, void *ev_data) {
if (ev == MG_EV_READ || ev == MG_EV_CLOSE ||
(ev == MG_EV_POLL && c->is_accepted && !c->is_draining &&
c->recv.len > 0)) { // see #2796
struct mg_http_message hm;
size_t ofs = 0; // Parsing offset
while (c->is_resp == 0 && ofs < c->recv.len) {
const char *buf = (char *) c->recv.buf + ofs;
int n = mg_http_parse(buf, c->recv.len - ofs, &hm);
struct mg_str *te; // Transfer - encoding header
bool is_chunked = false;
size_t old_len = c->recv.len;
if (n < 0) {
// We don't use mg_error() here, to avoid closing pipelined requests
// prematurely, see #2592
MG_ERROR(("HTTP parse, %lu bytes", c->recv.len));
c->is_draining = 1;
mg_hexdump(buf, c->recv.len - ofs > 16 ? 16 : c->recv.len - ofs);
c->recv.len = 0;
return;
}
if (n == 0) break; // Request is not buffered yet
mg_call(c, MG_EV_HTTP_HDRS, &hm); // Got all HTTP headers
if (c->recv.len != old_len) {
// User manipulated received data. Wash our hands
MG_DEBUG(("%lu detaching HTTP handler", c->id));
c->pfn = NULL;
return;
}
if (ev == MG_EV_CLOSE) { // If client did not set Content-Length
hm.message.len = c->recv.len - ofs; // and closes now, deliver MSG
hm.body.len = hm.message.len - (size_t) (hm.body.buf - hm.message.buf);
}
if ((te = mg_http_get_header(&hm, "Transfer-Encoding")) != NULL) {
if (mg_strcasecmp(*te, mg_str("chunked")) == 0) {
is_chunked = true;
} else {
mg_error(c, "Invalid Transfer-Encoding"); // See #2460
return;
}
} else if (mg_http_get_header(&hm, "Content-length") == NULL) {
// #2593: HTTP packets must contain either Transfer-Encoding or
// Content-length
bool is_response = mg_ncasecmp(hm.method.buf, "HTTP/", 5) == 0;
bool require_content_len = false;
if (!is_response && (mg_strcasecmp(hm.method, mg_str("POST")) == 0 ||
mg_strcasecmp(hm.method, mg_str("PUT")) == 0)) {
// POST and PUT should include an entity body. Therefore, they should
// contain a Content-length header (unless the body length is 0, in
// which case it can be omitted). Other requests can also contain a
// body, but their content has no defined semantics (RFC 7231)
if (hm.body.len != 0) require_content_len = true;
ofs += (size_t) n; // this request has been processed
} else if (is_response) {
// HTTP spec 7.2 Entity body: All other responses must include a body
// or Content-Length header field defined with a value of 0.
int status = mg_http_status(&hm);
require_content_len = status >= 200 && status != 204 && status != 304;
}
if (require_content_len) {
if (!c->is_client) mg_http_reply(c, 411, "", "");
MG_ERROR(("Content length missing from %s",
is_response ? "response" : "request"));
}
}
if (is_chunked) {
// For chunked data, strip off prefixes and suffixes from chunks
// and relocate them right after the headers, then report a message
char *s = (char *) c->recv.buf + ofs + n;
int o = 0, pl, dl, cl, len = (int) (c->recv.len - ofs - (size_t) n);
// Find zero-length chunk (the end of the body)
while ((cl = skip_chunk(s + o, len - o, &pl, &dl)) > 0 && dl) o += cl;
if (cl == 0) break; // No zero-len chunk, buffer more data
if (cl < 0) {
mg_error(c, "Invalid chunk");
break;
}
// Zero chunk found. Second pass: strip + relocate
o = 0, hm.body.len = 0, hm.message.len = (size_t) n;
while ((cl = skip_chunk(s + o, len - o, &pl, &dl)) > 0) {
memmove(s + hm.body.len, s + o + pl, (size_t) dl);
o += cl, hm.body.len += (size_t) dl, hm.message.len += (size_t) dl;
if (dl == 0) break;
}
ofs += (size_t) (n + o);
} else { // Normal, non-chunked data
size_t len = c->recv.len - ofs - (size_t) n;
if (hm.body.len > len) break; // Buffer more data
ofs += (size_t) n + hm.body.len;
}
if (c->is_accepted) c->is_resp = 1; // Start generating response
mg_call(c, MG_EV_HTTP_MSG, &hm); // User handler can clear is_resp
if (c->is_accepted && !c->is_resp) {
struct mg_str *cc = mg_http_get_header(&hm, "Connection");
if (cc != NULL && mg_strcasecmp(*cc, mg_str("close")) == 0) {
c->is_draining = 1; // honor "Connection: close"
break;
}
}
}
if (ofs > 0) mg_iobuf_del(&c->recv, 0, ofs); // Delete processed data
}
(void) ev_data;
}
struct mg_connection *mg_http_connect(struct mg_mgr *mgr, const char *url,
mg_event_handler_t fn, void *fn_data) {
return mg_connect_svc(mgr, url, fn, fn_data, http_cb, NULL);
}
struct mg_connection *mg_http_listen(struct mg_mgr *mgr, const char *url,
mg_event_handler_t fn, void *fn_data) {
struct mg_connection *c = mg_listen(mgr, url, fn, fn_data);
if (c != NULL) c->pfn = http_cb;
return c;
}
#ifdef MG_ENABLE_LINES
#line 1 "src/iobuf.c"
#endif
static size_t roundup(size_t size, size_t align) {
return align == 0 ? size : (size + align - 1) / align * align;
}
bool mg_iobuf_resize(struct mg_iobuf *io, size_t new_size) {
bool ok = true;
new_size = roundup(new_size, io->align);
if (new_size == 0) {
mg_bzero(io->buf, io->size);
mg_free(io->buf);
io->buf = NULL;
io->len = io->size = 0;
} else if (new_size != io->size) {
// NOTE(lsm): do not use realloc here. Use mg_calloc/mg_free only
void *p = mg_calloc(1, new_size);
if (p != NULL) {
size_t len = new_size < io->len ? new_size : io->len;
if (len > 0 && io->buf != NULL) memmove(p, io->buf, len);
mg_bzero(io->buf, io->size);
mg_free(io->buf);
io->buf = (unsigned char *) p;
io->size = new_size;
io->len = len;
} else {
ok = false;
MG_ERROR(("%lld->%lld", (ui
gitextract_74yoxmoz/
├── .clang-format
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── config.yml
│ │ └── issue.md
│ └── workflows/
│ ├── cifuzz.yml
│ ├── codeql.yml
│ ├── fuzz.yml
│ ├── nightly.yml
│ ├── nightly_tests.yml
│ ├── on_demand.yml
│ ├── quicktest.yml
│ ├── test.yml
│ └── zephyr.yml
├── LICENSE
├── README.md
├── mongoose.c
├── mongoose.h
├── src/
│ ├── arch.h
│ ├── arch_armcgt.h
│ ├── arch_armgcc.h
│ ├── arch_cube.h
│ ├── arch_esp32.h
│ ├── arch_esp8266.h
│ ├── arch_freertos.h
│ ├── arch_picosdk.h
│ ├── arch_rtthread.h
│ ├── arch_rtx.h
│ ├── arch_threadx.h
│ ├── arch_tirtos.h
│ ├── arch_unix.h
│ ├── arch_win32.h
│ ├── arch_zephyr.h
│ ├── base64.c
│ ├── base64.h
│ ├── config.h
│ ├── dns.c
│ ├── dns.h
│ ├── drivers/
│ │ ├── cmsis.c
│ │ ├── cmsis.h
│ │ ├── cyw.c
│ │ ├── cyw.h
│ │ ├── imxrt.c
│ │ ├── imxrt.h
│ │ ├── nxp_wifi.c
│ │ ├── nxp_wifi.h
│ │ ├── phy.c
│ │ ├── phy.h
│ │ ├── pico-w.c
│ │ ├── pico-w.h
│ │ ├── ppp.c
│ │ ├── ppp.h
│ │ ├── ra.c
│ │ ├── ra.h
│ │ ├── rw612.c
│ │ ├── rw612.h
│ │ ├── same54.c
│ │ ├── same54.h
│ │ ├── sdio.c
│ │ ├── sdio.h
│ │ ├── st67w6.c
│ │ ├── st67w6.h
│ │ ├── stm32f.c
│ │ ├── stm32f.h
│ │ ├── stm32h.c
│ │ ├── stm32h.h
│ │ ├── tm4c.c
│ │ ├── tm4c.h
│ │ ├── tms570.c
│ │ ├── tms570.h
│ │ ├── w5100.c
│ │ ├── w5500.c
│ │ ├── xmc.c
│ │ ├── xmc.h
│ │ ├── xmc7.c
│ │ └── xmc7.h
│ ├── event.c
│ ├── event.h
│ ├── flash.c
│ ├── flash.h
│ ├── fmt.c
│ ├── fmt.h
│ ├── fs.c
│ ├── fs.h
│ ├── fs_fat.c
│ ├── fs_packed.c
│ ├── fs_posix.c
│ ├── http.c
│ ├── http.h
│ ├── iobuf.c
│ ├── iobuf.h
│ ├── json.c
│ ├── json.h
│ ├── l2.c
│ ├── l2.h
│ ├── l2_eth.c
│ ├── l2_ppp.c
│ ├── license.h
│ ├── log.c
│ ├── log.h
│ ├── md5.c
│ ├── md5.h
│ ├── mqtt.c
│ ├── mqtt.h
│ ├── net.c
│ ├── net.h
│ ├── net_builtin.c
│ ├── net_builtin.h
│ ├── net_ft.h
│ ├── net_lwip.h
│ ├── net_rl.h
│ ├── ota.h
│ ├── ota_ch32v307.c
│ ├── ota_dummy.c
│ ├── ota_esp32.c
│ ├── ota_imxrt.c
│ ├── ota_mcxn.c
│ ├── ota_picosdk.c
│ ├── ota_rw612.c
│ ├── ota_stm32f.c
│ ├── ota_stm32h5.c
│ ├── ota_stm32h7.c
│ ├── printf.c
│ ├── printf.h
│ ├── profile.h
│ ├── queue.c
│ ├── queue.h
│ ├── rpc.c
│ ├── rpc.h
│ ├── sha1.c
│ ├── sha1.h
│ ├── sha256.c
│ ├── sha256.h
│ ├── sntp.c
│ ├── sntp.h
│ ├── sock.c
│ ├── ssi.c
│ ├── ssi.h
│ ├── str.c
│ ├── str.h
│ ├── timer.c
│ ├── timer.h
│ ├── tls.h
│ ├── tls_aes128.c
│ ├── tls_aes128.h
│ ├── tls_builtin.c
│ ├── tls_chacha20.c
│ ├── tls_chacha20.h
│ ├── tls_dummy.c
│ ├── tls_mbed.c
│ ├── tls_mbed.h
│ ├── tls_openssl.c
│ ├── tls_openssl.h
│ ├── tls_rsa.c
│ ├── tls_rsa.h
│ ├── tls_uecc.c
│ ├── tls_uecc.h
│ ├── tls_x25519.c
│ ├── tls_x25519.h
│ ├── url.c
│ ├── url.h
│ ├── util.c
│ ├── util.h
│ ├── version.h
│ ├── wifi.h
│ ├── wifi_dummy.c
│ ├── ws.c
│ └── ws.h
├── test/
│ ├── Makefile
│ ├── arduino/
│ │ └── Makefile
│ ├── certs/
│ │ ├── ca.crt
│ │ ├── ca.key
│ │ ├── ca.srl
│ │ ├── client.crt
│ │ ├── client.csr
│ │ ├── client.key
│ │ ├── generate.sh
│ │ ├── server.crt
│ │ ├── server.csr
│ │ └── server.key
│ ├── cgt+make/
│ │ └── Makefile
│ ├── configs/
│ │ └── mongoose_config_full.h
│ ├── cube/
│ │ └── Makefile
│ ├── data/
│ │ ├── ..ddot/
│ │ │ └── index.html
│ │ ├── 404.html
│ │ ├── a.txt
│ │ ├── ca.pem
│ │ ├── dredir/
│ │ │ └── index.html
│ │ ├── e8.crt
│ │ ├── empty.js
│ │ ├── gzip.txt
│ │ ├── index.html
│ │ ├── range.txt
│ │ ├── secret/
│ │ │ └── secret.txt
│ │ ├── ss_ca.pem
│ │ ├── ss_client.pem
│ │ ├── ss_server.pem
│ │ ├── ssi/
│ │ │ ├── f1.txt
│ │ │ ├── index.shtml
│ │ │ ├── nested.shtml
│ │ │ └── recurse.shtml
│ │ ├── ws.hex
│ │ └── київ.txt
│ ├── dhcpd.conf
│ ├── driver_mock.c
│ ├── esp-idf/
│ │ └── Makefile
│ ├── fuzz.c
│ ├── fuzz_tls.c
│ ├── ga_docker_daemon.json
│ ├── gcc+make/
│ │ └── Makefile
│ ├── health.awk
│ ├── health.sh
│ ├── keil/
│ │ ├── Clean
│ │ ├── Makefile
│ │ ├── uniclean.bat
│ │ └── unitest.bat
│ ├── match_changed_files.sh
│ ├── mip_curl.sh
│ ├── mip_port_test.c
│ ├── mip_tap_test.c
│ ├── mip_test.c
│ ├── mip_x_test.c
│ ├── mongoose_custom.c
│ ├── mosquitto.conf
│ ├── mosquitto.conf.macos
│ ├── pack.c
│ ├── pack.js
│ ├── pico-sdk/
│ │ └── Makefile
│ ├── port_tap_bridge.c
│ ├── setup_ga_docker_filesystem.sh
│ ├── setup_ga_network.sh
│ ├── setup_mqtt_server.sh
│ ├── tls_multirec/
│ │ ├── Makefile
│ │ ├── main.c
│ │ ├── mongoose.h
│ │ ├── patched_mongoose.c
│ │ └── tls_multirec.diff
│ ├── unit_test.c
│ ├── wizard/
│ │ ├── Makefile
│ │ └── test.sh
│ ├── xpresso/
│ │ └── Makefile
│ └── zephyr/
│ └── Makefile
└── tutorials/
├── README.md
├── core/
│ ├── README.md
│ ├── embedded-filesystem/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── packed_fs.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── memory/
│ │ └── o1heap/
│ │ ├── Makefile
│ │ └── main.c
│ ├── multi-threaded/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── multi-threaded-12m/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── timers/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── web_root/
│ └── index.html
├── http/
│ ├── README.md
│ ├── device-dashboard/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── certs/
│ │ │ ├── server_cert.pem
│ │ │ └── server_key.pem
│ │ ├── esp32/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── main/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── main.c
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── wifi.c
│ │ │ ├── partitions.csv
│ │ │ └── sdkconfig.defaults
│ │ ├── main.c
│ │ ├── mbedtls_config.h
│ │ ├── microchip/
│ │ │ └── same54-xpro/
│ │ │ ├── Makefile
│ │ │ ├── hal.h
│ │ │ ├── link.ld
│ │ │ ├── main.c
│ │ │ ├── startup.c
│ │ │ └── syscalls.c
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── pack.js
│ │ ├── packed_fs.c
│ │ ├── tailwind.config.js
│ │ └── web_root/
│ │ ├── bundle.js
│ │ ├── components.js
│ │ ├── index.html
│ │ └── main.js
│ ├── file-transfer/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── client.c
│ │ ├── server.c
│ │ ├── upload/
│ │ │ └── README.md
│ │ └── web_root/
│ │ └── index.html
│ ├── file-upload-html-form/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── file-upload-multiple-posts/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── app.js
│ │ └── index.html
│ ├── file-upload-single-post/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── http-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── esp8266/
│ │ │ └── http-client-server/
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ └── src/
│ │ │ ├── Makefile
│ │ │ ├── main/
│ │ │ │ ├── component.mk
│ │ │ │ ├── main.c
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── wifi.c
│ │ │ └── sdkconfig
│ │ ├── main.c
│ │ └── packed_fs.c
│ ├── http-proxy-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── http-restful-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── server.pem
│ ├── http-reverse-proxy/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── http-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── arduino/
│ │ │ ├── esp32-http/
│ │ │ │ ├── esp32-http.ino
│ │ │ │ └── mongoose_config.h
│ │ │ ├── teensy41-http/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── teensy41-http.ino
│ │ │ └── w5500-http/
│ │ │ ├── mongoose_config.h
│ │ │ └── w5500-http.ino
│ │ ├── ca.pem
│ │ ├── crt.pem
│ │ ├── key.pem
│ │ └── main.c
│ ├── http-streaming-client/
│ │ ├── Makefile
│ │ └── main.c
│ ├── huge-response/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── redirect-to-https/
│ │ ├── Makefile
│ │ └── main.c
│ ├── singleton-client/
│ │ ├── Makefile
│ │ └── main.c
│ ├── uart-bridge/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── esp32/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── main/
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── cli.c
│ │ │ │ ├── main.c
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── uart.c
│ │ │ │ └── wifi.c
│ │ │ ├── make
│ │ │ ├── partitions.csv
│ │ │ └── sdkconfig.defaults
│ │ ├── main.c
│ │ ├── net.c
│ │ ├── packed_fs.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── video-stream/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ └── wifi-router-dashboard/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ ├── net.c
│ ├── net.h
│ ├── packed_fs.c
│ ├── tailwind.config.js
│ └── web_root/
│ └── main.js
├── infineon/
│ ├── xmc47_relax-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── xmc72_evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── xmc_plt2go_4400-make-baremetal-builtin/
│ ├── Makefile
│ └── README.md
├── micropython/
│ ├── Makefile
│ ├── README.md
│ ├── esp32/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mongoose/
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── main.py
│ └── mongoose/
│ ├── main.c
│ ├── micropython.cmake
│ ├── micropython.mk
│ └── module.c
├── mqtt/
│ ├── README.md
│ ├── mqtt-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── arduino/
│ │ │ ├── esp32-mqtt/
│ │ │ │ ├── esp32-mqtt.ino
│ │ │ │ └── mongoose_config.h
│ │ │ ├── nano-w5500-mqtt/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── w5500-mqtt.ino
│ │ │ ├── sim800-mqtt/
│ │ │ │ ├── mongoose_config.h
│ │ │ │ └── sim800-mqtt.ino
│ │ │ └── w5500-mqtt/
│ │ │ ├── mongoose_config.h
│ │ │ └── w5500-mqtt.ino
│ │ ├── main.c
│ │ └── microchip/
│ │ └── same54-xpro/
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── startup.c
│ │ └── syscalls.c
│ ├── mqtt-client-aws-iot/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mqtt-dashboard/
│ │ ├── Makefile
│ │ ├── dashboard/
│ │ │ ├── Makefile
│ │ │ ├── bundle.js
│ │ │ ├── index.html
│ │ │ ├── main.js
│ │ │ └── tailwind.config.js
│ │ └── device/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.c
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── net.c
│ │ └── net.h
│ ├── mqtt-over-ws-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mqtt-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── ota-over-mqtt/
│ ├── Makefile
│ └── main.c
├── nxp/
│ ├── frdm-mcxn947-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-xpresso-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-mcxn947-xpresso-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── frdm-rw612-xpresso-freertos-builtin-wifi/
│ │ ├── .cproject
│ │ ├── .default_mex
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ ├── Debug/
│ │ │ ├── frdm-rw612-xpresso-freertos-builtin_Debug.ld
│ │ │ ├── frdm-rw612-xpresso-freertos-builtin_Debug_library.ld
│ │ │ └── frdm-rw612-xpresso-freertos-builtin_Debug_memory.ld
│ │ ├── README.md
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── conn_fwloader/
│ │ │ │ ├── fsl_loader.c
│ │ │ │ ├── fsl_loader_utils.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── api_tree_root.h
│ │ │ │ │ ├── fsl_loader.h
│ │ │ │ │ ├── fsl_loader_utils.h
│ │ │ │ │ ├── fusemap.h
│ │ │ │ │ ├── life_cycle.h
│ │ │ │ │ └── nboot_rom_api_table.h
│ │ │ │ ├── life_cycle.c
│ │ │ │ ├── nboot_hal.c
│ │ │ │ └── readme.txt
│ │ │ ├── els_pkc/
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClMemory_ClearSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Clear_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareDPASecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Compare_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecurePow2_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopyWords_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_SetSecure_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClMemory_Set_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_SecureCompare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Internal_SecureCompare_Stub.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ ├── platform_specific_headers.h
│ │ │ │ └── readme.txt
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_config.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ └── AzureWave/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ ├── mflash_file.h
│ │ │ └── readme.txt
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── frdm-rw612-xpresso-freertos-builtin JLink Debug.launch
│ │ ├── frdm-rw612-xpresso-freertos-builtin.mex
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── newlib-freertos.h
│ │ │ │ ├── picolibc-freertos.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ ├── heap_3.c
│ │ │ │ │ └── heap_4.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_rodata.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── app_config.h
│ │ │ ├── main.c
│ │ │ ├── mongoose_config.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_memcpy.S
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── netif_mongoose.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── frdm-rw612-xpresso-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── m-profile/
│ │ │ │ ├── armv8m_mpu.h
│ │ │ │ └── cmsis_gcc_m.h
│ │ │ └── tz_context.h
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ └── clock_config.h
│ │ ├── component/
│ │ │ ├── els_pkc/
│ │ │ │ ├── includes/
│ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ └── platform/
│ │ │ │ │ └── rw61x/
│ │ │ │ │ ├── mcuxClAeadModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClCipherModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClEcc_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHashModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHash_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClHmac_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClKey_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClMacModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClRandomModes_MemoryConsumption.h
│ │ │ │ │ ├── mcuxClRsa_MemoryConsumption.h
│ │ │ │ │ └── mcuxClSession_MemoryConsumption.h
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ └── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity32.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ └── platform_specific_headers.h
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ ├── AzureWave/
│ │ │ │ └── tx_pwr_limits/
│ │ │ │ ├── wlan_txpwrlimit_cfg_WW.h
│ │ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ │ ├── Murata/
│ │ │ │ └── tx_pwr_limits/
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_1XK_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_1ZM_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_2DS_WW.h
│ │ │ │ ├── wlan_txpwrlimit_cfg_murata_2EL_WW.h
│ │ │ │ └── wlan_txpwrlimit_cfg_murata_NH_FCC.h
│ │ │ ├── incl/
│ │ │ │ └── wifi_bt_module_config.h
│ │ │ └── u-blox/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_jody_w5_WW.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_COMMON.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── periph/
│ │ │ │ ├── PERI_ACOMP.h
│ │ │ │ ├── PERI_ADC.h
│ │ │ │ ├── PERI_AHB_SECURE_CTRL.h
│ │ │ │ ├── PERI_AON_SOC_CIU.h
│ │ │ │ ├── PERI_APU.h
│ │ │ │ ├── PERI_BG.h
│ │ │ │ ├── PERI_BLEAPU.h
│ │ │ │ ├── PERI_BUCK11.h
│ │ │ │ ├── PERI_BUCK18.h
│ │ │ │ ├── PERI_CACHE64_CTRL.h
│ │ │ │ ├── PERI_CACHE64_POLSEL.h
│ │ │ │ ├── PERI_CAU.h
│ │ │ │ ├── PERI_CDOG.h
│ │ │ │ ├── PERI_CIU1.h
│ │ │ │ ├── PERI_CIU2.h
│ │ │ │ ├── PERI_CLKCTL0.h
│ │ │ │ ├── PERI_CLKCTL1.h
│ │ │ │ ├── PERI_CRC.h
│ │ │ │ ├── PERI_CTIMER.h
│ │ │ │ ├── PERI_DAC.h
│ │ │ │ ├── PERI_DBGMAILBOX.h
│ │ │ │ ├── PERI_DMA.h
│ │ │ │ ├── PERI_DMIC.h
│ │ │ │ ├── PERI_ELS.h
│ │ │ │ ├── PERI_ENET.h
│ │ │ │ ├── PERI_FLEXCOMM.h
│ │ │ │ ├── PERI_FLEXSPI.h
│ │ │ │ ├── PERI_FREQME.h
│ │ │ │ ├── PERI_GDMA.h
│ │ │ │ ├── PERI_GPIO.h
│ │ │ │ ├── PERI_I2C.h
│ │ │ │ ├── PERI_I2S.h
│ │ │ │ ├── PERI_INPUTMUX.h
│ │ │ │ ├── PERI_ITRC.h
│ │ │ │ ├── PERI_LCDIC.h
│ │ │ │ ├── PERI_MCI_IO_MUX.h
│ │ │ │ ├── PERI_MRT.h
│ │ │ │ ├── PERI_OCOTP.h
│ │ │ │ ├── PERI_OSTIMER.h
│ │ │ │ ├── PERI_PINT.h
│ │ │ │ ├── PERI_PKC.h
│ │ │ │ ├── PERI_PMU.h
│ │ │ │ ├── PERI_POWERQUAD.h
│ │ │ │ ├── PERI_PUF.h
│ │ │ │ ├── PERI_RF_SYSCON.h
│ │ │ │ ├── PERI_ROMCP.h
│ │ │ │ ├── PERI_RSTCTL0.h
│ │ │ │ ├── PERI_RSTCTL1.h
│ │ │ │ ├── PERI_RTC.h
│ │ │ │ ├── PERI_SCT.h
│ │ │ │ ├── PERI_SDU_FBR_CARD.h
│ │ │ │ ├── PERI_SDU_FN0_CARD.h
│ │ │ │ ├── PERI_SDU_FN_CARD.h
│ │ │ │ ├── PERI_SENSOR_CTRL.h
│ │ │ │ ├── PERI_SOCCIU.h
│ │ │ │ ├── PERI_SOC_OTP_CTRL.h
│ │ │ │ ├── PERI_SPI.h
│ │ │ │ ├── PERI_SYSCTL0.h
│ │ │ │ ├── PERI_SYSCTL1.h
│ │ │ │ ├── PERI_SYSCTL2.h
│ │ │ │ ├── PERI_SYSPLL_T3.h
│ │ │ │ ├── PERI_SYSPLL_TCPU.h
│ │ │ │ ├── PERI_SYSPLL_TDDR.h
│ │ │ │ ├── PERI_TRNG.h
│ │ │ │ ├── PERI_USART.h
│ │ │ │ ├── PERI_USBC.h
│ │ │ │ ├── PERI_USIM.h
│ │ │ │ ├── PERI_UTICK.h
│ │ │ │ ├── PERI_WLAPU.h
│ │ │ │ └── PERI_WWDT.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── doc/
│ │ │ ├── readme.md
│ │ │ └── wifi_examples_readme.md
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_i2s_bridge.c
│ │ │ ├── fsl_i2s_bridge.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_inputmux_connections.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_iped.c
│ │ │ ├── fsl_iped.h
│ │ │ ├── fsl_memory.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── edgefast_wifi/
│ │ │ ├── include/
│ │ │ │ └── wpl.h
│ │ │ └── source/
│ │ │ └── wpl_nxp.c
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ └── mflash_file.h
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── frdm-rw612-xpresso-lwip-freertos JLink Debug.launch
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ └── heap_4.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ ├── template/
│ │ │ │ └── ARM_CM33_3_priority_bits/
│ │ │ │ └── FreeRTOSConfig_Gen.h
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── lwip/
│ │ │ ├── BUILDING
│ │ │ ├── CHANGELOG
│ │ │ ├── CMakeLists_upstream.txt
│ │ │ ├── COPYING
│ │ │ ├── ChangeLogKSDK.txt
│ │ │ ├── FEATURES
│ │ │ ├── FILES
│ │ │ ├── README
│ │ │ ├── UPGRADING
│ │ │ ├── codespell_changed_files.sh
│ │ │ ├── codespell_check.sh
│ │ │ ├── doc/
│ │ │ │ ├── FILES
│ │ │ │ ├── NO_SYS_SampleCode.c
│ │ │ │ ├── ZeroCopyRx.c
│ │ │ │ ├── contrib.txt
│ │ │ │ ├── doxygen/
│ │ │ │ │ ├── generate.bat
│ │ │ │ │ ├── generate.sh
│ │ │ │ │ ├── lwip.Doxyfile
│ │ │ │ │ ├── lwip.Doxyfile.cmake.in
│ │ │ │ │ ├── main_page.h
│ │ │ │ │ └── output/
│ │ │ │ │ └── index.html
│ │ │ │ ├── mdns.txt
│ │ │ │ ├── mqtt_client.txt
│ │ │ │ ├── ppp.txt
│ │ │ │ └── savannah.txt
│ │ │ ├── port/
│ │ │ │ ├── README.md
│ │ │ │ ├── arch/
│ │ │ │ │ ├── cc.h
│ │ │ │ │ └── perf.h
│ │ │ │ └── sys_arch/
│ │ │ │ └── dynamic/
│ │ │ │ ├── arch/
│ │ │ │ │ └── sys_arch.h
│ │ │ │ └── sys_arch.c
│ │ │ └── src/
│ │ │ ├── FILES
│ │ │ ├── api/
│ │ │ │ ├── api_lib.c
│ │ │ │ ├── api_msg.c
│ │ │ │ ├── err.c
│ │ │ │ ├── if_api.c
│ │ │ │ ├── netbuf.c
│ │ │ │ ├── netdb.c
│ │ │ │ ├── netifapi.c
│ │ │ │ ├── sockets.c
│ │ │ │ └── tcpip.c
│ │ │ ├── apps/
│ │ │ │ ├── httpsrv/
│ │ │ │ │ ├── httpsrv.c
│ │ │ │ │ ├── httpsrv.h
│ │ │ │ │ ├── httpsrv_base64.c
│ │ │ │ │ ├── httpsrv_base64.h
│ │ │ │ │ ├── httpsrv_config.h
│ │ │ │ │ ├── httpsrv_fs.c
│ │ │ │ │ ├── httpsrv_fs.h
│ │ │ │ │ ├── httpsrv_port.h
│ │ │ │ │ ├── httpsrv_prv.h
│ │ │ │ │ ├── httpsrv_script.c
│ │ │ │ │ ├── httpsrv_script.h
│ │ │ │ │ ├── httpsrv_sha1.c
│ │ │ │ │ ├── httpsrv_sha1.h
│ │ │ │ │ ├── httpsrv_supp.c
│ │ │ │ │ ├── httpsrv_supp.h
│ │ │ │ │ ├── httpsrv_task.c
│ │ │ │ │ ├── httpsrv_tls.c
│ │ │ │ │ ├── httpsrv_tls.h
│ │ │ │ │ ├── httpsrv_utf8.c
│ │ │ │ │ ├── httpsrv_utf8.h
│ │ │ │ │ ├── httpsrv_ws.c
│ │ │ │ │ ├── httpsrv_ws.h
│ │ │ │ │ ├── httpsrv_ws_api.c
│ │ │ │ │ ├── httpsrv_ws_prv.h
│ │ │ │ │ └── mkfs/
│ │ │ │ │ └── mkfs.pl
│ │ │ │ └── mdns/
│ │ │ │ ├── mdns.c
│ │ │ │ ├── mdns_domain.c
│ │ │ │ └── mdns_out.c
│ │ │ ├── core/
│ │ │ │ ├── altcp.c
│ │ │ │ ├── altcp_alloc.c
│ │ │ │ ├── altcp_tcp.c
│ │ │ │ ├── def.c
│ │ │ │ ├── dns.c
│ │ │ │ ├── inet_chksum.c
│ │ │ │ ├── init.c
│ │ │ │ ├── ip.c
│ │ │ │ ├── ipv4/
│ │ │ │ │ ├── acd.c
│ │ │ │ │ ├── autoip.c
│ │ │ │ │ ├── dhcp.c
│ │ │ │ │ ├── etharp.c
│ │ │ │ │ ├── icmp.c
│ │ │ │ │ ├── igmp.c
│ │ │ │ │ ├── ip4.c
│ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ └── ip4_frag.c
│ │ │ │ ├── ipv6/
│ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ ├── ethip6.c
│ │ │ │ │ ├── icmp6.c
│ │ │ │ │ ├── inet6.c
│ │ │ │ │ ├── ip6.c
│ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ ├── mld6.c
│ │ │ │ │ └── nd6.c
│ │ │ │ ├── mem.c
│ │ │ │ ├── memp.c
│ │ │ │ ├── netif.c
│ │ │ │ ├── pbuf.c
│ │ │ │ ├── raw.c
│ │ │ │ ├── stats.c
│ │ │ │ ├── sys.c
│ │ │ │ ├── tcp.c
│ │ │ │ ├── tcp_in.c
│ │ │ │ ├── tcp_out.c
│ │ │ │ ├── timeouts.c
│ │ │ │ └── udp.c
│ │ │ ├── include/
│ │ │ │ ├── compat/
│ │ │ │ │ ├── posix/
│ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── sys/
│ │ │ │ │ │ └── socket.h
│ │ │ │ │ └── stdc/
│ │ │ │ │ └── errno.h
│ │ │ │ ├── lwip/
│ │ │ │ │ ├── acd.h
│ │ │ │ │ ├── altcp.h
│ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ ├── api.h
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ ├── mdns_domain.h
│ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ ├── mdns_out.h
│ │ │ │ │ │ └── mdns_priv.h
│ │ │ │ │ ├── arch.h
│ │ │ │ │ ├── autoip.h
│ │ │ │ │ ├── debug.h
│ │ │ │ │ ├── def.h
│ │ │ │ │ ├── dhcp.h
│ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ ├── dns.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethip6.h
│ │ │ │ │ ├── icmp.h
│ │ │ │ │ ├── icmp6.h
│ │ │ │ │ ├── if_api.h
│ │ │ │ │ ├── igmp.h
│ │ │ │ │ ├── inet.h
│ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ ├── init.h
│ │ │ │ │ ├── ip.h
│ │ │ │ │ ├── ip4.h
│ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ ├── ip6.h
│ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ ├── mem.h
│ │ │ │ │ ├── memp.h
│ │ │ │ │ ├── mld6.h
│ │ │ │ │ ├── nd6.h
│ │ │ │ │ ├── netbuf.h
│ │ │ │ │ ├── netdb.h
│ │ │ │ │ ├── netif.h
│ │ │ │ │ ├── netifapi.h
│ │ │ │ │ ├── opt.h
│ │ │ │ │ ├── pbuf.h
│ │ │ │ │ ├── priv/
│ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ ├── prot/
│ │ │ │ │ │ ├── acd.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ ├── raw.h
│ │ │ │ │ ├── sio.h
│ │ │ │ │ ├── snmp.h
│ │ │ │ │ ├── sockets.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sys.h
│ │ │ │ │ ├── tcp.h
│ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ ├── tcpip.h
│ │ │ │ │ ├── timeouts.h
│ │ │ │ │ └── udp.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.h
│ │ │ │ ├── bridgeif_opts.h
│ │ │ │ ├── etharp.h
│ │ │ │ ├── ethernet.h
│ │ │ │ ├── ieee802154.h
│ │ │ │ ├── lowpan6.h
│ │ │ │ ├── lowpan6_ble.h
│ │ │ │ ├── lowpan6_common.h
│ │ │ │ ├── lowpan6_opts.h
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── ccp.h
│ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ ├── chap-new.h
│ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ ├── eap.h
│ │ │ │ │ ├── ecp.h
│ │ │ │ │ ├── eui64.h
│ │ │ │ │ ├── fsm.h
│ │ │ │ │ ├── ipcp.h
│ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ ├── lcp.h
│ │ │ │ │ ├── magic.h
│ │ │ │ │ ├── mppe.h
│ │ │ │ │ ├── polarssl/
│ │ │ │ │ │ ├── arc4.h
│ │ │ │ │ │ ├── des.h
│ │ │ │ │ │ ├── md4.h
│ │ │ │ │ │ ├── md5.h
│ │ │ │ │ │ └── sha1.h
│ │ │ │ │ ├── ppp.h
│ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ ├── pppapi.h
│ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ ├── pppoe.h
│ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ ├── pppos.h
│ │ │ │ │ ├── upap.h
│ │ │ │ │ └── vj.h
│ │ │ │ ├── slipif.h
│ │ │ │ └── zepif.h
│ │ │ └── netif/
│ │ │ ├── FILES
│ │ │ ├── bridgeif.c
│ │ │ ├── bridgeif_fdb.c
│ │ │ ├── ethernet.c
│ │ │ ├── lowpan6.c
│ │ │ ├── lowpan6_ble.c
│ │ │ ├── lowpan6_common.c
│ │ │ ├── ppp/
│ │ │ │ ├── PPPD_FOLLOWUP
│ │ │ │ ├── auth.c
│ │ │ │ ├── ccp.c
│ │ │ │ ├── chap-md5.c
│ │ │ │ ├── chap-new.c
│ │ │ │ ├── chap_ms.c
│ │ │ │ ├── demand.c
│ │ │ │ ├── eap.c
│ │ │ │ ├── ecp.c
│ │ │ │ ├── eui64.c
│ │ │ │ ├── fsm.c
│ │ │ │ ├── ipcp.c
│ │ │ │ ├── ipv6cp.c
│ │ │ │ ├── lcp.c
│ │ │ │ ├── magic.c
│ │ │ │ ├── mppe.c
│ │ │ │ ├── multilink.c
│ │ │ │ ├── polarssl/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── arc4.c
│ │ │ │ │ ├── des.c
│ │ │ │ │ ├── md4.c
│ │ │ │ │ ├── md5.c
│ │ │ │ │ └── sha1.c
│ │ │ │ ├── ppp.c
│ │ │ │ ├── pppapi.c
│ │ │ │ ├── pppcrypt.c
│ │ │ │ ├── pppoe.c
│ │ │ │ ├── pppol2tp.c
│ │ │ │ ├── pppos.c
│ │ │ │ ├── upap.c
│ │ │ │ ├── utils.c
│ │ │ │ └── vj.c
│ │ │ ├── slipif.c
│ │ │ └── zepif.c
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── FreeRTOSConfigBoard.h
│ │ │ ├── app.h
│ │ │ ├── app_config.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_os_abstraction_config.h
│ │ │ ├── hardware_init.c
│ │ │ ├── lwipopts.h
│ │ │ ├── lwippools.h
│ │ │ ├── main.c
│ │ │ ├── mcux_config.h
│ │ │ ├── mongoose_config.h
│ │ │ ├── pin_mux.c
│ │ │ ├── pin_mux.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── debug_console/
│ │ │ │ ├── fsl_debug_console.c
│ │ │ │ └── fsl_debug_console.h
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_memcpy.S
│ │ │ └── str/
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── dhcpd/
│ │ │ ├── dhcp-bootp.h
│ │ │ ├── dhcp-priv.h
│ │ │ ├── dhcp-server-main.c
│ │ │ ├── dhcp-server.c
│ │ │ ├── dns-server.c
│ │ │ └── dns.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_cal_data_frdmrw61x_1ant.h
│ │ │ ├── wifi_cal_data_rw61x_1ant.h
│ │ │ ├── wifi_cal_data_rw61x_1ant_diversity.h
│ │ │ ├── wifi_cal_data_rw61x_2ant.h
│ │ │ ├── wifi_cal_data_rw61x_3ant_diversity.h
│ │ │ ├── wifi_cal_data_rw61x_override.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── wifi_netif.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── frdm-rw612-xpresso-freertos-lwip-wifi/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm33.h
│ │ │ ├── mpu_armv8.h
│ │ │ └── tz_context.h
│ │ ├── Debug/
│ │ │ ├── frdm-rw612-xpresso-freertos-lwip_Debug.ld
│ │ │ ├── frdm-rw612-xpresso-freertos-lwip_Debug_library.ld
│ │ │ └── frdm-rw612-xpresso-freertos-lwip_Debug_memory.ld
│ │ ├── README.md
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── conn_fwloader/
│ │ │ │ ├── fsl_loader.c
│ │ │ │ ├── fsl_loader_utils.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── api_tree_root.h
│ │ │ │ │ ├── fsl_loader.h
│ │ │ │ │ ├── fsl_loader_utils.h
│ │ │ │ │ ├── fusemap.h
│ │ │ │ │ ├── life_cycle.h
│ │ │ │ │ └── nboot_rom_api_table.h
│ │ │ │ ├── life_cycle.c
│ │ │ │ ├── nboot_hal.c
│ │ │ │ └── readme.txt
│ │ │ ├── els_pkc/
│ │ │ │ └── src/
│ │ │ │ ├── compiler/
│ │ │ │ │ └── mcuxClToolchain.h
│ │ │ │ ├── comps/
│ │ │ │ │ ├── mcuxClBuffer/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClBuffer_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClBuffer_Internal_Pointer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Cfg.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Constants.h
│ │ │ │ │ │ │ ├── mcuxClBuffer_Impl.h
│ │ │ │ │ │ │ └── mcuxClBuffer_Pointer.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClBuffer.c
│ │ │ │ │ ├── mcuxClCore/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxClCore_Examples.h
│ │ │ │ │ │ ├── mcuxClCore_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxClCore_Macros.h
│ │ │ │ │ │ ├── mcuxClCore_Platform.h
│ │ │ │ │ │ └── mcuxClCore_Toolchain.h
│ │ │ │ │ ├── mcuxClEls/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_Common.h
│ │ │ │ │ │ │ │ ├── mcuxClEls_Internal_mapping.h
│ │ │ │ │ │ │ │ └── mcuxClEls_SfrAccess.h
│ │ │ │ │ │ │ ├── mcuxClEls.h
│ │ │ │ │ │ │ ├── mcuxClEls_Aead.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cipher.h
│ │ │ │ │ │ │ ├── mcuxClEls_Cmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Common.h
│ │ │ │ │ │ │ ├── mcuxClEls_Crc.h
│ │ │ │ │ │ │ ├── mcuxClEls_Ecc.h
│ │ │ │ │ │ │ ├── mcuxClEls_GlitchDetector.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hash.h
│ │ │ │ │ │ │ ├── mcuxClEls_Hmac.h
│ │ │ │ │ │ │ ├── mcuxClEls_Kdf.h
│ │ │ │ │ │ │ ├── mcuxClEls_KeyManagement.h
│ │ │ │ │ │ │ ├── mcuxClEls_Rng.h
│ │ │ │ │ │ │ ├── mcuxClEls_Types.h
│ │ │ │ │ │ │ └── mcuxClEls_mapping.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxClEls_Common.c
│ │ │ │ │ │ └── mcuxClEls_GlitchDetector.c
│ │ │ │ │ ├── mcuxClMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxClMemory_ClearSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Clear_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareDPASecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CompareSecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Compare_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecurePow2_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopySecure_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_CopyWords_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_Internal.h
│ │ │ │ │ │ │ │ ├── mcuxClMemory_SetSecure_Internal.h
│ │ │ │ │ │ │ │ └── mcuxClMemory_Set_Internal.h
│ │ │ │ │ │ │ ├── mcuxClMemory.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Copy_Reversed.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Endianness.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Set.h
│ │ │ │ │ │ │ ├── mcuxClMemory_Types.h
│ │ │ │ │ │ │ └── mcuxClMemory_Xor.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxClMemory.c
│ │ │ │ │ ├── mcuxCsslCPreProcessor/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslAnalysis.h
│ │ │ │ │ │ └── mcuxCsslCPreProcessor.h
│ │ │ │ │ ├── mcuxCsslDataIntegrity/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslDataIntegrity_Impl.h
│ │ │ │ │ │ └── mcuxCsslDataIntegrity_None.h
│ │ │ │ │ ├── mcuxCsslFlowProtection/
│ │ │ │ │ │ └── inc/
│ │ │ │ │ │ ├── mcuxCsslFlowProtection.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Cfg.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_FunctionIdentifiers.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_Impl.h
│ │ │ │ │ │ ├── mcuxCsslFlowProtection_SecureCounter_Common.h
│ │ │ │ │ │ └── mcuxCsslFlowProtection_SecureCounter_Local.h
│ │ │ │ │ ├── mcuxCsslMemory/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ ├── internal/
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Compare_asm.h
│ │ │ │ │ │ │ │ ├── mcuxCsslMemory_Internal_Copy_asm.h
│ │ │ │ │ │ │ │ └── mcuxCsslMemory_Internal_SecureCompare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Clear.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Compare.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Constants.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Copy.h
│ │ │ │ │ │ │ ├── mcuxCsslMemory_Set.h
│ │ │ │ │ │ │ └── mcuxCsslMemory_Types.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ ├── mcuxCsslMemory_Clear.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Compare.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Copy.c
│ │ │ │ │ │ ├── mcuxCsslMemory_Internal_SecureCompare_Stub.c
│ │ │ │ │ │ └── mcuxCsslMemory_Set.c
│ │ │ │ │ ├── mcuxCsslParamIntegrity/
│ │ │ │ │ │ ├── inc/
│ │ │ │ │ │ │ └── mcuxCsslParamIntegrity.h
│ │ │ │ │ │ └── src/
│ │ │ │ │ │ └── mcuxCsslParamIntegrity.c
│ │ │ │ │ └── mcuxCsslSecureCounter/
│ │ │ │ │ └── inc/
│ │ │ │ │ ├── mcuxCsslSecureCounter.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Cfg.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_Impl.h
│ │ │ │ │ ├── mcuxCsslSecureCounter_None.h
│ │ │ │ │ └── mcuxCsslSecureCounter_SW_Local.h
│ │ │ │ └── platforms/
│ │ │ │ └── rw61x/
│ │ │ │ ├── inc/
│ │ │ │ │ ├── ip_css_constants.h
│ │ │ │ │ ├── ip_css_design_configuration.h
│ │ │ │ │ └── ip_platform.h
│ │ │ │ ├── mcuxClConfig.h
│ │ │ │ ├── platform_specific_headers.h
│ │ │ │ └── readme.txt
│ │ │ ├── imu_adapter/
│ │ │ │ ├── fsl_adapter_imu.c
│ │ │ │ ├── fsl_adapter_imu.h
│ │ │ │ └── fsl_adapter_imu_common.h
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── osa/
│ │ │ │ ├── fsl_os_abstraction.h
│ │ │ │ ├── fsl_os_abstraction_config.h
│ │ │ │ ├── fsl_os_abstraction_free_rtos.c
│ │ │ │ └── fsl_os_abstraction_free_rtos.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ ├── uart/
│ │ │ │ ├── fsl_adapter_uart.h
│ │ │ │ └── fsl_adapter_usart.c
│ │ │ └── wifi_bt_module/
│ │ │ └── AzureWave/
│ │ │ └── tx_pwr_limits/
│ │ │ └── wlan_txpwrlimit_cfg_WW_rw610.h
│ │ ├── device/
│ │ │ ├── RW612.h
│ │ │ ├── RW612_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_RW612.c
│ │ │ └── system_RW612.h
│ │ ├── drivers/
│ │ │ ├── freertos/
│ │ │ │ ├── fsl_usart_freertos.c
│ │ │ │ └── fsl_usart_freertos.h
│ │ │ ├── fsl_cache.c
│ │ │ ├── fsl_cache.h
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_flexcomm.c
│ │ │ ├── fsl_flexcomm.h
│ │ │ ├── fsl_flexspi.c
│ │ │ ├── fsl_flexspi.h
│ │ │ ├── fsl_gdma.c
│ │ │ ├── fsl_gdma.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_imu.c
│ │ │ ├── fsl_imu.h
│ │ │ ├── fsl_io_mux.h
│ │ │ ├── fsl_ocotp.c
│ │ │ ├── fsl_ocotp.h
│ │ │ ├── fsl_power.c
│ │ │ ├── fsl_power.h
│ │ │ ├── fsl_reset.c
│ │ │ ├── fsl_reset.h
│ │ │ ├── fsl_usart.c
│ │ │ └── fsl_usart.h
│ │ ├── edgefast_wifi/
│ │ │ ├── include/
│ │ │ │ └── wpl.h
│ │ │ └── source/
│ │ │ └── wpl_nxp.c
│ │ ├── flash/
│ │ │ └── mflash/
│ │ │ ├── frdmrw612/
│ │ │ │ ├── mflash_drv.c
│ │ │ │ └── mflash_drv.h
│ │ │ ├── mflash_common.h
│ │ │ ├── mflash_file.c
│ │ │ ├── mflash_file.h
│ │ │ └── readme.txt
│ │ ├── flash_config/
│ │ │ ├── flash_config.c
│ │ │ └── flash_config.h
│ │ ├── freertos/
│ │ │ └── freertos-kernel/
│ │ │ ├── croutine.c
│ │ │ ├── event_groups.c
│ │ │ ├── include/
│ │ │ │ ├── FreeRTOS.h
│ │ │ │ ├── StackMacros.h
│ │ │ │ ├── atomic.h
│ │ │ │ ├── croutine.h
│ │ │ │ ├── deprecated_definitions.h
│ │ │ │ ├── event_groups.h
│ │ │ │ ├── freertos_tasks_c_additions.h
│ │ │ │ ├── list.h
│ │ │ │ ├── message_buffer.h
│ │ │ │ ├── mpu_prototypes.h
│ │ │ │ ├── mpu_syscall_numbers.h
│ │ │ │ ├── mpu_wrappers.h
│ │ │ │ ├── newlib-freertos.h
│ │ │ │ ├── picolibc-freertos.h
│ │ │ │ ├── portable.h
│ │ │ │ ├── projdefs.h
│ │ │ │ ├── queue.h
│ │ │ │ ├── semphr.h
│ │ │ │ ├── stack_macros.h
│ │ │ │ ├── stdint.readme
│ │ │ │ ├── stream_buffer.h
│ │ │ │ ├── task.h
│ │ │ │ └── timers.h
│ │ │ ├── list.c
│ │ │ ├── portable/
│ │ │ │ ├── GCC/
│ │ │ │ │ └── ARM_CM33_NTZ/
│ │ │ │ │ └── non_secure/
│ │ │ │ │ ├── mpu_wrappers_v2_asm.c
│ │ │ │ │ ├── port.c
│ │ │ │ │ ├── portasm.c
│ │ │ │ │ ├── portasm.h
│ │ │ │ │ ├── portmacro.h
│ │ │ │ │ └── portmacrocommon.h
│ │ │ │ ├── MemMang/
│ │ │ │ │ ├── ReadMe.url
│ │ │ │ │ └── heap_3.c
│ │ │ │ └── readme.txt
│ │ │ ├── queue.c
│ │ │ ├── stream_buffer.c
│ │ │ ├── tasks.c
│ │ │ └── timers.c
│ │ ├── linkscripts/
│ │ │ ├── main_data.ldt
│ │ │ ├── main_rodata.ldt
│ │ │ ├── main_text.ldt
│ │ │ └── noinit_noload_section.ldt
│ │ ├── lwip/
│ │ │ ├── BUILDING
│ │ │ ├── CHANGELOG
│ │ │ ├── COPYING
│ │ │ ├── ChangeLogKSDK.txt
│ │ │ ├── FEATURES
│ │ │ ├── FILES
│ │ │ ├── README
│ │ │ ├── UPGRADING
│ │ │ ├── doc/
│ │ │ │ ├── FILES
│ │ │ │ ├── NO_SYS_SampleCode.c
│ │ │ │ ├── ZeroCopyRx.c
│ │ │ │ ├── contrib.txt
│ │ │ │ ├── doxygen/
│ │ │ │ │ ├── generate.bat
│ │ │ │ │ ├── generate.sh
│ │ │ │ │ ├── lwip.Doxyfile
│ │ │ │ │ ├── lwip.Doxyfile.cmake.in
│ │ │ │ │ ├── main_page.h
│ │ │ │ │ └── output/
│ │ │ │ │ └── index.html
│ │ │ │ ├── mdns.txt
│ │ │ │ ├── mqtt_client.txt
│ │ │ │ ├── ppp.txt
│ │ │ │ └── savannah.txt
│ │ │ ├── port/
│ │ │ │ ├── arch/
│ │ │ │ │ ├── cc.h
│ │ │ │ │ └── perf.h
│ │ │ │ └── sys_arch/
│ │ │ │ └── dynamic/
│ │ │ │ ├── arch/
│ │ │ │ │ └── sys_arch.h
│ │ │ │ └── sys_arch.c
│ │ │ └── src/
│ │ │ ├── FILES
│ │ │ ├── api/
│ │ │ │ ├── api_lib.c
│ │ │ │ ├── api_msg.c
│ │ │ │ ├── err.c
│ │ │ │ ├── if_api.c
│ │ │ │ ├── netbuf.c
│ │ │ │ ├── netdb.c
│ │ │ │ ├── netifapi.c
│ │ │ │ ├── sockets.c
│ │ │ │ └── tcpip.c
│ │ │ ├── core/
│ │ │ │ ├── altcp.c
│ │ │ │ ├── altcp_alloc.c
│ │ │ │ ├── altcp_tcp.c
│ │ │ │ ├── def.c
│ │ │ │ ├── dns.c
│ │ │ │ ├── inet_chksum.c
│ │ │ │ ├── init.c
│ │ │ │ ├── ip.c
│ │ │ │ ├── ipv4/
│ │ │ │ │ ├── acd.c
│ │ │ │ │ ├── autoip.c
│ │ │ │ │ ├── dhcp.c
│ │ │ │ │ ├── etharp.c
│ │ │ │ │ ├── icmp.c
│ │ │ │ │ ├── igmp.c
│ │ │ │ │ ├── ip4.c
│ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ └── ip4_frag.c
│ │ │ │ ├── ipv6/
│ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ ├── ethip6.c
│ │ │ │ │ ├── icmp6.c
│ │ │ │ │ ├── inet6.c
│ │ │ │ │ ├── ip6.c
│ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ ├── mld6.c
│ │ │ │ │ └── nd6.c
│ │ │ │ ├── mem.c
│ │ │ │ ├── memp.c
│ │ │ │ ├── netif.c
│ │ │ │ ├── pbuf.c
│ │ │ │ ├── raw.c
│ │ │ │ ├── stats.c
│ │ │ │ ├── sys.c
│ │ │ │ ├── tcp.c
│ │ │ │ ├── tcp_in.c
│ │ │ │ ├── tcp_out.c
│ │ │ │ ├── timeouts.c
│ │ │ │ └── udp.c
│ │ │ ├── include/
│ │ │ │ ├── compat/
│ │ │ │ │ ├── posix/
│ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ └── sys/
│ │ │ │ │ │ └── socket.h
│ │ │ │ │ └── stdc/
│ │ │ │ │ └── errno.h
│ │ │ │ ├── lwip/
│ │ │ │ │ ├── acd.h
│ │ │ │ │ ├── altcp.h
│ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ ├── api.h
│ │ │ │ │ ├── apps/
│ │ │ │ │ │ └── lwiperf.h
│ │ │ │ │ ├── arch.h
│ │ │ │ │ ├── autoip.h
│ │ │ │ │ ├── debug.h
│ │ │ │ │ ├── def.h
│ │ │ │ │ ├── dhcp.h
│ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ ├── dns.h
│ │ │ │ │ ├── err.h
│ │ │ │ │ ├── errno.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethip6.h
│ │ │ │ │ ├── icmp.h
│ │ │ │ │ ├── icmp6.h
│ │ │ │ │ ├── if_api.h
│ │ │ │ │ ├── igmp.h
│ │ │ │ │ ├── inet.h
│ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ ├── init.h
│ │ │ │ │ ├── ip.h
│ │ │ │ │ ├── ip4.h
│ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ ├── ip6.h
│ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ ├── mem.h
│ │ │ │ │ ├── memp.h
│ │ │ │ │ ├── mld6.h
│ │ │ │ │ ├── nd6.h
│ │ │ │ │ ├── netbuf.h
│ │ │ │ │ ├── netdb.h
│ │ │ │ │ ├── netif.h
│ │ │ │ │ ├── netifapi.h
│ │ │ │ │ ├── opt.h
│ │ │ │ │ ├── pbuf.h
│ │ │ │ │ ├── priv/
│ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ ├── prot/
│ │ │ │ │ │ ├── acd.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ ├── raw.h
│ │ │ │ │ ├── sio.h
│ │ │ │ │ ├── snmp.h
│ │ │ │ │ ├── sockets.h
│ │ │ │ │ ├── stats.h
│ │ │ │ │ ├── sys.h
│ │ │ │ │ ├── tcp.h
│ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ ├── tcpip.h
│ │ │ │ │ ├── timeouts.h
│ │ │ │ │ └── udp.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.h
│ │ │ │ ├── bridgeif_opts.h
│ │ │ │ ├── etharp.h
│ │ │ │ ├── ethernet.h
│ │ │ │ ├── ieee802154.h
│ │ │ │ ├── lowpan6.h
│ │ │ │ ├── lowpan6_ble.h
│ │ │ │ ├── lowpan6_common.h
│ │ │ │ ├── lowpan6_opts.h
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── ccp.h
│ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ ├── chap-new.h
│ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ ├── eap.h
│ │ │ │ │ ├── ecp.h
│ │ │ │ │ ├── eui64.h
│ │ │ │ │ ├── fsm.h
│ │ │ │ │ ├── ipcp.h
│ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ ├── lcp.h
│ │ │ │ │ ├── magic.h
│ │ │ │ │ ├── mppe.h
│ │ │ │ │ ├── polarssl/
│ │ │ │ │ │ ├── arc4.h
│ │ │ │ │ │ ├── des.h
│ │ │ │ │ │ ├── md4.h
│ │ │ │ │ │ ├── md5.h
│ │ │ │ │ │ └── sha1.h
│ │ │ │ │ ├── ppp.h
│ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ ├── pppapi.h
│ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ ├── pppoe.h
│ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ ├── pppos.h
│ │ │ │ │ ├── upap.h
│ │ │ │ │ └── vj.h
│ │ │ │ ├── slipif.h
│ │ │ │ └── zepif.h
│ │ │ └── netif/
│ │ │ ├── FILES
│ │ │ ├── bridgeif.c
│ │ │ ├── bridgeif_fdb.c
│ │ │ ├── ethernet.c
│ │ │ ├── lowpan6.c
│ │ │ ├── lowpan6_ble.c
│ │ │ ├── lowpan6_common.c
│ │ │ ├── ppp/
│ │ │ │ ├── PPPD_FOLLOWUP
│ │ │ │ ├── auth.c
│ │ │ │ ├── ccp.c
│ │ │ │ ├── chap-md5.c
│ │ │ │ ├── chap-new.c
│ │ │ │ ├── chap_ms.c
│ │ │ │ ├── demand.c
│ │ │ │ ├── eap.c
│ │ │ │ ├── ecp.c
│ │ │ │ ├── eui64.c
│ │ │ │ ├── fsm.c
│ │ │ │ ├── ipcp.c
│ │ │ │ ├── ipv6cp.c
│ │ │ │ ├── lcp.c
│ │ │ │ ├── magic.c
│ │ │ │ ├── mppe.c
│ │ │ │ ├── multilink.c
│ │ │ │ ├── polarssl/
│ │ │ │ │ ├── README
│ │ │ │ │ ├── arc4.c
│ │ │ │ │ ├── des.c
│ │ │ │ │ ├── md4.c
│ │ │ │ │ ├── md5.c
│ │ │ │ │ └── sha1.c
│ │ │ │ ├── ppp.c
│ │ │ │ ├── pppapi.c
│ │ │ │ ├── pppcrypt.c
│ │ │ │ ├── pppoe.c
│ │ │ │ ├── pppol2tp.c
│ │ │ │ ├── pppos.c
│ │ │ │ ├── upap.c
│ │ │ │ ├── utils.c
│ │ │ │ └── vj.c
│ │ │ ├── slipif.c
│ │ │ └── zepif.c
│ │ ├── source/
│ │ │ ├── FreeRTOSConfig.h
│ │ │ ├── app_config.h
│ │ │ ├── lwipopts.h
│ │ │ ├── lwippools.h
│ │ │ ├── main.c
│ │ │ ├── main.c_mg_wifi-style
│ │ │ ├── mongoose_config.h
│ │ │ ├── semihost_hardfault.c
│ │ │ └── wifi_config.h
│ │ ├── startup/
│ │ │ └── startup_rw612.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_assert.h
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_memcpy.S
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── wifi/
│ │ ├── CMakeLists.txt
│ │ ├── ChangeLogKSDK.txt
│ │ ├── certs/
│ │ │ ├── ca-cert.h
│ │ │ ├── client-cert.h
│ │ │ ├── client-key.h
│ │ │ ├── dh-param.h
│ │ │ ├── server-cert.h
│ │ │ └── server-key.h
│ │ ├── dhcpd/
│ │ │ ├── dhcp-bootp.h
│ │ │ ├── dhcp-priv.h
│ │ │ ├── dhcp-server-main.c
│ │ │ ├── dhcp-server.c
│ │ │ ├── dns-server.c
│ │ │ └── dns.h
│ │ ├── incl/
│ │ │ ├── dhcp-server.h
│ │ │ ├── nxp_wifi.h
│ │ │ ├── port/
│ │ │ │ ├── net/
│ │ │ │ │ ├── hooks/
│ │ │ │ │ │ └── lwip_default_hooks.h
│ │ │ │ │ └── wm_net.h
│ │ │ │ └── osa/
│ │ │ │ ├── mem_pool.h
│ │ │ │ ├── mem_pool_config.h
│ │ │ │ ├── osa.h
│ │ │ │ ├── slist.h
│ │ │ │ └── stack_simple.h
│ │ │ ├── wifi_cal_data_ext.h
│ │ │ ├── wifi_config_default.h
│ │ │ ├── wifidriver/
│ │ │ │ ├── wifi-decl.h
│ │ │ │ ├── wifi.h
│ │ │ │ ├── wifi_events.h
│ │ │ │ └── wifi_nxp.h
│ │ │ ├── wlcmgr/
│ │ │ │ ├── wlan.h
│ │ │ │ └── wlan_11d.h
│ │ │ ├── wm_utils.h
│ │ │ ├── wmerrno.h
│ │ │ ├── wmlog.h
│ │ │ ├── wmstats.h
│ │ │ └── wmtypes.h
│ │ ├── port/
│ │ │ ├── net/
│ │ │ │ ├── hooks/
│ │ │ │ │ └── lwip_default_hooks.c
│ │ │ │ ├── net.c
│ │ │ │ ├── netif_decl.h
│ │ │ │ └── wifi_netif.c
│ │ │ └── osa/
│ │ │ ├── mem_pool.c
│ │ │ ├── mem_pool_config.c
│ │ │ ├── osa.c
│ │ │ ├── osa_freertos.c
│ │ │ ├── osa_freertos.h
│ │ │ ├── slist.c
│ │ │ └── stack_simple.c
│ │ ├── wifi_bt_firmware/
│ │ │ └── wlan_bt_fw.h
│ │ ├── wifidriver/
│ │ │ ├── incl/
│ │ │ │ ├── mlan.h
│ │ │ │ ├── mlan_11ac.h
│ │ │ │ ├── mlan_11ax.h
│ │ │ │ ├── mlan_11h.h
│ │ │ │ ├── mlan_11k.h
│ │ │ │ ├── mlan_11n.h
│ │ │ │ ├── mlan_11n_aggr.h
│ │ │ │ ├── mlan_11n_rxreorder.h
│ │ │ │ ├── mlan_11v.h
│ │ │ │ ├── mlan_action.h
│ │ │ │ ├── mlan_api.h
│ │ │ │ ├── mlan_decl.h
│ │ │ │ ├── mlan_fw.h
│ │ │ │ ├── mlan_ieee.h
│ │ │ │ ├── mlan_init.h
│ │ │ │ ├── mlan_ioctl.h
│ │ │ │ ├── mlan_join.h
│ │ │ │ ├── mlan_main.h
│ │ │ │ ├── mlan_mbo.h
│ │ │ │ ├── mlan_meas.h
│ │ │ │ ├── mlan_remap_mem_operations.h
│ │ │ │ ├── mlan_uap.h
│ │ │ │ ├── mlan_util.h
│ │ │ │ ├── mlan_wmm.h
│ │ │ │ └── type_decls.h
│ │ │ ├── mlan_11ac.c
│ │ │ ├── mlan_11ax.c
│ │ │ ├── mlan_11d.c
│ │ │ ├── mlan_11h.c
│ │ │ ├── mlan_11k.c
│ │ │ ├── mlan_11n.c
│ │ │ ├── mlan_11n_aggr.c
│ │ │ ├── mlan_11n_rxreorder.c
│ │ │ ├── mlan_11v.c
│ │ │ ├── mlan_action.c
│ │ │ ├── mlan_api.c
│ │ │ ├── mlan_cfp.c
│ │ │ ├── mlan_cmdevt.c
│ │ │ ├── mlan_glue.c
│ │ │ ├── mlan_init.c
│ │ │ ├── mlan_join.c
│ │ │ ├── mlan_mbo.c
│ │ │ ├── mlan_misc.c
│ │ │ ├── mlan_scan.c
│ │ │ ├── mlan_shim.c
│ │ │ ├── mlan_sta_cmd.c
│ │ │ ├── mlan_sta_cmdresp.c
│ │ │ ├── mlan_sta_event.c
│ │ │ ├── mlan_sta_ioctl.c
│ │ │ ├── mlan_sta_rx.c
│ │ │ ├── mlan_txrx.c
│ │ │ ├── mlan_uap_cmdevent.c
│ │ │ ├── mlan_uap_ioctl.c
│ │ │ ├── mlan_wmm.c
│ │ │ ├── wifi-debug.c
│ │ │ ├── wifi-debug.h
│ │ │ ├── wifi-imu.c
│ │ │ ├── wifi-imu.h
│ │ │ ├── wifi-internal.h
│ │ │ ├── wifi-mem.c
│ │ │ ├── wifi-uap.c
│ │ │ ├── wifi-wps.c
│ │ │ ├── wifi.c
│ │ │ ├── wifi_common.h
│ │ │ ├── wifi_pwrmgr.c
│ │ │ └── wpa_supp_if/
│ │ │ ├── incl/
│ │ │ │ ├── rtos_wpa_supp_if.h
│ │ │ │ └── wifi_nxp_internal.h
│ │ │ ├── rtos_wpa_supp_if.c
│ │ │ ├── wifi_nxp.c
│ │ │ └── wifi_nxp_internal.c
│ │ └── wlcmgr/
│ │ ├── wlan.c
│ │ └── wlan_txpwrlimit_cfg.c
│ ├── nxp-evkbimxrt1050-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1020-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1024-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1060-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1064-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1160-cm7-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1170-cm4-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-evkmimxrt1170-cm7-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk64f-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk66f-freertos/
│ │ └── Makefile
│ ├── nxp-frdmk66f-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54018-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54608-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54618-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54628-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-lpcxpresso54s018m-freertos/
│ │ └── Makefile
│ ├── nxp-mimxrt1020-freertos/
│ │ └── Makefile
│ ├── nxp-twrk65f180m-lwip-freertos/
│ │ └── Makefile
│ ├── nxp-twrkv58f220m-lwip-freertos/
│ │ └── Makefile
│ ├── rt1020-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1020-evk-make-freertos-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-make-freertos-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── link_ram.ld
│ ├── rt1060-evk-xpresso-baremetal-builtin/
│ │ ├── .cproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── language.settings.xml
│ │ │ └── org.eclipse.core.resources.prefs
│ │ ├── CMSIS/
│ │ │ ├── cachel1_armv7.h
│ │ │ ├── cmsis_compiler.h
│ │ │ ├── cmsis_gcc.h
│ │ │ ├── cmsis_version.h
│ │ │ ├── core_cm7.h
│ │ │ └── mpu_armv7.h
│ │ ├── Debug/
│ │ │ ├── board/
│ │ │ │ ├── board.su
│ │ │ │ ├── clock_config.su
│ │ │ │ ├── dcd.su
│ │ │ │ ├── peripherals.su
│ │ │ │ ├── pin_mux.su
│ │ │ │ └── subdir.mk
│ │ │ ├── component/
│ │ │ │ ├── lists/
│ │ │ │ │ ├── fsl_component_generic_list.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ ├── serial_manager/
│ │ │ │ │ ├── fsl_component_serial_manager.su
│ │ │ │ │ ├── fsl_component_serial_port_uart.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ └── uart/
│ │ │ │ ├── fsl_adapter_lpuart.su
│ │ │ │ └── subdir.mk
│ │ │ ├── device/
│ │ │ │ ├── subdir.mk
│ │ │ │ └── system_MIMXRT1062.su
│ │ │ ├── drivers/
│ │ │ │ ├── fsl_clock.su
│ │ │ │ ├── fsl_common.su
│ │ │ │ ├── fsl_common_arm.su
│ │ │ │ ├── fsl_gpio.su
│ │ │ │ ├── fsl_lpuart.su
│ │ │ │ ├── fsl_trng.su
│ │ │ │ └── subdir.mk
│ │ │ ├── makefile
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_library.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_memory.ld
│ │ │ ├── sources.mk
│ │ │ ├── startup/
│ │ │ │ ├── startup_mimxrt1062.su
│ │ │ │ └── subdir.mk
│ │ │ ├── utilities/
│ │ │ │ ├── fsl_assert.su
│ │ │ │ ├── fsl_debug_console.su
│ │ │ │ ├── fsl_str.su
│ │ │ │ └── subdir.mk
│ │ │ └── xip/
│ │ │ ├── evkbmimxrt1060_flexspi_nor_config.su
│ │ │ ├── fsl_flexspi_nor_boot.su
│ │ │ └── subdir.mk
│ │ ├── Test/
│ │ │ ├── board/
│ │ │ │ ├── board.su
│ │ │ │ ├── clock_config.su
│ │ │ │ ├── dcd.su
│ │ │ │ ├── peripherals.su
│ │ │ │ ├── pin_mux.su
│ │ │ │ └── subdir.mk
│ │ │ ├── component/
│ │ │ │ ├── lists/
│ │ │ │ │ ├── fsl_component_generic_list.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ ├── serial_manager/
│ │ │ │ │ ├── fsl_component_serial_manager.su
│ │ │ │ │ ├── fsl_component_serial_port_uart.su
│ │ │ │ │ └── subdir.mk
│ │ │ │ └── uart/
│ │ │ │ ├── fsl_adapter_lpuart.su
│ │ │ │ └── subdir.mk
│ │ │ ├── device/
│ │ │ │ ├── subdir.mk
│ │ │ │ └── system_MIMXRT1062.su
│ │ │ ├── drivers/
│ │ │ │ ├── fsl_clock.su
│ │ │ │ ├── fsl_common.su
│ │ │ │ ├── fsl_common_arm.su
│ │ │ │ ├── fsl_gpio.su
│ │ │ │ ├── fsl_lpuart.su
│ │ │ │ ├── fsl_trng.su
│ │ │ │ └── subdir.mk
│ │ │ ├── makefile
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_library.ld
│ │ │ ├── rt1060-evk-xpresso-baremetal-builtin_Debug_memory.ld
│ │ │ ├── sources.mk
│ │ │ ├── startup/
│ │ │ │ ├── startup_mimxrt1062.su
│ │ │ │ └── subdir.mk
│ │ │ ├── utilities/
│ │ │ │ ├── fsl_assert.su
│ │ │ │ ├── fsl_debug_console.su
│ │ │ │ ├── fsl_str.su
│ │ │ │ └── subdir.mk
│ │ │ └── xip/
│ │ │ ├── evkbmimxrt1060_flexspi_nor_config.su
│ │ │ ├── fsl_flexspi_nor_boot.su
│ │ │ └── subdir.mk
│ │ ├── board/
│ │ │ ├── board.c
│ │ │ ├── board.h
│ │ │ ├── clock_config.c
│ │ │ ├── clock_config.h
│ │ │ ├── dcd.c
│ │ │ ├── dcd.h
│ │ │ ├── peripherals.c
│ │ │ ├── peripherals.h
│ │ │ ├── pin_mux.c
│ │ │ └── pin_mux.h
│ │ ├── component/
│ │ │ ├── lists/
│ │ │ │ ├── fsl_component_generic_list.c
│ │ │ │ └── fsl_component_generic_list.h
│ │ │ ├── serial_manager/
│ │ │ │ ├── fsl_component_serial_manager.c
│ │ │ │ ├── fsl_component_serial_manager.h
│ │ │ │ ├── fsl_component_serial_port_internal.h
│ │ │ │ ├── fsl_component_serial_port_uart.c
│ │ │ │ └── fsl_component_serial_port_uart.h
│ │ │ └── uart/
│ │ │ ├── fsl_adapter_lpuart.c
│ │ │ └── fsl_adapter_uart.h
│ │ ├── device/
│ │ │ ├── MIMXRT1062.h
│ │ │ ├── MIMXRT1062_features.h
│ │ │ ├── fsl_device_registers.h
│ │ │ ├── system_MIMXRT1062.c
│ │ │ └── system_MIMXRT1062.h
│ │ ├── drivers/
│ │ │ ├── fsl_clock.c
│ │ │ ├── fsl_clock.h
│ │ │ ├── fsl_common.c
│ │ │ ├── fsl_common.h
│ │ │ ├── fsl_common_arm.c
│ │ │ ├── fsl_common_arm.h
│ │ │ ├── fsl_gpio.c
│ │ │ ├── fsl_gpio.h
│ │ │ ├── fsl_iomuxc.h
│ │ │ ├── fsl_lpuart.c
│ │ │ ├── fsl_lpuart.h
│ │ │ ├── fsl_nic301.h
│ │ │ ├── fsl_trng.c
│ │ │ └── fsl_trng.h
│ │ ├── middleware/
│ │ │ └── bm/
│ │ │ └── readme.txt
│ │ ├── rt1060-evk-xpresso-baremetal-builtin.mex
│ │ ├── source/
│ │ │ ├── hal.h
│ │ │ ├── main.c
│ │ │ ├── mongoose_config.h
│ │ │ └── syscalls.c
│ │ ├── startup/
│ │ │ └── startup_mimxrt1062.c
│ │ ├── utilities/
│ │ │ ├── fsl_assert.c
│ │ │ ├── fsl_debug_console.c
│ │ │ ├── fsl_debug_console.h
│ │ │ ├── fsl_debug_console_conf.h
│ │ │ ├── fsl_str.c
│ │ │ └── fsl_str.h
│ │ └── xip/
│ │ ├── evkbmimxrt1060_flexspi_nor_config.c
│ │ ├── evkbmimxrt1060_flexspi_nor_config.h
│ │ ├── fsl_flexspi_nor_boot.c
│ │ └── fsl_flexspi_nor_boot.h
│ ├── rt1170-evk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── link_ram.ld
│ │ └── mbedtls_config.h
│ └── rt1170-evk-make-freertos-builtin/
│ ├── Makefile
│ ├── README.md
│ └── link_ram.ld
├── pico-sdk/
│ ├── pico-2-w-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── pico-2-w-picosdk-baremetal-builtin-ap/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── pico-2-w-picosdk-freertos-lwip/
│ │ ├── CMakeLists.txt
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOS_Kernel_import.cmake
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── lwipopts.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── pico-rmii/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── driver_rp2040_rmii.c
│ │ ├── driver_rp2040_rmii.h
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── pico-rndis-dashboard/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── msc_disk.c
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── pico-rndis-device/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── pico-w-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── pico-w-picosdk-freertos-lwip/
│ │ ├── CMakeLists.txt
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOS_Kernel_import.cmake
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── lwipopts.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── rm2-pico-picosdk-baremetal-builtin/
│ │ ├── CMakeLists.txt
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── pico_sdk_import.cmake
│ ├── w5500-evb-pico-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── w5500-evb-pico2-picosdk-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── w55rp20-evb-pico-picosdk-baremetal-builtin/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── hal.h
│ ├── main.c
│ ├── mongoose_config.h
│ └── pico_sdk_import.cmake
├── renesas/
│ └── ek-ra6m4-make-baremetal-builtin/
│ ├── Makefile
│ ├── hal.c
│ ├── hal.h
│ ├── link.ld
│ ├── main.c
│ └── mongoose_config.h
├── smtp/
│ ├── README.md
│ └── smtp-client/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── stm32/
│ ├── nucleo-f429zi-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-cube-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ ├── language.settings.xml
│ │ │ ├── org.eclipse.cdt.core.prefs
│ │ │ └── stm32cubeide.project.prefs
│ │ ├── Core/
│ │ │ ├── Inc/
│ │ │ │ ├── FreeRTOSConfig.h
│ │ │ │ ├── hal.h
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ └── stm32f4xx_it.h
│ │ │ ├── Src/
│ │ │ │ ├── freertos.c
│ │ │ │ ├── main.c
│ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ ├── stm32f4xx_hal_timebase_tim.c
│ │ │ │ ├── stm32f4xx_it.c
│ │ │ │ ├── syscalls.c
│ │ │ │ ├── sysmem.c
│ │ │ │ └── system_stm32f4xx.c
│ │ │ └── Startup/
│ │ │ └── startup_stm32f429zitx.s
│ │ ├── Drivers/
│ │ │ ├── BSP/
│ │ │ │ └── Components/
│ │ │ │ └── lan8742/
│ │ │ │ ├── lan8742.c
│ │ │ │ └── lan8742.h
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32F4xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32f429xx.h
│ │ │ │ │ │ ├── stm32f4xx.h
│ │ │ │ │ │ └── system_stm32f4xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32F4xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32f4xx_hal.h
│ │ │ │ ├── stm32f4xx_hal_cortex.h
│ │ │ │ ├── stm32f4xx_hal_def.h
│ │ │ │ ├── stm32f4xx_hal_dma.h
│ │ │ │ ├── stm32f4xx_hal_dma_ex.h
│ │ │ │ ├── stm32f4xx_hal_eth.h
│ │ │ │ ├── stm32f4xx_hal_exti.h
│ │ │ │ ├── stm32f4xx_hal_flash.h
│ │ │ │ ├── stm32f4xx_hal_flash_ex.h
│ │ │ │ ├── stm32f4xx_hal_flash_ramfunc.h
│ │ │ │ ├── stm32f4xx_hal_gpio.h
│ │ │ │ ├── stm32f4xx_hal_gpio_ex.h
│ │ │ │ ├── stm32f4xx_hal_pwr.h
│ │ │ │ ├── stm32f4xx_hal_pwr_ex.h
│ │ │ │ ├── stm32f4xx_hal_rcc.h
│ │ │ │ ├── stm32f4xx_hal_rcc_ex.h
│ │ │ │ ├── stm32f4xx_hal_rng.h
│ │ │ │ ├── stm32f4xx_hal_tim.h
│ │ │ │ ├── stm32f4xx_hal_tim_ex.h
│ │ │ │ ├── stm32f4xx_hal_uart.h
│ │ │ │ ├── stm32f4xx_ll_bus.h
│ │ │ │ ├── stm32f4xx_ll_cortex.h
│ │ │ │ ├── stm32f4xx_ll_dma.h
│ │ │ │ ├── stm32f4xx_ll_exti.h
│ │ │ │ ├── stm32f4xx_ll_gpio.h
│ │ │ │ ├── stm32f4xx_ll_pwr.h
│ │ │ │ ├── stm32f4xx_ll_rcc.h
│ │ │ │ ├── stm32f4xx_ll_rng.h
│ │ │ │ ├── stm32f4xx_ll_system.h
│ │ │ │ ├── stm32f4xx_ll_usart.h
│ │ │ │ └── stm32f4xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32f4xx_hal.c
│ │ │ ├── stm32f4xx_hal_cortex.c
│ │ │ ├── stm32f4xx_hal_dma.c
│ │ │ ├── stm32f4xx_hal_dma_ex.c
│ │ │ ├── stm32f4xx_hal_eth.c
│ │ │ ├── stm32f4xx_hal_exti.c
│ │ │ ├── stm32f4xx_hal_flash.c
│ │ │ ├── stm32f4xx_hal_flash_ex.c
│ │ │ ├── stm32f4xx_hal_flash_ramfunc.c
│ │ │ ├── stm32f4xx_hal_gpio.c
│ │ │ ├── stm32f4xx_hal_pwr.c
│ │ │ ├── stm32f4xx_hal_pwr_ex.c
│ │ │ ├── stm32f4xx_hal_rcc.c
│ │ │ ├── stm32f4xx_hal_rcc_ex.c
│ │ │ ├── stm32f4xx_hal_rng.c
│ │ │ ├── stm32f4xx_hal_tim.c
│ │ │ ├── stm32f4xx_hal_tim_ex.c
│ │ │ └── stm32f4xx_hal_uart.c
│ │ ├── LWIP/
│ │ │ ├── App/
│ │ │ │ ├── lwip.c
│ │ │ │ └── lwip.h
│ │ │ └── Target/
│ │ │ ├── ethernetif.c
│ │ │ ├── ethernetif.h
│ │ │ └── lwipopts.h
│ │ ├── Middlewares/
│ │ │ └── Third_Party/
│ │ │ ├── FreeRTOS/
│ │ │ │ └── Source/
│ │ │ │ ├── CMSIS_RTOS/
│ │ │ │ │ ├── cmsis_os.c
│ │ │ │ │ └── cmsis_os.h
│ │ │ │ ├── LICENSE
│ │ │ │ ├── croutine.c
│ │ │ │ ├── event_groups.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── FreeRTOS.h
│ │ │ │ │ ├── StackMacros.h
│ │ │ │ │ ├── atomic.h
│ │ │ │ │ ├── croutine.h
│ │ │ │ │ ├── deprecated_definitions.h
│ │ │ │ │ ├── event_groups.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── message_buffer.h
│ │ │ │ │ ├── mpu_prototypes.h
│ │ │ │ │ ├── mpu_wrappers.h
│ │ │ │ │ ├── portable.h
│ │ │ │ │ ├── projdefs.h
│ │ │ │ │ ├── queue.h
│ │ │ │ │ ├── semphr.h
│ │ │ │ │ ├── stack_macros.h
│ │ │ │ │ ├── stream_buffer.h
│ │ │ │ │ ├── task.h
│ │ │ │ │ └── timers.h
│ │ │ │ ├── list.c
│ │ │ │ ├── portable/
│ │ │ │ │ ├── GCC/
│ │ │ │ │ │ └── ARM_CM4F/
│ │ │ │ │ │ ├── port.c
│ │ │ │ │ │ └── portmacro.h
│ │ │ │ │ └── MemMang/
│ │ │ │ │ └── heap_4.c
│ │ │ │ ├── queue.c
│ │ │ │ ├── stream_buffer.c
│ │ │ │ ├── tasks.c
│ │ │ │ └── timers.c
│ │ │ └── LwIP/
│ │ │ ├── src/
│ │ │ │ ├── api/
│ │ │ │ │ ├── api_lib.c
│ │ │ │ │ ├── api_msg.c
│ │ │ │ │ ├── err.c
│ │ │ │ │ ├── if_api.c
│ │ │ │ │ ├── netbuf.c
│ │ │ │ │ ├── netdb.c
│ │ │ │ │ ├── netifapi.c
│ │ │ │ │ ├── sockets.c
│ │ │ │ │ └── tcpip.c
│ │ │ │ ├── apps/
│ │ │ │ │ └── mqtt/
│ │ │ │ │ └── mqtt.c
│ │ │ │ ├── core/
│ │ │ │ │ ├── altcp.c
│ │ │ │ │ ├── altcp_alloc.c
│ │ │ │ │ ├── altcp_tcp.c
│ │ │ │ │ ├── def.c
│ │ │ │ │ ├── dns.c
│ │ │ │ │ ├── inet_chksum.c
│ │ │ │ │ ├── init.c
│ │ │ │ │ ├── ip.c
│ │ │ │ │ ├── ipv4/
│ │ │ │ │ │ ├── autoip.c
│ │ │ │ │ │ ├── dhcp.c
│ │ │ │ │ │ ├── etharp.c
│ │ │ │ │ │ ├── icmp.c
│ │ │ │ │ │ ├── igmp.c
│ │ │ │ │ │ ├── ip4.c
│ │ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ │ └── ip4_frag.c
│ │ │ │ │ ├── ipv6/
│ │ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ │ ├── ethip6.c
│ │ │ │ │ │ ├── icmp6.c
│ │ │ │ │ │ ├── inet6.c
│ │ │ │ │ │ ├── ip6.c
│ │ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ │ ├── mld6.c
│ │ │ │ │ │ └── nd6.c
│ │ │ │ │ ├── mem.c
│ │ │ │ │ ├── memp.c
│ │ │ │ │ ├── netif.c
│ │ │ │ │ ├── pbuf.c
│ │ │ │ │ ├── raw.c
│ │ │ │ │ ├── stats.c
│ │ │ │ │ ├── sys.c
│ │ │ │ │ ├── tcp.c
│ │ │ │ │ ├── tcp_in.c
│ │ │ │ │ ├── tcp_out.c
│ │ │ │ │ ├── timeouts.c
│ │ │ │ │ └── udp.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── compat/
│ │ │ │ │ │ ├── posix/
│ │ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ │ └── sys/
│ │ │ │ │ │ │ └── socket.h
│ │ │ │ │ │ └── stdc/
│ │ │ │ │ │ └── errno.h
│ │ │ │ │ ├── lwip/
│ │ │ │ │ │ ├── altcp.h
│ │ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ │ ├── api.h
│ │ │ │ │ │ ├── apps/
│ │ │ │ │ │ │ ├── altcp_proxyconnect.h
│ │ │ │ │ │ │ ├── altcp_tls_mbedtls_opts.h
│ │ │ │ │ │ │ ├── fs.h
│ │ │ │ │ │ │ ├── http_client.h
│ │ │ │ │ │ │ ├── httpd.h
│ │ │ │ │ │ │ ├── httpd_opts.h
│ │ │ │ │ │ │ ├── lwiperf.h
│ │ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ │ ├── mdns_priv.h
│ │ │ │ │ │ │ ├── mqtt.h
│ │ │ │ │ │ │ ├── mqtt_opts.h
│ │ │ │ │ │ │ ├── mqtt_priv.h
│ │ │ │ │ │ │ ├── netbiosns.h
│ │ │ │ │ │ │ ├── netbiosns_opts.h
│ │ │ │ │ │ │ ├── smtp.h
│ │ │ │ │ │ │ ├── smtp_opts.h
│ │ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ │ ├── snmp_core.h
│ │ │ │ │ │ │ ├── snmp_mib2.h
│ │ │ │ │ │ │ ├── snmp_opts.h
│ │ │ │ │ │ │ ├── snmp_scalar.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_framework.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_usm.h
│ │ │ │ │ │ │ ├── snmp_table.h
│ │ │ │ │ │ │ ├── snmp_threadsync.h
│ │ │ │ │ │ │ ├── snmpv3.h
│ │ │ │ │ │ │ ├── sntp.h
│ │ │ │ │ │ │ ├── sntp_opts.h
│ │ │ │ │ │ │ ├── tftp_opts.h
│ │ │ │ │ │ │ └── tftp_server.h
│ │ │ │ │ │ ├── arch.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── debug.h
│ │ │ │ │ │ ├── def.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── err.h
│ │ │ │ │ │ ├── errno.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethip6.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── if_api.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── inet.h
│ │ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ │ ├── init.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ │ ├── mem.h
│ │ │ │ │ │ ├── memp.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── netbuf.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ ├── netif.h
│ │ │ │ │ │ ├── netifapi.h
│ │ │ │ │ │ ├── opt.h
│ │ │ │ │ │ ├── pbuf.h
│ │ │ │ │ │ ├── priv/
│ │ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ │ ├── prot/
│ │ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ │ └── udp.h
│ │ │ │ │ │ ├── raw.h
│ │ │ │ │ │ ├── sio.h
│ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ ├── sockets.h
│ │ │ │ │ │ ├── stats.h
│ │ │ │ │ │ ├── sys.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ │ ├── tcpip.h
│ │ │ │ │ │ ├── timeouts.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ └── netif/
│ │ │ │ │ ├── bridgeif.h
│ │ │ │ │ ├── bridgeif_opts.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethernet.h
│ │ │ │ │ ├── ieee802154.h
│ │ │ │ │ ├── lowpan6.h
│ │ │ │ │ ├── lowpan6_ble.h
│ │ │ │ │ ├── lowpan6_common.h
│ │ │ │ │ ├── lowpan6_opts.h
│ │ │ │ │ ├── ppp/
│ │ │ │ │ │ ├── ccp.h
│ │ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ │ ├── chap-new.h
│ │ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ │ ├── eap.h
│ │ │ │ │ │ ├── ecp.h
│ │ │ │ │ │ ├── eui64.h
│ │ │ │ │ │ ├── fsm.h
│ │ │ │ │ │ ├── ipcp.h
│ │ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ │ ├── lcp.h
│ │ │ │ │ │ ├── magic.h
│ │ │ │ │ │ ├── mppe.h
│ │ │ │ │ │ ├── ppp.h
│ │ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ │ ├── pppapi.h
│ │ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ │ ├── pppoe.h
│ │ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ │ ├── pppos.h
│ │ │ │ │ │ ├── upap.h
│ │ │ │ │ │ └── vj.h
│ │ │ │ │ ├── slipif.h
│ │ │ │ │ └── zepif.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.c
│ │ │ │ ├── bridgeif_fdb.c
│ │ │ │ ├── ethernet.c
│ │ │ │ ├── lowpan6.c
│ │ │ │ ├── lowpan6_ble.c
│ │ │ │ ├── lowpan6_common.c
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── auth.c
│ │ │ │ │ ├── ccp.c
│ │ │ │ │ ├── chap-md5.c
│ │ │ │ │ ├── chap-new.c
│ │ │ │ │ ├── chap_ms.c
│ │ │ │ │ ├── demand.c
│ │ │ │ │ ├── eap.c
│ │ │ │ │ ├── ecp.c
│ │ │ │ │ ├── eui64.c
│ │ │ │ │ ├── fsm.c
│ │ │ │ │ ├── ipcp.c
│ │ │ │ │ ├── ipv6cp.c
│ │ │ │ │ ├── lcp.c
│ │ │ │ │ ├── magic.c
│ │ │ │ │ ├── mppe.c
│ │ │ │ │ ├── multilink.c
│ │ │ │ │ ├── ppp.c
│ │ │ │ │ ├── pppapi.c
│ │ │ │ │ ├── pppcrypt.c
│ │ │ │ │ ├── pppoe.c
│ │ │ │ │ ├── pppol2tp.c
│ │ │ │ │ ├── pppos.c
│ │ │ │ │ ├── upap.c
│ │ │ │ │ ├── utils.c
│ │ │ │ │ └── vj.c
│ │ │ │ ├── slipif.c
│ │ │ │ └── zepif.c
│ │ │ └── system/
│ │ │ ├── OS/
│ │ │ │ └── sys_arch.c
│ │ │ └── arch/
│ │ │ ├── bpstruct.h
│ │ │ ├── cc.h
│ │ │ ├── cpu.h
│ │ │ ├── epstruct.h
│ │ │ ├── init.h
│ │ │ ├── lib.h
│ │ │ ├── perf.h
│ │ │ └── sys_arch.h
│ │ ├── README.md
│ │ ├── STM32F429ZITX_FLASH.ld
│ │ ├── STM32F429ZITX_RAM.ld
│ │ ├── nucleo-f429zi-cube-freertos-lwip.ioc
│ │ └── nucleo-f429zi-cube-freertos-lwip.launch
│ ├── nucleo-f429zi-keil-baremetal/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F429ZITx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f4xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ │ │ └── stm32f4xx_it.c
│ │ │ │ │ ├── startup_stm32f429xx.s
│ │ │ │ │ └── system_stm32f4xx.c
│ │ │ │ └── project.script
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f429zi-keil-freertos/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F429ZITx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f4xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f4xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f4xx_hal_msp.c
│ │ │ │ │ │ └── stm32f4xx_it.c
│ │ │ │ │ ├── startup_stm32f429xx.s
│ │ │ │ │ └── system_stm32f4xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f429zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f429zi-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── nucleo-f429zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-cube-freertos-lwip/
│ │ ├── .cproject
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ ├── language.settings.xml
│ │ │ └── stm32cubeide.project.prefs
│ │ ├── Core/
│ │ │ ├── Inc/
│ │ │ │ ├── FreeRTOSConfig.h
│ │ │ │ ├── hal.h
│ │ │ │ ├── main.h
│ │ │ │ ├── mongoose_config.h
│ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ └── stm32f7xx_it.h
│ │ │ ├── Src/
│ │ │ │ ├── freertos.c
│ │ │ │ ├── main.c
│ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ ├── stm32f7xx_it.c
│ │ │ │ ├── syscalls.c
│ │ │ │ ├── sysmem.c
│ │ │ │ └── system_stm32f7xx.c
│ │ │ └── Startup/
│ │ │ └── startup_stm32f746zgtx.s
│ │ ├── Drivers/
│ │ │ ├── BSP/
│ │ │ │ └── Components/
│ │ │ │ └── lan8742/
│ │ │ │ ├── lan8742.c
│ │ │ │ └── lan8742.h
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32F7xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32f746xx.h
│ │ │ │ │ │ ├── stm32f7xx.h
│ │ │ │ │ │ └── system_stm32f7xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32F7xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32f7xx_hal.h
│ │ │ │ ├── stm32f7xx_hal_cortex.h
│ │ │ │ ├── stm32f7xx_hal_def.h
│ │ │ │ ├── stm32f7xx_hal_dma.h
│ │ │ │ ├── stm32f7xx_hal_dma_ex.h
│ │ │ │ ├── stm32f7xx_hal_eth.h
│ │ │ │ ├── stm32f7xx_hal_exti.h
│ │ │ │ ├── stm32f7xx_hal_flash.h
│ │ │ │ ├── stm32f7xx_hal_flash_ex.h
│ │ │ │ ├── stm32f7xx_hal_gpio.h
│ │ │ │ ├── stm32f7xx_hal_gpio_ex.h
│ │ │ │ ├── stm32f7xx_hal_i2c.h
│ │ │ │ ├── stm32f7xx_hal_i2c_ex.h
│ │ │ │ ├── stm32f7xx_hal_pwr.h
│ │ │ │ ├── stm32f7xx_hal_pwr_ex.h
│ │ │ │ ├── stm32f7xx_hal_rcc.h
│ │ │ │ ├── stm32f7xx_hal_rcc_ex.h
│ │ │ │ ├── stm32f7xx_hal_rng.h
│ │ │ │ ├── stm32f7xx_hal_tim.h
│ │ │ │ ├── stm32f7xx_hal_tim_ex.h
│ │ │ │ ├── stm32f7xx_hal_uart.h
│ │ │ │ ├── stm32f7xx_hal_uart_ex.h
│ │ │ │ ├── stm32f7xx_ll_bus.h
│ │ │ │ ├── stm32f7xx_ll_cortex.h
│ │ │ │ ├── stm32f7xx_ll_dma.h
│ │ │ │ ├── stm32f7xx_ll_exti.h
│ │ │ │ ├── stm32f7xx_ll_gpio.h
│ │ │ │ ├── stm32f7xx_ll_pwr.h
│ │ │ │ ├── stm32f7xx_ll_rcc.h
│ │ │ │ ├── stm32f7xx_ll_rng.h
│ │ │ │ ├── stm32f7xx_ll_system.h
│ │ │ │ ├── stm32f7xx_ll_usart.h
│ │ │ │ └── stm32f7xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32f7xx_hal.c
│ │ │ ├── stm32f7xx_hal_cortex.c
│ │ │ ├── stm32f7xx_hal_dma.c
│ │ │ ├── stm32f7xx_hal_dma_ex.c
│ │ │ ├── stm32f7xx_hal_eth.c
│ │ │ ├── stm32f7xx_hal_exti.c
│ │ │ ├── stm32f7xx_hal_flash.c
│ │ │ ├── stm32f7xx_hal_flash_ex.c
│ │ │ ├── stm32f7xx_hal_gpio.c
│ │ │ ├── stm32f7xx_hal_i2c.c
│ │ │ ├── stm32f7xx_hal_i2c_ex.c
│ │ │ ├── stm32f7xx_hal_pwr.c
│ │ │ ├── stm32f7xx_hal_pwr_ex.c
│ │ │ ├── stm32f7xx_hal_rcc.c
│ │ │ ├── stm32f7xx_hal_rcc_ex.c
│ │ │ ├── stm32f7xx_hal_rng.c
│ │ │ ├── stm32f7xx_hal_tim.c
│ │ │ ├── stm32f7xx_hal_tim_ex.c
│ │ │ ├── stm32f7xx_hal_uart.c
│ │ │ └── stm32f7xx_hal_uart_ex.c
│ │ ├── LWIP/
│ │ │ ├── App/
│ │ │ │ ├── lwip.c
│ │ │ │ └── lwip.h
│ │ │ └── Target/
│ │ │ ├── ethernetif.c
│ │ │ ├── ethernetif.h
│ │ │ └── lwipopts.h
│ │ ├── Middlewares/
│ │ │ └── Third_Party/
│ │ │ ├── FreeRTOS/
│ │ │ │ └── Source/
│ │ │ │ ├── CMSIS_RTOS/
│ │ │ │ │ ├── cmsis_os.c
│ │ │ │ │ └── cmsis_os.h
│ │ │ │ ├── croutine.c
│ │ │ │ ├── event_groups.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── FreeRTOS.h
│ │ │ │ │ ├── StackMacros.h
│ │ │ │ │ ├── croutine.h
│ │ │ │ │ ├── deprecated_definitions.h
│ │ │ │ │ ├── event_groups.h
│ │ │ │ │ ├── list.h
│ │ │ │ │ ├── message_buffer.h
│ │ │ │ │ ├── mpu_prototypes.h
│ │ │ │ │ ├── mpu_wrappers.h
│ │ │ │ │ ├── portable.h
│ │ │ │ │ ├── projdefs.h
│ │ │ │ │ ├── queue.h
│ │ │ │ │ ├── semphr.h
│ │ │ │ │ ├── stack_macros.h
│ │ │ │ │ ├── stream_buffer.h
│ │ │ │ │ ├── task.h
│ │ │ │ │ └── timers.h
│ │ │ │ ├── list.c
│ │ │ │ ├── portable/
│ │ │ │ │ ├── GCC/
│ │ │ │ │ │ └── ARM_CM7/
│ │ │ │ │ │ └── r0p1/
│ │ │ │ │ │ ├── port.c
│ │ │ │ │ │ └── portmacro.h
│ │ │ │ │ └── MemMang/
│ │ │ │ │ └── heap_4.c
│ │ │ │ ├── queue.c
│ │ │ │ ├── stream_buffer.c
│ │ │ │ ├── tasks.c
│ │ │ │ └── timers.c
│ │ │ └── LwIP/
│ │ │ ├── src/
│ │ │ │ ├── api/
│ │ │ │ │ ├── api_lib.c
│ │ │ │ │ ├── api_msg.c
│ │ │ │ │ ├── err.c
│ │ │ │ │ ├── if_api.c
│ │ │ │ │ ├── netbuf.c
│ │ │ │ │ ├── netdb.c
│ │ │ │ │ ├── netifapi.c
│ │ │ │ │ ├── sockets.c
│ │ │ │ │ └── tcpip.c
│ │ │ │ ├── apps/
│ │ │ │ │ └── mqtt/
│ │ │ │ │ └── mqtt.c
│ │ │ │ ├── core/
│ │ │ │ │ ├── altcp.c
│ │ │ │ │ ├── altcp_alloc.c
│ │ │ │ │ ├── altcp_tcp.c
│ │ │ │ │ ├── def.c
│ │ │ │ │ ├── dns.c
│ │ │ │ │ ├── inet_chksum.c
│ │ │ │ │ ├── init.c
│ │ │ │ │ ├── ip.c
│ │ │ │ │ ├── ipv4/
│ │ │ │ │ │ ├── autoip.c
│ │ │ │ │ │ ├── dhcp.c
│ │ │ │ │ │ ├── etharp.c
│ │ │ │ │ │ ├── icmp.c
│ │ │ │ │ │ ├── igmp.c
│ │ │ │ │ │ ├── ip4.c
│ │ │ │ │ │ ├── ip4_addr.c
│ │ │ │ │ │ └── ip4_frag.c
│ │ │ │ │ ├── ipv6/
│ │ │ │ │ │ ├── dhcp6.c
│ │ │ │ │ │ ├── ethip6.c
│ │ │ │ │ │ ├── icmp6.c
│ │ │ │ │ │ ├── inet6.c
│ │ │ │ │ │ ├── ip6.c
│ │ │ │ │ │ ├── ip6_addr.c
│ │ │ │ │ │ ├── ip6_frag.c
│ │ │ │ │ │ ├── mld6.c
│ │ │ │ │ │ └── nd6.c
│ │ │ │ │ ├── mem.c
│ │ │ │ │ ├── memp.c
│ │ │ │ │ ├── netif.c
│ │ │ │ │ ├── pbuf.c
│ │ │ │ │ ├── raw.c
│ │ │ │ │ ├── stats.c
│ │ │ │ │ ├── sys.c
│ │ │ │ │ ├── tcp.c
│ │ │ │ │ ├── tcp_in.c
│ │ │ │ │ ├── tcp_out.c
│ │ │ │ │ ├── timeouts.c
│ │ │ │ │ └── udp.c
│ │ │ │ ├── include/
│ │ │ │ │ ├── compat/
│ │ │ │ │ │ ├── posix/
│ │ │ │ │ │ │ ├── arpa/
│ │ │ │ │ │ │ │ └── inet.h
│ │ │ │ │ │ │ ├── net/
│ │ │ │ │ │ │ │ └── if.h
│ │ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ │ └── sys/
│ │ │ │ │ │ │ └── socket.h
│ │ │ │ │ │ └── stdc/
│ │ │ │ │ │ └── errno.h
│ │ │ │ │ ├── lwip/
│ │ │ │ │ │ ├── altcp.h
│ │ │ │ │ │ ├── altcp_tcp.h
│ │ │ │ │ │ ├── altcp_tls.h
│ │ │ │ │ │ ├── api.h
│ │ │ │ │ │ ├── apps/
│ │ │ │ │ │ │ ├── altcp_proxyconnect.h
│ │ │ │ │ │ │ ├── altcp_tls_mbedtls_opts.h
│ │ │ │ │ │ │ ├── fs.h
│ │ │ │ │ │ │ ├── http_client.h
│ │ │ │ │ │ │ ├── httpd.h
│ │ │ │ │ │ │ ├── httpd_opts.h
│ │ │ │ │ │ │ ├── lwiperf.h
│ │ │ │ │ │ │ ├── mdns.h
│ │ │ │ │ │ │ ├── mdns_opts.h
│ │ │ │ │ │ │ ├── mdns_priv.h
│ │ │ │ │ │ │ ├── mqtt.h
│ │ │ │ │ │ │ ├── mqtt_opts.h
│ │ │ │ │ │ │ ├── mqtt_priv.h
│ │ │ │ │ │ │ ├── netbiosns.h
│ │ │ │ │ │ │ ├── netbiosns_opts.h
│ │ │ │ │ │ │ ├── smtp.h
│ │ │ │ │ │ │ ├── smtp_opts.h
│ │ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ │ ├── snmp_core.h
│ │ │ │ │ │ │ ├── snmp_mib2.h
│ │ │ │ │ │ │ ├── snmp_opts.h
│ │ │ │ │ │ │ ├── snmp_scalar.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_framework.h
│ │ │ │ │ │ │ ├── snmp_snmpv2_usm.h
│ │ │ │ │ │ │ ├── snmp_table.h
│ │ │ │ │ │ │ ├── snmp_threadsync.h
│ │ │ │ │ │ │ ├── snmpv3.h
│ │ │ │ │ │ │ ├── sntp.h
│ │ │ │ │ │ │ ├── sntp_opts.h
│ │ │ │ │ │ │ ├── tftp_opts.h
│ │ │ │ │ │ │ └── tftp_server.h
│ │ │ │ │ │ ├── arch.h
│ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ ├── debug.h
│ │ │ │ │ │ ├── def.h
│ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ ├── err.h
│ │ │ │ │ │ ├── errno.h
│ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ ├── ethip6.h
│ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ ├── if_api.h
│ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ ├── inet.h
│ │ │ │ │ │ ├── inet_chksum.h
│ │ │ │ │ │ ├── init.h
│ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ ├── ip4_addr.h
│ │ │ │ │ │ ├── ip4_frag.h
│ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ ├── ip6_addr.h
│ │ │ │ │ │ ├── ip6_frag.h
│ │ │ │ │ │ ├── ip6_zone.h
│ │ │ │ │ │ ├── ip_addr.h
│ │ │ │ │ │ ├── mem.h
│ │ │ │ │ │ ├── memp.h
│ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ ├── netbuf.h
│ │ │ │ │ │ ├── netdb.h
│ │ │ │ │ │ ├── netif.h
│ │ │ │ │ │ ├── netifapi.h
│ │ │ │ │ │ ├── opt.h
│ │ │ │ │ │ ├── pbuf.h
│ │ │ │ │ │ ├── priv/
│ │ │ │ │ │ │ ├── altcp_priv.h
│ │ │ │ │ │ │ ├── api_msg.h
│ │ │ │ │ │ │ ├── mem_priv.h
│ │ │ │ │ │ │ ├── memp_priv.h
│ │ │ │ │ │ │ ├── memp_std.h
│ │ │ │ │ │ │ ├── nd6_priv.h
│ │ │ │ │ │ │ ├── raw_priv.h
│ │ │ │ │ │ │ ├── sockets_priv.h
│ │ │ │ │ │ │ ├── tcp_priv.h
│ │ │ │ │ │ │ └── tcpip_priv.h
│ │ │ │ │ │ ├── prot/
│ │ │ │ │ │ │ ├── autoip.h
│ │ │ │ │ │ │ ├── dhcp.h
│ │ │ │ │ │ │ ├── dhcp6.h
│ │ │ │ │ │ │ ├── dns.h
│ │ │ │ │ │ │ ├── etharp.h
│ │ │ │ │ │ │ ├── ethernet.h
│ │ │ │ │ │ │ ├── iana.h
│ │ │ │ │ │ │ ├── icmp.h
│ │ │ │ │ │ │ ├── icmp6.h
│ │ │ │ │ │ │ ├── ieee.h
│ │ │ │ │ │ │ ├── igmp.h
│ │ │ │ │ │ │ ├── ip.h
│ │ │ │ │ │ │ ├── ip4.h
│ │ │ │ │ │ │ ├── ip6.h
│ │ │ │ │ │ │ ├── mld6.h
│ │ │ │ │ │ │ ├── nd6.h
│ │ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ │ └── udp.h
│ │ │ │ │ │ ├── raw.h
│ │ │ │ │ │ ├── sio.h
│ │ │ │ │ │ ├── snmp.h
│ │ │ │ │ │ ├── sockets.h
│ │ │ │ │ │ ├── stats.h
│ │ │ │ │ │ ├── sys.h
│ │ │ │ │ │ ├── tcp.h
│ │ │ │ │ │ ├── tcpbase.h
│ │ │ │ │ │ ├── tcpip.h
│ │ │ │ │ │ ├── timeouts.h
│ │ │ │ │ │ └── udp.h
│ │ │ │ │ └── netif/
│ │ │ │ │ ├── bridgeif.h
│ │ │ │ │ ├── bridgeif_opts.h
│ │ │ │ │ ├── etharp.h
│ │ │ │ │ ├── ethernet.h
│ │ │ │ │ ├── ieee802154.h
│ │ │ │ │ ├── lowpan6.h
│ │ │ │ │ ├── lowpan6_ble.h
│ │ │ │ │ ├── lowpan6_common.h
│ │ │ │ │ ├── lowpan6_opts.h
│ │ │ │ │ ├── ppp/
│ │ │ │ │ │ ├── ccp.h
│ │ │ │ │ │ ├── chap-md5.h
│ │ │ │ │ │ ├── chap-new.h
│ │ │ │ │ │ ├── chap_ms.h
│ │ │ │ │ │ ├── eap.h
│ │ │ │ │ │ ├── ecp.h
│ │ │ │ │ │ ├── eui64.h
│ │ │ │ │ │ ├── fsm.h
│ │ │ │ │ │ ├── ipcp.h
│ │ │ │ │ │ ├── ipv6cp.h
│ │ │ │ │ │ ├── lcp.h
│ │ │ │ │ │ ├── magic.h
│ │ │ │ │ │ ├── mppe.h
│ │ │ │ │ │ ├── ppp.h
│ │ │ │ │ │ ├── ppp_impl.h
│ │ │ │ │ │ ├── ppp_opts.h
│ │ │ │ │ │ ├── pppapi.h
│ │ │ │ │ │ ├── pppcrypt.h
│ │ │ │ │ │ ├── pppdebug.h
│ │ │ │ │ │ ├── pppoe.h
│ │ │ │ │ │ ├── pppol2tp.h
│ │ │ │ │ │ ├── pppos.h
│ │ │ │ │ │ ├── upap.h
│ │ │ │ │ │ └── vj.h
│ │ │ │ │ ├── slipif.h
│ │ │ │ │ └── zepif.h
│ │ │ │ └── netif/
│ │ │ │ ├── bridgeif.c
│ │ │ │ ├── bridgeif_fdb.c
│ │ │ │ ├── ethernet.c
│ │ │ │ ├── lowpan6.c
│ │ │ │ ├── lowpan6_ble.c
│ │ │ │ ├── lowpan6_common.c
│ │ │ │ ├── ppp/
│ │ │ │ │ ├── auth.c
│ │ │ │ │ ├── ccp.c
│ │ │ │ │ ├── chap-md5.c
│ │ │ │ │ ├── chap-new.c
│ │ │ │ │ ├── chap_ms.c
│ │ │ │ │ ├── demand.c
│ │ │ │ │ ├── eap.c
│ │ │ │ │ ├── ecp.c
│ │ │ │ │ ├── eui64.c
│ │ │ │ │ ├── fsm.c
│ │ │ │ │ ├── ipcp.c
│ │ │ │ │ ├── ipv6cp.c
│ │ │ │ │ ├── lcp.c
│ │ │ │ │ ├── magic.c
│ │ │ │ │ ├── mppe.c
│ │ │ │ │ ├── multilink.c
│ │ │ │ │ ├── ppp.c
│ │ │ │ │ ├── pppapi.c
│ │ │ │ │ ├── pppcrypt.c
│ │ │ │ │ ├── pppoe.c
│ │ │ │ │ ├── pppol2tp.c
│ │ │ │ │ ├── pppos.c
│ │ │ │ │ ├── upap.c
│ │ │ │ │ ├── utils.c
│ │ │ │ │ └── vj.c
│ │ │ │ ├── slipif.c
│ │ │ │ └── zepif.c
│ │ │ └── system/
│ │ │ ├── OS/
│ │ │ │ └── sys_arch.c
│ │ │ └── arch/
│ │ │ ├── bpstruct.h
│ │ │ ├── cc.h
│ │ │ ├── cpu.h
│ │ │ ├── epstruct.h
│ │ │ ├── init.h
│ │ │ ├── lib.h
│ │ │ ├── perf.h
│ │ │ └── sys_arch.h
│ │ ├── README.md
│ │ ├── STM32F746ZGTX_FLASH.ld
│ │ ├── STM32F746ZGTX_RAM.ld
│ │ ├── nucleo-f746zg-cube-freertos-lwip Debug.launch
│ │ └── nucleo-f746zg-cube-freertos-lwip.ioc
│ ├── nucleo-f746zg-keil-baremetal/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── _Target_1/
│ │ │ │ ├── Pre_Include_Global.h
│ │ │ │ └── RTE_Components.h
│ │ │ └── _Test/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos-tcp/
│ │ ├── EventRecorderStub.scvd
│ │ ├── FreeRTOSIPConfig.h
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── phyHandling.c
│ │ ├── phyHandling.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos_cmsis2/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-freertos_cmsis2-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ ├── RTOS/
│ │ │ │ └── FreeRTOSConfig.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ └── RTX_Conf_CM.c
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx-mdk/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ └── RTX_Conf_CM.c
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── Net_Config.c
│ │ │ │ ├── Net_Config_BSD.h
│ │ │ │ ├── Net_Config_ETH_0.h
│ │ │ │ ├── Net_Config_TCP.h
│ │ │ │ └── Net_Config_UDP.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5-lwip/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── ethif_config.h
│ │ │ │ └── lwipopts.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-keil-rtx5-mdk/
│ │ ├── EventRecorderStub.scvd
│ │ ├── README.md
│ │ ├── RTE/
│ │ │ ├── CMSIS/
│ │ │ │ ├── RTX_Config.c
│ │ │ │ └── RTX_Config.h
│ │ │ ├── Device/
│ │ │ │ ├── STM32F746ZGTx/
│ │ │ │ │ ├── FrameworkCubeMX.gpdsc
│ │ │ │ │ ├── MX_Device.h
│ │ │ │ │ ├── STCubeGenerated/
│ │ │ │ │ │ ├── .mxproject
│ │ │ │ │ │ ├── Inc/
│ │ │ │ │ │ │ ├── main.h
│ │ │ │ │ │ │ ├── stm32f7xx_hal_conf.h
│ │ │ │ │ │ │ └── stm32f7xx_it.h
│ │ │ │ │ │ ├── STCubeGenerated.ioc
│ │ │ │ │ │ └── Src/
│ │ │ │ │ │ ├── main.c
│ │ │ │ │ │ ├── stm32f7xx_hal_msp.c
│ │ │ │ │ │ ├── stm32f7xx_hal_timebase_tim.c
│ │ │ │ │ │ └── stm32f7xx_it.c
│ │ │ │ │ ├── startup_stm32f746xx.s
│ │ │ │ │ └── system_stm32f7xx.c
│ │ │ │ └── project.script
│ │ │ ├── Network/
│ │ │ │ ├── Net_Config.c
│ │ │ │ ├── Net_Config_BSD.h
│ │ │ │ ├── Net_Config_ETH_0.h
│ │ │ │ ├── Net_Config_TCP.h
│ │ │ │ └── Net_Config_UDP.h
│ │ │ └── _Target_1/
│ │ │ ├── Pre_Include_Global.h
│ │ │ └── RTE_Components.h
│ │ ├── device-dashboard.uvguix
│ │ ├── device-dashboard.uvoptx
│ │ ├── device-dashboard.uvprojx
│ │ ├── hal.h
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-f746zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-f746zg-make-baremetal-builtin-cmsis_driver/
│ │ ├── MX_Device.h
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── RTE_Components.h
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mbedtls_config.h
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── nucleo-f746zg-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── nucleo-f746zg-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-f746zg-make-freertos-tcp/
│ │ ├── FreeRTOSConfig.h
│ │ ├── FreeRTOSIPConfig.h
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── stm32f7xx_hal.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── nucleo-g031-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ └── syscalls.c
│ ├── nucleo-h563zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h563zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h723zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h723zg-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-cube-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-cube-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── nucleo-h743zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── nucleo-h743zi-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── portenta-h7-cube-baremetal-builtin/
│ │ ├── .mxproject
│ │ ├── .project
│ │ ├── .settings/
│ │ │ └── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ ├── CM4/
│ │ │ ├── .cproject
│ │ │ ├── .project
│ │ │ ├── .settings/
│ │ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ │ ├── language.settings.xml
│ │ │ │ └── stm32cubeide.project.prefs
│ │ │ ├── Core/
│ │ │ │ ├── Inc/
│ │ │ │ │ ├── main.h
│ │ │ │ │ ├── stm32h7xx_hal_conf.h
│ │ │ │ │ └── stm32h7xx_it.h
│ │ │ │ ├── Src/
│ │ │ │ │ ├── main.c
│ │ │ │ │ ├── stm32h7xx_hal_msp.c
│ │ │ │ │ ├── stm32h7xx_it.c
│ │ │ │ │ ├── syscalls.c
│ │ │ │ │ └── sysmem.c
│ │ │ │ └── Startup/
│ │ │ │ └── startup_stm32h747xihx.s
│ │ │ └── STM32H747XIHX_FLASH.ld
│ │ ├── CM7/
│ │ │ ├── .cproject
│ │ │ ├── .project
│ │ │ ├── .settings/
│ │ │ │ ├── com.st.stm32cube.ide.mcu.sfrview.prefs
│ │ │ │ ├── language.settings.xml
│ │ │ │ └── stm32cubeide.project.prefs
│ │ │ ├── Core/
│ │ │ │ ├── Inc/
│ │ │ │ │ ├── main.h
│ │ │ │ │ ├── mongoose_config.h
│ │ │ │ │ ├── stm32h7xx_hal_conf.h
│ │ │ │ │ └── stm32h7xx_it.h
│ │ │ │ ├── Src/
│ │ │ │ │ ├── main.c
│ │ │ │ │ ├── stm32h7xx_hal_msp.c
│ │ │ │ │ ├── stm32h7xx_it.c
│ │ │ │ │ ├── syscalls.c
│ │ │ │ │ └── sysmem.c
│ │ │ │ └── Startup/
│ │ │ │ └── startup_stm32h747xihx.s
│ │ │ └── STM32H747XIHX_FLASH.ld
│ │ ├── Common/
│ │ │ └── Src/
│ │ │ └── system_stm32h7xx_dualcore_boot_cm4_cm7.c
│ │ ├── Drivers/
│ │ │ ├── CMSIS/
│ │ │ │ ├── Device/
│ │ │ │ │ └── ST/
│ │ │ │ │ └── STM32H7xx/
│ │ │ │ │ ├── Include/
│ │ │ │ │ │ ├── stm32h747xx.h
│ │ │ │ │ │ ├── stm32h7xx.h
│ │ │ │ │ │ └── system_stm32h7xx.h
│ │ │ │ │ └── LICENSE.txt
│ │ │ │ ├── Include/
│ │ │ │ │ ├── cmsis_armcc.h
│ │ │ │ │ ├── cmsis_armclang.h
│ │ │ │ │ ├── cmsis_armclang_ltm.h
│ │ │ │ │ ├── cmsis_compiler.h
│ │ │ │ │ ├── cmsis_gcc.h
│ │ │ │ │ ├── cmsis_iccarm.h
│ │ │ │ │ ├── cmsis_version.h
│ │ │ │ │ ├── core_armv81mml.h
│ │ │ │ │ ├── core_armv8mbl.h
│ │ │ │ │ ├── core_armv8mml.h
│ │ │ │ │ ├── core_cm0.h
│ │ │ │ │ ├── core_cm0plus.h
│ │ │ │ │ ├── core_cm1.h
│ │ │ │ │ ├── core_cm23.h
│ │ │ │ │ ├── core_cm3.h
│ │ │ │ │ ├── core_cm33.h
│ │ │ │ │ ├── core_cm35p.h
│ │ │ │ │ ├── core_cm4.h
│ │ │ │ │ ├── core_cm7.h
│ │ │ │ │ ├── core_sc000.h
│ │ │ │ │ ├── core_sc300.h
│ │ │ │ │ ├── mpu_armv7.h
│ │ │ │ │ ├── mpu_armv8.h
│ │ │ │ │ └── tz_context.h
│ │ │ │ └── LICENSE.txt
│ │ │ └── STM32H7xx_HAL_Driver/
│ │ │ ├── Inc/
│ │ │ │ ├── Legacy/
│ │ │ │ │ └── stm32_hal_legacy.h
│ │ │ │ ├── stm32h7xx_hal.h
│ │ │ │ ├── stm32h7xx_hal_cortex.h
│ │ │ │ ├── stm32h7xx_hal_def.h
│ │ │ │ ├── stm32h7xx_hal_dma.h
│ │ │ │ ├── stm32h7xx_hal_dma_ex.h
│ │ │ │ ├── stm32h7xx_hal_exti.h
│ │ │ │ ├── stm32h7xx_hal_flash.h
│ │ │ │ ├── stm32h7xx_hal_flash_ex.h
│ │ │ │ ├── stm32h7xx_hal_gpio.h
│ │ │ │ ├── stm32h7xx_hal_gpio_ex.h
│ │ │ │ ├── stm32h7xx_hal_hsem.h
│ │ │ │ ├── stm32h7xx_hal_i2c.h
│ │ │ │ ├── stm32h7xx_hal_i2c_ex.h
│ │ │ │ ├── stm32h7xx_hal_mdma.h
│ │ │ │ ├── stm32h7xx_hal_pwr.h
│ │ │ │ ├── stm32h7xx_hal_pwr_ex.h
│ │ │ │ ├── stm32h7xx_hal_rcc.h
│ │ │ │ ├── stm32h7xx_hal_rcc_ex.h
│ │ │ │ ├── stm32h7xx_hal_rng.h
│ │ │ │ ├── stm32h7xx_hal_rng_ex.h
│ │ │ │ ├── stm32h7xx_hal_tim.h
│ │ │ │ ├── stm32h7xx_hal_tim_ex.h
│ │ │ │ ├── stm32h7xx_hal_uart.h
│ │ │ │ ├── stm32h7xx_hal_uart_ex.h
│ │ │ │ ├── stm32h7xx_ll_bus.h
│ │ │ │ ├── stm32h7xx_ll_cortex.h
│ │ │ │ ├── stm32h7xx_ll_crs.h
│ │ │ │ ├── stm32h7xx_ll_dma.h
│ │ │ │ ├── stm32h7xx_ll_dmamux.h
│ │ │ │ ├── stm32h7xx_ll_exti.h
│ │ │ │ ├── stm32h7xx_ll_gpio.h
│ │ │ │ ├── stm32h7xx_ll_hsem.h
│ │ │ │ ├── stm32h7xx_ll_lpuart.h
│ │ │ │ ├── stm32h7xx_ll_pwr.h
│ │ │ │ ├── stm32h7xx_ll_rcc.h
│ │ │ │ ├── stm32h7xx_ll_rng.h
│ │ │ │ ├── stm32h7xx_ll_system.h
│ │ │ │ ├── stm32h7xx_ll_usart.h
│ │ │ │ └── stm32h7xx_ll_utils.h
│ │ │ ├── LICENSE.txt
│ │ │ └── Src/
│ │ │ ├── stm32h7xx_hal.c
│ │ │ ├── stm32h7xx_hal_cortex.c
│ │ │ ├── stm32h7xx_hal_dma.c
│ │ │ ├── stm32h7xx_hal_dma_ex.c
│ │ │ ├── stm32h7xx_hal_exti.c
│ │ │ ├── stm32h7xx_hal_flash.c
│ │ │ ├── stm32h7xx_hal_flash_ex.c
│ │ │ ├── stm32h7xx_hal_gpio.c
│ │ │ ├── stm32h7xx_hal_hsem.c
│ │ │ ├── stm32h7xx_hal_i2c.c
│ │ │ ├── stm32h7xx_hal_i2c_ex.c
│ │ │ ├── stm32h7xx_hal_mdma.c
│ │ │ ├── stm32h7xx_hal_pwr.c
│ │ │ ├── stm32h7xx_hal_pwr_ex.c
│ │ │ ├── stm32h7xx_hal_rcc.c
│ │ │ ├── stm32h7xx_hal_rcc_ex.c
│ │ │ ├── stm32h7xx_hal_rng.c
│ │ │ ├── stm32h7xx_hal_rng_ex.c
│ │ │ ├── stm32h7xx_hal_tim.c
│ │ │ ├── stm32h7xx_hal_tim_ex.c
│ │ │ ├── stm32h7xx_hal_uart.c
│ │ │ └── stm32h7xx_hal_uart_ex.c
│ │ ├── Portenta_H7.ioc
│ │ ├── README.md
│ │ └── getfirmware.mk
│ ├── portenta-h7-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.c
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ └── mongoose_config.h
│ ├── rm2-nucleo-f429zi-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── rm2-nucleo-f746zg-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── syscalls.c
│ │ └── sysinit.c
│ ├── stm32h573i-dk-make-baremetal-builtin/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── mbedtls_config.h
│ ├── stm32h573i-dk-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── stm32h747i-disco-make-baremetal-builtin/
│ ├── Makefile
│ ├── README.md
│ └── mbedtls_config.h
├── tcp/
│ ├── README.md
│ ├── modbus-dashboard/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ ├── net.c
│ │ ├── net.h
│ │ ├── packed_fs.c
│ │ ├── tailwind.config.js
│ │ └── web_root/
│ │ ├── bundle.js
│ │ ├── index.html
│ │ └── main.js
│ ├── socks5-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── tcp/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── tcpip/
│ ├── README.md
│ ├── pcap-driver/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── tap-driver/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── ti/
│ ├── ek-tm4c1294xl-make-baremetal-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ ├── ek-tm4c1294xl-make-baremetal-builtin-rndis/
│ │ ├── Makefile
│ │ ├── cmsis_tm4c.patch
│ │ ├── hal.h
│ │ ├── link.ld
│ │ ├── main.c
│ │ ├── mongoose_config.h
│ │ ├── netif/
│ │ │ └── ethernet.h
│ │ ├── startup.c
│ │ ├── syscalls.c
│ │ ├── sysinit.c
│ │ ├── tinyusb.patch
│ │ ├── tusb_config.h
│ │ └── usb_descriptors.c
│ ├── ek-tm4c1294xl-make-freertos-builtin/
│ │ ├── Makefile
│ │ └── README.md
│ └── ti-ek-tm4c1294xl-http-server/
│ └── Makefile
├── tls/
│ └── README.md
├── udp/
│ ├── README.md
│ ├── captive-dns-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-sd-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── mdns-server/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ ├── sntp-time-sync/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── ssdp-search/
│ ├── Makefile
│ ├── README.md
│ └── main.c
├── wch/
│ └── ch32v307-make-baremetal-builtin/
│ ├── Makefile
│ ├── hal.c
│ ├── hal.h
│ ├── main.c
│ ├── mongoose_config.h
│ └── vendor/
│ ├── ch32v30x.h
│ ├── core_riscv.c
│ ├── core_riscv.h
│ ├── link.ld
│ ├── startup_ch32v30x_D8C.S
│ └── system_ch32v30x.c
├── websocket/
│ ├── README.md
│ ├── json-rpc-over-websocket/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ └── rpc-over-websocket.js
│ ├── websocket-client/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── main.c
│ └── websocket-server/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── test.html
├── webui/
│ ├── README.md
│ ├── live-log/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── webui-login/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── webui-plain/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ ├── index.html
│ │ └── style.css
│ ├── webui-preact/
│ │ ├── Makefile
│ │ ├── README.md
│ │ └── web_root/
│ │ ├── index.html
│ │ ├── main.js
│ │ └── style.css
│ ├── webui-push-rest/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ ├── webui-push-ws/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── main.c
│ │ └── web_root/
│ │ └── index.html
│ └── webui-rest/
│ ├── Makefile
│ ├── README.md
│ ├── main.c
│ └── web_root/
│ └── index.html
└── zephyr/
├── Makefile
├── README.md
├── device-dashboard/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── main.c
│ └── mongoose_config.h
├── http-client/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
├── http-server/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
├── mqtt-aws-client/
│ ├── CMakeLists.txt
│ ├── Makefile
│ ├── overlay-e1000.conf
│ ├── prj.conf
│ └── src/
│ ├── certs.h
│ ├── main.c
│ └── mongoose_config.h
└── websocket-server/
├── CMakeLists.txt
├── Makefile
├── overlay-e1000.conf
├── prj.conf
└── src/
├── certs.h
├── main.c
└── mongoose_config.h
Copy disabled (too large)
Download .json
Condensed preview — 3936 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (16,526K chars).
[
{
"path": ".clang-format",
"chars": 166,
"preview": "BasedOnStyle: Google\nAllowShortFunctionsOnASingleLine: false\nSpaceAfterCStyleCast: true\nPointerBindsToType: false\nDerive"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 28,
"preview": "blank_issues_enabled: false\n"
},
{
"path": ".github/ISSUE_TEMPLATE/issue.md",
"chars": 486,
"preview": "---\nname: Issue template\nabout: Please fill this issue template for reporting Mongoose issues\n#title: \n#labels: \n#assign"
},
{
"path": ".github/workflows/cifuzz.yml",
"chars": 847,
"preview": "name: CIFuzz\non:\n schedule:\n - cron: '0 2 * * *' # run at 2 AM UTC\n # Allow manual runs\n workflow_dispatch:\n\njobs:"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 739,
"preview": "name: \"CodeQL Scanning\"\n# https://github.com/github/codeql-action\n\non:\n #schedule:\n # - cron: '30 23 * * *' # run at "
},
{
"path": ".github/workflows/fuzz.yml",
"chars": 631,
"preview": "name: Fuzz\non:\n schedule:\n - cron: '0 21 * * *' # run at 9 PM UTC\n # Allow manual runs\n workflow_dispatch:\nenv:\n "
},
{
"path": ".github/workflows/nightly.yml",
"chars": 18313,
"preview": "name: Full build\non:\n schedule:\n - cron: '0 22 * * *' # run at 10 PM UTC\n # Allow manual runs\n workflow_dispatch:\n"
},
{
"path": ".github/workflows/nightly_tests.yml",
"chars": 6706,
"preview": "name: Full test\non:\n schedule:\n - cron: '0 23 * * *' # run at 11 PM UTC\n # Allow manual runs\n workflow_dispatch:\ne"
},
{
"path": ".github/workflows/on_demand.yml",
"chars": 1337,
"preview": "name: On demand ad hoc test\non:\n workflow_dispatch:\nenv:\n IPV6: 0\njobs:\n macos:\n runs-on: macos-latest\n strateg"
},
{
"path": ".github/workflows/quicktest.yml",
"chars": 27212,
"preview": "name: Build and test - essentials\non:\n push:\n paths:\n - \"**Makefile\"\n - \"**.c\"\n - \"**.h\"\n # Allow ma"
},
{
"path": ".github/workflows/test.yml",
"chars": 29271,
"preview": "name: original workflow, outdated # *** YES, OUTDATED *** kept for hystorical/reference purposes, attachment, etc.\non:\n "
},
{
"path": ".github/workflows/zephyr.yml",
"chars": 1228,
"preview": "name: Zephyr\non:\n schedule:\n - cron: '0 0 * * *' # run at 12 AM UTC\n # Allow manual runs\n workflow_dispatch:\njobs:"
},
{
"path": "LICENSE",
"chars": 731,
"preview": "Copyright (c) 2004-2013 Sergey Lyubka\nCopyright (c) 2013-2026 Cesanta Software Limited\nAll rights reserved\n\nThis softwar"
},
{
"path": "README.md",
"chars": 12264,
"preview": "# Mongoose - Embedded Web Server / Embedded Network Library\n\n[ 2004-2013 Sergey Lyubka\n// Copyright (c) 2013-2025 Cesanta Software Limited\n// All rights reserved\n//\n/"
},
{
"path": "mongoose.h",
"chars": 138204,
"preview": "// Copyright (c) 2004-2013 Sergey Lyubka\n// Copyright (c) 2013-2025 Cesanta Software Limited\n// All rights reserved\n//\n/"
},
{
"path": "src/arch.h",
"chars": 1881,
"preview": "#pragma once\n\n#define MG_ARCH_CUSTOM 0 // User creates its own mongoose_config.h\n#define MG_ARCH_UNIX 1 "
},
{
"path": "src/arch_armcgt.h",
"chars": 312,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ARMCGT\n\n#include <ctype.h>\n#include <errno.h>\n#include <stdarg.h>\n#include <stdbool"
},
{
"path": "src/arch_armgcc.h",
"chars": 398,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ARMGCC\n#define _POSIX_TIMERS\n\n#include <ctype.h>\n#include <errno.h>\n#include <stdar"
},
{
"path": "src/arch_cube.h",
"chars": 2623,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_CUBE\n\n#include <ctype.h>\n#include <errno.h>\n#include <stdarg.h>\n#include <stdbool.h"
},
{
"path": "src/arch_esp32.h",
"chars": 595,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ESP32\n\n#include <ctype.h>\n#include <dirent.h>\n#include <errno.h>\n#include <fcntl.h>"
},
{
"path": "src/arch_esp8266.h",
"chars": 425,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ESP8266\n\n#include <ctype.h>\n#include <dirent.h>\n#include <errno.h>\n#include <fcntl."
},
{
"path": "src/arch_freertos.h",
"chars": 1119,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_FREERTOS\n\n#include <ctype.h>\n#if !defined(MG_ENABLE_LWIP) || !MG_ENABLE_LWIP\n#inclu"
},
{
"path": "src/arch_picosdk.h",
"chars": 438,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_PICOSDK\n#if !defined(MG_ENABLE_LWIP) || !MG_ENABLE_LWIP\n#include <errno.h>\n#endif\n#"
},
{
"path": "src/arch_rtthread.h",
"chars": 425,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_RTTHREAD\n\n#include <rtthread.h>\n#include <ctype.h>\n#include <errno.h>\n#include <fcn"
},
{
"path": "src/arch_rtx.h",
"chars": 1180,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ARMCC || MG_ARCH == MG_ARCH_CMSIS_RTOS1 || \\\n MG_ARCH == MG_ARCH_CMSIS_RTOS2\n\n#i"
},
{
"path": "src/arch_threadx.h",
"chars": 1134,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_THREADX\n\n#include <stdarg.h>\n#include <stdbool.h>\n#include <stdint.h>\n#include <str"
},
{
"path": "src/arch_tirtos.h",
"chars": 290,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_TIRTOS\n\n#include <stdlib.h>\n#include <ctype.h>\n#include <stdarg.h>\n#include <stdboo"
},
{
"path": "src/arch_unix.h",
"chars": 1235,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_UNIX\n\n#define _DARWIN_UNLIMITED_SELECT 1 // No limit on file descriptors\n\n#if defi"
},
{
"path": "src/arch_win32.h",
"chars": 4028,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_WIN32\n\n// Avoid name clashing; (macro expansion producing 'defined' has undefined\n/"
},
{
"path": "src/arch_zephyr.h",
"chars": 812,
"preview": "#pragma once\n\n#if MG_ARCH == MG_ARCH_ZEPHYR\n\n#include <zephyr/kernel.h>\n#include <zephyr/net/socket.h>\n// #include <zeph"
},
{
"path": "src/base64.c",
"chars": 2492,
"preview": "#include \"base64.h\"\n\nstatic int mg_base64_encode_single(int c) {\n if (c < 26) {\n return c + 'A';\n } else if (c < 52"
},
{
"path": "src/base64.h",
"chars": 301,
"preview": "#pragma once\n#include \"arch.h\"\nsize_t mg_base64_update(unsigned char input_byte, char *buf, size_t len);\nsize_t mg_base6"
},
{
"path": "src/config.h",
"chars": 4825,
"preview": "#pragma once\n\n#ifndef MG_ENABLE_LOG\n#define MG_ENABLE_LOG 1\n#endif\n\n#ifndef MG_ENABLE_CUSTOM_CALLOC\n#define MG_ENABLE_CU"
},
{
"path": "src/dns.c",
"chars": 22572,
"preview": "#include \"dns.h\"\n#include \"log.h\"\n#include \"printf.h\"\n#include \"str.h\"\n#include \"timer.h\"\n#include \"url.h\"\n#include \"uti"
},
{
"path": "src/dns.h",
"chars": 2380,
"preview": "#pragma once\n\n#include \"net.h\"\n#include \"str.h\"\n\n#define MG_DNS_RTYPE_A 1\n#define MG_DNS_RTYPE_PTR 12\n#define MG_DNS_RTY"
},
{
"path": "src/drivers/cmsis.c",
"chars": 4447,
"preview": "// https://arm-software.github.io/CMSIS_5/Driver/html/index.html\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_CMSIS)"
},
{
"path": "src/drivers/cmsis.h",
"chars": 204,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_CMSIS) && MG_ENABLE_DRIVER_CMSIS\n\n#include \"Driver_ETH_MAC"
},
{
"path": "src/drivers/cyw.c",
"chars": 59036,
"preview": "#include \"cyw.h\"\n#include \"net.h\"\n\n#if MG_ENABLE_TCPIP && \\\n ((defined(MG_EN"
},
{
"path": "src/drivers/cyw.h",
"chars": 1852,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && \\\n ((defined(MG_ENABLE_DRIVER_CYW) && M"
},
{
"path": "src/drivers/imxrt.c",
"chars": 9814,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_IMXRT10) && MG_ENABLE_DRIVER_IMXRT10) || "
},
{
"path": "src/drivers/imxrt.h",
"chars": 1915,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_IMXRT10) && MG_ENABLE_DRIVER_IMXRT10) || \\\n (defined"
},
{
"path": "src/drivers/nxp_wifi.c",
"chars": 2541,
"preview": "#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_NXP_WIFI) && \\\n MG_ENABLE_DRIVER_NXP_WIFI\n\n#include \"drivers/nxp_wifi"
},
{
"path": "src/drivers/nxp_wifi.h",
"chars": 1184,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && \\\n defined(MG_ENABLE_DRIVER_NXP_WIFI) && MG_ENABLE_DRIVER_NXP_WIFI\n\n\nstruct mg_"
},
{
"path": "src/drivers/phy.c",
"chars": 6862,
"preview": "#include \"phy.h\"\n\nenum { // ID1 ID2\n MG_PHY_KSZ8x = 0x22, // 0022 156x - KSZ8081RNB, KSZ8091RNB\n MG"
},
{
"path": "src/drivers/phy.h",
"chars": 624,
"preview": "#pragma once\n\n#include \"net_builtin.h\"\n\nstruct mg_phy {\n uint16_t (*read_reg)(uint8_t addr, uint8_t reg);\n void (*writ"
},
{
"path": "src/drivers/pico-w.c",
"chars": 6188,
"preview": "#if MG_ENABLE_TCPIP && MG_ARCH == MG_ARCH_PICOSDK && \\\n defined(MG_ENABLE_DRIVER_PICO_W) && MG_ENABLE_DRIVER_PICO_W\n\n"
},
{
"path": "src/drivers/pico-w.h",
"chars": 1337,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && MG_ARCH == MG_ARCH_PICOSDK && \\\n defined(MG_ENABLE_DRIVER_PICO_W) && MG_ENABLE_D"
},
{
"path": "src/drivers/ppp.c",
"chars": 10487,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_PPP) && MG_ENABLE_DRIVER_PPP\n\n#define MG_PPP_F"
},
{
"path": "src/drivers/ppp.h",
"chars": 506,
"preview": "#pragma once\n\nstruct mg_tcpip_driver_ppp_data {\n void *uart; // Opaque UART bus descriptor\n void (*r"
},
{
"path": "src/drivers/ra.c",
"chars": 10180,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_RA6) && MG_ENABLE_DRIVER_RA6) || \\\n (def"
},
{
"path": "src/drivers/ra.h",
"chars": 1572,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_RA6) && MG_ENABLE_DRIVER_RA6) || \\\n (defined(MG_ENAB"
},
{
"path": "src/drivers/rw612.c",
"chars": 8114,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_RW612) && MG_ENABLE_DRIVER_RW612\n\nstruct ENET_"
},
{
"path": "src/drivers/rw612.h",
"chars": 1773,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_RW612) && MG_ENABLE_DRIVER_RW612\n\nstruct mg_tcpip_driver_r"
},
{
"path": "src/drivers/same54.c",
"chars": 10104,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_SAME54) && \\\n MG_ENABLE_DRIVER_SAME54\n\nstru"
},
{
"path": "src/drivers/same54.h",
"chars": 1277,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_SAME54) && \\\n MG_ENABLE_DRIVER_SAME54\n\n#ifndef MG_DRIVE"
},
{
"path": "src/drivers/sdio.c",
"chars": 6758,
"preview": "#include \"sdio.h\"\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_CYW_SDIO) && MG_ENABLE_DRIVER_CYW_SDIO)\n\n// SD"
},
{
"path": "src/drivers/sdio.h",
"chars": 1824,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && \\\n (defined(MG_ENABLE_DRIVER_CYW_SDIO) && MG_ENABLE_DRIVER_CYW_SDIO)\n\n// Specifi"
},
{
"path": "src/drivers/st67w6.c",
"chars": 18121,
"preview": "#include \"st67w6.h\"\n#include \"net.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_ST67W6) && \\\n MG_ENABLE_DRIVER_"
},
{
"path": "src/drivers/st67w6.h",
"chars": 1601,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_ST67W6) && \\\n MG_ENABLE_DRIVER_ST67W6\n\nstruct mg_tcpip_"
},
{
"path": "src/drivers/stm32f.c",
"chars": 10741,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_STM32F) && \\\n MG_ENABLE_DRIVER_STM32F\nstruc"
},
{
"path": "src/drivers/stm32f.h",
"chars": 2066,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_STM32F) && \\\n MG_ENABLE_DRIVER_STM32F\n\nstruct mg_tcpip_"
},
{
"path": "src/drivers/stm32h.c",
"chars": 14929,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && (MG_ENABLE_DRIVER_STM32H || MG_ENABLE_DRIVER_MCXN || \\\n "
},
{
"path": "src/drivers/stm32h.h",
"chars": 3151,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP\n#if !defined(MG_ENABLE_DRIVER_STM32H)\n#define MG_ENABLE_DRIVER_STM32H 0\n#endif\n#if !de"
},
{
"path": "src/drivers/tm4c.c",
"chars": 11623,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_TM4C) && MG_ENABLE_DRIVER_TM4C\nstruct tm4c_ema"
},
{
"path": "src/drivers/tm4c.h",
"chars": 1589,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_TM4C) && MG_ENABLE_DRIVER_TM4C\n\nstruct mg_tcpip_driver_tm4"
},
{
"path": "src/drivers/tms570.c",
"chars": 10310,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_TMS570) && MG_ENABLE_DRIVER_TMS570\nstruct tms5"
},
{
"path": "src/drivers/tms570.h",
"chars": 1237,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_TMS570) && MG_ENABLE_DRIVER_TMS570\nstruct mg_tcpip_driver_"
},
{
"path": "src/drivers/w5100.c",
"chars": 4958,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_W5100) && MG_ENABLE_DRIVER_W5100\n\nstatic void "
},
{
"path": "src/drivers/w5500.c",
"chars": 4655,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_W5500) && MG_ENABLE_DRIVER_W5500\n\nenum { W5500"
},
{
"path": "src/drivers/xmc.c",
"chars": 9020,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_XMC) && MG_ENABLE_DRIVER_XMC\n\nstruct ETH_GLOBA"
},
{
"path": "src/drivers/xmc.h",
"chars": 1897,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_XMC) && MG_ENABLE_DRIVER_XMC\n\nstruct mg_tcpip_driver_xmc_d"
},
{
"path": "src/drivers/xmc7.c",
"chars": 10712,
"preview": "#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_XMC7) && MG_ENABLE_DRIVER_XMC7\n\nstruct ETH_Typ"
},
{
"path": "src/drivers/xmc7.h",
"chars": 1297,
"preview": "#pragma once\n\n#if MG_ENABLE_TCPIP && defined(MG_ENABLE_DRIVER_XMC7) && MG_ENABLE_DRIVER_XMC7\n\nstruct mg_tcpip_driver_xmc"
},
{
"path": "src/event.c",
"chars": 1178,
"preview": "#include \"event.h\"\n#include \"log.h\"\n#include \"net.h\"\n#include \"printf.h\"\n#include \"profile.h\"\n\nvoid mg_call(struct mg_co"
},
{
"path": "src/event.h",
"chars": 1877,
"preview": "#pragma once\n\nstruct mg_connection;\ntypedef void (*mg_event_handler_t)(struct mg_connection *, int ev,\n "
},
{
"path": "src/flash.c",
"chars": 2242,
"preview": "#include \"arch.h\"\n#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA != MG_OTA_NONE && MG_OTA != MG_OTA_CU"
},
{
"path": "src/flash.h",
"chars": 612,
"preview": "#include \"arch.h\"\n#include \"ota.h\"\n\n#if MG_OTA != MG_OTA_NONE && MG_OTA != MG_OTA_CUSTOM\n\nstruct mg_flash {\n void *star"
},
{
"path": "src/fmt.c",
"chars": 7762,
"preview": "#include \"fmt.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\nstatic bool is_digit(int c) {\n return c >= '0' && c <= '9';\n}\n\n"
},
{
"path": "src/fmt.h",
"chars": 336,
"preview": "#pragma once\n\n#include \"arch.h\"\n\ntypedef void (*mg_pfn_t)(char, void *); // Output function\ntypedef siz"
},
{
"path": "src/fs.c",
"chars": 2442,
"preview": "#include \"fs.h\"\n#include \"printf.h\"\n#include \"str.h\"\n#include \"util.h\"\n\nstruct mg_fd *mg_fs_open(struct mg_fs *fs, const"
},
{
"path": "src/fs.h",
"chars": 2236,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n\nenum { MG_FS_READ = 1, MG_FS_WRITE = 2, MG_FS_DIR = 4 };\n\n// Filesy"
},
{
"path": "src/fs_fat.c",
"chars": 3373,
"preview": "#include \"arch.h\"\n#include \"fs.h\"\n\n#if MG_ENABLE_FATFS\n#include <ff.h>\n\nstatic int mg_days_from_epoch(int y, int m, int "
},
{
"path": "src/fs_packed.c",
"chars": 3532,
"preview": "#include \"fs.h\"\n#include \"printf.h\"\n#include \"str.h\"\n#include \"util.h\"\n\nstruct packed_file {\n const char *data;\n size_"
},
{
"path": "src/fs_posix.c",
"chars": 7108,
"preview": "#include \"fs.h\"\n\n#if MG_ENABLE_POSIX_FS\n\n#ifndef MG_STAT_STRUCT\n#define MG_STAT_STRUCT stat\n#endif\n\n#ifndef MG_STAT_FUNC"
},
{
"path": "src/http.c",
"chars": 43794,
"preview": "#include \"http.h\"\n#include \"arch.h\"\n#include \"base64.h\"\n#include \"fmt.h\"\n#include \"json.h\"\n#include \"log.h\"\n#include \"ne"
},
{
"path": "src/http.h",
"chars": 3189,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n#include \"fs.h\"\n#include \"net.h\"\n#include \"str.h\"\n\nstruct mg_http_he"
},
{
"path": "src/iobuf.c",
"chars": 2076,
"preview": "#include \"iobuf.h\"\n#include \"arch.h\"\n#include \"log.h\"\n#include \"util.h\"\n\nstatic size_t roundup(size_t size, size_t align"
},
{
"path": "src/iobuf.h",
"chars": 532,
"preview": "#pragma once\n\n#include \"arch.h\"\n\nstruct mg_iobuf {\n unsigned char *buf; // Pointer to stored data\n size_t size; "
},
{
"path": "src/json.c",
"chars": 12399,
"preview": "#include \"json.h\"\n#include \"base64.h\"\n#include \"fmt.h\"\n#include \"util.h\"\n\nstatic const char *escapeseq(int esc) {\n retu"
},
{
"path": "src/json.h",
"chars": 986,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"str.h\"\n\n#ifndef MG_JSON_MAX_DEPTH\n#define MG_JSON_MAX_DEPTH 30\n#endif\n\n// Erro"
},
{
"path": "src/l2.c",
"chars": 5507,
"preview": "#include \"l2.h\"\n#include \"net.h\"\n#include \"net_builtin.h\"\n\n#if MG_ENABLE_TCPIP\n\n// L2 API\nvoid mg_l2_init(enum mg_l2type"
},
{
"path": "src/l2.h",
"chars": 917,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n\n#if MG_ENABLE_TCPIP\n\n// no config defaults to 0 => Ethernet\nenum mg"
},
{
"path": "src/l2_eth.c",
"chars": 5227,
"preview": "#include \"l2.h\"\n#include \"log.h\"\n#include \"net.h\"\n#include \"net_builtin.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\n#if MG"
},
{
"path": "src/l2_ppp.c",
"chars": 2310,
"preview": "#include \"l2.h\"\n#include \"log.h\"\n#include \"net.h\"\n#include \"net_builtin.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\n#if MG"
},
{
"path": "src/license.h",
"chars": 832,
"preview": "// Copyright (c) 2004-2013 Sergey Lyubka\n// Copyright (c) 2013-2025 Cesanta Software Limited\n// All rights reserved\n//\n/"
},
{
"path": "src/log.c",
"chars": 2202,
"preview": "#include \"log.h\"\n#include \"printf.h\"\n#include \"str.h\"\n#include \"util.h\"\n\nint mg_log_level = MG_LL_DEBUG;\nstatic mg_pfn_t"
},
{
"path": "src/log.h",
"chars": 1454,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n#include \"fmt.h\"\n\nenum { MG_LL_NONE, MG_LL_ERROR, MG_LL_INFO, MG_LL_"
},
{
"path": "src/md5.c",
"chars": 6657,
"preview": "#include \"arch.h\"\n#include \"md5.h\"\n\n// This code implements the MD5 message-digest algorithm.\n// The algorithm is due "
},
{
"path": "src/md5.h",
"chars": 288,
"preview": "#pragma once\n\n#include \"arch.h\"\n\ntypedef struct {\n uint32_t buf[4];\n uint32_t bits[2];\n unsigned char in[64];\n} mg_md"
},
{
"path": "src/mqtt.c",
"chars": 21150,
"preview": "#include \"arch.h\"\n#include \"base64.h\"\n#include \"event.h\"\n#include \"log.h\"\n#include \"mqtt.h\"\n#include \"url.h\"\n#include \"u"
},
{
"path": "src/mqtt.h",
"chars": 4864,
"preview": "#pragma once\n\n#include \"net.h\"\n#include \"str.h\"\n\n#define MQTT_CMD_CONNECT 1\n#define MQTT_CMD_CONNACK 2\n#define MQTT_CMD_"
},
{
"path": "src/net.c",
"chars": 10448,
"preview": "#include \"net.h\"\n#include \"dns.h\"\n#include \"fmt.h\"\n#include \"log.h\"\n#include \"printf.h\"\n#include \"profile.h\"\n#include \"t"
},
{
"path": "src/net.h",
"chars": 5638,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n#include \"event.h\"\n#include \"iobuf.h\"\n#include \"net_builtin.h\"\n#incl"
},
{
"path": "src/net_builtin.c",
"chars": 85222,
"preview": "#include \"net_builtin.h\"\n#include \"profile.h\"\n\n#if MG_ENABLE_TCPIP\n#define MG_EPHEMERAL_PORT_BASE 32768\n#define PDIFF(a,"
},
{
"path": "src/net_builtin.h",
"chars": 7300,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"l2.h\"\n#include \"net.h\"\n#include \"queue.h\"\n#include \"str.h\"\n\n#if MG_ENABLE_TCPI"
},
{
"path": "src/net_ft.h",
"chars": 2388,
"preview": "#pragma once\n\n#if defined(MG_ENABLE_FREERTOS_TCP) && MG_ENABLE_FREERTOS_TCP\n\n#include <limits.h>\n#include <list.h>\n\n#inc"
},
{
"path": "src/net_lwip.h",
"chars": 516,
"preview": "#pragma once\n\n#if defined(MG_ENABLE_LWIP) && MG_ENABLE_LWIP\n\n#if defined(__GNUC__) && !defined(__ARMCC_VERSION)\n#include"
},
{
"path": "src/net_rl.h",
"chars": 751,
"preview": "#pragma once\n\n#if defined(MG_ENABLE_RL) && MG_ENABLE_RL\n#include <rl_net.h>\n\n#define closesocket(x) closesocket(x)\n\n#def"
},
{
"path": "src/ota.h",
"chars": 1407,
"preview": "// Copyright (c) 2023 Cesanta Software Limited\n// All rights reserved\n\n#pragma once\n\n#include \"arch.h\"\n\n#define MG_OTA_N"
},
{
"path": "src/ota_ch32v307.c",
"chars": 3372,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_CH32V307\n// RM: https://www.wch-ic.com/downlo"
},
{
"path": "src/ota_dummy.c",
"chars": 292,
"preview": "#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_NONE\nbool mg_ota_begin(size_t new_firmware_size) {\n (void) new_"
},
{
"path": "src/ota_esp32.c",
"chars": 1612,
"preview": "#include \"arch.h\"\n\n#if MG_ARCH == MG_ARCH_ESP32 && MG_OTA == MG_OTA_ESP32\n\nstatic const esp_partition_t *s_ota_update_pa"
},
{
"path": "src/ota_imxrt.c",
"chars": 26556,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA >= MG_OTA_RT1020 && MG_OTA <= MG_OTA_RT1170\n\nstatic boo"
},
{
"path": "src/ota_mcxn.c",
"chars": 7149,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_MCXN\n\n// - Flash phrase: 16 bytes; smallest p"
},
{
"path": "src/ota_picosdk.c",
"chars": 6422,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_PICOSDK\n\n// Both RP2040 and RP2350 have no fl"
},
{
"path": "src/ota_rw612.c",
"chars": 13172,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_RW612\n\nMG_IRAM static bool mg_frdm_write(void"
},
{
"path": "src/ota_stm32f.c",
"chars": 7583,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_STM32F\n\nstatic bool mg_stm32f_write(void *, c"
},
{
"path": "src/ota_stm32h5.c",
"chars": 5099,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_STM32H5\n\nstatic bool mg_stm32h5_write(void *,"
},
{
"path": "src/ota_stm32h7.c",
"chars": 7893,
"preview": "#include \"flash.h\"\n#include \"log.h\"\n#include \"ota.h\"\n\n#if MG_OTA == MG_OTA_STM32H7 || MG_OTA == MG_OTA_STM32H7_DUAL_CORE"
},
{
"path": "src/printf.c",
"chars": 5817,
"preview": "#include \"fmt.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\nsize_t mg_queue_printf(struct mg_queue *q, const char *fmt, ...)"
},
{
"path": "src/printf.h",
"chars": 1465,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"iobuf.h\"\n#include \"queue.h\"\n\n// Convenience wrappers around mg_xprintf\nsize_t "
},
{
"path": "src/profile.h",
"chars": 3477,
"preview": "#pragma once\n#include \"iobuf.h\"\n\n// Macros to record timestamped events that happens with a connection.\n// They are save"
},
{
"path": "src/queue.c",
"chars": 2941,
"preview": "#include \"queue.h\"\n#include \"util.h\"\n\n#if (defined(__GNUC__) && (__GNUC__ > 4) || \\\n "
},
{
"path": "src/queue.h",
"chars": 587,
"preview": "#pragma once\n\n#include \"arch.h\" // For size_t\n\n// Single producer, single consumer non-blocking queue\n\nstruct mg_queue "
},
{
"path": "src/rpc.c",
"chars": 3422,
"preview": "#include \"rpc.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\nvoid mg_rpc_add(struct mg_rpc **head, struct mg_str method,\n "
},
{
"path": "src/rpc.h",
"chars": 1357,
"preview": "#pragma once\n#include \"fmt.h\"\n#include \"json.h\"\n\n// JSON-RPC request descriptor\nstruct mg_rpc_req {\n struct mg_rpc **he"
},
{
"path": "src/sha1.c",
"chars": 5824,
"preview": "/* Copyright(c) By Steve Reid <steve@edmweb.com> */\n/* 100% Public Domain */\n#include \"arch.h\"\n#include \"sha1.h\"\n\nunion "
},
{
"path": "src/sha1.h",
"chars": 306,
"preview": "#pragma once\n\n#include \"arch.h\"\n\ntypedef struct {\n uint32_t state[5];\n uint32_t count[2];\n unsigned char buffer[64];\n"
},
{
"path": "src/sha256.c",
"chars": 14212,
"preview": "// https://github.com/B-Con/crypto-algorithms\n// Author: Brad Conte (brad AT bradconte.com)\n// Disclaimer: This code"
},
{
"path": "src/sha256.h",
"chars": 1154,
"preview": "// https://github.com/B-Con/crypto-algorithms\n// Author: Brad Conte (brad AT bradconte.com)\n// Disclaimer: This code"
},
{
"path": "src/sntp.c",
"chars": 3257,
"preview": "#include \"sntp.h\"\n#include \"arch.h\"\n#include \"event.h\"\n#include \"log.h\"\n#include \"util.h\"\n\n#define SNTP_TIME_OFFSET 2208"
},
{
"path": "src/sntp.h",
"chars": 355,
"preview": "#pragma once\n\n#include \"net.h\"\n\nstruct mg_connection *mg_sntp_connect(struct mg_mgr *mgr, const char *url,\n "
},
{
"path": "src/sock.c",
"chars": 27218,
"preview": "#include \"dns.h\"\n#include \"event.h\"\n#include \"log.h\"\n#include \"net.h\"\n#include \"printf.h\"\n#include \"str.h\"\n#include \"tim"
},
{
"path": "src/ssi.c",
"chars": 3802,
"preview": "#include \"ssi.h\"\n#include \"log.h\"\n#include \"printf.h\"\n#include \"util.h\"\n\n#ifndef MG_MAX_SSI_DEPTH\n#define MG_MAX_SSI_DEP"
},
{
"path": "src/ssi.h",
"chars": 143,
"preview": "#pragma once\n#include \"http.h\"\nvoid mg_http_serve_ssi(struct mg_connection *c, const char *root,\n "
},
{
"path": "src/str.c",
"chars": 5751,
"preview": "#include \"str.h\"\n#include \"util.h\"\n\nstruct mg_str mg_str_s(const char *s) {\n struct mg_str str;\n str.buf = (char *) s,"
},
{
"path": "src/str.h",
"chars": 806,
"preview": "#pragma once\n\n#include \"arch.h\"\n\n// Describes an arbitrary chunk of memory\nstruct mg_str {\n char *buf; // String data"
},
{
"path": "src/timer.c",
"chars": 1737,
"preview": "#include \"arch.h\"\n#include \"timer.h\"\n#include \"util.h\"\n\nvoid mg_timer_init(struct mg_timer **head, struct mg_timer *t, u"
},
{
"path": "src/timer.h",
"chars": 1089,
"preview": "#pragma once\n\n#include \"arch.h\"\n\nstruct mg_timer {\n uint64_t period_ms; // Timer period in milliseconds\n uint"
},
{
"path": "src/tls.h",
"chars": 1484,
"preview": "#pragma once\n\n#define MG_TLS_NONE 0 // No TLS support\n#define MG_TLS_MBED 1 // mbedTLS\n#define MG_TLS_OPENSSL 2 "
},
{
"path": "src/tls_aes128.c",
"chars": 45751,
"preview": "/******************************************************************************\n *\n * THIS SOURCE CODE IS HEREBY PLACED "
},
{
"path": "src/tls_aes128.h",
"chars": 2807,
"preview": "/******************************************************************************\n *\n * THIS SOURCE CODE IS HEREBY PLACED "
},
{
"path": "src/tls_builtin.c",
"chars": 88715,
"preview": "#include \"base64.h\"\n#include \"config.h\"\n#include \"printf.h\"\n#include \"sha256.h\"\n#include \"tls.h\"\n#include \"tls_aes128.h\""
},
{
"path": "src/tls_chacha20.c",
"chars": 38870,
"preview": "// portable8439 v1.0.1\n// Source: https://github.com/DavyLandman/portable8439\n// Licensed under CC0-1.0\n// Contains poly"
},
{
"path": "src/tls_chacha20.h",
"chars": 3895,
"preview": "// portable8439 v1.0.1\n// Source: https://github.com/DavyLandman/portable8439\n// Licensed under CC0-1.0\n// Contains poly"
},
{
"path": "src/tls_dummy.c",
"chars": 810,
"preview": "#include \"tls.h\"\n\n#if MG_TLS == MG_TLS_NONE\nvoid mg_tls_init(struct mg_connection *c, const struct mg_tls_opts *opts) {\n"
},
{
"path": "src/tls_mbed.c",
"chars": 10070,
"preview": "#include \"log.h\"\n#include \"printf.h\"\n#include \"profile.h\"\n#include \"tls.h\"\n#include \"util.h\"\n\n#if MG_TLS == MG_TLS_MBED\n"
},
{
"path": "src/tls_mbed.h",
"chars": 920,
"preview": "#pragma once\n\n#include \"config.h\"\n#include \"log.h\"\n#include \"url.h\"\n#include \"util.h\"\n\n#if MG_TLS == MG_TLS_MBED\n#includ"
},
{
"path": "src/tls_openssl.c",
"chars": 9571,
"preview": "#include \"printf.h\"\n#include \"tls.h\"\n#include \"util.h\"\n\n#if MG_TLS == MG_TLS_OPENSSL || MG_TLS == MG_TLS_WOLFSSL\n\nstatic"
},
{
"path": "src/tls_openssl.h",
"chars": 195,
"preview": "#pragma once\n\n#if MG_TLS == MG_TLS_OPENSSL || MG_TLS == MG_TLS_WOLFSSL\n\n#include <openssl/err.h>\n#include <openssl/ssl.h"
},
{
"path": "src/tls_rsa.c",
"chars": 47657,
"preview": "#include \"tls.h\"\n#include \"tls_rsa.h\"\n#include \"util.h\"\n\n#if MG_TLS == MG_TLS_BUILTIN\n\n#define NS_INTERNAL static\ntypede"
},
{
"path": "src/tls_rsa.h",
"chars": 606,
"preview": "#ifndef TLS_RSA_H\n#define TLS_RSA_H\n\n#include \"arch.h\"\nint mg_rsa_mod_pow(const uint8_t *mod, size_t modsz, const uint8_"
},
{
"path": "src/tls_uecc.c",
"chars": 110150,
"preview": "/* Copyright 2014, Kenneth MacKay. Licensed under the BSD 2-clause license. */\n\n#include \"tls_uecc.h\"\n#include \"tls.h\"\n\n"
},
{
"path": "src/tls_uecc.h",
"chars": 24172,
"preview": "#pragma once\n#include \"arch.h\"\n\n#define MG_UECC_SUPPORTS_secp256r1 1\n/* Copyright 2014, Kenneth MacKay. Licensed under t"
},
{
"path": "src/tls_x25519.c",
"chars": 7628,
"preview": "/**\n * Adapted from STROBE: https://strobe.sourceforge.io/\n * Copyright (c) 2015-2016 Cryptography Research, Inc.\n * Aut"
},
{
"path": "src/tls_x25519.h",
"chars": 312,
"preview": "#ifndef TLS_X15519_H\n#define TLS_X15519_H\n\n#include \"arch.h\"\n\n#define X25519_BYTES 32\nextern const uint8_t X25519_BASE_P"
},
{
"path": "src/url.c",
"chars": 2447,
"preview": "#include \"url.h\"\n\nstruct url {\n size_t key, user, pass, host, port, uri, end;\n};\n\nint mg_url_is_ssl(const char *url) {\n"
},
{
"path": "src/url.h",
"chars": 285,
"preview": "#pragma once\n#include \"str.h\"\n\nunsigned short mg_url_port(const char *url);\nint mg_url_is_ssl(const char *url);\nstruct m"
},
{
"path": "src/util.c",
"chars": 7663,
"preview": "#include \"util.h\"\n#include \"log.h\"\n\n// Not using memset for zeroing memory, cause it can be dropped by compiler\n// See h"
},
{
"path": "src/util.h",
"chars": 5633,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"config.h\"\n#include \"net.h\"\n#include \"str.h\"\n\n#if MG_ENABLE_ASSERT\n#include <as"
},
{
"path": "src/version.h",
"chars": 26,
"preview": "#define MG_VERSION \"7.20\"\n"
},
{
"path": "src/wifi.h",
"chars": 1059,
"preview": "#pragma once\n\n#include \"arch.h\"\n#include \"log.h\"\n#include \"str.h\"\n\nstruct mg_wifi_data {\n char *ssid, *pass; // ST"
},
{
"path": "src/wifi_dummy.c",
"chars": 780,
"preview": "#include \"wifi.h\"\n\n#if (!defined(MG_ENABLE_DRIVER_PICO_W) || !MG_ENABLE_DRIVER_PICO_W) && \\\n (!defined(MG_ENABLE_DRIV"
},
{
"path": "src/ws.c",
"chars": 10154,
"preview": "#include \"ws.h\"\n\n#include \"base64.h\"\n#include \"fmt.h\"\n#include \"http.h\"\n#include \"log.h\"\n#include \"printf.h\"\n#include \"s"
},
{
"path": "src/ws.h",
"chars": 973,
"preview": "#pragma once\n\n#define WEBSOCKET_OP_CONTINUE 0\n#define WEBSOCKET_OP_TEXT 1\n#define WEBSOCKET_OP_BINARY 2\n#define WEBSOCKE"
},
{
"path": "test/Makefile",
"chars": 13768,
"preview": "SRCS = mongoose.c unit_test.c packed_fs.c\nHDRS = $(wildcard ../src/*.h) $(wildcard ../src/drivers/*.h)\nDEFS ?= -DMG_MAX_"
},
{
"path": "test/arduino/Makefile",
"chars": 2917,
"preview": "# arduino-nano fails on the flash size department, need to reduce unused function footprint (sha256, sha384 ?)\n# teensy4"
},
{
"path": "test/certs/ca.crt",
"chars": 436,
"preview": "-----BEGIN CERTIFICATE-----\nMIIBFTCBvAIJAMNTFtpfcq8NMAoGCCqGSM49BAMCMBMxETAPBgNVBAMMCE1vbmdv\nb3NlMB4XDTI0MDUwNzE0MzczNlo"
},
{
"path": "test/certs/ca.key",
"chars": 227,
"preview": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIJqrhcIKC5dk0omuRJRnzCXdfxevxnabQEnOWlL6P6x1oAoGCCqGSM49\nAwEHoUQDQgAErj/vOk/6zlpx"
},
{
"path": "test/certs/ca.srl",
"chars": 17,
"preview": "96EAA481EB95FF36\n"
},
{
"path": "test/certs/client.crt",
"chars": 477,
"preview": "-----BEGIN CERTIFICATE-----\nMIIBMjCB2aADAgECAgkAluqkgeuV/zYwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwI\nTW9uZ29vc2UwHhcNMjQwNTA3MTQ"
},
{
"path": "test/certs/client.csr",
"chars": 351,
"preview": "-----BEGIN CERTIFICATE REQUEST-----\nMIHKMHMCAQAwETEPMA0GA1UEAwwGY2xpZW50MFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAElzVqc606GSU"
},
{
"path": "test/certs/client.key",
"chars": 227,
"preview": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIGzf9AgYx3RfhzMGwv5EWgzoQh/EDfFpieFgfpTisWbAoAoGCCqGSM49\nAwEHoUQDQgAElzVqc606GSUF"
},
{
"path": "test/certs/generate.sh",
"chars": 1341,
"preview": "#/bin/sh\n#\n# Geneate self-signed ECC certificates\n\ncd `dirname $0`\n\n# Create cnf for adding SAN DNS:localhost\n# See http"
},
{
"path": "test/certs/server.crt",
"chars": 473,
"preview": "-----BEGIN CERTIFICATE-----\nMIIBMTCB2aADAgECAgkAluqkgeuV/zUwCgYIKoZIzj0EAwIwEzERMA8GA1UEAwwI\nTW9uZ29vc2UwHhcNMjQwNTA3MTQ"
},
{
"path": "test/certs/server.csr",
"chars": 351,
"preview": "-----BEGIN CERTIFICATE REQUEST-----\nMIHMMHMCAQAwETEPMA0GA1UEAwwGc2VydmVyMFkwEwYHKoZIzj0CAQYIKoZIzj0D\nAQcDQgAEqN6BIhvgbk7"
},
{
"path": "test/certs/server.key",
"chars": 227,
"preview": "-----BEGIN EC PRIVATE KEY-----\nMHcCAQEEIAVdo8UAScxG7jiuNY2UZESNX/KPH8qJ0u0gOMMsAzYWoAoGCCqGSM49\nAwEHoUQDQgAEqN6BIhvgbk7e"
},
{
"path": "test/cgt+make/Makefile",
"chars": 234,
"preview": "ROOT ?= $(realpath $(CURDIR)/../..)\nTARGET ?= Debug\nDOCKER = docker run --rm -v $(ROOT):$(ROOT) -v $(CURDIR):/root -w $("
},
{
"path": "test/configs/mongoose_config_full.h",
"chars": 3087,
"preview": "#pragma once\n\n// Build environment. Possible options are at https://github.com/cesanta/mongoose/blob/master/src/arch.h\n/"
},
{
"path": "test/cube/Makefile",
"chars": 1447,
"preview": "ROOT ?= $(realpath $(CURDIR)/../..)\nPROJECTS ?= $(wildcard ../../tutorials/stm32/nucleo-*-cube-*)\nTARGET ?= Debug\nDOCKER"
},
{
"path": "test/data/..ddot/index.html",
"chars": 3,
"preview": "hi\n"
},
{
"path": "test/data/404.html",
"chars": 4,
"preview": "boo\n"
},
{
"path": "test/data/a.txt",
"chars": 6,
"preview": "hello\n"
},
{
"path": "test/data/ca.pem",
"chars": 37587,
"preview": "Issuer: C=US, O=Internet Security Research Group, CN=ISRG Root X1\nNot Before: Mar 13 00:00:00 2024 GMT\nNot After : Mar 1"
},
{
"path": "test/data/dredir/index.html",
"chars": 3,
"preview": "hi\n"
},
{
"path": "test/data/e8.crt",
"chars": 1799,
"preview": "\n 1 s:C=US, O=Let's Encrypt, CN=E8\n i:C=US, O=Internet Security Research Group, CN=ISRG Root X1\n a:PKEY: id-ecPublic"
},
{
"path": "test/data/empty.js",
"chars": 0,
"preview": ""
},
{
"path": "test/data/gzip.txt",
"chars": 3,
"preview": "hi\n"
},
{
"path": "test/data/index.html",
"chars": 3,
"preview": "hi\n"
},
{
"path": "test/data/range.txt",
"chars": 312,
"preview": "Faith of consciousness is freedom\nFaith of feeling is weakness\nFaith of body is stupidity.\nLove of consciousness evokes "
},
{
"path": "test/data/secret/secret.txt",
"chars": 7,
"preview": "secret\n"
},
{
"path": "test/data/ss_ca.pem",
"chars": 2098,
"preview": "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 11:2a:0e:3c:6a:8c:85:ff:6e:6a:bc:db:9"
},
{
"path": "test/data/ss_client.pem",
"chars": 2314,
"preview": "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 03:d8:95:71:ba:5f:70:c8:4d:6a:e8:a6:0"
},
{
"path": "test/data/ss_server.pem",
"chars": 2314,
"preview": "Certificate:\n Data:\n Version: 3 (0x2)\n Serial Number:\n 6e:73:28:55:df:13:b5:61:f5:4f:4f:5d:0"
},
{
"path": "test/data/ssi/f1.txt",
"chars": 11,
"preview": "this is f1\n"
},
{
"path": "test/data/ssi/index.shtml",
"chars": 89,
"preview": "this is index\n<!--#include file=\"nested.shtml\" -->\n<!--#include file=\"recurse.shtml\" -->\n"
},
{
"path": "test/data/ssi/nested.shtml",
"chars": 93,
"preview": "this is nested\n<!--#include virtual=\"/notexist.txt\"-->\n<!--#include virtual=\"/ssi/f1.txt\"-->\n"
},
{
"path": "test/data/ssi/recurse.shtml",
"chars": 45,
"preview": "<!--#include file=\"recurse.shtml\"-->\nrecurse\n"
},
{
"path": "test/data/ws.hex",
"chars": 67745,
"preview": "0000 82 7e 00 b3 7b 22 6d 65 74 68 6f 64 22 3a 22 62 .~..{\"method\":\"b\n0010 6c 65 2e 61 64 76 22 2c 22 70 61 72 61 6d "
}
]
// ... and 3736 more files (download for full content)
About this extraction
This page contains the full source code of the cesanta/mongoose GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3936 files (95.8 MB), approximately 4.3M tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.