master 84363b033d7a cached
1222 files
5.3 MB
1.5M tokens
3533 symbols
1 requests
Download .txt
Showing preview only (5,800K chars total). Download the full file or copy to clipboard to get everything.
Repository: espressif/idf-extra-components
Branch: master
Commit: 84363b033d7a
Files: 1222
Total size: 5.3 MB

Directory structure:
gitextract_q3q76cb9/

├── .build-test-rules.yml
├── .codespellrc
├── .editorconfig
├── .git-blame-ignore-revs
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── feature-request.yml
│   │   └── other-issue.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   ├── new_component.md
│   │   └── update_component.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── build_docs.py
│   ├── clang-tidy/
│   │   └── test_app/
│   │       └── CMakeLists.txt
│   ├── consistency_check.py
│   ├── filter_sarif.py
│   ├── get_idf_build_apps_args.py
│   ├── get_pytest_args.py
│   ├── readme_workflows.md
│   ├── setup_qemu.sh
│   └── workflows/
│       ├── build_and_run_apps.yml
│       ├── clang-tidy.yml
│       ├── deploy_gh_pages.yml
│       ├── issue_comment.yml
│       ├── new_issues.yml
│       ├── new_prs.yml
│       ├── pre-commit.yml
│       ├── test_sbom.yml
│       ├── upload_component.yml
│       └── vulnerability_scan.yml
├── .gitignore
├── .gitmodules
├── .idf_build_apps.toml
├── .ignore_build_warnings.txt
├── .pre-commit-config.yaml
├── README.md
├── argtable3/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── idf_component.yml
│   ├── sbom_argtable3.yml
│   └── test_apps/
│       ├── argtable_unit_tests/
│       │   ├── CMakeLists.txt
│       │   ├── main/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── idf_component.yml
│       │   │   ├── test_argtable3.c
│       │   │   └── test_main.c
│       │   ├── pytest_argtable3.py
│       │   └── sdkconfig.defaults
│       └── console_compat/
│           ├── CMakeLists.txt
│           ├── README.md
│           ├── check_argtable_path.py
│           └── main/
│               ├── CMakeLists.txt
│               ├── idf_component.yml
│               └── test_main.c
├── bdc_motor/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── bdc_motor.h
│   ├── interface/
│   │   └── bdc_motor_interface.h
│   ├── src/
│   │   ├── bdc_motor.c
│   │   └── bdc_motor_mcpwm_impl.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── bdc_motor_test.c
│           └── idf_component.yml
├── catch2/
│   ├── CMakeLists.txt
│   ├── LICENSE.txt
│   ├── README.md
│   ├── cmd_catch2.cpp
│   ├── examples/
│   │   ├── catch2-console/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   ├── test_cases.cpp
│   │   │   │   └── test_main.cpp
│   │   │   ├── pytest_catch2_console.py
│   │   │   └── sdkconfig.defaults
│   │   └── catch2-test/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   ├── test_cases.cpp
│   │       │   └── test_main.cpp
│   │       ├── pytest_catch2.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   └── cmd_catch2.h
│   └── sbom_catch2.yml
├── cbor/
│   ├── CMakeLists.txt
│   ├── examples/
│   │   └── cbor/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── cbor_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_cbor.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   └── port/
│       └── include/
│           └── unreachable_fix.h
├── ccomp_timer/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── ccomp_timer.c
│   ├── ccomp_timer_impl_riscv.c
│   ├── ccomp_timer_impl_xtensa.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── ccomp_timer.h
│   ├── private_include/
│   │   └── ccomp_timer_impl.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── ccomp_timer_test.c
│       │   ├── ccomp_timer_test_api.c
│       │   ├── ccomp_timer_test_data.c
│       │   ├── ccomp_timer_test_inst.c
│       │   └── idf_component.yml
│       ├── pytest_ccomp_timer.py
│       └── sdkconfig.defaults
├── cjson/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   └── sbom_cJSON.yml
├── coap/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── examples/
│   │   ├── coap_client/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── certs/
│   │   │   │   │   ├── coap_ca.pem
│   │   │   │   │   ├── coap_client.crt
│   │   │   │   │   └── coap_client.key
│   │   │   │   ├── coap_client_example_main.c
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── oscore/
│   │   │   │       └── coap_oscore.conf
│   │   │   ├── partitions.csv
│   │   │   ├── pytest_coap_client_example.py
│   │   │   ├── sdkconfig.ci
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32h2
│   │   └── coap_server/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── certs/
│   │       │   │   ├── coap_ca.pem
│   │       │   │   ├── coap_server.crt
│   │       │   │   └── coap_server.key
│   │       │   ├── coap_server_example_main.c
│   │       │   ├── idf_component.yml
│   │       │   └── oscore/
│   │       │       └── coap_oscore.conf
│   │       ├── partitions.csv
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32h2
│   ├── idf_component.yml
│   ├── port/
│   │   └── include/
│   │       ├── coap_config.h
│   │       └── coap_config_posix.h
│   ├── sbom_libcoap.yml
│   └── sdkconfig.rename
├── conftest.py
├── coremark/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── coremark_example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── coremark_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_coremark.py
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32
│   │       ├── sdkconfig.defaults.esp32s2
│   │       └── sdkconfig.defaults.esp32s3
│   ├── idf_component.yml
│   ├── linker.lf.in
│   └── port/
│       ├── core_portme.c
│       └── core_portme.h.in
├── dhara/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   └── sbom_dhara.yml
├── eigen/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── dummy.c
│   ├── examples/
│   │   └── svd/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── main.cpp
│   │       └── sdkconfig.defaults
│   └── idf_component.yml
├── esp_cli/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── host_test/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_esp_cli.c
│   │   │   └── test_main.c
│   │   ├── pytest_host_esp_cli.py
│   │   └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_cli.h
│   ├── sbom_esp_cli.yml
│   ├── src/
│   │   └── esp_cli.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_esp_cli.c
│       │   └── test_main.c
│       ├── pytest_esp_cli.py
│       └── sdkconfig.defaults
├── esp_cli_commands/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── command_set/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── command_set_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_command_set.py
│   │   ├── command_with_arg/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── command_with_arg_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_command_with_arg.py
│   │   ├── conftest.py
│   │   ├── dynamic_registration/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── dynamic_registration_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_dynamic_registration.py
│   │   ├── integration_with_argtable/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── integration_with_argtable_main.c
│   │   │   └── pytest_integration_with_argtable.py
│   │   ├── static_registration/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── static_registration_main.c
│   │   │   └── pytest_static_registration.py
│   │   └── utils/
│   │       └── command_utils.h
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_cli_commands.h
│   │   └── esp_cli_commands_utils.h
│   ├── linker.lf
│   ├── linux/
│   │   └── esp_cli_commands.ld
│   ├── private_include/
│   │   ├── esp_cli_commands_internal.h
│   │   └── esp_cli_dynamic_commands.h
│   ├── sbom_esp_cli_commands.yml
│   ├── src/
│   │   ├── esp_cli_commands.c
│   │   ├── esp_cli_commands_helpers.c
│   │   └── esp_cli_dynamic_commands.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── include/
│       │   │   └── test_esp_cli_commands_utils.h
│       │   ├── test_esp_cli_commands.c
│       │   └── test_main.c
│       ├── pytest_esp_cli_commands.py
│       └── sdkconfig.defaults
├── esp_daylight/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── esp_daylight_example_main.c
│   │       │   └── idf_component.yml
│   │       └── pytest_esp_daylight_example.py
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_daylight.h
│   ├── src/
│   │   └── esp_daylight.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_esp_daylight.c
│       ├── pytest_esp_daylight.py
│       └── sdkconfig.defaults
├── esp_delta_ota/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── https_delta_ota/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── ca_cert.pem
│   │       │   ├── idf_component.yml
│   │       │   ├── main.c
│   │       │   └── tests/
│   │       │       ├── certs/
│   │       │       │   ├── prvtkey.pem
│   │       │       │   └── servercert.pem
│   │       │       ├── test_local_server_ota.c
│   │       │       └── test_local_server_ota.h
│   │       ├── partitions.csv
│   │       ├── pytest_https_delta_ota.py
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.defaults
│   │       └── tools/
│   │           ├── esp_delta_ota_patch_gen.py
│   │           └── requirements.txt
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_delta_ota.h
│   ├── src/
│   │   └── esp_delta_ota.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── esp_delta_ota_test_main.c
│       │   ├── idf_component.yml
│       │   └── test_esp_delta_ota.c
│       ├── pytest_esp_delta_ota.py
│       └── sdkconfig.defaults
├── esp_encrypted_img/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── pre_encrypted_ota/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── ecc_key/
│   │       │   └── public.pem
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── idf_component.yml
│   │       │   ├── pre_encrypted_ota.c
│   │       │   └── tests/
│   │       │       ├── certs/
│   │       │       │   ├── prvtkey.pem
│   │       │       │   └── servercert.pem
│   │       │       ├── test_local_server_ota.c
│   │       │       └── test_local_server_ota.h
│   │       ├── partitions.csv
│   │       ├── pytest_pre_encrypted_ota.py
│   │       ├── rsa_key/
│   │       │   └── private.pem
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.ci.partial_download
│   │       ├── sdkconfig.defaults
│   │       └── server_certs/
│   │           └── ca_cert.pem
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_encrypted_img.h
│   ├── private_include/
│   │   ├── esp_encrypted_img_priv.h
│   │   └── esp_encrypted_img_utilities.h
│   ├── project_include.cmake
│   ├── src/
│   │   ├── esp_encrypted_img.c
│   │   └── esp_encrypted_img_utilities.c
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── certs/
│   │   │   │   └── test_rsa_private_key.pem
│   │   │   ├── esp_encrypted_img_test.c
│   │   │   ├── idf_component.yml
│   │   │   ├── test.c
│   │   │   ├── test_mocks.c
│   │   │   └── test_mocks.h
│   │   ├── partitions.csv
│   │   ├── pytest_esp_encrypted_img.py
│   │   ├── sdkconfig.ci.ds_peripheral
│   │   ├── sdkconfig.defaults
│   │   ├── sdkconfig.defaults.esp32
│   │   └── sdkconfig.defaults.esp32s3
│   └── tools/
│       └── esp_enc_img_gen.py
├── esp_ext_part_tables/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── basic/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── example_utils.c
│   │       │   ├── example_utils.h
│   │       │   ├── idf_component.yml
│   │       │   └── main.c
│   │       ├── pytest_esp_ext_part_tables_example_basic.py
│   │       └── sdkconfig.defaults.ci
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_ext_part_tables.h
│   │   ├── esp_mbr.h
│   │   └── esp_mbr_utils.h
│   ├── src/
│   │   ├── esp_ext_part_tables.c
│   │   ├── esp_mbr.c
│   │   └── esp_mbr_utils.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   └── test_esp_ext_part.c
│       ├── pytest_esp_ext_part_tables.py
│       └── sdkconfig.defaults
├── esp_flash_dispatcher/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── esp_flash_dispatcher.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_flash_dispatcher.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_esp_flash_dispatcher.c
│       ├── partitions.csv
│       ├── pytest_flash_dispatcher.py
│       └── sdkconfig.defaults
├── esp_gcov/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── esp_gcov.h
│   ├── gcov_rtio.c
│   ├── idf_component.yml
│   ├── project_include.cmake
│   └── sdkconfig.rename
├── esp_isotp/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── inc/
│   │   └── esp_isotp.h
│   └── src/
│       ├── esp_isotp.c
│       └── isotp_config.h
├── esp_jpeg/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── Kconfig.projbuild
│   │           ├── decode_image.c
│   │           ├── decode_image.h
│   │           ├── idf_component.yml
│   │           ├── lcd_tjpgd_example_main.c
│   │           ├── pretty_effect.c
│   │           └── pretty_effect.h
│   ├── idf_component.yml
│   ├── include/
│   │   └── jpeg_decoder.h
│   ├── jpeg_decoder.c
│   ├── jpeg_default_huffman_table.c
│   ├── license.txt
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── jpg_to_rgb888_hex.py
│   │   │   ├── test_logo_jpg.h
│   │   │   ├── test_logo_rgb888.h
│   │   │   ├── test_tjpgd_main.c
│   │   │   ├── test_usb_camera_2_jpg.h
│   │   │   ├── test_usb_camera_2_rgb888.h
│   │   │   ├── test_usb_camera_jpg.h
│   │   │   ├── test_usb_camera_rgb888.h
│   │   │   └── tjpgd_test.c
│   │   ├── pytest_esp_jpeg.py
│   │   ├── sdkconfig.ci
│   │   └── sdkconfig.defaults
│   └── tjpgd/
│       ├── tjpgd.c
│       ├── tjpgd.h
│       └── tjpgdcnf.h
├── esp_lcd_qemu_rgb/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── lcd_qemu_rgb_panel/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── Kconfig.projbuild
│   │           ├── idf_component.yml
│   │           ├── lcd_qemu_rgb_panel_main.c
│   │           └── lvgl_demo_ui.c
│   ├── idf_component.yml
│   ├── interface/
│   │   └── esp_lcd_qemu_rgb.h
│   └── src/
│       ├── esp_lcd_qemu_rgb.c
│       └── esp_lcd_qemu_rgb_struct.h
├── esp_linenoise/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── basic_line_reading/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── basic_line_reading.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_basic_line_reading.py
│   │   ├── completion/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── completion.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_completion.py
│   │   ├── history_usage/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── history_usage.c
│   │   │   │   └── idf_component.yml
│   │   │   ├── partitions.csv
│   │   │   ├── pytest_history_usage.py
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32
│   │   ├── multi_instance/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── multi_instance.c
│   │   │   └── pytest_multi_instance.py
│   │   └── utils/
│   │       ├── README.md
│   │       ├── common_io.c
│   │       └── common_io.h
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_linenoise.h
│   ├── linenoise/
│   │   ├── linenoise.c
│   │   └── linenoise.h
│   ├── private_include/
│   │   └── esp_linenoise_private.h
│   ├── sbom_esp_linenoise.yml
│   ├── src/
│   │   ├── esp_linenoise.c
│   │   └── esp_linenoise_internals.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── include/
│       │   │   └── test_utils.h
│       │   ├── test_esp_linenoise_behavioral.c
│       │   ├── test_esp_linenoise_get_set.c
│       │   ├── test_linenoise_legacy.c
│       │   ├── test_main.c
│       │   └── test_utils.c
│       ├── pytest_linenoise.py
│       └── sdkconfig.defaults
├── esp_schedule/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── esp_schedule_example_main.c
│   │       │   ├── esp_schedule_example_stub.c
│   │       │   ├── idf_component.yml
│   │       │   └── network/
│   │       │       ├── app_network.c
│   │       │       └── app_network.h
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32c2
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_schedule.h
│   └── src/
│       ├── esp_schedule.c
│       ├── esp_schedule_internal.h
│       └── esp_schedule_nvs.c
├── esp_serial_slave_link/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       ├── index.md
│   │       ├── sdio_slave_protocol.md
│   │       └── spi_slave_hd_protocol.md
│   ├── essl.c
│   ├── essl_internal.h
│   ├── essl_sdio.c
│   ├── essl_sdio_defs.c
│   ├── essl_spi.c
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_serial_slave_link/
│   │   │   ├── essl.h
│   │   │   ├── essl_sdio.h
│   │   │   ├── essl_sdio_defs.h
│   │   │   └── essl_spi.h
│   │   └── essl_spi/
│   │       ├── esp32c2_defs.h
│   │       ├── esp32c3_defs.h
│   │       ├── esp32s2_defs.h
│   │       └── esp32s3_defs.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── essl_test.c
│           └── idf_component.yml
├── esp_sysview/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── linker.lf.in
│   ├── sbom_segger.yml
│   ├── sdkconfig.rename
│   └── src/
│       ├── Config/
│       │   ├── Global.h
│       │   ├── SEGGER_RTT_Conf.h
│       │   └── SEGGER_SYSVIEW_Conf.h
│       ├── SEGGER/
│       │   ├── SEGGER.h
│       │   ├── SEGGER_RTT.h
│       │   ├── SEGGER_SYSVIEW.c
│       │   ├── SEGGER_SYSVIEW.h
│       │   ├── SEGGER_SYSVIEW_ConfDefaults.h
│       │   └── SEGGER_SYSVIEW_Int.h
│       ├── Sample/
│       │   └── FreeRTOSV10.4/
│       │       ├── Config/
│       │       │   └── esp/
│       │       │       └── SEGGER_SYSVIEW_Config_FreeRTOS.c
│       │       ├── SEGGER_SYSVIEW_FreeRTOS.c
│       │       └── SEGGER_SYSVIEW_FreeRTOS.h
│       ├── esp/
│       │   ├── SEGGER_RTT_esp.c
│       │   ├── SEGGER_SYSVIEW_esp.c
│       │   ├── adapter_encoder_sysview.c
│       │   └── adapter_encoder_sysview.h
│       ├── ext/
│       │   ├── heap_trace_module.c
│       │   ├── heap_trace_tohost.c
│       │   └── logging.c
│       └── include/
│           ├── esp_sysview_heap_trace_module.h
│           └── esp_trace_freertos_impl.h
├── expat/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── idf_component.yml
│   ├── port/
│   │   └── include/
│   │       └── expat_config.h
│   ├── sbom_libexpat.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_expat.c
│       │   └── test_main.c
│       ├── pytest_expat.py
│       └── sdkconfig.defaults
├── fmt/
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── examples/
│   │   └── hello_fmt/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── hello_fmt.cpp
│   │       │   └── idf_component.yml
│   │       └── pytest_fmt.py
│   ├── idf_component.yml
│   └── sbom_fmt.yml
├── freetype/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── freetype-example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── freetype-example.c
│   │       │   └── idf_component.yml
│   │       ├── partitions.csv
│   │       ├── pytest_freetype.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   └── sbom_freetype.yml
├── iqmath/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── _IQNfunctions/
│   │   ├── _IQNasin_acos.c
│   │   ├── _IQNatan2.c
│   │   ├── _IQNdiv.c
│   │   ├── _IQNdiv.h
│   │   ├── _IQNexp.c
│   │   ├── _IQNfrac.c
│   │   ├── _IQNlog.c
│   │   ├── _IQNmpy.c
│   │   ├── _IQNmpy.h
│   │   ├── _IQNmpyIQX.c
│   │   ├── _IQNrepeat.c
│   │   ├── _IQNrmpy.c
│   │   ├── _IQNrsmpy.c
│   │   ├── _IQNsin_cos.c
│   │   ├── _IQNsqrt.c
│   │   ├── _IQNtables.c
│   │   ├── _IQNtables.h
│   │   ├── _IQNtoF.c
│   │   ├── _IQNtoa.c
│   │   ├── _IQNversion.c
│   │   └── _atoIQN.c
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── iqmath_example_main.c
│   │       └── pytest_iqmath_example.py
│   ├── idf_component.yml
│   ├── include/
│   │   └── IQmathLib.h
│   ├── support/
│   │   ├── RTS_support.h
│   │   └── support.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_iqmath.c
│       ├── pytest_iqmath.py
│       └── sdkconfig.defaults
├── jsmn/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── jsmn.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── jsmn_test.c
├── json_generator/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── json_generator.h
│   ├── src/
│   │   └── json_generator.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── json_generator_test.c
├── json_parser/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── json_parser.h
│   ├── src/
│   │   └── json_parser.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_json_parser.c
│       │   └── test_main.c
│       ├── pytest_json_parser.py
│       └── sdkconfig.defaults
├── led_strip/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       └── index.md
│   ├── examples/
│   │   ├── led_strip_rmt_ws2812/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   └── main/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── idf_component.yml
│   │   │       └── led_strip_rmt_ws2812_main.c
│   │   └── led_strip_spi_ws2812/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── idf_component.yml
│   │           └── led_strip_spi_ws2812_main.c
│   ├── idf_component.yml
│   ├── include/
│   │   ├── led_strip.h
│   │   ├── led_strip_rmt.h
│   │   ├── led_strip_spi.h
│   │   └── led_strip_types.h
│   ├── interface/
│   │   └── led_strip_interface.h
│   └── src/
│       ├── led_strip_api.c
│       ├── led_strip_rmt_dev.c
│       ├── led_strip_rmt_encoder.c
│       ├── led_strip_rmt_encoder.h
│       └── led_strip_spi_dev.c
├── libjpeg-turbo/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── dummy.c
│   ├── examples/
│   │   └── hello_jpeg/
│   │       ├── CMakeLists.txt
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── decode_image.c
│   │           ├── decode_image.h
│   │           ├── idf_component.yml
│   │           └── main.c
│   ├── idf_component.yml
│   └── sbom_libjpeg.yml
├── libpng/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── pnglibconf.h
│   ├── sbom_libpng.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── out.pgm
│       │   ├── test_libpng.c
│       │   └── test_main.c
│       ├── pytest_libpng.py
│       └── sdkconfig.defaults
├── libsodium/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   ├── port/
│   │   ├── crypto_hash_mbedtls/
│   │   │   ├── crypto_hash_sha256_mbedtls.c
│   │   │   └── crypto_hash_sha512_mbedtls.c
│   │   ├── randombytes_esp32.c
│   │   └── randombytes_internal.h
│   ├── port_include/
│   │   ├── sodium/
│   │   │   ├── crypto_hash_sha256.h
│   │   │   ├── crypto_hash_sha512.h
│   │   │   └── version.h
│   │   └── sodium.h
│   ├── sbom_libsodium.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_main.c
│       │   └── test_sodium.c
│       ├── partitions.csv
│       ├── pytest_libsodium.py
│       └── sdkconfig.defaults
├── network_provisioning/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── README.md
│   │   ├── thread_prov/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── app_main.c
│   │   │   │   ├── esp_ot_config.h
│   │   │   │   └── idf_component.yml
│   │   │   ├── partitions.csv
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32
│   │   └── wifi_prov/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── app_main.c
│   │       │   └── idf_component.yml
│   │       ├── partitions.csv
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32
│   ├── idf_component.yml
│   ├── include/
│   │   └── network_provisioning/
│   │       ├── manager.h
│   │       ├── network_config.h
│   │       ├── network_scan.h
│   │       ├── scheme_ble.h
│   │       ├── scheme_console.h
│   │       └── scheme_softap.h
│   ├── proto/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── makefile
│   │   ├── network_config.proto
│   │   ├── network_constants.proto
│   │   ├── network_ctrl.proto
│   │   └── network_scan.proto
│   ├── proto-c/
│   │   ├── network_config.pb-c.c
│   │   ├── network_config.pb-c.h
│   │   ├── network_constants.pb-c.c
│   │   ├── network_constants.pb-c.h
│   │   ├── network_ctrl.pb-c.c
│   │   ├── network_ctrl.pb-c.h
│   │   ├── network_scan.pb-c.c
│   │   └── network_scan.pb-c.h
│   ├── python/
│   │   ├── network_config_pb2.py
│   │   ├── network_constants_pb2.py
│   │   ├── network_ctrl_pb2.py
│   │   └── network_scan_pb2.py
│   ├── src/
│   │   ├── handlers.c
│   │   ├── manager.c
│   │   ├── network_config.c
│   │   ├── network_ctrl.c
│   │   ├── network_ctrl.h
│   │   ├── network_provisioning_priv.h
│   │   ├── network_scan.c
│   │   ├── scheme_ble.c
│   │   ├── scheme_console.c
│   │   └── scheme_softap.c
│   └── tool/
│       └── esp_prov/
│           ├── README.md
│           ├── __init__.py
│           ├── esp_prov.py
│           ├── proto/
│           │   └── __init__.py
│           ├── prov/
│           │   ├── __init__.py
│           │   ├── custom_prov.py
│           │   ├── network_ctrl.py
│           │   ├── network_prov.py
│           │   └── network_scan.py
│           ├── security/
│           │   ├── __init__.py
│           │   ├── security.py
│           │   ├── security0.py
│           │   ├── security1.py
│           │   ├── security2.py
│           │   └── srp6a.py
│           ├── transport/
│           │   ├── __init__.py
│           │   ├── ble_cli.py
│           │   ├── transport.py
│           │   ├── transport_ble.py
│           │   ├── transport_console.py
│           │   └── transport_http.py
│           └── utils/
│               ├── __init__.py
│               └── convenience.py
├── nghttp/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   ├── port/
│   │   ├── include/
│   │   │   └── nghttp2/
│   │   │       └── nghttp2ver.h
│   │   └── private_include/
│   │       ├── config.h
│   │       └── esp_nghttp2_session.h
│   └── sbom_nghttp2.yml
├── onewire_bus/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       └── index.md
│   ├── idf_component.yml
│   ├── include/
│   │   ├── onewire_bus.h
│   │   ├── onewire_bus_impl_rmt.h
│   │   ├── onewire_bus_impl_uart.h
│   │   ├── onewire_cmd.h
│   │   ├── onewire_crc.h
│   │   ├── onewire_device.h
│   │   └── onewire_types.h
│   ├── interface/
│   │   └── onewire_bus_interface.h
│   ├── src/
│   │   ├── onewire_bus_api.c
│   │   ├── onewire_bus_impl_rmt.c
│   │   ├── onewire_bus_impl_uart.c
│   │   ├── onewire_crc.c
│   │   └── onewire_device.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── Kconfig.projbuild
│       │   ├── idf_component.yml
│       │   └── onewire_bus_test.c
│       ├── pytest_onewire_bus.py
│       ├── sdkconfig.ci.rmt
│       └── sdkconfig.ci.uart
├── pcap/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── pcap.h
│   ├── src/
│   │   └── pcap.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── pcap_test.c
├── pid_ctrl/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── pid_ctrl.h
│   ├── src/
│   │   └── pid_ctrl.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── pid_ctrl_test.c
├── pytest.ini
├── qrcode/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── esp_qrcode_main.c
│   ├── esp_qrcode_wrapper.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── qrcode.h
│   ├── qrcodegen.c
│   ├── qrcodegen.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── qrcode_test.c
├── quirc/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_main.c
│       │   ├── test_qrcode.pgm
│       │   └── test_quirc.c
│       ├── pytest_quirc.py
│       └── sdkconfig.defaults
├── sh2lib/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── http2_request/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── http2_request_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_http2_request.py
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.ci.esp32
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── sh2lib.c
│   └── sh2lib.h
├── spi_nand_flash/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── VERSIONING.md
│   ├── host_test/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_app_main.cpp
│   │   │   ├── test_nand_flash.cpp
│   │   │   ├── test_nand_flash_bdl.cpp
│   │   │   └── test_nand_flash_ftl.cpp
│   │   ├── pytest_nand_flash_linux.py
│   │   └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_nand_blockdev.h
│   │   ├── nand_device_types.h
│   │   ├── nand_diag_api.h
│   │   ├── nand_linux_mmap_emul.h
│   │   ├── nand_private/
│   │   │   └── nand_impl_wrap.h
│   │   ├── spi_nand_flash.h
│   │   └── spi_nand_flash_test_helpers.h
│   ├── layered_architecture.md
│   ├── priv_include/
│   │   ├── nand.h
│   │   ├── nand_flash_devices.h
│   │   ├── nand_impl.h
│   │   └── spi_nand_oper.h
│   ├── src/
│   │   ├── devices/
│   │   │   ├── nand_alliance.c
│   │   │   ├── nand_gigadevice.c
│   │   │   ├── nand_micron.c
│   │   │   ├── nand_winbond.c
│   │   │   ├── nand_xtx.c
│   │   │   └── nand_zetta.c
│   │   ├── dhara_glue.c
│   │   ├── nand.c
│   │   ├── nand_diag_api.c
│   │   ├── nand_flash_blockdev.c
│   │   ├── nand_impl.c
│   │   ├── nand_impl_linux.c
│   │   ├── nand_impl_wrap.c
│   │   ├── nand_linux_mmap_emul.c
│   │   ├── nand_wl_blockdev.c
│   │   ├── spi_nand_flash_test_helpers.c
│   │   └── spi_nand_oper.c
│   └── test_app/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   ├── test_spi_nand_flash.c
│       │   └── test_spi_nand_flash_bdl.c
│       ├── pytest_spi_nand_flash.py
│       ├── sdkconfig.ci.bdl
│       ├── sdkconfig.ci.default
│       └── sdkconfig.defaults
├── spi_nand_flash_fatfs/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── nand_flash/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── spi_nand_flash_example_main.c
│   │   │   ├── pytest_nand_flash_example.py
│   │   │   └── sdkconfig.ci
│   │   └── nand_flash_debug_app/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── spi_nand_flash_debug_app_main.c
│   │       ├── pytest_nand_flash_debug_example.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   ├── diskio_nand.h
│   │   └── esp_vfs_fat_nand.h
│   └── src/
│       ├── diskio_nand.c
│       └── vfs_fat_spinandflash.c
├── supertinycron/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE.txt
│   ├── README.md
│   ├── examples/
│   │   └── cron_example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── cron_example_main.c
│   │           └── idf_component.yml
│   ├── idf_component.yml
│   └── sbom_supertinycron.yml
├── thorvg/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── cross_file.txt.in
│   ├── dummy.c
│   ├── examples/
│   │   └── thorvg_lottie/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── lottie_files/
│   │       │   └── emoji-animation.json
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── thorvg_example_main.c
│   │       ├── partitions.csv
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32p4
│   │       └── sdkconfig.defaults.esp32s3
│   ├── idf_component.yml
│   ├── project_include.cmake
│   └── sbom_thorvg.yml
├── touch_element/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       ├── img/
│   │       │   └── source/
│   │       │       ├── te_architecture.drawio
│   │       │       ├── te_button.odg
│   │       │       ├── te_component.odg
│   │       │       ├── te_matrix.odg
│   │       │       ├── te_slider.odg
│   │       │       └── te_threshold.odg
│   │       └── index.md
│   ├── examples/
│   │   ├── touch_button/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_button_example_main.c
│   │   │   └── pytest_touch_button.py
│   │   ├── touch_element_waterproof/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── waterproof_example_main.c
│   │   │   └── pytest_touch_element_waterproof.py
│   │   ├── touch_elements_combination/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_elements_example_main.c
│   │   │   └── pytest_touch_elements_combination.py
│   │   ├── touch_matrix/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_matrix_example_main.c
│   │   │   └── pytest_touch_matrix.py
│   │   └── touch_slider/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── idf_component.yml
│   │       │   └── touch_slider_example_main.c
│   │       └── pytest_touch_slider.py
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_private/
│   │   │   ├── touch_element_private.h
│   │   │   ├── touch_sensor_legacy_hal.h
│   │   │   └── touch_sensor_legacy_ll.h
│   │   └── touch_element/
│   │       ├── touch_button.h
│   │       ├── touch_element.h
│   │       ├── touch_matrix.h
│   │       ├── touch_sensor_legacy_types.h
│   │       └── touch_slider.h
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_app_main.c
│   │   │   ├── test_touch_button.c
│   │   │   ├── test_touch_element.c
│   │   │   ├── test_touch_matrix.c
│   │   │   └── test_touch_slider.c
│   │   ├── pytest_touch_element.py
│   │   └── sdkconfig.defaults
│   ├── touch_button.c
│   ├── touch_element.c
│   ├── touch_matrix.c
│   ├── touch_sensor_legacy_hal.c
│   └── touch_slider.c
├── unit-test-app/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── unit-test-app/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── .gitkeep
│   │       ├── idf_ext.py
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   └── app_main.c
│   │       ├── partition_table_unit_test_app.csv
│   │       ├── partition_table_unit_test_app_2m.csv
│   │       ├── partition_table_unit_test_two_ota.csv
│   │       ├── partition_table_unit_test_two_ota_2m.csv
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32
│   │       ├── sdkconfig.defaults.esp32c2
│   │       ├── sdkconfig.defaults.esp32c3
│   │       ├── sdkconfig.defaults.esp32s2
│   │       ├── sdkconfig.defaults.esp32s3
│   │       └── tools/
│   │           ├── CreateSectionTable.py
│   │           └── ElfUnitTestParser.py
│   └── idf_component.yml
└── zlib/
    ├── .build-test-rules.yml
    ├── CMakeLists.txt
    ├── LICENSE
    ├── README.md
    ├── idf_component.yml
    ├── sbom_zlib.yml
    └── test_apps/
        ├── CMakeLists.txt
        └── main/
            ├── CMakeLists.txt
            ├── idf_component.yml
            └── zlib_test.c

================================================
FILE CONTENTS
================================================

================================================
FILE: .build-test-rules.yml
================================================
led_strip/examples/led_strip_rmt_ws2812:
  disable:
    - if: CONFIG_SOC_RMT_SUPPORTED != 1
      reason: Relevant only for RMT enabled targets

led_strip/examples/led_strip_spi_ws2812:
  enable:
    - if: (IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 1) or (IDF_VERSION_MAJOR > 5)
      reason: Example uses some SPI driver features which was introduced in IDF v5.1
  disable:
    - if: CONFIG_SOC_GPSPI_SUPPORTED != 1
      reason: Relevant only for SPI enabled targets

esp_delta_ota:
  enable:
    - if: IDF_VERSION_MAJOR > 4
      reason: Example uses esp_app_format component which was introduced in IDF v5.0
  disable:
    - if: SOC_WIFI_SUPPORTED != 1
      reason: Relevant only for WiFi enabled targets

esp_encrypted_img/examples/pre_encrypted_ota:
  enable:
    - if: IDF_TARGET in ["esp32", "esp32s3"]
      reason: ESP32 runs RSA OTA encryption test, ESP32-S3 runs ECC OTA encryption test

esp_ext_part_tables/test_apps:
  enable:
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 1) or (IDF_VERSION_MAJOR >= 6)) and IDF_TARGET == "linux"
      reason: Host test is enough

sh2lib/examples/http2_request:
  enable:
    - if: IDF_VERSION_MAJOR > 4 and INCLUDE_DEFAULT == 1
      reason: Example uses sh2lib component which was introduced in IDF v5.0

esp_jpeg/examples/get_started:
  enable:
    - if: IDF_VERSION_MAJOR > 4 and IDF_TARGET in ["esp32", "esp32s2", "esp32s3"]
      reason: Example depends on BSP, which is supported only for IDF >= 5.0 and limited targets

esp_schedule/examples/get_started:
  enable:
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 1) or (IDF_VERSION_MAJOR > 5)) and SOC_WIFI_SUPPORTED == 1
      reason: Network provisioning component has dependencies IDF >= 5.1; example only supports Wi-Fi enabled targets

catch2/examples/catch2-test:
  enable:
    - if: INCLUDE_DEFAULT == 1 or IDF_TARGET == "linux"
  disable:
    - if: IDF_VERSION_MAJOR < 5
      reason: Example relies on WHOLE_ARCHIVE component property which was introduced in IDF v5.0
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR < 1) and IDF_TARGET == "linux")
      reason: Docker container for release/v5.0 doesn't contain a C++ compiler

catch2/examples/catch2-console:
  disable:
    - if: IDF_VERSION_MAJOR < 5
      reason: Example relies on WHOLE_ARCHIVE component property which was introduced in IDF v5.0

network_provisioning/examples/thread_prov:
  enable:
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 1) or (IDF_VERSION_MAJOR > 5))
      reason: Network provisioning component has dependencies IDF >= 5.1
  disable:
    - if: SOC_IEEE802154_SUPPORTED != 1
      reason: Relevant only for IEEE802.15.4 enabled targets

network_provisioning/examples/wifi_prov:
  enable:
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 1) or (IDF_VERSION_MAJOR > 5))
      reason: Network provisioning component has dependencies IDF >= 5.1
  disable:
    - if: SOC_WIFI_SUPPORTED != 1
      reason: Relevant only for WiFi enabled targets

esp_lcd_qemu_rgb/examples/lcd_qemu_rgb_panel:
  enable:
    - if: ((IDF_VERSION_MAJOR == 5 and IDF_VERSION_MINOR >= 3) or (IDF_VERSION_MAJOR > 5)) and (IDF_TARGET in ["esp32", "esp32c3"])
      reason: Example is meant to be run under QEMU, which currently only supports ESP32 and ESP32-C3

spi_nand_flash/test_app:
  disable:
    - if: IDF_VERSION_MAJOR < 5
      reason: The spi_nand_flash component is compatible with IDF version v5.0 and above, due to a change in the f_mkfs API in versions above v5.0, which is not supported in older IDF versions.
    - if: IDF_VERSION_MAJOR < 6 and CONFIG_NAME == "bdl"
      reason: BDL support requires the esp_blockdev interface, available starting from IDF version v6.0.

spi_nand_flash/host_test:
  enable:
    - if: IDF_TARGET == "linux"
  disable:
    - if: IDF_VERSION_MAJOR < 5
      reason: The spi_nand_flash component is compatible with IDF version v5.0 and above, due to a change in the f_mkfs API in versions above v5.0, which is not supported in older IDF versions.
    - if: IDF_VERSION_MAJOR == 5 and (IDF_VERSION_MINOR < 3)
      reason: Fails to build on older versions of IDF

spi_nand_flash_fatfs/examples/nand_flash:
  disable:
    - if: IDF_VERSION_MAJOR < 5
      reason: The spi_nand_flash component is compatible with IDF version v5.0 and above, due to a change in the f_mkfs API in versions above v5.0, which is not supported in older IDF versions.


================================================
FILE: .codespellrc
================================================
[codespell]
skip = build,COPYING.*,LICENSE,*.svg
ignore-words-list = ser,DOUT,dout,ans,nd,Dettached,IST
write-changes = true


================================================
FILE: .editorconfig
================================================
# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# http://editorconfig.org

root = true

[*]
indent_style = space
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[{*.md,*.rst}]
trim_trailing_whitespace = false

[{*.cmake,CMakeLists.txt}]
indent_style = space
indent_size = 4
max_line_length = 120

[{*.sh,*.yml,*.yaml}]
indent_style = space
indent_size = 2


================================================
FILE: .git-blame-ignore-revs
================================================
# Fix configuration files
9e76da9fa7ddbeef8cb0d47fd8f2e7668f58b3ec


================================================
FILE: .github/ISSUE_TEMPLATE/bug-report.yml
================================================
name: Bug report
description: Report build and runtime bugs
labels: ["Type: Bug"]
body:
  - type: checkboxes
    id: checklist
    attributes:
      label: Answers checklist.
      description: Before submitting a new issue, please follow the checklist and try to find the answer.
      options:
        - label: I have read the component documentation [ESP-IDF Components](https://components.espressif.com) and the issue is not addressed there.
          required: true
        - label: I am using target and esp-idf version as defined in component's idf_component.yml
          required: true
        - label: I have searched the [issue tracker](https://github.com/espressif/idf-extra-components/issues?q=is%3Aissue) for a similar issue and not found any related issue.
          required: true
  - type: dropdown
    id: component
    attributes:
      label: Which component are you using? If you choose Other, provide details in More Information.
      multiple: false
      options:
        - argtable3
        - bdc_motor
        - catch2
        - cbor
        - ccomp_timer
        - cjson
        - coap
        - coremark
        - dhara
        - eigen
        - esp_daylight
        - esp_delta_ota
        - esp_cli_commands
        - esp_encrypted_img
        - esp_flash_dispatcher
        - esp_ext_part_tables
        - esp_gcov
        - esp_isotp
        - esp_jpeg
        - esp_lcd_qemu_rgb
        - esp_schedule
        - esp_cli
        - esp_serial_slave_link
        - esp_sysview
        - expat
        - fmt
        - freetype
        - iqmath
        - jsmn
        - json_generator
        - json_parser
        - led_strip
        - libpng
        - libsodium
        - esp_linenoise
        - network_provisioning
        - nghttp
        - onewire_bus
        - pcap
        - pid_ctrl
        - qrcode
        - quirc
        - sh2lib
        - spi_nand_flash
        - spi_nand_flash_fatfs
        - supertinycron
        - thorvg
        - touch_element
        - unit-test-app
        - zlib
        - libjpeg-turbo
        - Other
    validations:
      required: true
  - type: input
    id: idf_version
    attributes:
      label: ESP-IDF version.
      description: On which ESP-IDF version does this issue occur on? Run `git describe --tags` in your esp-idf folder to find it.
      placeholder: ex. v5.0-rc1
    validations:
      required: true
  - type: input
    id: devkit
    attributes:
      label: Development Kit.
      description: On which Development Kit does this issue occur on?
      placeholder: ex. ESP32-Wrover-Kit v2 | Custom Board
    validations:
      required: true
  - type: input
    id: component_version
    attributes:
      label: Used Component version.
      description: On which Component version does this issue occur on? Check `dependencies.lock` file in your project root to find it.
      placeholder: ex. v1.2.0-rc0
    validations:
      required: true
  - type: textarea
    id: more-info
    attributes:
      label: More Information.
      description: Do you have any other information from investigating this?
      placeholder: ex. I tried on my friend's Windows 10 PC and the command works there.
    validations:
      required: false


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Component Registry
    url: https://components.espressif.com
    about: Registry with all available ESP-IDF components.
  - name: ESP-IDF Programming Guide
    url: https://docs.espressif.com/projects/esp-idf/en/latest/
    about: Documentation for configuring and using ESP-IDF.
  - name: Espressif documentation page
    url: https://www.espressif.com/en/support/download/documents
    about: Hardware documentation (datasheets, Technical Reference Manual, etc).
  - name: Forum
    url: https://esp32.com
    about: For questions about using ESP-IDF and/or ESP32 series chips. Please submit all questions starting "How do I..." here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature-request.yml
================================================
name: Feature request
description: Suggest an idea or new component for this project.
labels: ["Type: Feature Request"]
body:
  - type: markdown
    attributes:
      value: |
        * We welcome any ideas or feature requests! It’s helpful if you can explain exactly why the feature would be useful.
        * There are usually some outstanding feature requests in the [existing issues list](https://github.com/espressif/idf-extra-components/labels/Type%3A%20Feature%20Request), feel free to add comments to them.
  - type: textarea
    id: problem-related
    attributes:
      label: Is your feature request related to a problem?
      description: Please provide a clear and concise description of what the problem is.
      placeholder: ex. I'm always frustrated when ...
  - type: textarea
    id: solution
    attributes:
      label: Describe the solution you'd like.
      description: Please provide a clear and concise description of what you want to happen.
      placeholder: ex. When building my application ...
  - type: textarea
    id: alternatives
    attributes:
      label: Describe alternatives you've considered.
      description: Please provide a clear and concise description of any alternative solutions or features you've considered.
      placeholder: ex. Choosing other approach wouldn't work, because ...
  - type: textarea
    id: context
    attributes:
      label: Additional context.
      description: Please add any other context or screenshots about the feature request here.
      placeholder: ex. This would work only when ...


================================================
FILE: .github/ISSUE_TEMPLATE/other-issue.yml
================================================
name: General issue report
description: File an issue report
body:
  - type: checkboxes
    id: checklist
    attributes:
      label: Answers checklist.
      description: Before submitting a new issue, please follow the checklist and try to find the answer.
      options:
        - label: I have read the documentation of the component in question and the issue is not addressed there.
          required: true
        - label: I have searched the issue tracker for a similar issue and not found a similar issue.
          required: true
  - type: textarea
    id: issue
    attributes:
      label: General issue report
      description: Your issue report goes here.
      placeholder: ex. How do I...
    validations:
      required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/new_component.md
================================================
# Checklist

- [ ] Component contains License
- [ ] Component contains README.md
- [ ] Component contains idf_component.yml file with `url` field defined
- [ ] Component was added to [upload job](https://github.com/espressif/idf-extra-components/blob/master/.github/workflows/upload_component.yml#L18)
- [ ] Component was added to [bug report](https://github.com/espressif/idf-extra-components/blob/master/.github/ISSUE_TEMPLATE/bug-report.yml?plain=1#L22)
- [ ] Component has an example project
- [ ] _Optional:_ Component has a test_app
- [ ] CI passing

# Change description
_Please describe your change here_


================================================
FILE: .github/PULL_REQUEST_TEMPLATE/update_component.md
================================================
# Checklist

- [ ] Version in idf_component.yml file bumped
- [ ] _Optional:_ README.md updated
- [ ] CI passing

# Change description
_Please describe your change here_


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
# Checklist

- [ ] Component contains License
- [ ] Component contains README.md
- [ ] Component contains idf_component.yml file with `url` field defined
- [ ] Component was added to [upload job](https://github.com/espressif/idf-extra-components/blob/master/.github/workflows/upload_component.yml#L18)
- [ ] Component was added to [build job](https://github.com/espressif/idf-extra-components/blob/master/test_app/CMakeLists.txt#L8)
- [ ] _Optional:_ Component contains unit tests
- [ ] CI passing

# Change description
_Please describe your change here_


================================================
FILE: .github/build_docs.py
================================================
#!/usr/bin/env python3
"""
Documentation build script for ESP-IDF Extra Components.

This script searches for components with documentation, builds them using mdbook,
and copies the built documentation to an output directory.
"""

import argparse
import logging
import os
import pathlib
import shutil
import subprocess
import sys
from contextlib import contextmanager
from dataclasses import dataclass
from typing import List, Union


# Configure logging
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S"
)
logger = logging.getLogger("build_docs")


@dataclass
class BuildConfig:
    """Configuration for the documentation build process."""
    repo_root: pathlib.Path
    output_dir: pathlib.Path
    version: str = "latest"
    fail_fast: bool = True


@contextmanager
def change_directory(path: Union[str, pathlib.Path]):
    """Context manager for temporarily changing the working directory."""
    original_dir = pathlib.Path.cwd()
    try:
        os.chdir(path)
        yield
    finally:
        os.chdir(original_dir)


def find_components_with_docs(repo_root: pathlib.Path) -> List[str]:
    """
    Search the repo for component folders that have docs/book.toml.

    Args:
        repo_root: Repository root directory

    Returns:
        List of component names with documentation
    """
    components = []

    for item in repo_root.iterdir():
        if not item.is_dir():
            continue

        docs_path = item / "docs"
        book_toml_path = docs_path / "book.toml"

        if docs_path.is_dir() and book_toml_path.is_file():
            components.append(item.name)
            logger.info(f"Found component with docs: {item.name}")

    return components


def generate_api_docs(component_docs_path: pathlib.Path) -> bool:
    """
    Generate API documentation using esp-doxybook.

    Args:
        component_docs_path: Path to component docs directory

    Returns:
        True if successful, False otherwise
    """
    api_md_path = component_docs_path / "src" / "api.md"

    # Create src directory if it doesn't exist
    (component_docs_path / "src").mkdir(exist_ok=True)

    logger.info(f"Generating API documentation in {api_md_path}")

    try:
        with change_directory(component_docs_path):
            # Note: Using relative paths since we're in the docs directory
            subprocess.run(
                ["esp-doxybook", "-i", "doxygen_output/xml", "-o", "src/api.md"],
                check=True,
                capture_output=True,
                text=True
            )
        logger.info("API documentation generated successfully")
        return True
    except subprocess.CalledProcessError as e:
        logger.warning(f"Failed to generate API documentation: {e}")
        logger.warning(f"stdout: {e.stdout if hasattr(e, 'stdout') else 'N/A'}")
        logger.warning(f"stderr: {e.stderr if hasattr(e, 'stderr') else 'N/A'}")
        logger.warning("Continuing with mdbook build...")
        return False


def build_component_docs(component_name: str, config: BuildConfig) -> bool:
    """
    Build documentation for a component using mdbook.

    Args:
        component_name: Component name
        config: Build configuration

    Returns:
        True if build was successful, False otherwise
    """
    component_docs_path = config.repo_root / component_name / "docs"

    logger.info(f"Building docs for {component_name}...")

    try:
        # Generate API documentation
        generate_api_docs(component_docs_path)

        # Build mdbook
        env = os.environ.copy()

        # Set site-url based on version
        site_url = f"/idf-extra-components/{config.version}/{component_name}/"

        logger.info(f"Setting site-url to: {site_url}")
        env["MDBOOK_OUTPUT__HTML__SITE_URL"] = site_url

        result = subprocess.run(
            ["mdbook", "build", str(component_docs_path)],
            check=True,
            env=env,
            capture_output=True,
            text=True
        )

        # Log mdbook output at debug level
        logger.debug(f"mdbook stdout: {result.stdout}")
        logger.debug(f"mdbook stderr: {result.stderr}")

        # Verify the book directory was created
        book_path = component_docs_path / "book"
        if not book_path.exists():
            logger.error(f"Book path {book_path} does not exist after build")
            return False

        return True
    except subprocess.CalledProcessError as e:
        logger.error(f"Error building docs for {component_name}: {e}")
        logger.error(f"stdout: {e.stdout if hasattr(e, 'stdout') else 'N/A'}")
        logger.error(f"stderr: {e.stderr if hasattr(e, 'stderr') else 'N/A'}")
        return False


def copy_docs_to_output(component_name: str, config: BuildConfig) -> bool:
    """
    Copy the built documentation to the docs output directory.

    Args:
        component_name: Component name
        config: Build configuration

    Returns:
        True if copy was successful, False otherwise
    """
    source_path = config.repo_root / component_name / "docs" / "book"
    dest_path = config.output_dir / component_name

    if not source_path.exists():
        logger.warning(f"Source path {source_path} does not exist, skipping copy")
        return False

    # Remove destination if it exists to avoid issues with copytree
    if dest_path.exists():
        shutil.rmtree(dest_path)

    # Create parent directory if needed
    dest_path.parent.mkdir(exist_ok=True)

    # Copy the documentation
    shutil.copytree(source_path, dest_path)
    logger.info(f"Copied docs from {source_path} to {dest_path}")
    return True


def build_all_docs(config: BuildConfig) -> bool:
    """
    Build documentation for all components.

    Args:
        config: Build configuration

    Returns:
        True if all builds were successful, False otherwise
    """
    # Find components with docs
    components = find_components_with_docs(config.repo_root)
    logger.info(f"Found {len(components)} components with documentation: {', '.join(components)}")

    if not components:
        logger.warning("No components with documentation found")
        return True

    # Clean output directory
    if config.output_dir.exists():
        shutil.rmtree(config.output_dir)
    config.output_dir.mkdir(exist_ok=True)

    # Build docs for each component
    build_success = True

    for component in components:
        if not build_component_docs(component, config):
            logger.error(f"Documentation build failed for component {component}")
            build_success = False
            if config.fail_fast:
                logger.info("Fail-fast enabled, stopping build")
                break
        else:
            # Only copy docs if build was successful
            copy_docs_to_output(component, config)

    return build_success


def parse_args() -> argparse.Namespace:
    """Parse command line arguments."""
    parser = argparse.ArgumentParser(
        description="Build component documentation",
        formatter_class=argparse.ArgumentDefaultsHelpFormatter
    )
    parser.add_argument(
        "--version",
        type=str,
        default="latest",
        help="Version identifier for the docs (e.g., 'latest', 'v1.0', 'pr-preview-123')"
    )
    parser.add_argument(
        "--output-dir",
        type=str,
        default="docs_build_output",
        help="Directory where built documentation will be stored"
    )
    parser.add_argument(
        "--no-fail-fast",
        action="store_true",
        help="Continue building even if one component fails"
    )
    parser.add_argument(
        "--verbose", "-v",
        action="store_true",
        help="Enable verbose output"
    )
    return parser.parse_args()


def main():
    """Main entry point."""
    args = parse_args()

    # Set logging level based on verbosity
    if args.verbose:
        logger.setLevel(logging.DEBUG)

    # Create build configuration
    config = BuildConfig(
        repo_root=pathlib.Path.cwd(),
        output_dir=pathlib.Path.cwd() / args.output_dir,
        version=args.version,
        fail_fast=not args.no_fail_fast
    )

    logger.info("Building documentation with config:")
    logger.info(f"- Output directory: {config.output_dir}")
    logger.info(f"- Version: {config.version}")
    logger.info(f"- Fail fast: {config.fail_fast}")

    # Build all documentation
    success = build_all_docs(config)

    if success:
        logger.info("All documentation built successfully")
        return 0
    else:
        logger.error("Documentation build failed")
        return 1


if __name__ == "__main__":
    sys.exit(main())


================================================
FILE: .github/clang-tidy/test_app/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

# add all the components from the root directory of the repo
set(root_dir ${CMAKE_CURRENT_LIST_DIR}/../../..)
file(GLOB component_cmakelists_files ${root_dir}/*/CMakeLists.txt)

# convert to absolute paths
set(component_dirs)
set(component_names)
foreach(component_cmakelists_file ${component_cmakelists_files})
    get_filename_component(component_dir ${component_cmakelists_file} DIRECTORY)
    get_filename_component(component_name ${component_dir} NAME)
    # skip touch_element because it does not support esp32
    if(${component_name} STREQUAL "touch_element")
        continue()
    endif()
    if(${component_name} STREQUAL "test_app")
        continue()
    endif()
    list(APPEND component_names ${component_name})
    list(APPEND component_dirs ${component_dir})
endforeach()

set(EXTRA_COMPONENT_DIRS ${component_dirs})

# generate an idf.py argument file with `--exclude-paths <submodule_path>` for each submodule
set(clang_check_args "--include-paths ${root_dir}")
list(APPEND clang_check_args "--exclude-paths ${root_dir}/.github")
list(APPEND clang_check_args "--exclude-paths $ENV{IDF_PATH}")

# Exclude third-party code from clang-tidy checks
list(APPEND clang_check_args "--exclude-paths ${root_dir}/esp_sysview/src/SEGGER")
list(APPEND clang_check_args "--exclude-paths ${root_dir}/esp_sysview/src/Sample")

# get the list of submodules
execute_process(
    COMMAND git config --file ${root_dir}/.gitmodules --get-regexp path
    OUTPUT_VARIABLE submodules_output
)

# each line will be in the format "submodule.<name>.path <path>", extract the part after the last space
STRING(REGEX REPLACE "\r?\n" ";" submodules_output "${submodules_output}")
foreach(line ${submodules_output})
    # extract the path
    STRING(REGEX REPLACE ".* " "" submodule_path "${line}")
    # add the exclude-paths argument
    list(APPEND clang_check_args "--exclude-paths ${root_dir}/${submodule_path}")
endforeach()

set(clang_check_args_file ${CMAKE_CURRENT_BINARY_DIR}/clang_check_args)
list(JOIN clang_check_args " " clang_check_args_str)
file(WRITE ${clang_check_args_file} ${clang_check_args_str})

# actual project definition...
include($ENV{IDF_PATH}/tools/cmake/project.cmake)

project(test_app)


================================================
FILE: .github/consistency_check.py
================================================
#!/usr/bin/env python
# This script performs various consistency checks on the repository.
import argparse
import logging
import glob
import os
from pathlib import Path

import yaml


LOG = logging.getLogger("consistency_check")
failures = 0


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--root", default=".", help="Root directory of the repository")
    args = parser.parse_args()

    logging.basicConfig(level=logging.INFO)

    check_build_manifests_added_to_config(args)
    check_components_added_to_upload_job(args)
    check_components_added_to_issue_template(args)

    if failures:
        LOG.error(f"Found {failures} issues")
        raise SystemExit(1)


#### Checks ####

def check_build_manifests_added_to_config(args):
    LOG.info("Checking that all .build-test-rules.yml files are added to .idf_build_apps.toml")

    build_manifests_from_repo = set(glob.glob(f"{args.root}/**/.build-test-rules.yml", recursive=True))
    # exclude the ones under 'managed_components'
    build_manifests_from_repo = set([Path(f) for f in build_manifests_from_repo if "managed_components" not in f])

    idf_build_apps_toml = load_toml(os.path.join(args.root, ".idf_build_apps.toml"))
    build_manifests_from_config = set([Path(f) for f in idf_build_apps_toml.get("manifest_file", [])])

    missing = build_manifests_from_repo - build_manifests_from_config
    if missing:
        LOG.error(f"Missing build manifests in .idf_build_apps.toml: {missing}")
        add_failure()


def check_components_added_to_upload_job(args):
    LOG.info("Checking that all components are added to the upload job")

    components_from_repo = set([Path(f).name for f in get_component_dirs(args)])

    upload_job = load_yaml(os.path.join(args.root, ".github/workflows/upload_component.yml"))
    upload_job_steps = upload_job.get("jobs", {}).get("upload_components", {}).get("steps", [])
    upload_job_step = next((step for step in upload_job_steps if step.get("name") == "Upload components to component service"), None)
    components_from_upload_job = set([name.strip() for name in upload_job_step.get("with", {}).get("components", "").split("\n") if name.strip()])

    missing = components_from_repo - components_from_upload_job
    if missing:
        LOG.error(f"Missing components in upload job: {missing}")
        add_failure()


def check_components_added_to_issue_template(args):
    LOG.info("Checking that all components are added to the issue template")

    issue_template = load_yaml(os.path.join(args.root, ".github/ISSUE_TEMPLATE/bug-report.yml"))
    issue_template_component = next((element for element in issue_template.get("body", []) if element.get("id") == "component"), None)
    components_from_issue_template = set(issue_template_component.get("attributes", {}).get("options", []))

    components_from_repo = set([Path(component).name for component in get_component_dirs(args)])
    missing = components_from_repo - components_from_issue_template
    if missing:
        LOG.error(f"Missing components in issue template: {missing}")
        add_failure()
    extra = components_from_issue_template - components_from_repo - set(["Other"])
    if extra:
        LOG.error(f"Extra components in issue template: {extra}")
        add_failure()


#### Utility functions ####

def load_toml(filepath) -> dict:
    try:
        import tomllib  # type: ignore # python 3.11

        try:
            with open(str(filepath), 'rb') as fr:
                return tomllib.load(fr)
        except Exception as e:
            raise ValueError(f"Failed to load {filepath}: {e}")
    except ImportError:
        import toml

        try:
            return toml.load(str(filepath))
        except Exception as e:
            raise ValueError(f"Failed to load {filepath}: {e}")


def load_yaml(filepath) -> dict:
    with open(filepath, "r") as f:
        return yaml.safe_load(f)


def get_component_dirs(args):
    """
    Returns a list of component paths in this repository.
    """
    components_from_repo = set(glob.glob(f"{args.root}/*/idf_component.yml"))
    components_from_repo = [Path(f).parent.name for f in components_from_repo]
    return components_from_repo

def add_failure():
    global failures
    failures += 1


if __name__ == "__main__":
    main()


================================================
FILE: .github/filter_sarif.py
================================================
#!/usr/bin/env python3

import argparse
import copy
import json
import typing as t


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-o', '--output', type=argparse.FileType('w'), help='Output filtered SARIF file')
    parser.add_argument('--include-prefix', required=True, action='append',
                        help='File prefix for source code to include in analysis')
    parser.add_argument('--exclude-text-contains', action='append', default=[],
                        help='Exclude results whose message.text contains this substring (may be repeated)')
    parser.add_argument('input_file', type=argparse.FileType('r'), help='Input SARIF file')
    args = parser.parse_args()
    process(args.input_file, args.output, args.include_prefix, args.exclude_text_contains)


def process(in_file: t.TextIO, out_file: t.TextIO, include_prefix_list: t.List[str], exclude_text_contains_list: t.List[str]) -> None:
    in_json = json.load(in_file)
    if len(in_json['runs']) != 1:
        raise NotImplementedError('Only 1 run is supported')
    in_results = in_json['runs'][0]['results']
    out_results = []
    for result in in_results:
        transformed = transform_result(result, include_prefix_list, exclude_text_contains_list)
        if transformed is not None:
            out_results.append(transformed)

    out_json = copy.deepcopy(in_json)
    out_json['runs'][0]['results'] = out_results
    json.dump(out_json, out_file, indent=True)


def normalize_uri_optional(uri: t.Optional[str], include_prefix_list: t.List[str], strict: bool) -> t.Optional[str]:
    if uri is None:
        return None
    for include_prefix in include_prefix_list:
        if uri.startswith(include_prefix):
            return uri.replace(include_prefix, '')
    return None if strict else uri


def message_contains_any(text: str, substrings: t.List[str]) -> bool:
    return any(substr in text for substr in substrings)


def dedupe_related_locations(related_locations: t.Any, include_prefix_list: t.List[str]) -> t.List[t.Dict[str, t.Any]]:
    if not isinstance(related_locations, list) or not related_locations:
        return []
    seen_keys: t.Set[t.Tuple[t.Any, ...]] = set()
    deduped: t.List[t.Dict[str, t.Any]] = []
    for rel in related_locations:
        if not isinstance(rel, dict):
            continue
        rel_msg_text = rel['message']['text']
        rel_uri = rel['physicalLocation']['artifactLocation']['uri']
        rel_uri_norm = normalize_uri_optional(rel_uri, include_prefix_list, strict=False)
        rel['physicalLocation']['artifactLocation']['uri'] = rel_uri_norm
        key = (rel_msg_text,
               rel_uri_norm,
               rel['physicalLocation']['region']['startLine'],
               rel['physicalLocation']['region']['startColumn'])
        if key in seen_keys:
            continue
        seen_keys.add(key)
        deduped.append(rel)
    return deduped


def transform_result(result: t.Dict[str, t.Any], include_prefix_list: t.List[str], exclude_text_contains_list: t.List[str]) -> t.Optional[t.Dict[str, t.Any]]:
    locations = result['locations']
    if len(locations) != 1:
        raise NotImplementedError('Only 1 location is supported')
    artifact_location = locations[0]['physicalLocation']['artifactLocation']
    uri = artifact_location['uri']
    normalized_uri = normalize_uri_optional(uri, include_prefix_list, strict=True)
    if not normalized_uri:
        return None
    message_text = result['message']['text']
    if message_contains_any(message_text, exclude_text_contains_list):
        return None
    new_result = copy.deepcopy(result)
    new_result['locations'][0]['physicalLocation']['artifactLocation']['uri'] = normalized_uri
    deduped_related = dedupe_related_locations(new_result.get('relatedLocations'), include_prefix_list)
    if deduped_related:
        new_result['relatedLocations'] = deduped_related
    elif 'relatedLocations' in new_result:
        # Ensure we have a list per schema even if empty
        new_result['relatedLocations'] = []
    return new_result


if __name__ == '__main__':
    main()


================================================
FILE: .github/get_idf_build_apps_args.py
================================================
#!/usr/bin/env python3

import argparse
import os

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='store_true', help='Enable verbose output')
    parser.add_argument('modified_files_list', type=argparse.FileType('r'), help='Input file containing list of modified files')
    parser.add_argument('idf_build_apps_args', type=argparse.FileType('w'), help='Output file containing idf-build-apps arguments')
    args = parser.parse_args()

    modified_files = args.modified_files_list.read().splitlines()
    idf_build_apps_args = []
    if modified_files:
        idf_build_apps_args += [
            '--modified-files',
            '"' + ';'.join(modified_files) + '"'
            ]
    
    if args.verbose:
        print('Modified files:')
        for file in sorted(modified_files):
            print(f'  - {file}')

    modified_components = set()
    excluded_dirs = ['.github']
    for file in modified_files:
        toplevel = file.split('/')[0]
        if toplevel in excluded_dirs:
            continue
        if not os.path.isdir(toplevel):
            continue
        modified_components.add(toplevel)
    
    if modified_components:
        idf_build_apps_args += [
            '--modified-components',
            '"' + ';'.join(modified_components) + '"'
            ]
    else:
        idf_build_apps_args += [
            '--modified-components',
            'dummy_component'
            ]

    if args.verbose:
        print('Modified components:')
        for component in sorted(modified_components):
            print(f'  - {component}')

    args.idf_build_apps_args.write(' '.join(idf_build_apps_args))


if __name__ == '__main__':
    main()


================================================
FILE: .github/get_pytest_args.py
================================================
#!/usr/bin/env python3

import argparse
import json
import glob


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('-v', '--verbose', action='store_true', help='Enable verbose output')
    parser.add_argument('--target', type=str, required=True, help='Target to run tests for')
    parser.add_argument('build_info_json', type=str, help='Input file(s) containing build info generated by idf-build-apps. Accepts globs.')
    parser.add_argument('pytest_args', type=argparse.FileType('w'), help='Output file containing pytest arguments')

    args = parser.parse_args()
    pytest_args = []
    app_ignore_status = {}
    app_json_files = glob.glob(args.build_info_json)
    if args.verbose:
        print(f'Found {len(app_json_files)} app_json files')
        for app_json_file in app_json_files:
            print(f'  - {app_json_file}')
    for app_json_file in app_json_files:
        with open(app_json_file, 'r') as build_info_json:
            if args.verbose:
                print(f'Processing {app_json_file}')
            for app_json_line in build_info_json.readlines():
                app_json = json.loads(app_json_line)
                app_dir = app_json['app_dir']
                if app_dir not in app_ignore_status.keys():
                    app_ignore_status[app_dir] = True
                if app_json['target'] == args.target and app_json['build_status'] != 'skipped':
                    app_ignore_status[app_dir] = False

    for app_dir, ignore in app_ignore_status.items():
        if ignore:
            if args.verbose:
                print(f'Skipping {app_dir}')
            pytest_args += [
                '--ignore',
                app_dir
            ]
        else:
            if args.verbose:
                print(f'Not skipping {app_dir}')


    args.pytest_args.write(' '.join(pytest_args))


if __name__ == '__main__':
    main()



================================================
FILE: .github/readme_workflows.md
================================================
# CI in idf-extra-components

## Build and test apps

The workflow defined in [build_and_run_apps.yml](workflows/build_and_run_apps.yml) builds the apps (examples, test apps) and runs the tests on self-hosted runners.


```mermaid
flowchart TD
        PR((Pull Request))
        PR -->labels

        schedule((Schedule<br>Push to master))
        schedule -->idf-build-apps-build

    subgraph "Generate pipeline"
        labels[Get labels] --> get-changes
        get-changes[Get changed files]
        get-changes --> build-all
        build-all{Build all apps<br> label set?}
        build-all --> |yes| changed-components
        changed-components --> idf-build-apps-args
        build-all --> |no| idf-build-apps-args        
        changed-components[Get changed components]
        idf-build-apps-args[Prepare idf-build-apps arguments]
    end
    subgraph "Build apps"
        idf-build-apps-args --> idf-build-apps-build
        idf-build-apps-build[idf-build-apps build] --> 
        build-only
        build-only{Build only<br>label set?}
        build-only --> |no| upload-artifacts
        
        upload-artifacts[Upload artifacts]

    end
    subgraph "Test apps"
        upload-artifacts -->download-artifacts
        download-artifacts[Download artifacts] -->pytest
        pytest[Pytest] -->upload-results
        upload-results[Upload results]
    end
    subgraph "Generate report"
        upload-results -->download-results
        download-results[Download results] -->generate-report
        generate-report[Generate report]
    end

    build-only --> |yes| fin
    generate-report -->fin
    fin([Finish])
```

================================================
FILE: .github/setup_qemu.sh
================================================
#!/bin/sh
set -e

# QEMU version and date string for easy maintenance
QEMU_VERSION="9.2.2"
QEMU_DATE="20250817"
QEMU_RELEASE="esp-develop-${QEMU_VERSION}-${QEMU_DATE}"

# 1. Detect host architecture
ARCH=$(uname -m)
case "$ARCH" in
    x86_64)
        QEMU_ARCH="x86_64"
        QEMU_RISCV32_FILE="qemu-riscv32-softmmu-esp_develop_${QEMU_VERSION}_${QEMU_DATE}-x86_64-linux-gnu.tar.xz"
        QEMU_XTENSA_FILE="qemu-xtensa-softmmu-esp_develop_${QEMU_VERSION}_${QEMU_DATE}-x86_64-linux-gnu.tar.xz"
        ;;
    aarch64 | arm64)
        QEMU_ARCH="aarch64"
        QEMU_RISCV32_FILE="qemu-riscv32-softmmu-esp_develop_${QEMU_VERSION}_${QEMU_DATE}-aarch64-linux-gnu.tar.xz"
        QEMU_XTENSA_FILE="qemu-xtensa-softmmu-esp_develop_${QEMU_VERSION}_${QEMU_DATE}-aarch64-linux-gnu.tar.xz"
        ;;
    *)
        echo "Unsupported architecture: $ARCH"
        exit 1
        ;;
esac

# Install some dependencies
apt-get update
apt-get install -y libgcrypt20 libglib2.0-0 libpixman-1-0 libsdl2-2.0-0 libslirp0

QEMU_DIR="qemu"

# 2. Download the correct binary
QEMU_RISCV32_URL="https://github.com/espressif/qemu/releases/download/${QEMU_RELEASE}/$QEMU_RISCV32_FILE"
curl -LO "$QEMU_RISCV32_URL"
# 3. Extract the compressed file
tar -xJf "$QEMU_RISCV32_FILE"
rm "$QEMU_RISCV32_FILE"

if [ -f "$QEMU_DIR/bin/qemu-system-riscv32" ]; then
    echo "QEMU RISCV32 installation successful."
else
    echo "QEMU RISCV32 installation failed."
    exit 1
fi
# Rename qemu directory to avoid conflicts
mv "$QEMU_DIR" "${QEMU_DIR}_riscv32"

QEMU_XTENSA_URL="https://github.com/espressif/qemu/releases/download/${QEMU_RELEASE}/$QEMU_XTENSA_FILE"
curl -LO "$QEMU_XTENSA_URL"
# 3. Extract the compressed file
tar -xJf "$QEMU_XTENSA_FILE"
rm "$QEMU_XTENSA_FILE"

if [ -f "$QEMU_DIR/bin/qemu-system-xtensa" ]; then
    echo "QEMU XTENSA installation successful."
else
    echo "QEMU XTENSA installation failed."
    exit 1
fi

# Rename qemu directory to avoid conflicts
mv "$QEMU_DIR" "${QEMU_DIR}_xtensa"

QEMU_DIR=$(pwd)/qemu
# 4. Add both QEMU directories to PATH
export PATH="$PATH:${QEMU_DIR}_riscv32/bin:${QEMU_DIR}_xtensa/bin"
# 5. Verify QEMU installation
if command -v qemu-system-xtensa &> /dev/null; then
    echo "QEMU XTENSA is installed and available in PATH."
else
    echo "QEMU XTENSA is not installed or not available in PATH."
    exit 1
fi
if command -v qemu-system-riscv32 &> /dev/null; then
    echo "QEMU RISCV32 is installed and available in PATH."
else
    echo "QEMU RISCV32 is not installed or not available in PATH."
    exit 1
fi


================================================
FILE: .github/workflows/build_and_run_apps.yml
================================================
name: Build and Run Apps

on:
  schedule:
    - cron: '0 0 * * *' # Once per day at midnight
  pull_request:
    types: [opened, reopened, synchronize]
  push:
    branches:
      - master

jobs:
  prepare:
    name: Prepare pipeline
    runs-on: ubuntu-22.04
    permissions:
      contents: read
      pull-requests: read
    outputs:
      test_all_apps: ${{ steps.get_labels.outputs.test_all_apps }}
      build_only: ${{ steps.get_labels.outputs.build_only }}
      idf_build_apps_args: ${{ steps.find_changes.outputs.idf_build_apps_args }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'true'
      - name: Fix git repo permissions
        # Needed by the next git diff step.
        # See https://github.com/actions/runner/issues/2033
        if: github.event_name == 'pull_request'
        run: |
          build_dir=$PWD
          cd /
          git config --global --add safe.directory $build_dir
          cd -
      - name: Install dependencies
        run: pip install 'idf-build-apps~=2.12'
      - name: Get labels
        id: get_labels
        if: github.event_name == 'pull_request'
        env:
          GH_TOKEN: ${{ github.token }}
        # Check for labels
        # "PR: test all apps"
        # "PR: build only"
        run: |
          gh api --jq '.labels.[].name' /repos/{owner}/{repo}/pulls/${{ github.event.number }} > labels.txt
          test_all_apps=$(grep -c 'PR: test all apps' labels.txt || true)
          build_only=$(grep -c 'PR: build only' labels.txt || true)
          echo "test_all_apps=$test_all_apps" >> $GITHUB_OUTPUT
          echo "build_only=$build_only" >> $GITHUB_OUTPUT
          echo "test_all_apps=$test_all_apps"
          echo "build_only=$build_only"

      - name: Find changed files and components
        id: find_changes
        if: github.event_name == 'pull_request' && steps.get_labels.outputs.test_all_apps == '0'
        # - based on the files list, determine which components have changed
        # - output both lists as a file of idf-build-apps arguments
        run: |
          git fetch --recurse-submodules=no origin ${{ github.base_ref }}:base_ref
          git fetch --recurse-submodules=no origin pull/${{ github.event.pull_request.number }}/head:pr_ref
          git diff --name-only -r base_ref pr_ref > changed_files.txt
          python3 .github/get_idf_build_apps_args.py -v changed_files.txt idf_build_apps_args.txt
          echo "idf_build_apps_args=$(cat idf_build_apps_args.txt)" >> $GITHUB_OUTPUT
          echo "idf_build_apps_args=$(cat idf_build_apps_args.txt)"

  build:
    name: Build Apps
    needs: prepare
    strategy:
      fail-fast: false
      matrix:
        idf_ver:
          - "release-v5.1"
          - "release-v5.2"
          - "release-v5.3"
          - "release-v5.4"
          - "release-v5.5"
          - "latest"
        parallel_index: [1,2,3,4,5] # Update --parallel-count below when changing this
    runs-on: ubuntu-22.04
    container: espressif/idf:${{ matrix.idf_ver }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'true'
      - name: Install dependencies
        shell: bash
        run: |
          export IDF_PYTHON_CHECK_CONSTRAINTS=yes
          ${IDF_PATH}/install.sh --enable-ci
          . ${IDF_PATH}/export.sh
          pip install --upgrade 'idf-build-apps~=2.12'
      - name: Build apps
        shell: bash
        run: |
          . ${IDF_PATH}/export.sh
          export PEDANTIC_FLAGS="-DIDF_CI_BUILD -Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function"
          export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes"
          export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}"
          idf-build-apps build --parallel-index ${{ matrix.parallel_index }} --parallel-count 5 --collect-app-info build_info_${{ matrix.idf_ver }}_${{ matrix.parallel_index }}.json ${{ needs.prepare.outputs.idf_build_apps_args }}
      - uses: actions/upload-artifact@v4
        if: github.repository_owner == 'espressif' && needs.prepare.outputs.build_only == '0'
        with:
          name: app_binaries_${{ matrix.idf_ver }}_${{ matrix.parallel_index }}
          path: |
            */examples/*/build_esp*/bootloader/bootloader.bin
            */examples/*/build_esp*/partition_table/partition-table.bin
            */examples/*/build_esp*/*.bin
            */examples/*/build_esp*/flasher_args.json
            */examples/*/build_esp*/config/sdkconfig.json
            */test_app*/**/build_esp*/bootloader/bootloader.bin
            */test_app*/**/build_esp*/partition_table/partition-table.bin
            */test_app*/**/build_esp*/*.bin
            */test_app*/**/build_esp*/flasher_args.json
            */test_app*/**/build_esp*/config/sdkconfig.json
            build_info*.json

  build-linux:
    name: Build Apps for Linux
    needs: prepare
    strategy:
      fail-fast: false
      matrix:
        idf_ver:
          # Not building for 5.1 with linux target due to limited support
          - "release-v5.2"
          - "release-v5.3"
          - "release-v5.4"
          - "release-v5.5"
          - "latest"
    runs-on: ubuntu-22.04
    container:
      image: espressif/idf:${{ matrix.idf_ver }}
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'true'
      - name: Install dependencies
        shell: bash
        run: |
          export IDF_PYTHON_CHECK_CONSTRAINTS=yes
          ${IDF_PATH}/install.sh --enable-ci
          . ${IDF_PATH}/export.sh
          pip install --upgrade 'idf-build-apps~=2.12'
      - name: Build apps for Linux
        shell: bash
        run: |
          . ${IDF_PATH}/export.sh
          export PEDANTIC_FLAGS="-DIDF_CI_BUILD -Werror -Werror=deprecated-declarations -Werror=unused-variable -Werror=unused-but-set-variable -Werror=unused-function"
          export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes"
          export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}"
          idf-build-apps build --target linux --collect-app-info build_info_linux_${{ matrix.idf_ver }}_${{ matrix.parallel_index }}.json ${{ needs.prepare.outputs.idf_build_apps_args }}
      - uses: actions/upload-artifact@v4
        if: github.repository_owner == 'espressif' && needs.prepare.outputs.build_only == '0'
        with:
          name: app_binaries_${{ matrix.idf_ver }}_linux
          path: |
            */examples/*/build_linux*/*.elf
            */examples/*/build_linux*/config/sdkconfig.json
            */test_app*/**/build_linux*/*.elf
            */test_app*/**/build_linux*/config/sdkconfig.json
            */host_test/**/build_linux*/*.elf
            */host_test/**/build_linux*/config/sdkconfig.json
            build_info*.json

  run-target:
    name: Run apps on target
    if: github.repository_owner == 'espressif' && needs.prepare.outputs.build_only != '1'
    needs: [build]
    strategy:
      fail-fast: false
      matrix:
        idf_ver:
          - "release-v5.1"
          - "release-v5.2"
          - "release-v5.3"
          - "release-v5.4"
          - "release-v5.5"
          - "latest"
        runner:
          - runs-on: "esp32"
            marker: "generic"
            target: "esp32"
            runner-labels: [self-hosted, linux, docker, "esp32"]
            pytest_args: ""
          - runs-on: "esp32s2"
            marker: "generic"
            target: "esp32s2"
            runner-labels: [self-hosted, linux, docker, "esp32s2"]
            pytest_args: ""
          - runs-on: "esp32s3"
            marker: "generic"
            target: "esp32s3"
            runner-labels: [self-hosted, linux, docker, "esp32s3"]
            pytest_args: ""
          - runs-on: "ESP32-ETHERNET-KIT"
            marker: "ethernet"
            target: "esp32"
            runner-labels: [self-hosted, linux, docker, "ESP32-ETHERNET-KIT"]
            pytest_args: ""
          - runs-on: "spi_nand_flash"
            marker: "spi_nand_flash"
            target: "esp32"
            runner-labels: [self-hosted, linux, docker, "spi_nand_flash"]
            pytest_args: ""
          - runs-on: "qemu"
            marker: "qemu"
            target: ["esp32s3", "esp32c3"]
            runner-labels: [self-hosted, linux, docker]
            pytest_args: "--embedded-services idf,qemu"
    env:
      TEST_RESULT_NAME: test_results_${{ matrix.runner.target }}_${{ matrix.runner.marker }}_${{ matrix.idf_ver }}
      TEST_RESULT_FILE: test_results_${{ matrix.runner.target }}_${{ matrix.runner.marker }}_${{ matrix.idf_ver }}.xml
    runs-on: ${{ matrix.runner.runner-labels }}
    container:
      image: python:3.11-bookworm
      options: --privileged # Privileged mode has access to serial ports
    steps:
      - uses: actions/checkout@v4
      - uses: actions/download-artifact@v4
        with:
          pattern: app_binaries_${{ matrix.idf_ver }}_*
          merge-multiple: true
      - name: Install Python packages
        env:
          PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi/"
        run: |
          pip install --prefer-binary cryptography pytest-embedded pytest-embedded-qemu pytest-embedded-serial-esp pytest-embedded-idf pytest-custom_exit_code idf-ci
      - name: Setup QEMU
        if: matrix.runner.marker == 'qemu'
        run: |
          . .github/setup_qemu.sh
          echo "PATH=$PATH" >> $GITHUB_ENV
      - name: Run apps
        run: |
          python3 .github/get_pytest_args.py --target=${{ matrix.runner.target }} -v 'build_info*.json' pytest-args.txt
          cat pytest-args.txt
          pytest --suppress-no-test-exit-code $(cat pytest-args.txt) --ignore-glob '*/managed_components/*' --ignore=.github --junit-xml=${{ env.TEST_RESULT_FILE }} --target=${{ matrix.runner.target }} -m ${{ matrix.runner.marker }} --build-dir=build_${{ matrix.runner.target }} ${{ matrix.runner.pytest_args }}
      - name: Upload test results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: ${{ env.TEST_RESULT_NAME }}
          path: ${{ env.TEST_RESULT_FILE }}

  run-target-linux:
    name: Run apps on Linux target
    if: github.repository_owner == 'espressif' && needs.prepare.outputs.build_only != '1'
    needs: [build-linux]
    strategy:
      fail-fast: false
      matrix:
        idf_ver:
          # - "release-v5.1" # Not testing for 5.1 with linux target due to limited support
          - "release-v5.2"
          - "release-v5.3"
          - "release-v5.4"
          - "release-v5.5"
          - "latest"
        runner:
          - runs-on: "linux"
            marker: "host_test"
            target: "linux"
            pytest_args: "--embedded-services idf"
        exclude:
          - idf_ver: "release-v5.2" # Bug with Unity IDF test apps
            runner:
              target: "linux"
    env:
      TEST_RESULT_NAME: test_results_${{ matrix.runner.target }}_${{ matrix.runner.marker }}_${{ matrix.idf_ver }}
      TEST_RESULT_FILE: test_results_${{ matrix.runner.target }}_${{ matrix.runner.marker }}_${{ matrix.idf_ver }}.xml
    runs-on: ubuntu-latest
    container:
      image: python:3.14-slim-trixie # Newer Debian base to support newer glibc for Linux apps
    steps:
      - uses: actions/checkout@v4
      - uses: actions/download-artifact@v4
        with:
          pattern: app_binaries_${{ matrix.idf_ver }}_*
          merge-multiple: true
      - name: Install Python packages
        env:
          PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi/"
        run: |
          pip install --prefer-binary cryptography pytest-embedded pytest-embedded-serial-esp pytest-embedded-idf pytest-custom_exit_code idf-ci
      - name: Make .elf files executable
        if: matrix.runner.target == 'linux'
        continue-on-error: true
        shell: bash
        run: |
          chmod +x */examples/*/build_linux*/*.elf || echo "No example .elf files found"
          shopt -s globstar
          chmod +x */test_app*/**/build_linux*/*.elf || echo "No test_app .elf files found"
          chmod +x */host_test/**/build_linux*/*.elf || echo "No host_test .elf files found"
      - name: Run apps
        shell: bash
        run: |
          python3 .github/get_pytest_args.py --target=${{ matrix.runner.target }} -v 'build_info*.json' pytest-args.txt
          cat pytest-args.txt
          pytest --suppress-no-test-exit-code $(cat pytest-args.txt) --ignore-glob '*/managed_components/*' --ignore=.github --junit-xml=${{ env.TEST_RESULT_FILE }} --target=${{ matrix.runner.target }} -m ${{ matrix.runner.marker }} --build-dir=build_${{ matrix.runner.target }} ${{ matrix.runner.pytest_args }}
      - name: Upload test results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: ${{ env.TEST_RESULT_NAME }}
          path: ${{ env.TEST_RESULT_FILE }}

  publish-results:
    name: Publish Test results
    needs:
      - run-target
      - run-target-linux
    if: github.repository_owner == 'espressif' && always() && github.event_name == 'pull_request' && needs.prepare.outputs.build_only == '0'
    runs-on: ubuntu-22.04
    permissions:
      checks: write
      pull-requests: write
    steps:
      - name: Download Test results
        uses: actions/download-artifact@v4
        with:
          pattern: test_results_*
          path: test_results
      - name: Publish Test Results
        uses: EnricoMi/publish-unit-test-result-action@v2
        with:
          files: test_results/**/*.xml


================================================
FILE: .github/workflows/clang-tidy.yml
================================================
name: Run clang-tidy

on:
  pull_request:
    types: [opened, reopened, synchronize]
  push:
    branches:
      - master

permissions:
  contents: read
  security-events: write

jobs:
  build:
    name: Run clang-tidy
    runs-on: ubuntu-24.04
    container: espressif/idf:latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'true'
      - name: Install esp-clang
        run: |
          ${IDF_PATH}/tools/idf_tools.py --non-interactive install esp-clang
      - name: Install clang-tidy-sarif
        run: |
          curl -sSL https://github.com/psastras/sarif-rs/releases/download/clang-tidy-sarif-v0.8.0/clang-tidy-sarif-x86_64-unknown-linux-gnu -o clang-tidy-sarif
          chmod +x clang-tidy-sarif
      - name: Install pyclang
        shell: bash
        run: |
          . ${IDF_PATH}/export.sh
          pip install pyclang~=0.2.0
      - name: Run code analysis
        shell: bash
        env:
          IDF_TOOLCHAIN: clang
          IDF_TARGET: esp32
        working-directory: .github/clang-tidy/test_app
        run: |
          . ${IDF_PATH}/export.sh
          idf.py reconfigure
          idf.py clang-check @build/clang_check_args --run-clang-tidy-py run-clang-tidy
          cp warnings.txt ${GITHUB_WORKSPACE}/warnings.txt
      - name: Convert clang-tidy results into SARIF output
        run: |
          export PATH=$PWD:$PATH
          ./clang-tidy-sarif -o results.sarif.raw -i warnings.txt
          # Remove warnings which recommend using functions not supported in newlib.
          python3 $GITHUB_WORKSPACE/.github/filter_sarif.py -o results.sarif \
            --include-prefix ${GITHUB_WORKSPACE}/ \
            --exclude-text-contains memset_s \
            --exclude-text-contains memmove_s \
            --exclude-text-contains memcpy_s \
            --exclude-text-contains fprintf_s \
            --exclude-text-contains snprintf_s \
            --exclude-text-contains strncpy_s \
            --exclude-text-contains sscanf_s \
            results.sarif.raw
      - uses: actions/upload-artifact@v4
        with:
          path: |
            warnings.txt
            results.sarif
            results.sarif.raw
      - name: Upload SARIF file
        uses: github/codeql-action/upload-sarif@v4
        with:
          sarif_file: results.sarif
          category: clang-tidy


================================================
FILE: .github/workflows/deploy_gh_pages.yml
================================================
name: Build and Deploy Programming Guides

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]
  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout 🛎️
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Setup mdBook 📥
        uses: peaceiris/actions-mdbook@v2
        with:
          mdbook-version: "latest"

      - name: Install doxygen tools 🧱
        run: |-
          sudo apt-get install -y doxygen
          pip install esp-doxybook

      - name: Build docs 🔧
        run: |
          version="latest"
          if [[ "${{ github.event_name }}" == "pull_request" ]]; then
          version="pr-preview-${{ github.event.pull_request.number }}"
          fi
          python3 ./.github/build_docs.py --version "$version" --output-dir "docs_build_output"

      - name: Check Links 🔍
        uses: lycheeverse/lychee-action@v2
        with:
          # Check links in docs_build_output
          args: >-
            --no-progress
            --include-fragments
            --root-dir docs_build_output
            --exclude-path '.*/404\.html$'
            docs_build_output/**/*.html
          # Fail the action if broken links are found
          fail: true

      # Create directory structure for GitHub Pages with "version prefix"
      - name: Prepare files for deployment 📁
        if: github.event_name == 'push' && github.ref == 'refs/heads/master'
        run: |
          version="latest"
          mkdir -p "gh-pages/$version"
          cp -r docs_build_output/* "gh-pages/$version/"

      - name: Upload Pages artifact 📤
        if: github.event_name == 'push' && github.ref == 'refs/heads/master'
        uses: actions/upload-pages-artifact@v3
        with:
          path: gh-pages

  deploy:
    if: github.event_name == 'push' && github.ref == 'refs/heads/master'
    needs: build
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}latest/
    runs-on: ubuntu-latest
    steps:
      - name: Setup Pages 📥
        uses: actions/configure-pages@v5
      - name: Deploy to GitHub Pages 🚀
        id: deployment
        uses: actions/deploy-pages@v4


================================================
FILE: .github/workflows/issue_comment.yml
================================================
name: Sync issue comments to JIRA

permissions:
  issues: write
  pull-requests: write

# This workflow will be triggered when new issue comment is created (including PR comments)
on: issue_comment

# Limit to single concurrent run for workflows which can create Jira issues.
# Same concurrency group is used in new_issues.yml
concurrency: jira_issues

jobs:
  sync_issue_comments_to_jira:
    name: Sync Issue Comments to Jira
    runs-on: ubuntu-latest
    if: ${{ github.repository_owner == 'espressif' }}
    steps:
      - uses: actions/checkout@v4
      - name: Sync issue comments to JIRA
        uses: espressif/github-actions/sync_issues_to_jira@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          JIRA_PASS: ${{ secrets.JIRA_PASS }}
          JIRA_PROJECT: IEC
          JIRA_URL: ${{ secrets.JIRA_URL }}
          JIRA_USER: ${{ secrets.JIRA_USER }}


================================================
FILE: .github/workflows/new_issues.yml
================================================
name: Sync issues to Jira

permissions:
  issues: write

# This workflow will be triggered when a new issue is opened
on: issues

# Limit to single concurrent run for workflows which can create Jira issues.
# Same concurrency group is used in issue_comment.yml
concurrency: jira_issues

jobs:
  sync_issues_to_jira:
    name: Sync issues to Jira
    runs-on: ubuntu-latest
    if: ${{ github.repository_owner == 'espressif' }}
    steps:
      - uses: actions/checkout@v4
      - name: Sync GitHub issues to Jira project
        uses: espressif/github-actions/sync_issues_to_jira@master
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          JIRA_PASS: ${{ secrets.JIRA_PASS }}
          JIRA_PROJECT: IEC
          JIRA_URL: ${{ secrets.JIRA_URL }}
          JIRA_USER: ${{ secrets.JIRA_USER }}


================================================
FILE: .github/workflows/new_prs.yml
================================================
name: Sync remain PRs to Jira

permissions:
  pull-requests: write

# This workflow will be triggered every hour, to sync remaining PRs (i.e. PRs with zero comment) to Jira project
# Note that, PRs can also get synced when new PR comment is created
on:
  schedule:
    - cron: "0 * * * *"

# Limit to single concurrent run for workflows which can create Jira issues.
# Same concurrency group is used in issue_comment.yml
concurrency: jira_issues

jobs:
  sync_prs_to_jira:
    name: Sync PRs to Jira
    runs-on: ubuntu-latest
    if: ${{ github.repository_owner == 'espressif' }}
    steps:
      - uses: actions/checkout@v4
      - name: Sync PRs to Jira project
        uses: espressif/github-actions/sync_issues_to_jira@master
        with:
          cron_job: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          JIRA_PASS: ${{ secrets.JIRA_PASS }}
          JIRA_PROJECT: IEC
          JIRA_URL: ${{ secrets.JIRA_URL }}
          JIRA_USER: ${{ secrets.JIRA_USER }}


================================================
FILE: .github/workflows/pre-commit.yml
================================================
name: pre-commit

on:
  pull_request:
    types: [opened, reopened, synchronize]

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
    - uses: actions/setup-python@v5
    - uses: pre-commit/action@v3.0.1


================================================
FILE: .github/workflows/test_sbom.yml
================================================
name: Run SBOM manifests validation test

on:
  pull_request:
    types: [opened, reopened, synchronize]

jobs:
  test_sbom:
    name: Run SBOM manifests validation test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Validate SBOM manifests
        run: |
          git config --global safe.directory $(pwd)
          pip install esp-idf-sbom
          python3 -m esp_idf_sbom manifest validate


================================================
FILE: .github/workflows/upload_component.yml
================================================
name: Push components to Espressif Component Service

on:
  # For pull requests: perform upload with "--dry-run" argument,
  # i.e. validate that the component passes all checks for being uploaded.
  pull_request:

  # For pushes to master: actually upload the components to the registry.
  push:
    branches:
      - master

jobs:
  upload_components:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          submodules: 'recursive'
      - run: |
          echo "${{ ( github.ref_name != 'master' || github.repository_owner != 'espressif' ) && 'Checking' || 'Uploading' }} components"
      - name: Upload components to component service
        uses: espressif/upload-components-ci-action@v2
        with:
          components: |
            argtable3
            bdc_motor
            catch2
            cbor
            ccomp_timer
            cjson
            coap
            coremark
            dhara
            eigen
            esp_daylight
            esp_cli_commands
            esp_delta_ota
            esp_encrypted_img
            esp_flash_dispatcher
            esp_ext_part_tables
            esp_gcov
            esp_isotp
            esp_lcd_qemu_rgb
            esp_linenoise
            esp_jpeg
            esp_schedule
            esp_cli
            esp_serial_slave_link
            esp_sysview
            expat
            fmt
            freetype
            iqmath
            jsmn
            json_generator
            json_parser
            led_strip
            libsodium
            network_provisioning
            nghttp
            onewire_bus
            pcap
            pid_ctrl
            qrcode
            quirc
            sh2lib
            spi_nand_flash
            spi_nand_flash_fatfs
            supertinycron
            thorvg
            touch_element
            unit-test-app
            zlib
            libpng
            libjpeg-turbo
          namespace: "espressif"
          # API token will only be available in the master branch in the main repository.
          # However, dry-run doesn't require a valid token.
          api_token: ${{ secrets.IDF_COMPONENT_API_TOKEN }}
          dry_run: ${{ github.ref_name != 'master' || github.repository_owner != 'espressif' }}


================================================
FILE: .github/workflows/vulnerability_scan.yml
================================================
name: Vulnerability scan

on:
  schedule:
    - cron: '0 0 * * *'
  workflow_dispatch:


jobs:
  vulnerability-scan:
    name: Vulnerability scan
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          submodules: recursive

      - name: Vulnerability scan
        env:
          SBOM_CHECK_LOCAL_DB: ${{ vars.SBOM_CHECK_LOCAL_DB }}
          SBOM_MATTERMOST_WEBHOOK: ${{ secrets.SBOM_MATTERMOST_WEBHOOK }}
          NVDAPIKEY: ${{ secrets.NVDAPIKEY }}
        uses: espressif/esp-idf-sbom-action@master


================================================
FILE: .gitignore
================================================
**/dist/**
**/build*/**
**/__pycache__/**
sdkconfig
sdkconfig.old
dependencies.lock
**/managed_components/**
.vscode/
.cache
.DS_Store
warnings.txt
# Ignore artifacts for documentation build
doxygen_output/
**/docs/book/
docs_build_output/
pytest-args.txt
build_info*.json

================================================
FILE: .gitmodules
================================================
[submodule "libsodium/libsodium"]
	path = libsodium/libsodium
	url = https://github.com/jedisct1/libsodium.git

[submodule "cbor/tinycbor"]
	path = cbor/tinycbor
	url = https://github.com/intel/tinycbor.git

[submodule "nghttp/nghttp2"]
	path = nghttp/nghttp2
	url = https://github.com/nghttp2/nghttp2.git

[submodule "expat/expat"]
	path = expat/expat
	url = https://github.com/libexpat/libexpat.git

[submodule "coap/libcoap"]
	path = coap/libcoap
	url = https://github.com/obgm/libcoap.git

[submodule "eigen/eigen"]
	path = eigen/eigen
	url = https://gitlab.com/libeigen/eigen.git

[submodule "fmt/fmt"]
	path = fmt/fmt
	url = https://github.com/fmtlib/fmt.git

[submodule "esp_delta_ota/detools"]
	path = esp_delta_ota/detools
	url = https://github.com/eerimoq/detools.git

[submodule "quirc/quirc"]
	path = quirc/quirc
	url = https://github.com/dlbeer/quirc.git

[submodule "zlib/zlib"]
	path = zlib/zlib
	url = https://github.com/madler/zlib.git

[submodule "libpng/libpng"]
	path = libpng/libpng
	url = https://github.com/glennrp/libpng.git

[submodule "coremark/coremark"]
	path = coremark/coremark
	url = https://github.com/eembc/coremark.git

[submodule "freetype/freetype"]
	path = freetype/freetype
	url = https://github.com/freetype/freetype.git

[submodule "catch2/Catch2"]
	path = catch2/Catch2
	url = https://github.com/catchorg/Catch2.git

[submodule "dhara/dhara"]
	path = dhara/dhara
	url = https://github.com/dlbeer/dhara.git

[submodule "supertinycron/supertinycron"]
	path = supertinycron/supertinycron
	url = https://github.com/exander77/supertinycron.git

[submodule "thorvg/thorvg"]
	path = thorvg/thorvg
	url = https://github.com/thorvg/thorvg

[submodule "libjpeg-turbo/libjpeg-turbo"]
	path = libjpeg-turbo/libjpeg-turbo
	url = https://github.com/libjpeg-turbo/libjpeg-turbo.git

[submodule "argtable3/argtable3"]
	path = argtable3/argtable3
	url = https://github.com/argtable/argtable3.git

[submodule "esp_isotp/isotp-c"]
	path = esp_isotp/isotp-c
	url = https://github.com/SimonCahill/isotp-c.git

[submodule "cjson/cJSON"]
	path = cjson/cJSON
	url = https://github.com/DaveGamble/cJSON.git


================================================
FILE: .idf_build_apps.toml
================================================
recursive = true
exclude = [
    ".github",
]
manifest_file = [
    "argtable3/.build-test-rules.yml",
    "bdc_motor/.build-test-rules.yml",
    "ccomp_timer/.build-test-rules.yml",
    "coremark/.build-test-rules.yml",
    "esp_daylight/.build-test-rules.yml",
    "esp_delta_ota/.build-test-rules.yml",
    "esp_cli_commands/.build-test-rules.yml",
    "esp_encrypted_img/.build-test-rules.yml",
    "esp_flash_dispatcher/.build-test-rules.yml",
    "esp_gcov/.build-test-rules.yml",
    "esp_jpeg/.build-test-rules.yml",
    "esp_linenoise/.build-test-rules.yml",
    "esp_schedule/.build-test-rules.yml",
    "esp_cli/.build-test-rules.yml",
    "esp_ext_part_tables/.build-test-rules.yml",
    "esp_serial_slave_link/.build-test-rules.yml",
    "esp_sysview/.build-test-rules.yml",
    "expat/.build-test-rules.yml",
    "iqmath/.build-test-rules.yml",
    "esp_isotp/.build-test-rules.yml",
    "jsmn/.build-test-rules.yml",
    "json_generator/.build-test-rules.yml",
    "json_parser/.build-test-rules.yml",
    "libpng/.build-test-rules.yml",
    "libsodium/.build-test-rules.yml",
    "onewire_bus/.build-test-rules.yml",
    "pcap/.build-test-rules.yml",
    "pid_ctrl/.build-test-rules.yml",
    "qrcode/.build-test-rules.yml",
    "quirc/.build-test-rules.yml",
    "thorvg/.build-test-rules.yml",
    "touch_element/.build-test-rules.yml",
    "zlib/.build-test-rules.yml",
    "libjpeg-turbo/.build-test-rules.yml",
    ".build-test-rules.yml",
]
check_warnings = true

# build related options
build_dir = "build_@t_@w"
config_rules = [
    'sdkconfig.ci=default',
    'sdkconfig.ci.*=',
]
ignore_warning_file = ".ignore_build_warnings.txt"


================================================
FILE: .ignore_build_warnings.txt
================================================
DeprecationWarning: pkg_resources is deprecated as an API
WARNING: The following Kconfig variables were used in "if" clauses
Warning: Deprecated: Option '--flash_mode' is deprecated. Use '--flash-mode' instead.
Warning: Deprecated: Option '--flash_freq' is deprecated. Use '--flash-freq' instead.
Warning: Deprecated: Option '--flash_size' is deprecated. Use '--flash-size' instead.


================================================
FILE: .pre-commit-config.yaml
================================================
repos:
-   repo: https://github.com/igrr/astyle_py.git
    rev: v1.1.0
    hooks:
    -   id: astyle_py
        args: ['--style=otbs', '--attach-namespaces', '--attach-classes', '--indent=spaces=4', '--convert-tabs', '--align-pointer=name', '--align-reference=name', '--keep-one-line-statements', '--pad-header', '--pad-oper']
        exclude: 'network_provisioning/proto-c'
-   repo: https://github.com/codespell-project/codespell
    rev: v2.4.1
    hooks:
    -   id: codespell
-   repo: local
    hooks:
    -   id: consistency_check
        name: Repo consistency checks
        language: python
        entry: python .github/consistency_check.py
        pass_filenames: false
        additional_dependencies:
            - "toml; python_version < '3.11'"
            - pyyaml
-   repo: https://github.com/espressif/esp-idf-kconfig.git
    rev: v2.5.0
    hooks:
    -   id: check-kconfig-files
    -   id: check-deprecated-kconfig-options


================================================
FILE: README.md
================================================
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
[![Build and Run Apps](https://github.com/espressif/idf-extra-components/actions/workflows/build_and_run_apps.yml/badge.svg?branch=master)](https://github.com/espressif/idf-extra-components/actions/workflows/build_and_run_apps.yml)
[![Clang-Tidy](https://github.com/espressif/idf-extra-components/actions/workflows/clang-tidy.yml/badge.svg?branch=master)](https://github.com/espressif/idf-extra-components/security/code-scanning?query=is%3Aopen+branch%3Amaster)

# ESP-IDF Extra Components

This repository is used to maintain various extra components for [ESP-IDF](https://github.com/espressif/esp-idf). These components can be installed from [ESP Component Registry](https://components.espressif.com/).

Many of the components in this repository are wrappers around third-party libraries, such as zlib, libpng, etc. There are also various components developed by Espressif which don't currently fit into another repository (like [esp-protocols](https://github.com/espressif/esp-protocols), [esp-usb](https://github.com/espressif/esp-usb), [esp-iot-solution](https://github.com/espressif/esp-iot-solution), etc).

## Related Projects

- [ESP-IDF](https://github.com/espressif/esp-idf)
- [ESP Component Registry](https://components.espressif.com/)
- [IDF Component Manager](https://github.com/espressif/idf-component-manager)
- [ESP IOT Solution](https://github.com/espressif/esp-iot-solution)
- [ESP Protocols](https://github.com/espressif/esp-protocols)
- [ESP USB](https://github.com/espressif/esp-usb)

## Contribution

We welcome contributions to idf-extra-components repository!

You can contribute by fixing bugs, adding features, adding documentation or reporting an [issue](https://github.com/espressif/idf-extra-components/issues). We accept contributions via [Github Pull Requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests).

Before reporting an issue, make sure you've searched for a similar one that was already created.

### Adding New Components

Please note that this repository is intended for components maintained by Espressif developers. If you don't work at Espressif and you'd like to publish a component to the ESP Component Registry, please set up a separate repository for your component. You can find more information about this in the [IDF Component Manager documentation](https://docs.espressif.com/projects/idf-component-manager/en/latest/). You can also check out the [talk about developing and publishing components](https://youtu.be/D86gQ4knUnc) from Espressif DevCon 2023. Feel free to [open an issue](https://github.com/espressif/idf-component-manager/issues) if you encounter any problem.


================================================
FILE: argtable3/.build-test-rules.yml
================================================
argtable3/test_apps/argtable_unit_tests:
  disable:
    - if: IDF_TARGET not in ["esp32", "esp32c3"]
      reason: "Sufficient to test on one Xtensa and one RISC-V target"

argtable3/test_apps/console_compat:
  disable:
    - if: IDF_TARGET not in ["esp32", "esp32c3"]
      reason: "Sufficient to test on one Xtensa and one RISC-V target"


================================================
FILE: argtable3/CMakeLists.txt
================================================
# This creates a virtual include file with an "argtable3" subdirectory where
# "/argtable3/src/argtable3.h" is copied. the virtual directory is then used as
# the include folder. This is so we can keep including argtable3 header as follow:
# #include "argtable3/argtable3.h"
set(VIRTUAL_INCLUDE_DIR "${CMAKE_BINARY_DIR}/virtual_include")
file(MAKE_DIRECTORY "${VIRTUAL_INCLUDE_DIR}/argtable3")
file(COPY "${COMPONENT_PATH}/argtable3/src/argtable3.h"
     DESTINATION "${VIRTUAL_INCLUDE_DIR}/argtable3")

# list of C files under argtable3 source directory
file(GLOB iec_argtable3_srcs
    "${COMPONENT_PATH}/argtable3/src/*.c"
)

idf_component_register(
    SRCS ${iec_argtable3_srcs}
    INCLUDE_DIRS "${VIRTUAL_INCLUDE_DIR}"
)

# Check if console component is in the build and has argtable3 sources.
# If so, exclude console's argtable3 sources from compilation and make console
# link against this managed argtable3 component instead.
idf_build_get_property(build_components BUILD_COMPONENTS)

if("console" IN_LIST build_components)
    # Get console component directory
    idf_component_get_property(console_dir console COMPONENT_DIR)

    # Check if console still has argtable3 sources (future-proofing)
    if(EXISTS "${console_dir}/argtable3")

        # List of argtable3 source files in console
        file(GLOB console_argtable3_srcs
            "${console_dir}/argtable3/*.c"
        )

        # Exclude these files from compilation by marking them as header-only
        set_source_files_properties(${console_argtable3_srcs}
            DIRECTORY ${console_dir}
            PROPERTIES HEADER_FILE_ONLY ON)

        # Make console link against this managed argtable3 component
        idf_component_add_link_dependency(FROM console)
    endif()
endif()

target_compile_definitions(${COMPONENT_LIB} PRIVATE
        ARG_ENABLE_LOG=0
        ARG_REPLACE_GETOPT=0
)


================================================
FILE: argtable3/idf_component.yml
================================================
version: "3.3.1~1"
description: "Argtable3 - GNU-style command-line option parsing C library"
url: https://github.com/espressif/idf-extra-components/tree/master/argtable3
documentation: https://www.argtable.org/docs/
dependencies:
  idf: ">=5.1"
sbom:
  manifests:
    - path: sbom_argtable3.yml
      dest: argtable3

================================================
FILE: argtable3/sbom_argtable3.yml
================================================
name: argtable3
version: 3.3.1
supplier: 'Organization: argtable'
description: GNU-style command-line option parsing C library
url: https://github.com/argtable/argtable3/
hash: b50c6c81f25eef8af51141678b333c55b661414d

================================================
FILE: argtable3/test_apps/argtable_unit_tests/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)
project(argtable3_test)


================================================
FILE: argtable3/test_apps/argtable_unit_tests/main/CMakeLists.txt
================================================
idf_component_register(SRCS "test_argtable3.c" "test_main.c"
                    PRIV_INCLUDE_DIRS "."
                    PRIV_REQUIRES unity
                    WHOLE_ARCHIVE)


================================================
FILE: argtable3/test_apps/argtable_unit_tests/main/idf_component.yml
================================================
dependencies:
  espressif/argtable3:
    version: "*"
    override_path: "../../.."


================================================
FILE: argtable3/test_apps/argtable_unit_tests/main/test_argtable3.c
================================================
/*
 * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdio.h>
#include <string.h>
#include "unity.h"
#include "argtable3/argtable3.h"

/* helper macros */
#define ARG_TABLE_FREE(tbl) arg_freetable((tbl), sizeof(tbl)/sizeof(tbl[0]))
#define PARSE_ARGS(tbl, argc, argv) arg_parse((int)(argc), (char**)(argv), (void**)tbl)

/*
===================== ARG TYPES ===================== */

TEST_CASE("argument constructors create valid structs", "[argtable3]")
{
    arg_rem_t *argRem = arg_rem(NULL, "comment");
    TEST_ASSERT_NOT_NULL(argRem);
    free(argRem);

    arg_lit_t *argLit0 = arg_lit0("v", "verbose", "Enable verbose");
    TEST_ASSERT_NOT_NULL(argLit0);
    free(argLit0);

    arg_lit_t *argLit1 = arg_lit1("f", "force", "Force operation");
    TEST_ASSERT_NOT_NULL(argLit1);
    free(argLit1);


    arg_int_t *argInt0 = arg_int0("i", "int", "<n>", "Optional int");
    TEST_ASSERT_NOT_NULL(argInt0);
    free(argInt0);

    arg_int_t *argInt1 = arg_int1("i", "int", "<n>", "Required int");
    TEST_ASSERT_NOT_NULL(argInt1);
    free(argInt1);

    arg_int_t *argIntn = arg_intn("i", "int", "<n>", 0, 3, "Multiple ints");
    TEST_ASSERT_NOT_NULL(argIntn);
    free(argIntn);

    arg_str_t *argStr0 = arg_str0("s", "str", "<str>", "Optional string");
    TEST_ASSERT_NOT_NULL(argStr0);
    free(argStr0);

    arg_str_t *argStr1 = arg_str1("s", "str", "<str>", "Required string");
    TEST_ASSERT_NOT_NULL(argStr1);
    free(argStr1);

    arg_str_t *argStrn = arg_strn("s", "str", "<str>", 1, 3, "Multi string");
    TEST_ASSERT_NOT_NULL(argStrn);
    free(argStrn);

    arg_file_t *argFile0 = arg_file0("f", "file", "<file>", "Optional file");
    TEST_ASSERT_NOT_NULL(argFile0);
    free(argFile0);

    arg_file_t *argFile1 = arg_file1("f", "file", "<file>", "Required file");
    TEST_ASSERT_NOT_NULL(argFile1);
    free(argFile1);

    arg_file_t *argFilen = arg_filen("f", "file", "<file>", 1, 3, "Multi file");
    TEST_ASSERT_NOT_NULL(argFilen);
    free(argFilen);

    arg_dbl_t *argDbl0 = arg_dbl0("d", "double", "<d>", "Optional double");
    TEST_ASSERT_NOT_NULL(argDbl0);
    free(argDbl0);

    arg_dbl_t *argDbl1 = arg_dbl1("d", "double", "<d>", "Required double");
    TEST_ASSERT_NOT_NULL(argDbl1);
    free(argDbl1);

    arg_dbl_t *argDbln = arg_dbln("d", "double", "<d>", 1, 2, "Multi double");
    TEST_ASSERT_NOT_NULL(argDbln);
    free(argDbln);

    arg_date_t *argDate0 = arg_date0("t", "time", "<date>", "%Y-%m-%d", "Optional date");
    TEST_ASSERT_NOT_NULL(argDate0);
    free(argDate0);

    arg_date_t *argDate1 = arg_date1("t", "time", "<date>", "%Y-%m-%d", "Required date");
    TEST_ASSERT_NOT_NULL(argDate1);
    free(argDate1);

    arg_rex_t *argRex0 = arg_rex0("r", "regex", "<expr>", "^[a-z]+$", 0, "Regex");
    TEST_ASSERT_NOT_NULL(argRex0);
    free(argRex0);

    arg_rex_t *argRex1 = arg_rex1("r", "regex", "<expr>", "^[a-z]+$", 0, "Regex");
    TEST_ASSERT_NOT_NULL(argRex1);
    free(argRex1);

    arg_end_t *argEnd = arg_end(5);
    TEST_ASSERT_NOT_NULL(argEnd);
    free(argEnd);

}

TEST_CASE("arg_int: parses optional integer", "[argtable3]")
{
    char *argv[] = {"prog", "-n", "100"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_int *n = arg_int0("n", "number", "<n>", "An integer value");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {n, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_INT(100, n->ival[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_dbl: parses optional double", "[argtable3]")
{
    char *argv[] = {"prog", "-d", "3.1415"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_dbl *d = arg_dbl0("d", "double", "<d>", "A double value");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {d, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_FLOAT_WITHIN(0.0001, 3.1415, d->dval[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_lit: parses literal flags", "[argtable3]")
{
    char *argv[] = {"prog", "-v"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_lit *v = arg_lit0("v", "verbose", "Enable verbose output");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {v, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_INT(1, v->count);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_str: parses string argument", "[argtable3]")
{
    char *argv[] = {"prog", "-s", "hello"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_str *s = arg_str0("s", "string", "<str>", "A string");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {s, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_STRING("hello", s->sval[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_file: parses file paths", "[argtable3]")
{
    char *argv[] = {"prog", "-f", "/tmp/test.txt"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_file *f = arg_file0("f", "file", "<file>", "A file path");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {f, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_STRING("/tmp/test.txt", f->filename[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_rex: validates regex input", "[argtable3]")
{
    char *argv[] = {"prog", "-r", "abc123"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_rex *r = arg_rex0("r", "regex", "[a-z]+[0-9]+", "<re>", 0, "Regex");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {r, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_STRING("abc123", r->sval[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_date: parses date-time string", "[argtable3]")
{
    char *argv[] = {"prog", "-t", "2025-06-27 12:00:00"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_date *dt = arg_date0("t", "time", "%Y-%m-%d %H:%M:%S", "<date>", "DateTime");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {dt, end};

    TEST_ASSERT_EQUAL_INT(0, PARSE_ARGS(argtable, argc, argv));
    TEST_ASSERT_EQUAL_INT(2025 - 1900, dt->tmval[0].tm_year);
    TEST_ASSERT_EQUAL_INT(5, dt->tmval[0].tm_mon);
    TEST_ASSERT_EQUAL_INT(27, dt->tmval[0].tm_mday);
    TEST_ASSERT_EQUAL_INT(12, dt->tmval[0].tm_hour);

    ARG_TABLE_FREE(argtable);
}

/* ===================== API Tests ===================== */

TEST_CASE("arg_print_syntax, glossary, and GNU glossary", "[argtable3]")
{
    struct arg_lit *verbose = arg_lit0("v", "verbose", "Enable verbose output");
    struct arg_str *name = arg_str1("n", "name", "<name>", "Name is required");
    struct arg_end *end = arg_end(20);
    void *argtable[] = {verbose, name, end};

    char buf[256] = {0};
    FILE *f = fmemopen(buf, sizeof(buf), "w");
    TEST_ASSERT_NOT_NULL(f);

    arg_print_syntaxv(f, argtable, "\n");
    fflush(f);
    TEST_ASSERT_NOT_NULL(strstr(buf, "[-v|--verbose]"));
    TEST_ASSERT_NOT_NULL(strstr(buf, "-n|--name=<name>"));

    arg_print_glossary(f, argtable, "%s %s\n");
    fflush(f);
    TEST_ASSERT_NOT_NULL(strstr(buf, "-v, --verbose Enable verbose output"));
    TEST_ASSERT_NOT_NULL(strstr(buf, "-n, --name=<name> Name is required"));
    fclose(f);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_print_errors prints expected message", "[argtable3]")
{
    char *argv[] = {"prog"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_int *num = arg_int1("n", NULL, "<num>", "Required number");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {num, end};

    int errors = arg_parse(argc, (char **)argv, argtable);
    TEST_ASSERT_GREATER_THAN(0, errors);

    char buf[256] = {0};
    FILE *f = fmemopen(buf, sizeof(buf), "w");
    TEST_ASSERT_NOT_NULL(f);
    arg_print_errors(f, end, argv[0]);
    fclose(f);
    printf("%s\n", buf);
    TEST_ASSERT_NOT_NULL(strstr(buf, "missing option"));

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_print_option and arg_print_option_ds output", "[argtable3]")
{
    char buf[128] = {0};
    FILE *f = fmemopen(buf, sizeof(buf), "w");
    TEST_ASSERT_NOT_NULL(f);
    arg_print_option(f, "f", "file", "<file>", "\n");
    fclose(f);
    TEST_ASSERT_NOT_NULL(strstr(buf, "-f|--file=<file>"));
}

TEST_CASE("returns errors for invalid input", "[argtable3]")
{
    char *argv[] = {"prog", "-i", "NaN"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_int *i = arg_int1("i", "int", "<n>", "An integer");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {i, end};

    int nerrors = PARSE_ARGS(argtable, argc, argv);
    TEST_ASSERT_GREATER_THAN(0, nerrors);

    char buf[128] = {0};
    FILE *f = fmemopen(buf, sizeof(buf), "w");
    TEST_ASSERT_NOT_NULL(f);
    arg_print_errors(f, end, argv[0]);
    fclose(f);
    TEST_ASSERT_NOT_NULL(strstr(buf, "invalid argument"));

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_parse, arg_nullcheck, arg_freetable basic flow", "[argtable3]")
{
    char *argv[] = {"prog", "-n", "123"};
    int argc = sizeof(argv) / sizeof(argv[0]);

    struct arg_int *num = arg_int1("n", NULL, "<num>", "Required number");
    struct arg_end *end = arg_end(10);
    void *argtable[] = {num, end};

    TEST_ASSERT(0 == arg_nullcheck(argtable));
    TEST_ASSERT_EQUAL_INT(0, arg_parse(argc, (char **)argv, argtable));
    TEST_ASSERT_EQUAL_INT(123, num->ival[0]);

    ARG_TABLE_FREE(argtable);
}

TEST_CASE("arg_parse: success and error cases", "[argtable3]")
{
    // Success case
    char *argv_success[] = {"prog", "-n", "42", "--name", "ESP32"};
    int argc_success = sizeof(argv_success) / sizeof(argv_success[0]);

    struct arg_int *num = arg_int1("n", "number", "<n>", "A required number");
    struct arg_str *name = arg_str0(NULL, "name", "<name>", "An optional name");
    struct arg_end *end = arg_end(10);
    void *argtable_success[] = {num, name, end};

    int rc_success = arg_parse(argc_success, (char **)argv_success, argtable_success);
    TEST_ASSERT_EQUAL_INT(0, rc_success);
    TEST_ASSERT_EQUAL_INT(42, num->ival[0]);
    TEST_ASSERT_EQUAL_STRING("ESP32", name->sval[0]);

    ARG_TABLE_FREE(argtable_success);

    // Error case: missing required argument
    char *argv_fail[] = {"prog", "--name", "ESP32"};
    int argc_fail = sizeof(argv_fail) / sizeof(argv_fail[0]);

    num = arg_int1("n", "number", "<n>", "A required number");
    name = arg_str0(NULL, "name", "<name>", "An optional name");
    end = arg_end(10);
    void *argtable_fail[] = {num, name, end};

    int rc_fail = arg_parse(argc_fail, argv_fail, argtable_fail);
    TEST_ASSERT_GREATER_THAN(0, rc_fail);

    char buf[256] = {0};
    FILE *f = fmemopen(buf, sizeof(buf), "w");
    TEST_ASSERT_NOT_NULL(f);
    arg_print_errors(f, end, argv_fail[0]);
    fclose(f);
    TEST_ASSERT_NOT_NULL(strstr(buf, "missing option"));

    ARG_TABLE_FREE(argtable_fail);
}


================================================
FILE: argtable3/test_apps/argtable_unit_tests/main/test_main.c
================================================
/*
 * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "unity.h"
#include "unity_test_runner.h"
#include "esp_heap_caps.h"
#include "esp_newlib.h"
#include "unity_test_utils_memory.h"

void setUp(void)
{
    unity_utils_record_free_mem();
}

void tearDown(void)
{
    esp_reent_cleanup();    //clean up some of the newlib's lazy allocations
    unity_utils_evaluate_leaks_direct(0);
}

void app_main(void)
{
    printf("Running argtable3 component tests\n");
    unity_run_menu();
}


================================================
FILE: argtable3/test_apps/argtable_unit_tests/pytest_argtable3.py
================================================
import pytest
from pytest_embedded import Dut


@pytest.mark.generic
def test_argtable3(dut: Dut) -> None:
    dut.run_all_single_board_cases()


================================================
FILE: argtable3/test_apps/argtable_unit_tests/sdkconfig.defaults
================================================
CONFIG_ESP_TASK_WDT_EN=n

================================================
FILE: argtable3/test_apps/console_compat/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)
project(console_compat)

idf_build_get_property(python PYTHON)
add_custom_target(check_argtable_path ALL
    COMMAND ${python} ${CMAKE_CURRENT_SOURCE_DIR}/check_argtable_path.py
    ${CMAKE_CURRENT_BINARY_DIR}/console_compat.elf
    ${CMAKE_CURRENT_SOURCE_DIR}/../../..
    $ENV{IDF_PATH}
    "${_CMAKE_TOOLCHAIN_PREFIX}strings"
    DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/console_compat.elf
)


================================================
FILE: argtable3/test_apps/console_compat/README.md
================================================
This test app verifies that if IDF's console component (which also contains argtable3 source) is built alongside argtable3 component, then the argtable3 code from this component is used.


================================================
FILE: argtable3/test_apps/console_compat/check_argtable_path.py
================================================
import argparse
import subprocess
import sys
import os
import re


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("elf_file", type=str, help="The ELF file to check")
    parser.add_argument("iec_path", type=str, help="The path to the idf-extra-components directory")
    parser.add_argument("idf_path", type=str, help="The path to the esp-idf directory")
    parser.add_argument("strings_program", type=str, help="The program to use to extract strings from the ELF file (e.g. 'strings')")
    args = parser.parse_args()


    # look for any files from argtable3 directory in 'strings app.elf'
    # This is more generic and works regardless of which argtable3 functions are used
    # Matches both IEC path (/argtable3/src/arg_*.c) and IDF path (/argtable3/arg_*.c)
    strings_output = subprocess.check_output([args.strings_program, args.elf_file], encoding="utf-8")
    lines_with_argtable = [line for line in strings_output.splitlines() if re.search(r'/argtable3/(src/)?arg_\w+\.c', line)]

    found_iec_path = False
    found_idf_path = False
    iec_files = []
    idf_files = []

    for line in lines_with_argtable:
        if os.path.abspath(args.iec_path) in line:
            found_iec_path = True
            iec_files.append(line.strip())
        if os.path.abspath(args.idf_path) in line:
            found_idf_path = True
            idf_files.append(line.strip())

    print("Found argtable3 files from IEC:", file=sys.stderr)
    for f in iec_files:
        print(f"  {f}", file=sys.stderr)
    
    print("Found argtable3 files from IDF:", file=sys.stderr)
    for f in idf_files:
        print(f"  {f}", file=sys.stderr)

    print(f"\nSummary - IDF files: {len(idf_files)}, IEC files: {len(iec_files)}", file=sys.stderr)
    if found_idf_path or not found_iec_path:
        print("Error: argtable3 files were found in IDF or not found in IEC", file=sys.stderr)
        raise SystemExit(1)

if __name__ == "__main__":
    main()


================================================
FILE: argtable3/test_apps/console_compat/main/CMakeLists.txt
================================================
idf_component_register(SRCS "test_main.c"
                    PRIV_REQUIRES console)


================================================
FILE: argtable3/test_apps/console_compat/main/idf_component.yml
================================================
dependencies:
  espressif/argtable3:
    version: "*"
    override_path: "../../.."


================================================
FILE: argtable3/test_apps/console_compat/main/test_main.c
================================================
#include "esp_console.h"

void app_main(void)
{
    // call a function of console component which uses argtable3
    esp_console_register_help_command();

    // in CMakeLists.txt, we'll check the map file to make sure
    // that the correct version of argtable3 functions was linked.
}


================================================
FILE: bdc_motor/.build-test-rules.yml
================================================
bdc_motor/test_apps:
  disable:
    - if: SOC_MCPWM_SUPPORTED != 1
      reason: Only MCPWM backend is implemented


================================================
FILE: bdc_motor/CHANGELOG.md
================================================
# Changelog

## 0.2.0

- Clean up the component dependency, don't depend on the `driver` component directly

## 0.1.0

- Initial version


================================================
FILE: bdc_motor/CMakeLists.txt
================================================
set(srcs "src/bdc_motor.c")

if(CONFIG_SOC_MCPWM_SUPPORTED)
    list(APPEND srcs "src/bdc_motor_mcpwm_impl.c")
endif()

if("${IDF_VERSION_MAJOR}.${IDF_VERSION_MINOR}" VERSION_GREATER_EQUAL "5.3")
    set(priv_requires "esp_driver_mcpwm")
else()
    set(priv_requires "driver")
endif()

idf_component_register(SRCS ${srcs}
                       INCLUDE_DIRS "include" "interface"
                       PRIV_REQUIRES ${priv_requires})


================================================
FILE: bdc_motor/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: bdc_motor/README.md
================================================
# Brushed DC Motor Control

[![Component Registry](https://components.espressif.com/components/espressif/bdc_motor/badge.svg)](https://components.espressif.com/components/espressif/bdc_motor)

This directory contains an implementation for Brushed DC Motor by different peripherals. Currently only MCPWM is supported as the BDC motor backend.

To learn more about how to use this component, please check API Documentation from header file [bdc_motor.h](./include/bdc_motor.h).


================================================
FILE: bdc_motor/idf_component.yml
================================================
version: "0.2.1"
description: Brushed DC Motor Control Driver
url: https://github.com/espressif/idf-extra-components/tree/master/bdc_motor
repository: https://github.com/espressif/idf-extra-components.git
issues: https://github.com/espressif/idf-extra-components/issues
dependencies:
  idf: ">=5.0"


================================================
FILE: bdc_motor/include/bdc_motor.h
================================================
/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#pragma once

#include <stdint.h>
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Brushed DC Motor handle
 */
typedef struct bdc_motor_t *bdc_motor_handle_t;

/**
 * @brief Enable BDC motor
 *
 * @param motor: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Enable motor successfully
 *      - ESP_ERR_INVALID_ARG: Enable motor failed because of invalid parameters
 *      - ESP_FAIL: Enable motor failed because other error occurred
 */
esp_err_t bdc_motor_enable(bdc_motor_handle_t motor);

/**
 * @brief Disable BDC motor
 *
 * @param motor: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Disable motor successfully
 *      - ESP_ERR_INVALID_ARG: Disable motor failed because of invalid parameters
 *      - ESP_FAIL: Disable motor failed because other error occurred
 */
esp_err_t bdc_motor_disable(bdc_motor_handle_t motor);

/**
 * @brief Set speed for bdc motor
 *
 * @param motor: BDC Motor handle
 * @param speed: BDC speed
 *
 * @return
 *      - ESP_OK: Set motor speed successfully
 *      - ESP_ERR_INVALID_ARG: Set motor speed failed because of invalid parameters
 *      - ESP_FAIL: Set motor speed failed because other error occurred
 */
esp_err_t bdc_motor_set_speed(bdc_motor_handle_t motor, uint32_t speed);

/**
 * @brief Forward BDC motor
 *
 * @param motor: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Forward motor successfully
 *      - ESP_FAIL: Forward motor failed because some other error occurred
 */
esp_err_t bdc_motor_forward(bdc_motor_handle_t motor);

/**
 * @brief Reverse BDC Motor
 *
 * @param strip: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Reverse motor successfully
 *      - ESP_FAIL: Reverse motor failed because some other error occurred
 */
esp_err_t bdc_motor_reverse(bdc_motor_handle_t motor);

/**
 * @brief Stop motor in a coast way (a.k.a Fast Decay)
 *
 * @param motor: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Stop motor successfully
 *      - ESP_FAIL: Stop motor failed because some other error occurred
 */
esp_err_t bdc_motor_coast(bdc_motor_handle_t motor);

/**
 * @brief Stop motor in a brake way (a.k.a Slow Decay)
 *
 * @param motor: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Stop motor successfully
 *      - ESP_FAIL: Stop motor failed because some other error occurred
 */
esp_err_t bdc_motor_brake(bdc_motor_handle_t motor);

/**
 * @brief Free BDC Motor resources
 *
 * @param strip: BDC Motor handle
 *
 * @return
 *      - ESP_OK: Free resources successfully
 *      - ESP_FAIL: Free resources failed because error occurred
 */
esp_err_t bdc_motor_del(bdc_motor_handle_t motor);

/**
 * @brief BDC Motor Configuration
 */
typedef struct {
    uint32_t pwma_gpio_num; /*!< BDC Motor PWM A gpio number */
    uint32_t pwmb_gpio_num; /*!< BDC Motor PWM B gpio number */
    uint32_t pwm_freq_hz;   /*!< PWM frequency, in Hz */
} bdc_motor_config_t;

/**
 * @brief BDC Motor MCPWM specific configuration
 */
typedef struct {
    int group_id;           /*!< MCPWM group number */
    uint32_t resolution_hz; /*!< MCPWM timer resolution */
} bdc_motor_mcpwm_config_t;

/**
 * @brief Create BDC Motor based on MCPWM peripheral
 *
 * @param motor_config: BDC Motor configuration
 * @param mcpwm_config: MCPWM specific configuration
 * @param ret_motor Returned BDC Motor handle
 * @return
 *      - ESP_OK: Create BDC Motor handle successfully
 *      - ESP_ERR_INVALID_ARG: Create BDC Motor handle failed because of invalid argument
 *      - ESP_ERR_NO_MEM: Create BDC Motor handle failed because of out of memory
 *      - ESP_FAIL: Create BDC Motor handle failed because some other error
 */
esp_err_t bdc_motor_new_mcpwm_device(const bdc_motor_config_t *motor_config, const bdc_motor_mcpwm_config_t *mcpwm_config, bdc_motor_handle_t *ret_motor);

#ifdef __cplusplus
}
#endif


================================================
FILE: bdc_motor/interface/bdc_motor_interface.h
================================================
/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#pragma once

#include <stdint.h>
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct bdc_motor_t bdc_motor_t; /*!< Type of BDC motor */

/**
 * @brief BDC motor interface definition
 */
struct bdc_motor_t {
    /**
     * @brief Enable BDC motor
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Enable motor successfully
     *      - ESP_ERR_INVALID_ARG: Enable motor failed because of invalid parameters
     *      - ESP_FAIL: Enable motor failed because other error occurred
     */
    esp_err_t (*enable)(bdc_motor_t *motor);

    /**
     * @brief Disable BDC motor
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Disable motor successfully
     *      - ESP_ERR_INVALID_ARG: Disable motor failed because of invalid parameters
     *      - ESP_FAIL: Disable motor failed because other error occurred
     */
    esp_err_t (*disable)(bdc_motor_t *motor);

    /**
     * @brief Set speed for bdc motor
     *
     * @param motor: BDC Motor handle
     * @param speed: BDC speed
     *
     * @return
     *      - ESP_OK: Set motor speed successfully
     *      - ESP_ERR_INVALID_ARG: Set motor speed failed because of invalid parameters
     *      - ESP_FAIL: Set motor speed failed because other error occurred
     */
    esp_err_t (*set_speed)(bdc_motor_t *motor, uint32_t speed);

    /**
     * @brief Forward BDC motor
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Forward motor successfully
     *      - ESP_FAIL: Forward motor failed because some other error occurred
     */
    esp_err_t (*forward)(bdc_motor_t *motor);

    /**
     * @brief Reverse BDC Motor
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Reverse motor successfully
     *      - ESP_FAIL: Reverse motor failed because some other error occurred
     */
    esp_err_t (*reverse)(bdc_motor_t *motor);

    /**
     * @brief Stop motor in a coast way (a.k.a Fast Decay)
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Stop motor successfully
     *      - ESP_FAIL: Stop motor failed because some other error occurred
     */
    esp_err_t (*coast)(bdc_motor_t *motor);

    /**
     * @brief Stop motor in a brake way (a.k.a Slow Decay)
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Stop motor successfully
     *      - ESP_FAIL: Stop motor failed because some other error occurred
     */
    esp_err_t (*brake)(bdc_motor_t *motor);

    /**
     * @brief Free BDC Motor handle resources
     *
     * @param motor: BDC Motor handle
     *
     * @return
     *      - ESP_OK: Free resources successfully
     *      - ESP_FAIL: Free resources failed because error occurred
     */
    esp_err_t (*del)(bdc_motor_t *motor);
};

#ifdef __cplusplus
}
#endif


================================================
FILE: bdc_motor/src/bdc_motor.c
================================================
/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <stdlib.h>
#include <string.h>
#include <sys/cdefs.h>
#include "esp_log.h"
#include "esp_check.h"
#include "bdc_motor.h"
#include "bdc_motor_interface.h"

static const char *TAG = "bdc_motor";

esp_err_t bdc_motor_enable(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->enable(motor);
}

esp_err_t bdc_motor_disable(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->disable(motor);
}

esp_err_t bdc_motor_set_speed(bdc_motor_handle_t motor, uint32_t speed)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->set_speed(motor, speed);
}

esp_err_t bdc_motor_forward(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->forward(motor);
}

esp_err_t bdc_motor_reverse(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->reverse(motor);
}

esp_err_t bdc_motor_coast(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->coast(motor);
}

esp_err_t bdc_motor_brake(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->brake(motor);
}

esp_err_t bdc_motor_del(bdc_motor_handle_t motor)
{
    ESP_RETURN_ON_FALSE(motor, ESP_ERR_INVALID_ARG, TAG, "invalid argument");
    return motor->del(motor);
}


================================================
FILE: bdc_motor/src/bdc_motor_mcpwm_impl.c
================================================
/*
 * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */
#include <stdlib.h>
#include <string.h>
#include <sys/cdefs.h>
#include "esp_log.h"
#include "esp_check.h"
#include "driver/mcpwm_prelude.h"
#include "bdc_motor.h"
#include "bdc_motor_interface.h"

static const char *TAG = "bdc_motor_mcpwm";

typedef struct {
    bdc_motor_t base;
    mcpwm_timer_handle_t timer;
    mcpwm_oper_handle_t operator;
    mcpwm_cmpr_handle_t cmpa;
    mcpwm_cmpr_handle_t cmpb;
    mcpwm_gen_handle_t gena;
    mcpwm_gen_handle_t genb;
} bdc_motor_mcpwm_obj;

static esp_err_t bdc_motor_mcpwm_set_speed(bdc_motor_t *motor, uint32_t speed)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_comparator_set_compare_value(mcpwm_motor->cmpa, speed), TAG, "set compare value failed");
    ESP_RETURN_ON_ERROR(mcpwm_comparator_set_compare_value(mcpwm_motor->cmpb, speed), TAG, "set compare value failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_enable(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_timer_enable(mcpwm_motor->timer), TAG, "enable timer failed");
    ESP_RETURN_ON_ERROR(mcpwm_timer_start_stop(mcpwm_motor->timer, MCPWM_TIMER_START_NO_STOP), TAG, "start timer failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_disable(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_timer_start_stop(mcpwm_motor->timer, MCPWM_TIMER_STOP_EMPTY), TAG, "stop timer failed");
    ESP_RETURN_ON_ERROR(mcpwm_timer_disable(mcpwm_motor->timer), TAG, "disable timer failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_forward(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->gena, -1, true), TAG, "disable force level for gena failed");
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->genb, 0, true), TAG, "set force level for genb failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_reverse(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->genb, -1, true), TAG, "disable force level for genb failed");
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->gena, 0, true), TAG, "set force level for gena failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_coast(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->gena, 0, true), TAG, "set force level for gena failed");
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->genb, 0, true), TAG, "set force level for genb failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_brake(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->gena, 1, true), TAG, "set force level for gena failed");
    ESP_RETURN_ON_ERROR(mcpwm_generator_set_force_level(mcpwm_motor->genb, 1, true), TAG, "set force level for genb failed");
    return ESP_OK;
}

static esp_err_t bdc_motor_mcpwm_del(bdc_motor_t *motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = __containerof(motor, bdc_motor_mcpwm_obj, base);
    mcpwm_del_generator(mcpwm_motor->gena);
    mcpwm_del_generator(mcpwm_motor->genb);
    mcpwm_del_comparator(mcpwm_motor->cmpa);
    mcpwm_del_comparator(mcpwm_motor->cmpb);
    mcpwm_del_operator(mcpwm_motor->operator);
    mcpwm_del_timer(mcpwm_motor->timer);
    free(mcpwm_motor);
    return ESP_OK;
}

esp_err_t bdc_motor_new_mcpwm_device(const bdc_motor_config_t *motor_config, const bdc_motor_mcpwm_config_t *mcpwm_config, bdc_motor_handle_t *ret_motor)
{
    bdc_motor_mcpwm_obj *mcpwm_motor = NULL;
    esp_err_t ret = ESP_OK;
    ESP_GOTO_ON_FALSE(motor_config && mcpwm_config && ret_motor, ESP_ERR_INVALID_ARG, err, TAG, "invalid argument");
    mcpwm_motor = calloc(1, sizeof(bdc_motor_mcpwm_obj));
    ESP_GOTO_ON_FALSE(mcpwm_motor, ESP_ERR_NO_MEM, err, TAG, "no mem for rmt motor");

    // mcpwm timer
    mcpwm_timer_config_t timer_config = {
        .group_id = mcpwm_config->group_id,
        .clk_src = MCPWM_TIMER_CLK_SRC_DEFAULT,
        .resolution_hz = mcpwm_config->resolution_hz,
        .period_ticks = mcpwm_config->resolution_hz / motor_config->pwm_freq_hz,
        .count_mode = MCPWM_TIMER_COUNT_MODE_UP,
    };
    ESP_GOTO_ON_ERROR(mcpwm_new_timer(&timer_config, &mcpwm_motor->timer), err, TAG, "create MCPWM timer failed");

    mcpwm_operator_config_t operator_config = {
        .group_id = mcpwm_config->group_id,
    };
    ESP_GOTO_ON_ERROR(mcpwm_new_operator(&operator_config, &mcpwm_motor->operator), err, TAG, "create MCPWM operator failed");

    ESP_GOTO_ON_ERROR(mcpwm_operator_connect_timer(mcpwm_motor->operator, mcpwm_motor->timer), err, TAG, "connect timer and operator failed");

    mcpwm_comparator_config_t comparator_config = {
        .flags.update_cmp_on_tez = true,
    };
    ESP_GOTO_ON_ERROR(mcpwm_new_comparator(mcpwm_motor->operator, &comparator_config, &mcpwm_motor->cmpa), err, TAG, "create comparator failed");
    ESP_GOTO_ON_ERROR(mcpwm_new_comparator(mcpwm_motor->operator, &comparator_config, &mcpwm_motor->cmpb), err, TAG, "create comparator failed");

    // set the initial compare value for both comparators
    mcpwm_comparator_set_compare_value(mcpwm_motor->cmpa, 0);
    mcpwm_comparator_set_compare_value(mcpwm_motor->cmpb, 0);

    mcpwm_generator_config_t generator_config = {
        .gen_gpio_num = motor_config->pwma_gpio_num,
    };
    ESP_GOTO_ON_ERROR(mcpwm_new_generator(mcpwm_motor->operator, &generator_config, &mcpwm_motor->gena), err, TAG, "create generator failed");
    generator_config.gen_gpio_num = motor_config->pwmb_gpio_num;
    ESP_GOTO_ON_ERROR(mcpwm_new_generator(mcpwm_motor->operator, &generator_config, &mcpwm_motor->genb), err, TAG, "create generator failed");

    mcpwm_generator_set_action_on_timer_event(mcpwm_motor->gena,
            MCPWM_GEN_TIMER_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, MCPWM_TIMER_EVENT_EMPTY, MCPWM_GEN_ACTION_HIGH));
    mcpwm_generator_set_action_on_compare_event(mcpwm_motor->gena,
            MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, mcpwm_motor->cmpa, MCPWM_GEN_ACTION_LOW));
    mcpwm_generator_set_action_on_timer_event(mcpwm_motor->genb,
            MCPWM_GEN_TIMER_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, MCPWM_TIMER_EVENT_EMPTY, MCPWM_GEN_ACTION_HIGH));
    mcpwm_generator_set_action_on_compare_event(mcpwm_motor->genb,
            MCPWM_GEN_COMPARE_EVENT_ACTION(MCPWM_TIMER_DIRECTION_UP, mcpwm_motor->cmpb, MCPWM_GEN_ACTION_LOW));

    mcpwm_motor->base.enable = bdc_motor_mcpwm_enable;
    mcpwm_motor->base.disable = bdc_motor_mcpwm_disable;
    mcpwm_motor->base.forward = bdc_motor_mcpwm_forward;
    mcpwm_motor->base.reverse = bdc_motor_mcpwm_reverse;
    mcpwm_motor->base.coast = bdc_motor_mcpwm_coast;
    mcpwm_motor->base.brake = bdc_motor_mcpwm_brake;
    mcpwm_motor->base.set_speed = bdc_motor_mcpwm_set_speed;
    mcpwm_motor->base.del = bdc_motor_mcpwm_del;
    *ret_motor = &mcpwm_motor->base;
    return ESP_OK;

err:
    if (mcpwm_motor) {
        if (mcpwm_motor->gena) {
            mcpwm_del_generator(mcpwm_motor->gena);
        }
        if (mcpwm_motor->genb) {
            mcpwm_del_generator(mcpwm_motor->genb);
        }
        if (mcpwm_motor->cmpa) {
            mcpwm_del_comparator(mcpwm_motor->cmpa);
        }
        if (mcpwm_motor->cmpb) {
            mcpwm_del_comparator(mcpwm_motor->cmpb);
        }
        if (mcpwm_motor->operator) {
            mcpwm_del_operator(mcpwm_motor->operator);
        }
        if (mcpwm_motor->timer) {
            mcpwm_del_timer(mcpwm_motor->timer);
        }
        free(mcpwm_motor);
    }
    return ret;
}


================================================
FILE: bdc_motor/test_apps/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)
project(bdc_motor_test)


================================================
FILE: bdc_motor/test_apps/main/CMakeLists.txt
================================================
idf_component_register(SRCS "bdc_motor_test.c"
                    INCLUDE_DIRS "."
                    PRIV_REQUIRES unity)


================================================
FILE: bdc_motor/test_apps/main/bdc_motor_test.c
================================================
#include <stdio.h>

void app_main(void)
{

}


================================================
FILE: bdc_motor/test_apps/main/idf_component.yml
================================================
dependencies:
  espressif/bdc_motor:
    version: "*"
    override_path: "../../"


================================================
FILE: catch2/CMakeLists.txt
================================================
idf_component_register(SRCS cmd_catch2.cpp
                       INCLUDE_DIRS include)

set(CATCH_CONFIG_NO_POSIX_SIGNALS 1 CACHE BOOL OFF FORCE)
add_subdirectory(Catch2)

target_link_libraries(${COMPONENT_LIB} PUBLIC Catch2::Catch2)
get_target_property(catch_target Catch2::Catch2 ALIASED_TARGET)

# Silence a warning in catch_exception_translator_registry.cpp
target_compile_options(${catch_target} PRIVATE -Wno-unused-function)

# Link to pthreads to avoid issues with STL headers
idf_build_get_property(target IDF_TARGET)
if(NOT target STREQUAL "linux")
    target_link_libraries(${catch_target} PUBLIC idf::pthread)
    # Work around a linking dependency issue in ESP-IDF
    target_link_libraries(${COMPONENT_LIB} PUBLIC "-Wl,-u getentropy")
endif()

# If console component is present in the build, include the console
# command feature. 
idf_build_get_property(build_components BUILD_COMPONENTS)
if("console" IN_LIST build_components)
    target_compile_definitions(${COMPONENT_LIB} PRIVATE WITH_CONSOLE)
    target_link_libraries(${COMPONENT_LIB} PUBLIC idf::console)
endif()


================================================
FILE: catch2/LICENSE.txt
================================================
Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.


================================================
FILE: catch2/README.md
================================================
# Catch2 unit testing library

This component is an ESP-IDF wrapper around [Catch2 unit testing library](https://github.com/catchorg/Catch2).

Tests written using this component can be executed both on real hardware and on the host.

## Using Catch2 in ESP-IDF

### Example

To get started with Catch2 quickly, use the example provided along with this component:

```bash
idf.py create-project-from-example "espressif/catch:catch2-test"
cd catch2-test
idf.py set-target esp32
idf.py build flash monitor
```

The example can also be used on host (Linux):
```bash
idf.py --preview set-target linux
idf.py build monitor
```

### Writing tests

Tests and assertions are written as usual for Catch2, refer to the [official documentation](https://github.com/catchorg/Catch2/tree/devel/docs) for more details. Here is a simple example:

```c++
#include <catch2/catch_test_macros.hpp>

TEST_CASE("Test case 1")
{
    REQUIRE(1 == 1);
}
```

To ensure the test cases are linked into the application, use `WHOLE_ARCHIVE` argument when calling `idf_component_register()` in CMake. For example:

```cmake
idf_component_register(SRCS "test_main.cpp"
                            "test_cases.cpp"
                       INCLUDE_DIRS "."
                       WHOLE_ARCHIVE)

```

### Enabling C++ exceptions

Catch2 relies on C++ exceptions for assertion handling. To get most benefits out of Catch2, it is recommended to have exceptions enabled in the project (`CONFIG_COMPILER_CXX_EXCEPTIONS=y`).

### Stack size

Catch2 uses significant amount of stack space — around 8kB, plus the stack space used by the test cases themselves. Therefore it is necessary to increase the stack size of the `main` task using the `CONFIG_ESP_MAIN_TASK_STACK_SIZE` option, or to invoke Catch from a new task with sufficient stack size. It is also recommended to keep `CONFIG_FREERTOS_WATCHPOINT_END_OF_STACK` or `CONFIG_ESP_SYSTEM_HW_STACK_GUARD` options enabled to detect stack overflows.

### Invoking the test runner

Catch2 test framework can implement the application entry point (`main(int, char**)`) which calls the test runner. This functionality is typically used via the `CATCH_CONFIG_MAIN` macro. However ESP-IDF applications use `app_main(void)` function as an entry point, so the approach with `CATCH_CONFIG_MAIN` doesn't work.


Instead, invoke Catch2 in your `app_main` as follows:

```c++
#include <catch2/catch_session.hpp>

extern "C" void app_main(void)
{
    // prepare command line arguments to Catch2
    const int argc = 1;
    const char* argv[2] = {"target_test_main", NULL};

    // run the tests
    int result = Catch::Session().run(argc, argv);
    // ... handle the result
```

### Integration with ESP-IDF `console` component

This component provides a function to register an ESP-IDF console command to invoke Catch2 test cases:
```c++
esp_err_t register_catch2(const char* cmd_name);
```

This function registers a command with the specified name (for example, "test") with ESP-IDF `console` component. The command passes all the arguments to Catch2 test runner. This makes it possible to invoke tests from an interactive console running on an ESP chip.

To try this functionality, use `catch2-console` example:

```bash
idf.py create-project-from-example "espressif/catch:catch2-console"
cd catch2-console
idf.py set-target esp32
idf.py build flash monitor
```


================================================
FILE: catch2/cmd_catch2.cpp
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: BSL-1.0
 * Note: same license as Catch2
 */
#include "esp_err.h"
#if WITH_CONSOLE
#include "Catch2/src/catch2/catch_config.hpp"
#include "esp_console.h"
#include "catch2/catch_session.hpp"
#include "cmd_catch2.h"

static int cmd_catch2(int argc, char **argv)
{
    static auto session = Catch::Session();
    Catch::ConfigData configData;
    session.useConfigData(configData);
    return session.run(argc, argv);
}

extern "C" esp_err_t register_catch2(const char *cmd_name)
{
    esp_console_cmd_t cmd = {};
    cmd.command = cmd_name,
    cmd.help = "Run tests";
    cmd.func = &cmd_catch2;
    return esp_console_cmd_register(&cmd);
}

#else // WITH_CONSOLE
// Defined to avoid ranlib warning on macOS
// (the table of contents is empty (no object file members in the library define global symbols))
extern "C" esp_err_t register_catch2(const char *cmd_name)
{
    return ESP_OK;
}
#endif // WITH_CONSOLE


================================================
FILE: catch2/examples/catch2-console/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)

project(catch2-console)



================================================
FILE: catch2/examples/catch2-console/README.md
================================================
# Catch2 console example

This example shows how to combine Catch2 test framework with ESP-IDF `console` component.

In this example, you can execute test cases from an interactive console on an ESP chip.

## Using the example

To run the example, build and flash the project as usual. For example, with an ESP32 chip:

```bash
idf.py set-target esp32
idf.py build flash monitor
```

In the console, use `test` command to invoke Catch2. `test` accepts the same command line arguments as Catch2 tests on the host:

- `test -h` — prints command line argument reference
- `test --list-tests` — lists all the registered tests
- `test` — runs all the registered tests
- `test <test name|pattern|tags>` — runs specific tests

[See Catch2 documentation](https://github.com/catchorg/Catch2/blob/devel/docs/command-line.md) for the complete command line argument reference.


================================================
FILE: catch2/examples/catch2-console/main/CMakeLists.txt
================================================
idf_component_register(SRCS "test_main.cpp"
                            "test_cases.cpp"
                       INCLUDE_DIRS "."
                       WHOLE_ARCHIVE
                       PRIV_REQUIRES console)


================================================
FILE: catch2/examples/catch2-console/main/idf_component.yml
================================================
dependencies:
  espressif/catch2:
    version: "*"
    override_path: "../../../"


================================================
FILE: catch2/examples/catch2-console/main/test_cases.cpp
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
#include <catch2/catch_test_macros.hpp>

TEST_CASE("Test case 1")
{
    REQUIRE(1 == 1);
}


================================================
FILE: catch2/examples/catch2-console/main/test_main.cpp
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
#include <stdio.h>
#include <string.h>
#include "esp_console.h"
#include "cmd_catch2.h"

#if SOC_USB_SERIAL_JTAG_SUPPORTED
#if !CONFIG_ESP_CONSOLE_SECONDARY_NONE
#warning "A secondary serial console is not useful when using the console component. Please disable it in menuconfig."
#endif
#endif

extern "C" void app_main(void)
{
    esp_console_repl_t *repl = NULL;
    esp_console_repl_config_t repl_config = ESP_CONSOLE_REPL_CONFIG_DEFAULT();
    repl_config.prompt = "catch2>";
    repl_config.task_stack_size = 10000;

    /* Register commands */
    esp_console_register_help_command();
    register_catch2("test");

#if defined(CONFIG_ESP_CONSOLE_UART_DEFAULT) || defined(CONFIG_ESP_CONSOLE_UART_CUSTOM)
    esp_console_dev_uart_config_t hw_config = ESP_CONSOLE_DEV_UART_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_console_new_repl_uart(&hw_config, &repl_config, &repl));

#elif defined(CONFIG_ESP_CONSOLE_USB_CDC)
    esp_console_dev_usb_cdc_config_t hw_config = ESP_CONSOLE_DEV_CDC_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_console_new_repl_usb_cdc(&hw_config, &repl_config, &repl));

#elif defined(CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG)
    esp_console_dev_usb_serial_jtag_config_t hw_config = ESP_CONSOLE_DEV_USB_SERIAL_JTAG_CONFIG_DEFAULT();
    ESP_ERROR_CHECK(esp_console_new_repl_usb_serial_jtag(&hw_config, &repl_config, &repl));

#else
#error Unsupported console type
#endif

    ESP_ERROR_CHECK(esp_console_start_repl(repl));
}


================================================
FILE: catch2/examples/catch2-console/pytest_catch2_console.py
================================================
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0

import pytest
from pytest_embedded import Dut


@pytest.mark.generic
def test_catch2_console_example(dut: Dut) -> None:
    dut.expect_exact('Type \'help\' to get the list of commands.')
    dut.write('test -?\n')
    dut.expect_exact('For more detailed usage please see the project docs')
    dut.write('test\n')
    dut.expect_exact('All tests passed')
    dut.expect_exact('1 assertion in 1 test case')




================================================
FILE: catch2/examples/catch2-console/sdkconfig.defaults
================================================
CONFIG_COMPILER_CXX_EXCEPTIONS=y
CONFIG_ESP_CONSOLE_SECONDARY_NONE=y


================================================
FILE: catch2/examples/catch2-test/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)

project(catch2-test)



================================================
FILE: catch2/examples/catch2-test/README.md
================================================
# Catch2 example

This example should help you get started with Catch2 test framework.

## Using the example

To run the example on an ESP32, build and flash the project as usual:

```bash
idf.py set-target esp32
idf.py build flash monitor
```

The example can also be used on Linux host:
```bash
idf.py --preview set-target linux
idf.py build monitor
```

## Example structure

- [main/idf_component.yml](main/idf_component.yml) adds a dependency on `espressif/catch2` component.
- [main/CMakeLists.txt](main/CMakeLists.txt) specifies the source files and registers the `main` component with `WHOLE_ARCHIVE` option enabled.
- [main/test_main.cpp](main/test_main.cpp) implements the application entry point which calls the test runner.
- [main/test_cases.cpp](main/test_cases.cpp) implements one trivial test case.
- [sdkconfig.defaults](sdkconfig.defaults) sets the options required to run the example: enables C++ exceptions and increases the size of the `main` task stack.

## Expected output

```
Randomness seeded to: 3499211612
===============================================================================
All tests passed (1 assertion in 1 test case)

Test passed.
```


================================================
FILE: catch2/examples/catch2-test/main/CMakeLists.txt
================================================
idf_component_register(SRCS "test_main.cpp"
                            "test_cases.cpp"
                       INCLUDE_DIRS "."
                       WHOLE_ARCHIVE)


================================================
FILE: catch2/examples/catch2-test/main/idf_component.yml
================================================
dependencies:
  espressif/catch2:
    version: "*"
    override_path: "../../../"


================================================
FILE: catch2/examples/catch2-test/main/test_cases.cpp
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
#include <catch2/catch_test_macros.hpp>

TEST_CASE("Test case 1")
{
    REQUIRE(1 == 1);
}


================================================
FILE: catch2/examples/catch2-test/main/test_main.cpp
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
#include <stdio.h>
#include <catch2/catch_session.hpp>

extern "C" void app_main(void)
{
    int argc = 1;
    const char *argv[2] = {
        "target_test_main",
        NULL
    };

    auto result = Catch::Session().run(argc, argv);
    if (result != 0) {
        printf("Test failed with result %d\n", result);
    } else {
        printf("Test passed.\n");
    }
}


================================================
FILE: catch2/examples/catch2-test/pytest_catch2.py
================================================
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0

import pytest
from pytest_embedded import Dut


@pytest.mark.generic
def test_catch2_example(dut: Dut) -> None:
    dut.expect_exact('All tests passed')
    dut.expect_exact('1 assertion in 1 test case')



================================================
FILE: catch2/examples/catch2-test/sdkconfig.defaults
================================================
CONFIG_COMPILER_CXX_EXCEPTIONS=y
CONFIG_ESP_MAIN_TASK_STACK_SIZE=10000


================================================
FILE: catch2/idf_component.yml
================================================
version: "3.7.0"
description: A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later
url: https://github.com/espressif/idf-extra-components/tree/master/catch2
repository: https://github.com/espressif/idf-extra-components.git
issues: https://github.com/espressif/idf-extra-components/issues
documentation: https://github.com/catchorg/Catch2/tree/devel/docs
dependencies:
  # Mostly because in older IDF versions there was no WHOLE_ARCHIVE component property,
  # so linking all the test cases in a component was a bit hard.
  idf: ">=5.0.0"
sbom:
  manifests:
    - path: sbom_catch2.yml
      dest: Catch2


================================================
FILE: catch2/include/cmd_catch2.h
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: BSL-1.0
 */
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include "esp_err.h"

/**
 * @brief Register a command to run Catch2 tests.
 *
 * @param cmd_name  Name of the command to use. For example, "test".
 * @return esp_err_t  ESP_OK on success, otherwise an error code.
 */
esp_err_t register_catch2(const char *cmd_name);

#ifdef __cplusplus
}
#endif


================================================
FILE: catch2/sbom_catch2.yml
================================================
name: catch2
version: 3.7.0
cpe: cpe:2.3:a:catchorg:catch2:{}:*:*:*:*:*:*:*
supplier: 'Organization: catchorg <https://github.com/catchorg>'
description: A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later
url: https://github.com/catchorg/Catch2
hash: 31588bb4f56b638dd5afc28d3ebff9b9dcefb88d


================================================
FILE: cbor/CMakeLists.txt
================================================
idf_component_register(SRCS "tinycbor/src/cborencoder_close_container_checked.c"
                            "tinycbor/src/cborencoder.c"
                            "tinycbor/src/cborencoder_float.c"
                            "tinycbor/src/cborerrorstrings.c"
                            "tinycbor/src/cborparser_dup_string.c"
                            "tinycbor/src/cborparser.c"
                            "tinycbor/src/cborparser_float.c"
                            "tinycbor/src/cborpretty_stdio.c"
                            "tinycbor/src/cborpretty.c"
                            "tinycbor/src/cbortojson.c"
                            "tinycbor/src/cborvalidation.c"
                            "tinycbor/src/open_memstream.c"
                    INCLUDE_DIRS "tinycbor/src")

# for open_memstream.c
set_source_files_properties(tinycbor/src/open_memstream.c PROPERTIES
                            COMPILE_DEFINITIONS "__linux__")

# Fix unreachable macro redefinition issue between ESP-IDF toolchain and tinycbor
# by force-including a header that resolves the conflict
target_compile_options(${COMPONENT_LIB} PRIVATE
                       "SHELL:-include \"${CMAKE_CURRENT_SOURCE_DIR}/port/include/unreachable_fix.h\"")


================================================
FILE: cbor/examples/cbor/CMakeLists.txt
================================================
# The following lines of boilerplate have to be in your project's
# CMakeLists in this exact order for cmake to work correctly
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)
project(cbor)


================================================
FILE: cbor/examples/cbor/README.md
================================================
# CBOR Example

## Overview

The [CBOR](https://en.wikipedia.org/wiki/CBOR)(Concise Binary Object Representation) is a binary data serialization format which is similar to JSON but with smaller footprint. This example will illustrate how to encode and decode CBOR data using the APIs provided by [tinycbor](https://github.com/intel/tinycbor).

For detailed information about how CBOR encoding and decoding works, please refer to [REF7049](https://tools.ietf.org/html/rfc7049) or [cbor.io](http://cbor.io/);

## How to use example

### Hardware Required

This example should be able to run on any commonly available ESP32 development board.

### Build and Flash

Run `idf.py -p PORT flash monitor` to build and flash the project.

(To exit the serial monitor, type ``Ctrl-]``.)

See the [Getting Started Guide](https://docs.espressif.com/projects/esp-idf/en/latest/get-started/index.html) for full steps to configure and use ESP-IDF to build projects.

## Example Output

```bash
I (320) example: encoded buffer size 67
I (320) example: convert CBOR to JSON
[{"chip":"esp32","unicore":false,"ip":[192,168,1,100]},3.1400001049041748,"simple(99)","2019-07-10 09:00:00+0000","undefined"]
I (340) example: decode CBOR manually
Array[
  Map{
    chip
    esp32
    unicore
    false
    ip
    Array[
      192
      168
      1
      100
    ]
  }
  3.14
  simple(99)
  2019-07-10 09:00:00+0000
  undefined
]
```

## Troubleshooting

For more API usage, please refer to [tinycbor API](https://intel.github.io/tinycbor/current/).

(For any technical queries, please open an [issue](https://github.com/espressif/idf-extra-components/issues) on GitHub. We will get back to you as soon as possible.)


================================================
FILE: cbor/examples/cbor/main/CMakeLists.txt
================================================
idf_component_register(SRCS "cbor_example_main.c"
                       INCLUDE_DIRS "")


================================================
FILE: cbor/examples/cbor/main/cbor_example_main.c
================================================
/*
 * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */
/* CBOR Example

   This example code is in the Public Domain (or CC0 licensed, at your option.)

   Unless required by applicable law or agreed to in writing, this
   software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
   CONDITIONS OF ANY KIND, either express or implied.
*/
#include <stdio.h>
#include <stdlib.h>
#include "esp_log.h"
#include "cbor.h"
#include "cborjson.h"

static const char *TAG = "example";

#define CBOR_CHECK(a, str, goto_tag, ret_value, ...)                              \
    do                                                                            \
    {                                                                             \
        if ((a) != CborNoError)                                                   \
        {                                                                         \
            ESP_LOGE(TAG, "%s(%d): " str, __FUNCTION__, __LINE__, ##__VA_ARGS__); \
            ret = ret_value;                                                      \
            goto goto_tag;                                                        \
        }                                                                         \
    } while (0)

static void indent(int nestingLevel)
{
    while (nestingLevel--) {
        printf("  ");
    }
}

static void dumpbytes(const uint8_t *buf, size_t len)
{
    while (len--) {
        printf("%02X ", *buf++);
    }
}

/**
 * Decode CBOR data manually
 */
static CborError example_dump_cbor_buffer(CborValue *it, int nestingLevel)
{
    CborError ret = CborNoError;
    while (!cbor_value_at_end(it)) {
        CborType type = cbor_value_get_type(it);

        indent(nestingLevel);
        switch (type) {
        case CborArrayType: {
            CborValue recursed;
            assert(cbor_value_is_container(it));
            puts("Array[");
            ret = cbor_value_enter_container(it, &recursed);
            CBOR_CHECK(ret, "enter container failed", err, ret);
            ret = example_dump_cbor_buffer(&recursed, nestingLevel + 1);
            CBOR_CHECK(ret, "recursive dump failed", err, ret);
            ret = cbor_value_leave_container(it, &recursed);
            CBOR_CHECK(ret, "leave container failed", err, ret);
            indent(nestingLevel);
            puts("]");
            continue;
        }
        case CborMapType: {
            CborValue recursed;
            assert(cbor_value_is_container(it));
            puts("Map{");
            ret = cbor_value_enter_container(it, &recursed);
            CBOR_CHECK(ret, "enter container failed", err, ret);
            ret = example_dump_cbor_buffer(&recursed, nestingLevel + 1);
            CBOR_CHECK(ret, "recursive dump failed", err, ret);
            ret = cbor_value_leave_container(it, &recursed);
            CBOR_CHECK(ret, "leave container failed", err, ret);
            indent(nestingLevel);
            puts("}");
            continue;
        }
        case CborIntegerType: {
            int64_t val;
            ret = cbor_value_get_int64(it, &val);
            CBOR_CHECK(ret, "parse int64 failed", err, ret);
            printf("%lld\n", (long long)val);
            break;
        }
        case CborByteStringType: {
            uint8_t *buf;
            size_t n;
            ret = cbor_value_dup_byte_string(it, &buf, &n, it);
            CBOR_CHECK(ret, "parse byte string failed", err, ret);
            dumpbytes(buf, n);
            puts("");
            free(buf);
            continue;
        }
        case CborTextStringType: {
            char *buf;
            size_t n;
            ret = cbor_value_dup_text_string(it, &buf, &n, it);
            CBOR_CHECK(ret, "parse text string failed", err, ret);
            puts(buf);
            free(buf);
            continue;
        }
        case CborTagType: {
            CborTag tag;
            ret = cbor_value_get_tag(it, &tag);
            CBOR_CHECK(ret, "parse tag failed", err, ret);
            printf("Tag(%lld)\n", (long long)tag);
            break;
        }
        case CborSimpleType: {
            uint8_t type;
            ret = cbor_value_get_simple_type(it, &type);
            CBOR_CHECK(ret, "parse simple type failed", err, ret);
            printf("simple(%u)\n", type);
            break;
        }
        case CborNullType:
            puts("null");
            break;
        case CborUndefinedType:
            puts("undefined");
            break;
        case CborBooleanType: {
            bool val;
            ret = cbor_value_get_boolean(it, &val);
            CBOR_CHECK(ret, "parse boolean type failed", err, ret);
            puts(val ? "true" : "false");
            break;
        }
        case CborHalfFloatType: {
            uint16_t val;
            ret = cbor_value_get_half_float(it, &val);
            CBOR_CHECK(ret, "parse half float type failed", err, ret);
            printf("__f16(%04x)\n", val);
            break;
        }
        case CborFloatType: {
            float val;
            ret = cbor_value_get_float(it, &val);
            CBOR_CHECK(ret, "parse float type failed", err, ret);
            printf("%g\n", val);
            break;
        }
        case CborDoubleType: {
            double val;
            ret = cbor_value_get_double(it, &val);
            CBOR_CHECK(ret, "parse double float type failed", err, ret);
            printf("%g\n", val);
            break;
        }
        case CborInvalidType: {
            ret = CborErrorUnknownType;
            CBOR_CHECK(ret, "unknown cbor type", err, ret);
            break;
        }
        }

        ret = cbor_value_advance_fixed(it);
        CBOR_CHECK(ret, "fix value failed", err, ret);
    }
    return CborNoError;
err:
    return ret;
}


void app_main(void)
{
    CborEncoder root_encoder;
    CborParser root_parser;
    CborValue it;
    uint8_t buf[100];

    // Initialize the outermost cbor encoder
    cbor_encoder_init(&root_encoder, buf, sizeof(buf), 0);

    // Create an array containing several items
    CborEncoder array_encoder;
    CborEncoder map_encoder;
    cbor_encoder_create_array(&root_encoder, &array_encoder, 5); // [
    // 1. Create a map containing several pairs
    cbor_encoder_create_map(&array_encoder, &map_encoder, 3); // {
    // chip:esp32
    cbor_encode_text_stringz(&map_encoder, "chip");
    cbor_encode_text_stringz(&map_encoder, "esp32");
    // unicore:false
    cbor_encode_text_stringz(&map_encoder, "unicore");
    cbor_encode_boolean(&map_encoder, false);
    // ip:[192,168,1,100]
    cbor_encode_text_stringz(&map_encoder, "ip");
    CborEncoder array2;
    cbor_encoder_create_array(&map_encoder, &array2, 4); // [
    // Encode several numbers
    cbor_encode_uint(&array2, 192);
    cbor_encode_uint(&array2, 168);
    cbor_encode_uint(&array2, 1);
    cbor_encode_uint(&array2, 100);
    cbor_encoder_close_container(&map_encoder, &array2);        // ]
    cbor_encoder_close_container(&array_encoder, &map_encoder); // }
    // 2. Encode float number
    cbor_encode_float(&array_encoder, 3.14);
    // 3. Encode simple value
    cbor_encode_simple_value(&array_encoder, 99);
    // 4. Encode a string
    cbor_encode_text_stringz(&array_encoder, "2019-07-10 09:00:00+0000");
    // 5. Encode a undefined value
    cbor_encode_undefined(&array_encoder);
    cbor_encoder_close_container(&root_encoder, &array_encoder); // ]

    // If error happened when encoding, then this value should be meaningless
    ESP_LOGI(TAG, "encoded buffer size %d", cbor_encoder_get_buffer_size(&root_encoder, buf));

    // Initialize the cbor parser and the value iterator
    cbor_parser_init(buf, sizeof(buf), 0, &root_parser, &it);

    ESP_LOGI(TAG, "convert CBOR to JSON");
    // Dump the values in JSON format
    cbor_value_to_json(stdout, &it, 0);
    puts("");

    ESP_LOGI(TAG, "decode CBOR manually");
    // Decode CBOR data manually
    example_dump_cbor_buffer(&it, 0);
}


================================================
FILE: cbor/examples/cbor/main/idf_component.yml
================================================
## IDF Component Manager Manifest File
version: "1.0.0"
description: CBOR Example
dependencies:
  espressif/cbor:
    version: '0.*'
    override_path: '../../../'


================================================
FILE: cbor/examples/cbor/pytest_cbor.py
================================================
# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD
# SPDX-License-Identifier: Unlicense OR CC0-1.0
from __future__ import unicode_literals

import textwrap

import pytest
from pytest_embedded import Dut


@pytest.mark.generic
def test_examples_cbor(dut: Dut) -> None:

    dut.expect(r'example: encoded buffer size \d+')
    dut.expect('example: convert CBOR to JSON')
    parsed_info = dut.expect(r'\[\{"chip":"(\w+)","unicore":(\w+),"ip":\[(\d+),(\d+),(\d+),(\d+)\]\},'
                             r'3.1400001049041748'
                             r',"simple\(99\)","2019-07-10 09:00:00\+0000","undefined"\]')
    dut.expect('example: decode CBOR manually')

    dut.expect(textwrap.dedent(r'''
                                Array\[\s*
                                  Map{{\s*
                                    chip\s*
                                    {}\s*
                                    unicore\s*
                                    {}\s*
                                    ip\s*
                                    Array\[\s*
                                      {}\s*
                                      {}\s*
                                      {}\s*
                                      {}\s*
                                    \]\s*
                                  }}\s*
                                  3.14\s*
                                  simple\(99\)\s*
                                  2019-07-10 09:00:00\+0000\s*
                                  undefined\s*
                                \]'''.format(parsed_info[1].decode(), parsed_info[2].decode(), parsed_info[3].decode(),
                                             parsed_info[4].decode(), parsed_info[5].decode(),parsed_info[6].decode())).replace('{', r'\{').replace('}', r'\}'))


================================================
FILE: cbor/examples/cbor/sdkconfig.defaults
================================================
# This example is not supported with newlib nano:
#   - First 64-bit integers are not supported in newlib nano
#   - There is also issue with `PRIu8` format specifier with newlib nano (observed on ESP32-C2, see IDFCI-1375)
CONFIG_NEWLIB_NANO_FORMAT=n


================================================
FILE: cbor/idf_component.yml
================================================
version: "0.6.1~4"
description: "CBOR: Concise Binary Object Representation Library"
url: https://github.com/espressif/idf-extra-components/tree/master/cbor
dependencies:
  idf: ">=5.0"


================================================
FILE: cbor/port/include/unreachable_fix.h
================================================
/*
 * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Unlicense OR CC0-1.0
 */

#ifndef CBOR_UNREACHABLE_FIX_H
#define CBOR_UNREACHABLE_FIX_H

/* This header fixes the unreachable macro redefinition issue between
   ESP-IDF toolchain and tinycbor library */

/* Force include stddef.h first to get the ESP-IDF definition */
#include <stddef.h>

/* Now undefine it so tinycbor can define its own version */
#ifdef unreachable
#undef unreachable
#endif

#endif /* CBOR_UNREACHABLE_FIX_H */


================================================
FILE: ccomp_timer/.build-test-rules.yml
================================================
ccomp_timer/test_apps:
  enable:
    - if: IDF_TARGET in ["esp32", "esp32s2", "esp32c3"]
      reason: "Testing on these targets is sufficient (xtensa, risc-v, single/dual core)."


================================================
FILE: ccomp_timer/CHANGELOG.md
================================================
## 1.0.0

- Move the cache compensated timer from `esp-idf/tools/unit-test-app/components` to component registry.


================================================
FILE: ccomp_timer/CMakeLists.txt
================================================
idf_build_get_property(arch IDF_TARGET_ARCH)

set(srcs "ccomp_timer.c")

if(CONFIG_IDF_TARGET_ARCH_RISCV)
    list(APPEND srcs "ccomp_timer_impl_riscv.c")
endif()

if(CONFIG_IDF_TARGET_ARCH_XTENSA)
    list(APPEND srcs "ccomp_timer_impl_xtensa.c")
endif()

if("${arch}" STREQUAL "xtensa")
    set(priv_requires perfmon driver)
else()
    set(priv_requires driver)
endif()

idf_component_register(SRCS ${srcs}
                       INCLUDE_DIRS include
                       PRIV_INCLUDE_DIRS private_include
                       PRIV_REQUIRES "${priv_requires}")


================================================
FILE: ccomp_timer/LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: ccomp_timer/README.md
================================================
# Cache Compensated Timer

[![Component Registry](https://components.espressif.com/components/espressif/ccomp_timer/badge.svg)](https://components.espressif.com/components/espressif/ccomp_timer)

The **Cache Compensated Timer** is a timer that tries to account for instruction and data stall cycles caused by cache misses. It is useful for measuring the time spent in a function or a block of code.

On Xtensa targets (e.g. ESP32), the timer is built on top of the debug module's performance monitor counter.

Due to hardware limitations, on RISC-V targets this driver falls back to using the CPU's cycle counter, which actually **doesn't** account for the cache misses. To achieve a measurement that is independent of cache misses you could place the code is to be measured into IRAM.


================================================
FILE: ccomp_timer/ccomp_timer.c
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "ccomp_timer.h"

#include "ccomp_timer_impl.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"

#include "esp_log.h"
#include "esp_intr_alloc.h"


esp_err_t ccomp_timer_start(void)
{
    esp_err_t err = ESP_OK;

    ccomp_timer_impl_lock();
    if (ccomp_timer_impl_is_init()) {
        if (ccomp_timer_impl_is_active()) {
            err = ESP_ERR_INVALID_STATE;
        }
    } else {
        err = ccomp_timer_impl_init();
    }
    ccomp_timer_impl_unlock();

    if (err != ESP_OK) {
        goto fail;
    }

    err = ccomp_timer_impl_reset();

    if (err != ESP_OK) {
        goto fail;
    }

    err = ccomp_timer_impl_start();

    if (err == ESP_OK) {
        return ESP_OK;
    }

fail:
    return err;
}

int64_t IRAM_ATTR ccomp_timer_stop(void)
{
    esp_err_t err = ESP_OK;
    ccomp_timer_impl_lock();
    if (!ccomp_timer_impl_is_active()) {
        err = ESP_ERR_INVALID_STATE;
    }
    ccomp_timer_impl_unlock();

    if (err != ESP_OK) {
        goto fail;
    }

    err = ccomp_timer_impl_stop();
    if (err != ESP_OK) {
        goto fail;
    }

    int64_t t = ccomp_timer_get_time();

    err = ccomp_timer_impl_deinit();

    if (err == ESP_OK && t != -1) {
        return t;
    }

fail:
    return -1;
}

int64_t IRAM_ATTR ccomp_timer_get_time(void)
{
    return ccomp_timer_impl_get_time();
}


================================================
FILE: ccomp_timer/ccomp_timer_impl_riscv.c
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdint.h>
#include "freertos/portmacro.h"
#include "esp_freertos_hooks.h"
#include "soc/soc_caps.h"
#include "esp_rom_sys.h"
#include "esp_cpu.h"
#include "esp_private/esp_clk.h"

typedef enum {
    PERF_TIMER_UNINIT = 0,  // timer has not been initialized yet
    PERF_TIMER_IDLE,        // timer has been initialized but is not tracking elapsed time
    PERF_TIMER_ACTIVE       // timer is tracking elapsed time
} ccomp_timer_state_t;

typedef struct {
    uint32_t last_ccount;      // last CCOUNT value, updated every os tick
    ccomp_timer_state_t state; // state of the timer
    int64_t ccount;            // accumulated processors cycles during the time when timer is active
} ccomp_timer_status_t;

// Each core has its independent timer
ccomp_timer_status_t s_status[SOC_CPU_CORES_NUM];

static portMUX_TYPE s_lock = portMUX_INITIALIZER_UNLOCKED;

static void IRAM_ATTR update_ccount(void)
{
    if (s_status[esp_cpu_get_core_id()].state == PERF_TIMER_ACTIVE) {
        int64_t new_ccount = esp_cpu_get_cycle_count();
        if (new_ccount > s_status[esp_cpu_get_core_id()].last_ccount) {
            s_status[esp_cpu_get_core_id()].ccount += new_ccount - s_status[esp_cpu_get_core_id()].last_ccount;
        } else {
            // CCOUNT has wrapped around
            s_status[esp_cpu_get_core_id()].ccount += new_ccount + (UINT32_MAX - s_status[esp_cpu_get_core_id()].last_ccount);
        }
        s_status[esp_cpu_get_core_id()].last_ccount = new_ccount;
    }
}

esp_err_t ccomp_timer_impl_init(void)
{
    s_status[esp_cpu_get_core_id()].state = PERF_TIMER_IDLE;
    return ESP_OK;
}

esp_err_t ccomp_timer_impl_deinit(void)
{
    s_status[esp_cpu_get_core_id()].state = PERF_TIMER_UNINIT;
    return ESP_OK;
}

esp_err_t ccomp_timer_impl_start(void)
{
    s_status[esp_cpu_get_core_id()].state = PERF_TIMER_ACTIVE;
    s_status[esp_cpu_get_core_id()].last_ccount = esp_cpu_get_cycle_count();
    // Update elapsed cycles every OS tick
    esp_register_freertos_tick_hook_for_cpu(update_ccount, esp_cpu_get_core_id());
    return ESP_OK;
}

esp_err_t IRAM_ATTR ccomp_timer_impl_stop(void)
{
    esp_deregister_freertos_tick_hook_for_cpu(update_ccount, esp_cpu_get_core_id());
    update_ccount();
    s_status[esp_cpu_get_core_id()].state = PERF_TIMER_IDLE;
    return ESP_OK;
}

int64_t IRAM_ATTR ccomp_timer_impl_get_time(void)
{
    update_ccount();
    int64_t cycles = s_status[esp_cpu_get_core_id()].ccount;
    return (cycles * 1000000) / esp_clk_cpu_freq();
}

esp_err_t ccomp_timer_impl_reset(void)
{
    s_status[esp_cpu_get_core_id()].ccount = 0;
    s_status[esp_cpu_get_core_id()].last_ccount = 0;
    return ESP_OK;
}

bool ccomp_timer_impl_is_init(void)
{
    return s_status[esp_cpu_get_core_id()].state != PERF_TIMER_UNINIT;
}

bool IRAM_ATTR ccomp_timer_impl_is_active(void)
{
    return s_status[esp_cpu_get_core_id()].state == PERF_TIMER_ACTIVE;
}

void IRAM_ATTR ccomp_timer_impl_lock(void)
{
    portENTER_CRITICAL(&s_lock);
}

void IRAM_ATTR ccomp_timer_impl_unlock(void)
{
    portEXIT_CRITICAL(&s_lock);
}


================================================
FILE: ccomp_timer/ccomp_timer_impl_xtensa.c
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdint.h>
#include <string.h>

#include "ccomp_timer_impl.h"
#include "esp_intr_alloc.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "eri.h"
#include "freertos/FreeRTOS.h"
#include "esp_freertos_hooks.h"
#include "perfmon.h"
#include "xtensa/core-macros.h"
#include "xtensa/xt_perf_consts.h"
#include "xtensa-debug-module.h"
#include "esp_private/esp_clk.h"

#define D_STALL_COUNTER_ID 0
#define I_STALL_COUNTER_ID 1

typedef enum {
    PERF_TIMER_UNINIT = 0,              // timer has not been initialized yet
    PERF_TIMER_IDLE,                    // timer has been initialized but is not tracking elapsed time
    PERF_TIMER_ACTIVE                   // timer is tracking elapsed time
} ccomp_timer_state_t;

typedef struct {
    int i_ovfl;                         // number of times instruction stall counter has overflowed
    int d_ovfl;                         // number of times data stall counter has overflowed
    uint32_t last_ccount;               // last CCOUNT value, updated every os tick
    ccomp_timer_state_t state;          // state of the timer
    intr_handle_t intr_handle;          // handle to allocated handler for perfmon counter overflows, so that it can be freed during deinit
    int64_t ccount;                     // accumulated processors cycles during the time when timer is active
} ccomp_timer_status_t;

// Each core has its independent timer
ccomp_timer_status_t s_status[] = {
    (ccomp_timer_status_t)
    {
        .i_ovfl = 0,
        .d_ovfl = 0,
        .ccount = 0,
        .last_ccount = 0,
        .state = PERF_TIMER_UNINIT,
        .intr_handle = NULL,
    },
    (ccomp_timer_status_t)
    {
        .i_ovfl = 0,
        .d_ovfl = 0,
        .ccount = 0,
        .last_ccount = 0,
        .state = PERF_TIMER_UNINIT,
        .intr_handle = NULL
    }
};

static portMUX_TYPE s_lock = portMUX_INITIALIZER_UNLOCKED;

static void IRAM_ATTR update_ccount(void)
{
    if (s_status[xPortGetCoreID()].state == PERF_TIMER_ACTIVE) {
        int64_t new_ccount = xthal_get_ccount();
        if (new_ccount > s_status[xPortGetCoreID()].last_ccount) {
            s_status[xPortGetCoreID()].ccount += new_ccount - s_status[xPortGetCoreID()].last_ccount;
        } else {
            // CCOUNT has wrapped around
            s_status[xPortGetCoreID()].ccount += new_ccount + (UINT32_MAX - s_status[xPortGetCoreID()].last_ccount);
        }
        s_status[xPortGetCoreID()].last_ccount = new_ccount;
    }
}

static void inline update_overflow(int id, int *cnt)
{
    uint32_t pmstat = eri_read(ERI_PERFMON_PMSTAT0 + id * sizeof(int32_t));
    if (pmstat & PMSTAT_OVFL) {
        *cnt += 1;
        // Clear overflow and PerfMonInt asserted bits. The only valid bits in PMSTAT is the ones we're trying to clear. So it should be
        // ok to just modify the whole register.
        eri_write(ERI_PERFMON_PMSTAT0 + id, ~0x0);
    }
}

static void IRAM_ATTR perf_counter_overflow_handler(void *args)
{
    update_overflow(D_STALL_COUNTER_ID, &s_status[xPortGetCoreID()].d_ovfl);
    update_overflow(I_STALL_COUNTER_ID, &s_status[xPortGetCoreID()].i_ovfl);
}

static void set_perfmon_interrupt(bool enable)
{
    uint32_t d_pmctrl = eri_read(ERI_PERFMON_PMCTRL0 + D_STALL_COUNTER_ID * sizeof(int32_t));
    uint32_t i_pmctrl = eri_read(ERI_PERFMON_PMCTRL0 + I_STALL_COUNTER_ID * sizeof(int32_t));

    if (enable) {
        d_pmctrl |= PMCTRL_INTEN;
        i_pmctrl |= PMCTRL_INTEN;
    } else {
        d_pmctrl &= ~PMCTRL_INTEN;
        i_pmctrl &= ~PMCTRL_INTEN;
    }

    eri_write(ERI_PERFMON_PMCTRL0 + D_STALL_COUNTER_ID * sizeof(int32_t), d_pmctrl);
    eri_write(ERI_PERFMON_PMCTRL0 + I_STALL_COUNTER_ID * sizeof(int32_t), i_pmctrl);
}


esp_err_t ccomp_timer_impl_init(void)
{
    // Keep track of how many times each counter has overflowed.
    esp_err_t err = esp_intr_alloc(ETS_INTERNAL_PROFILING_INTR_SOURCE, 0,
                                   perf_counter_overflow_handler, NULL, &s_status[xPortGetCoreID()].intr_handle);

    if (err != ESP_OK) {
        return err;
    }

    xtensa_perfmon_init(D_STALL_COUNTER_ID,
                        XTPERF_CNT_D_STALL,
                        XTPERF_MASK_D_STALL_BUSY, 0, -1);
    xtensa_perfmon_init(I_STALL_COUNTER_ID,
                        XTPERF_CNT_I_STALL,
                        XTPERF_MASK_I_STALL_BUSY, 0, -1);

    set_perfmon_interrupt(true);
    s_status[xPortGetCoreID()].state = PERF_TIMER_IDLE;
    return ESP_OK;
}

esp_err_t ccomp_timer_impl_deinit(void)
{
    set_perfmon_interrupt(false);

    esp_err_t err = esp_intr_free(s_status[xPortGetCoreID()].intr_handle);

    if (err != ESP_OK) {
        return err;
    }

    s_status[xPortGetCoreID()].intr_handle = NULL;
    s_status[xPortGetCoreID()].state = PERF_TIMER_UNINIT;
    return ESP_OK;
}

esp_err_t ccomp_timer_impl_start(void)
{
    s_status[xPortGetCoreID()].state = PERF_TIMER_ACTIVE;
    s_status[xPortGetCoreID()].last_ccount = xthal_get_ccount();
    // Update elapsed cycles every OS tick
    esp_register_freertos_tick_hook_for_cpu(update_ccount, xPortGetCoreID());
    xtensa_perfmon_start();
    return ESP_OK;
}

esp_err_t IRAM_ATTR ccomp_timer_impl_stop(void)
{
    xtensa_perfmon_stop();
    esp_deregister_freertos_tick_hook_for_cpu(update_ccount, xPortGetCoreID());
    update_ccount();
    s_status[xPortGetCoreID()].state = PERF_TIMER_IDLE;
    return ESP_OK;
}

int64_t IRAM_ATTR ccomp_timer_impl_get_time(void)
{
    update_ccount();
    int64_t d_stalls = xtensa_perfmon_value(D_STALL_COUNTER_ID) +
                       s_status[xPortGetCoreID()].d_ovfl * (1 << sizeof(int32_t));
    int64_t i_stalls = xtensa_perfmon_value(I_STALL_COUNTER_ID) +
                       s_status[xPortGetCoreID()].i_ovfl * (1 << sizeof(int32_t));
    int64_t stalls = d_stalls + i_stalls;
    int64_t cycles = s_status[xPortGetCoreID()].ccount;
    return ((cycles - stalls) * 1000000) / esp_clk_cpu_freq();
}

esp_err_t ccomp_timer_impl_reset(void)
{
    xtensa_perfmon_reset(D_STALL_COUNTER_ID);
    xtensa_perfmon_reset(I_STALL_COUNTER_ID);
    s_status[xPortGetCoreID()].d_ovfl = 0;
    s_status[xPortGetCoreID()].i_ovfl = 0;
    s_status[xPortGetCoreID()].ccount = 0;
    s_status[xPortGetCoreID()].last_ccount = 0;
    return ESP_OK;
}

bool ccomp_timer_impl_is_init(void)
{
    return s_status[xPortGetCoreID()].state != PERF_TIMER_UNINIT;
}

bool IRAM_ATTR ccomp_timer_impl_is_active(void)
{
    return s_status[xPortGetCoreID()].state == PERF_TIMER_ACTIVE;
}

void IRAM_ATTR ccomp_timer_impl_lock(void)
{
    portENTER_CRITICAL(&s_lock);
}

void IRAM_ATTR ccomp_timer_impl_unlock(void)
{
    portEXIT_CRITICAL(&s_lock);
}


================================================
FILE: ccomp_timer/idf_component.yml
================================================
version: "1.0.0~1"
description: Cache Compensated Timer
url: https://github.com/espressif/idf-extra-components/tree/master/ccomp_timer
issues: "https://github.com/espressif/idf-extra-components/issues"
dependencies:
  idf: ">=5.0"


================================================
FILE: ccomp_timer/include/ccomp_timer.h
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#pragma once

#include <stdint.h>
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Start the timer on the current core.
 *
 * @return
 *  - ESP_OK: Success
 *  - ESP_ERR_INVALID_STATE: The timer has already been started previously.
 *  - Others: Fail
 */
esp_err_t ccomp_timer_start(void);

/**
 * @brief Stop the timer on the current core.
 *
 * @note Returns -1 if an error has occurred and stopping the timer failed.
 *
 * @return The time elapsed from the last ccomp_timer_start call on the current
 *         core.
 */
int64_t ccomp_timer_stop(void);

/**
 * Return the current timer value on the current core without stopping the timer.
 *
 * @note Returns -1 if an error has occurred and stopping the timer failed.
 *
 * @note If called while timer is active i.e. between ccomp_timer_start and ccomp_timer_stop,
 * this function returns the elapsed time from ccomp_timer_start. Once ccomp_timer_stop
 * has been called, the timer becomes inactive and stops keeping time. As a result, if this function gets
 * called after esp_cccomp_timer_stop, this function will return the same value as when the timer was stopped.
 *
 * @return The elapsed time from the last ccomp_timer_start call on the current
 *          core.
 */
int64_t ccomp_timer_get_time(void);

#ifdef __cplusplus
}
#endif


================================================
FILE: ccomp_timer/private_include/ccomp_timer_impl.h
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#pragma once

#include <stdint.h>
#include <stdbool.h>
#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Initialize the underlying implementation for cache compensated timer. This might involve
 * setting up architecture-specific event counters and or allocating interrupts that handle events for those counters.
 * @return
 *  - ESP_OK: Success
 *  - ESP_ERR_INVALID_STATE: The timer has already been started previously.
 *  - Others: Fail
 */
esp_err_t ccomp_timer_impl_init(void);

/**
 * @brief Deinitialize the underlying implementation for cache compensated timer. This should restore
 * the state of the program to before ccomp_timer_impl_init.
 * @return
 *  - ESP_OK: Success
 *  - ESP_ERR_INVALID_STATE: The timer has already been started previously.
 *  - Others: Fail
 */
esp_err_t ccomp_timer_impl_deinit(void);

/**
 * @brief Make the underlying implementation start keeping time.
 *
 * @return
 *  - ESP_OK: Success
 *  - Others: Fail
 */
esp_err_t ccomp_timer_impl_start(void);

/**
 * @brief Make the underlying implementation stop keeping time.
 *
 * @return
 *  - ESP_OK: Success
 *  - Others: Fail
 */
esp_err_t ccomp_timer_impl_stop(void);

/**
 * @brief Reset the timer to its initial state.
 *
 * @return
 *  - ESP_OK: Success
 *  - Others: Fail
 */
esp_err_t ccomp_timer_impl_reset(void);

/**
 * @brief Get the elapsed time kept track of by the underlying implementation in microseconds.
 *
 * @return The elapsed time in microseconds. Set to -1 if the operation is unsuccessful.
 */
int64_t ccomp_timer_impl_get_time(void);

/**
 * @brief Obtain an internal critical section used in the implementation. Should be treated
 * as a spinlock.
 */
void ccomp_timer_impl_lock(void);

/**
 * @brief Start the performance timer on the current core.
 */
void ccomp_timer_impl_unlock(void);

/**
 * @brief Check if timer has been initialized.
 *
 * @return
 *  - true: the timer has been initialized using ccomp_timer_impl_init
 *  - false: the timer has not been initialized, or ccomp_timer_impl_deinit has been called recently
 */
bool ccomp_timer_impl_is_init(void);

/**
 * @brief Check if timer is keeping time.
 *
 * @return
 *  - true: the timer is keeping track of elapsed time from ccomp_timer_impl_start
 *  - false: the timer is not keeping track of elapsed time since ccomp_timer_impl_start has not yet been called or ccomp_timer_impl_stop has been called recently
 */
bool ccomp_timer_impl_is_active(void);

#ifdef __cplusplus
}
#endif


================================================
FILE: ccomp_timer/test_apps/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)

include($ENV{IDF_PATH}/tools/cmake/project.cmake)
set(COMPONENTS main)
project(ccomp_timer_test)


================================================
FILE: ccomp_timer/test_apps/main/CMakeLists.txt
================================================
idf_build_get_property(arch IDF_TARGET_ARCH)

set(priv_requires esp_timer unity)
if("${arch}" STREQUAL "xtensa")
    list(APPEND priv_requires perfmon)
endif()

idf_component_register(SRCS "ccomp_timer_test.c"
                            "ccomp_timer_test_api.c"
                            "ccomp_timer_test_data.c"
                            "ccomp_timer_test_inst.c"
                       PRIV_INCLUDE_DIRS "."
                       PRIV_REQUIRES ${priv_requires}
                       WHOLE_ARCHIVE)


================================================
FILE: ccomp_timer/test_apps/main/ccomp_timer_test.c
================================================
/*
 * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include "unity.h"
#include "unity_test_runner.h"
#include "esp_heap_caps.h"
#include "esp_newlib.h"
#include "unity_test_utils_memory.h"

void setUp(void)
{
    unity_utils_record_free_mem();
}

void tearDown(void)
{
    esp_reent_cleanup();    //clean up some of the newlib's lazy allocations
    unity_utils_evaluate_leaks_direct(50);
}

void app_main(void)
{
    printf("Running ccomp_timer component tests\n");
    unity_run_menu();
}


================================================
FILE: ccomp_timer/test_apps/main/ccomp_timer_test_api.c
================================================
/*
 * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD
 *
 * SPDX-License-Identifier: CC0-1.0
 */
#include <stdlib.h>
#include <stdint.h>

#include "esp_timer.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "ccomp_timer.h"

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#ifndef CONFIG_FREERTOS_UNICORE
#include "esp_ipc.h"
#endif

#include "unity.h"

#ifndef CONFIG_FREERTOS_UNICORE
static void start_timer(void *param)
{
    esp_err_t *err = (esp_err_t *)param;
    *err = ccomp_timer_start();
}

static void stop_timer(void *param)
{
    int64_t *t = (int64_t *)param;
    *t = ccomp_timer_stop();
}
#endif

static void computation(void *param)
{
    int *l = (int *)param;
    for (volatile int i = 0, a = 0; i < *l; i++) {
        a += i;
    }
}

TEST_CASE("starting and stopping works", "[ccomp_timer]")
{
    esp_err_t err;
    int64_t t;

    /*
    * Test on the same task
    */
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_OK, err);

    // Start an already started timer
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_ERR_INVALID_STATE, err);

    t = ccomp_timer_stop();
    TEST_ASSERT_GREATER_OR_EQUAL(0, t);

    // Stopping a non started timer
    t = ccomp_timer_stop();
    TEST_ASSERT_EQUAL(-1, t);

#ifndef CONFIG_FREERTOS_UNICORE
    /*
    * Test on different task on same core
    */
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_OK, err);

    esp_ipc_call_blocking(xPortGetCoreID(), start_timer, &err);
    TEST_ASSERT_EQUAL(ESP_ERR_INVALID_STATE, err);

    t = ccomp_timer_stop();
    TEST_ASSERT_GREATER_OR_EQUAL(0, t);

    esp_ipc_call_blocking(xPortGetCoreID(), stop_timer, &t);
    TEST_ASSERT_EQUAL(-1, t);

    /*
    * Timer being stopped from another task on the same core
    */
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_OK, err);

    esp_ipc_call_blocking(xPortGetCoreID(), stop_timer, &t);
    TEST_ASSERT_GREATER_OR_EQUAL(0, t);

    /*
    * Test on different task on same core
    */
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_OK, err);

    esp_ipc_call_blocking(xPortGetCoreID() == 0 ? 1 : 0, start_timer, &err);
    TEST_ASSERT_EQUAL(ESP_OK, err);

    t = ccomp_timer_stop();
    TEST_ASSERT_GREATER_OR_EQUAL(0, t);

    esp_ipc_call_blocking(xPortGetCoreID() == 0 ? 1 : 0, stop_timer, &t);
    TEST_ASSERT_GREATER_OR_EQUAL(0, t);
#endif
}

TEST_CASE("getting the time works", "[ccomp_timer]")
{
    // Get wall time and start ccomp timer
    int64_t start = esp_timer_get_time();
    ccomp_timer_start();

    int64_t t_a = ccomp_timer_get_time();

    int temp = 10000;
    computation(&temp);

    int64_t t_b = ccomp_timer_get_time();

    // Check that ccomp time after computation is more than
    // ccomp time before computation.
    TEST_ASSERT_LESS_THAN(t_b, t_a);

    // Get time diff between wall time and ccomp time
    int64_t t_1 = ccomp_timer_stop();
    int64_t t_2 = esp_timer_get_time() - start;

    // The times should at least be in the same ballpark (at least within 10%)
    float diff = (llabs(t_1 - t_2)) / ((float)t_2);
    TEST_ASSERT(diff <= 10.0f);

    // Since the timer was already stopped, test that ccomp_timer_get_time
    // returns the same time as ccomp_timer_stop
    int64_t t_c = ccomp_timer_get_time();
    TEST_ASSERT_EQUAL(t_1, t_c);
}

#ifndef CONFIG_FREERTOS_UNICORE
TEST_CASE("timers for each core counts independently", "[ccomp_timer]")
{
    esp_err_t err;

    // Start a timer on this core
    err = ccomp_timer_start();
    TEST_ASSERT_EQUAL(ESP_OK, err);

    // Do some work on this core
    int temp = 10000;
    computation(&temp);

    // Start a timer on the other core
    esp_ipc_call_blocking(xPortGetCoreID() == 0 ? 1 : 0, start_timer, &err);
    TEST_ASSERT_EQUAL(ESP_OK, err);

    // Do some work on other core (less work than this core did)
    temp = 5000;
    esp_ipc_call_blocking(xPortGetCoreID() == 0 ? 1 : 0, computation, &temp);

    // Stop timers from both cores
    int64_t t_1 = ccomp_timer_stop();
    TEST_ASSERT_GREATER_OR_EQUAL(0, t_1);

    int64_t t_2;
    esp_ipc_call_blocking(xPortGetCoreID() == 0 ? 1 : 0, stop_timer, &t_2);
    TEST_ASSERT_GREATER_OR_EQUAL(0, t_2);
Download .txt
gitextract_q3q76cb9/

├── .build-test-rules.yml
├── .codespellrc
├── .editorconfig
├── .git-blame-ignore-revs
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug-report.yml
│   │   ├── config.yml
│   │   ├── feature-request.yml
│   │   └── other-issue.yml
│   ├── PULL_REQUEST_TEMPLATE/
│   │   ├── new_component.md
│   │   └── update_component.md
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── build_docs.py
│   ├── clang-tidy/
│   │   └── test_app/
│   │       └── CMakeLists.txt
│   ├── consistency_check.py
│   ├── filter_sarif.py
│   ├── get_idf_build_apps_args.py
│   ├── get_pytest_args.py
│   ├── readme_workflows.md
│   ├── setup_qemu.sh
│   └── workflows/
│       ├── build_and_run_apps.yml
│       ├── clang-tidy.yml
│       ├── deploy_gh_pages.yml
│       ├── issue_comment.yml
│       ├── new_issues.yml
│       ├── new_prs.yml
│       ├── pre-commit.yml
│       ├── test_sbom.yml
│       ├── upload_component.yml
│       └── vulnerability_scan.yml
├── .gitignore
├── .gitmodules
├── .idf_build_apps.toml
├── .ignore_build_warnings.txt
├── .pre-commit-config.yaml
├── README.md
├── argtable3/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── idf_component.yml
│   ├── sbom_argtable3.yml
│   └── test_apps/
│       ├── argtable_unit_tests/
│       │   ├── CMakeLists.txt
│       │   ├── main/
│       │   │   ├── CMakeLists.txt
│       │   │   ├── idf_component.yml
│       │   │   ├── test_argtable3.c
│       │   │   └── test_main.c
│       │   ├── pytest_argtable3.py
│       │   └── sdkconfig.defaults
│       └── console_compat/
│           ├── CMakeLists.txt
│           ├── README.md
│           ├── check_argtable_path.py
│           └── main/
│               ├── CMakeLists.txt
│               ├── idf_component.yml
│               └── test_main.c
├── bdc_motor/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── bdc_motor.h
│   ├── interface/
│   │   └── bdc_motor_interface.h
│   ├── src/
│   │   ├── bdc_motor.c
│   │   └── bdc_motor_mcpwm_impl.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── bdc_motor_test.c
│           └── idf_component.yml
├── catch2/
│   ├── CMakeLists.txt
│   ├── LICENSE.txt
│   ├── README.md
│   ├── cmd_catch2.cpp
│   ├── examples/
│   │   ├── catch2-console/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   ├── test_cases.cpp
│   │   │   │   └── test_main.cpp
│   │   │   ├── pytest_catch2_console.py
│   │   │   └── sdkconfig.defaults
│   │   └── catch2-test/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   ├── test_cases.cpp
│   │       │   └── test_main.cpp
│   │       ├── pytest_catch2.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   └── cmd_catch2.h
│   └── sbom_catch2.yml
├── cbor/
│   ├── CMakeLists.txt
│   ├── examples/
│   │   └── cbor/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── cbor_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_cbor.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   └── port/
│       └── include/
│           └── unreachable_fix.h
├── ccomp_timer/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── ccomp_timer.c
│   ├── ccomp_timer_impl_riscv.c
│   ├── ccomp_timer_impl_xtensa.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── ccomp_timer.h
│   ├── private_include/
│   │   └── ccomp_timer_impl.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── ccomp_timer_test.c
│       │   ├── ccomp_timer_test_api.c
│       │   ├── ccomp_timer_test_data.c
│       │   ├── ccomp_timer_test_inst.c
│       │   └── idf_component.yml
│       ├── pytest_ccomp_timer.py
│       └── sdkconfig.defaults
├── cjson/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   └── sbom_cJSON.yml
├── coap/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── examples/
│   │   ├── coap_client/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── certs/
│   │   │   │   │   ├── coap_ca.pem
│   │   │   │   │   ├── coap_client.crt
│   │   │   │   │   └── coap_client.key
│   │   │   │   ├── coap_client_example_main.c
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── oscore/
│   │   │   │       └── coap_oscore.conf
│   │   │   ├── partitions.csv
│   │   │   ├── pytest_coap_client_example.py
│   │   │   ├── sdkconfig.ci
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32h2
│   │   └── coap_server/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── certs/
│   │       │   │   ├── coap_ca.pem
│   │       │   │   ├── coap_server.crt
│   │       │   │   └── coap_server.key
│   │       │   ├── coap_server_example_main.c
│   │       │   ├── idf_component.yml
│   │       │   └── oscore/
│   │       │       └── coap_oscore.conf
│   │       ├── partitions.csv
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32h2
│   ├── idf_component.yml
│   ├── port/
│   │   └── include/
│   │       ├── coap_config.h
│   │       └── coap_config_posix.h
│   ├── sbom_libcoap.yml
│   └── sdkconfig.rename
├── conftest.py
├── coremark/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── coremark_example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── coremark_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_coremark.py
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32
│   │       ├── sdkconfig.defaults.esp32s2
│   │       └── sdkconfig.defaults.esp32s3
│   ├── idf_component.yml
│   ├── linker.lf.in
│   └── port/
│       ├── core_portme.c
│       └── core_portme.h.in
├── dhara/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   └── sbom_dhara.yml
├── eigen/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── dummy.c
│   ├── examples/
│   │   └── svd/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── main.cpp
│   │       └── sdkconfig.defaults
│   └── idf_component.yml
├── esp_cli/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── host_test/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_esp_cli.c
│   │   │   └── test_main.c
│   │   ├── pytest_host_esp_cli.py
│   │   └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_cli.h
│   ├── sbom_esp_cli.yml
│   ├── src/
│   │   └── esp_cli.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_esp_cli.c
│       │   └── test_main.c
│       ├── pytest_esp_cli.py
│       └── sdkconfig.defaults
├── esp_cli_commands/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── command_set/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── command_set_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_command_set.py
│   │   ├── command_with_arg/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── command_with_arg_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_command_with_arg.py
│   │   ├── conftest.py
│   │   ├── dynamic_registration/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── dynamic_registration_main.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_dynamic_registration.py
│   │   ├── integration_with_argtable/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── integration_with_argtable_main.c
│   │   │   └── pytest_integration_with_argtable.py
│   │   ├── static_registration/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── static_registration_main.c
│   │   │   └── pytest_static_registration.py
│   │   └── utils/
│   │       └── command_utils.h
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_cli_commands.h
│   │   └── esp_cli_commands_utils.h
│   ├── linker.lf
│   ├── linux/
│   │   └── esp_cli_commands.ld
│   ├── private_include/
│   │   ├── esp_cli_commands_internal.h
│   │   └── esp_cli_dynamic_commands.h
│   ├── sbom_esp_cli_commands.yml
│   ├── src/
│   │   ├── esp_cli_commands.c
│   │   ├── esp_cli_commands_helpers.c
│   │   └── esp_cli_dynamic_commands.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── include/
│       │   │   └── test_esp_cli_commands_utils.h
│       │   ├── test_esp_cli_commands.c
│       │   └── test_main.c
│       ├── pytest_esp_cli_commands.py
│       └── sdkconfig.defaults
├── esp_daylight/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── esp_daylight_example_main.c
│   │       │   └── idf_component.yml
│   │       └── pytest_esp_daylight_example.py
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_daylight.h
│   ├── src/
│   │   └── esp_daylight.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_esp_daylight.c
│       ├── pytest_esp_daylight.py
│       └── sdkconfig.defaults
├── esp_delta_ota/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── https_delta_ota/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── ca_cert.pem
│   │       │   ├── idf_component.yml
│   │       │   ├── main.c
│   │       │   └── tests/
│   │       │       ├── certs/
│   │       │       │   ├── prvtkey.pem
│   │       │       │   └── servercert.pem
│   │       │       ├── test_local_server_ota.c
│   │       │       └── test_local_server_ota.h
│   │       ├── partitions.csv
│   │       ├── pytest_https_delta_ota.py
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.defaults
│   │       └── tools/
│   │           ├── esp_delta_ota_patch_gen.py
│   │           └── requirements.txt
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_delta_ota.h
│   ├── src/
│   │   └── esp_delta_ota.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── esp_delta_ota_test_main.c
│       │   ├── idf_component.yml
│       │   └── test_esp_delta_ota.c
│       ├── pytest_esp_delta_ota.py
│       └── sdkconfig.defaults
├── esp_encrypted_img/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── pre_encrypted_ota/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── ecc_key/
│   │       │   └── public.pem
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── idf_component.yml
│   │       │   ├── pre_encrypted_ota.c
│   │       │   └── tests/
│   │       │       ├── certs/
│   │       │       │   ├── prvtkey.pem
│   │       │       │   └── servercert.pem
│   │       │       ├── test_local_server_ota.c
│   │       │       └── test_local_server_ota.h
│   │       ├── partitions.csv
│   │       ├── pytest_pre_encrypted_ota.py
│   │       ├── rsa_key/
│   │       │   └── private.pem
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.ci.partial_download
│   │       ├── sdkconfig.defaults
│   │       └── server_certs/
│   │           └── ca_cert.pem
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_encrypted_img.h
│   ├── private_include/
│   │   ├── esp_encrypted_img_priv.h
│   │   └── esp_encrypted_img_utilities.h
│   ├── project_include.cmake
│   ├── src/
│   │   ├── esp_encrypted_img.c
│   │   └── esp_encrypted_img_utilities.c
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── certs/
│   │   │   │   └── test_rsa_private_key.pem
│   │   │   ├── esp_encrypted_img_test.c
│   │   │   ├── idf_component.yml
│   │   │   ├── test.c
│   │   │   ├── test_mocks.c
│   │   │   └── test_mocks.h
│   │   ├── partitions.csv
│   │   ├── pytest_esp_encrypted_img.py
│   │   ├── sdkconfig.ci.ds_peripheral
│   │   ├── sdkconfig.defaults
│   │   ├── sdkconfig.defaults.esp32
│   │   └── sdkconfig.defaults.esp32s3
│   └── tools/
│       └── esp_enc_img_gen.py
├── esp_ext_part_tables/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── basic/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── example_utils.c
│   │       │   ├── example_utils.h
│   │       │   ├── idf_component.yml
│   │       │   └── main.c
│   │       ├── pytest_esp_ext_part_tables_example_basic.py
│   │       └── sdkconfig.defaults.ci
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_ext_part_tables.h
│   │   ├── esp_mbr.h
│   │   └── esp_mbr_utils.h
│   ├── src/
│   │   ├── esp_ext_part_tables.c
│   │   ├── esp_mbr.c
│   │   └── esp_mbr_utils.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   └── test_esp_ext_part.c
│       ├── pytest_esp_ext_part_tables.py
│       └── sdkconfig.defaults
├── esp_flash_dispatcher/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── esp_flash_dispatcher.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_flash_dispatcher.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_esp_flash_dispatcher.c
│       ├── partitions.csv
│       ├── pytest_flash_dispatcher.py
│       └── sdkconfig.defaults
├── esp_gcov/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── esp_gcov.h
│   ├── gcov_rtio.c
│   ├── idf_component.yml
│   ├── project_include.cmake
│   └── sdkconfig.rename
├── esp_isotp/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── inc/
│   │   └── esp_isotp.h
│   └── src/
│       ├── esp_isotp.c
│       └── isotp_config.h
├── esp_jpeg/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── Kconfig.projbuild
│   │           ├── decode_image.c
│   │           ├── decode_image.h
│   │           ├── idf_component.yml
│   │           ├── lcd_tjpgd_example_main.c
│   │           ├── pretty_effect.c
│   │           └── pretty_effect.h
│   ├── idf_component.yml
│   ├── include/
│   │   └── jpeg_decoder.h
│   ├── jpeg_decoder.c
│   ├── jpeg_default_huffman_table.c
│   ├── license.txt
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── jpg_to_rgb888_hex.py
│   │   │   ├── test_logo_jpg.h
│   │   │   ├── test_logo_rgb888.h
│   │   │   ├── test_tjpgd_main.c
│   │   │   ├── test_usb_camera_2_jpg.h
│   │   │   ├── test_usb_camera_2_rgb888.h
│   │   │   ├── test_usb_camera_jpg.h
│   │   │   ├── test_usb_camera_rgb888.h
│   │   │   └── tjpgd_test.c
│   │   ├── pytest_esp_jpeg.py
│   │   ├── sdkconfig.ci
│   │   └── sdkconfig.defaults
│   └── tjpgd/
│       ├── tjpgd.c
│       ├── tjpgd.h
│       └── tjpgdcnf.h
├── esp_lcd_qemu_rgb/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── lcd_qemu_rgb_panel/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── Kconfig.projbuild
│   │           ├── idf_component.yml
│   │           ├── lcd_qemu_rgb_panel_main.c
│   │           └── lvgl_demo_ui.c
│   ├── idf_component.yml
│   ├── interface/
│   │   └── esp_lcd_qemu_rgb.h
│   └── src/
│       ├── esp_lcd_qemu_rgb.c
│       └── esp_lcd_qemu_rgb_struct.h
├── esp_linenoise/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── basic_line_reading/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── basic_line_reading.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_basic_line_reading.py
│   │   ├── completion/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── completion.c
│   │   │   │   └── idf_component.yml
│   │   │   └── pytest_completion.py
│   │   ├── history_usage/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── history_usage.c
│   │   │   │   └── idf_component.yml
│   │   │   ├── partitions.csv
│   │   │   ├── pytest_history_usage.py
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32
│   │   ├── multi_instance/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── multi_instance.c
│   │   │   └── pytest_multi_instance.py
│   │   └── utils/
│   │       ├── README.md
│   │       ├── common_io.c
│   │       └── common_io.h
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_linenoise.h
│   ├── linenoise/
│   │   ├── linenoise.c
│   │   └── linenoise.h
│   ├── private_include/
│   │   └── esp_linenoise_private.h
│   ├── sbom_esp_linenoise.yml
│   ├── src/
│   │   ├── esp_linenoise.c
│   │   └── esp_linenoise_internals.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── include/
│       │   │   └── test_utils.h
│       │   ├── test_esp_linenoise_behavioral.c
│       │   ├── test_esp_linenoise_get_set.c
│       │   ├── test_linenoise_legacy.c
│       │   ├── test_main.c
│       │   └── test_utils.c
│       ├── pytest_linenoise.py
│       └── sdkconfig.defaults
├── esp_schedule/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── esp_schedule_example_main.c
│   │       │   ├── esp_schedule_example_stub.c
│   │       │   ├── idf_component.yml
│   │       │   └── network/
│   │       │       ├── app_network.c
│   │       │       └── app_network.h
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32c2
│   ├── idf_component.yml
│   ├── include/
│   │   └── esp_schedule.h
│   └── src/
│       ├── esp_schedule.c
│       ├── esp_schedule_internal.h
│       └── esp_schedule_nvs.c
├── esp_serial_slave_link/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       ├── index.md
│   │       ├── sdio_slave_protocol.md
│   │       └── spi_slave_hd_protocol.md
│   ├── essl.c
│   ├── essl_internal.h
│   ├── essl_sdio.c
│   ├── essl_sdio_defs.c
│   ├── essl_spi.c
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_serial_slave_link/
│   │   │   ├── essl.h
│   │   │   ├── essl_sdio.h
│   │   │   ├── essl_sdio_defs.h
│   │   │   └── essl_spi.h
│   │   └── essl_spi/
│   │       ├── esp32c2_defs.h
│   │       ├── esp32c3_defs.h
│   │       ├── esp32s2_defs.h
│   │       └── esp32s3_defs.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── essl_test.c
│           └── idf_component.yml
├── esp_sysview/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── linker.lf.in
│   ├── sbom_segger.yml
│   ├── sdkconfig.rename
│   └── src/
│       ├── Config/
│       │   ├── Global.h
│       │   ├── SEGGER_RTT_Conf.h
│       │   └── SEGGER_SYSVIEW_Conf.h
│       ├── SEGGER/
│       │   ├── SEGGER.h
│       │   ├── SEGGER_RTT.h
│       │   ├── SEGGER_SYSVIEW.c
│       │   ├── SEGGER_SYSVIEW.h
│       │   ├── SEGGER_SYSVIEW_ConfDefaults.h
│       │   └── SEGGER_SYSVIEW_Int.h
│       ├── Sample/
│       │   └── FreeRTOSV10.4/
│       │       ├── Config/
│       │       │   └── esp/
│       │       │       └── SEGGER_SYSVIEW_Config_FreeRTOS.c
│       │       ├── SEGGER_SYSVIEW_FreeRTOS.c
│       │       └── SEGGER_SYSVIEW_FreeRTOS.h
│       ├── esp/
│       │   ├── SEGGER_RTT_esp.c
│       │   ├── SEGGER_SYSVIEW_esp.c
│       │   ├── adapter_encoder_sysview.c
│       │   └── adapter_encoder_sysview.h
│       ├── ext/
│       │   ├── heap_trace_module.c
│       │   ├── heap_trace_tohost.c
│       │   └── logging.c
│       └── include/
│           ├── esp_sysview_heap_trace_module.h
│           └── esp_trace_freertos_impl.h
├── expat/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── idf_component.yml
│   ├── port/
│   │   └── include/
│   │       └── expat_config.h
│   ├── sbom_libexpat.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_expat.c
│       │   └── test_main.c
│       ├── pytest_expat.py
│       └── sdkconfig.defaults
├── fmt/
│   ├── CMakeLists.txt
│   ├── README.md
│   ├── examples/
│   │   └── hello_fmt/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── hello_fmt.cpp
│   │       │   └── idf_component.yml
│   │       └── pytest_fmt.py
│   ├── idf_component.yml
│   └── sbom_fmt.yml
├── freetype/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── freetype-example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── freetype-example.c
│   │       │   └── idf_component.yml
│   │       ├── partitions.csv
│   │       ├── pytest_freetype.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   └── sbom_freetype.yml
├── iqmath/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── _IQNfunctions/
│   │   ├── _IQNasin_acos.c
│   │   ├── _IQNatan2.c
│   │   ├── _IQNdiv.c
│   │   ├── _IQNdiv.h
│   │   ├── _IQNexp.c
│   │   ├── _IQNfrac.c
│   │   ├── _IQNlog.c
│   │   ├── _IQNmpy.c
│   │   ├── _IQNmpy.h
│   │   ├── _IQNmpyIQX.c
│   │   ├── _IQNrepeat.c
│   │   ├── _IQNrmpy.c
│   │   ├── _IQNrsmpy.c
│   │   ├── _IQNsin_cos.c
│   │   ├── _IQNsqrt.c
│   │   ├── _IQNtables.c
│   │   ├── _IQNtables.h
│   │   ├── _IQNtoF.c
│   │   ├── _IQNtoa.c
│   │   ├── _IQNversion.c
│   │   └── _atoIQN.c
│   ├── examples/
│   │   └── get_started/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── iqmath_example_main.c
│   │       └── pytest_iqmath_example.py
│   ├── idf_component.yml
│   ├── include/
│   │   └── IQmathLib.h
│   ├── support/
│   │   ├── RTS_support.h
│   │   └── support.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   └── test_iqmath.c
│       ├── pytest_iqmath.py
│       └── sdkconfig.defaults
├── jsmn/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── jsmn.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── jsmn_test.c
├── json_generator/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── json_generator.h
│   ├── src/
│   │   └── json_generator.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── json_generator_test.c
├── json_parser/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── json_parser.h
│   ├── src/
│   │   └── json_parser.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_json_parser.c
│       │   └── test_main.c
│       ├── pytest_json_parser.py
│       └── sdkconfig.defaults
├── led_strip/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       └── index.md
│   ├── examples/
│   │   ├── led_strip_rmt_ws2812/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   └── main/
│   │   │       ├── CMakeLists.txt
│   │   │       ├── idf_component.yml
│   │   │       └── led_strip_rmt_ws2812_main.c
│   │   └── led_strip_spi_ws2812/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── idf_component.yml
│   │           └── led_strip_spi_ws2812_main.c
│   ├── idf_component.yml
│   ├── include/
│   │   ├── led_strip.h
│   │   ├── led_strip_rmt.h
│   │   ├── led_strip_spi.h
│   │   └── led_strip_types.h
│   ├── interface/
│   │   └── led_strip_interface.h
│   └── src/
│       ├── led_strip_api.c
│       ├── led_strip_rmt_dev.c
│       ├── led_strip_rmt_encoder.c
│       ├── led_strip_rmt_encoder.h
│       └── led_strip_spi_dev.c
├── libjpeg-turbo/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── dummy.c
│   ├── examples/
│   │   └── hello_jpeg/
│   │       ├── CMakeLists.txt
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── decode_image.c
│   │           ├── decode_image.h
│   │           ├── idf_component.yml
│   │           └── main.c
│   ├── idf_component.yml
│   └── sbom_libjpeg.yml
├── libpng/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── pnglibconf.h
│   ├── sbom_libpng.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── out.pgm
│       │   ├── test_libpng.c
│       │   └── test_main.c
│       ├── pytest_libpng.py
│       └── sdkconfig.defaults
├── libsodium/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   ├── port/
│   │   ├── crypto_hash_mbedtls/
│   │   │   ├── crypto_hash_sha256_mbedtls.c
│   │   │   └── crypto_hash_sha512_mbedtls.c
│   │   ├── randombytes_esp32.c
│   │   └── randombytes_internal.h
│   ├── port_include/
│   │   ├── sodium/
│   │   │   ├── crypto_hash_sha256.h
│   │   │   ├── crypto_hash_sha512.h
│   │   │   └── version.h
│   │   └── sodium.h
│   ├── sbom_libsodium.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_main.c
│       │   └── test_sodium.c
│       ├── partitions.csv
│       ├── pytest_libsodium.py
│       └── sdkconfig.defaults
├── network_provisioning/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── README.md
│   │   ├── thread_prov/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── app_main.c
│   │   │   │   ├── esp_ot_config.h
│   │   │   │   └── idf_component.yml
│   │   │   ├── partitions.csv
│   │   │   ├── sdkconfig.defaults
│   │   │   └── sdkconfig.defaults.esp32
│   │   └── wifi_prov/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── app_main.c
│   │       │   └── idf_component.yml
│   │       ├── partitions.csv
│   │       ├── sdkconfig.defaults
│   │       └── sdkconfig.defaults.esp32
│   ├── idf_component.yml
│   ├── include/
│   │   └── network_provisioning/
│   │       ├── manager.h
│   │       ├── network_config.h
│   │       ├── network_scan.h
│   │       ├── scheme_ble.h
│   │       ├── scheme_console.h
│   │       └── scheme_softap.h
│   ├── proto/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── makefile
│   │   ├── network_config.proto
│   │   ├── network_constants.proto
│   │   ├── network_ctrl.proto
│   │   └── network_scan.proto
│   ├── proto-c/
│   │   ├── network_config.pb-c.c
│   │   ├── network_config.pb-c.h
│   │   ├── network_constants.pb-c.c
│   │   ├── network_constants.pb-c.h
│   │   ├── network_ctrl.pb-c.c
│   │   ├── network_ctrl.pb-c.h
│   │   ├── network_scan.pb-c.c
│   │   └── network_scan.pb-c.h
│   ├── python/
│   │   ├── network_config_pb2.py
│   │   ├── network_constants_pb2.py
│   │   ├── network_ctrl_pb2.py
│   │   └── network_scan_pb2.py
│   ├── src/
│   │   ├── handlers.c
│   │   ├── manager.c
│   │   ├── network_config.c
│   │   ├── network_ctrl.c
│   │   ├── network_ctrl.h
│   │   ├── network_provisioning_priv.h
│   │   ├── network_scan.c
│   │   ├── scheme_ble.c
│   │   ├── scheme_console.c
│   │   └── scheme_softap.c
│   └── tool/
│       └── esp_prov/
│           ├── README.md
│           ├── __init__.py
│           ├── esp_prov.py
│           ├── proto/
│           │   └── __init__.py
│           ├── prov/
│           │   ├── __init__.py
│           │   ├── custom_prov.py
│           │   ├── network_ctrl.py
│           │   ├── network_prov.py
│           │   └── network_scan.py
│           ├── security/
│           │   ├── __init__.py
│           │   ├── security.py
│           │   ├── security0.py
│           │   ├── security1.py
│           │   ├── security2.py
│           │   └── srp6a.py
│           ├── transport/
│           │   ├── __init__.py
│           │   ├── ble_cli.py
│           │   ├── transport.py
│           │   ├── transport_ble.py
│           │   ├── transport_console.py
│           │   └── transport_http.py
│           └── utils/
│               ├── __init__.py
│               └── convenience.py
├── nghttp/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── idf_component.yml
│   ├── port/
│   │   ├── include/
│   │   │   └── nghttp2/
│   │   │       └── nghttp2ver.h
│   │   └── private_include/
│   │       ├── config.h
│   │       └── esp_nghttp2_session.h
│   └── sbom_nghttp2.yml
├── onewire_bus/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       └── index.md
│   ├── idf_component.yml
│   ├── include/
│   │   ├── onewire_bus.h
│   │   ├── onewire_bus_impl_rmt.h
│   │   ├── onewire_bus_impl_uart.h
│   │   ├── onewire_cmd.h
│   │   ├── onewire_crc.h
│   │   ├── onewire_device.h
│   │   └── onewire_types.h
│   ├── interface/
│   │   └── onewire_bus_interface.h
│   ├── src/
│   │   ├── onewire_bus_api.c
│   │   ├── onewire_bus_impl_rmt.c
│   │   ├── onewire_bus_impl_uart.c
│   │   ├── onewire_crc.c
│   │   └── onewire_device.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── Kconfig.projbuild
│       │   ├── idf_component.yml
│       │   └── onewire_bus_test.c
│       ├── pytest_onewire_bus.py
│       ├── sdkconfig.ci.rmt
│       └── sdkconfig.ci.uart
├── pcap/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── pcap.h
│   ├── src/
│   │   └── pcap.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── pcap_test.c
├── pid_ctrl/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   ├── include/
│   │   └── pid_ctrl.h
│   ├── src/
│   │   └── pid_ctrl.c
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── pid_ctrl_test.c
├── pytest.ini
├── qrcode/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── esp_qrcode_main.c
│   ├── esp_qrcode_wrapper.c
│   ├── idf_component.yml
│   ├── include/
│   │   └── qrcode.h
│   ├── qrcodegen.c
│   ├── qrcodegen.h
│   └── test_apps/
│       ├── CMakeLists.txt
│       └── main/
│           ├── CMakeLists.txt
│           ├── idf_component.yml
│           └── qrcode_test.c
├── quirc/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── idf_component.yml
│   └── test_apps/
│       ├── CMakeLists.txt
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_main.c
│       │   ├── test_qrcode.pgm
│       │   └── test_quirc.c
│       ├── pytest_quirc.py
│       └── sdkconfig.defaults
├── sh2lib/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── http2_request/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── http2_request_example_main.c
│   │       │   └── idf_component.yml
│   │       ├── pytest_http2_request.py
│   │       ├── sdkconfig.ci
│   │       ├── sdkconfig.ci.esp32
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── sh2lib.c
│   └── sh2lib.h
├── spi_nand_flash/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── VERSIONING.md
│   ├── host_test/
│   │   ├── CMakeLists.txt
│   │   ├── README.md
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_app_main.cpp
│   │   │   ├── test_nand_flash.cpp
│   │   │   ├── test_nand_flash_bdl.cpp
│   │   │   └── test_nand_flash_ftl.cpp
│   │   ├── pytest_nand_flash_linux.py
│   │   └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_nand_blockdev.h
│   │   ├── nand_device_types.h
│   │   ├── nand_diag_api.h
│   │   ├── nand_linux_mmap_emul.h
│   │   ├── nand_private/
│   │   │   └── nand_impl_wrap.h
│   │   ├── spi_nand_flash.h
│   │   └── spi_nand_flash_test_helpers.h
│   ├── layered_architecture.md
│   ├── priv_include/
│   │   ├── nand.h
│   │   ├── nand_flash_devices.h
│   │   ├── nand_impl.h
│   │   └── spi_nand_oper.h
│   ├── src/
│   │   ├── devices/
│   │   │   ├── nand_alliance.c
│   │   │   ├── nand_gigadevice.c
│   │   │   ├── nand_micron.c
│   │   │   ├── nand_winbond.c
│   │   │   ├── nand_xtx.c
│   │   │   └── nand_zetta.c
│   │   ├── dhara_glue.c
│   │   ├── nand.c
│   │   ├── nand_diag_api.c
│   │   ├── nand_flash_blockdev.c
│   │   ├── nand_impl.c
│   │   ├── nand_impl_linux.c
│   │   ├── nand_impl_wrap.c
│   │   ├── nand_linux_mmap_emul.c
│   │   ├── nand_wl_blockdev.c
│   │   ├── spi_nand_flash_test_helpers.c
│   │   └── spi_nand_oper.c
│   └── test_app/
│       ├── CMakeLists.txt
│       ├── README.md
│       ├── main/
│       │   ├── CMakeLists.txt
│       │   ├── idf_component.yml
│       │   ├── test_app_main.c
│       │   ├── test_spi_nand_flash.c
│       │   └── test_spi_nand_flash_bdl.c
│       ├── pytest_spi_nand_flash.py
│       ├── sdkconfig.ci.bdl
│       ├── sdkconfig.ci.default
│       └── sdkconfig.defaults
├── spi_nand_flash_fatfs/
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   ├── nand_flash/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── spi_nand_flash_example_main.c
│   │   │   ├── pytest_nand_flash_example.py
│   │   │   └── sdkconfig.ci
│   │   └── nand_flash_debug_app/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── spi_nand_flash_debug_app_main.c
│   │       ├── pytest_nand_flash_debug_example.py
│   │       └── sdkconfig.defaults
│   ├── idf_component.yml
│   ├── include/
│   │   ├── diskio_nand.h
│   │   └── esp_vfs_fat_nand.h
│   └── src/
│       ├── diskio_nand.c
│       └── vfs_fat_spinandflash.c
├── supertinycron/
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE.txt
│   ├── README.md
│   ├── examples/
│   │   └── cron_example/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       └── main/
│   │           ├── CMakeLists.txt
│   │           ├── cron_example_main.c
│   │           └── idf_component.yml
│   ├── idf_component.yml
│   └── sbom_supertinycron.yml
├── thorvg/
│   ├── .build-test-rules.yml
│   ├── CMakeLists.txt
│   ├── Kconfig
│   ├── LICENSE
│   ├── README.md
│   ├── cross_file.txt.in
│   ├── dummy.c
│   ├── examples/
│   │   └── thorvg_lottie/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── lottie_files/
│   │       │   └── emoji-animation.json
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── idf_component.yml
│   │       │   └── thorvg_example_main.c
│   │       ├── partitions.csv
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32p4
│   │       └── sdkconfig.defaults.esp32s3
│   ├── idf_component.yml
│   ├── project_include.cmake
│   └── sbom_thorvg.yml
├── touch_element/
│   ├── .build-test-rules.yml
│   ├── CHANGELOG.md
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── docs/
│   │   ├── Doxyfile
│   │   ├── book.toml
│   │   └── src/
│   │       ├── SUMMARY.md
│   │       ├── api.md
│   │       ├── img/
│   │       │   └── source/
│   │       │       ├── te_architecture.drawio
│   │       │       ├── te_button.odg
│   │       │       ├── te_component.odg
│   │       │       ├── te_matrix.odg
│   │       │       ├── te_slider.odg
│   │       │       └── te_threshold.odg
│   │       └── index.md
│   ├── examples/
│   │   ├── touch_button/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_button_example_main.c
│   │   │   └── pytest_touch_button.py
│   │   ├── touch_element_waterproof/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── waterproof_example_main.c
│   │   │   └── pytest_touch_element_waterproof.py
│   │   ├── touch_elements_combination/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_elements_example_main.c
│   │   │   └── pytest_touch_elements_combination.py
│   │   ├── touch_matrix/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── README.md
│   │   │   ├── main/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── Kconfig.projbuild
│   │   │   │   ├── idf_component.yml
│   │   │   │   └── touch_matrix_example_main.c
│   │   │   └── pytest_touch_matrix.py
│   │   └── touch_slider/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── Kconfig.projbuild
│   │       │   ├── idf_component.yml
│   │       │   └── touch_slider_example_main.c
│   │       └── pytest_touch_slider.py
│   ├── idf_component.yml
│   ├── include/
│   │   ├── esp_private/
│   │   │   ├── touch_element_private.h
│   │   │   ├── touch_sensor_legacy_hal.h
│   │   │   └── touch_sensor_legacy_ll.h
│   │   └── touch_element/
│   │       ├── touch_button.h
│   │       ├── touch_element.h
│   │       ├── touch_matrix.h
│   │       ├── touch_sensor_legacy_types.h
│   │       └── touch_slider.h
│   ├── test_apps/
│   │   ├── CMakeLists.txt
│   │   ├── main/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── idf_component.yml
│   │   │   ├── test_app_main.c
│   │   │   ├── test_touch_button.c
│   │   │   ├── test_touch_element.c
│   │   │   ├── test_touch_matrix.c
│   │   │   └── test_touch_slider.c
│   │   ├── pytest_touch_element.py
│   │   └── sdkconfig.defaults
│   ├── touch_button.c
│   ├── touch_element.c
│   ├── touch_matrix.c
│   ├── touch_sensor_legacy_hal.c
│   └── touch_slider.c
├── unit-test-app/
│   ├── CMakeLists.txt
│   ├── LICENSE
│   ├── README.md
│   ├── examples/
│   │   └── unit-test-app/
│   │       ├── CMakeLists.txt
│   │       ├── README.md
│   │       ├── configs/
│   │       │   └── .gitkeep
│   │       ├── idf_ext.py
│   │       ├── main/
│   │       │   ├── CMakeLists.txt
│   │       │   └── app_main.c
│   │       ├── partition_table_unit_test_app.csv
│   │       ├── partition_table_unit_test_app_2m.csv
│   │       ├── partition_table_unit_test_two_ota.csv
│   │       ├── partition_table_unit_test_two_ota_2m.csv
│   │       ├── sdkconfig.defaults
│   │       ├── sdkconfig.defaults.esp32
│   │       ├── sdkconfig.defaults.esp32c2
│   │       ├── sdkconfig.defaults.esp32c3
│   │       ├── sdkconfig.defaults.esp32s2
│   │       ├── sdkconfig.defaults.esp32s3
│   │       └── tools/
│   │           ├── CreateSectionTable.py
│   │           └── ElfUnitTestParser.py
│   └── idf_component.yml
└── zlib/
    ├── .build-test-rules.yml
    ├── CMakeLists.txt
    ├── LICENSE
    ├── README.md
    ├── idf_component.yml
    ├── sbom_zlib.yml
    └── test_apps/
        ├── CMakeLists.txt
        └── main/
            ├── CMakeLists.txt
            ├── idf_component.yml
            └── zlib_test.c
Download .txt
Showing preview only (328K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3533 symbols across 385 files)

FILE: .github/build_docs.py
  class BuildConfig (line 31) | class BuildConfig:
  function change_directory (line 40) | def change_directory(path: Union[str, pathlib.Path]):
  function find_components_with_docs (line 50) | def find_components_with_docs(repo_root: pathlib.Path) -> List[str]:
  function generate_api_docs (line 76) | def generate_api_docs(component_docs_path: pathlib.Path) -> bool:
  function build_component_docs (line 112) | def build_component_docs(component_name: str, config: BuildConfig) -> bool:
  function copy_docs_to_output (line 166) | def copy_docs_to_output(component_name: str, config: BuildConfig) -> bool:
  function build_all_docs (line 197) | def build_all_docs(config: BuildConfig) -> bool:
  function parse_args (line 237) | def parse_args() -> argparse.Namespace:
  function main (line 268) | def main():

FILE: .github/consistency_check.py
  function main (line 16) | def main():
  function check_build_manifests_added_to_config (line 34) | def check_build_manifests_added_to_config(args):
  function check_components_added_to_upload_job (line 50) | def check_components_added_to_upload_job(args):
  function check_components_added_to_issue_template (line 66) | def check_components_added_to_issue_template(args):
  function load_toml (line 86) | def load_toml(filepath) -> dict:
  function load_yaml (line 104) | def load_yaml(filepath) -> dict:
  function get_component_dirs (line 109) | def get_component_dirs(args):
  function add_failure (line 117) | def add_failure():

FILE: .github/filter_sarif.py
  function main (line 9) | def main():
  function process (line 21) | def process(in_file: t.TextIO, out_file: t.TextIO, include_prefix_list: ...
  function normalize_uri_optional (line 37) | def normalize_uri_optional(uri: t.Optional[str], include_prefix_list: t....
  function message_contains_any (line 46) | def message_contains_any(text: str, substrings: t.List[str]) -> bool:
  function dedupe_related_locations (line 50) | def dedupe_related_locations(related_locations: t.Any, include_prefix_li...
  function transform_result (line 73) | def transform_result(result: t.Dict[str, t.Any], include_prefix_list: t....

FILE: .github/get_idf_build_apps_args.py
  function main (line 6) | def main():

FILE: .github/get_pytest_args.py
  function main (line 8) | def main():

FILE: argtable3/test_apps/argtable_unit_tests/main/test_argtable3.c
  type arg_int (line 109) | struct arg_int
  type arg_end (line 110) | struct arg_end
  type arg_dbl (line 124) | struct arg_dbl
  type arg_end (line 125) | struct arg_end
  type arg_lit (line 139) | struct arg_lit
  type arg_end (line 140) | struct arg_end
  type arg_str (line 154) | struct arg_str
  type arg_end (line 155) | struct arg_end
  type arg_file (line 169) | struct arg_file
  type arg_end (line 170) | struct arg_end
  type arg_rex (line 184) | struct arg_rex
  type arg_end (line 185) | struct arg_end
  type arg_date (line 199) | struct arg_date
  type arg_end (line 200) | struct arg_end
  type arg_lit (line 216) | struct arg_lit
  type arg_str (line 217) | struct arg_str
  type arg_end (line 218) | struct arg_end
  type arg_int (line 244) | struct arg_int
  type arg_end (line 245) | struct arg_end
  type arg_int (line 277) | struct arg_int
  type arg_end (line 278) | struct arg_end
  type arg_int (line 299) | struct arg_int
  type arg_end (line 300) | struct arg_end
  type arg_int (line 316) | struct arg_int
  type arg_str (line 317) | struct arg_str
  type arg_end (line 318) | struct arg_end

FILE: argtable3/test_apps/argtable_unit_tests/main/test_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: argtable3/test_apps/argtable_unit_tests/pytest_argtable3.py
  function test_argtable3 (line 6) | def test_argtable3(dut: Dut) -> None:

FILE: argtable3/test_apps/console_compat/check_argtable_path.py
  function main (line 8) | def main():

FILE: argtable3/test_apps/console_compat/main/test_main.c
  function app_main (line 3) | void app_main(void)

FILE: bdc_motor/include/bdc_motor.h
  type bdc_motor_t (line 18) | struct bdc_motor_t
  type bdc_motor_config_t (line 115) | typedef struct {
  type bdc_motor_mcpwm_config_t (line 124) | typedef struct {

FILE: bdc_motor/interface/bdc_motor_interface.h
  type bdc_motor_t (line 15) | typedef struct bdc_motor_t bdc_motor_t;
  type bdc_motor_t (line 20) | struct bdc_motor_t {

FILE: bdc_motor/src/bdc_motor.c
  function esp_err_t (line 16) | esp_err_t bdc_motor_enable(bdc_motor_handle_t motor)
  function esp_err_t (line 22) | esp_err_t bdc_motor_disable(bdc_motor_handle_t motor)
  function esp_err_t (line 28) | esp_err_t bdc_motor_set_speed(bdc_motor_handle_t motor, uint32_t speed)
  function esp_err_t (line 34) | esp_err_t bdc_motor_forward(bdc_motor_handle_t motor)
  function esp_err_t (line 40) | esp_err_t bdc_motor_reverse(bdc_motor_handle_t motor)
  function esp_err_t (line 46) | esp_err_t bdc_motor_coast(bdc_motor_handle_t motor)
  function esp_err_t (line 52) | esp_err_t bdc_motor_brake(bdc_motor_handle_t motor)
  function esp_err_t (line 58) | esp_err_t bdc_motor_del(bdc_motor_handle_t motor)

FILE: bdc_motor/src/bdc_motor_mcpwm_impl.c
  type bdc_motor_mcpwm_obj (line 17) | typedef struct {
  function esp_err_t (line 27) | static esp_err_t bdc_motor_mcpwm_set_speed(bdc_motor_t *motor, uint32_t ...
  function esp_err_t (line 35) | static esp_err_t bdc_motor_mcpwm_enable(bdc_motor_t *motor)
  function esp_err_t (line 43) | static esp_err_t bdc_motor_mcpwm_disable(bdc_motor_t *motor)
  function esp_err_t (line 51) | static esp_err_t bdc_motor_mcpwm_forward(bdc_motor_t *motor)
  function esp_err_t (line 59) | static esp_err_t bdc_motor_mcpwm_reverse(bdc_motor_t *motor)
  function esp_err_t (line 67) | static esp_err_t bdc_motor_mcpwm_coast(bdc_motor_t *motor)
  function esp_err_t (line 75) | static esp_err_t bdc_motor_mcpwm_brake(bdc_motor_t *motor)
  function esp_err_t (line 83) | static esp_err_t bdc_motor_mcpwm_del(bdc_motor_t *motor)
  function esp_err_t (line 96) | esp_err_t bdc_motor_new_mcpwm_device(const bdc_motor_config_t *motor_con...

FILE: bdc_motor/test_apps/main/bdc_motor_test.c
  function app_main (line 3) | void app_main(void)

FILE: catch2/cmd_catch2.cpp
  function cmd_catch2 (line 14) | static int cmd_catch2(int argc, char **argv)
  function esp_err_t (line 22) | esp_err_t register_catch2(const char *cmd_name)
  function esp_err_t (line 34) | esp_err_t register_catch2(const char *cmd_name)

FILE: catch2/examples/catch2-console/main/test_main.cpp
  function app_main (line 17) | void app_main(void)

FILE: catch2/examples/catch2-console/pytest_catch2_console.py
  function test_catch2_console_example (line 9) | def test_catch2_console_example(dut: Dut) -> None:

FILE: catch2/examples/catch2-test/main/test_main.cpp
  function app_main (line 9) | void app_main(void)

FILE: catch2/examples/catch2-test/pytest_catch2.py
  function test_catch2_example (line 9) | def test_catch2_example(dut: Dut) -> None:

FILE: cbor/examples/cbor/main/cbor_example_main.c
  function indent (line 33) | static void indent(int nestingLevel)
  function dumpbytes (line 40) | static void dumpbytes(const uint8_t *buf, size_t len)
  function CborError (line 50) | static CborError example_dump_cbor_buffer(CborValue *it, int nestingLevel)
  function app_main (line 176) | void app_main(void)

FILE: cbor/examples/cbor/pytest_cbor.py
  function test_examples_cbor (line 12) | def test_examples_cbor(dut: Dut) -> None:

FILE: ccomp_timer/ccomp_timer.c
  function esp_err_t (line 19) | esp_err_t ccomp_timer_start(void)
  function ccomp_timer_stop (line 53) | int64_t IRAM_ATTR ccomp_timer_stop(void)
  function ccomp_timer_get_time (line 83) | int64_t IRAM_ATTR ccomp_timer_get_time(void)

FILE: ccomp_timer/ccomp_timer_impl_riscv.c
  type ccomp_timer_state_t (line 15) | typedef enum {
  type ccomp_timer_status_t (line 21) | typedef struct {
  function update_ccount (line 32) | static void IRAM_ATTR update_ccount(void)
  function esp_err_t (line 46) | esp_err_t ccomp_timer_impl_init(void)
  function esp_err_t (line 52) | esp_err_t ccomp_timer_impl_deinit(void)
  function esp_err_t (line 58) | esp_err_t ccomp_timer_impl_start(void)
  function esp_err_t (line 67) | esp_err_t IRAM_ATTR ccomp_timer_impl_stop(void)
  function ccomp_timer_impl_get_time (line 75) | int64_t IRAM_ATTR ccomp_timer_impl_get_time(void)
  function esp_err_t (line 82) | esp_err_t ccomp_timer_impl_reset(void)
  function ccomp_timer_impl_is_init (line 89) | bool ccomp_timer_impl_is_init(void)
  function ccomp_timer_impl_is_active (line 94) | bool IRAM_ATTR ccomp_timer_impl_is_active(void)
  function ccomp_timer_impl_lock (line 99) | void IRAM_ATTR ccomp_timer_impl_lock(void)
  function ccomp_timer_impl_unlock (line 104) | void IRAM_ATTR ccomp_timer_impl_unlock(void)

FILE: ccomp_timer/ccomp_timer_impl_xtensa.c
  type ccomp_timer_state_t (line 26) | typedef enum {
  type ccomp_timer_status_t (line 32) | typedef struct {
  function update_ccount (line 65) | static void IRAM_ATTR update_ccount(void)
  function update_overflow (line 79) | static void inline update_overflow(int id, int *cnt)
  function perf_counter_overflow_handler (line 90) | static void IRAM_ATTR perf_counter_overflow_handler(void *args)
  function set_perfmon_interrupt (line 96) | static void set_perfmon_interrupt(bool enable)
  function esp_err_t (line 114) | esp_err_t ccomp_timer_impl_init(void)
  function esp_err_t (line 136) | esp_err_t ccomp_timer_impl_deinit(void)
  function esp_err_t (line 151) | esp_err_t ccomp_timer_impl_start(void)
  function esp_err_t (line 161) | esp_err_t IRAM_ATTR ccomp_timer_impl_stop(void)
  function ccomp_timer_impl_get_time (line 170) | int64_t IRAM_ATTR ccomp_timer_impl_get_time(void)
  function esp_err_t (line 182) | esp_err_t ccomp_timer_impl_reset(void)
  function ccomp_timer_impl_is_init (line 193) | bool ccomp_timer_impl_is_init(void)
  function ccomp_timer_impl_is_active (line 198) | bool IRAM_ATTR ccomp_timer_impl_is_active(void)
  function ccomp_timer_impl_lock (line 203) | void IRAM_ATTR ccomp_timer_impl_lock(void)
  function ccomp_timer_impl_unlock (line 208) | void IRAM_ATTR ccomp_timer_impl_unlock(void)

FILE: ccomp_timer/test_apps/main/ccomp_timer_test.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: ccomp_timer/test_apps/main/ccomp_timer_test_api.c
  function start_timer (line 23) | static void start_timer(void *param)
  function stop_timer (line 29) | static void stop_timer(void *param)
  function computation (line 36) | static void computation(void *param)

FILE: ccomp_timer/test_apps/main/ccomp_timer_test_data.c
  type ccomp_test_access_t (line 40) | typedef struct {
  type ccomp_test_time_t (line 45) | typedef struct {
  function IRAM_ATTR (line 63) | static IRAM_ATTR void perform_accesses(ccomp_test_access_t *access)
  function prepare_cache (line 71) | static void prepare_cache(const uint8_t *to_cache)
  function prepare_access_pattern (line 79) | static void prepare_access_pattern(int hit_rate, const uint8_t *cached, ...
  function ccomp_test_time_t (line 118) | static ccomp_test_time_t perform_test_at_hit_rate(int hit_rate, const ui...
  function ccomp_test_time_t (line 138) | static ccomp_test_time_t ccomp_test_ref_time(void)

FILE: ccomp_timer/test_apps/main/ccomp_timer_test_inst.c
  type ccomp_test_time_t (line 40) | typedef struct {
  type ccomp_test_call_t (line 45) | typedef struct {
  function test_func1 (line 57) | static void test_func1(void)
  function test_func2 (line 62) | static void test_func2(void)
  function test_func3 (line 67) | static void test_func3(void)
  function test_func4 (line 73) | static void test_func4(void)
  function test_func5 (line 78) | static void test_func5(void)
  function test_func6 (line 83) | static void test_func6(void)
  function test_func7 (line 88) | static void test_func7(void)
  function test_func8 (line 93) | static void test_func8(void)
  function test_func9 (line 98) | static void test_func9(void)
  function iram_func (line 104) | static void IRAM_ATTR iram_func(void)
  function perform_calls (line 109) | static void IRAM_ATTR perform_calls(ccomp_test_call_t *call)
  function prepare_cache (line 116) | static void IRAM_ATTR prepare_cache(ccomp_test_call_t *call)
  function prepare_calls (line 121) | static void IRAM_ATTR prepare_calls(int hit_rate, ccomp_test_func_t *alt...
  function ccomp_test_time_t (line 159) | static ccomp_test_time_t IRAM_ATTR perform_test_at_hit_rate(int hit_rate)
  function ccomp_test_time_t (line 195) | static ccomp_test_time_t ccomp_test_ref_time(void)

FILE: ccomp_timer/test_apps/pytest_ccomp_timer.py
  function test_ccomp_timer (line 5) | def test_ccomp_timer(dut) -> None:

FILE: coap/examples/coap_client/main/coap_client_example_main.c
  function coap_response_t (line 111) | static coap_response_t
  function verify_cn_callback (line 148) | static int
  function coap_log_handler (line 164) | static void
  function coap_session_t (line 181) | static coap_session_t *
  function coap_session_t (line 213) | static coap_session_t *
  function coap_session_t (line 275) | static coap_session_t *
  function coap_example_client (line 304) | static void coap_example_client(void *p)
  function app_main (line 489) | void app_main(void)

FILE: coap/examples/coap_client/pytest_coap_client_example.py
  function test_coap_example (line 9) | def test_coap_example(dut: Dut) -> None:

FILE: coap/examples/coap_server/main/coap_server_example_main.c
  function hnd_espressif_get (line 99) | static void
  function hnd_espressif_put (line 114) | static void
  function hnd_espressif_delete (line 146) | static void
  function hnd_oscore_get (line 160) | static void
  function verify_cn_callback (line 178) | static int
  function coap_log_handler (line 194) | static void
  function coap_example_server (line 210) | static void coap_example_server(void *p)
  function app_main (line 433) | void app_main(void)

FILE: coap/port/include/coap_config.h
  type sockaddr_in (line 57) | struct sockaddr_in {
  type sockaddr_in6 (line 68) | struct sockaddr_in6 {

FILE: coap/port/include/coap_config_posix.h
  type in6_pktinfo (line 40) | struct in6_pktinfo {

FILE: conftest.py
  function pytest_ignore_collect (line 9) | def pytest_ignore_collect(collection_path, config):
  function config (line 25) | def config(request: FixtureRequest) -> str:
  function build_dir (line 38) | def build_dir(

FILE: coremark/examples/coremark_example/main/coremark_example_main.c
  function app_main (line 29) | void app_main(void)

FILE: coremark/examples/coremark_example/pytest_coremark.py
  function test_coremark (line 5) | def test_coremark(dut):

FILE: coremark/port/core_portme.c
  function start_time (line 61) | void start_time(void)
  function stop_time (line 71) | void stop_time(void)
  function CORE_TICKS (line 84) | CORE_TICKS get_time(void)
  function secs_ret (line 95) | secs_ret time_in_secs(CORE_TICKS ticks)
  function portable_init (line 107) | void portable_init(core_portable *p, int *argc, char *argv[])
  function portable_fini (line 120) | void portable_fini(core_portable *p)

FILE: eigen/examples/svd/main/main.cpp
  function multiply2Matrices (line 13) | static void multiply2Matrices()
  function runSVD (line 27) | static void runSVD()
  function app_main (line 40) | void app_main(void)

FILE: esp_cli/host_test/main/test_esp_cli.c
  function get_millis (line 21) | inline __attribute__((always_inline))
  function wait_ms (line 29) | inline __attribute__((always_inline))
  function test_on_enter (line 41) | void test_on_enter(void *ctx, esp_cli_handle_t handle)
  function esp_err_t (line 47) | esp_err_t test_pre_executor(void *ctx, const char *buf, esp_err_t reader...
  function esp_err_t (line 53) | esp_err_t test_post_executor(void *ctx, const char *buf, esp_err_t execu...
  function test_on_stop (line 59) | void test_on_stop(void *ctx, esp_cli_handle_t handle)
  function test_on_exit (line 65) | void test_on_exit(void *ctx, esp_cli_handle_t handle)
  type task_args_t (line 75) | typedef struct task_args {
  function esp_cli_task (line 81) | static void esp_cli_task(void *args)
  function test_socket_setup (line 100) | static void test_socket_setup(int socket_fd[2])
  function test_socket_teardown (line 114) | static void test_socket_teardown(int socket_fd[2])
  function test_send_characters (line 120) | static void test_send_characters(int socket_fd, const char *msg)
  function esp_cli_teardown (line 129) | static void esp_cli_teardown(SemaphoreHandle_t *start_sem, SemaphoreHand...
  function esp_cli_setup (line 152) | static void esp_cli_setup(SemaphoreHandle_t *start_sem, SemaphoreHandle_...

FILE: esp_cli/host_test/main/test_main.c
  function setUp (line 12) | void setUp(void)
  function tearDown (line 17) | void tearDown(void)
  function app_main (line 22) | void app_main(void)

FILE: esp_cli/host_test/pytest_host_esp_cli.py
  function host_test_esp_cli (line 15) | def host_test_esp_cli(dut) -> None:

FILE: esp_cli/include/esp_cli.h
  type esp_cli_instance (line 20) | struct esp_cli_instance
  type esp_cli_on_enter_t (line 33) | typedef struct esp_cli_on_enter {
  type esp_err_t (line 47) | typedef esp_err_t (*esp_cli_pre_executor_fn)(void *ctx, const char *buf,...
  type esp_cli_pre_executor_t (line 52) | typedef struct esp_cli_pre_executor {
  type esp_err_t (line 67) | typedef esp_err_t (*esp_cli_post_executor_fn)(void *ctx, const char *buf...
  type esp_cli_post_executor_t (line 72) | typedef struct esp_cli_post_executor {
  type esp_cli_on_stop_t (line 91) | typedef struct esp_cli_on_stop {
  type esp_cli_on_exit_t (line 107) | typedef struct esp_cli_on_exit {
  type esp_cli_config_t (line 115) | typedef struct esp_cli_config {

FILE: esp_cli/src/esp_cli.c
  type esp_cli_state_e (line 16) | typedef enum {
  type esp_cli_state_t (line 21) | typedef struct esp_cli_state {
  type esp_cli_instance_t (line 27) | typedef struct esp_cli_instance {
  function esp_cli_quit_cmd (line 42) | static int esp_cli_quit_cmd(void *context, esp_cli_commands_exec_arg_t *...
  function esp_err_t (line 63) | esp_err_t esp_cli_create(const esp_cli_config_t *config, esp_cli_handle_...
  function esp_err_t (line 95) | esp_err_t esp_cli_destroy(esp_cli_handle_t handle)
  function esp_err_t (line 112) | esp_err_t esp_cli_start(esp_cli_handle_t handle)
  function esp_err_t (line 126) | esp_err_t esp_cli_stop(esp_cli_handle_t handle)
  function esp_cli (line 178) | void esp_cli(esp_cli_handle_t handle)

FILE: esp_cli/test_apps/main/test_esp_cli.c
  function test_on_enter (line 36) | void test_on_enter(void *ctx, esp_cli_handle_t handle)
  function esp_err_t (line 42) | esp_err_t test_pre_executor(void *ctx, const char *buf, esp_err_t reader...
  function esp_err_t (line 48) | esp_err_t test_post_executor(void *ctx, const char *buf, esp_err_t execu...
  function test_on_stop (line 54) | void test_on_stop(void *ctx, esp_cli_handle_t handle)
  function test_on_exit (line 60) | void test_on_exit(void *ctx, esp_cli_handle_t handle)
  type task_args_t (line 70) | typedef struct task_args {
  function esp_cli_task (line 76) | static void esp_cli_task(void *args)
  function test_uart_install (line 93) | static void test_uart_install(int *in_fd, int *out_fd)
  function test_uart_uninstall (line 141) | static void test_uart_uninstall(const int fd)
  function test_usj_install (line 155) | static void test_usj_install(int *in_fd, int *out_fd)
  function test_usj_uninstall (line 176) | static void test_usj_uninstall(const int fd)
  function test_esp_cli_teardown (line 189) | static void test_esp_cli_teardown(SemaphoreHandle_t *start_sem, Semaphor...
  function test_esp_cli_setup (line 209) | static void test_esp_cli_setup(SemaphoreHandle_t *start_sem, SemaphoreHa...

FILE: esp_cli/test_apps/main/test_main.c
  function setUp (line 12) | void setUp(void)
  function tearDown (line 17) | void tearDown(void)
  function app_main (line 25) | void app_main(void)

FILE: esp_cli/test_apps/pytest_esp_cli.py
  function test_esp_cli (line 14) | def test_esp_cli(dut) -> None:

FILE: esp_cli_commands/examples/command_set/main/command_set_main.c
  function cmd_a_handler (line 19) | static int cmd_a_handler(void *context, esp_cli_commands_exec_arg_t *cmd...
  function cmd_b_handler (line 28) | static int cmd_b_handler(void *context, esp_cli_commands_exec_arg_t *cmd...
  function app_main (line 37) | void app_main(void)

FILE: esp_cli_commands/examples/command_set/pytest_command_set.py
  function test_command_set (line 16) | def test_command_set(dut: Dut) -> None:

FILE: esp_cli_commands/examples/command_with_arg/main/command_with_arg_main.c
  function math_op_cmd_handler (line 7) | static int math_op_cmd_handler(void *ctx, esp_cli_commands_exec_arg_t *c...
  function app_main (line 67) | void app_main(void)

FILE: esp_cli_commands/examples/command_with_arg/pytest_command_with_arg.py
  function test_command_with_arg (line 16) | def test_command_with_arg(dut: Dut) -> None:

FILE: esp_cli_commands/examples/conftest.py
  function pytest_ignore_collect (line 1) | def pytest_ignore_collect(collection_path, config):

FILE: esp_cli_commands/examples/dynamic_registration/main/dynamic_registration_main.c
  function debug_cmd_handler (line 6) | static int debug_cmd_handler(void *ctx, esp_cli_commands_exec_arg_t *cmd...
  function unregister_cmd_handler (line 27) | static int unregister_cmd_handler(void *ctx, esp_cli_commands_exec_arg_t...
  function app_main (line 63) | void app_main(void)

FILE: esp_cli_commands/examples/dynamic_registration/pytest_dynamic_registration.py
  function test_dynamic_registration (line 16) | def test_dynamic_registration(dut: Dut) -> None:

FILE: esp_cli_commands/examples/integration_with_argtable/main/integration_with_argtable_main.c
  type arg_str (line 8) | struct arg_str
  type arg_int (line 9) | struct arg_int
  type arg_int (line 10) | struct arg_int
  type arg_end (line 11) | struct arg_end
  function math_op_args_init (line 14) | static void math_op_args_init(void)
  function math_op_cmd_handler (line 23) | static int math_op_cmd_handler(void *ctx, esp_cli_commands_exec_arg_t *c...
  function app_main (line 95) | void app_main(void)

FILE: esp_cli_commands/examples/integration_with_argtable/pytest_integration_with_argtable.py
  function test_integration_with_argtable (line 16) | def test_integration_with_argtable(dut: Dut) -> None:

FILE: esp_cli_commands/examples/static_registration/main/static_registration_main.c
  function hello_cmd_handler (line 11) | static int hello_cmd_handler(void *ctx, esp_cli_commands_exec_arg_t *cmd...
  function app_main (line 45) | void app_main(void)

FILE: esp_cli_commands/examples/static_registration/pytest_static_registration.py
  function test_static_registration (line 16) | def test_static_registration(dut: Dut) -> None:

FILE: esp_cli_commands/include/esp_cli_commands_utils.h
  type esp_cli_commands_exec_arg_t (line 37) | typedef struct esp_cli_commands_exec_arg {
  type esp_cli_command_t (line 84) | typedef struct esp_cli_command {
  type esp_cli_commands_config_t (line 97) | typedef struct esp_cli_commands_config {
  type esp_cli_command_sets (line 126) | struct esp_cli_command_sets

FILE: esp_cli_commands/private_include/esp_cli_dynamic_commands.h
  type esp_cli_command_set_t (line 24) | typedef struct esp_cli_command_set {
  type esp_cli_command_internal_t (line 35) | typedef struct esp_cli_command_internal {
  type esp_cli_command_internal_ll_t (line 43) | typedef SLIST_HEAD(esp_cli_command_internal_ll, esp_cli_command_internal...

FILE: esp_cli_commands/src/esp_cli_commands.c
  type esp_cli_command_sets_t (line 30) | typedef struct esp_cli_command_sets {
  function esp_cli_commands_lock (line 68) | static void esp_cli_commands_lock(void)
  function esp_cli_commands_unlock (line 80) | static void esp_cli_commands_unlock(void)
  function command_is_static (line 92) | static inline __attribute__((always_inline)) bool command_is_static(esp_...
  function go_through_commands (line 101) | static inline __attribute__((always_inline))
  type find_cmd_ctx_t (line 148) | typedef struct find_cmd_ctx {
  function compare_command_name (line 153) | static inline __attribute__((always_inline))
  function esp_err_t (line 182) | esp_err_t esp_cli_commands_update_config(const esp_cli_commands_config_t...
  function esp_err_t (line 203) | esp_err_t esp_cli_commands_register_cmd(esp_cli_command_t *cmd)
  function esp_err_t (line 235) | esp_err_t esp_cli_commands_unregister_cmd(const char *cmd_name)
  function esp_err_t (line 250) | esp_err_t esp_cli_commands_execute(const char *cmdline, int *cmd_ret, es...
  function esp_cli_command_t (line 317) | esp_cli_command_t *esp_cli_commands_find_command(esp_cli_command_set_han...
  type create_cmd_set_ctx_t (line 340) | typedef struct create_cmd_set_ctx {
  function fill_temp_set_info (line 349) | static inline __attribute__((always_inline))
  function esp_err_t (line 372) | static inline __attribute__((always_inline))
  function esp_cli_command_set_handle_t (line 392) | esp_cli_command_set_handle_t esp_cli_commands_create_cmd_set(const char ...
  function esp_cli_command_set_handle_t (line 443) | esp_cli_command_set_handle_t esp_cli_commands_concat_cmd_set(esp_cli_com...
  function esp_cli_commands_destroy_cmd_set (line 500) | void esp_cli_commands_destroy_cmd_set(esp_cli_command_set_handle_t *cmd_...
  type call_completion_cb_ctx_t (line 518) | typedef struct call_completion_cb_ctx {
  function call_completion_cb (line 525) | static bool call_completion_cb(void *caller_ctx, esp_cli_command_t *cmd)
  function esp_cli_commands_get_completion (line 537) | void esp_cli_commands_get_completion(esp_cli_command_set_handle_t cmd_se...
  function print_arg_help (line 600) | static void print_arg_help(esp_cli_commands_exec_arg_t *cmd_args, esp_cl...
  function print_arg_command (line 642) | static void print_arg_command(esp_cli_commands_exec_arg_t *cmd_args, esp...
  type help_verbose_level_e (line 655) | typedef enum {
  type call_cmd_ctx_t (line 668) | typedef struct call_cmd_ctx {
  function call_command_funcs (line 675) | static inline __attribute__((always_inline))
  function help_command (line 694) | static int help_command(void *context, esp_cli_commands_exec_arg_t *cmd_...

FILE: esp_cli_commands/src/esp_cli_commands_helpers.c
  type split_state_t (line 15) | typedef enum {
  function esp_cli_commands_split_argv (line 35) | size_t esp_cli_commands_split_argv(char *line, char **argv, size_t argv_...

FILE: esp_cli_commands/src/esp_cli_dynamic_commands.c
  function esp_cli_dynamic_commands_lock (line 25) | void esp_cli_dynamic_commands_lock(void)
  function esp_cli_dynamic_commands_unlock (line 37) | void esp_cli_dynamic_commands_unlock(void)
  function esp_cli_command_internal_ll_t (line 45) | const esp_cli_command_internal_ll_t *esp_cli_dynamic_commands_get_list(v...
  function esp_err_t (line 50) | esp_err_t esp_cli_dynamic_commands_add(esp_cli_command_t *cmd)
  function esp_err_t (line 90) | esp_err_t esp_cli_dynamic_commands_replace(esp_cli_command_t *old_cmd, e...
  function esp_err_t (line 102) | esp_err_t esp_cli_dynamic_commands_remove(esp_cli_command_t *item_cmd)
  function esp_cli_dynamic_commands_get_number_of_cmd (line 118) | size_t esp_cli_dynamic_commands_get_number_of_cmd(void)

FILE: esp_cli_commands/test_apps/main/test_esp_cli_commands.c
  function test_setup (line 26) | static void test_setup(void)
  type cmd_set_t (line 92) | typedef struct cmd_set {
  type cmd_test_sequence_t (line 108) | typedef struct cmd_test_sequence {
  function run_cmd_test (line 113) | static void run_cmd_test(esp_cli_command_set_handle_t handle, const char...
  function dummy_cmd_func (line 189) | static int dummy_cmd_func(void *context, esp_cli_commands_exec_arg_t *cm...
  function test_completion_cb (line 314) | static void test_completion_cb(void *cb_ctx, const char *completed_cmd_n...
  type hint_cb_ctx_t (line 379) | typedef struct hint_cb_ctx {

FILE: esp_cli_commands/test_apps/main/test_main.c
  function setUp (line 12) | void setUp(void)
  function tearDown (line 17) | void tearDown(void)
  function app_main (line 22) | void app_main(void)

FILE: esp_cli_commands/test_apps/pytest_esp_cli_commands.py
  function test_esp_cli_commands (line 14) | def test_esp_cli_commands(dut) -> None:

FILE: esp_daylight/examples/get_started/main/esp_daylight_example_main.c
  function format_time_string (line 30) | static void format_time_string(time_t timestamp, char *buffer, size_t bu...
  function display_daylight_info (line 37) | static void display_daylight_info(const esp_daylight_location_t *location,
  function example_basic_calculation (line 71) | static void example_basic_calculation(void)
  function example_seasonal_variations (line 88) | static void example_seasonal_variations(void)
  function example_time_offsets (line 117) | static void example_time_offsets(void)
  function example_polar_regions (line 163) | static void example_polar_regions(void)
  function example_practical_scheduling (line 210) | static void example_practical_scheduling(void)
  function app_main (line 286) | void app_main(void)

FILE: esp_daylight/examples/get_started/pytest_esp_daylight_example.py
  function test_esp_daylight_example (line 10) | def test_esp_daylight_example(dut: Dut) -> None:

FILE: esp_daylight/include/esp_daylight.h
  type esp_daylight_location_t (line 20) | typedef struct {

FILE: esp_daylight/src/esp_daylight.c
  function days_from_civil (line 26) | static int64_t days_from_civil(int y, unsigned m, unsigned d)
  function time_t (line 39) | static time_t utc_midnight_epoch(int year, int month, int day)
  function clamp (line 47) | static double clamp(double v, double lo, double hi)
  function fractional_year_gamma (line 56) | static double fractional_year_gamma(int year, int month, int day)
  function equation_of_time_min (line 77) | static double equation_of_time_min(double gamma)
  function solar_declination_rad (line 92) | static double solar_declination_rad(double gamma)
  function esp_daylight_calc_sunrise_sunset_utc (line 107) | bool esp_daylight_calc_sunrise_sunset_utc(int year, int month, int day,
  function esp_daylight_calc_sunrise_sunset_location (line 175) | bool esp_daylight_calc_sunrise_sunset_location(int year, int month, int ...
  function time_t (line 188) | time_t esp_daylight_apply_offset(time_t base_time, int offset_minutes)
  function esp_daylight_get_sunrise_today (line 193) | bool esp_daylight_get_sunrise_today(const esp_daylight_location_t *locat...
  function esp_daylight_get_sunset_today (line 213) | bool esp_daylight_get_sunset_today(const esp_daylight_location_t *locati...

FILE: esp_daylight/test_apps/main/test_app_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: esp_daylight/test_apps/main/test_esp_daylight.c
  function time_within_tolerance (line 19) | __attribute__((unused)) static bool time_within_tolerance(time_t actual,...
  type tm (line 43) | struct tm
  type tm (line 44) | struct tm
  type tm (line 45) | struct tm
  type tm (line 79) | struct tm
  type tm (line 80) | struct tm
  type tm (line 81) | struct tm
  type tm (line 187) | struct tm
  type tm (line 188) | struct tm
  type tm (line 189) | struct tm
  type tm (line 214) | struct tm
  type tm (line 215) | struct tm
  type tm (line 216) | struct tm
  type tm (line 248) | struct tm
  type tm (line 249) | struct tm
  type tm (line 250) | struct tm

FILE: esp_daylight/test_apps/pytest_esp_daylight.py
  function test_esp_daylight (line 10) | def test_esp_daylight(dut: Dut) -> None:

FILE: esp_delta_ota/examples/https_delta_ota/main/main.c
  function verify_chip_id (line 57) | static bool verify_chip_id(void *bin_header_data)
  function esp_err_t (line 70) | static esp_err_t write_cb(const uint8_t *buf_p, size_t size)
  function esp_err_t (line 106) | static esp_err_t read_cb(uint8_t *buf_p, size_t size, int src_offset)
  function reboot (line 114) | static void reboot(void)
  function http_cleanup (line 123) | static void http_cleanup(esp_http_client_handle_t client)
  function verify_patch_header (line 129) | static bool verify_patch_header(void *img_hdr_data)
  function ota_example_task (line 150) | static void ota_example_task(void *pvParameter)
  function app_main (line 286) | void app_main(void)

FILE: esp_delta_ota/examples/https_delta_ota/main/tests/test_local_server_ota.c
  function delta_ota_test_firmware_data_from_stdin (line 32) | void delta_ota_test_firmware_data_from_stdin(const char **data)
  function esp_err_t (line 88) | static esp_err_t root_get_handler(httpd_req_t *req)
  function esp_err_t (line 151) | static esp_err_t root_head_handler(httpd_req_t *req)
  function esp_err_t (line 187) | esp_err_t delta_ota_test_start_webserver(void)

FILE: esp_delta_ota/examples/https_delta_ota/pytest_https_delta_ota.py
  function get_env_config_variable (line 18) | def get_env_config_variable(env_name, var_name):
  function _ensure_requirements_installed (line 21) | def _ensure_requirements_installed():
  function setting_connection (line 42) | def setting_connection(dut: Dut, env_name: str | None = None) -> Any:
  function find_hello_world_binary (line 56) | def find_hello_world_binary(base_dir, chip_target='esp32'):
  function generate_patch (line 89) | def generate_patch(base_binary, new_binary, patch_output, chip='esp32'):
  function write_patch_to_partition (line 133) | def write_patch_to_partition(dut: Dut, patch_file: str):
  function test_esp_delta_ota (line 180) | def test_esp_delta_ota(dut: Dut):

FILE: esp_delta_ota/examples/https_delta_ota/tools/esp_delta_ota_patch_gen.py
  function calculate_sha256 (line 31) | def calculate_sha256(file_path: str) -> str:
  function create_patch (line 43) | def create_patch(chip: str, base_binary: str, new_binary: str, patch_fil...
  function verify_patch (line 84) | def verify_patch(base_binary: str, patch_to_verify: str, new_binary: str...
  function main (line 113) | def main() -> None:

FILE: esp_delta_ota/include/esp_delta_ota.h
  type esp_err_t (line 25) | typedef esp_err_t (*src_read_cb_t)(uint8_t *buf_p, size_t size, int src_...
  type esp_err_t (line 26) | typedef esp_err_t (*src_read_cb_with_user_ctx_t)(uint8_t *buf_p, size_t ...
  type esp_err_t (line 29) | typedef esp_err_t (*merged_stream_write_cb_t)(const uint8_t *buf_p, size...
  type esp_err_t (line 30) | typedef esp_err_t (*merged_stream_write_cb_with_user_ctx_t)(const uint8_...
  type esp_delta_ota_cfg_t (line 32) | typedef struct esp_delta_ota_cfg {

FILE: esp_delta_ota/src/esp_delta_ota.c
  type esp_delta_ota_ctx (line 20) | typedef struct esp_delta_ota_ctx {
  function esp_delta_ota_write_cb (line 34) | static int esp_delta_ota_write_cb(void *arg_p, const uint8_t *buf_p, siz...
  function esp_delta_ota_read_cb (line 57) | static int esp_delta_ota_read_cb(void *arg_p, uint8_t *buf_p, size_t size)
  function esp_delta_ota_seek_cb (line 82) | static int esp_delta_ota_seek_cb(void *arg_p, int offset)
  function esp_delta_ota_handle_t (line 89) | esp_delta_ota_handle_t esp_delta_ota_init(esp_delta_ota_cfg_t *cfg)
  function esp_err_t (line 118) | esp_err_t esp_delta_ota_feed_patch(esp_delta_ota_handle_t handle, const ...
  function esp_err_t (line 133) | esp_err_t esp_delta_ota_finalize(esp_delta_ota_handle_t handle)
  function esp_err_t (line 148) | esp_err_t esp_delta_ota_deinit(esp_delta_ota_handle_t handle)

FILE: esp_delta_ota/test_apps/main/esp_delta_ota_test_main.c
  function setUp (line 14) | void setUp(void)
  function tearDown (line 19) | void tearDown(void)
  function app_main (line 25) | void app_main(void)

FILE: esp_delta_ota/test_apps/main/test_esp_delta_ota.c
  function esp_err_t (line 26) | static esp_err_t write_cb(const uint8_t *buf_p, size_t size)
  function esp_err_t (line 36) | static esp_err_t read_cb(uint8_t *buf_p, size_t size, int src_offset)

FILE: esp_delta_ota/test_apps/pytest_esp_delta_ota.py
  function test_esp_delta_ota (line 5) | def test_esp_delta_ota(dut) -> None:

FILE: esp_encrypted_img/examples/pre_encrypted_ota/main/pre_encrypted_ota.c
  function esp_err_t (line 56) | static esp_err_t validate_image_header(esp_app_desc_t *new_app_info)
  function esp_err_t (line 77) | static esp_err_t _decrypt_cb(decrypt_cb_arg_t *args, void *user_ctx)
  function pre_encrypted_ota_task (line 117) | void pre_encrypted_ota_task(void *pvParameter)
  function app_main (line 224) | void app_main(void)

FILE: esp_encrypted_img/examples/pre_encrypted_ota/main/tests/test_local_server_ota.c
  function example_test_firmware_data_from_stdin (line 28) | void example_test_firmware_data_from_stdin(const char **data)
  function esp_err_t (line 72) | static esp_err_t root_get_handler(httpd_req_t *req)
  function esp_err_t (line 126) | static esp_err_t root_head_handler(httpd_req_t *req)
  function esp_err_t (line 161) | esp_err_t example_test_start_webserver(void)

FILE: esp_encrypted_img/examples/pre_encrypted_ota/pytest_pre_encrypted_ota.py
  function start_https_server (line 72) | def start_https_server(ota_image_dir: str, server_ip: str, port: int, se...
  function test_examples_protocol_pre_encrypted_ota_example (line 96) | def test_examples_protocol_pre_encrypted_ota_example(dut: Dut) -> None:
  function test_examples_protocol_pre_encrypted_ota_example_partial_download (line 116) | def test_examples_protocol_pre_encrypted_ota_example_partial_download(du...

FILE: esp_encrypted_img/include/esp_encrypted_img.h
  type esp_decrypt_cfg_t (line 69) | typedef struct {
  type pre_enc_decrypt_arg_t (line 94) | typedef struct {

FILE: esp_encrypted_img/private_include/esp_encrypted_img_priv.h
  type esp_encrypted_img_state (line 32) | typedef enum {
  type esp_encrypted_img_t (line 45) | typedef struct esp_encrypted_img_handle {
  type pre_enc_bin_header (line 77) | typedef struct {

FILE: esp_encrypted_img/src/esp_encrypted_img.c
  function esp_err_t (line 62) | static esp_err_t gcm_init_and_set_key(esp_encrypted_img_t *handle, const...
  function esp_err_t (line 100) | static esp_err_t gcm_start(esp_encrypted_img_t *handle, const unsigned c...
  function esp_err_t (line 127) | static esp_err_t gcm_update(esp_encrypted_img_t *handle, const unsigned ...
  function esp_err_t (line 159) | static esp_err_t gcm_finish_and_verify(esp_encrypted_img_t *handle, cons...
  function gcm_cleanup (line 194) | static void gcm_cleanup(esp_encrypted_img_t *handle)
  function esp_encrypted_random (line 212) | int esp_encrypted_random(void *ctx, unsigned char *buf, size_t len)
  function decipher_gcm_key (line 220) | static int decipher_gcm_key(const char *enc_gcm, esp_encrypted_img_t *ha...
  function mbedtls_esp_random (line 668) | static int mbedtls_esp_random(void *ctx, unsigned char *buf, size_t len)
  function psa_hkdf_derive (line 674) | static int psa_hkdf_derive(const uint8_t *ikm, size_t ikm_len,
  function esp_err_t (line 731) | static esp_err_t compute_ecc_key_with_hmac(hmac_key_id_t hmac_key, mbedt...
  function derive_ota_ecc_device_key (line 778) | static int derive_ota_ecc_device_key(hmac_key_id_t hmac_key, mbedtls_mpi...
  function mbedtls_ecp_point (line 791) | static mbedtls_ecp_point *get_server_public_point(const char *data, size...
  function derive_gcm_key (line 864) | static int derive_gcm_key(const char *data, esp_encrypted_img_t *handle)
  function esp_err_t (line 1034) | static esp_err_t esp_encrypted_img_export_ecies_pub_key(hmac_key_id_t hm...
  function esp_err_t (line 1118) | static esp_err_t esp_encrypted_img_export_ecies_pub_key(hmac_key_id_t hm...
  function esp_err_t (line 1224) | esp_err_t esp_encrypted_img_export_public_key(esp_decrypt_handle_t ctx, ...
  function esp_decrypt_handle_t (line 1261) | esp_decrypt_handle_t esp_encrypted_img_decrypt_start(const esp_decrypt_c...
  function esp_err_t (line 1355) | static esp_err_t process_bin(esp_encrypted_img_t *handle, pre_enc_decryp...
  function read_and_cache_data (line 1447) | static void read_and_cache_data(esp_encrypted_img_t *handle, pre_enc_dec...
  function esp_err_t (line 1464) | static esp_err_t process_gcm_key(esp_encrypted_img_t *handle, const char...
  function esp_err_t (line 1484) | esp_err_t esp_encrypted_img_decrypt_data(esp_decrypt_handle_t ctx, pre_e...
  function esp_err_t (line 1630) | esp_err_t esp_encrypted_img_decrypt_end(esp_decrypt_handle_t ctx)
  function esp_encrypted_img_is_complete_data_received (line 1678) | bool esp_encrypted_img_is_complete_data_received(esp_decrypt_handle_t ctx)
  function esp_err_t (line 1684) | esp_err_t esp_encrypted_img_decrypt_abort(esp_decrypt_handle_t ctx)
  function esp_encrypted_img_get_header_size (line 1707) | uint16_t esp_encrypted_img_get_header_size(void)

FILE: esp_encrypted_img/src/esp_encrypted_img_utilities.c
  function esp_efuse_block_t (line 14) | static esp_efuse_block_t convert_key_type(hmac_key_id_t key_id)
  function esp_encrypted_is_hmac_key_burnt_in_efuse (line 19) | bool esp_encrypted_is_hmac_key_burnt_in_efuse(hmac_key_id_t hmac_key_id)
  function esp_encrypted_img_pbkdf2_hmac_sha256 (line 33) | int esp_encrypted_img_pbkdf2_hmac_sha256(hmac_key_id_t hmac_key_id, cons...

FILE: esp_encrypted_img/test_apps/main/esp_encrypted_img_test.c
  function setUp (line 22) | void setUp(void)
  function tearDown (line 87) | void tearDown(void)
  function app_main (line 94) | void app_main(void)

FILE: esp_encrypted_img/test_apps/main/test_mocks.c
  function esp_encrypted_is_hmac_key_burnt_in_efuse (line 18) | bool esp_encrypted_is_hmac_key_burnt_in_efuse(hmac_key_id_t hmac_key_id)
  function esp_encrypted_img_pbkdf2_hmac_sha256 (line 28) | int esp_encrypted_img_pbkdf2_hmac_sha256(hmac_key_id_t hmac_key_id, cons...
  function esp_err_t (line 37) | esp_err_t esp_ds_start_sign(const void *message,
  function esp_ds_data_ctx_t (line 111) | esp_ds_data_ctx_t *esp_secure_cert_get_ds_ctx()
  function esp_secure_cert_free_ds_ctx (line 129) | void esp_secure_cert_free_ds_ctx(esp_ds_data_ctx_t *ds_ctx)
  function esp_err_t (line 139) | esp_err_t esp_ds_finish_sign(void *signature, esp_ds_context_t *esp_ds_ctx)
  function esp_efuse_purpose_t (line 153) | esp_efuse_purpose_t __wrap_esp_efuse_get_key_purpose(esp_efuse_block_t b...

FILE: esp_encrypted_img/test_apps/main/test_mocks.h
  type hmac_key_id_t (line 13) | typedef int hmac_key_id_t;
  type esp_err_t (line 14) | typedef int esp_err_t;
  type esp_digital_signature_length_t (line 29) | typedef enum {
  type esp_ds_data_t (line 36) | typedef struct esp_digital_signature_data {
  type esp_ds_data_ctx_t (line 42) | typedef struct esp_ds_data_ctx {

FILE: esp_encrypted_img/test_apps/pytest_esp_encrypted_img.py
  function test_esp_encrypted_img (line 12) | def test_esp_encrypted_img(dut, marker) -> None:

FILE: esp_encrypted_img/tools/esp_enc_img_gen.py
  function generate_key_GCM (line 48) | def generate_key_GCM(size: int, shared_secret: bytes, random_salt: bytes...
  function generate_IV_GCM (line 67) | def generate_IV_GCM() -> bytes:
  function encrypt_binary (line 71) | def encrypt_binary(plaintext: bytes, key: bytes, IV: bytes) -> tuple:
  function load_rsa_key (line 77) | def load_rsa_key(key_file_name: str) -> str:
  function load_ecc_key (line 98) | def load_ecc_key(key_file_name: str) -> tuple:
  function encrypt (line 110) | def encrypt(input_file: str, key_file_name: str, output_file: str, schem...
  function decrypt_binary (line 151) | def decrypt_binary(ciphertext: bytes, authTag: bytes, key: bytes, IV: by...
  function decrypt (line 157) | def decrypt(input_file: str, key_file: str, output_file: str, scheme: st...
  function generate_hmac_key (line 207) | def generate_hmac_key() -> ec.EllipticCurvePublicKey:
  function generate_random_ecc_keypair (line 244) | def generate_random_ecc_keypair() -> tuple:
  function generate_rsa_keypair (line 253) | def generate_rsa_keypair() -> tuple:
  function perform_ecdh (line 278) | def perform_ecdh(priv_key, pub_key) -> bytes:
  function get_scheme (line 285) | def get_scheme(key_file: str) -> str:
  function main (line 321) | def main() -> None:

FILE: esp_ext_part_tables/examples/basic/main/example_utils.c
  function esp_err_t (line 47) | esp_err_t load_first_sector_from_sd_card(void *mbr_buffer)

FILE: esp_ext_part_tables/examples/basic/main/main.c
  function print_loaded_ext_partitions (line 25) | void print_loaded_ext_partitions(esp_ext_part_list_item_t *head)
  function esp_ext_part_tables_mbr_parse_example_task (line 40) | void esp_ext_part_tables_mbr_parse_example_task(void *pvParameters)
  function esp_ext_part_tables_mbr_generate_example_task (line 97) | void esp_ext_part_tables_mbr_generate_example_task(void *pvParameters)
  function app_main (line 191) | void app_main(void)

FILE: esp_ext_part_tables/examples/basic/pytest_esp_ext_part_tables_example_basic.py
  function test_esp_ext_part_tables_example_basic_linux (line 10) | def test_esp_ext_part_tables_example_basic_linux(dut: Dut) -> None:

FILE: esp_ext_part_tables/include/esp_ext_part_tables.h
  type esp_ext_part_sector_size_t (line 29) | typedef enum {
  type esp_ext_part_align_t (line 36) | typedef enum {
  type __attribute__ (line 42) | enum __attribute__
  type esp_ext_part_flags_t (line 55) | typedef enum {
  type esp_ext_part_list_flags_t (line 61) | typedef enum {
  type esp_ext_part_signature_type_t (line 66) | typedef enum {
  type esp_ext_part_list_signature_t (line 70) | typedef struct {
  type esp_ext_part_t (line 75) | typedef struct {
  type esp_ext_part_list_item_t (line 84) | typedef struct esp_ext_part_list_item_ {
  type esp_ext_part_list_t (line 89) | typedef struct {

FILE: esp_ext_part_tables/include/esp_mbr.h
  type mbr_partition_t (line 28) | typedef struct {
  type mbr_t (line 52) | typedef struct {
  type esp_mbr_parse_extra_args_t (line 72) | typedef struct {
  type esp_mbr_generate_extra_args_t (line 77) | typedef struct {

FILE: esp_ext_part_tables/src/esp_ext_part_tables.c
  function esp_ext_part_bytes_to_sector_count (line 27) | uint64_t esp_ext_part_bytes_to_sector_count(uint64_t total_bytes, esp_ex...
  function esp_ext_part_sector_count_to_bytes (line 36) | uint64_t esp_ext_part_sector_count_to_bytes(uint64_t sector_count, esp_e...
  function esp_err_t (line 41) | esp_err_t esp_ext_part_list_deinit(esp_ext_part_list_t *part_list)
  function esp_err_t (line 58) | esp_err_t esp_ext_part_list_insert(esp_ext_part_list_t *part_list, esp_e...
  function esp_err_t (line 91) | esp_err_t esp_ext_part_list_deep_copy(esp_ext_part_list_t *dst, esp_ext_...
  function esp_ext_part_list_item_t (line 112) | esp_ext_part_list_item_t *esp_ext_part_list_item_head(esp_ext_part_list_...
  function esp_ext_part_list_item_t (line 120) | esp_ext_part_list_item_t *esp_ext_part_list_item_next(esp_ext_part_list_...
  function esp_err_t (line 128) | esp_err_t esp_ext_part_list_signature_get(esp_ext_part_list_t *part_list...
  function esp_err_t (line 146) | esp_err_t esp_ext_part_list_signature_set(esp_ext_part_list_t *part_list...
  function esp_err_t (line 164) | esp_err_t esp_ext_part_list_bdl_read(esp_blockdev_handle_t handle, esp_e...
  function esp_err_t (line 198) | esp_err_t esp_ext_part_list_bdl_write(esp_blockdev_handle_t handle, esp_...

FILE: esp_ext_part_tables/src/esp_mbr.c
  function ext_part_list_item_do_extra (line 19) | static void ext_part_list_item_do_extra(esp_ext_part_list_item_t *item, ...
  function esp_err_t (line 34) | esp_err_t esp_mbr_parse(void *mbr_buf,
  function mbr_partition_fill (line 119) | static bool mbr_partition_fill(mbr_partition_t *partition, esp_ext_part_...
  function esp_err_t (line 153) | esp_err_t esp_mbr_partition_set(mbr_t *mbr, uint8_t partition_index, esp...
  function esp_err_t (line 197) | esp_err_t esp_mbr_generate(mbr_t *mbr,
  function esp_err_t (line 261) | esp_err_t esp_mbr_remove_gaps_between_partiton_entries(mbr_t *mbr)

FILE: esp_ext_part_tables/src/esp_mbr_utils.c
  function esp_mbr_chs_arr_val_set (line 15) | void esp_mbr_chs_arr_val_set(uint8_t chs[3], uint32_t val)
  function esp_mbr_chs_arr_val_get (line 22) | uint32_t esp_mbr_chs_arr_val_get(const uint8_t chs[3])
  function esp_mbr_lba_to_chs_arr (line 27) | void esp_mbr_lba_to_chs_arr(uint8_t chs[3], uint32_t lba)
  function esp_mbr_lba_align (line 62) | uint32_t esp_mbr_lba_align(uint32_t lba, esp_ext_part_sector_size_t sect...
  function default_known_supported_partition_types (line 71) | static bool default_known_supported_partition_types(uint8_t type, esp_ex...
  function esp_mbr_parse_default_supported_partition_types (line 122) | bool esp_mbr_parse_default_supported_partition_types(uint8_t type, uint8...
  function esp_mbr_generate_default_supported_partition_types (line 133) | uint8_t esp_mbr_generate_default_supported_partition_types(uint8_t type)

FILE: esp_ext_part_tables/test_apps/main/test_esp_ext_part.c
  function setUp (line 27) | void setUp(void)
  function tearDown (line 32) | void tearDown(void)
  function print_esp_ext_part_list_items (line 54) | static void print_esp_ext_part_list_items(esp_ext_part_list_item_t *head)
  function generate_original_mbr (line 96) | void generate_original_mbr(mbr_t *mbr)
  function esp_err_t (line 367) | static esp_err_t bdl_simulated_read(esp_blockdev_handle_t handle, uint8_...
  function esp_err_t (line 383) | static esp_err_t bdl_simulated_write(esp_blockdev_handle_t handle, const...
  function esp_err_t (line 399) | static esp_err_t bdl_simulated_release_blockdev(esp_blockdev_handle_t ha...
  function esp_err_t (line 416) | static esp_err_t bdl_simulated_get_blockdev(uint8_t *buffer, size_t buff...
  function app_main (line 559) | void app_main(void)

FILE: esp_ext_part_tables/test_apps/pytest_esp_ext_part_tables.py
  function test_esp_ext_part_tables (line 10) | def test_esp_ext_part_tables(dut: Dut) -> None:

FILE: esp_flash_dispatcher/esp_flash_dispatcher.c
  type flash_operation_t (line 28) | typedef enum {
  type flash_operation_request_t (line 37) | typedef struct {
  type flash_dispatcher_context_t (line 63) | typedef struct {
  function flash_dispatcher_task (line 74) | static void flash_dispatcher_task(void *arg)
  function esp_err_t (line 122) | esp_err_t esp_flash_dispatcher_init(const esp_flash_dispatcher_config_t ...
  function esp_err_t (line 168) | static esp_err_t flash_dispatcher_execute(flash_operation_t op,
  function esp_err_t (line 218) | esp_err_t __wrap_esp_flash_read(esp_flash_t *chip, void *buffer, uint32_...
  function esp_err_t (line 228) | esp_err_t __wrap_esp_flash_write(esp_flash_t *chip, const void *buffer, ...
  function esp_err_t (line 238) | esp_err_t __wrap_esp_flash_write_encrypted(esp_flash_t *chip, uint32_t a...
  function esp_err_t (line 248) | esp_err_t __wrap_esp_flash_erase_region(esp_flash_t *chip, uint32_t star...
  function esp_err_t (line 258) | esp_err_t __wrap_esp_flash_erase_chip(esp_flash_t *chip)

FILE: esp_flash_dispatcher/include/esp_flash_dispatcher.h
  type esp_flash_dispatcher_config_t (line 19) | typedef struct {

FILE: esp_flash_dispatcher/test_apps/main/test_app_main.c
  function setUp (line 14) | void setUp(void)
  function tearDown (line 19) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: esp_flash_dispatcher/test_apps/main/test_esp_flash_dispatcher.c
  function esp_partition_t (line 29) | static const esp_partition_t *get_test_data_partition(void)
  function psram_flash_test_task (line 39) | static void psram_flash_test_task(void *arg)

FILE: esp_flash_dispatcher/test_apps/pytest_flash_dispatcher.py
  function test_esp_flash_dispatcher (line 9) | def test_esp_flash_dispatcher(dut) -> None:

FILE: esp_gcov/gcov_rtio.c
  function gcov_dump_task (line 27) | void gcov_dump_task(void *pvParameter)
  function gcov_create_task (line 70) | void gcov_create_task(void *arg)
  function IRAM_ATTR (line 77) | static IRAM_ATTR
  function esp_dbg_stub_gcov_entry (line 94) | static int esp_dbg_stub_gcov_entry(void)
  function gcov_rtio_init (line 101) | void gcov_rtio_init(void)
  function esp_gcov_dump (line 116) | void esp_gcov_dump(void)
  function gcov_rtio_fclose (line 140) | int gcov_rtio_fclose(void *stream)
  function gcov_rtio_fread (line 146) | size_t gcov_rtio_fread(void *ptr, size_t size, size_t nmemb, void *stream)
  function gcov_rtio_fwrite (line 154) | size_t gcov_rtio_fwrite(const void *ptr, size_t size, size_t nmemb, void...
  function gcov_rtio_fseek (line 160) | int gcov_rtio_fseek(void *stream, long offset, int whence)
  function gcov_rtio_ftell (line 167) | long gcov_rtio_ftell(void *stream)
  function gcov_rtio_feof (line 174) | int gcov_rtio_feof(void *stream)
  function gcov_rtio_setbuf (line 181) | void gcov_rtio_setbuf(void *arg1 __attribute__((unused)), void *arg2 __a...
  function __wrap___gcov_init (line 189) | void __wrap___gcov_init(void *info)

FILE: esp_isotp/inc/esp_isotp.h
  type esp_isotp_link_t (line 34) | struct esp_isotp_link_t
  type esp_isotp_config_t (line 73) | typedef struct {

FILE: esp_isotp/src/esp_isotp.c
  function is_extended_id (line 28) | static inline bool is_extended_id(uint32_t id)
  type esp_isotp_frame_t (line 43) | typedef struct esp_isotp_frame_t {
  type esp_isotp_link_t (line 57) | typedef struct esp_isotp_link_t {
  function esp_isotp_rx_wrapper (line 86) | static void esp_isotp_rx_wrapper(void *link, const uint8_t *data, uint32...
  function esp_isotp_tx_wrapper (line 110) | static void esp_isotp_tx_wrapper(void *link, uint32_t tx_size, void *use...
  function IRAM_ATTR (line 131) | static IRAM_ATTR bool esp_isotp_tx_callback(twai_node_handle_t handle, c...
  function IRAM_ATTR (line 155) | static IRAM_ATTR bool esp_isotp_rx_callback(twai_node_handle_t handle, c...
  function isotp_user_get_us (line 189) | uint32_t isotp_user_get_us(void)
  function isotp_user_send_can (line 206) | int isotp_user_send_can(const uint32_t arbitration_id, const uint8_t *da...
  function isotp_user_debug (line 253) | void isotp_user_debug(const char *message, ...)
  function esp_err_t (line 261) | esp_err_t esp_isotp_new_transport(twai_node_handle_t twai_node, const es...
  function esp_err_t (line 377) | esp_err_t esp_isotp_delete(esp_isotp_handle_t handle)
  function esp_err_t (line 427) | esp_err_t esp_isotp_poll(esp_isotp_handle_t handle)
  function esp_err_t (line 451) | esp_err_t esp_isotp_send(esp_isotp_handle_t handle, const uint8_t *data,...
  function esp_err_t (line 488) | esp_err_t esp_isotp_send_with_id(esp_isotp_handle_t handle, uint32_t id,...
  function esp_err_t (line 532) | esp_err_t esp_isotp_receive(esp_isotp_handle_t handle, uint8_t *data, ui...

FILE: esp_jpeg/examples/get_started/main/decode_image.c
  function esp_err_t (line 33) | esp_err_t decode_image(uint16_t **pixels)

FILE: esp_jpeg/examples/get_started/main/lcd_tjpgd_example_main.c
  function display_pretty_colors (line 50) | static void display_pretty_colors(esp_lcd_panel_handle_t panel_handle)
  function app_main (line 70) | void app_main(void)

FILE: esp_jpeg/examples/get_started/main/pretty_effect.c
  function get_bgnd_pixel (line 14) | static inline uint16_t get_bgnd_pixel(int x, int y)
  function pretty_effect_calc_lines (line 31) | void pretty_effect_calc_lines(uint16_t *dest, int line, int frame, int l...
  function esp_err_t (line 57) | esp_err_t pretty_effect_init(void)

FILE: esp_jpeg/include/jpeg_decoder.h
  type esp_jpeg_image_scale_t (line 19) | typedef enum {
  type esp_jpeg_image_format_t (line 30) | typedef enum {
  type esp_jpeg_image_cfg_t (line 39) | typedef struct esp_jpeg_image_cfg_s {
  type esp_jpeg_image_output_t (line 66) | typedef struct esp_jpeg_image_output_s {

FILE: esp_jpeg/jpeg_decoder.c
  type jpeg_decode_out_t (line 25) | typedef unsigned int jpeg_decode_out_t;
  type jpeg_decode_out_t (line 31) | typedef int jpeg_decode_out_t;
  function esp_err_t (line 73) | esp_err_t esp_jpeg_decode(esp_jpeg_image_cfg_t *cfg, esp_jpeg_image_outp...
  function esp_err_t (line 124) | esp_err_t esp_jpeg_get_image_info(esp_jpeg_image_cfg_t *cfg, esp_jpeg_im...
  function jpeg_decode_in_cb (line 171) | static unsigned int jpeg_decode_in_cb(JDEC *dec, uint8_t *buff, unsigned...
  function jpeg_decode_out_t (line 195) | static jpeg_decode_out_t jpeg_decode_out_cb(JDEC *dec, void *bitmap, JRE...
  function jpeg_get_div_by_scale (line 249) | static uint8_t jpeg_get_div_by_scale(esp_jpeg_image_scale_t scale)
  function jpeg_get_color_bytes (line 269) | static uint8_t jpeg_get_color_bytes(esp_jpeg_image_format_t format)
  function ldb_word (line 283) | static inline uint16_t ldb_word(const void *ptr)

FILE: esp_jpeg/test_apps/main/jpg_to_rgb888_hex.py
  function jpg_to_rgb888_hex_c_array (line 4) | def jpg_to_rgb888_hex_c_array(input_filename: str, output_filename: str)...
  function main (line 45) | def main():

FILE: esp_jpeg/test_apps/main/test_tjpgd_main.c
  function setUp (line 14) | void setUp(void)
  function tearDown (line 19) | void tearDown(void)
  function app_main (line 25) | void app_main(void)

FILE: esp_jpeg/test_apps/main/tjpgd_test.c
  function esp_jpeg_print_ascii (line 23) | void esp_jpeg_print_ascii(unsigned char *rgb888, esp_jpeg_image_output_t...

FILE: esp_jpeg/test_apps/pytest_esp_jpeg.py
  function test_esp_jpeg (line 5) | def test_esp_jpeg(dut) -> None:

FILE: esp_jpeg/tjpgd/tjpgd.c
  function BYTECLIP (line 117) | static uint8_t BYTECLIP (int val)
  function JRESULT (line 167) | JRESULT jd_load_default_huffman (JDEC *jd)
  function JRESULT (line 231) | static JRESULT create_qt_tbl (  /* 0:OK, !0:Failed */
  function JRESULT (line 273) | static JRESULT create_huffman_tbl ( /* 0:OK, !0:Failed */
  function huffext (line 381) | static int huffext (    /* >=0: decoded data, <0: error code */
  function bitext (line 532) | static int bitext ( /* >=0: extracted data, <0: error code */
  function JRESULT (line 627) | static JRESULT restart (
  function block_idct (line 702) | static void block_idct (
  function JRESULT (line 825) | static JRESULT mcu_load (
  function JRESULT (line 927) | static JRESULT mcu_output (
  function JRESULT (line 1116) | JRESULT jd_prepare (
  function JRESULT (line 1349) | JRESULT jd_decomp (

FILE: esp_jpeg/tjpgd/tjpgd.h
  type jd_yuv_t (line 25) | typedef int16_t jd_yuv_t;
  type jd_yuv_t (line 27) | typedef uint8_t jd_yuv_t;
  type JRESULT (line 32) | typedef enum {
  type JRECT (line 47) | typedef struct {
  type JDEC (line 57) | typedef struct JDEC JDEC;
  type JDEC (line 58) | struct JDEC {

FILE: esp_lcd_qemu_rgb/examples/lcd_qemu_rgb_panel/main/lcd_qemu_rgb_panel_main.c
  function example_lvgl_flush_cb (line 48) | static void example_lvgl_flush_cb(lv_disp_drv_t *drv, const lv_area_t *a...
  function example_increase_lvgl_tick (line 60) | static void example_increase_lvgl_tick(void *arg)
  function example_lvgl_lock (line 66) | bool example_lvgl_lock(int timeout_ms)
  function example_lvgl_unlock (line 74) | void example_lvgl_unlock(void)
  function example_lvgl_port_task (line 79) | static void example_lvgl_port_task(void *arg)
  function example_lvgl_get_buffers (line 99) | static size_t example_lvgl_get_buffers(esp_lcd_panel_handle_t panel_hand...
  function app_main (line 117) | void app_main(void)

FILE: esp_lcd_qemu_rgb/examples/lcd_qemu_rgb_panel/main/lvgl_demo_ui.c
  function draw_event_cb (line 12) | static void draw_event_cb(lv_event_t *e)
  function add_data (line 37) | static void add_data(lv_timer_t *timer)
  function example_lvgl_demo_ui (line 43) | void example_lvgl_demo_ui(lv_disp_t *disp)

FILE: esp_lcd_qemu_rgb/interface/esp_lcd_qemu_rgb.h
  type esp_lcd_rgb_qemu_bpp_t (line 16) | typedef enum {
  type esp_lcd_rgb_qemu_config_t (line 23) | typedef struct {

FILE: esp_lcd_qemu_rgb/src/esp_lcd_qemu_rgb.c
  type esp_rgb_qemu_t (line 26) | typedef struct esp_rgb_qemu_t {
  function esp_err_t (line 45) | esp_err_t esp_lcd_new_rgb_qemu(const esp_lcd_rgb_qemu_config_t *rgb_conf...
  function esp_err_t (line 89) | esp_err_t esp_lcd_rgb_qemu_get_frame_buffer(esp_lcd_panel_handle_t panel...
  function esp_err_t (line 98) | esp_err_t esp_lcd_rgb_qemu_refresh(esp_lcd_panel_handle_t panel)
  function esp_err_t (line 106) | static esp_err_t rgb_qemu_del(esp_lcd_panel_t *panel)
  function esp_err_t (line 112) | static esp_err_t rgb_qemu_reset(esp_lcd_panel_t *panel)
  function esp_err_t (line 117) | static esp_err_t rgb_qemu_init(esp_lcd_panel_t *panel)
  function esp_err_t (line 122) | static esp_err_t rgb_qemu_draw_bitmap(esp_lcd_panel_t *panel, int x_star...
  function esp_err_t (line 141) | static esp_err_t rgb_qemu_invert_color(esp_lcd_panel_t *panel, bool inve...
  function esp_err_t (line 146) | static esp_err_t rgb_qemu_mirror(esp_lcd_panel_t *panel, bool mirror_x, ...
  function esp_err_t (line 151) | static esp_err_t rgb_qemu_swap_xy(esp_lcd_panel_t *panel, bool swap_axes)
  function esp_err_t (line 156) | static esp_err_t rgb_qemu_set_gap(esp_lcd_panel_t *panel, int x_gap, int...
  function esp_err_t (line 161) | static esp_err_t rgb_qemu_disp_on_off(esp_lcd_panel_t *panel, bool on_off)

FILE: esp_lcd_qemu_rgb/src/esp_lcd_qemu_rgb_struct.h
  type rgb_qemu_dev_t (line 15) | typedef volatile struct rgb_qemu_dev_s {

FILE: esp_linenoise/examples/basic_line_reading/main/basic_line_reading.c
  function app_main (line 10) | void app_main(void)

FILE: esp_linenoise/examples/basic_line_reading/pytest_basic_line_reading.py
  function test_examples_basic_line_reading (line 16) | def test_examples_basic_line_reading(dut: Dut) -> None:

FILE: esp_linenoise/examples/completion/main/completion.c
  function completion_callback (line 24) | static void completion_callback(const char *buf, void *cb_ctx, esp_linen...
  function app_main (line 33) | void app_main(void)

FILE: esp_linenoise/examples/completion/pytest_completion.py
  function test_examples_completion (line 16) | def test_examples_completion(dut: Dut) -> None:

FILE: esp_linenoise/examples/history_usage/main/history_usage.c
  function init_filesystem (line 21) | static void init_filesystem(void)
  function app_main (line 50) | void app_main(void)

FILE: esp_linenoise/examples/history_usage/pytest_history_usage.py
  function test_examples_history_usage (line 16) | def test_examples_history_usage(dut: Dut) -> None:

FILE: esp_linenoise/examples/multi_instance/main/multi_instance.c
  function app_main (line 15) | void app_main(void)

FILE: esp_linenoise/examples/multi_instance/pytest_multi_instance.py
  function test_examples_multi_instance (line 16) | def test_examples_multi_instance(dut: Dut) -> None:

FILE: esp_linenoise/examples/utils/common_io.c
  function common_init_io (line 22) | void common_init_io(void)
  function common_deinit_io (line 40) | void common_deinit_io(void)
  function common_open_uart_fd (line 52) | int common_open_uart_fd(void)
  function common_get_default_in_fd (line 65) | int common_get_default_in_fd(void)
  function common_get_default_out_fd (line 75) | int common_get_default_out_fd(void)

FILE: esp_linenoise/include/esp_linenoise.h
  type esp_linenoise_config_t (line 107) | typedef struct esp_linenoise_config {
  type esp_linenoise_instance (line 127) | struct esp_linenoise_instance

FILE: esp_linenoise/linenoise/linenoise.c
  function completion_default_cb (line 115) | static void completion_default_cb(const char *str, void *cb_ctx, esp_lin...
  function esp_linenoise_instance_t (line 126) | static inline __attribute__((always_inline))
  function linenoiseSetReadCharacteristics (line 135) | __attribute__((weak)) void linenoiseSetReadCharacteristics(void)
  function linenoiseAddCompletion (line 146) | void linenoiseAddCompletion(linenoiseCompletions *lc, const char *str)
  function linenoiseSetMultiLine (line 151) | void linenoiseSetMultiLine(int ml)
  function linenoiseSetDumbMode (line 159) | void linenoiseSetDumbMode(int set)
  function linenoiseIsDumbMode (line 167) | bool linenoiseIsDumbMode(void)
  function linenoiseAllowEmpty (line 177) | void linenoiseAllowEmpty(bool val)
  function linenoiseSetWriteFunction (line 185) | void linenoiseSetWriteFunction(linenoiseWriteBytesFn write_fn)
  function linenoiseSetReadFunction (line 193) | void linenoiseSetReadFunction(linenoiseReadBytesFn read_fn)
  function linenoiseSetCompletionCallback (line 202) | void linenoiseSetCompletionCallback(linenoiseCompletionCallback *fn)
  function linenoiseSetHintsCallback (line 213) | void linenoiseSetHintsCallback(linenoiseHintsCallback *fn)
  function linenoiseSetFreeHintsCallback (line 223) | void linenoiseSetFreeHintsCallback(linenoiseFreeHintsCallback *fn)
  function linenoiseClearScreen (line 232) | void linenoiseClearScreen(void)
  function linenoiseProbe (line 238) | int linenoiseProbe(void)
  function linenoiseFree (line 284) | void linenoiseFree(void *ptr)
  function linenoiseHistoryFree (line 289) | void linenoiseHistoryFree(void)
  function linenoiseHistoryAdd (line 302) | int linenoiseHistoryAdd(const char *line)
  function linenoiseHistorySetMaxLen (line 316) | int linenoiseHistorySetMaxLen(int len)
  function linenoiseHistorySave (line 328) | int linenoiseHistorySave(const char *filename)
  function linenoiseHistoryLoad (line 343) | int linenoiseHistoryLoad(const char *filename)
  function linenoiseSetMaxLineLen (line 356) | int linenoiseSetMaxLineLen(size_t len)

FILE: esp_linenoise/linenoise/linenoise.h
  type linenoiseCompletions (line 49) | typedef struct esp_linenoise_completions linenoiseCompletions;

FILE: esp_linenoise/private_include/esp_linenoise_private.h
  type KEY_ACTION (line 26) | enum KEY_ACTION {
  type esp_linenoise_state_t (line 49) | typedef struct esp_linenoise_state {
  type esp_linenoise_instance_t (line 64) | typedef struct esp_linenoise_instance {
  type esp_linenoise_completions_t (line 72) | typedef struct esp_linenoise_completions {
  function esp_linenoise_instance_t (line 78) | inline __attribute__((always_inline))

FILE: esp_linenoise/src/esp_linenoise.c
  function esp_linenoise_default_write_bytes (line 32) | static ssize_t esp_linenoise_default_write_bytes(int fd, const void *buf...
  function esp_linenoise_default_read_bytes (line 41) | __attribute__((weak)) ssize_t esp_linenoise_default_read_bytes(int fd, v...
  type append_buffer_t (line 69) | typedef struct append_buffer {
  function esp_linenoise_append_buffer_init (line 74) | static void esp_linenoise_append_buffer_init(append_buffer_t *ab)
  function esp_linenoise_append_buffer_append (line 80) | static void esp_linenoise_append_buffer_append(append_buffer_t *ab, cons...
  function esp_linenoise_append_buffer_free (line 92) | static void esp_linenoise_append_buffer_free(append_buffer_t *ab)
  function esp_linenoise_refresh_show_hints (line 99) | static void esp_linenoise_refresh_show_hints(append_buffer_t *ab, esp_li...
  function esp_linenoise_refresh_single_line (line 145) | static void esp_linenoise_refresh_single_line(esp_linenoise_instance_t *...
  function esp_linenoise_refresh_multi_line (line 190) | static void esp_linenoise_refresh_multi_line(esp_linenoise_instance_t *i...
  function esp_linenoise_refresh_line (line 284) | static void esp_linenoise_refresh_line(esp_linenoise_instance_t *instance)
  function esp_linenoise_get_cursor_position (line 296) | static int esp_linenoise_get_cursor_position(esp_linenoise_instance_t *i...
  function esp_linenoise_get_columns (line 353) | static int esp_linenoise_get_columns(esp_linenoise_instance_t *instance)
  function esp_linenoise_make_beep_sound (line 413) | static void esp_linenoise_make_beep_sound(esp_linenoise_instance_t *inst...
  function free_completions (line 422) | static void free_completions(esp_linenoise_completions_t *lc)
  function esp_linenoise_complete_line (line 439) | static int esp_linenoise_complete_line(esp_linenoise_instance_t *instance)
  function esp_linenoise_edit_insert (line 511) | static int esp_linenoise_edit_insert(esp_linenoise_instance_t *instance,...
  function esp_linenoise_insert_pasted_char (line 544) | static int esp_linenoise_insert_pasted_char(esp_linenoise_instance_t *in...
  function esp_linenoise_edit_move_left (line 563) | static void esp_linenoise_edit_move_left(esp_linenoise_instance_t *insta...
  function esp_linenoise_edit_move_right (line 573) | static void esp_linenoise_edit_move_right(esp_linenoise_instance_t *inst...
  function esp_linenoise_edit_move_home (line 583) | static void esp_linenoise_edit_move_home(esp_linenoise_instance_t *insta...
  function esp_linenoise_edit_move_end (line 593) | static void esp_linenoise_edit_move_end(esp_linenoise_instance_t *instance)
  function esp_linenoise_edit_history_next (line 606) | static void esp_linenoise_edit_history_next(esp_linenoise_instance_t *in...
  function esp_linenoise_edit_delete (line 638) | static void esp_linenoise_edit_delete(esp_linenoise_instance_t *instance)
  function esp_linenoise_edit_backspace (line 651) | static void esp_linenoise_edit_backspace(esp_linenoise_instance_t *insta...
  function esp_linenoise_edit_delete_prev_word (line 666) | static void esp_linenoise_edit_delete_prev_word(esp_linenoise_instance_t...
  function get_millis (line 685) | static uint32_t get_millis(void)
  function esp_linenoise_prompt_len_ignore_escape_seq (line 692) | static inline size_t esp_linenoise_prompt_len_ignore_escape_seq(const ch...
  function esp_linenoise_edit (line 718) | static int esp_linenoise_edit(esp_linenoise_instance_t *instance, char *...
  function esp_linenoise_raw (line 957) | static int esp_linenoise_raw(esp_linenoise_instance_t *instance, char *b...
  function esp_linenoise_dumb (line 973) | static int esp_linenoise_dumb(esp_linenoise_instance_t *instance, char *...
  function esp_linenoise_sanitize (line 1032) | static void esp_linenoise_sanitize(char *src)
  function esp_linenoise_probe (line 1044) | int esp_linenoise_probe(esp_linenoise_handle_t handle)
  function esp_linenoise_get_instance_config_default (line 1099) | void esp_linenoise_get_instance_config_default(esp_linenoise_config_t *c...
  function esp_err_t (line 1119) | esp_err_t esp_linenoise_create_instance(const esp_linenoise_config_t *co...
  function esp_err_t (line 1203) | esp_err_t esp_linenoise_delete_instance(esp_linenoise_handle_t handle)
  function esp_err_t (line 1233) | esp_err_t esp_linenoise_get_line(esp_linenoise_handle_t handle, char *cm...
  function esp_linenoise_add_completion (line 1279) | void esp_linenoise_add_completion(void *ctx, const char *str)
  function esp_err_t (line 1306) | esp_err_t esp_linenoise_history_add(esp_linenoise_handle_t handle, const...
  function esp_err_t (line 1354) | esp_err_t esp_linenoise_history_save(esp_linenoise_handle_t handle, cons...
  function esp_err_t (line 1379) | esp_err_t esp_linenoise_history_load(esp_linenoise_handle_t handle, cons...
  function esp_err_t (line 1424) | esp_err_t esp_linenoise_history_set_max_len(esp_linenoise_handle_t handl...
  function esp_err_t (line 1472) | esp_err_t esp_linenoise_history_free(esp_linenoise_handle_t handle)
  function esp_err_t (line 1489) | esp_err_t esp_linenoise_clear_screen(esp_linenoise_handle_t handle)
  function esp_err_t (line 1505) | esp_err_t esp_linenoise_set_empty_line(esp_linenoise_handle_t handle, bo...
  function esp_err_t (line 1512) | esp_err_t esp_linenoise_is_empty_line(esp_linenoise_handle_t handle, boo...
  function esp_err_t (line 1524) | esp_err_t esp_linenoise_set_multi_line(esp_linenoise_handle_t handle, bo...
  function esp_err_t (line 1531) | esp_err_t esp_linenoise_is_multi_line(esp_linenoise_handle_t handle, boo...
  function esp_err_t (line 1543) | esp_err_t esp_linenoise_set_dumb_mode(esp_linenoise_handle_t handle, boo...
  function esp_err_t (line 1550) | esp_err_t esp_linenoise_is_dumb_mode(esp_linenoise_handle_t handle, bool...
  function esp_err_t (line 1562) | esp_err_t esp_linenoise_set_max_cmd_line_length(esp_linenoise_handle_t h...
  function esp_err_t (line 1573) | esp_err_t esp_linenoise_get_max_cmd_line_length(esp_linenoise_handle_t h...
  function esp_err_t (line 1585) | esp_err_t esp_linenoise_set_prompt(esp_linenoise_handle_t handle, const ...
  function esp_err_t (line 1597) | esp_err_t esp_linenoise_get_prompt(esp_linenoise_handle_t handle, const ...
  function esp_err_t (line 1609) | esp_err_t esp_linenoise_get_out_fd(esp_linenoise_handle_t handle, int *fd)
  function esp_err_t (line 1621) | esp_err_t esp_linenoise_get_in_fd(esp_linenoise_handle_t handle, int *fd)
  function esp_err_t (line 1633) | esp_err_t esp_linenoise_get_read(esp_linenoise_handle_t handle, esp_line...
  function esp_err_t (line 1645) | esp_err_t esp_linenoise_get_write(esp_linenoise_handle_t handle, esp_lin...

FILE: esp_linenoise/src/esp_linenoise_internals.c
  type eventfd_pair_t (line 21) | typedef struct eventfd_pair {
  function esp_linenoise_get_eventfd_from_fd (line 30) | static int esp_linenoise_get_eventfd_from_fd(const int fd)
  function esp_linenoise_default_read_bytes (line 43) | ssize_t esp_linenoise_default_read_bytes(int fd, void *buf, size_t count)
  function esp_err_t (line 88) | esp_err_t esp_linenoise_set_event_fd(esp_linenoise_instance_t *instance)
  function esp_err_t (line 136) | esp_err_t esp_linenoise_remove_event_fd(esp_linenoise_instance_t *instance)
  function esp_err_t (line 185) | esp_err_t esp_linenoise_abort(esp_linenoise_handle_t handle)

FILE: esp_linenoise/test_apps/main/include/test_utils.h
  type KEY_ACTION (line 18) | enum KEY_ACTION {
  type command_t (line 41) | typedef struct command {
  function get_millis (line 49) | inline __attribute__((always_inline))
  function wait_ms (line 57) | inline __attribute__((always_inline))

FILE: esp_linenoise/test_apps/main/test_esp_linenoise_behavioral.c
  function custom_completion_cb (line 29) | static void custom_completion_cb(const char *str, void *cb_ctx, esp_line...
  function custom_free_hint_cb (line 49) | static void custom_free_hint_cb(void *ptr)
  function custom_read (line 58) | static ssize_t custom_read(int fd, void *buf, size_t count)
  function custom_write (line 72) | static ssize_t custom_write(int fd, const void *buf, size_t count)
  function test_instance_setup (line 100) | static void test_instance_setup(int socket_fd[2], pthread_mutex_t *lock,...
  function test_instance_teardown (line 134) | static void test_instance_teardown(int socket_fd[2], esp_linenoise_handl...
  type get_line_args_t (line 146) | typedef struct get_line_args {
  function get_line_task (line 152) | static void get_line_task(void *args)
  type get_line_task_args_t (line 174) | typedef struct get_line_task_args {
  function get_line_task_w_args (line 183) | static void get_line_task_w_args(void *args)

FILE: esp_linenoise/test_apps/main/test_esp_linenoise_get_set.c
  function esp_linenoise_handle_t (line 13) | static esp_linenoise_handle_t get_linenoise_instance_default_config(void)
  function test_read (line 162) | static ssize_t test_read(int fd, void *buf, size_t count)
  function test_write (line 170) | static ssize_t test_write(int fd, const void *buf, size_t count)

FILE: esp_linenoise/test_apps/main/test_linenoise_legacy.c
  function custom_legacy_completion_cb (line 29) | void custom_legacy_completion_cb(const char *str, linenoiseCompletions *lc)
  function custom_legacy_free_hint_cb (line 49) | void custom_legacy_free_hint_cb(void *ptr)
  function custom_legacy_write (line 58) | ssize_t custom_legacy_write(int fd, const void *buf, size_t count)
  function test_setup (line 90) | static void test_setup(int socket_fd[2], pthread_mutex_t *s_lock)
  function test_teardown (line 129) | static void test_teardown(int socket_fd[2])

FILE: esp_linenoise/test_apps/main/test_main.c
  function setUp (line 12) | void setUp(void)
  function tearDown (line 17) | void tearDown(void)
  function app_main (line 22) | void app_main(void)

FILE: esp_linenoise/test_apps/main/test_utils.c
  function test_send_characters (line 25) | void test_send_characters(int socket_fd, const char *msg)

FILE: esp_linenoise/test_apps/pytest_linenoise.py
  function test_esp_linenoise (line 15) | def test_esp_linenoise(dut: Dut) -> None:

FILE: esp_schedule/examples/get_started/main/esp_schedule_example_main.c
  function days_of_week_callback (line 30) | static void days_of_week_callback(esp_schedule_handle_t handle, void *pr...
  function date_callback (line 38) | static void date_callback(esp_schedule_handle_t handle, void *priv_data)
  function relative_callback (line 46) | static void relative_callback(esp_schedule_handle_t handle, void *priv_d...
  function solar_callback (line 55) | static void solar_callback(esp_schedule_handle_t handle, void *priv_data)
  function timestamp_callback (line 64) | static void timestamp_callback(esp_schedule_handle_t handle, uint32_t ne...
  function create_example_schedules (line 89) | static void create_example_schedules(void)
  function app_main (line 219) | void app_main(void)

FILE: esp_schedule/examples/get_started/main/esp_schedule_example_stub.c
  function app_main (line 23) | void app_main(void)

FILE: esp_schedule/examples/get_started/main/network/app_network.c
  function network_prov_event_handler (line 75) | static void network_prov_event_handler(void *ctx, esp_event_base_t event...
  function wifi_event_handler (line 116) | static void wifi_event_handler(void *ctx, esp_event_base_t event_base, i...
  function ip_event_handler (line 149) | static void ip_event_handler(void *ctx, esp_event_base_t event_base, int...
  function esp_err_t (line 179) | static esp_err_t wifi_init(void)
  function esp_err_t (line 237) | static esp_err_t wifi_start_sta(void)
  function display_qr_code (line 254) | static void display_qr_code(const char *service_name)
  function esp_err_t (line 292) | esp_err_t app_network_init(EventGroupHandle_t event_group)
  function esp_err_t (line 340) | esp_err_t app_network_start(EventGroupHandle_t event_group, uint32_t tim...
  function app_network_start_time_sync (line 416) | void app_network_start_time_sync(EventGroupHandle_t event_group)
  function esp_err_t (line 436) | esp_err_t app_network_wait_for_time_sync(EventGroupHandle_t event_group,...

FILE: esp_schedule/include/esp_schedule.h
  type esp_schedule_type_t (line 46) | typedef enum esp_schedule_type {
  type esp_schedule_days_t (line 58) | typedef enum esp_schedule_days {
  type esp_schedule_months_t (line 71) | typedef enum esp_schedule_months {
  type esp_schedule_trigger_t (line 89) | typedef struct esp_schedule_trigger {
  type esp_schedule_validity_t (line 136) | typedef struct esp_schedule_validity {
  type esp_schedule_config_t (line 144) | typedef struct esp_schedule_config {

FILE: esp_schedule/src/esp_schedule.c
  function esp_schedule_get_no_of_days (line 20) | static int esp_schedule_get_no_of_days(esp_schedule_trigger_t *trigger, ...
  function esp_schedule_get_next_month (line 70) | static uint8_t esp_schedule_get_next_month(esp_schedule_trigger_t *trigg...
  function esp_schedule_get_next_year (line 147) | static uint16_t esp_schedule_get_next_year(esp_schedule_trigger_t *trigg...
  function time_t (line 161) | static time_t esp_schedule_calc_solar_time_for_date(const esp_schedule_t...
  function esp_schedule_finalize_solar_time (line 184) | static int32_t esp_schedule_finalize_solar_time(time_t solar_time, time_...
  function esp_schedule_get_next_schedule_time_diff (line 216) | static uint32_t esp_schedule_get_next_schedule_time_diff(const char *sch...
  function esp_schedule_is_expired (line 471) | static bool esp_schedule_is_expired(esp_schedule_trigger_t *trigger)
  function esp_schedule_stop_timer (line 546) | static void esp_schedule_stop_timer(esp_schedule_t *schedule)
  function esp_schedule_start_timer (line 551) | static void esp_schedule_start_timer(esp_schedule_t *schedule)
  function esp_schedule_common_timer_cb (line 580) | static void esp_schedule_common_timer_cb(TimerHandle_t timer)
  function esp_schedule_delete_timer (line 626) | static void esp_schedule_delete_timer(esp_schedule_t *schedule)
  function esp_schedule_create_timer (line 631) | static void esp_schedule_create_timer(esp_schedule_t *schedule)
  function esp_err_t (line 642) | esp_err_t esp_schedule_get(esp_schedule_handle_t handle, esp_schedule_co...
  function esp_err_t (line 672) | esp_err_t esp_schedule_enable(esp_schedule_handle_t handle)
  function esp_err_t (line 682) | esp_err_t esp_schedule_disable(esp_schedule_handle_t handle)
  function esp_err_t (line 696) | static esp_err_t esp_schedule_set(esp_schedule_t *schedule, esp_schedule...
  function esp_err_t (line 737) | esp_err_t esp_schedule_edit(esp_schedule_handle_t handle, esp_schedule_c...
  function esp_err_t (line 757) | esp_err_t esp_schedule_delete(esp_schedule_handle_t handle)
  function esp_schedule_handle_t (line 773) | esp_schedule_handle_t esp_schedule_create(esp_schedule_config_t *schedul...
  function esp_schedule_handle_t (line 802) | esp_schedule_handle_t *esp_schedule_init(bool enable_nvs, char *nvs_part...

FILE: esp_schedule/src/esp_schedule_internal.h
  type esp_schedule_t (line 26) | typedef struct esp_schedule {

FILE: esp_schedule/src/esp_schedule_nvs.c
  function esp_err_t (line 29) | esp_err_t esp_schedule_nvs_add(esp_schedule_t *schedule)
  function esp_err_t (line 90) | esp_err_t esp_schedule_nvs_remove_all(void)
  function esp_err_t (line 114) | esp_err_t esp_schedule_nvs_remove(esp_schedule_t *schedule)
  function esp_schedule_nvs_get_count (line 152) | static uint8_t esp_schedule_nvs_get_count(void)
  function esp_schedule_handle_t (line 176) | static esp_schedule_handle_t esp_schedule_nvs_get(char *nvs_key)
  function esp_schedule_handle_t (line 213) | esp_schedule_handle_t *esp_schedule_nvs_get_all(uint8_t *schedule_count)
  function esp_schedule_nvs_is_enabled (line 257) | bool esp_schedule_nvs_is_enabled(void)
  function esp_err_t (line 262) | esp_err_t esp_schedule_nvs_init(char *nvs_partition)

FILE: esp_serial_slave_link/essl.c
  function esp_err_t (line 47) | esp_err_t essl_init(essl_handle_t handle, uint32_t wait_ms)
  function esp_err_t (line 52) | esp_err_t essl_wait_for_ready(essl_handle_t handle, uint32_t wait_ms)
  function esp_err_t (line 57) | esp_err_t essl_send_packet(essl_handle_t handle, const void *start, size...
  function esp_err_t (line 86) | esp_err_t essl_get_packet(essl_handle_t handle, void *out_data, size_t s...
  function esp_err_t (line 142) | esp_err_t essl_get_tx_buffer_num(essl_handle_t handle, uint32_t *out_tx_...
  function esp_err_t (line 160) | esp_err_t essl_get_rx_data_size(essl_handle_t handle, uint32_t *out_rx_s...
  function esp_err_t (line 178) | esp_err_t essl_write_reg(essl_handle_t handle, uint8_t addr, uint8_t val...
  function esp_err_t (line 183) | esp_err_t essl_read_reg(essl_handle_t handle, uint8_t add, uint8_t *valu...
  function esp_err_t (line 188) | esp_err_t essl_wait_int(essl_handle_t handle, TickType_t wait_ms)
  function esp_err_t (line 193) | esp_err_t essl_reset_cnt(essl_handle_t handle)
  function esp_err_t (line 205) | esp_err_t essl_clear_intr(essl_handle_t handle, uint32_t intr_mask, uint...
  function esp_err_t (line 210) | esp_err_t essl_get_intr(essl_handle_t handle, uint32_t *intr_raw, uint32...
  function esp_err_t (line 218) | esp_err_t essl_set_intr_ena(essl_handle_t handle, uint32_t ena_mask, uin...
  function esp_err_t (line 223) | esp_err_t essl_get_intr_ena(essl_handle_t handle, uint32_t *ena_mask_o, ...
  function esp_err_t (line 231) | esp_err_t essl_send_slave_intr(essl_handle_t handle, uint32_t intr_mask,...

FILE: esp_serial_slave_link/essl_internal.h
  type essl_dev_t (line 14) | struct essl_dev_t {
  type essl_dev_t (line 38) | typedef struct essl_dev_t essl_dev_t;

FILE: esp_serial_slave_link/essl_sdio.c
  type essl_sdio_context_t (line 66) | typedef struct {
  function esp_err_t (line 87) | static inline esp_err_t essl_sdio_write_byte(sdmmc_card_t *card, uint32_...
  function esp_err_t (line 92) | static inline esp_err_t essl_sdio_write_bytes(sdmmc_card_t *card, uint32...
  function esp_err_t (line 97) | static inline esp_err_t essl_sdio_read_byte(sdmmc_card_t *card, uint32_t...
  function esp_err_t (line 102) | static inline esp_err_t essl_sdio_read_bytes(sdmmc_card_t *card, uint32_...
  function esp_err_t (line 107) | esp_err_t essl_sdio_init_dev(essl_handle_t *out_handle, const essl_sdio_...
  function esp_err_t (line 140) | esp_err_t essl_sdio_deinit_dev(essl_handle_t handle)
  function esp_err_t (line 149) | esp_err_t essl_sdio_init(void *arg, uint32_t wait_ms)
  function esp_err_t (line 257) | esp_err_t essl_sdio_wait_for_ready(void *arg, uint32_t wait_ms)
  function esp_err_t (line 274) | esp_err_t essl_sdio_send_packet(void *arg, const void *start, size_t len...
  function esp_err_t (line 324) | esp_err_t essl_sdio_get_packet(void *arg, void *out_data, size_t size, u...
  function essl_sdio_get_tx_buffer_num (line 370) | uint32_t essl_sdio_get_tx_buffer_num(void *arg)
  function esp_err_t (line 377) | esp_err_t essl_sdio_update_tx_buffer_num(void *arg, uint32_t wait_ms)
  function essl_sdio_get_rx_data_size (line 393) | uint32_t essl_sdio_get_rx_data_size(void *arg)
  function esp_err_t (line 400) | esp_err_t essl_sdio_update_rx_data_size(void *arg, uint32_t wait_ms)
  function esp_err_t (line 417) | esp_err_t essl_sdio_write_reg(void *arg, uint8_t addr, uint8_t value, ui...
  function esp_err_t (line 431) | esp_err_t essl_sdio_read_reg(void *arg, uint8_t add, uint8_t *value_o, u...
  function esp_err_t (line 447) | esp_err_t essl_sdio_clear_intr(void *arg, uint32_t intr_mask, uint32_t w...
  function esp_err_t (line 453) | esp_err_t essl_sdio_get_intr(void *arg, uint32_t *intr_raw, uint32_t *in...
  function esp_err_t (line 477) | esp_err_t essl_sdio_set_intr_ena(void *arg, uint32_t ena_mask, uint32_t ...
  function esp_err_t (line 484) | esp_err_t essl_sdio_get_intr_ena(void *arg, uint32_t *ena_mask_o, uint32...
  function esp_err_t (line 493) | esp_err_t essl_sdio_send_slave_intr(void *arg, uint32_t intr_mask, uint3...
  function esp_err_t (line 500) | esp_err_t essl_sdio_wait_int(void *arg, uint32_t wait_ms)
  function essl_sdio_reset_cnt (line 505) | void essl_sdio_reset_cnt(void *arg)

FILE: esp_serial_slave_link/essl_spi.c
  type essl_spi_context_t (line 37) | typedef struct {
  function get_hd_command (line 56) | static uint16_t get_hd_command(spi_command_t cmd_t, uint32_t flags)
  function get_hd_dummy_bits (line 84) | static int get_hd_dummy_bits(uint32_t flags)
  function esp_err_t (line 99) | esp_err_t essl_spi_rdbuf(spi_device_handle_t spi, uint8_t *out_data, int...
  function esp_err_t (line 115) | esp_err_t essl_spi_rdbuf_polling(spi_device_handle_t spi, uint8_t *out_d...
  function esp_err_t (line 131) | esp_err_t essl_spi_wrbuf(spi_device_handle_t spi, const uint8_t *data, i...
  function esp_err_t (line 146) | esp_err_t essl_spi_wrbuf_polling(spi_device_handle_t spi, const uint8_t ...
  function esp_err_t (line 161) | esp_err_t essl_spi_rddma_seg(spi_device_handle_t spi, uint8_t *out_data,...
  function esp_err_t (line 175) | esp_err_t essl_spi_rddma_done(spi_device_handle_t spi, uint32_t flags)
  function esp_err_t (line 184) | esp_err_t essl_spi_rddma(spi_device_handle_t spi, uint8_t *out_data, int...
  function esp_err_t (line 207) | esp_err_t essl_spi_wrdma_seg(spi_device_handle_t spi, const uint8_t *dat...
  function esp_err_t (line 221) | esp_err_t essl_spi_wrdma_done(spi_device_handle_t spi, uint32_t flags)
  function esp_err_t (line 230) | esp_err_t essl_spi_wrdma(spi_device_handle_t spi, const uint8_t *data, i...
  function esp_err_t (line 252) | esp_err_t essl_spi_int(spi_device_handle_t spi, int int_n, uint32_t flags)
  function esp_err_t (line 267) | esp_err_t essl_spi_init_dev(essl_handle_t *out_handle, const essl_spi_co...
  function esp_err_t (line 297) | esp_err_t essl_spi_deinit_dev(essl_handle_t handle)
  function essl_spi_reset_cnt (line 305) | void essl_spi_reset_cnt(void *arg)
  function esp_err_t (line 315) | esp_err_t essl_spi_read_reg(void *arg, uint8_t addr, uint8_t *out_value,...
  function essl_spi_get_rx_data_size (line 328) | static uint32_t essl_spi_get_rx_data_size(void *arg)
  function esp_err_t (line 335) | static esp_err_t essl_spi_update_rx_data_size(void *arg, uint32_t wait_ms)
  function esp_err_t (line 366) | esp_err_t essl_spi_get_packet(void *arg, void *out_data, size_t size, ui...
  function esp_err_t (line 404) | esp_err_t essl_spi_write_reg(void *arg, uint8_t addr, uint8_t value, uin...
  function essl_spi_get_tx_buffer_num (line 418) | static uint32_t essl_spi_get_tx_buffer_num(void *arg)
  function esp_err_t (line 425) | static esp_err_t essl_spi_update_tx_buffer_num(void *arg, uint32_t wait_ms)
  function esp_err_t (line 456) | esp_err_t essl_spi_send_packet(void *arg, const void *data, size_t size,...

FILE: esp_serial_slave_link/include/esp_serial_slave_link/essl.h
  type essl_dev_t (line 16) | struct essl_dev_t
  type essl_dev_t (line 18) | struct essl_dev_t

FILE: esp_serial_slave_link/include/esp_serial_slave_link/essl_sdio.h
  type essl_sdio_config_t (line 23) | typedef struct {

FILE: esp_serial_slave_link/include/esp_serial_slave_link/essl_sdio_defs.h
  type essl_sdio_def_t (line 18) | typedef struct {

FILE: esp_serial_slave_link/include/esp_serial_slave_link/essl_spi.h
  type essl_spi_config_t (line 19) | typedef struct {

FILE: esp_serial_slave_link/test_apps/main/essl_test.c
  function app_main (line 3) | void app_main(void)

FILE: esp_sysview/src/SEGGER/SEGGER.h
  type SEGGER_BUFFER_DESC (line 152) | typedef struct {
  type SEGGER_CACHE_CONFIG (line 158) | typedef struct {
  type SEGGER_SNPRINTF_CONTEXT (line 165) | typedef struct SEGGER_SNPRINTF_CONTEXT_struct SEGGER_SNPRINTF_CONTEXT;
  type SEGGER_SNPRINTF_CONTEXT_struct (line 167) | struct SEGGER_SNPRINTF_CONTEXT_struct {
  type SEGGER_PRINTF_API (line 173) | typedef struct {
  type SEGGER_PRINTF_FORMATTER (line 181) | typedef struct SEGGER_PRINTF_FORMATTER {
  type SEGGER_BSP_API (line 187) | typedef struct {

FILE: esp_sysview/src/SEGGER/SEGGER_RTT.h
  type SEGGER_RTT_BUFFER_UP (line 321) | typedef struct {
  type SEGGER_RTT_BUFFER_DOWN (line 334) | typedef struct {
  type SEGGER_RTT_CB (line 348) | typedef struct {

FILE: esp_sysview/src/SEGGER/SEGGER_SYSVIEW.c
  type SEGGER_SYSVIEW_PRINTF_DESC (line 236) | typedef struct {
  type SEGGER_SYSVIEW_GLOBALS (line 244) | typedef struct {
  function U8 (line 431) | static U8 *_EncodeData(U8 *pPayload, const char *pSrc, unsigned int NumB...
  function U8 (line 474) | static U8 *_EncodeFloat(U8 *pPayload, float Value)
  function U8 (line 513) | static U8 *_EncodeStr(U8 *pPayload, const char *pText, unsigned int Limit)
  function U8 (line 572) | static U8 *_PreparePacket(U8 *pPacket)
  function _HandleIncomingPacket (line 590) | static void _HandleIncomingPacket(void)
  function _TrySendOverflowPacket (line 658) | static int _TrySendOverflowPacket(void)
  function _SendSyncInfo (line 704) | static void _SendSyncInfo(void)
  function _SendPacket (line 764) | static void _SendPacket(U8 *pStartPacket, U8 *pEndPacket, unsigned int E...
  function _VPrintHost (line 971) | static int _VPrintHost(const char *s, U32 Options, va_list *pParamList)
  function _StoreChar (line 1053) | static void _StoreChar(SEGGER_SYSVIEW_PRINTF_DESC *p, char c)
  function _PrintUnsigned (line 1096) | static void _PrintUnsigned(SEGGER_SYSVIEW_PRINTF_DESC *pBufferDesc, unsi...
  function _PrintInt (line 1188) | static void _PrintInt(SEGGER_SYSVIEW_PRINTF_DESC *pBufferDesc, int v, un...
  function _VPrintTarget (line 1262) | static void _VPrintTarget(const char *sFormat, U32 Options, va_list *pPa...
  function SEGGER_SYSVIEW_Init (line 1454) | void SEGGER_SYSVIEW_Init(U32 SysFreq, U32 CPUFreq, const SEGGER_SYSVIEW_...
  function SEGGER_SYSVIEW_SetRAMBase (line 1506) | void SEGGER_SYSVIEW_SetRAMBase(U32 RAMBaseAddress)
  function SEGGER_SYSVIEW_RecordVoid (line 1521) | void SEGGER_SYSVIEW_RecordVoid(unsigned int EventID)
  function SEGGER_SYSVIEW_RecordU32 (line 1542) | void SEGGER_SYSVIEW_RecordU32(unsigned int EventID, U32 Value)
  function SEGGER_SYSVIEW_RecordU32x2 (line 1566) | void SEGGER_SYSVIEW_RecordU32x2(unsigned int EventID, U32 Para0, U32 Para1)
  function SEGGER_SYSVIEW_RecordU32x3 (line 1592) | void SEGGER_SYSVIEW_RecordU32x3(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x4 (line 1620) | void SEGGER_SYSVIEW_RecordU32x4(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x5 (line 1650) | void SEGGER_SYSVIEW_RecordU32x5(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x6 (line 1682) | void SEGGER_SYSVIEW_RecordU32x6(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x7 (line 1716) | void SEGGER_SYSVIEW_RecordU32x7(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x8 (line 1752) | void SEGGER_SYSVIEW_RecordU32x8(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x9 (line 1790) | void SEGGER_SYSVIEW_RecordU32x9(unsigned int EventID, U32 Para0, U32 Par...
  function SEGGER_SYSVIEW_RecordU32x10 (line 1830) | void SEGGER_SYSVIEW_RecordU32x10(unsigned int EventID, U32 Para0, U32 Pa...
  function SEGGER_SYSVIEW_RecordString (line 1866) | void SEGGER_SYSVIEW_RecordString(unsigned int EventID, const char *pString)
  function SEGGER_SYSVIEW_Stop (line 1959) | void SEGGER_SYSVIEW_Stop(void)
  function U8 (line 1972) | U8 SEGGER_SYSVIEW_Started(void)
  function SEGGER_SYSVIEW_GetChannelID (line 1984) | int SEGGER_SYSVIEW_GetChannelID(void)
  function SEGGER_SYSVIEW_GetSysDesc (line 1997) | void SEGGER_SYSVIEW_GetSysDesc(void)
  function SEGGER_SYSVIEW_SendTaskInfo (line 2026) | void SEGGER_SYSVIEW_SendTaskInfo(const SEGGER_SYSVIEW_TASKINFO *pInfo)
  function SEGGER_SYSVIEW_SendStackInfo (line 2059) | void SEGGER_SYSVIEW_SendStackInfo(const SEGGER_SYSVIEW_STACKINFO *pInfo)
  function SEGGER_SYSVIEW_SampleData (line 2085) | void SEGGER_SYSVIEW_SampleData(const SEGGER_SYSVIEW_DATA_SAMPLE *pInfo)
  function SEGGER_SYSVIEW_SendTaskList (line 2106) | void SEGGER_SYSVIEW_SendTaskList(void)
  function SEGGER_SYSVIEW_SendSysDesc (line 2137) | void SEGGER_SYSVIEW_SendSysDesc(const char *sSysDesc)
  function SEGGER_SYSVIEW_RecordSystime (line 2156) | void SEGGER_SYSVIEW_RecordSystime(void)
  function SEGGER_SYSVIEW_RecordEnterISR (line 2186) | void SEGGER_SYSVIEW_RecordEnterISR(U32 IrqId)
  function SEGGER_SYSVIEW_RecordExitISR (line 2214) | void SEGGER_SYSVIEW_RecordExitISR(void)
  function SEGGER_SYSVIEW_RecordExitISRToScheduler (line 2237) | void SEGGER_SYSVIEW_RecordExitISRToScheduler(void)
  function SEGGER_SYSVIEW_RecordEnterTimer (line 2256) | void SEGGER_SYSVIEW_RecordEnterTimer(U32 TimerId)
  function SEGGER_SYSVIEW_RecordExitTimer (line 2275) | void SEGGER_SYSVIEW_RecordExitTimer(void)
  function SEGGER_SYSVIEW_RecordEndCall (line 2294) | void SEGGER_SYSVIEW_RecordEndCall(unsigned int EventID)
  function SEGGER_SYSVIEW_RecordEndCallU32 (line 2317) | void SEGGER_SYSVIEW_RecordEndCallU32(unsigned int EventID, U32 Para0)
  function SEGGER_SYSVIEW_OnIdle (line 2337) | void SEGGER_SYSVIEW_OnIdle(void)
  function SEGGER_SYSVIEW_OnTaskCreate (line 2357) | void SEGGER_SYSVIEW_OnTaskCreate(U32 TaskId)
  function SEGGER_SYSVIEW_OnTaskTerminate (line 2383) | void SEGGER_SYSVIEW_OnTaskTerminate(U32 TaskId)
  function SEGGER_SYSVIEW_OnTaskStartExec (line 2408) | void SEGGER_SYSVIEW_OnTaskStartExec(U32 TaskId)
  function SEGGER_SYSVIEW_OnTaskStopExec (line 2429) | void SEGGER_SYSVIEW_OnTaskStopExec(void)
  function SEGGER_SYSVIEW_OnTaskStartReady (line 2448) | void SEGGER_SYSVIEW_OnTaskStartReady(U32 TaskId)
  function SEGGER_SYSVIEW_OnTaskStopReady (line 2472) | void SEGGER_SYSVIEW_OnTaskStopReady(U32 TaskId, unsigned int Cause)
  function SEGGER_SYSVIEW_MarkStart (line 2496) | void SEGGER_SYSVIEW_MarkStart(unsigned MarkerId)
  function SEGGER_SYSVIEW_MarkStop (line 2518) | void SEGGER_SYSVIEW_MarkStop(unsigned MarkerId)
  function SEGGER_SYSVIEW_Mark (line 2540) | void SEGGER_SYSVIEW_Mark(unsigned int MarkerId)
  function SEGGER_SYSVIEW_NameMarker (line 2568) | void SEGGER_SYSVIEW_NameMarker(unsigned int MarkerId, const char *sName)
  function SEGGER_SYSVIEW_NameResource (line 2597) | void SEGGER_SYSVIEW_NameResource(U32 ResourceId, const char *sName)
  function SEGGER_SYSVIEW_RegisterData (line 2624) | void SEGGER_SYSVIEW_RegisterData(SEGGER_SYSVIEW_DATA_REGISTER *pInfo)
  function SEGGER_SYSVIEW_HeapDefine (line 2697) | void SEGGER_SYSVIEW_HeapDefine(void *pHeap, void *pBase, unsigned int He...
  function SEGGER_SYSVIEW_HeapAlloc (line 2747) | void SEGGER_SYSVIEW_HeapAlloc(void *pHeap, void *pUserData, unsigned int...
  function SEGGER_SYSVIEW_HeapAllocEx (line 2800) | void SEGGER_SYSVIEW_HeapAllocEx(void *pHeap, void *pUserData, unsigned i...
  function SEGGER_SYSVIEW_HeapFree (line 2831) | void SEGGER_SYSVIEW_HeapFree(void *pHeap, void *pUserData)
  function SEGGER_SYSVIEW_SendPacket (line 2862) | int SEGGER_SYSVIEW_SendPacket(U8 *pPacket, U8 *pPayloadEnd, unsigned int...
  function U8 (line 2890) | U8 *SEGGER_SYSVIEW_EncodeU32(U8 *pPayload, U32 Value)
  function U8 (line 2918) | U8 *SEGGER_SYSVIEW_EncodeString(U8 *pPayload, const char *s, unsigned in...
  function U8 (line 2945) | U8 *SEGGER_SYSVIEW_EncodeData(U8 *pPayload, const char *pSrc, unsigned i...
  function U8 (line 2974) | U8 *SEGGER_SYSVIEW_EncodeId(U8 *pPayload, U32 Id)
  function U32 (line 3003) | U32 SEGGER_SYSVIEW_ShrinkId(U32 Id)
  function SEGGER_SYSVIEW_RegisterModule (line 3026) | void SEGGER_SYSVIEW_RegisterModule(SEGGER_SYSVIEW_MODULE *pModule)
  function SEGGER_SYSVIEW_RecordModuleDescription (line 3065) | void SEGGER_SYSVIEW_RecordModuleDescription(const SEGGER_SYSVIEW_MODULE ...
  function SEGGER_SYSVIEW_SendModule (line 3107) | void SEGGER_SYSVIEW_SendModule(U8 ModuleId)
  function SEGGER_SYSVIEW_SendModuleDescription (line 3150) | void SEGGER_SYSVIEW_SendModuleDescription(void)
  function SEGGER_SYSVIEW_SendNumModules (line 3172) | void SEGGER_SYSVIEW_SendNumModules(void)
  function SEGGER_SYSVIEW_PrintfHostEx (line 3200) | void SEGGER_SYSVIEW_PrintfHostEx(const char *s, U32 Options, ...)
  function SEGGER_SYSVIEW_VPrintfHostEx (line 3238) | void SEGGER_SYSVIEW_VPrintfHostEx(const char *s, U32 Options, va_list *p...
  function SEGGER_SYSVIEW_PrintfHost (line 3269) | void SEGGER_SYSVIEW_PrintfHost(const char *s, ...)
  function SEGGER_SYSVIEW_VPrintfHost (line 3305) | void SEGGER_SYSVIEW_VPrintfHost(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_WarnfHost (line 3337) | void SEGGER_SYSVIEW_WarnfHost(const char *s, ...)
  function SEGGER_SYSVIEW_VWarnfHost (line 3374) | void SEGGER_SYSVIEW_VWarnfHost(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_ErrorfHost (line 3406) | void SEGGER_SYSVIEW_ErrorfHost(const char *s, ...)
  function SEGGER_SYSVIEW_VErrorfHost (line 3443) | void SEGGER_SYSVIEW_VErrorfHost(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_PrintfTargetEx (line 3473) | void SEGGER_SYSVIEW_PrintfTargetEx(const char *s, U32 Options, ...)
  function SEGGER_SYSVIEW_VPrintfTargetEx (line 3495) | void SEGGER_SYSVIEW_VPrintfTargetEx(const char *s, U32 Options, va_list ...
  function SEGGER_SYSVIEW_PrintfTarget (line 3511) | void SEGGER_SYSVIEW_PrintfTarget(const char *s, ...)
  function SEGGER_SYSVIEW_VPrintfTarget (line 3532) | void SEGGER_SYSVIEW_VPrintfTarget(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_WarnfTarget (line 3548) | void SEGGER_SYSVIEW_WarnfTarget(const char *s, ...)
  function SEGGER_SYSVIEW_VWarnfTarget (line 3569) | void SEGGER_SYSVIEW_VWarnfTarget(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_ErrorfTarget (line 3585) | void SEGGER_SYSVIEW_ErrorfTarget(const char *s, ...)
  function SEGGER_SYSVIEW_VErrorfTarget (line 3606) | void SEGGER_SYSVIEW_VErrorfTarget(const char *s, va_list *pParamList)
  function SEGGER_SYSVIEW_Print (line 3622) | void SEGGER_SYSVIEW_Print(const char *s)
  function SEGGER_SYSVIEW_Warn (line 3645) | void SEGGER_SYSVIEW_Warn(const char *s)
  function SEGGER_SYSVIEW_Error (line 3668) | void SEGGER_SYSVIEW_Error(const char *s)
  function SEGGER_SYSVIEW_EnableEvents (line 3691) | void SEGGER_SYSVIEW_EnableEvents(U32 EnableMask)
  function SEGGER_SYSVIEW_DisableEvents (line 3706) | void SEGGER_SYSVIEW_DisableEvents(U32 DisableMask)
  function SEGGER_SYSVIEW_IsStarted (line 3722) | int SEGGER_SYSVIEW_IsStarted(void)

FILE: esp_sysview/src/SEGGER/SEGGER_SYSVIEW.h
  type SEGGER_SYSVIEW_TASKINFO (line 200) | typedef struct {
  type SEGGER_SYSVIEW_STACKINFO (line 209) | typedef struct {
  type SEGGER_SYSVIEW_DATA_SAMPLE (line 216) | typedef struct {
  type SEGGER_SYSVIEW_DATA_TYPE (line 225) | typedef enum {
  type SEGGER_SYSVIEW_DATA_REGISTER (line 231) | typedef struct {
  type SEGGER_SYSVIEW_MODULE (line 242) | typedef struct SEGGER_SYSVIEW_MODULE_STRUCT SEGGER_SYSVIEW_MODULE;
  type SEGGER_SYSVIEW_MODULE_STRUCT (line 244) | struct SEGGER_SYSVIEW_MODULE_STRUCT {
  type SEGGER_SYSVIEW_OS_API (line 284) | typedef struct {

FILE: esp_sysview/src/SEGGER/SEGGER_SYSVIEW_Int.h
  type SEGGER_SYSVIEW_COMMAND_ID (line 85) | typedef enum {

FILE: esp_sysview/src/Sample/FreeRTOSV10.4/Config/esp/SEGGER_SYSVIEW_Config_FreeRTOS.c
  function _cbSendSystemDesc (line 116) | static void _cbSendSystemDesc(void)
  function SEGGER_SYSVIEW_Conf (line 139) | void SEGGER_SYSVIEW_Conf(void)
  function U32 (line 190) | U32 SEGGER_SYSVIEW_X_GetTimestamp(void)
  function SEGGER_SYSVIEW_X_RTT_Lock (line 195) | void SEGGER_SYSVIEW_X_RTT_Lock(void)
  function SEGGER_SYSVIEW_X_RTT_Unlock (line 199) | void SEGGER_SYSVIEW_X_RTT_Unlock(void)
  function SEGGER_SYSVIEW_X_SysView_Lock (line 203) | unsigned SEGGER_SYSVIEW_X_SysView_Lock(void)
  function SEGGER_SYSVIEW_X_SysView_Unlock (line 213) | void SEGGER_SYSVIEW_X_SysView_Unlock(unsigned int_state)

FILE: esp_sysview/src/Sample/FreeRTOSV10.4/SEGGER_SYSVIEW_FreeRTOS.c
  type SYSVIEW_FREERTOS_TASK_STATUS (line 69) | typedef struct SYSVIEW_FREERTOS_TASK_STATUS SYSVIEW_FREERTOS_TASK_STATUS;
  type SYSVIEW_FREERTOS_TASK_STATUS (line 71) | struct SYSVIEW_FREERTOS_TASK_STATUS {
  function _cbSendTaskList (line 91) | static void _cbSendTaskList(void)
  function U64 (line 112) | __attribute__((unused)) static U64 _cbGetTime(void)
  function SYSVIEW_AddTask (line 135) | void SYSVIEW_AddTask(U32 xHandle, const char *pcTaskName, unsigned uxCur...
  function SYSVIEW_UpdateTask (line 170) | void SYSVIEW_UpdateTask(U32 xHandle, const char *pcTaskName, unsigned ux...
  function SYSVIEW_DeleteTask (line 206) | void SYSVIEW_DeleteTask(U32 xHandle)
  function SYSVIEW_SendTaskInfo (line 248) | void SYSVIEW_SendTaskInfo(U32 TaskID, const char *sName, unsigned Prio, ...

FILE: esp_sysview/src/esp/SEGGER_RTT_esp.c
  function SEGGER_RTT_ESP_FlushNoLock (line 57) | void SEGGER_RTT_ESP_FlushNoLock(void)
  function SEGGER_RTT_ESP_Flush (line 95) | void SEGGER_RTT_ESP_Flush(void)
  function SEGGER_RTT_ReadNoLock (line 119) | unsigned SEGGER_RTT_ReadNoLock(unsigned BufferIndex, void *pData, unsign...
  function SEGGER_RTT_WriteSkipNoLock (line 154) | unsigned SEGGER_RTT_WriteSkipNoLock(unsigned BufferIndex, const void *pB...
  function SEGGER_RTT_ConfigUpBuffer (line 262) | int SEGGER_RTT_ConfigUpBuffer(unsigned BufferIndex, const char *sName, v...
  function SEGGER_RTT_ConfigDownBuffer (line 293) | int SEGGER_RTT_ConfigDownBuffer(unsigned BufferIndex, const char *sName,...

FILE: esp_sysview/src/esp/SEGGER_SYSVIEW_esp.c
  function SEGGER_SYSVIEW_ESP_SetEncoder (line 42) | int SEGGER_SYSVIEW_ESP_SetEncoder(void *encoder)
  function SEGGER_SYSVIEW_ESP_GetDestCpu (line 96) | int SEGGER_SYSVIEW_ESP_GetDestCpu(void)

FILE: esp_sysview/src/esp/adapter_encoder_sysview.c
  function esp_err_t (line 39) | static esp_err_t init(esp_trace_encoder_t *enc, const void *enc_cfg)
  function panic_handler (line 100) | static void panic_handler(esp_trace_encoder_t *enc, const void *info)
  function take_lock (line 114) | static unsigned int take_lock(esp_trace_encoder_t *enc, uint32_t tmo_us)
  function give_lock (line 128) | static void give_lock(esp_trace_encoder_t *enc, unsigned int_state)

FILE: esp_sysview/src/esp/adapter_encoder_sysview.h
  type esp_trace_sysview_config_t (line 17) | typedef struct {
  type sysview_encoder_ctx_t (line 39) | typedef struct {

FILE: esp_sysview/src/ext/heap_trace_module.c
  function esp_err_t (line 30) | esp_err_t esp_sysview_heap_trace_start(uint32_t tmo)
  function esp_err_t (line 51) | esp_err_t esp_sysview_heap_trace_stop(void)
  function esp_sysview_heap_trace_alloc (line 58) | void esp_sysview_heap_trace_alloc(const void *addr, uint32_t size, const...
  function esp_sysview_heap_trace_free (line 76) | void esp_sysview_heap_trace_free(const void *addr, const void *callers)
  function esp_err_t (line 93) | esp_err_t esp_sysview_flush(void)

FILE: esp_sysview/src/ext/heap_trace_tohost.c
  function esp_err_t (line 16) | esp_err_t heap_trace_init_tohost(void)
  function esp_err_t (line 24) | esp_err_t heap_trace_start(heap_trace_mode_t mode_param)
  function esp_err_t (line 34) | esp_err_t heap_trace_stop(void)
  function esp_err_t (line 41) | esp_err_t heap_trace_resume(void)
  function heap_trace_get_count (line 46) | size_t heap_trace_get_count(void)
  function esp_err_t (line 51) | esp_err_t heap_trace_get(size_t index, heap_trace_record_t *record)
  function esp_err_t (line 56) | esp_err_t heap_trace_summary(heap_trace_summary_t *summary)
  function heap_trace_dump (line 61) | void heap_trace_dump(void)
  function heap_trace_dump_caps (line 66) | void heap_trace_dump_caps(__attribute__((unused)) const uint32_t caps)
  function HEAP_IRAM_ATTR (line 72) | static HEAP_IRAM_ATTR void record_allocation(const heap_trace_record_t *...
  function HEAP_IRAM_ATTR (line 85) | static HEAP_IRAM_ATTR void record_free(void *p, void **callers)

FILE: esp_sysview/src/ext/logging.c
  function esp_sysview_vprintf (line 14) | int esp_sysview_vprintf(const char *format, va_list args)

FILE: expat/test_apps/main/test_expat.c
  type user_data_t (line 11) | typedef struct {
  function insert_space (line 17) | static void insert_space(user_data_t *user_data)
  function start_element (line 32) | static void XMLCALL start_element(void *userData, const XML_Char *name, ...
  function end_element (line 46) | static void XMLCALL end_element(void *userData, const XML_Char *name)
  function data_handler (line 59) | static void data_handler(void *userData, const XML_Char *s, int len)

FILE: expat/test_apps/main/test_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: expat/test_apps/pytest_expat.py
  function test_expat (line 5) | def test_expat(dut) -> None:

FILE: fmt/examples/hello_fmt/main/hello_fmt.cpp
  function app_main (line 9) | void app_main()

FILE: fmt/examples/hello_fmt/pytest_fmt.py
  function test_fmt_example (line 9) | def test_fmt_example(dut: Dut) -> None:

FILE: freetype/examples/freetype-example/main/freetype-example.c
  function app_main (line 30) | void app_main(void)
  function init_filesystem (line 38) | static void init_filesystem(void)
  function init_freetype (line 49) | static void init_freetype(void)
  function load_font (line 60) | static void load_font(void)
  function render_text (line 75) | static void render_text(void)

FILE: freetype/examples/freetype-example/pytest_freetype.py
  function test_freetype_example (line 12) | def test_freetype_example(dut: Dut) -> None:

FILE: iqmath/_IQNfunctions/_IQNasin_acos.c
  function __STATIC_INLINE (line 70) | __STATIC_INLINE int_fast32_t __IQNasin(int_fast32_t iqNInput, const int8...
  function _IQ29asin (line 201) | int32_t _IQ29asin(int32_t a)
  function _IQ28asin (line 212) | int32_t _IQ28asin(int32_t a)
  function _IQ27asin (line 223) | int32_t _IQ27asin(int32_t a)
  function _IQ26asin (line 234) | int32_t _IQ26asin(int32_t a)
  function _IQ25asin (line 245) | int32_t _IQ25asin(int32_t a)
  function _IQ24asin (line 256) | int32_t _IQ24asin(int32_t a)
  function _IQ23asin (line 267) | int32_t _IQ23asin(int32_t a)
  function _IQ22asin (line 278) | int32_t _IQ22asin(int32_t a)
  function _IQ21asin (line 289) | int32_t _IQ21asin(int32_t a)
  function _IQ20asin (line 300) | int32_t _IQ20asin(int32_t a)
  function _IQ19asin (line 311) | int32_t _IQ19asin(int32_t a)
  function _IQ18asin (line 322) | int32_t _IQ18asin(int32_t a)
  function _IQ17asin (line 333) | int32_t _IQ17asin(int32_t a)
  function _IQ16asin (line 344) | int32_t _IQ16asin(int32_t a)
  function _IQ15asin (line 355) | int32_t _IQ15asin(int32_t a)
  function _IQ14asin (line 366) | int32_t _IQ14asin(int32_t a)
  function _IQ13asin (line 377) | int32_t _IQ13asin(int32_t a)
  function _IQ12asin (line 388) | int32_t _IQ12asin(int32_t a)
  function _IQ11asin (line 399) | int32_t _IQ11asin(int32_t a)
  function _IQ10asin (line 410) | int32_t _IQ10asin(int32_t a)
  function _IQ9asin (line 421) | int32_t _IQ9asin(int32_t a)
  function _IQ8asin (line 432) | int32_t _IQ8asin(int32_t a)
  function _IQ7asin (line 443) | int32_t _IQ7asin(int32_t a)
  function _IQ6asin (line 454) | int32_t _IQ6asin(int32_t a)
  function _IQ5asin (line 465) | int32_t _IQ5asin(int32_t a)
  function _IQ4asin (line 476) | int32_t _IQ4asin(int32_t a)
  function _IQ3asin (line 487) | int32_t _IQ3asin(int32_t a)
  function _IQ2asin (line 498) | int32_t _IQ2asin(int32_t a)
  function _IQ1asin (line 509) | int32_t _IQ1asin(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNatan2.c
  function __STATIC_INLINE (line 71) | __STATIC_INLINE int_fast32_t __IQNatan2(int_fast32_t iqNInputY, int_fast...
  function __STATIC_INLINE (line 222) | __STATIC_INLINE int_fast32_t __IQNatan2(int_fast32_t iqNInputY, int_fast...
  function _IQ29atan2 (line 320) | int32_t _IQ29atan2(int32_t y, int32_t x)
  function _IQ28atan2 (line 333) | int32_t _IQ28atan2(int32_t y, int32_t x)
  function _IQ27atan2 (line 346) | int32_t _IQ27atan2(int32_t y, int32_t x)
  function _IQ26atan2 (line 359) | int32_t _IQ26atan2(int32_t y, int32_t x)
  function _IQ25atan2 (line 372) | int32_t _IQ25atan2(int32_t y, int32_t x)
  function _IQ24atan2 (line 385) | int32_t _IQ24atan2(int32_t y, int32_t x)
  function _IQ23atan2 (line 398) | int32_t _IQ23atan2(int32_t y, int32_t x)
  function _IQ22atan2 (line 411) | int32_t _IQ22atan2(int32_t y, int32_t x)
  function _IQ21atan2 (line 424) | int32_t _IQ21atan2(int32_t y, int32_t x)
  function _IQ20atan2 (line 437) | int32_t _IQ20atan2(int32_t y, int32_t x)
  function _IQ19atan2 (line 450) | int32_t _IQ19atan2(int32_t y, int32_t x)
  function _IQ18atan2 (line 463) | int32_t _IQ18atan2(int32_t y, int32_t x)
  function _IQ17atan2 (line 476) | int32_t _IQ17atan2(int32_t y, int32_t x)
  function _IQ16atan2 (line 489) | int32_t _IQ16atan2(int32_t y, int32_t x)
  function _IQ15atan2 (line 502) | int32_t _IQ15atan2(int32_t y, int32_t x)
  function _IQ14atan2 (line 515) | int32_t _IQ14atan2(int32_t y, int32_t x)
  function _IQ13atan2 (line 528) | int32_t _IQ13atan2(int32_t y, int32_t x)
  function _IQ12atan2 (line 541) | int32_t _IQ12atan2(int32_t y, int32_t x)
  function _IQ11atan2 (line 554) | int32_t _IQ11atan2(int32_t y, int32_t x)
  function _IQ10atan2 (line 567) | int32_t _IQ10atan2(int32_t y, int32_t x)
  function _IQ9atan2 (line 580) | int32_t _IQ9atan2(int32_t y, int32_t x)
  function _IQ8atan2 (line 593) | int32_t _IQ8atan2(int32_t y, int32_t x)
  function _IQ7atan2 (line 606) | int32_t _IQ7atan2(int32_t y, int32_t x)
  function _IQ6atan2 (line 619) | int32_t _IQ6atan2(int32_t y, int32_t x)
  function _IQ5atan2 (line 632) | int32_t _IQ5atan2(int32_t y, int32_t x)
  function _IQ4atan2 (line 645) | int32_t _IQ4atan2(int32_t y, int32_t x)
  function _IQ3atan2 (line 658) | int32_t _IQ3atan2(int32_t y, int32_t x)
  function _IQ2atan2 (line 671) | int32_t _IQ2atan2(int32_t y, int32_t x)
  function _IQ1atan2 (line 684) | int32_t _IQ1atan2(int32_t y, int32_t x)
  function _IQ31atan2PU (line 699) | int32_t _IQ31atan2PU(int32_t y, int32_t x)
  function _IQ30atan2PU (line 712) | int32_t _IQ30atan2PU(int32_t y, int32_t x)
  function _IQ29atan2PU (line 725) | int32_t _IQ29atan2PU(int32_t y, int32_t x)
  function _IQ28atan2PU (line 738) | int32_t _IQ28atan2PU(int32_t y, int32_t x)
  function _IQ27atan2PU (line 751) | int32_t _IQ27atan2PU(int32_t y, int32_t x)
  function _IQ26atan2PU (line 764) | int32_t _IQ26atan2PU(int32_t y, int32_t x)
  function _IQ25atan2PU (line 777) | int32_t _IQ25atan2PU(int32_t y, int32_t x)
  function _IQ24atan2PU (line 790) | int32_t _IQ24atan2PU(int32_t y, int32_t x)
  function _IQ23atan2PU (line 803) | int32_t _IQ23atan2PU(int32_t y, int32_t x)
  function _IQ22atan2PU (line 816) | int32_t _IQ22atan2PU(int32_t y, int32_t x)
  function _IQ21atan2PU (line 829) | int32_t _IQ21atan2PU(int32_t y, int32_t x)
  function _IQ20atan2PU (line 842) | int32_t _IQ20atan2PU(int32_t y, int32_t x)
  function _IQ19atan2PU (line 855) | int32_t _IQ19atan2PU(int32_t y, int32_t x)
  function _IQ18atan2PU (line 868) | int32_t _IQ18atan2PU(int32_t y, int32_t x)
  function _IQ17atan2PU (line 881) | int32_t _IQ17atan2PU(int32_t y, int32_t x)
  function _IQ16atan2PU (line 894) | int32_t _IQ16atan2PU(int32_t y, int32_t x)
  function _IQ15atan2PU (line 907) | int32_t _IQ15atan2PU(int32_t y, int32_t x)
  function _IQ14atan2PU (line 920) | int32_t _IQ14atan2PU(int32_t y, int32_t x)
  function _IQ13atan2PU (line 933) | int32_t _IQ13atan2PU(int32_t y, int32_t x)
  function _IQ12atan2PU (line 946) | int32_t _IQ12atan2PU(int32_t y, int32_t x)
  function _IQ11atan2PU (line 959) | int32_t _IQ11atan2PU(int32_t y, int32_t x)
  function _IQ10atan2PU (line 972) | int32_t _IQ10atan2PU(int32_t y, int32_t x)
  function _IQ9atan2PU (line 985) | int32_t _IQ9atan2PU(int32_t y, int32_t x)
  function _IQ8atan2PU (line 998) | int32_t _IQ8atan2PU(int32_t y, int32_t x)
  function _IQ7atan2PU (line 1011) | int32_t _IQ7atan2PU(int32_t y, int32_t x)
  function _IQ6atan2PU (line 1024) | int32_t _IQ6atan2PU(int32_t y, int32_t x)
  function _IQ5atan2PU (line 1037) | int32_t _IQ5atan2PU(int32_t y, int32_t x)
  function _IQ4atan2PU (line 1050) | int32_t _IQ4atan2PU(int32_t y, int32_t x)
  function _IQ3atan2PU (line 1063) | int32_t _IQ3atan2PU(int32_t y, int32_t x)
  function _IQ2atan2PU (line 1076) | int32_t _IQ2atan2PU(int32_t y, int32_t x)
  function _IQ1atan2PU (line 1089) | int32_t _IQ1atan2PU(int32_t y, int32_t x)

FILE: iqmath/_IQNfunctions/_IQNdiv.c
  function _IQ31div (line 13) | int32_t _IQ31div(int32_t a, int32_t b)
  function _IQ30div (line 25) | int32_t _IQ30div(int32_t a, int32_t b)
  function _IQ29div (line 37) | int32_t _IQ29div(int32_t a, int32_t b)
  function _IQ28div (line 49) | int32_t _IQ28div(int32_t a, int32_t b)
  function _IQ27div (line 61) | int32_t _IQ27div(int32_t a, int32_t b)
  function _IQ26div (line 73) | int32_t _IQ26div(int32_t a, int32_t b)
  function _IQ25div (line 85) | int32_t _IQ25div(int32_t a, int32_t b)
  function _IQ24div (line 97) | int32_t _IQ24div(int32_t a, int32_t b)
  function _IQ23div (line 109) | int32_t _IQ23div(int32_t a, int32_t b)
  function _IQ22div (line 121) | int32_t _IQ22div(int32_t a, int32_t b)
  function _IQ21div (line 133) | int32_t _IQ21div(int32_t a, int32_t b)
  function _IQ20div (line 145) | int32_t _IQ20div(int32_t a, int32_t b)
  function _IQ19div (line 157) | int32_t _IQ19div(int32_t a, int32_t b)
  function _IQ18div (line 169) | int32_t _IQ18div(int32_t a, int32_t b)
  function _IQ17div (line 181) | int32_t _IQ17div(int32_t a, int32_t b)
  function _IQ16div (line 193) | int32_t _IQ16div(int32_t a, int32_t b)
  function _IQ15div (line 205) | int32_t _IQ15div(int32_t a, int32_t b)
  function _IQ14div (line 217) | int32_t _IQ14div(int32_t a, int32_t b)
  function _IQ13div (line 229) | int32_t _IQ13div(int32_t a, int32_t b)
  function _IQ12div (line 241) | int32_t _IQ12div(int32_t a, int32_t b)
  function _IQ11div (line 253) | int32_t _IQ11div(int32_t a, int32_t b)
  function _IQ10div (line 265) | int32_t _IQ10div(int32_t a, int32_t b)
  function _IQ9div (line 277) | int32_t _IQ9div(int32_t a, int32_t b)
  function _IQ8div (line 289) | int32_t _IQ8div(int32_t a, int32_t b)
  function _IQ7div (line 301) | int32_t _IQ7div(int32_t a, int32_t b)
  function _IQ6div (line 313) | int32_t _IQ6div(int32_t a, int32_t b)
  function _IQ5div (line 325) | int32_t _IQ5div(int32_t a, int32_t b)
  function _IQ4div (line 337) | int32_t _IQ4div(int32_t a, int32_t b)
  function _IQ3div (line 349) | int32_t _IQ3div(int32_t a, int32_t b)
  function _IQ2div (line 361) | int32_t _IQ2div(int32_t a, int32_t b)
  function _IQ1div (line 373) | int32_t _IQ1div(int32_t a, int32_t b)
  function _IQ31div (line 387) | int32_t _IQ31div(int32_t a, int32_t b)
  function _IQ30div (line 399) | int32_t _IQ30div(int32_t a, int32_t b)
  function _IQ29div (line 411) | int32_t _IQ29div(int32_t a, int32_t b)
  function _IQ28div (line 423) | int32_t _IQ28div(int32_t a, int32_t b)
  function _IQ27div (line 435) | int32_t _IQ27div(int32_t a, int32_t b)
  function _IQ26div (line 447) | int32_t _IQ26div(int32_t a, int32_t b)
  function _IQ25div (line 459) | int32_t _IQ25div(int32_t a, int32_t b)
  function _IQ24div (line 471) | int32_t _IQ24div(int32_t a, int32_t b)
  function _IQ23div (line 483) | int32_t _IQ23div(int32_t a, int32_t b)
  function _IQ22div (line 495) | int32_t _IQ22div(int32_t a, int32_t b)
  function _IQ21div (line 507) | int32_t _IQ21div(int32_t a, int32_t b)
  function _IQ20div (line 519) | int32_t _IQ20div(int32_t a, int32_t b)
  function _IQ19div (line 531) | int32_t _IQ19div(int32_t a, int32_t b)
  function _IQ18div (line 543) | int32_t _IQ18div(int32_t a, int32_t b)
  function _IQ17div (line 555) | int32_t _IQ17div(int32_t a, int32_t b)
  function _IQ16div (line 567) | int32_t _IQ16div(int32_t a, int32_t b)
  function _IQ15div (line 579) | int32_t _IQ15div(int32_t a, int32_t b)
  function _IQ14div (line 591) | int32_t _IQ14div(int32_t a, int32_t b)
  function _IQ13div (line 603) | int32_t _IQ13div(int32_t a, int32_t b)
  function _IQ12div (line 615) | int32_t _IQ12div(int32_t a, int32_t b)
  function _IQ11div (line 627) | int32_t _IQ11div(int32_t a, int32_t b)
  function _IQ10div (line 639) | int32_t _IQ10div(int32_t a, int32_t b)
  function _IQ9div (line 651) | int32_t _IQ9div(int32_t a, int32_t b)
  function _IQ8div (line 663) | int32_t _IQ8div(int32_t a, int32_t b)
  function _IQ7div (line 675) | int32_t _IQ7div(int32_t a, int32_t b)
  function _IQ6div (line 687) | int32_t _IQ6div(int32_t a, int32_t b)
  function _IQ5div (line 699) | int32_t _IQ5div(int32_t a, int32_t b)
  function _IQ4div (line 711) | int32_t _IQ4div(int32_t a, int32_t b)
  function _IQ3div (line 723) | int32_t _IQ3div(int32_t a, int32_t b)
  function _IQ2div (line 735) | int32_t _IQ2div(int32_t a, int32_t b)
  function _IQ1div (line 747) | int32_t _IQ1div(int32_t a, int32_t b)
  function _UIQ31div (line 762) | uint32_t _UIQ31div(uint32_t a, uint32_t b)

FILE: iqmath/_IQNfunctions/_IQNdiv.h
  function __STATIC_INLINE (line 39) | __STATIC_INLINE int_fast32_t __IQNdiv(int_fast32_t iqNInput1, int_fast32...
  function __STATIC_INLINE (line 181) | __STATIC_INLINE int_fast32_t __IQNdiv_MathACL(int_fast32_t iqNInput1, in...

FILE: iqmath/_IQNfunctions/_IQNexp.c
  function __STATIC_INLINE (line 32) | __STATIC_INLINE int_fast32_t __IQNexp(int_fast32_t iqNInput, const uint_...
  function _IQ30exp (line 147) | int32_t _IQ30exp(int32_t a)
  function _IQ29exp (line 158) | int32_t _IQ29exp(int32_t a)
  function _IQ28exp (line 169) | int32_t _IQ28exp(int32_t a)
  function _IQ27exp (line 180) | int32_t _IQ27exp(int32_t a)
  function _IQ26exp (line 191) | int32_t _IQ26exp(int32_t a)
  function _IQ25exp (line 202) | int32_t _IQ25exp(int32_t a)
  function _IQ24exp (line 213) | int32_t _IQ24exp(int32_t a)
  function _IQ23exp (line 224) | int32_t _IQ23exp(int32_t a)
  function _IQ22exp (line 235) | int32_t _IQ22exp(int32_t a)
  function _IQ21exp (line 246) | int32_t _IQ21exp(int32_t a)
  function _IQ20exp (line 257) | int32_t _IQ20exp(int32_t a)
  function _IQ19exp (line 268) | int32_t _IQ19exp(int32_t a)
  function _IQ18exp (line 279) | int32_t _IQ18exp(int32_t a)
  function _IQ17exp (line 290) | int32_t _IQ17exp(int32_t a)
  function _IQ16exp (line 301) | int32_t _IQ16exp(int32_t a)
  function _IQ15exp (line 312) | int32_t _IQ15exp(int32_t a)
  function _IQ14exp (line 323) | int32_t _IQ14exp(int32_t a)
  function _IQ13exp (line 334) | int32_t _IQ13exp(int32_t a)
  function _IQ12exp (line 345) | int32_t _IQ12exp(int32_t a)
  function _IQ11exp (line 356) | int32_t _IQ11exp(int32_t a)
  function _IQ10exp (line 367) | int32_t _IQ10exp(int32_t a)
  function _IQ9exp (line 378) | int32_t _IQ9exp(int32_t a)
  function _IQ8exp (line 389) | int32_t _IQ8exp(int32_t a)
  function _IQ7exp (line 400) | int32_t _IQ7exp(int32_t a)
  function _IQ6exp (line 411) | int32_t _IQ6exp(int32_t a)
  function _IQ5exp (line 422) | int32_t _IQ5exp(int32_t a)
  function _IQ4exp (line 433) | int32_t _IQ4exp(int32_t a)
  function _IQ3exp (line 444) | int32_t _IQ3exp(int32_t a)
  function _IQ2exp (line 455) | int32_t _IQ2exp(int32_t a)
  function _IQ1exp (line 466) | int32_t _IQ1exp(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNfrac.c
  function __STATIC_INLINE (line 25) | __STATIC_INLINE int_fast32_t __IQNfrac(int_fast32_t iqNInput, int8_t q_v...
  function _IQ30frac (line 41) | int32_t _IQ30frac(int32_t a)
  function _IQ29frac (line 52) | int32_t _IQ29frac(int32_t a)
  function _IQ28frac (line 63) | int32_t _IQ28frac(int32_t a)
  function _IQ27frac (line 74) | int32_t _IQ27frac(int32_t a)
  function _IQ26frac (line 85) | int32_t _IQ26frac(int32_t a)
  function _IQ25frac (line 96) | int32_t _IQ25frac(int32_t a)
  function _IQ24frac (line 107) | int32_t _IQ24frac(int32_t a)
  function _IQ23frac (line 118) | int32_t _IQ23frac(int32_t a)
  function _IQ22frac (line 129) | int32_t _IQ22frac(int32_t a)
  function _IQ21frac (line 140) | int32_t _IQ21frac(int32_t a)
  function _IQ20frac (line 151) | int32_t _IQ20frac(int32_t a)
  function _IQ19frac (line 162) | int32_t _IQ19frac(int32_t a)
  function _IQ18frac (line 173) | int32_t _IQ18frac(int32_t a)
  function _IQ17frac (line 184) | int32_t _IQ17frac(int32_t a)
  function _IQ16frac (line 195) | int32_t _IQ16frac(int32_t a)
  function _IQ15frac (line 206) | int32_t _IQ15frac(int32_t a)
  function _IQ14frac (line 217) | int32_t _IQ14frac(int32_t a)
  function _IQ13frac (line 228) | int32_t _IQ13frac(int32_t a)
  function _IQ12frac (line 239) | int32_t _IQ12frac(int32_t a)
  function _IQ11frac (line 250) | int32_t _IQ11frac(int32_t a)
  function _IQ10frac (line 261) | int32_t _IQ10frac(int32_t a)
  function _IQ9frac (line 272) | int32_t _IQ9frac(int32_t a)
  function _IQ8frac (line 283) | int32_t _IQ8frac(int32_t a)
  function _IQ7frac (line 294) | int32_t _IQ7frac(int32_t a)
  function _IQ6frac (line 305) | int32_t _IQ6frac(int32_t a)
  function _IQ5frac (line 316) | int32_t _IQ5frac(int32_t a)
  function _IQ4frac (line 327) | int32_t _IQ4frac(int32_t a)
  function _IQ3frac (line 338) | int32_t _IQ3frac(int32_t a)
  function _IQ2frac (line 349) | int32_t _IQ2frac(int32_t a)
  function _IQ1frac (line 360) | int32_t _IQ1frac(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNlog.c
  function __STATIC_INLINE (line 28) | __STATIC_INLINE int_fast32_t __IQNlog(int_fast32_t iqNInput, const int_f...
  function _IQ30log (line 128) | int32_t _IQ30log(int32_t a)
  function _IQ29log (line 139) | int32_t _IQ29log(int32_t a)
  function _IQ28log (line 150) | int32_t _IQ28log(int32_t a)
  function _IQ27log (line 161) | int32_t _IQ27log(int32_t a)
  function _IQ26log (line 172) | int32_t _IQ26log(int32_t a)
  function _IQ25log (line 183) | int32_t _IQ25log(int32_t a)
  function _IQ24log (line 194) | int32_t _IQ24log(int32_t a)
  function _IQ23log (line 205) | int32_t _IQ23log(int32_t a)
  function _IQ22log (line 216) | int32_t _IQ22log(int32_t a)
  function _IQ21log (line 227) | int32_t _IQ21log(int32_t a)
  function _IQ20log (line 238) | int32_t _IQ20log(int32_t a)
  function _IQ19log (line 249) | int32_t _IQ19log(int32_t a)
  function _IQ18log (line 260) | int32_t _IQ18log(int32_t a)
  function _IQ17log (line 271) | int32_t _IQ17log(int32_t a)
  function _IQ16log (line 282) | int32_t _IQ16log(int32_t a)
  function _IQ15log (line 293) | int32_t _IQ15log(int32_t a)
  function _IQ14log (line 304) | int32_t _IQ14log(int32_t a)
  function _IQ13log (line 315) | int32_t _IQ13log(int32_t a)
  function _IQ12log (line 326) | int32_t _IQ12log(int32_t a)
  function _IQ11log (line 337) | int32_t _IQ11log(int32_t a)
  function _IQ10log (line 348) | int32_t _IQ10log(int32_t a)
  function _IQ9log (line 359) | int32_t _IQ9log(int32_t a)
  function _IQ8log (line 370) | int32_t _IQ8log(int32_t a)
  function _IQ7log (line 381) | int32_t _IQ7log(int32_t a)
  function _IQ6log (line 392) | int32_t _IQ6log(int32_t a)
  function _IQ5log (line 403) | int32_t _IQ5log(int32_t a)
  function _IQ4log (line 414) | int32_t _IQ4log(int32_t a)
  function _IQ3log (line 425) | int32_t _IQ3log(int32_t a)
  function _IQ2log (line 436) | int32_t _IQ2log(int32_t a)
  function _IQ1log (line 447) | int32_t _IQ1log(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNmpy.c
  function _IQ31mpy (line 17) | int32_t _IQ31mpy(int32_t a, int32_t b)
  function _IQ30mpy (line 29) | int32_t _IQ30mpy(int32_t a, int32_t b)
  function _IQ29mpy (line 41) | int32_t _IQ29mpy(int32_t a, int32_t b)
  function _IQ28mpy (line 53) | int32_t _IQ28mpy(int32_t a, int32_t b)
  function _IQ27mpy (line 65) | int32_t _IQ27mpy(int32_t a, int32_t b)
  function _IQ26mpy (line 77) | int32_t _IQ26mpy(int32_t a, int32_t b)
  function _IQ25mpy (line 89) | int32_t _IQ25mpy(int32_t a, int32_t b)
  function _IQ24mpy (line 101) | int32_t _IQ24mpy(int32_t a, int32_t b)
  function _IQ23mpy (line 113) | int32_t _IQ23mpy(int32_t a, int32_t b)
  function _IQ22mpy (line 125) | int32_t _IQ22mpy(int32_t a, int32_t b)
  function _IQ21mpy (line 137) | int32_t _IQ21mpy(int32_t a, int32_t b)
  function _IQ20mpy (line 149) | int32_t _IQ20mpy(int32_t a, int32_t b)
  function _IQ19mpy (line 161) | int32_t _IQ19mpy(int32_t a, int32_t b)
  function _IQ18mpy (line 173) | int32_t _IQ18mpy(int32_t a, int32_t b)
  function _IQ17mpy (line 185) | int32_t _IQ17mpy(int32_t a, int32_t b)
  function _IQ16mpy (line 197) | int32_t _IQ16mpy(int32_t a, int32_t b)
  function _IQ15mpy (line 209) | int32_t _IQ15mpy(int32_t a, int32_t b)
  function _IQ14mpy (line 221) | int32_t _IQ14mpy(int32_t a, int32_t b)
  function _IQ13mpy (line 233) | int32_t _IQ13mpy(int32_t a, int32_t b)
  function _IQ12mpy (line 245) | int32_t _IQ12mpy(int32_t a, int32_t b)
  function _IQ11mpy (line 257) | int32_t _IQ11mpy(int32_t a, int32_t b)
  function _IQ10mpy (line 269) | int32_t _IQ10mpy(int32_t a, int32_t b)
  function _IQ9mpy (line 281) | int32_t _IQ9mpy(int32_t a, int32_t b)
  function _IQ8mpy (line 293) | int32_t _IQ8mpy(int32_t a, int32_t b)
  function _IQ7mpy (line 305) | int32_t _IQ7mpy(int32_t a, int32_t b)
  function _IQ6mpy (line 317) | int32_t _IQ6mpy(int32_t a, int32_t b)
  function _IQ5mpy (line 329) | int32_t _IQ5mpy(int32_t a, int32_t b)
  function _IQ4mpy (line 341) | int32_t _IQ4mpy(int32_t a, int32_t b)
  function _IQ3mpy (line 353) | int32_t _IQ3mpy(int32_t a, int32_t b)
  function _IQ2mpy (line 365) | int32_t _IQ2mpy(int32_t a, int32_t b)
  function _IQ1mpy (line 377) | int32_t _IQ1mpy(int32_t a, int32_t b)

FILE: iqmath/_IQNfunctions/_IQNmpy.h
  function __STATIC_INLINE (line 28) | __STATIC_INLINE int_fast32_t __IQNmpy(int_fast32_t iqNInput1, int_fast32...
  function __STATIC_INLINE (line 52) | __STATIC_INLINE int_fast32_t __IQNmpy(int_fast32_t iqNInput1, int_fast32...

FILE: iqmath/_IQNfunctions/_IQNmpyIQX.c
  function __STATIC_INLINE (line 34) | __STATIC_INLINE int_fast32_t __IQNmpyIQX(int_fast32_t a, int n1, int_fas...
  function _IQ30mpyIQX (line 79) | int32_t _IQ30mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ29mpyIQX (line 94) | int32_t _IQ29mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ28mpyIQX (line 109) | int32_t _IQ28mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ27mpyIQX (line 124) | int32_t _IQ27mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ26mpyIQX (line 139) | int32_t _IQ26mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ25mpyIQX (line 154) | int32_t _IQ25mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ24mpyIQX (line 169) | int32_t _IQ24mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ23mpyIQX (line 184) | int32_t _IQ23mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ22mpyIQX (line 199) | int32_t _IQ22mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ21mpyIQX (line 214) | int32_t _IQ21mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ20mpyIQX (line 229) | int32_t _IQ20mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ19mpyIQX (line 244) | int32_t _IQ19mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ18mpyIQX (line 259) | int32_t _IQ18mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ17mpyIQX (line 274) | int32_t _IQ17mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ16mpyIQX (line 289) | int32_t _IQ16mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ15mpyIQX (line 304) | int32_t _IQ15mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ14mpyIQX (line 319) | int32_t _IQ14mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ13mpyIQX (line 334) | int32_t _IQ13mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ12mpyIQX (line 349) | int32_t _IQ12mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ11mpyIQX (line 364) | int32_t _IQ11mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ10mpyIQX (line 379) | int32_t _IQ10mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ9mpyIQX (line 394) | int32_t _IQ9mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ8mpyIQX (line 409) | int32_t _IQ8mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ7mpyIQX (line 424) | int32_t _IQ7mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ6mpyIQX (line 439) | int32_t _IQ6mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ5mpyIQX (line 454) | int32_t _IQ5mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ4mpyIQX (line 469) | int32_t _IQ4mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ3mpyIQX (line 484) | int32_t _IQ3mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ2mpyIQX (line 499) | int32_t _IQ2mpyIQX(int32_t a, int n1, int32_t b, int n2)
  function _IQ1mpyIQX (line 514) | int32_t _IQ1mpyIQX(int32_t a, int n1, int32_t b, int n2)

FILE: iqmath/_IQNfunctions/_IQNrepeat.c
  function __STATIC_INLINE (line 21) | __STATIC_INLINE int_fast32_t __IQopRepeat(int_fast32_t iqNInput1, int_fa...
  function _IQrepeat (line 41) | int32_t _IQrepeat(int32_t A, int32_t B)

FILE: iqmath/_IQNfunctions/_IQNrmpy.c
  function __STATIC_INLINE (line 29) | __STATIC_INLINE int_fast32_t __IQNrmpy(int_fast32_t iqNInput1, int_fast3...
  function _IQ31rmpy (line 48) | int32_t _IQ31rmpy(int32_t a, int32_t b)
  function _IQ30rmpy (line 60) | int32_t _IQ30rmpy(int32_t a, int32_t b)
  function _IQ29rmpy (line 72) | int32_t _IQ29rmpy(int32_t a, int32_t b)
  function _IQ28rmpy (line 84) | int32_t _IQ28rmpy(int32_t a, int32_t b)
  function _IQ27rmpy (line 96) | int32_t _IQ27rmpy(int32_t a, int32_t b)
  function _IQ26rmpy (line 108) | int32_t _IQ26rmpy(int32_t a, int32_t b)
  function _IQ25rmpy (line 120) | int32_t _IQ25rmpy(int32_t a, int32_t b)
  function _IQ24rmpy (line 132) | int32_t _IQ24rmpy(int32_t a, int32_t b)
  function _IQ23rmpy (line 144) | int32_t _IQ23rmpy(int32_t a, int32_t b)
  function _IQ22rmpy (line 156) | int32_t _IQ22rmpy(int32_t a, int32_t b)
  function _IQ21rmpy (line 168) | int32_t _IQ21rmpy(int32_t a, int32_t b)
  function _IQ20rmpy (line 180) | int32_t _IQ20rmpy(int32_t a, int32_t b)
  function _IQ19rmpy (line 192) | int32_t _IQ19rmpy(int32_t a, int32_t b)
  function _IQ18rmpy (line 204) | int32_t _IQ18rmpy(int32_t a, int32_t b)
  function _IQ17rmpy (line 216) | int32_t _IQ17rmpy(int32_t a, int32_t b)
  function _IQ16rmpy (line 228) | int32_t _IQ16rmpy(int32_t a, int32_t b)
  function _IQ15rmpy (line 240) | int32_t _IQ15rmpy(int32_t a, int32_t b)
  function _IQ14rmpy (line 252) | int32_t _IQ14rmpy(int32_t a, int32_t b)
  function _IQ13rmpy (line 264) | int32_t _IQ13rmpy(int32_t a, int32_t b)
  function _IQ12rmpy (line 276) | int32_t _IQ12rmpy(int32_t a, int32_t b)
  function _IQ11rmpy (line 288) | int32_t _IQ11rmpy(int32_t a, int32_t b)
  function _IQ10rmpy (line 300) | int32_t _IQ10rmpy(int32_t a, int32_t b)
  function _IQ9rmpy (line 312) | int32_t _IQ9rmpy(int32_t a, int32_t b)
  function _IQ8rmpy (line 324) | int32_t _IQ8rmpy(int32_t a, int32_t b)
  function _IQ7rmpy (line 336) | int32_t _IQ7rmpy(int32_t a, int32_t b)
  function _IQ6rmpy (line 348) | int32_t _IQ6rmpy(int32_t a, int32_t b)
  function _IQ5rmpy (line 360) | int32_t _IQ5rmpy(int32_t a, int32_t b)
  function _IQ4rmpy (line 372) | int32_t _IQ4rmpy(int32_t a, int32_t b)
  function _IQ3rmpy (line 384) | int32_t _IQ3rmpy(int32_t a, int32_t b)
  function _IQ2rmpy (line 396) | int32_t _IQ2rmpy(int32_t a, int32_t b)
  function _IQ1rmpy (line 408) | int32_t _IQ1rmpy(int32_t a, int32_t b)

FILE: iqmath/_IQNfunctions/_IQNrsmpy.c
  function __STATIC_INLINE (line 30) | __STATIC_INLINE int_fast32_t __IQNrsmpy(int_fast32_t iqNInput1, int_fast...
  function _IQ31rsmpy (line 55) | int32_t _IQ31rsmpy(int32_t a, int32_t b)
  function _IQ30rsmpy (line 67) | int32_t _IQ30rsmpy(int32_t a, int32_t b)
  function _IQ29rsmpy (line 79) | int32_t _IQ29rsmpy(int32_t a, int32_t b)
  function _IQ28rsmpy (line 91) | int32_t _IQ28rsmpy(int32_t a, int32_t b)
  function _IQ27rsmpy (line 103) | int32_t _IQ27rsmpy(int32_t a, int32_t b)
  function _IQ26rsmpy (line 115) | int32_t _IQ26rsmpy(int32_t a, int32_t b)
  function _IQ25rsmpy (line 127) | int32_t _IQ25rsmpy(int32_t a, int32_t b)
  function _IQ24rsmpy (line 139) | int32_t _IQ24rsmpy(int32_t a, int32_t b)
  function _IQ23rsmpy (line 151) | int32_t _IQ23rsmpy(int32_t a, int32_t b)
  function _IQ22rsmpy (line 163) | int32_t _IQ22rsmpy(int32_t a, int32_t b)
  function _IQ21rsmpy (line 175) | int32_t _IQ21rsmpy(int32_t a, int32_t b)
  function _IQ20rsmpy (line 187) | int32_t _IQ20rsmpy(int32_t a, int32_t b)
  function _IQ19rsmpy (line 199) | int32_t _IQ19rsmpy(int32_t a, int32_t b)
  function _IQ18rsmpy (line 211) | int32_t _IQ18rsmpy(int32_t a, int32_t b)
  function _IQ17rsmpy (line 223) | int32_t _IQ17rsmpy(int32_t a, int32_t b)
  function _IQ16rsmpy (line 235) | int32_t _IQ16rsmpy(int32_t a, int32_t b)
  function _IQ15rsmpy (line 247) | int32_t _IQ15rsmpy(int32_t a, int32_t b)
  function _IQ14rsmpy (line 259) | int32_t _IQ14rsmpy(int32_t a, int32_t b)
  function _IQ13rsmpy (line 271) | int32_t _IQ13rsmpy(int32_t a, int32_t b)
  function _IQ12rsmpy (line 283) | int32_t _IQ12rsmpy(int32_t a, int32_t b)
  function _IQ11rsmpy (line 295) | int32_t _IQ11rsmpy(int32_t a, int32_t b)
  function _IQ10rsmpy (line 307) | int32_t _IQ10rsmpy(int32_t a, int32_t b)
  function _IQ9rsmpy (line 319) | int32_t _IQ9rsmpy(int32_t a, int32_t b)
  function _IQ8rsmpy (line 331) | int32_t _IQ8rsmpy(int32_t a, int32_t b)
  function _IQ7rsmpy (line 343) | int32_t _IQ7rsmpy(int32_t a, int32_t b)
  function _IQ6rsmpy (line 355) | int32_t _IQ6rsmpy(int32_t a, int32_t b)
  function _IQ5rsmpy (line 367) | int32_t _IQ5rsmpy(int32_t a, int32_t b)
  function _IQ4rsmpy (line 379) | int32_t _IQ4rsmpy(int32_t a, int32_t b)
  function _IQ3rsmpy (line 391) | int32_t _IQ3rsmpy(int32_t a, int32_t b)
  function _IQ2rsmpy (line 403) | int32_t _IQ2rsmpy(int32_t a, int32_t b)
  function _IQ1rsmpy (line 415) | int32_t _IQ1rsmpy(int32_t a, int32_t b)

FILE: iqmath/_IQNfunctions/_IQNsin_cos.c
  function __STATIC_INLINE (line 83) | __STATIC_INLINE int_fast32_t __IQNcalcSin(uint_fast32_t uiq31Input)
  function __STATIC_INLINE (line 139) | __STATIC_INLINE int_fast32_t __IQNcalcCos(uint_fast32_t uiq31Input)
  function __STATIC_INLINE (line 199) | __STATIC_INLINE int_fast32_t __IQNsin_cos(int_fast32_t iqNInput, const i...
  function __STATIC_INLINE (line 341) | __STATIC_INLINE int_fast32_t __IQNsin_cos(int_fast32_t iqNInput, const i...
  function _IQ29sin (line 397) | int32_t _IQ29sin(int32_t a)
  function _IQ28sin (line 408) | int32_t _IQ28sin(int32_t a)
  function _IQ27sin (line 419) | int32_t _IQ27sin(int32_t a)
  function _IQ26sin (line 430) | int32_t _IQ26sin(int32_t a)
  function _IQ25sin (line 441) | int32_t _IQ25sin(int32_t a)
  function _IQ24sin (line 452) | int32_t _IQ24sin(int32_t a)
  function _IQ23sin (line 463) | int32_t _IQ23sin(int32_t a)
  function _IQ22sin (line 474) | int32_t _IQ22sin(int32_t a)
  function _IQ21sin (line 485) | int32_t _IQ21sin(int32_t a)
  function _IQ20sin (line 496) | int32_t _IQ20sin(int32_t a)
  function _IQ19sin (line 507) | int32_t _IQ19sin(int32_t a)
  function _IQ18sin (line 518) | int32_t _IQ18sin(int32_t a)
  function _IQ17sin (line 529) | int32_t _IQ17sin(int32_t a)
  function _IQ16sin (line 540) | int32_t _IQ16sin(int32_t a)
  function _IQ15sin (line 551) | int32_t _IQ15sin(int32_t a)
  function _IQ14sin (line 562) | int32_t _IQ14sin(int32_t a)
  function _IQ13sin (line 573) | int32_t _IQ13sin(int32_t a)
  function _IQ12sin (line 584) | int32_t _IQ12sin(int32_t a)
  function _IQ11sin (line 595) | int32_t _IQ11sin(int32_t a)
  function _IQ10sin (line 606) | int32_t _IQ10sin(int32_t a)
  function _IQ9sin (line 617) | int32_t _IQ9sin(int32_t a)
  function _IQ8sin (line 628) | int32_t _IQ8sin(int32_t a)
  function _IQ7sin (line 639) | int32_t _IQ7sin(int32_t a)
  function _IQ6sin (line 650) | int32_t _IQ6sin(int32_t a)
  function _IQ5sin (line 661) | int32_t _IQ5sin(int32_t a)
  function _IQ4sin (line 672) | int32_t _IQ4sin(int32_t a)
  function _IQ3sin (line 683) | int32_t _IQ3sin(int32_t a)
  function _IQ2sin (line 694) | int32_t _IQ2sin(int32_t a)
  function _IQ1sin (line 705) | int32_t _IQ1sin(int32_t a)
  function _IQ29cos (line 718) | int32_t _IQ29cos(int32_t a)
  function _IQ28cos (line 729) | int32_t _IQ28cos(int32_t a)
  function _IQ27cos (line 740) | int32_t _IQ27cos(int32_t a)
  function _IQ26cos (line 751) | int32_t _IQ26cos(int32_t a)
  function _IQ25cos (line 762) | int32_t _IQ25cos(int32_t a)
  function _IQ24cos (line 773) | int32_t _IQ24cos(int32_t a)
  function _IQ23cos (line 784) | int32_t _IQ23cos(int32_t a)
  function _IQ22cos (line 795) | int32_t _IQ22cos(int32_t a)
  function _IQ21cos (line 806) | int32_t _IQ21cos(int32_t a)
  function _IQ20cos (line 817) | int32_t _IQ20cos(int32_t a)
  function _IQ19cos (line 828) | int32_t _IQ19cos(int32_t a)
  function _IQ18cos (line 839) | int32_t _IQ18cos(int32_t a)
  function _IQ17cos (line 850) | int32_t _IQ17cos(int32_t a)
  function _IQ16cos (line 861) | int32_t _IQ16cos(int32_t a)
  function _IQ15cos (line 872) | int32_t _IQ15cos(int32_t a)
  function _IQ14cos (line 883) | int32_t _IQ14cos(int32_t a)
  function _IQ13cos (line 894) | int32_t _IQ13cos(int32_t a)
  function _IQ12cos (line 905) | int32_t _IQ12cos(int32_t a)
  function _IQ11cos (line 916) | int32_t _IQ11cos(int32_t a)
  function _IQ10cos (line 927) | int32_t _IQ10cos(int32_t a)
  function _IQ9cos (line 938) | int32_t _IQ9cos(int32_t a)
  function _IQ8cos (line 949) | int32_t _IQ8cos(int32_t a)
  function _IQ7cos (line 960) | int32_t _IQ7cos(int32_t a)
  function _IQ6cos (line 971) | int32_t _IQ6cos(int32_t a)
  function _IQ5cos (line 982) | int32_t _IQ5cos(int32_t a)
  function _IQ4cos (line 993) | int32_t _IQ4cos(int32_t a)
  function _IQ3cos (line 1004) | int32_t _IQ3cos(int32_t a)
  function _IQ2cos (line 1015) | int32_t _IQ2cos(int32_t a)
  function _IQ1cos (line 1026) | int32_t _IQ1cos(int32_t a)
  function _IQ31sinPU (line 1039) | int32_t _IQ31sinPU(int32_t a)
  function _IQ30sinPU (line 1050) | int32_t _IQ30sinPU(int32_t a)
  function _IQ29sinPU (line 1061) | int32_t _IQ29sinPU(int32_t a)
  function _IQ28sinPU (line 1072) | int32_t _IQ28sinPU(int32_t a)
  function _IQ27sinPU (line 1083) | int32_t _IQ27sinPU(int32_t a)
  function _IQ26sinPU (line 1094) | int32_t _IQ26sinPU(int32_t a)
  function _IQ25sinPU (line 1105) | int32_t _IQ25sinPU(int32_t a)
  function _IQ24sinPU (line 1116) | int32_t _IQ24sinPU(int32_t a)
  function _IQ23sinPU (line 1127) | int32_t _IQ23sinPU(int32_t a)
  function _IQ22sinPU (line 1138) | int32_t _IQ22sinPU(int32_t a)
  function _IQ21sinPU (line 1149) | int32_t _IQ21sinPU(int32_t a)
  function _IQ20sinPU (line 1160) | int32_t _IQ20sinPU(int32_t a)
  function _IQ19sinPU (line 1171) | int32_t _IQ19sinPU(int32_t a)
  function _IQ18sinPU (line 1182) | int32_t _IQ18sinPU(int32_t a)
  function _IQ17sinPU (line 1193) | int32_t _IQ17sinPU(int32_t a)
  function _IQ16sinPU (line 1204) | int32_t _IQ16sinPU(int32_t a)
  function _IQ15sinPU (line 1215) | int32_t _IQ15sinPU(int32_t a)
  function _IQ14sinPU (line 1226) | int32_t _IQ14sinPU(int32_t a)
  function _IQ13sinPU (line 1237) | int32_t _IQ13sinPU(int32_t a)
  function _IQ12sinPU (line 1248) | int32_t _IQ12sinPU(int32_t a)
  function _IQ11sinPU (line 1259) | int32_t _IQ11sinPU(int32_t a)
  function _IQ10sinPU (line 1270) | int32_t _IQ10sinPU(int32_t a)
  function _IQ9sinPU (line 1281) | int32_t _IQ9sinPU(int32_t a)
  function _IQ8sinPU (line 1292) | int32_t _IQ8sinPU(int32_t a)
  function _IQ7sinPU (line 1303) | int32_t _IQ7sinPU(int32_t a)
  function _IQ6sinPU (line 1314) | int32_t _IQ6sinPU(int32_t a)
  function _IQ5sinPU (line 1325) | int32_t _IQ5sinPU(int32_t a)
  function _IQ4sinPU (line 1336) | int32_t _IQ4sinPU(int32_t a)
  function _IQ3sinPU (line 1347) | int32_t _IQ3sinPU(int32_t a)
  function _IQ2sinPU (line 1358) | int32_t _IQ2sinPU(int32_t a)
  function _IQ1sinPU (line 1369) | int32_t _IQ1sinPU(int32_t a)
  function _IQ31cosPU (line 1382) | int32_t _IQ31cosPU(int32_t a)
  function _IQ30cosPU (line 1393) | int32_t _IQ30cosPU(int32_t a)
  function _IQ29cosPU (line 1404) | int32_t _IQ29cosPU(int32_t a)
  function _IQ28cosPU (line 1415) | int32_t _IQ28cosPU(int32_t a)
  function _IQ27cosPU (line 1426) | int32_t _IQ27cosPU(int32_t a)
  function _IQ26cosPU (line 1437) | int32_t _IQ26cosPU(int32_t a)
  function _IQ25cosPU (line 1448) | int32_t _IQ25cosPU(int32_t a)
  function _IQ24cosPU (line 1459) | int32_t _IQ24cosPU(int32_t a)
  function _IQ23cosPU (line 1470) | int32_t _IQ23cosPU(int32_t a)
  function _IQ22cosPU (line 1481) | int32_t _IQ22cosPU(int32_t a)
  function _IQ21cosPU (line 1492) | int32_t _IQ21cosPU(int32_t a)
  function _IQ20cosPU (line 1503) | int32_t _IQ20cosPU(int32_t a)
  function _IQ19cosPU (line 1514) | int32_t _IQ19cosPU(int32_t a)
  function _IQ18cosPU (line 1525) | int32_t _IQ18cosPU(int32_t a)
  function _IQ17cosPU (line 1536) | int32_t _IQ17cosPU(int32_t a)
  function _IQ16cosPU (line 1547) | int32_t _IQ16cosPU(int32_t a)
  function _IQ15cosPU (line 1558) | int32_t _IQ15cosPU(int32_t a)
  function _IQ14cosPU (line 1569) | int32_t _IQ14cosPU(int32_t a)
  function _IQ13cosPU (line 1580) | int32_t _IQ13cosPU(int32_t a)
  function _IQ12cosPU (line 1591) | int32_t _IQ12cosPU(int32_t a)
  function _IQ11cosPU (line 1602) | int32_t _IQ11cosPU(int32_t a)
  function _IQ10cosPU (line 1613) | int32_t _IQ10cosPU(int32_t a)
  function _IQ9cosPU (line 1624) | int32_t _IQ9cosPU(int32_t a)
  function _IQ8cosPU (line 1635) | int32_t _IQ8cosPU(int32_t a)
  function _IQ7cosPU (line 1646) | int32_t _IQ7cosPU(int32_t a)
  function _IQ6cosPU (line 1657) | int32_t _IQ6cosPU(int32_t a)
  function _IQ5cosPU (line 1668) | int32_t _IQ5cosPU(int32_t a)
  function _IQ4cosPU (line 1679) | int32_t _IQ4cosPU(int32_t a)
  function _IQ3cosPU (line 1690) | int32_t _IQ3cosPU(int32_t a)
  function _IQ2cosPU (line 1701) | int32_t _IQ2cosPU(int32_t a)
  function _IQ1cosPU (line 1712) | int32_t _IQ1cosPU(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNsqrt.c
  function __STATIC_INLINE (line 68) | __STATIC_INLINE int_fast32_t __IQNsqrt(int_fast32_t iqNInputX, int_fast3...
  function __STATIC_INLINE (line 298) | __STATIC_INLINE int_fast32_t __IQNsqrt_MathACL(int_fast32_t iqNInputX, c...
  function _IQ31sqrt (line 363) | int32_t _IQ31sqrt(int32_t a)
  function _IQ30sqrt (line 374) | int32_t _IQ30sqrt(int32_t a)
  function _IQ29sqrt (line 385) | int32_t _IQ29sqrt(int32_t a)
  function _IQ28sqrt (line 396) | int32_t _IQ28sqrt(int32_t a)
  function _IQ27sqrt (line 407) | int32_t _IQ27sqrt(int32_t a)
  function _IQ26sqrt (line 418) | int32_t _IQ26sqrt(int32_t a)
  function _IQ25sqrt (line 429) | int32_t _IQ25sqrt(int32_t a)
  function _IQ24sqrt (line 440) | int32_t _IQ24sqrt(int32_t a)
  function _IQ23sqrt (line 451) | int32_t _IQ23sqrt(int32_t a)
  function _IQ22sqrt (line 462) | int32_t _IQ22sqrt(int32_t a)
  function _IQ21sqrt (line 473) | int32_t _IQ21sqrt(int32_t a)
  function _IQ20sqrt (line 484) | int32_t _IQ20sqrt(int32_t a)
  function _IQ19sqrt (line 495) | int32_t _IQ19sqrt(int32_t a)
  function _IQ18sqrt (line 506) | int32_t _IQ18sqrt(int32_t a)
  function _IQ17sqrt (line 517) | int32_t _IQ17sqrt(int32_t a)
  function _IQ16sqrt (line 528) | int32_t _IQ16sqrt(int32_t a)
  function _IQ15sqrt (line 539) | int32_t _IQ15sqrt(int32_t a)
  function _IQ14sqrt (line 550) | int32_t _IQ14sqrt(int32_t a)
  function _IQ13sqrt (line 561) | int32_t _IQ13sqrt(int32_t a)
  function _IQ12sqrt (line 572) | int32_t _IQ12sqrt(int32_t a)
  function _IQ11sqrt (line 583) | int32_t _IQ11sqrt(int32_t a)
  function _IQ10sqrt (line 594) | int32_t _IQ10sqrt(int32_t a)
  function _IQ9sqrt (line 605) | int32_t _IQ9sqrt(int32_t a)
  function _IQ8sqrt (line 616) | int32_t _IQ8sqrt(int32_t a)
  function _IQ7sqrt (line 627) | int32_t _IQ7sqrt(int32_t a)
  function _IQ6sqrt (line 638) | int32_t _IQ6sqrt(int32_t a)
  function _IQ5sqrt (line 649) | int32_t _IQ5sqrt(int32_t a)
  function _IQ4sqrt (line 660) | int32_t _IQ4sqrt(int32_t a)
  function _IQ3sqrt (line 671) | int32_t _IQ3sqrt(int32_t a)
  function _IQ2sqrt (line 682) | int32_t _IQ2sqrt(int32_t a)
  function _IQ1sqrt (line 693) | int32_t _IQ1sqrt(int32_t a)
  function _IQ31sqrt (line 706) | int32_t _IQ31sqrt(int32_t a)
  function _IQ30sqrt (line 717) | int32_t _IQ30sqrt(int32_t a)
  function _IQ29sqrt (line 728) | int32_t _IQ29sqrt(int32_t a)
  function _IQ28sqrt (line 739) | int32_t _IQ28sqrt(int32_t a)
  function _IQ27sqrt (line 750) | int32_t _IQ27sqrt(int32_t a)
  function _IQ26sqrt (line 761) | int32_t _IQ26sqrt(int32_t a)
  function _IQ25sqrt (line 772) | int32_t _IQ25sqrt(int32_t a)
  function _IQ24sqrt (line 783) | int32_t _IQ24sqrt(int32_t a)
  function _IQ23sqrt (line 794) | int32_t _IQ23sqrt(int32_t a)
  function _IQ22sqrt (line 805) | int32_t _IQ22sqrt(int32_t a)
  function _IQ21sqrt (line 816) | int32_t _IQ21sqrt(int32_t a)
  function _IQ20sqrt (line 827) | int32_t _IQ20sqrt(int32_t a)
  function _IQ19sqrt (line 838) | int32_t _IQ19sqrt(int32_t a)
  function _IQ18sqrt (line 849) | int32_t _IQ18sqrt(int32_t a)
  function _IQ17sqrt (line 860) | int32_t _IQ17sqrt(int32_t a)
  function _IQ16sqrt (line 871) | int32_t _IQ16sqrt(int32_t a)
  function _IQ15sqrt (line 882) | int32_t _IQ15sqrt(int32_t a)
  function _IQ14sqrt (line 893) | int32_t _IQ14sqrt(int32_t a)
  function _IQ13sqrt (line 904) | int32_t _IQ13sqrt(int32_t a)
  function _IQ12sqrt (line 915) | int32_t _IQ12sqrt(int32_t a)
  function _IQ11sqrt (line 926) | int32_t _IQ11sqrt(int32_t a)
  function _IQ10sqrt (line 937) | int32_t _IQ10sqrt(int32_t a)
  function _IQ9sqrt (line 948) | int32_t _IQ9sqrt(int32_t a)
  function _IQ8sqrt (line 959) | int32_t _IQ8sqrt(int32_t a)
  function _IQ7sqrt (line 970) | int32_t _IQ7sqrt(int32_t a)
  function _IQ6sqrt (line 981) | int32_t _IQ6sqrt(int32_t a)
  function _IQ5sqrt (line 992) | int32_t _IQ5sqrt(int32_t a)
  function _IQ4sqrt (line 1003) | int32_t _IQ4sqrt(int32_t a)
  function _IQ3sqrt (line 1014) | int32_t _IQ3sqrt(int32_t a)
  function _IQ2sqrt (line 1025) | int32_t _IQ2sqrt(int32_t a)
  function _IQ1sqrt (line 1036) | int32_t _IQ1sqrt(int32_t a)
  function _IQ30isqrt (line 1050) | int32_t _IQ30isqrt(int32_t a)
  function _IQ29isqrt (line 1061) | int32_t _IQ29isqrt(int32_t a)
  function _IQ28isqrt (line 1072) | int32_t _IQ28isqrt(int32_t a)
  function _IQ27isqrt (line 1083) | int32_t _IQ27isqrt(int32_t a)
  function _IQ26isqrt (line 1094) | int32_t _IQ26isqrt(int32_t a)
  function _IQ25isqrt (line 1105) | int32_t _IQ25isqrt(int32_t a)
  function _IQ24isqrt (line 1116) | int32_t _IQ24isqrt(int32_t a)
  function _IQ23isqrt (line 1127) | int32_t _IQ23isqrt(int32_t a)
  function _IQ22isqrt (line 1138) | int32_t _IQ22isqrt(int32_t a)
  function _IQ21isqrt (line 1149) | int32_t _IQ21isqrt(int32_t a)
  function _IQ20isqrt (line 1160) | int32_t _IQ20isqrt(int32_t a)
  function _IQ19isqrt (line 1171) | int32_t _IQ19isqrt(int32_t a)
  function _IQ18isqrt (line 1182) | int32_t _IQ18isqrt(int32_t a)
  function _IQ17isqrt (line 1193) | int32_t _IQ17isqrt(int32_t a)
  function _IQ16isqrt (line 1204) | int32_t _IQ16isqrt(int32_t a)
  function _IQ15isqrt (line 1215) | int32_t _IQ15isqrt(int32_t a)
  function _IQ14isqrt (line 1226) | int32_t _IQ14isqrt(int32_t a)
  function _IQ13isqrt (line 1237) | int32_t _IQ13isqrt(int32_t a)
  function _IQ12isqrt (line 1248) | int32_t _IQ12isqrt(int32_t a)
  function _IQ11isqrt (line 1259) | int32_t _IQ11isqrt(int32_t a)
  function _IQ10isqrt (line 1270) | int32_t _IQ10isqrt(int32_t a)
  function _IQ9isqrt (line 1281) | int32_t _IQ9isqrt(int32_t a)
  function _IQ8isqrt (line 1292) | int32_t _IQ8isqrt(int32_t a)
  function _IQ7isqrt (line 1303) | int32_t _IQ7isqrt(int32_t a)
  function _IQ6isqrt (line 1314) | int32_t _IQ6isqrt(int32_t a)
  function _IQ5isqrt (line 1325) | int32_t _IQ5isqrt(int32_t a)
  function _IQ4isqrt (line 1336) | int32_t _IQ4isqrt(int32_t a)
  function _IQ3isqrt (line 1347) | int32_t _IQ3isqrt(int32_t a)
  function _IQ2isqrt (line 1358) | int32_t _IQ2isqrt(int32_t a)
  function _IQ1isqrt (line 1369) | int32_t _IQ1isqrt(int32_t a)
  function _IQmag (line 1383) | int32_t _IQmag(int32_t a, int32_t b)
  function _IQ30imag (line 1397) | int32_t _IQ30imag(int32_t a, int32_t b)
  function _IQ29imag (line 1409) | int32_t _IQ29imag(int32_t a, int32_t b)
  function _IQ28imag (line 1421) | int32_t _IQ28imag(int32_t a, int32_t b)
  function _IQ27imag (line 1433) | int32_t _IQ27imag(int32_t a, int32_t b)
  function _IQ26imag (line 1445) | int32_t _IQ26imag(int32_t a, int32_t b)
  function _IQ25imag (line 1457) | int32_t _IQ25imag(int32_t a, int32_t b)
  function _IQ24imag (line 1469) | int32_t _IQ24imag(int32_t a, int32_t b)
  function _IQ23imag (line 1481) | int32_t _IQ23imag(int32_t a, int32_t b)
  function _IQ22imag (line 1493) | int32_t _IQ22imag(int32_t a, int32_t b)
  function _IQ21imag (line 1505) | int32_t _IQ21imag(int32_t a, int32_t b)
  function _IQ20imag (line 1517) | int32_t _IQ20imag(int32_t a, int32_t b)
  function _IQ19imag (line 1529) | int32_t _IQ19imag(int32_t a, int32_t b)
  function _IQ18imag (line 1541) | int32_t _IQ18imag(int32_t a, int32_t b)
  function _IQ17imag (line 1553) | int32_t _IQ17imag(int32_t a, int32_t b)
  function _IQ16imag (line 1565) | int32_t _IQ16imag(int32_t a, int32_t b)
  function _IQ15imag (line 1577) | int32_t _IQ15imag(int32_t a, int32_t b)
  function _IQ14imag (line 1589) | int32_t _IQ14imag(int32_t a, int32_t b)
  function _IQ13imag (line 1601) | int32_t _IQ13imag(int32_t a, int32_t b)
  function _IQ12imag (line 1613) | int32_t _IQ12imag(int32_t a, int32_t b)
  function _IQ11imag (line 1625) | int32_t _IQ11imag(int32_t a, int32_t b)
  function _IQ10imag (line 1637) | int32_t _IQ10imag(int32_t a, int32_t b)
  function _IQ9imag (line 1649) | int32_t _IQ9imag(int32_t a, int32_t b)
  function _IQ8imag (line 1661) | int32_t _IQ8imag(int32_t a, int32_t b)
  function _IQ7imag (line 1673) | int32_t _IQ7imag(int32_t a, int32_t b)
  function _IQ6imag (line 1685) | int32_t _IQ6imag(int32_t a, int32_t b)
  function _IQ5imag (line 1697) | int32_t _IQ5imag(int32_t a, int32_t b)
  function _IQ4imag (line 1709) | int32_t _IQ4imag(int32_t a, int32_t b)
  function _IQ3imag (line 1721) | int32_t _IQ3imag(int32_t a, int32_t b)
  function _IQ2imag (line 1733) | int32_t _IQ2imag(int32_t a, int32_t b)
  function _IQ1imag (line 1745) | int32_t _IQ1imag(int32_t a, int32_t b)

FILE: iqmath/_IQNfunctions/_IQNtoF.c
  function __STATIC_INLINE (line 26) | __STATIC_INLINE float __IQNtoF(int_fast32_t iqNInput, int8_t q_value)
  function _IQ30toF (line 81) | float _IQ30toF(int32_t a)
  function _IQ29toF (line 92) | float _IQ29toF(int32_t a)
  function _IQ28toF (line 103) | float _IQ28toF(int32_t a)
  function _IQ27toF (line 114) | float _IQ27toF(int32_t a)
  function _IQ26toF (line 125) | float _IQ26toF(int32_t a)
  function _IQ25toF (line 136) | float _IQ25toF(int32_t a)
  function _IQ24toF (line 147) | float _IQ24toF(int32_t a)
  function _IQ23toF (line 158) | float _IQ23toF(int32_t a)
  function _IQ22toF (line 169) | float _IQ22toF(int32_t a)
  function _IQ21toF (line 180) | float _IQ21toF(int32_t a)
  function _IQ20toF (line 191) | float _IQ20toF(int32_t a)
  function _IQ19toF (line 202) | float _IQ19toF(int32_t a)
  function _IQ18toF (line 213) | float _IQ18toF(int32_t a)
  function _IQ17toF (line 224) | float _IQ17toF(int32_t a)
  function _IQ16toF (line 235) | float _IQ16toF(int32_t a)
  function _IQ15toF (line 246) | float _IQ15toF(int32_t a)
  function _IQ14toF (line 257) | float _IQ14toF(int32_t a)
  function _IQ13toF (line 268) | float _IQ13toF(int32_t a)
  function _IQ12toF (line 279) | float _IQ12toF(int32_t a)
  function _IQ11toF (line 290) | float _IQ11toF(int32_t a)
  function _IQ10toF (line 301) | float _IQ10toF(int32_t a)
  function _IQ9toF (line 312) | float _IQ9toF(int32_t a)
  function _IQ8toF (line 323) | float _IQ8toF(int32_t a)
  function _IQ7toF (line 334) | float _IQ7toF(int32_t a)
  function _IQ6toF (line 345) | float _IQ6toF(int32_t a)
  function _IQ5toF (line 356) | float _IQ5toF(int32_t a)
  function _IQ4toF (line 367) | float _IQ4toF(int32_t a)
  function _IQ3toF (line 378) | float _IQ3toF(int32_t a)
  function _IQ2toF (line 389) | float _IQ2toF(int32_t a)
  function _IQ1toF (line 400) | float _IQ1toF(int32_t a)

FILE: iqmath/_IQNfunctions/_IQNtoa.c
  function int_fast16_t (line 31) | int_fast16_t __IQNtoa(char *string, const char *format, int_fast32_t iqN...
  function _IQ31toa (line 186) | int16_t _IQ31toa(char *string, const char *format, int32_t iqNInput)
  function _IQ30toa (line 200) | int16_t _IQ30toa(char *string, const char *format, int32_t iqNInput)
  function _IQ29toa (line 214) | int16_t _IQ29toa(char *string, const char *format, int32_t iqNInput)
  function _IQ28toa (line 228) | int16_t _IQ28toa(char *string, const char *format, int32_t iqNInput)
  function _IQ27toa (line 242) | int16_t _IQ27toa(char *string, const char *format, int32_t iqNInput)
  function _IQ26toa (line 256) | int16_t _IQ26toa(char *string, const char *format, int32_t iqNInput)
  function _IQ25toa (line 270) | int16_t _IQ25toa(char *string, const char *format, int32_t iqNInput)
  function _IQ24toa (line 284) | int16_t _IQ24toa(char *string, const char *format, int32_t iqNInput)
  function _IQ23toa (line 298) | int16_t _IQ23toa(char *string, const char *format, int32_t iqNInput)
  function _IQ22toa (line 312) | int16_t _IQ22toa(char *string, const char *format, int32_t iqNInput)
  function _IQ21toa (line 326) | int16_t _IQ21toa(char *string, const char *format, int32_t iqNInput)
  function _IQ20toa (line 340) | int16_t _IQ20toa(char *string, const char *format, int32_t iqNInput)
  function _IQ19toa (line 354) | int16_t _IQ19toa(char *string, const char *format, int32_t iqNInput)
  function _IQ18toa (line 368) | int16_t _IQ18toa(char *string, const char *format, int32_t iqNInput)
  function _IQ17toa (line 382) | int16_t _IQ17toa(char *string, const char *format, int32_t iqNInput)
  function _IQ16toa (line 396) | int16_t _IQ16toa(char *string, const char *format, int32_t iqNInput)
  function _IQ15toa (line 410) | int16_t _IQ15toa(char *string, const char *format, int32_t iqNInput)
  function _IQ14toa (line 424) | int16_t _IQ14toa(char *string, const char *format, int32_t iqNInput)
  function _IQ13toa (line 438) | int16_t _IQ13toa(char *string, const char *format, int32_t iqNInput)
  function _IQ12toa (line 452) | int16_t _IQ12toa(char *string, const char *format, int32_t iqNInput)
  function _IQ11toa (line 466) | int16_t _IQ11toa(char *string, const char *format, int32_t iqNInput)
  function _IQ10toa (line 480) | int16_t _IQ10toa(char *string, const char *format, int32_t iqNInput)
  function _IQ9toa (line 494) | int16_t _IQ9toa(char *string, const char *format, int32_t iqNInput)
  function _IQ8toa (line 508) | int16_t _IQ8toa(char *string, const char *format, int32_t iqNInput)
  function _IQ7toa (line 522) | int16_t _IQ7toa(char *string, const char *format, int32_t iqNInput)
  function _IQ6toa (line 536) | int16_t _IQ6toa(char *string, const char *format, int32_t iqNInput)
  function _IQ5toa (line 550) | int16_t _IQ5toa(char *string, const char *format, int32_t iqNInput)
  function _IQ4toa (line 564) | int16_t _IQ4toa(char *string, const char *format, int32_t iqNInput)
  function _IQ3toa (line 578) | int16_t _IQ3toa(char *string, const char *format, int32_t iqNInput)
  function _IQ2toa (line 592) | int16_t _IQ2toa(char *string, const char *format, int32_t iqNInput)
  function _IQ1toa (line 606) | int16_t _IQ1toa(char *string, const char *format, int32_t iqNInput)

FILE: iqmath/_IQNfunctions/_atoIQN.c
  function __STATIC_INLINE (line 25) | __STATIC_INLINE int_fast32_t __atoIQN(const char *string, int_fast32_t q...
  function _atoIQ31 (line 146) | int32_t _atoIQ31(const char *string)
  function _atoIQ30 (line 157) | int32_t _atoIQ30(const char *string)
  function _atoIQ29 (line 168) | int32_t _atoIQ29(const char *string)
  function _atoIQ28 (line 179) | int32_t _atoIQ28(const char *string)
  function _atoIQ27 (line 190) | int32_t _atoIQ27(const char *string)
  function _atoIQ26 (line 201) | int32_t _atoIQ26(const char *string)
  function _atoIQ25 (line 212) | int32_t _atoIQ25(const char *string)
  function _atoIQ24 (line 223) | int32_t _atoIQ24(const char *string)
  function _atoIQ23 (line 234) | int32_t _atoIQ23(const char *string)
  function _atoIQ22 (line 245) | int32_t _atoIQ22(const char *string)
  function _atoIQ21 (line 256) | int32_t _atoIQ21(const char *string)
  function _atoIQ20 (line 267) | int32_t _atoIQ20(const char *string)
  function _atoIQ19 (line 278) | int32_t _atoIQ19(const char *string)
  function _atoIQ18 (line 289) | int32_t _atoIQ18(const char *string)
  function _atoIQ17 (line 300) | int32_t _atoIQ17(const char *string)
  function _atoIQ16 (line 311) | int32_t _atoIQ16(const char *string)
  function _atoIQ15 (line 322) | int32_t _atoIQ15(const char *string)
  function _atoIQ14 (line 333) | int32_t _atoIQ14(const char *string)
  function _atoIQ13 (line 344) | int32_t _atoIQ13(const char *string)
  function _atoIQ12 (line 355) | int32_t _atoIQ12(const char *string)
  function _atoIQ11 (line 366) | int32_t _atoIQ11(const char *string)
  function _atoIQ10 (line 377) | int32_t _atoIQ10(const char *string)
  function _atoIQ9 (line 388) | int32_t _atoIQ9(const char *string)
  function _atoIQ8 (line 399) | int32_t _atoIQ8(const char *string)
  function _atoIQ7 (line 410) | int32_t _atoIQ7(const char *string)
  function _atoIQ6 (line 421) | int32_t _atoIQ6(const char *string)
  function _atoIQ5 (line 432) | int32_t _atoIQ5(const char *string)
  function _atoIQ4 (line 443) | int32_t _atoIQ4(const char *string)
  function _atoIQ3 (line 454) | int32_t _atoIQ3(const char *string)
  function _atoIQ2 (line 465) | int32_t _atoIQ2(const char *string)
  function _atoIQ1 (line 476) | int32_t _atoIQ1(const char *string)

FILE: iqmath/examples/get_started/main/iqmath_example_main.c
  function app_main (line 18) | void app_main(void)

FILE: iqmath/examples/get_started/pytest_iqmath_example.py
  function test_iqmath_example (line 5) | def test_iqmath_example(dut) -> None:

FILE: iqmath/include/IQmathLib.h
  type _iq30 (line 91) | typedef int32_t _iq30;
  type _iq29 (line 92) | typedef int32_t _iq29;
  type _iq28 (line 93) | typedef int32_t _iq28;
  type _iq27 (line 94) | typedef int32_t _iq27;
  type _iq26 (line 95) | typedef int32_t _iq26;
  type _iq25 (line 96) | typedef int32_t _iq25;
  type _iq24 (line 97) | typedef int32_t _iq24;
  type _iq23 (line 98) | typedef int32_t _iq23;
  type _iq22 (line 99) | typedef int32_t _iq22;
  type _iq21 (line 100) | typedef int32_t _iq21;
  type _iq20 (line 101) | typedef int32_t _iq20;
  type _iq19 (line 102) | typedef int32_t _iq19;
  type _iq18 (line 103) | typedef int32_t _iq18;
  type _iq17 (line 104) | typedef int32_t _iq17;
  type _iq16 (line 105) | typedef int32_t _iq16;
  type _iq15 (line 106) | typedef int32_t _iq15;
  type _iq14 (line 107) | typedef int32_t _iq14;
  type _iq13 (line 108) | typedef int32_t _iq13;
  type _iq12 (line 109) | typedef int32_t _iq12;
  type _iq11 (line 110) | typedef int32_t _iq11;
  type _iq10 (line 111) | typedef int32_t _iq10;
  type _iq9 (line 112) | typedef int32_t _iq9;
  type _iq8 (line 113) | typedef int32_t _iq8;
  type _iq7 (line 114) | typedef int32_t _iq7;
  type _iq6 (line 115) | typedef int32_t _iq6;
  type _iq5 (line 116) | typedef int32_t _iq5;
  type _iq4 (line 117) | typedef int32_t _iq4;
  type _iq3 (line 118) | typedef int32_t _iq3;
  type _iq2 (line 119) | typedef int32_t _iq2;
  type _iq1 (line 120) | typedef int32_t _iq1;
  type _iq (line 121) | typedef int32_t _iq;

FILE: iqmath/support/RTS_support.h
  function __mpy_start (line 14) | static inline void __mpy_start(uint_fast16_t *ui16IntState, uint_fast16_...
  function __mpyf_start (line 25) | static inline void __mpyf_start(uint_fast16_t *ui16IntState, uint_fast16...
  function __mpyfs_start (line 36) | static inline void __mpyfs_start(uint_fast16_t *ui16IntState, uint_fast1...
  function __mpy_clear_ctl0 (line 47) | static inline void __mpy_clear_ctl0(void)
  function __mpy_set_frac (line 58) | static inline void __mpy_set_frac(void)
  function __mpy_stop (line 69) | static inline void __mpy_stop(uint_fast16_t *ui16IntState, uint_fast16_t...
  function int_fast16_t (line 85) | static inline int_fast16_t __mpy_w(int_fast16_t arg1, int_fast16_t arg2)
  function uint_fast16_t (line 95) | static inline uint_fast16_t __mpy_uw(uint_fast16_t arg1, uint_fast16_t a...
  function int_fast32_t (line 105) | static inline int_fast32_t __mpyx_w(int_fast16_t arg1, int_fast16_t arg2)
  function uint_fast32_t (line 115) | static inline uint_fast32_t __mpyx_uw(uint_fast16_t arg1, uint_fast16_t ...
  function int_fast16_t (line 125) | static inline int_fast16_t __mpyf_w(int_fast16_t arg1, int_fast16_t arg2)
  function int_fast16_t (line 135) | static inline int_fast16_t __mpyf_w_reuse_arg1(int_fast16_t arg1, int_fa...
  function uint_fast16_t (line 146) | static inline uint_fast16_t __mpyf_uw(uint_fast16_t arg1, uint_fast16_t ...
  function uint_fast16_t (line 156) | static inline uint_fast16_t __mpyf_uw_reuse_arg1(uint_fast16_t arg1, uin...
  function int_fast32_t (line 167) | static inline int_fast32_t __mpyfx_w(int_fast16_t arg1, int_fast16_t arg2)
  function int_fast32_t (line 177) | static inline int_fast32_t __mpyfx_uw(uint_fast16_t arg1, uint_fast16_t ...
  function int_fast32_t (line 193) | static inline int_fast32_t __mpy_l(int_fast32_t arg1, int_fast32_t arg2)
  function uint_fast32_t (line 203) | static inline uint_fast32_t __mpy_ul(uint_fast32_t arg1, uint_fast32_t a...
  function int_fast64_t (line 213) | static inline int_fast64_t __mpyx(int_fast32_t arg1, int_fast32_t arg2)
  function uint_fast64_t (line 223) | static inline uint_fast64_t __mpyx_u(uint_fast32_t arg1, uint_fast32_t a...
  function int_fast32_t (line 233) | static inline int_fast32_t __mpyf_l(int_fast32_t arg1, int_fast32_t arg2)
  function int_fast32_t (line 243) | static inline int_fast32_t __mpyf_l_reuse_arg1(int_fast32_t arg1, int_fa...
  function uint_fast32_t (line 254) | static inline uint_fast32_t __mpyf_ul(uint_fast32_t arg1, uint_fast32_t ...
  function int_fast32_t (line 264) | static inline int_fast32_t __mpyf_ul_reuse_arg1(uint_fast32_t arg1, uint...
  function int_fast64_t (line 275) | static inline int_fast64_t __mpyfx(int_fast32_t arg1, int_fast32_t arg2)
  function uint_fast64_t (line 285) | static inline uint_fast64_t __mpyfx_u(uint_fast32_t arg1, uint_fast32_t ...

FILE: iqmath/test_apps/main/test_app_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: iqmath/test_apps/pytest_iqmath.py
  function test_iqmath (line 7) | def test_iqmath(dut) -> None:

FILE: jsmn/include/jsmn.h
  type jsmntype_t (line 46) | typedef enum {
  type jsmnerr (line 54) | enum jsmnerr {
  type jsmntok_t (line 69) | typedef struct jsmntok {
  type jsmn_parser (line 83) | typedef struct jsmn_parser {
  function jsmntok_t (line 106) | static jsmntok_t *jsmn_alloc_token(jsmn_parser *parser, jsmntok_t *tokens,
  function jsmn_fill_token (line 125) | static void jsmn_fill_token(jsmntok_t *token, const jsmntype_t type,
  function jsmn_parse_primitive (line 137) | static int jsmn_parse_primitive(jsmn_parser *parser, const char *js,
  function jsmn_parse_string (line 196) | static int jsmn_parse_string(jsmn_parser *parser, const char *js,
  function JSMN_API (line 272) | JSMN_API int jsmn_parse(jsmn_parser *parser, const char *js, const size_...
  function JSMN_API (line 464) | JSMN_API void jsmn_init(jsmn_parser *parser)

FILE: jsmn/test_apps/main/jsmn_test.c
  function app_main (line 3) | void app_main(void)

FILE: json_generator/include/json_generator.h
  type json_gen_str_t (line 58) | typedef struct {

FILE: json_generator/src/json_generator.c
  function json_gen_get_empty_len (line 29) | static inline int json_gen_get_empty_len(json_gen_str_t *jstr)
  function json_gen_add_to_str (line 39) | static int json_gen_add_to_str(json_gen_str_t *jstr, const char *str)
  function json_gen_str_start (line 75) | void json_gen_str_start(json_gen_str_t *jstr, char *buf, int buf_size,
  function json_gen_str_end (line 86) | int json_gen_str_end(json_gen_str_t *jstr)
  function json_gen_handle_comma (line 99) | static inline void json_gen_handle_comma(json_gen_str_t *jstr)
  function json_gen_handle_name (line 107) | static int json_gen_handle_name(json_gen_str_t *jstr, const char *name)
  function json_gen_start_object (line 115) | int json_gen_start_object(json_gen_str_t *jstr)
  function json_gen_end_object (line 122) | int json_gen_end_object(json_gen_str_t *jstr)
  function json_gen_start_array (line 129) | int json_gen_start_array(json_gen_str_t *jstr)
  function json_gen_end_array (line 136) | int json_gen_end_array(json_gen_str_t *jstr)
  function json_gen_push_object (line 142) | int json_gen_push_object(json_gen_str_t *jstr, const char *name)
  function json_gen_pop_object (line 150) | int json_gen_pop_object(json_gen_str_t *jstr)
  function json_gen_push_object_str (line 156) | int json_gen_push_object_str(json_gen_str_t *jstr, const char *name, con...
  function json_gen_push_array (line 164) | int json_gen_push_array(json_gen_str_t *jstr, const char *name)
  function json_gen_pop_array (line 171) | int json_gen_pop_array(json_gen_str_t *jstr)
  function json_gen_push_array_str (line 177) | int json_gen_push_array_str(json_gen_str_t *jstr, const char *name, cons...
  function json_gen_set_bool (line 185) | static int json_gen_set_bool(json_gen_str_t *jstr, bool val)
  function json_gen_obj_set_bool (line 194) | int json_gen_obj_set_bool(json_gen_str_t *jstr, const char *name, bool val)
  function json_gen_arr_set_bool (line 201) | int json_gen_arr_set_bool(json_gen_str_t *jstr, bool val)
  function json_gen_set_int (line 207) | static int json_gen_set_int(json_gen_str_t *jstr, int val)
  function json_gen_obj_set_int (line 215) | int json_gen_obj_set_int(json_gen_str_t *jstr, const char *name, int val)
  function json_gen_arr_set_int (line 222) | int json_gen_arr_set_int(json_gen_str_t *jstr, int val)
  function json_gen_set_int64 (line 228) | static int json_gen_set_int64(json_gen_str_t *jstr, int64_t val)
  function json_gen_obj_set_int64 (line 236) | int json_gen_obj_set_int64(json_gen_str_t *jstr, const char *name, int64...
  function json_gen_arr_set_int64 (line 243) | int json_gen_arr_set_int64(json_gen_str_t *jstr, int64_t val)
  function json_gen_set_float (line 249) | static int json_gen_set_float(json_gen_str_t *jstr, float val)
  function json_gen_obj_set_float (line 256) | int json_gen_obj_set_float(json_gen_str_t *jstr, const char *name, float...
  function json_gen_arr_set_float (line 262) | int json_gen_arr_set_float(json_gen_str_t *jstr, float val)
  function json_gen_set_string (line 268) | static int json_gen_set_string(json_gen_str_t *jstr, const char *val)
  function json_gen_obj_set_string (line 276) | int json_gen_obj_set_string(json_gen_str_t *jstr, const char *name, cons...
  function json_gen_arr_set_string (line 283) | int json_gen_arr_set_string(json_gen_str_t *jstr, const char *val)
  function json_gen_set_long_string (line 289) | static int json_gen_set_long_string(json_gen_str_t *jstr, const char *val)
  function json_gen_obj_start_long_string (line 296) | int json_gen_obj_start_long_string(json_gen_str_t *jstr, const char *nam...
  function json_gen_arr_start_long_string (line 303) | int json_gen_arr_start_long_string(json_gen_str_t *jstr, const char *val)
  function json_gen_add_to_long_string (line 309) | int json_gen_add_to_long_string(json_gen_str_t *jstr, const char *val)
  function json_gen_end_long_string (line 314) | int json_gen_end_long_string(json_gen_str_t *jstr)
  function json_gen_set_null (line 318) | static int json_gen_set_null(json_gen_str_t *jstr)
  function json_gen_obj_set_null (line 323) | int json_gen_obj_set_null(json_gen_str_t *jstr, const char *name)
  function json_gen_arr_set_null (line 330) | int json_gen_arr_set_null(json_gen_str_t *jstr)

FILE: json_generator/test_apps/main/json_generator_test.c
  function app_main (line 3) | void app_main(void)

FILE: json_parser/include/json_parser.h
  type jsmn_parser (line 33) | typedef jsmn_parser json_parser_t;
  type jsmntok_t (line 34) | typedef jsmntok_t json_tok_t;
  type jparse_ctx_t (line 36) | typedef struct {

FILE: json_parser/src/json_parser.c
  function token_matches_str (line 26) | static bool token_matches_str(jparse_ctx_t *ctx, json_tok_t *tok, const ...
  function json_tok_t (line 33) | static json_tok_t *json_skip_elem(json_tok_t *token)
  function json_tok_to_bool (line 44) | static int json_tok_to_bool(jparse_ctx_t *jctx, json_tok_t *tok, bool *val)
  function json_tok_to_int (line 56) | static int json_tok_to_int(jparse_ctx_t *jctx, json_tok_t *tok, int *val)
  function json_tok_to_int64 (line 69) | static int json_tok_to_int64(jparse_ctx_t *jctx, json_tok_t *tok, int64_...
  function json_tok_to_float (line 82) | static int json_tok_to_float(jparse_ctx_t *jctx, json_tok_t *tok, float ...
  function json_tok_to_string (line 95) | static int json_tok_to_string(jparse_ctx_t *jctx, json_tok_t *tok, char ...
  function json_tok_t (line 105) | static json_tok_t *json_obj_search(jparse_ctx_t *jctx, const char *key)
  function json_tok_t (line 126) | static json_tok_t *json_obj_get_val_tok(jparse_ctx_t *jctx, const char *...
  function json_obj_get_array (line 139) | int json_obj_get_array(jparse_ctx_t *jctx, const char *name, int *num_elem)
  function json_obj_leave_array (line 150) | int json_obj_leave_array(jparse_ctx_t *jctx)
  function json_obj_get_object (line 166) | int json_obj_get_object(jparse_ctx_t *jctx, const char *name)
  function json_obj_leave_object (line 176) | int json_obj_leave_object(jparse_ctx_t *jctx)
  function json_obj_get_bool (line 192) | int json_obj_get_bool(jparse_ctx_t *jctx, const char *name, bool *val)
  function json_obj_get_int (line 201) | int json_obj_get_int(jparse_ctx_t *jctx, const char *name, int *val)
  function json_obj_get_int64 (line 210) | int json_obj_get_int64(jparse_ctx_t *jctx, const char *name, int64_t *val)
  function json_obj_get_float (line 219) | int json_obj_get_float(jparse_ctx_t *jctx, const char *name, float *val)
  function json_obj_get_string (line 228) | int json_obj_get_string(jparse_ctx_t *jctx, const char *name, char *val,...
  function json_obj_get_strlen (line 237) | int json_obj_get_strlen(jparse_ctx_t *jctx, const char *name, int *strlen)
  function json_obj_get_object_str (line 247) | int json_obj_get_object_str(jparse_ctx_t *jctx, const char *name, char *...
  function json_obj_get_object_strlen (line 256) | int json_obj_get_object_strlen(jparse_ctx_t *jctx, const char *name, int...
  function json_obj_get_array_str (line 265) | int json_obj_get_array_str(jparse_ctx_t *jctx, const char *name, char *v...
  function json_obj_get_array_strlen (line 274) | int json_obj_get_array_strlen(jparse_ctx_t *jctx, const char *name, int ...
  function json_tok_t (line 284) | static json_tok_t *json_arr_search(jparse_ctx_t *ctx, uint32_t index)
  function json_tok_t (line 301) | static json_tok_t *json_arr_get_val_tok(jparse_ctx_t *jctx, uint32_t ind...
  function json_arr_get_array (line 313) | int json_arr_get_array(jparse_ctx_t *jctx, uint32_t index)
  function json_arr_leave_array (line 323) | int json_arr_leave_array(jparse_ctx_t *jctx)
  function json_arr_get_object (line 332) | int json_arr_get_object(jparse_ctx_t *jctx, uint32_t index)
  function json_arr_leave_object (line 342) | int json_arr_leave_object(jparse_ctx_t *jctx)
  function json_arr_get_bool (line 351) | int json_arr_get_bool(jparse_ctx_t *jctx, uint32_t index, bool *val)
  function json_arr_get_int (line 360) | int json_arr_get_int(jparse_ctx_t *jctx, uint32_t index, int *val)
  function json_arr_get_int64 (line 369) | int json_arr_get_int64(jparse_ctx_t *jctx, uint32_t index, int64_t *val)
  function json_arr_get_float (line 378) | int json_arr_get_float(jparse_ctx_t *jctx, uint32_t index, float *val)
  function json_arr_get_string (line 387) | int json_arr_get_string(jparse_ctx_t *jctx, uint32_t index, char *val, i...
  function json_arr_get_strlen (line 396) | int json_arr_get_strlen(jparse_ctx_t *jctx, uint32_t index, int *strlen)
  function json_parse_start (line 406) | int json_parse_start(jparse_ctx_t *jctx, const char *js, int len)
  function json_parse_end (line 431) | int json_parse_end(jparse_ctx_t *jctx)
  function json_parse_start_static (line 440) | int json_parse_start_static(jparse_ctx_t *jctx, const char *js, int len,...
  function json_parse_end_static (line 469) | int json_parse_end_static(jparse_ctx_t *jctx)

FILE: json_parser/test_apps/main/test_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: json_parser/test_apps/pytest_json_parser.py
  function test_json_parser (line 5) | def test_json_parser(dut) -> None:

FILE: led_strip/examples/led_strip_rmt_ws2812/main/led_strip_rmt_ws2812_main.c
  function led_strip_handle_t (line 35) | led_strip_handle_t configure_led(void)
  function app_main (line 65) | void app_main(void)

FILE: led_strip/examples/led_strip_spi_ws2812/main/led_strip_spi_ws2812_main.c
  function led_strip_handle_t (line 20) | led_strip_handle_t configure_led(void)
  function app_main (line 57) | void app_main(void)

FILE: led_strip/include/led_strip_rmt.h
  type led_strip_rmt_config_t (line 21) | typedef struct {

FILE: led_strip/include/led_strip_spi.h
  type led_strip_spi_config_t (line 20) | typedef struct {

FILE: led_strip/include/led_strip_types.h
  type led_strip_t (line 17) | struct led_strip_t
  type led_model_t (line 23) | typedef enum {
  type led_color_component_format_t (line 35) | typedef union {
  type led_strip_config_t (line 62) | typedef struct {

FILE: led_strip/interface/led_strip_interface.h
  type led_strip_t (line 15) | typedef struct led_strip_t led_strip_t;
  type led_strip_t (line 20) | struct led_strip_t {

FILE: led_strip/src/led_strip_api.c
  function esp_err_t (line 13) | esp_err_t led_strip_set_pixel(led_strip_handle_t strip, uint32_t index, ...
  function esp_err_t (line 19) | esp_err_t led_strip_set_pixel_hsv(led_strip_handle_t strip, uint32_t ind...
  function esp_err_t (line 72) | esp_err_t led_strip_set_pixel_hsv_16(led_strip_handle_t strip, uint32_t ...
  function esp_err_t (line 125) | esp_err_t led_strip_set_pixel_rgbw(led_strip_handle_t strip, uint32_t in...
  function esp_err_t (line 131) | esp_err_t led_strip_refresh(led_strip_handle_t strip)
  function esp_err_t (line 137) | esp_err_t led_strip_clear(led_strip_handle_t strip)
  function esp_err_t (line 143) | esp_err_t led_strip_del(led_strip_handle_t strip)

FILE: led_strip/src/led_strip_rmt_dev.c
  type led_strip_rmt_obj (line 27) | typedef struct {
  function esp_err_t (line 37) | static esp_err_t led_strip_rmt_set_pixel(led_strip_t *strip, uint32_t in...
  function esp_err_t (line 59) | static esp_err_t led_strip_rmt_set_pixel_rgbw(led_strip_t *strip, uint32...
  function esp_err_t (line 80) | static esp_err_t led_strip_rmt_refresh(led_strip_t *strip)
  function esp_err_t (line 95) | static esp_err_t led_strip_rmt_clear(led_strip_t *strip)
  function esp_err_t (line 103) | static esp_err_t led_strip_rmt_del(led_strip_t *strip)
  function esp_err_t (line 112) | esp_err_t led_strip_new_rmt_device(const led_strip_config_t *led_config,...

FILE: led_strip/src/led_strip_rmt_encoder.c
  type rmt_led_strip_encoder_t (line 23) | typedef struct {
  function RMT_ENCODER_FUNC_ATTR (line 31) | RMT_ENCODER_FUNC_ATTR
  function esp_err_t (line 68) | static esp_err_t rmt_del_led_strip_encoder(rmt_encoder_t *encoder)
  function RMT_ENCODER_FUNC_ATTR (line 77) | RMT_ENCODER_FUNC_ATTR
  function esp_err_t (line 87) | esp_err_t rmt_new_led_strip_encoder(const led_strip_encoder_config_t *co...

FILE: led_strip/src/led_strip_rmt_encoder.h
  type led_strip_encoder_config_t (line 19) | typedef struct {

FILE: led_strip/src/led_strip_spi_dev.c
  type led_strip_spi_obj (line 25) | typedef struct {
  function __led_strip_spi_bit (line 36) | static void __led_strip_spi_bit(uint8_t data, uint8_t *buf)
  function esp_err_t (line 51) | static esp_err_t led_strip_spi_set_pixel(led_strip_t *strip, uint32_t in...
  function esp_err_t (line 74) | static esp_err_t led_strip_spi_set_pixel_rgbw(led_strip_t *strip, uint32...
  function esp_err_t (line 97) | static esp_err_t led_strip_spi_refresh(led_strip_t *strip)
  function esp_err_t (line 111) | static esp_err_t led_strip_spi_clear(led_strip_t *strip)
  function esp_err_t (line 125) | static esp_err_t led_strip_spi_del(led_strip_t *strip)
  function esp_err_t (line 136) | esp_err_t led_strip_new_spi_device(const led_strip_config_t *led_config,...

FILE: libjpeg-turbo/examples/hello_jpeg/main/decode_image.c
  type my_error_mgr (line 28) | struct my_error_mgr {
  type my_error_mgr (line 34) | struct my_error_mgr
  function my_error_exit (line 37) | void my_error_exit(j_common_ptr cinfo)
  function esp_err_t (line 44) | esp_err_t decode_image(uint16_t **pixels)

FILE: libjpeg-turbo/examples/hello_jpeg/main/main.c
  function app_main (line 22) | void app_main(void)

FILE: libpng/test_apps/main/test_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: libpng/test_apps/pytest_libpng.py
  function test_libpng (line 5) | def test_libpng(dut) -> None:

FILE: libsodium/port/crypto_hash_mbedtls/crypto_hash_sha256_mbedtls.c
  function crypto_hash_sha256_init (line 27) | int
  function crypto_hash_sha256_update (line 59) | int
  function crypto_hash_sha256_final (line 88) | int
  function crypto_hash_sha256 (line 110) | int

FILE: libsodium/port/crypto_hash_mbedtls/crypto_hash_sha512_mbedtls.c
  function crypto_hash_sha512_init (line 27) | int
  function crypto_hash_sha512_update (line 59) | int
  function crypto_hash_sha512_final (line 88) | int
  function crypto_hash_sha512 (line 110) | int

FILE: libsodium/port/randombytes_esp32.c
  type randombytes_implementation (line 26) | struct randombytes_implementation

FILE: libsodium/port_include/sodium/crypto_hash_sha256.h
  type crypto_hash_sha256_state (line 28) | typedef struct crypto_hash_sha256_state {

FILE: libsodium/port_include/sodium/crypto_hash_sha512.h
  type crypto_hash_sha512_state (line 28) | typedef struct crypto_hash_sha512_state {

FILE: libsodium/test_apps/main/test_main.c
  function setUp (line 13) | void setUp(void)
  function tearDown (line 18) | void tearDown(void)
  function app_main (line 24) | void app_main(void)

FILE: libsodium/test_apps/pytest_libsodium.py
  function test_libsodium (line 5) | def test_libsodium(dut) -> None:

FILE: network_provisioning/examples/thread_prov/main/app_main.c
  function esp_err_t (line 83) | static esp_err_t example_get_sec2_salt(const char **salt, uint16_t *salt...
  function esp_err_t (line 96) | static esp_err_t example_get_sec2_verifier(const char **verifier, uint16...
  function event_handler (line 120) | static void event_handler(void *arg, esp_event_base_t event_base,
  function get_device_service_name (line 169) | static void get_device_service_name(char *service_name, size_t max)
  function esp_err_t (line 182) | esp_err_t custom_prov_data_handler(uint32_t session_id, const uint8_t *i...
  function network_prov_print_qr (line 199) | static void network_prov_print_qr(const char *name, const char *username...
  function esp_netif_t (line 230) | static esp_netif_t *init_openthread_netif(const esp_openthread_platform_...
  function ot_task_worker (line 240) | static void ot_task_worker(void *aContext)
  function app_main (line 276) | void app_main(void)

FILE: network_provisioning/examples/wifi_prov/main/app_main.c
  function esp_err_t (line 75) | static esp_err_t example_get_sec2_salt(const char **salt, uint16_t *salt...
  function esp_err_t (line 88) | static esp_err_t example_get_sec2_verifier(const char **verifier, uint16...
  function event_handler (line 113) | static void event_handler(void *arg, esp_event_base_t event_base,
  function wifi_init_sta (line 215) | static void wifi_init_sta(void)
  function get_device_service_name (line 222) | static void get_device_service_name(char *service_name, size_t max)
  function esp_err_t (line 237) | esp_err_t custom_prov_data_handler(uint32_t session_id, const uint8_t *i...
  function wifi_prov_print_qr (line 254) | static void wifi_prov_print_qr(const char *name, const char *username, c...
  function wifi_prov_app_callback (line 286) | void wifi_prov_app_callback(void *user_data, wifi_prov_cb_event_t event,...
  function app_main (line 313) | void app_main(void)

FILE: network_provisioning/include/network_provisioning/manager.h
  type network_prov_cb_event_t (line 33) | typedef enum {
  type network_prov_event_handler_t (line 117) | typedef struct {
  type network_prov_wifi_conn_cfg_t (line 132) | typedef struct {
  type network_prov_scheme_t (line 157) | typedef struct network_prov_scheme {
  type network_prov_mgr_config_t (line 210) | typedef struct {
  type network_prov_security_t (line 249) | typedef enum network_prov_security {
  type network_prov_security1_params_t (line 282) | typedef const char network_prov_security1_params_t;
  type protocomm_security2_params_t (line 288) | typedef protocomm_security2_params_t network_prov_security2_params_t;

FILE: network_provisioning/include/network_provisioning/network_config.h
  type network_prov_wifi_sta_state_t (line 21) | typedef enum {
  type network_prov_wifi_sta_fail_reason_t (line 31) | typedef enum {
  type network_prov_wifi_sta_conn_info_t (line 39) | typedef struct {
  type network_prov_wifi_sta_connecting_info_t (line 54) | typedef struct {
  type network_prov_config_get_wifi_data_t (line 61) | typedef struct {
  type network_prov_config_set_wifi_data_t (line 84) | typedef struct {
  type network_prov_thread_state_t (line 96) | typedef enum {
  type network_prov_thread_fail_reason_t (line 105) | typedef enum {
  type network_prov_thread_conn_info_t (line 113) | typedef struct {
  type network_prov_config_get_thread_data_t (line 123) | typedef struct {
  type network_prov_config_set_thread_data_t (line 141) | typedef struct {
  type network_prov_ctx_t (line 154) | typedef struct network_prov_ctx network_prov_ctx_t;
  type network_prov_config_handlers_t (line 163) | typedef struct network_prov_config_handlers {

FILE: network_provisioning/include/network_provisioning/network_scan.h
  type network_prov_scan_ctx_t (line 33) | typedef struct network_prov_scan_ctx network_prov_scan_ctx_t;
  type network_prov_scan_wifi_result_t (line 39) | typedef struct {
  type network_prov_scan_thread_result_t (line 68) | typedef struct {
  type network_prov_scan_handlers_t (line 86) | typedef struct network_prov_scan_handlers {

FILE: network_provisioning/proto-c/network_config.pb-c.c
  function cmd_get_wifi_status__init (line 10) | void   cmd_get_wifi_status__init
  function cmd_get_wifi_status__get_packed_size (line 16) | size_t cmd_get_wifi_status__get_packed_size
  function cmd_get_wifi_status__pack (line 22) | size_t cmd_get_wifi_status__pack
  function cmd_get_wifi_status__pack_to_buffer (line 29) | size_t cmd_get_wifi_status__pack_to_buffer
  function CmdGetWifiStatus (line 36) | CmdGetWifiStatus *
  function cmd_get_wifi_status__free_unpacked (line 46) | void   cmd_get_wifi_status__free_unpacked
  function resp_get_wifi_status__init (line 55) | void   resp_get_wifi_status__init
  function resp_get_wifi_status__get_packed_size (line 61) | size_t resp_get_wifi_status__get_packed_size
  function resp_get_wifi_status__pack (line 67) | size_t resp_get_wifi_status__pack
  function resp_get_wifi_status__pack_to_buffer (line 74) | size_t resp_get_wifi_status__pack_to_buffer
  function RespGetWifiStatus (line 81) | RespGetWifiStatus *
  function resp_get_wifi_status__free_unpacked (line 91) | void   resp_get_wifi_status__free_unpacked
  function cmd_get_thread_status__init (line 100) | void   cmd_get_thread_status__init
  function cmd_get_thread_status__get_packed_size (line 106) | size_t cmd_get_thread_status__get_packed_size
  function cmd_get_thread_status__pack (line 112) | size_t cmd_get_thread_status__pack
  function cmd_get_thread_status__pack_to_buffer (line 119) | size_t cmd_get_thread_status__pack_to_buffer
  function CmdGetThreadStatus (line 126) | CmdGetThreadStatus *
  function cmd_get_thread_status__free_unpacked (line 136) | void   cmd_get_thread_status__free_unpacked
  function resp_get_thread_status__init (line 145) | void   resp_get_thread_status__init
  function resp_get_thread_status__get_packed_size (line 151) | size_t resp_get_thread_status__get_packed_size
  function resp_get_thread_status__pack (line 157) | size_t resp_get_thread_status__pack
  function resp_get_thread_status__pack_to_buffer (line 164) | size_t resp_get_thread_status__pack_to_buffer
  function RespGetThreadStatus (line 171) | RespGetThreadStatus *
  function resp_get_thread_status__free_unpacked (line 181) | void   resp_get_thread_status__free_unpacked
  function cmd_set_wifi_config__init (line 190) | void   cmd_set_wifi_config__init
  function cmd_set_wifi_config__get_packed_size (line 196) | size_t cmd_set_wifi_config__get_packed_size
  function cmd_set_wifi_config__pack (line 202) | size_t cmd_set_wifi_config__pack
  function cmd_set_wifi_config__pack_to_buffer (line 209) | size_t cmd_set_wifi_config__pack_to_buffer
  function CmdSetWifiConfig (line 216) | CmdSetWifiConfig *
  function cmd_set_wifi_config__free_unpacked (line 226) | void   cmd_set_wifi_config__free_unpacked
  function cmd_set_thread_config__init (line 235) | void   cmd_set_thread_config__init
  function cmd_set_thread_config__get_packed_size (line 241) | size_t cmd_set_thread_config__get_packed_size
  function cmd_set_thread_config__pack (line 247) | size_t cmd_set_thread_config__pack
  function cmd_set_thread_config__pack_to_buffer (line 254) | size_t cmd_set_thread_config__pack_to_buffer
  function CmdSetThreadConfig (line 261) | CmdSetThreadConfig *
  function cmd_set_thread_config__free_unpacked (line 271) | void   cmd_set_thread_config__free_unpacked
  function resp_set_wifi_config__init (line 280) | void   resp_set_wifi_config__init
  function resp_set_wifi_config__get_packed_size (line 286) | size_t resp_set_wifi_config__get_packed_size
  function resp_set_wifi_config__pack (line 292) | size_t resp_set_wifi_config__pack
  function resp_set_wifi_config__pack_to_buffer (line 299) | size_t resp_set_wifi_config__pack_to_buffer
  function RespSetWifiConfig (line 306) | RespSetWifiConfig *
  function resp_set_wifi_config__free_unpacked (line 316) | void   resp_set_wifi_config__free_unpacked
  function resp_set_thread_config__init (line 325) | void   resp_set_thread_config__init
  function resp_set_thread_config__get_packed_size (line 331) | size_t resp_set_thread_config__get_packed_size
  function resp_set_thread_config__pack (line 337) | size_t resp_set_thread_config__pack
  function resp_set_thread_config__pack_to_buffer (line 344) | size_t resp_set_thread_config__pack_to_buffer
  function RespSetThreadConfig (line 351) | RespSetThreadConfig *
  function resp_set_thread_config__free_unpacked (line 361) | void   resp_set_thread_config__free_unpacked
  function cmd_apply_wifi_config__init (line 370) | void   cmd_apply_wifi_config__init
  function cmd_apply_wifi_config__get_packed_size (line 376) | size_t cmd_apply_wifi_config__get_packed_size
  function cmd_apply_wifi_config__pack (line 382) | size_t cmd_apply_wifi_config__pack
  function cmd_apply_wifi_config__pack_to_buffer (line 389) | size_t cmd_apply_wifi_config__pack_to_buffer
  function CmdApplyWifiConfig (line 396) | CmdApplyWifiConfig *
  function cmd_apply_wifi_config__free_unpacked (line 406) | void   cmd_apply_wifi_config__free_unpacked
  function cmd_apply_thread_config__init (line 415) | void   cmd_apply_thread_config__init
  function cmd_apply_thread_config__get_packed_size (line 421) | size_t cmd_apply_thread_config__get_packed_size
  function cmd_apply_thread_config__pack (line 427) | size_t cmd_apply_thread_config__pack
  function cmd_apply_thread_config__pack_to_buffer (line 434) | size_t cmd_apply_thread_config__pack_to_buffer
  function CmdApplyThreadConfig (line 441) | CmdApplyThreadConfig *
  function cmd_apply_thread_config__free_unpacked (line 451) | void   cmd_apply_thread_config__free_unpacked
  function resp_apply_wifi_config__init (line 460) | void   resp_apply_wifi_config__init
  function resp_apply_wifi_config__get_packed_size (line 466) | size_t resp_apply_wifi_config__get_packed_size
  function resp_apply_wifi_config__pack (line 472) | size_t resp_apply_wifi_config__pack
  function resp_apply_wifi_config__pack_to_buffer (line 479) | size_t resp_apply_wifi_config__pack_to_buffer
  function RespApplyWifiConfig (line 486) | RespApplyWifiConfig *
  function resp_apply_wifi_config__free_unpacked (line 496) | void   resp_apply_wifi_config__free_unpacked
  function resp_apply_thread_config__init (line 505) | void   resp_apply_thread_config__init
  function resp_apply_thread_config__get_packed_size (line 511) | size_t resp_apply_thread_config__get_packed_size
  function resp_apply_thread_config__pack (line 517) | size_t resp_apply_thread_config__pack
  function resp_apply_thread_config__pack_to_buffer (line 524) | size_t resp_apply_thread_config__pack_to_buffer
  function RespApplyThreadConfig (line 531) | RespApplyThreadConfig *
  function resp_apply_thread_config__free_unpacked (line 541) | void   resp_apply_thread_config__free_unpacked
  function network_config_payload__init (line 550) | void   network_config_payload__init
  function network_config_payload__get_packed_size (line 556) | size_t network_config_payload__get_packed_size
  function network_config_payload__pack (line 562) | size_t network_config_payload__pack
  function network_config_payload__pack_to_buffer (line 569) | size_t network_config_payload__pack_to_buffer
  function NetworkConfigPayload (line 576) | NetworkConfigPayload *
  function network_config_payload__free_unpacked (line 586) | void   network_config_payload__free_unpacked

FILE: network_provisioning/proto-c/network_config.pb-c.h
  type CmdGetWifiStatus (line 20) | typedef struct CmdGetWifiStatus CmdGetWifiStatus;
  type RespGetWifiStatus (line 21) | typedef struct RespGetWifiStatus RespGetWifiStatus;
  type CmdGetThreadStatus (line 22) | typedef struct CmdGetThreadStatus CmdGetThreadStatus;
  type RespGetThreadStatus (line 23) | typedef struct RespGetThreadStatus RespGetThreadStatus;
  type CmdSetWifiConfig (line 24) | typedef struct CmdSetWifiConfig CmdSetWifiConfig;
  type CmdSetThreadConfig (line 25) | typedef struct CmdSetThreadConfig CmdSetThreadConfig;
  type RespSetWifiConfig (line 26) | typedef struct RespSetWifiConfig RespSetWifiConfig;
  type RespSetThreadConfig (line 27) | typedef struct RespSetThreadConfig RespSetThreadConfig;
  type CmdApplyWifiConfig (line 28) | typedef struct CmdApplyWifiConfig CmdApplyWifiConfig;
  type CmdApplyThreadConfig (line 29) | typedef struct CmdApplyThreadConfig CmdApplyThreadConfig;
  type RespApplyWifiConfig (line 30) | typedef struct RespApplyWifiConfig RespApplyWifiConfig;
  type RespApplyThreadConfig (line 31) | typedef struct RespApplyThreadConfig RespApplyThreadConfig;
  type NetworkConfigPayload (line 32) | typedef struct NetworkConfigPayload NetworkConfigPayload;
  type NetworkConfigMsgType (line 37) | typedef enum _NetworkConfigMsgType {
  type CmdGetWifiStatus (line 55) | struct  CmdGetWifiStatus
  type RespGetWifiStatus__StateCase (line 64) | typedef enum {
  type RespGetWifiStatus (line 72) | struct  RespGetWifiStatus
  type CmdGetThreadStatus (line 89) | struct  CmdGetThreadStatus
  type RespGetThreadStatus__StateCase (line 98) | typedef enum {
  type RespGetThreadStatus (line 105) | struct  RespGetThreadStatus
  type CmdSetWifiConfig (line 121) | struct  CmdSetWifiConfig
  type CmdSetThreadConfig (line 134) | struct  CmdSetThreadConfig
  type RespSetWifiConfig (line 144) | struct  RespSetWifiConfig
  type RespSetThreadConfig (line 154) | struct  RespSetThreadConfig
  type CmdApplyWifiConfig (line 164) | struct  CmdApplyWifiConfig
  type CmdApplyThreadConfig (line 173) | struct  CmdApplyThreadConfig
  type RespApplyWifiConfig (line 182) | struct  RespApplyWifiConfig
  type RespApplyThreadConfig (line 192) | struct  RespApplyThreadConfig
  type NetworkConfigPayload__PayloadCase (line 202) | typedef enum {
  type NetworkConfigPayload (line 219) | struct  NetworkConfigPayload

FILE: network_provisioning/proto-c/network_constants.pb-c.c
  function wifi_connected_state__init (line 10) | void   wifi_connected_state__init
  function wifi_connected_state__get_packed_size (line 16) | size_t wifi_connected_state__get_packed_size
  function wifi_connected_state__pack (line 22) | size_t wifi_connected_state__pack
  function wifi_connected_state__pack_to_buffer (line 29) | size_t wifi_connected_state__pack_to_buffer
  function WifiConnectedState (line 36) | WifiConnectedState *
  function wifi_connected_state__free_unpacked (line 46) | void   wifi_connected_state__free_unpacked
  function wifi_attempt_failed__init (line 55) | void   wifi_attempt_failed__init
  function wifi_attempt_failed__get_packed_size (line 61) | size_t wifi_attempt_failed__get_packed_size
  function wifi_attempt_failed__pack (line 67) | size_t wifi_attempt_failed__pack
  function wifi_attempt_failed__pack_to_buffer (line 74) | size_t wifi_attempt_failed__pack_to_buffer
  function WifiAttemptFailed (line 81) | WifiAttemptFailed *
  function wifi_attempt_failed__free_unpacked (line 91) | void   wifi_attempt_failed__free_unpacked
  function thread_attach_state__init (line 100) | void   thread_attach_state__init
  function thread_attach_state__get_packed_size (line 106) | size_t thread_attach_state__get_packed_size
  function thread_attach_state__pack (line 112) | size_t thread_attach_state__pack
  function thread_attach_state__pack_to_buffer (line 119) | size_t thread_attach_state__pack_to_buffer
  function ThreadAttachState (line 126) | ThreadAttachState *
  function thread_attach_state__free_unpacked (line 136) | void   thread_attach_state__free_unpacked

FILE: network_provisioning/proto-c/network_constants.pb-c.h
  type WifiConnectedState (line 18) | typedef struct WifiConnectedState WifiConnectedState;
  type WifiAttemptFailed (line 19) | typedef struct WifiAttemptFailed WifiAttemptFailed;
  type ThreadAttachState (line 20) | typedef struct ThreadAttachState ThreadAttachState;
  type WifiStationState (line 25) | typedef enum _WifiStationState {
  type WifiConnectFailedReason (line 32) | typedef enum _WifiConnectFailedReason {
  type WifiAuthMode (line 37) | typedef enum _WifiAuthMode {
  type ThreadNetworkState (line 48) | typedef enum _ThreadNetworkState {
  type ThreadAttachFailedReason (line 55) | typedef enum _ThreadAttachFailedReason {
  type WifiConnectedState (line 63) | struct  WifiConnectedState
  type WifiAttemptFailed (line 77) | struct  WifiAttemptFailed
  type ThreadAttachState (line 87) | struct  ThreadAttachState

FILE: network_provisioning/proto-c/network_ctrl.pb-c.c
  function cmd_ctrl_wifi_reset__init (line 10) | void   cmd_ctrl_wifi_reset__init
  function cmd_ctrl_wifi_reset__get_packed_size (line 16) | size_t cmd_ctrl_wifi_reset__get_packed_size
  function cmd_ctrl_wifi_reset__pack (line 22) | size_t cmd_ctrl_wifi_reset__pack
  function cmd_ctrl_wifi_reset__pack_to_buffer (line 29) | size_t cmd_ctrl_wifi_reset__pack_to_buffer
  function CmdCtrlWifiReset (line 36) | CmdCtrlWifiReset *
  function cmd_ctrl_wifi_reset__free_unpacked (line 46) | void   cmd_ctrl_wifi_reset__free_unpacked
  function resp_ctrl_wifi_reset__init (line 55) | void   resp_ctrl_wifi_reset__init
  function resp_ctrl_wifi_reset__get_packed_size (line 61) | size_t resp_ctrl_wifi_reset__get_packed_size
  function resp_ctrl_wifi_reset__pack (line 67) | size_t resp_ctrl_wifi_reset__pack
  function resp_ctrl_wifi_reset__pack_to_buffer (line 74) | size_t resp_ctrl_wifi_reset__pack_to_buffer
  function RespCtrlWifiReset (line 81) | RespCtrlWifiReset *
  function resp_ctrl_wifi_reset__free_unpacked (line 91) | void   resp_ctrl_wifi_reset__free_unpacked
  function cmd_ctrl_wifi_reprov__init (line 100) | void   cmd_ctrl_wifi_reprov__init
  function cmd_ctrl_wifi_reprov__get_packed_size (line 106) | size_t cmd_ctrl_wifi_reprov__get_packed_size
  function cmd_ctrl_wifi_reprov__pack (line 112) | size_t cmd_ctrl_wifi_reprov__pack
  function cmd_ctrl_wifi_reprov__pack_to_buffer (line 119) | size_t cmd_ctrl_wifi_reprov__pack_to_buffer
  function CmdCtrlWifiReprov (line 126) | CmdCtrlWifiReprov *
  function cmd_ctrl_wifi_reprov__free_unpacked (line 136) | void   cmd_ctrl_wifi_reprov__free_unpacked
  function resp_ctrl_wifi_reprov__init (line 145) | void   resp_ctrl_wifi_reprov__init
  function resp_ctrl_wifi_reprov__get_packed_size (line 151) | size_t resp_ctrl_wifi_reprov__get_packed_size
  function resp_ctrl_wifi_reprov__pack (line 157) | size_t resp_ctrl_wifi_reprov__pack
  function resp_ctrl_wifi_reprov__pack_to_buffer (line 164) | size_t resp_ctrl_wifi_reprov__pack_to_buffer
  function RespCtrlWifiReprov (line 171) | RespCtrlWifiReprov *
  function resp_ctrl_wifi_reprov__free_unpacked (line 181) | void   resp_ctrl_wifi_reprov__free_unpacked
  function cmd_ctrl_thread_reset__init (line 190) | void   cmd_ctrl_thread_reset__init
  function cmd_ctrl_thread_reset__get_packed_size (line 196) | size_t cmd_ctrl_thread_reset__get_packed_size
  function cmd_ctrl_thread_reset__pack (line 202) | size_t cmd_ctrl_thread_reset__pack
  function cmd_ctrl_thread_reset__pack_to_buffer (line 209) | size_t cmd_ctrl_thread_reset__pack_to_buf
Condensed preview — 1222 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (5,850K chars).
[
  {
    "path": ".build-test-rules.yml",
    "chars": 4420,
    "preview": "led_strip/examples/led_strip_rmt_ws2812:\n  disable:\n    - if: CONFIG_SOC_RMT_SUPPORTED != 1\n      reason: Relevant only "
  },
  {
    "path": ".codespellrc",
    "chars": 125,
    "preview": "[codespell]\nskip = build,COPYING.*,LICENSE,*.svg\nignore-words-list = ser,DOUT,dout,ans,nd,Dettached,IST\nwrite-changes = "
  },
  {
    "path": ".editorconfig",
    "chars": 484,
    "preview": "# EditorConfig helps developers define and maintain consistent\n# coding styles between different editors and IDEs\n# http"
  },
  {
    "path": ".git-blame-ignore-revs",
    "chars": 67,
    "preview": "# Fix configuration files\n9e76da9fa7ddbeef8cb0d47fd8f2e7668f58b3ec\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug-report.yml",
    "chars": 3228,
    "preview": "name: Bug report\ndescription: Report build and runtime bugs\nlabels: [\"Type: Bug\"]\nbody:\n  - type: checkboxes\n    id: che"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 690,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Component Registry\n    url: https://components.espressif.com\n    ab"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature-request.yml",
    "chars": 1568,
    "preview": "name: Feature request\ndescription: Suggest an idea or new component for this project.\nlabels: [\"Type: Feature Request\"]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/other-issue.yml",
    "chars": 745,
    "preview": "name: General issue report\ndescription: File an issue report\nbody:\n  - type: checkboxes\n    id: checklist\n    attributes"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/new_component.md",
    "chars": 613,
    "preview": "# Checklist\n\n- [ ] Component contains License\n- [ ] Component contains README.md\n- [ ] Component contains idf_component."
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE/update_component.md",
    "chars": 170,
    "preview": "# Checklist\n\n- [ ] Version in idf_component.yml file bumped\n- [ ] _Optional:_ README.md updated\n- [ ] CI passing\n\n# Chan"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 555,
    "preview": "# Checklist\n\n- [ ] Component contains License\n- [ ] Component contains README.md\n- [ ] Component contains idf_component."
  },
  {
    "path": ".github/build_docs.py",
    "chars": 8746,
    "preview": "#!/usr/bin/env python3\n\"\"\"\nDocumentation build script for ESP-IDF Extra Components.\n\nThis script searches for components"
  },
  {
    "path": ".github/clang-tidy/test_app/CMakeLists.txt",
    "chars": 2244,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\n# add all the components from the root directory of the repo\nset(root_dir ${CMAKE_"
  },
  {
    "path": ".github/consistency_check.py",
    "chars": 4307,
    "preview": "#!/usr/bin/env python\n# This script performs various consistency checks on the repository.\nimport argparse\nimport loggin"
  },
  {
    "path": ".github/filter_sarif.py",
    "chars": 4125,
    "preview": "#!/usr/bin/env python3\n\nimport argparse\nimport copy\nimport json\nimport typing as t\n\n\ndef main():\n    parser = argparse.A"
  },
  {
    "path": ".github/get_idf_build_apps_args.py",
    "chars": 1722,
    "preview": "#!/usr/bin/env python3\n\nimport argparse\nimport os\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_arg"
  },
  {
    "path": ".github/get_pytest_args.py",
    "chars": 1898,
    "preview": "#!/usr/bin/env python3\n\nimport argparse\nimport json\nimport glob\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n   "
  },
  {
    "path": ".github/readme_workflows.md",
    "chars": 1639,
    "preview": "# CI in idf-extra-components\n\n## Build and test apps\n\nThe workflow defined in [build_and_run_apps.yml](workflows/build_a"
  },
  {
    "path": ".github/setup_qemu.sh",
    "chars": 2540,
    "preview": "#!/bin/sh\nset -e\n\n# QEMU version and date string for easy maintenance\nQEMU_VERSION=\"9.2.2\"\nQEMU_DATE=\"20250817\"\nQEMU_REL"
  },
  {
    "path": ".github/workflows/build_and_run_apps.yml",
    "chars": 13511,
    "preview": "name: Build and Run Apps\n\non:\n  schedule:\n    - cron: '0 0 * * *' # Once per day at midnight\n  pull_request:\n    types: "
  },
  {
    "path": ".github/workflows/clang-tidy.yml",
    "chars": 2355,
    "preview": "name: Run clang-tidy\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize]\n  push:\n    branches:\n      - maste"
  },
  {
    "path": ".github/workflows/deploy_gh_pages.yml",
    "chars": 2481,
    "preview": "name: Build and Deploy Programming Guides\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [master]\n  #"
  },
  {
    "path": ".github/workflows/issue_comment.yml",
    "chars": 891,
    "preview": "name: Sync issue comments to JIRA\n\npermissions:\n  issues: write\n  pull-requests: write\n\n# This workflow will be triggere"
  },
  {
    "path": ".github/workflows/new_issues.yml",
    "chars": 816,
    "preview": "name: Sync issues to Jira\n\npermissions:\n  issues: write\n\n# This workflow will be triggered when a new issue is opened\non"
  },
  {
    "path": ".github/workflows/new_prs.yml",
    "chars": 999,
    "preview": "name: Sync remain PRs to Jira\n\npermissions:\n  pull-requests: write\n\n# This workflow will be triggered every hour, to syn"
  },
  {
    "path": ".github/workflows/pre-commit.yml",
    "chars": 245,
    "preview": "name: pre-commit\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize]\n\njobs:\n  pre-commit:\n    runs-on: ubunt"
  },
  {
    "path": ".github/workflows/test_sbom.yml",
    "chars": 434,
    "preview": "name: Run SBOM manifests validation test\n\non:\n  pull_request:\n    types: [opened, reopened, synchronize]\n\njobs:\n  test_s"
  },
  {
    "path": ".github/workflows/upload_component.yml",
    "chars": 2280,
    "preview": "name: Push components to Espressif Component Service\n\non:\n  # For pull requests: perform upload with \"--dry-run\" argumen"
  },
  {
    "path": ".github/workflows/vulnerability_scan.yml",
    "chars": 579,
    "preview": "name: Vulnerability scan\n\non:\n  schedule:\n    - cron: '0 0 * * *'\n  workflow_dispatch:\n\n\njobs:\n  vulnerability-scan:\n   "
  },
  {
    "path": ".gitignore",
    "chars": 272,
    "preview": "**/dist/**\n**/build*/**\n**/__pycache__/**\nsdkconfig\nsdkconfig.old\ndependencies.lock\n**/managed_components/**\n.vscode/\n.c"
  },
  {
    "path": ".gitmodules",
    "chars": 2123,
    "preview": "[submodule \"libsodium/libsodium\"]\n\tpath = libsodium/libsodium\n\turl = https://github.com/jedisct1/libsodium.git\n\n[submodu"
  },
  {
    "path": ".idf_build_apps.toml",
    "chars": 1657,
    "preview": "recursive = true\nexclude = [\n    \".github\",\n]\nmanifest_file = [\n    \"argtable3/.build-test-rules.yml\",\n    \"bdc_motor/.b"
  },
  {
    "path": ".ignore_build_warnings.txt",
    "chars": 383,
    "preview": "DeprecationWarning: pkg_resources is deprecated as an API\nWARNING: The following Kconfig variables were used in \"if\" cla"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 945,
    "preview": "repos:\n-   repo: https://github.com/igrr/astyle_py.git\n    rev: v1.1.0\n    hooks:\n    -   id: astyle_py\n        args: ['"
  },
  {
    "path": "README.md",
    "chars": 2879,
    "preview": "[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://gi"
  },
  {
    "path": "argtable3/.build-test-rules.yml",
    "chars": 340,
    "preview": "argtable3/test_apps/argtable_unit_tests:\n  disable:\n    - if: IDF_TARGET not in [\"esp32\", \"esp32c3\"]\n      reason: \"Suff"
  },
  {
    "path": "argtable3/CMakeLists.txt",
    "chars": 1875,
    "preview": "# This creates a virtual include file with an \"argtable3\" subdirectory where\n# \"/argtable3/src/argtable3.h\" is copied. t"
  },
  {
    "path": "argtable3/idf_component.yml",
    "chars": 317,
    "preview": "version: \"3.3.1~1\"\ndescription: \"Argtable3 - GNU-style command-line option parsing C library\"\nurl: https://github.com/es"
  },
  {
    "path": "argtable3/sbom_argtable3.yml",
    "chars": 217,
    "preview": "name: argtable3\nversion: 3.3.1\nsupplier: 'Organization: argtable'\ndescription: GNU-style command-line option parsing C l"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/CMakeLists.txt",
    "chars": 133,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\nproject(arg"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/main/CMakeLists.txt",
    "chars": 178,
    "preview": "idf_component_register(SRCS \"test_argtable3.c\" \"test_main.c\"\n                    PRIV_INCLUDE_DIRS \".\"\n                 "
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/main/idf_component.yml",
    "chars": 84,
    "preview": "dependencies:\n  espressif/argtable3:\n    version: \"*\"\n    override_path: \"../../..\"\n"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/main/test_argtable3.c",
    "chars": 11006,
    "preview": "/*\n * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#i"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/main/test_main.c",
    "chars": 555,
    "preview": "/*\n * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#i"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/pytest_argtable3.py",
    "chars": 144,
    "preview": "import pytest\nfrom pytest_embedded import Dut\n\n\n@pytest.mark.generic\ndef test_argtable3(dut: Dut) -> None:\n    dut.run_a"
  },
  {
    "path": "argtable3/test_apps/argtable_unit_tests/sdkconfig.defaults",
    "chars": 24,
    "preview": "CONFIG_ESP_TASK_WDT_EN=n"
  },
  {
    "path": "argtable3/test_apps/console_compat/CMakeLists.txt",
    "chars": 499,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\nproject(con"
  },
  {
    "path": "argtable3/test_apps/console_compat/README.md",
    "chars": 187,
    "preview": "This test app verifies that if IDF's console component (which also contains argtable3 source) is built alongside argtabl"
  },
  {
    "path": "argtable3/test_apps/console_compat/check_argtable_path.py",
    "chars": 1976,
    "preview": "import argparse\nimport subprocess\nimport sys\nimport os\nimport re\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n  "
  },
  {
    "path": "argtable3/test_apps/console_compat/main/CMakeLists.txt",
    "chars": 85,
    "preview": "idf_component_register(SRCS \"test_main.c\"\n                    PRIV_REQUIRES console)\n"
  },
  {
    "path": "argtable3/test_apps/console_compat/main/idf_component.yml",
    "chars": 84,
    "preview": "dependencies:\n  espressif/argtable3:\n    version: \"*\"\n    override_path: \"../../..\"\n"
  },
  {
    "path": "argtable3/test_apps/console_compat/main/test_main.c",
    "chars": 288,
    "preview": "#include \"esp_console.h\"\n\nvoid app_main(void)\n{\n    // call a function of console component which uses argtable3\n    esp"
  },
  {
    "path": "bdc_motor/.build-test-rules.yml",
    "chars": 115,
    "preview": "bdc_motor/test_apps:\n  disable:\n    - if: SOC_MCPWM_SUPPORTED != 1\n      reason: Only MCPWM backend is implemented\n"
  },
  {
    "path": "bdc_motor/CHANGELOG.md",
    "chars": 137,
    "preview": "# Changelog\n\n## 0.2.0\n\n- Clean up the component dependency, don't depend on the `driver` component directly\n\n## 0.1.0\n\n-"
  },
  {
    "path": "bdc_motor/CMakeLists.txt",
    "chars": 435,
    "preview": "set(srcs \"src/bdc_motor.c\")\n\nif(CONFIG_SOC_MCPWM_SUPPORTED)\n    list(APPEND srcs \"src/bdc_motor_mcpwm_impl.c\")\nendif()\n\n"
  },
  {
    "path": "bdc_motor/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "bdc_motor/README.md",
    "chars": 476,
    "preview": "# Brushed DC Motor Control\n\n[![Component Registry](https://components.espressif.com/components/espressif/bdc_motor/badge"
  },
  {
    "path": "bdc_motor/idf_component.yml",
    "chars": 299,
    "preview": "version: \"0.2.1\"\ndescription: Brushed DC Motor Control Driver\nurl: https://github.com/espressif/idf-extra-components/tre"
  },
  {
    "path": "bdc_motor/include/bdc_motor.h",
    "chars": 3916,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#pr"
  },
  {
    "path": "bdc_motor/interface/bdc_motor_interface.h",
    "chars": 3039,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#pr"
  },
  {
    "path": "bdc_motor/src/bdc_motor.c",
    "chars": 1696,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#in"
  },
  {
    "path": "bdc_motor/src/bdc_motor_mcpwm_impl.c",
    "chars": 8215,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n#in"
  },
  {
    "path": "bdc_motor/test_apps/CMakeLists.txt",
    "chars": 133,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\nproject(bdc"
  },
  {
    "path": "bdc_motor/test_apps/main/CMakeLists.txt",
    "chars": 125,
    "preview": "idf_component_register(SRCS \"bdc_motor_test.c\"\n                    INCLUDE_DIRS \".\"\n                    PRIV_REQUIRES un"
  },
  {
    "path": "bdc_motor/test_apps/main/bdc_motor_test.c",
    "chars": 45,
    "preview": "#include <stdio.h>\n\nvoid app_main(void)\n{\n\n}\n"
  },
  {
    "path": "bdc_motor/test_apps/main/idf_component.yml",
    "chars": 82,
    "preview": "dependencies:\n  espressif/bdc_motor:\n    version: \"*\"\n    override_path: \"../../\"\n"
  },
  {
    "path": "catch2/CMakeLists.txt",
    "chars": 1085,
    "preview": "idf_component_register(SRCS cmd_catch2.cpp\n                       INCLUDE_DIRS include)\n\nset(CATCH_CONFIG_NO_POSIX_SIGNA"
  },
  {
    "path": "catch2/LICENSE.txt",
    "chars": 1338,
    "preview": "Boost Software License - Version 1.0 - August 17th, 2003\n\nPermission is hereby granted, free of charge, to any person or"
  },
  {
    "path": "catch2/README.md",
    "chars": 3364,
    "preview": "# Catch2 unit testing library\n\nThis component is an ESP-IDF wrapper around [Catch2 unit testing library](https://github."
  },
  {
    "path": "catch2/cmd_catch2.cpp",
    "chars": 1011,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: BSL-1.0\n * Note: s"
  },
  {
    "path": "catch2/examples/catch2-console/CMakeLists.txt",
    "chars": 135,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\n\nproject(ca"
  },
  {
    "path": "catch2/examples/catch2-console/README.md",
    "chars": 865,
    "preview": "# Catch2 console example\n\nThis example shows how to combine Catch2 test framework with ESP-IDF `console` component.\n\nIn "
  },
  {
    "path": "catch2/examples/catch2-console/main/CMakeLists.txt",
    "chars": 212,
    "preview": "idf_component_register(SRCS \"test_main.cpp\"\n                            \"test_cases.cpp\"\n                       INCLUDE_"
  },
  {
    "path": "catch2/examples/catch2-console/main/idf_component.yml",
    "chars": 82,
    "preview": "dependencies:\n  espressif/catch2:\n    version: \"*\"\n    override_path: \"../../../\"\n"
  },
  {
    "path": "catch2/examples/catch2-console/main/test_cases.cpp",
    "chars": 218,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR CC0-1"
  },
  {
    "path": "catch2/examples/catch2-console/main/test_main.cpp",
    "chars": 1567,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR CC0-1"
  },
  {
    "path": "catch2/examples/catch2-console/pytest_catch2_console.py",
    "chars": 524,
    "preview": "# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD\n# SPDX-License-Identifier: Unlicense OR CC0-1.0\n\nimpo"
  },
  {
    "path": "catch2/examples/catch2-console/sdkconfig.defaults",
    "chars": 69,
    "preview": "CONFIG_COMPILER_CXX_EXCEPTIONS=y\nCONFIG_ESP_CONSOLE_SECONDARY_NONE=y\n"
  },
  {
    "path": "catch2/examples/catch2-test/CMakeLists.txt",
    "chars": 132,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\n\nproject(ca"
  },
  {
    "path": "catch2/examples/catch2-test/README.md",
    "chars": 1178,
    "preview": "# Catch2 example\n\nThis example should help you get started with Catch2 test framework.\n\n## Using the example\n\nTo run the"
  },
  {
    "path": "catch2/examples/catch2-test/main/CMakeLists.txt",
    "chars": 167,
    "preview": "idf_component_register(SRCS \"test_main.cpp\"\n                            \"test_cases.cpp\"\n                       INCLUDE_"
  },
  {
    "path": "catch2/examples/catch2-test/main/idf_component.yml",
    "chars": 82,
    "preview": "dependencies:\n  espressif/catch2:\n    version: \"*\"\n    override_path: \"../../../\"\n"
  },
  {
    "path": "catch2/examples/catch2-test/main/test_cases.cpp",
    "chars": 218,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR CC0-1"
  },
  {
    "path": "catch2/examples/catch2-test/main/test_main.cpp",
    "chars": 497,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR CC0-1"
  },
  {
    "path": "catch2/examples/catch2-test/pytest_catch2.py",
    "chars": 321,
    "preview": "# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD\n# SPDX-License-Identifier: Unlicense OR CC0-1.0\n\nimpo"
  },
  {
    "path": "catch2/examples/catch2-test/sdkconfig.defaults",
    "chars": 71,
    "preview": "CONFIG_COMPILER_CXX_EXCEPTIONS=y\nCONFIG_ESP_MAIN_TASK_STACK_SIZE=10000\n"
  },
  {
    "path": "catch2/idf_component.yml",
    "chars": 647,
    "preview": "version: \"3.7.0\"\ndescription: A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and "
  },
  {
    "path": "catch2/include/cmd_catch2.h",
    "chars": 464,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: BSL-1.0\n */\n#pragm"
  },
  {
    "path": "catch2/sbom_catch2.yml",
    "chars": 337,
    "preview": "name: catch2\nversion: 3.7.0\ncpe: cpe:2.3:a:catchorg:catch2:{}:*:*:*:*:*:*:*\nsupplier: 'Organization: catchorg <https://g"
  },
  {
    "path": "cbor/CMakeLists.txt",
    "chars": 1237,
    "preview": "idf_component_register(SRCS \"tinycbor/src/cborencoder_close_container_checked.c\"\n                            \"tinycbor/s"
  },
  {
    "path": "cbor/examples/cbor/CMakeLists.txt",
    "chars": 250,
    "preview": "# The following lines of boilerplate have to be in your project's\n# CMakeLists in this exact order for cmake to work cor"
  },
  {
    "path": "cbor/examples/cbor/README.md",
    "chars": 1691,
    "preview": "# CBOR Example\n\n## Overview\n\nThe [CBOR](https://en.wikipedia.org/wiki/CBOR)(Concise Binary Object Representation) is a b"
  },
  {
    "path": "cbor/examples/cbor/main/CMakeLists.txt",
    "chars": 90,
    "preview": "idf_component_register(SRCS \"cbor_example_main.c\"\n                       INCLUDE_DIRS \"\")\n"
  },
  {
    "path": "cbor/examples/cbor/main/cbor_example_main.c",
    "chars": 8056,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR "
  },
  {
    "path": "cbor/examples/cbor/main/idf_component.yml",
    "chars": 164,
    "preview": "## IDF Component Manager Manifest File\nversion: \"1.0.0\"\ndescription: CBOR Example\ndependencies:\n  espressif/cbor:\n    ve"
  },
  {
    "path": "cbor/examples/cbor/pytest_cbor.py",
    "chars": 1806,
    "preview": "# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n# SPDX-License-Identifier: Unlicense OR CC0-1.0\nfrom "
  },
  {
    "path": "cbor/examples/cbor/sdkconfig.defaults",
    "chars": 251,
    "preview": "# This example is not supported with newlib nano:\n#   - First 64-bit integers are not supported in newlib nano\n#   - The"
  },
  {
    "path": "cbor/idf_component.yml",
    "chars": 191,
    "preview": "version: \"0.6.1~4\"\r\ndescription: \"CBOR: Concise Binary Object Representation Library\"\r\nurl: https://github.com/espressif"
  },
  {
    "path": "cbor/port/include/unreachable_fix.h",
    "chars": 541,
    "preview": "/*\n * SPDX-FileCopyrightText: 2022-2025 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Unlicense OR "
  },
  {
    "path": "ccomp_timer/.build-test-rules.yml",
    "chars": 180,
    "preview": "ccomp_timer/test_apps:\n  enable:\n    - if: IDF_TARGET in [\"esp32\", \"esp32s2\", \"esp32c3\"]\n      reason: \"Testing on these"
  },
  {
    "path": "ccomp_timer/CHANGELOG.md",
    "chars": 114,
    "preview": "## 1.0.0\n\n- Move the cache compensated timer from `esp-idf/tools/unit-test-app/components` to component registry.\n"
  },
  {
    "path": "ccomp_timer/CMakeLists.txt",
    "chars": 567,
    "preview": "idf_build_get_property(arch IDF_TARGET_ARCH)\n\nset(srcs \"ccomp_timer.c\")\n\nif(CONFIG_IDF_TARGET_ARCH_RISCV)\n    list(APPEN"
  },
  {
    "path": "ccomp_timer/LICENSE",
    "chars": 11358,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "ccomp_timer/README.md",
    "chars": 786,
    "preview": "# Cache Compensated Timer\n\n[![Component Registry](https://components.espressif.com/components/espressif/ccomp_timer/badg"
  },
  {
    "path": "ccomp_timer/ccomp_timer.c",
    "chars": 1498,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n *"
  },
  {
    "path": "ccomp_timer/ccomp_timer_impl_riscv.c",
    "chars": 3185,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n *"
  },
  {
    "path": "ccomp_timer/ccomp_timer_impl_xtensa.c",
    "chars": 6762,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n *"
  },
  {
    "path": "ccomp_timer/idf_component.yml",
    "chars": 231,
    "preview": "version: \"1.0.0~1\"\ndescription: Cache Compensated Timer\nurl: https://github.com/espressif/idf-extra-components/tree/mast"
  },
  {
    "path": "ccomp_timer/include/ccomp_timer.h",
    "chars": 1444,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n *"
  },
  {
    "path": "ccomp_timer/private_include/ccomp_timer_impl.h",
    "chars": 2614,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n *"
  },
  {
    "path": "ccomp_timer/test_apps/CMakeLists.txt",
    "chars": 135,
    "preview": "cmake_minimum_required(VERSION 3.16)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\nproject(cco"
  },
  {
    "path": "ccomp_timer/test_apps/main/CMakeLists.txt",
    "chars": 508,
    "preview": "idf_build_get_property(arch IDF_TARGET_ARCH)\n\nset(priv_requires esp_timer unity)\nif(\"${arch}\" STREQUAL \"xtensa\")\n    lis"
  },
  {
    "path": "ccomp_timer/test_apps/main/ccomp_timer_test.c",
    "chars": 558,
    "preview": "/*\n * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n */\n\n#i"
  },
  {
    "path": "ccomp_timer/test_apps/main/ccomp_timer_test_api.c",
    "chars": 4331,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: CC0-1.0\n */\n#"
  },
  {
    "path": "ccomp_timer/test_apps/main/ccomp_timer_test_data.c",
    "chars": 4637,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: CC0-1.0\n */\n#"
  },
  {
    "path": "ccomp_timer/test_apps/main/ccomp_timer_test_inst.c",
    "chars": 5515,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: CC0-1.0\n */\n#"
  },
  {
    "path": "ccomp_timer/test_apps/main/idf_component.yml",
    "chars": 82,
    "preview": "dependencies:\n  espressif/ccomp_timer:\n    version: \"*\"\n    override_path: ../../\n"
  },
  {
    "path": "ccomp_timer/test_apps/pytest_ccomp_timer.py",
    "chars": 109,
    "preview": "import pytest\n\n\n@pytest.mark.generic\ndef test_ccomp_timer(dut) -> None:\n    dut.run_all_single_board_cases()\n"
  },
  {
    "path": "ccomp_timer/test_apps/sdkconfig.defaults",
    "chars": 195,
    "preview": "# This file was generated using idf.py save-defconfig. It can be edited manually.\n# Espressif IoT Development Framework "
  },
  {
    "path": "cjson/CMakeLists.txt",
    "chars": 299,
    "preview": "idf_component_register(SRCS \"cJSON/cJSON.c\"\n                            \"cJSON/cJSON_Utils.c\"\n                    INCLUD"
  },
  {
    "path": "cjson/Kconfig",
    "chars": 763,
    "preview": "menu \"cJSON\"\n\n    config CJSON_NESTING_LIMIT\n        int \"Maximum nesting depth for JSON parsing\"\n        default 1000\n "
  },
  {
    "path": "cjson/idf_component.yml",
    "chars": 247,
    "preview": "version: \"1.7.19~2\"\ndescription: \"cJSON: Ultralightweight JSON parser in ANSI C\"\nurl: https://github.com/espressif/idf-e"
  },
  {
    "path": "cjson/sbom_cJSON.yml",
    "chars": 313,
    "preview": "name: cJSON\nversion: \"1.7.19\"\ncpe:\n - cpe:2.3:a:cjson_project:cjson:{}:*:*:*:*:*:*:*\n - cpe:2.3:a:davegamble:cjson:{}:*:"
  },
  {
    "path": "coap/CMakeLists.txt",
    "chars": 1495,
    "preview": "set(include_dirs port/include libcoap/include)\n\nset(srcs\n    \"libcoap/src/coap_address.c\"\n    \"libcoap/src/coap_asn1.c\"\n"
  },
  {
    "path": "coap/Kconfig",
    "chars": 6365,
    "preview": "menu \"CoAP Configuration\"\n    config COAP_MBEDTLS_PSK\n        bool \"Pre-Shared Keys\"\n        default y\n        help\n    "
  },
  {
    "path": "coap/examples/coap_client/CMakeLists.txt",
    "chars": 265,
    "preview": "# The following lines of boilerplate have to be in your project's CMakeLists\n# in this exact order for cmake to work cor"
  },
  {
    "path": "coap/examples/coap_client/README.md",
    "chars": 5588,
    "preview": "| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |\n| ----------------- | --"
  },
  {
    "path": "coap/examples/coap_client/main/CMakeLists.txt",
    "chars": 267,
    "preview": "# Embed CA, certificate & key directly into binary\nidf_component_register(SRCS \"coap_client_example_main.c\"\n            "
  },
  {
    "path": "coap/examples/coap_client/main/Kconfig.projbuild",
    "chars": 1069,
    "preview": "menu \"Example CoAP Client Configuration\"\n\n    config EXAMPLE_TARGET_DOMAIN_URI\n        string \"Target Uri\"\n        defau"
  },
  {
    "path": "coap/examples/coap_client/main/certs/coap_ca.pem",
    "chars": 1538,
    "preview": "-----BEGIN CERTIFICATE-----\nMIICDDCCAbKgAwIBAgIIPKO8L7vZoqAwCgYIKoZIzj0EAwIwXDEQMA4GA1UEAxMH\nY2Ytcm9vdDEUMBIGA1UECxMLQ2F"
  },
  {
    "path": "coap/examples/coap_client/main/certs/coap_client.crt",
    "chars": 749,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIB/TCCAaOgAwIBAgIIVNrVgKT9OE8wCgYIKoZIzj0EAwIwWjEOMAwGA1UEAxMF\nY2YtY2ExFDASBgNVBAsTC0NhbGl"
  },
  {
    "path": "coap/examples/coap_client/main/certs/coap_client.key",
    "chars": 241,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg59PuAri3l+8cAbNL\nbFFBAwd/h0cESnSD3iZSGyrr7xG"
  },
  {
    "path": "coap/examples/coap_client/main/coap_client_example_main.c",
    "chars": 18346,
    "preview": "/* CoAP client Example\n\n   This example code is in the Public Domain (or CC0 licensed, at your option.)\n\n   Unless requi"
  },
  {
    "path": "coap/examples/coap_client/main/idf_component.yml",
    "chars": 231,
    "preview": "version: 1.0.0\ndescription: CoAP Client Example\ndependencies:\n  espressif/coap:\n    version: ^4.3.0\n    override_path: ."
  },
  {
    "path": "coap/examples/coap_client/main/oscore/coap_oscore.conf",
    "chars": 340,
    "preview": "# https://libcoap.net/doc/reference/develop/man_coap-oscore-conf.html\nmaster_secret,hex,\"0102030405060708090a0b0c0d0e0f1"
  },
  {
    "path": "coap/examples/coap_client/partitions.csv",
    "chars": 271,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\n# Note: if you have increased the bootloader size, make sure to update the"
  },
  {
    "path": "coap/examples/coap_client/pytest_coap_client_example.py",
    "chars": 836,
    "preview": "# SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD\n# SPDX-License-Identifier: Unlicense OR CC0-1.0\nimpor"
  },
  {
    "path": "coap/examples/coap_client/sdkconfig.ci",
    "chars": 314,
    "preview": "CONFIG_EXAMPLE_CONNECT_ETHERNET=y\nCONFIG_EXAMPLE_CONNECT_WIFI=n\nCONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y\nCONFIG_EXAMPLE_ET"
  },
  {
    "path": "coap/examples/coap_client/sdkconfig.defaults",
    "chars": 290,
    "preview": "CONFIG_MBEDTLS_SSL_PROTO_DTLS=y\nCONFIG_MBEDTLS_PSK_MODES=y\nCONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y\nCONFIG_LWIP_NETBUF_RECVINFO"
  },
  {
    "path": "coap/examples/coap_client/sdkconfig.defaults.esp32h2",
    "chars": 63,
    "preview": "CONFIG_EXAMPLE_CONNECT_WIFI=n\nCONFIG_EXAMPLE_CONNECT_ETHERNET=y"
  },
  {
    "path": "coap/examples/coap_server/CMakeLists.txt",
    "chars": 265,
    "preview": "# The following lines of boilerplate have to be in your project's CMakeLists\n# in this exact order for cmake to work cor"
  },
  {
    "path": "coap/examples/coap_server/README.md",
    "chars": 3920,
    "preview": "| Supported Targets | ESP32 | ESP32-C2 | ESP32-C3 | ESP32-C6 | ESP32-H2 | ESP32-S2 | ESP32-S3 |\n| ----------------- | --"
  },
  {
    "path": "coap/examples/coap_server/main/CMakeLists.txt",
    "chars": 216,
    "preview": "idf_component_register(SRCS \"coap_server_example_main.c\"\n                    INCLUDE_DIRS \".\"\n                    EMBED_"
  },
  {
    "path": "coap/examples/coap_server/main/Kconfig.projbuild",
    "chars": 3122,
    "preview": "menu \"Example CoAP Server Configuration\"\n\n    config EXAMPLE_COAP_PSK_KEY\n        string \"Preshared Key (PSK) to used in"
  },
  {
    "path": "coap/examples/coap_server/main/certs/coap_ca.pem",
    "chars": 1538,
    "preview": "-----BEGIN CERTIFICATE-----\nMIICDDCCAbKgAwIBAgIIPKO8L7vZoqAwCgYIKoZIzj0EAwIwXDEQMA4GA1UEAxMH\nY2Ytcm9vdDEUMBIGA1UECxMLQ2F"
  },
  {
    "path": "coap/examples/coap_server/main/certs/coap_server.crt",
    "chars": 891,
    "preview": "-----BEGIN CERTIFICATE-----\nMIICZDCCAgmgAwIBAgIIDY1x9glyw2UwCgYIKoZIzj0EAwIwWjEOMAwGA1UEAxMF\nY2YtY2ExFDASBgNVBAsTC0NhbGl"
  },
  {
    "path": "coap/examples/coap_server/main/certs/coap_server.key",
    "chars": 241,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgxL7AZvC26M+snaJ2\n+L8XSPUvKJN9Tk4im2CaBMzDeza"
  },
  {
    "path": "coap/examples/coap_server/main/coap_server_example_main.c",
    "chars": 16711,
    "preview": "/* CoAP server Example\n\n   This example code is in the Public Domain (or CC0 licensed, at your option.)\n\n   Unless requi"
  },
  {
    "path": "coap/examples/coap_server/main/idf_component.yml",
    "chars": 231,
    "preview": "version: 1.0.0\ndescription: CoAP Server Example\ndependencies:\n  espressif/coap:\n    version: ^4.3.0\n    override_path: ."
  },
  {
    "path": "coap/examples/coap_server/main/oscore/coap_oscore.conf",
    "chars": 340,
    "preview": "# https://libcoap.net/doc/reference/develop/man_coap-oscore-conf.html\nmaster_secret,hex,\"0102030405060708090a0b0c0d0e0f1"
  },
  {
    "path": "coap/examples/coap_server/partitions.csv",
    "chars": 271,
    "preview": "# Name,   Type, SubType, Offset,  Size, Flags\n# Note: if you have increased the bootloader size, make sure to update the"
  },
  {
    "path": "coap/examples/coap_server/sdkconfig.ci",
    "chars": 314,
    "preview": "CONFIG_EXAMPLE_CONNECT_ETHERNET=y\nCONFIG_EXAMPLE_CONNECT_WIFI=n\nCONFIG_EXAMPLE_USE_INTERNAL_ETHERNET=y\nCONFIG_EXAMPLE_ET"
  },
  {
    "path": "coap/examples/coap_server/sdkconfig.defaults",
    "chars": 290,
    "preview": "CONFIG_MBEDTLS_SSL_PROTO_DTLS=y\nCONFIG_MBEDTLS_PSK_MODES=y\nCONFIG_MBEDTLS_KEY_EXCHANGE_PSK=y\nCONFIG_LWIP_NETBUF_RECVINFO"
  },
  {
    "path": "coap/examples/coap_server/sdkconfig.defaults.esp32h2",
    "chars": 63,
    "preview": "CONFIG_EXAMPLE_CONNECT_WIFI=n\nCONFIG_EXAMPLE_CONNECT_ETHERNET=y"
  },
  {
    "path": "coap/idf_component.yml",
    "chars": 251,
    "preview": "version: \"4.3.5~6\"\ndescription: Constrained Application Protocol (CoAP) C Library\nurl: https://github.com/espressif/idf-"
  },
  {
    "path": "coap/port/include/coap_config.h",
    "chars": 3618,
    "preview": "/*\n * libcoap configure implementation for ESP32 platform.\n *\n * coap.h -- main header file for CoAP stack of libcoap\n *"
  },
  {
    "path": "coap/port/include/coap_config_posix.h",
    "chars": 1959,
    "preview": "/*\n * libcoap configure implementation for ESP32 platform.\n *\n * Uses libcoap software implementation for failover when "
  },
  {
    "path": "coap/sbom_libcoap.yml",
    "chars": 1375,
    "preview": "name: libcoap\nversion: 4.3.5\ncpe: cpe:2.3:a:libcoap:libcoap:{}:*:*:*:*:*:*:*\nsupplier: 'Organization: libcoap <https://l"
  },
  {
    "path": "coap/sdkconfig.rename",
    "chars": 205,
    "preview": "# sdkconfig replacement configurations for deprecated options formatted as\n# CONFIG_DEPRECATED_OPTION CONFIG_NEW_OPTION\n"
  },
  {
    "path": "conftest.py",
    "chars": 2658,
    "preview": "from _pytest.fixtures import FixtureRequest\nfrom pytest_embedded.plugin import multi_dut_argument, multi_dut_fixture\nimp"
  },
  {
    "path": "coremark/.build-test-rules.yml",
    "chars": 146,
    "preview": "coremark/examples:\n  enable:\n    - if: IDF_TARGET in [\"esp32\", \"esp32c3\"]\n      reason: \"Sufficient to test on one Xtens"
  },
  {
    "path": "coremark/CMakeLists.txt",
    "chars": 1541,
    "preview": "\nset(srcs coremark/core_list_join.c\n         coremark/core_main.c\n         coremark/core_matrix.c\n         coremark/core"
  },
  {
    "path": "coremark/LICENSE",
    "chars": 18504,
    "preview": "# COREMARK® ACCEPTABLE USE AGREEMENT \n\nThis ACCEPTABLE USE AGREEMENT (this “Agreement”) is offered by Embedded Microproc"
  },
  {
    "path": "coremark/README.md",
    "chars": 3565,
    "preview": "[![Component Registry](https://components.espressif.com/components/espressif/coremark/badge.svg)](https://components.esp"
  },
  {
    "path": "coremark/examples/coremark_example/CMakeLists.txt",
    "chars": 134,
    "preview": "cmake_minimum_required(VERSION 3.5)\n\nset(COMPONENTS main)\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nproject(core"
  },
  {
    "path": "coremark/examples/coremark_example/README.md",
    "chars": 1474,
    "preview": "# CoreMark example\n\nThis example can be used to run CoreMark benchmark on an Espressif chip.\n\nThe example doesn't requir"
  },
  {
    "path": "coremark/examples/coremark_example/main/CMakeLists.txt",
    "chars": 99,
    "preview": "idf_component_register(SRCS coremark_example_main.c\n                       PRIV_REQUIRES coremark)\n"
  },
  {
    "path": "coremark/examples/coremark_example/main/coremark_example_main.c",
    "chars": 1011,
    "preview": "/*\n * SPDX-FileCopyrightText: 2019-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: CC0-1.0\n */\n\n"
  },
  {
    "path": "coremark/examples/coremark_example/main/idf_component.yml",
    "chars": 128,
    "preview": "description: Coremark benchmark application\ndependencies:\n  espressif/coremark:\n    version: \"*\"\n    override_path: '../"
  },
  {
    "path": "coremark/examples/coremark_example/pytest_coremark.py",
    "chars": 169,
    "preview": "import pytest\n\n\n@pytest.mark.generic\ndef test_coremark(dut):\n    dut.expect_exact(\"Running coremark...\")\n    dut.expect_"
  },
  {
    "path": "coremark/examples/coremark_example/sdkconfig.defaults",
    "chars": 27,
    "preview": "CONFIG_ESP_TASK_WDT_INIT=n\n"
  },
  {
    "path": "coremark/examples/coremark_example/sdkconfig.defaults.esp32",
    "chars": 38,
    "preview": "CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y\n"
  },
  {
    "path": "coremark/examples/coremark_example/sdkconfig.defaults.esp32s2",
    "chars": 38,
    "preview": "CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y\n"
  },
  {
    "path": "coremark/examples/coremark_example/sdkconfig.defaults.esp32s3",
    "chars": 38,
    "preview": "CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y\n"
  },
  {
    "path": "coremark/idf_component.yml",
    "chars": 334,
    "preview": "version: \"1.1.0~2\"\ndescription: CoreMark Benchmark\nurl: https://github.com/espressif/idf-extra-components/tree/master/co"
  },
  {
    "path": "coremark/linker.lf.in",
    "chars": 76,
    "preview": "[mapping:coremark]\narchive: lib${COMPONENT_NAME}.a\nentries:\n    * (noflash)\n"
  },
  {
    "path": "coremark/port/core_portme.c",
    "chars": 4080,
    "preview": "/*\n * SPDX-FileCopyrightText: 2018 EEMBC\n * SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-Li"
  },
  {
    "path": "coremark/port/core_portme.h.in",
    "chars": 4970,
    "preview": "/*\n * SPDX-FileCopyrightText: 2018 EEMBC\n * SPDX-FileContributor: 2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-Li"
  },
  {
    "path": "dhara/CMakeLists.txt",
    "chars": 89,
    "preview": "idf_component_register(INCLUDE_DIRS dhara\n                       SRC_DIRS \"dhara/dhara\")\n"
  },
  {
    "path": "dhara/LICENSE",
    "chars": 784,
    "preview": "Dhara - NAND flash management layer\nCopyright (C) 2013 Daniel Beer <dlbeer@gmail.com>\n\nPermission to use, copy, modify, "
  },
  {
    "path": "dhara/README.md",
    "chars": 253,
    "preview": "# NAND Flash translation layer for small MCUs\n\nThis component is an ESP-IDF wrapper around [dhara library](https://githu"
  },
  {
    "path": "dhara/idf_component.yml",
    "chars": 327,
    "preview": "version: \"0.1.0\"\ndescription: NAND Flash translation layer\nurl: https://github.com/espressif/idf-extra-components/tree/m"
  },
  {
    "path": "dhara/sbom_dhara.yml",
    "chars": 280,
    "preview": "name: dhara\nversion: 1b166e41b74b4a62ee6001ba5fab7a8805e80ea2 \ncpe: cpe:2.3:a:dhara:dhara:{}:*:*:*:*:*:*:*\nsupplier: 'Or"
  },
  {
    "path": "eigen/CMakeLists.txt",
    "chars": 2215,
    "preview": "idf_component_register(\n                       # We need the dummy source file so that the component\n                   "
  },
  {
    "path": "eigen/LICENSE",
    "chars": 16726,
    "preview": "Mozilla Public License Version 2.0\n==================================\n\n1. Definitions\n--------------\n\n1.1. \"Contributor\""
  },
  {
    "path": "eigen/README.md",
    "chars": 521,
    "preview": "# Eigen for ESP-IDF\n\n[![Component Registry](https://components.espressif.com/components/espressif/eigen/badge.svg)](http"
  },
  {
    "path": "eigen/dummy.c",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "eigen/examples/svd/CMakeLists.txt",
    "chars": 254,
    "preview": "# The following lines of boilerplate have to be in your project's\n# CMakeLists in this exact order for cmake to work cor"
  },
  {
    "path": "eigen/examples/svd/README.md",
    "chars": 380,
    "preview": "# Eigen example for IDF Eigen component\n\nThis example shows how to use Eigen library in ESP-IDF projects.\n\nThe example d"
  },
  {
    "path": "eigen/examples/svd/main/CMakeLists.txt",
    "chars": 113,
    "preview": "idf_component_register(SRCS \"main.cpp\" \n                    INCLUDE_DIRS \".\"\n                    REQUIRES eigen)\n"
  },
  {
    "path": "eigen/examples/svd/main/idf_component.yml",
    "chars": 325,
    "preview": "## IDF Component Manager Manifest File\ndependencies:\n  espressif/eigen: \n    version: \"^3.4.0\"\n    # This line define th"
  },
  {
    "path": "eigen/examples/svd/main/main.cpp",
    "chars": 1340,
    "preview": "/*\n * SPDX-FileCopyrightText: 2010-2023 Espressif Systems (Shanghai) CO LTD\n *\n * SPDX-License-Identifier: Apache-2.0\n*/"
  },
  {
    "path": "eigen/examples/svd/sdkconfig.defaults",
    "chars": 103,
    "preview": "#\n# Common ESP-related\n#\n# CONFIG_ESP_TIMER_PROFILING is not set\nCONFIG_ESP_MAIN_TASK_STACK_SIZE=16384\n"
  },
  {
    "path": "eigen/idf_component.yml",
    "chars": 155,
    "preview": "\nversion: \"3.4.0~2\"\ndescription: Eigen port to ESP\nurl: https://github.com/espressif/idf-extra-components/tree/master/ei"
  },
  {
    "path": "esp_cli/.build-test-rules.yml",
    "chars": 496,
    "preview": "esp_cli/host_test:\n  enable:\n    - if: IDF_TARGET == \"linux\"\n      reason: \"Sufficient to test on Linux target\"\n  disabl"
  },
  {
    "path": "esp_cli/CMakeLists.txt",
    "chars": 263,
    "preview": "idf_build_get_property(target IDF_TARGET)\n\nset(srcs \"src/esp_cli.c\")\n\nidf_component_register(\n                    SRCS $"
  },
  {
    "path": "esp_cli/Kconfig",
    "chars": 420,
    "preview": "menu \"esp_cli configuration\"\n\n    config ESP_CLI_HAS_QUIT_CMD\n        bool \"Register quit command\"\n        default n\n   "
  },
  {
    "path": "esp_cli/LICENSE",
    "chars": 11342,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "esp_cli/README.md",
    "chars": 9081,
    "preview": "# esp_cli Component\n\nThe `esp_cli` component provides a **Runtime Evaluation Loop (REPL)** mechanism for ESP-IDF-based a"
  },
  {
    "path": "esp_cli/host_test/CMakeLists.txt",
    "chars": 136,
    "preview": "cmake_minimum_required(VERSION 3.22)\n\ninclude($ENV{IDF_PATH}/tools/cmake/project.cmake)\nset(COMPONENTS main)\nproject(esp"
  }
]

// ... and 1022 more files (download for full content)

About this extraction

This page contains the full source code of the espressif/idf-extra-components GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1222 files (5.3 MB), approximately 1.5M tokens, and a symbol index with 3533 extracted functions, classes, methods, constants, and types. 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.

Copied to clipboard!