Showing preview only (4,854K chars total). Download the full file or copy to clipboard to get everything.
Repository: memfault/memfault-firmware-sdk
Branch: master
Commit: 84d6c4199ea7
Files: 960
Total size: 4.4 MB
Directory structure:
gitextract_wb972ssr/
├── .circleci/
│ ├── Dockerfile
│ ├── config.yml
│ └── runas.sh
├── .clang-format
├── .codecov.yml
├── .cyignore
├── .git-blame-ignore-revs
├── .gitignore
├── CHANGELOG.md
├── CMakeLists.txt
├── Kconfig
├── LICENSE
├── README.md
├── VERSION
├── cmake/
│ └── Memfault.cmake
├── components/
│ ├── README.md
│ ├── core/
│ │ ├── README.md
│ │ └── src/
│ │ ├── .gitkeep
│ │ ├── arch_arm_cortex_m.c
│ │ ├── memfault_batched_events.c
│ │ ├── memfault_build_id.c
│ │ ├── memfault_build_id_private.h
│ │ ├── memfault_compact_log_serializer.c
│ │ ├── memfault_core_utils.c
│ │ ├── memfault_custom_data_recording.c
│ │ ├── memfault_custom_data_recording_private.h
│ │ ├── memfault_data_export.c
│ │ ├── memfault_data_packetizer.c
│ │ ├── memfault_data_source_rle.c
│ │ ├── memfault_event_storage.c
│ │ ├── memfault_heap_stats.c
│ │ ├── memfault_log.c
│ │ ├── memfault_log_data_source.c
│ │ ├── memfault_log_data_source_private.h
│ │ ├── memfault_log_private.h
│ │ ├── memfault_ram_reboot_info_tracking.c
│ │ ├── memfault_reboot_tracking_private.h
│ │ ├── memfault_reboot_tracking_serializer.c
│ │ ├── memfault_sdk_assert.c
│ │ ├── memfault_self_test.c
│ │ ├── memfault_self_test_private.h
│ │ ├── memfault_self_test_utils.c
│ │ ├── memfault_serializer_helper.c
│ │ ├── memfault_task_watchdog.c
│ │ ├── memfault_trace_event.c
│ │ └── memfault_trace_event_private.h
│ ├── demo/
│ │ ├── README.md
│ │ └── src/
│ │ ├── http/
│ │ │ └── memfault_demo_http.c
│ │ ├── memfault_demo_cli_drain_chunks.c
│ │ ├── memfault_demo_cli_log.c
│ │ ├── memfault_demo_cli_trace_event.c
│ │ ├── memfault_demo_core.c
│ │ ├── memfault_demo_shell.c
│ │ ├── memfault_demo_shell_commands.c
│ │ ├── memfault_demo_watchdog.c
│ │ └── panics/
│ │ ├── memfault_demo_cli_aux.c
│ │ ├── memfault_demo_cli_aux_private.h
│ │ └── memfault_demo_panics.c
│ ├── http/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_http_client.c
│ │ ├── memfault_http_client_post_chunk.c
│ │ ├── memfault_http_utils.c
│ │ └── memfault_root_certs_der.c
│ ├── include/
│ │ └── memfault/
│ │ ├── components.h
│ │ ├── config.h
│ │ ├── core/
│ │ │ ├── arch.h
│ │ │ ├── batched_events.h
│ │ │ ├── build_info.h
│ │ │ ├── compact_log_compile_time_checks.h
│ │ │ ├── compact_log_helpers.h
│ │ │ ├── compact_log_serializer.h
│ │ │ ├── compiler.h
│ │ │ ├── compiler_armcc.h
│ │ │ ├── compiler_gcc.h
│ │ │ ├── compiler_iar.h
│ │ │ ├── compiler_ti_arm.h
│ │ │ ├── custom_data_recording.h
│ │ │ ├── data_export.h
│ │ │ ├── data_packetizer.h
│ │ │ ├── data_packetizer_source.h
│ │ │ ├── data_source_rle.h
│ │ │ ├── debug_log.h
│ │ │ ├── device_info.h
│ │ │ ├── errors.h
│ │ │ ├── event_storage.h
│ │ │ ├── event_storage_implementation.h
│ │ │ ├── heap_stats.h
│ │ │ ├── heap_stats_impl.h
│ │ │ ├── log.h
│ │ │ ├── log_impl.h
│ │ │ ├── math.h
│ │ │ ├── platform/
│ │ │ │ ├── core.h
│ │ │ │ ├── crc32.h
│ │ │ │ ├── debug_log.h
│ │ │ │ ├── device_info.h
│ │ │ │ ├── nonvolatile_event_storage.h
│ │ │ │ ├── overrides.h
│ │ │ │ ├── reboot_tracking.h
│ │ │ │ └── system_time.h
│ │ │ ├── preprocessor.h
│ │ │ ├── reboot_reason_types.h
│ │ │ ├── reboot_tracking.h
│ │ │ ├── sdk_assert.h
│ │ │ ├── self_test.h
│ │ │ ├── serializer_helper.h
│ │ │ ├── serializer_key_ids.h
│ │ │ ├── task_watchdog.h
│ │ │ ├── task_watchdog_impl.h
│ │ │ ├── trace_event.h
│ │ │ ├── trace_event_impl.h
│ │ │ └── trace_reason_user.h
│ │ ├── default_config.h
│ │ ├── demo/
│ │ │ ├── cli.h
│ │ │ ├── shell.h
│ │ │ ├── shell_commands.h
│ │ │ └── util.h
│ │ ├── http/
│ │ │ ├── http_client.h
│ │ │ ├── platform/
│ │ │ │ └── http_client.h
│ │ │ ├── root_certs.h
│ │ │ └── utils.h
│ │ ├── metrics/
│ │ │ ├── battery.h
│ │ │ ├── connectivity.h
│ │ │ ├── heartbeat_config.def
│ │ │ ├── ids_impl.h
│ │ │ ├── metrics.h
│ │ │ ├── platform/
│ │ │ │ ├── battery.h
│ │ │ │ ├── connectivity.h
│ │ │ │ ├── overrides.h
│ │ │ │ └── timer.h
│ │ │ ├── reliability.h
│ │ │ ├── serializer.h
│ │ │ └── utils.h
│ │ ├── panics/
│ │ │ ├── arch/
│ │ │ │ ├── arm/
│ │ │ │ │ ├── aarch64.h
│ │ │ │ │ ├── cortex_m.h
│ │ │ │ │ └── v7_a_r.h
│ │ │ │ ├── posix/
│ │ │ │ │ └── posix.h
│ │ │ │ ├── riscv/
│ │ │ │ │ └── riscv.h
│ │ │ │ └── xtensa/
│ │ │ │ └── xtensa.h
│ │ │ ├── assert.h
│ │ │ ├── coredump.h
│ │ │ ├── coredump_impl.h
│ │ │ ├── fault_handling.h
│ │ │ └── platform/
│ │ │ └── coredump.h
│ │ ├── util/
│ │ │ ├── align.h
│ │ │ ├── banner.h
│ │ │ ├── base64.h
│ │ │ ├── cbor.h
│ │ │ ├── chunk_transport.h
│ │ │ ├── circular_buffer.h
│ │ │ ├── crc16.h
│ │ │ ├── rle.h
│ │ │ └── varint.h
│ │ └── version.h
│ ├── metrics/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_metrics.c
│ │ ├── memfault_metrics_battery.c
│ │ ├── memfault_metrics_connectivity.c
│ │ ├── memfault_metrics_reliability.c
│ │ └── memfault_metrics_serializer.c
│ ├── panics/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_coredump.c
│ │ ├── memfault_coredump_regions_armv7.c
│ │ ├── memfault_coredump_sdk_regions.c
│ │ ├── memfault_coredump_storage_debug.c
│ │ ├── memfault_coredump_utils.c
│ │ ├── memfault_fault_handling_aarch64.c
│ │ ├── memfault_fault_handling_arm.c
│ │ ├── memfault_fault_handling_armv7_a_r.c
│ │ ├── memfault_fault_handling_posix.c
│ │ ├── memfault_fault_handling_riscv.c
│ │ ├── memfault_fault_handling_xtensa.c
│ │ └── memfault_stdlib_assert.c
│ └── util/
│ ├── README.md
│ └── src/
│ ├── memfault_base64.c
│ ├── memfault_chunk_transport.c
│ ├── memfault_circular_buffer.c
│ ├── memfault_crc16_ccitt.c
│ ├── memfault_minimal_cbor.c
│ ├── memfault_rle.c
│ └── memfault_varint.c
├── examples/
│ ├── README.md
│ ├── cypress/
│ │ └── CY8CKIT-064S0S2-4343W/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── amazon-freertos.patch
│ │ └── src/
│ │ ├── README.md
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ ├── memfault_platform_storage.c
│ │ ├── memfault_platform_storage.h
│ │ ├── memfault_test.c
│ │ ├── memfault_test.h
│ │ ├── memfault_trace_reason_user_config.def
│ │ └── mqtt_demo_memfault.c
│ ├── dialog/
│ │ ├── README.md
│ │ ├── da145xx/
│ │ │ ├── README.md
│ │ │ └── apps/
│ │ │ └── memfault_demo_app/
│ │ │ ├── .gitignore
│ │ │ ├── Eclipse/
│ │ │ │ ├── .cproject
│ │ │ │ ├── .project
│ │ │ │ └── makefile.targets
│ │ │ ├── Keil_5/
│ │ │ │ ├── memfault_demo_app.uvoptx
│ │ │ │ ├── memfault_demo_app.uvprojx
│ │ │ │ ├── unused_531.txt
│ │ │ │ ├── unused_585.txt
│ │ │ │ └── unused_586.txt
│ │ │ └── src/
│ │ │ ├── config/
│ │ │ │ ├── da1458x_config_advanced.h
│ │ │ │ ├── da1458x_config_basic.h
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ ├── memfault_trace_reason_user_config.def
│ │ │ │ ├── user_callback_config.h
│ │ │ │ ├── user_config.h
│ │ │ │ ├── user_modules_config.h
│ │ │ │ ├── user_periph_setup.h
│ │ │ │ └── user_profiles_config.h
│ │ │ ├── custom_profile/
│ │ │ │ ├── user_custs1_def.c
│ │ │ │ ├── user_custs1_def.h
│ │ │ │ ├── user_custs_config.c
│ │ │ │ └── user_custs_config.h
│ │ │ ├── memfault_platform_device_info.c
│ │ │ ├── platform/
│ │ │ │ └── user_periph_setup.c
│ │ │ ├── user_app.c
│ │ │ └── user_app.h
│ │ └── da1469x/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .cproject
│ │ ├── .gitignore
│ │ ├── .project
│ │ ├── config/
│ │ │ ├── custom_config_qspi.h
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── main.c
│ │ ├── makefile.targets
│ │ └── memfault_platform_device_info.c
│ ├── esp32/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── main/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig.projbuild
│ │ │ ├── app_memfault_transport.h
│ │ │ ├── app_memfault_transport_http.c
│ │ │ ├── app_memfault_transport_mqtt.c
│ │ │ ├── button.c
│ │ │ ├── button.h
│ │ │ ├── cmd_app.c
│ │ │ ├── cmd_decl.h
│ │ │ ├── cmd_system.c
│ │ │ ├── cmd_wifi.c
│ │ │ ├── cmd_wifi_legacy.c
│ │ │ ├── config/
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ ├── memfault_reboot_reason_user_config.def
│ │ │ │ ├── memfault_task_watchdog_config.def
│ │ │ │ └── memfault_trace_reason_user_config.def
│ │ │ ├── deep_sleep.c
│ │ │ ├── deep_sleep.h
│ │ │ ├── idf_component.yml
│ │ │ ├── led.c
│ │ │ ├── led.h
│ │ │ ├── main.c
│ │ │ ├── metrics.c
│ │ │ ├── ota_session_metrics.c
│ │ │ ├── ota_session_metrics.h
│ │ │ ├── settings.c
│ │ │ └── settings.h
│ │ ├── partitions_example.csv
│ │ ├── sdkconfig.defaults
│ │ ├── sdkconfig.heaptrace
│ │ └── sdkconfig.mqtt
│ ├── freertos/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── boards/
│ │ │ ├── qemu_mps2_an385/
│ │ │ │ ├── Makefile
│ │ │ │ ├── linker.ld
│ │ │ │ ├── memfault_platform_impl.c
│ │ │ │ └── startup.c
│ │ │ ├── qemu_mps2_an386/
│ │ │ │ ├── Makefile
│ │ │ │ ├── linker.ld
│ │ │ │ ├── memfault_platform_impl.c
│ │ │ │ └── startup.c
│ │ │ └── qemu_mps2_an505/
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── linker.ld
│ │ │ ├── memfault_platform_impl.c
│ │ │ └── startup.c
│ │ └── src/
│ │ ├── FreeRTOSConfig.h
│ │ ├── compact_log.cpp
│ │ ├── compact_log.h
│ │ ├── console.c
│ │ ├── console.h
│ │ ├── heap_task.c
│ │ ├── heap_task.h
│ │ ├── main.c
│ │ ├── memfault/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_platform_log_config.h
│ │ │ ├── memfault_platform_port.c
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── metrics.c
│ │ ├── metrics.h
│ │ ├── mpu.c
│ │ └── mpu.h
│ ├── libcurl/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── get_latest.c
│ │ └── post_chunks.c
│ ├── nrf-connect-sdk/
│ │ ├── nrf5/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── memfault_demo_app/
│ │ │ ├── 1mbaud_uart.overlay
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig
│ │ │ ├── Kconfig.sysbuild
│ │ │ ├── VERSION
│ │ │ ├── boards/
│ │ │ │ ├── nrf54h20dk_nrf54h20_cpuapp.conf
│ │ │ │ ├── nrf54h20dk_nrf54h20_cpuapp.overlay
│ │ │ │ ├── nrf54l15dk_nrf54l15_cpuapp.conf
│ │ │ │ ├── nrf54l15dk_nrf54l15_cpuapp_noinit.ld
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.conf
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.overlay
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.overlay.example
│ │ │ │ └── nrf54lm20dk_nrf54lm20a_cpuapp_noinit.ld
│ │ │ ├── config/
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ └── memfault_trace_reason_user_config.def
│ │ │ ├── pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
│ │ │ ├── pm_static_nrf54lm20dk_nrf54lm20a_cpuapp.yml
│ │ │ ├── prj.conf
│ │ │ ├── sample.yaml
│ │ │ ├── src/
│ │ │ │ ├── main.c
│ │ │ │ └── shell_commands.c
│ │ │ ├── sysbuild/
│ │ │ │ └── ipc_radio/
│ │ │ │ └── prj.conf
│ │ │ ├── sysbuild.conf
│ │ │ └── west.yml
│ │ └── nrf9160/
│ │ ├── .gitignore
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── boards/
│ │ │ └── nrf9160dk_nrf9160_ns_0_14_0.overlay
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_reboot_reason_user_config.def
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── overlay-coap.conf
│ │ ├── overlays/
│ │ │ ├── ncs-main.conf
│ │ │ ├── ncs-pre-v2.0.0.conf
│ │ │ ├── ncs-pre-v2.2.99.conf
│ │ │ ├── ncs-pre-v2.4.0.conf
│ │ │ ├── ncs-pre-v2.8.0.conf
│ │ │ └── ncs-pre-v2.9.99.conf
│ │ ├── prj.conf
│ │ ├── sample.yaml
│ │ ├── src/
│ │ │ ├── main.c
│ │ │ ├── memfault_demo_app.h
│ │ │ └── watchdog.c
│ │ ├── submanifests/
│ │ │ └── .gitkeep
│ │ ├── sysbuild.conf
│ │ └── west.yml
│ ├── nrf5/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── config/
│ │ │ └── sdk_config.h
│ │ ├── memfault_demo_app_nrf52.ld
│ │ ├── src/
│ │ │ ├── cli.c
│ │ │ ├── main.c
│ │ │ └── mflt_cli.h
│ │ └── third_party/
│ │ └── memfault/
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ ├── memfault_trace_reason_user_config.def
│ │ └── sdk_overrides/
│ │ └── app_error.h
│ ├── qp/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── Makefile
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ └── src/
│ │ ├── arm-generic.ld
│ │ ├── bsp.c
│ │ ├── bsp.h
│ │ ├── main.c
│ │ ├── platform_reference_impl/
│ │ │ ├── memfault_platform_core.c
│ │ │ └── memfault_platform_log.c
│ │ └── startup_stm32f4xx.c
│ ├── stm32/
│ │ ├── README.md
│ │ └── stm32h743i/
│ │ ├── Makefile_test.mk
│ │ ├── README.md
│ │ ├── chibios-memfault-integration.patch
│ │ ├── memfault_sdk.mk
│ │ └── platform_reference_impl/
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump.c
│ │ ├── memfault_platform_device_info.c
│ │ ├── memfault_trace_reason_user_config.def
│ │ ├── stm32h7xx_hal_conf.h
│ │ └── stm32h7xx_hal_stubs.c
│ ├── wiced/
│ │ ├── README.md
│ │ ├── apps/
│ │ │ └── memfault_demo_app/
│ │ │ ├── config/
│ │ │ │ └── memfault_platform_config.h
│ │ │ ├── memfault_demo_app.c
│ │ │ └── memfault_demo_app.mk
│ │ └── libraries/
│ │ └── memfault/
│ │ ├── core/
│ │ │ └── core.mk
│ │ ├── demo/
│ │ │ └── demo.mk
│ │ ├── http/
│ │ │ └── http.mk
│ │ ├── panics/
│ │ │ └── panics.mk
│ │ ├── platform_reference_impl/
│ │ │ ├── memfault_platform_coredump.c
│ │ │ ├── memfault_platform_coredump.ld
│ │ │ ├── memfault_platform_crc32.c
│ │ │ ├── memfault_platform_debug_log.c
│ │ │ ├── memfault_platform_device_info.c
│ │ │ ├── memfault_platform_fault_handling_arm_gcc.c
│ │ │ ├── memfault_platform_http_client.c
│ │ │ ├── memfault_platform_impl.c
│ │ │ ├── memfault_platform_wiced.h
│ │ │ └── platform_reference_impl.mk
│ │ └── util/
│ │ └── util.mk
│ └── zephyr/
│ ├── nucleo_wba55cg/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── VERSION
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── prj.conf
│ │ ├── src/
│ │ │ └── main.c
│ │ └── west.yml
│ ├── qemu/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── qemu-app/
│ │ ├── CMakeLists.txt
│ │ ├── Kconfig
│ │ ├── LICENSE
│ │ ├── boards/
│ │ │ ├── apollo4p_blue_kxr_evb.conf
│ │ │ ├── apollo4p_blue_kxr_evb.overlay
│ │ │ ├── apollo510_evb.conf
│ │ │ ├── apollo510_evb.overlay
│ │ │ ├── b_u585i_iot02a.conf
│ │ │ ├── b_u585i_iot02a.overlay
│ │ │ ├── mps2_an385.conf
│ │ │ ├── mps2_an385.overlay
│ │ │ ├── nucleo_f756zg.conf
│ │ │ ├── nucleo_f756zg.overlay
│ │ │ ├── nucleo_l496zg.conf
│ │ │ ├── nucleo_l496zg.overlay
│ │ │ ├── qemu_cortex_m3.conf
│ │ │ └── qemu_cortex_m3.overlay
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ └── memfault_platform_config.h
│ │ ├── prj.conf
│ │ ├── src/
│ │ │ ├── cdr.c
│ │ │ ├── cdr.h
│ │ │ ├── main.c
│ │ │ └── metrics.c
│ │ └── west.yml
│ └── stm32l4_disco/
│ ├── .ci-project-setup.json
│ ├── .gitignore
│ ├── README.md
│ ├── apps/
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── prj.conf
│ │ ├── sample.yaml
│ │ └── src/
│ │ └── main.c
│ └── stm32l4_disco_zephyr2.5_wifi.patch
├── idf_component.yml
├── makefiles/
│ └── MemfaultWorker.mk
├── ports/
│ ├── README.md
│ ├── atmel/
│ │ └── saml1x/
│ │ └── rcause_reboot_tracking.c
│ ├── cypress/
│ │ └── psoc6/
│ │ ├── README.md
│ │ ├── configs/
│ │ │ ├── memfault_metrics_mtb_heartbeat_config.def
│ │ │ ├── memfault_mtb_platform_config.h
│ │ │ └── memfault_platform_log_config.h
│ │ ├── memfault_bss.ld
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_http.c
│ │ ├── memfault_psoc6_port.h
│ │ ├── psoc6_default_config.h
│ │ └── res_cause_reboot_tracking.c
│ ├── dialog/
│ │ ├── da145xx/
│ │ │ ├── armcc-fault-handler.patch
│ │ │ ├── gcc-hardfault.patch
│ │ │ ├── gnu-build-id.patch
│ │ │ ├── memfault_platform_core.c
│ │ │ ├── memfault_platform_coredump_regions.c
│ │ │ ├── memfault_platform_coredump_storage.c
│ │ │ ├── memfault_platform_debug_log.c
│ │ │ ├── memfault_platform_metrics.c
│ │ │ └── reset_reboot_tracking.c
│ │ ├── da1468x/
│ │ │ ├── gnu-build-id.patch
│ │ │ ├── memfault-qspi-coredump-storage.patch
│ │ │ ├── qspi_coredump_storage.c
│ │ │ ├── reset_stat_reboot_tracking.c
│ │ │ └── wdog_software_watchdog.c
│ │ └── da1469x/
│ │ ├── fault-handlers.patch
│ │ ├── freertos-config.patch
│ │ ├── gnu-build-id.patch
│ │ ├── memfault_diagnostic_service.c
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_coredump_storage.c
│ │ ├── memfault_platform_debug_log.c
│ │ └── reset_reboot_tracking.c
│ ├── emlib/
│ │ ├── README.md
│ │ ├── memfault_demo_cli.c
│ │ ├── msc_coredump_storage.c
│ │ ├── rmu_reboot_tracking.c
│ │ └── wdog_software_watchdog.c
│ ├── esp_idf/
│ │ ├── README.md
│ │ ├── memfault/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig
│ │ │ ├── common/
│ │ │ │ ├── memfault_compact_log.ld
│ │ │ │ ├── memfault_esp_freertos.lf
│ │ │ │ ├── memfault_fault_handler.c
│ │ │ │ ├── memfault_platform_core.c
│ │ │ │ ├── memfault_platform_coredump.c
│ │ │ │ ├── memfault_platform_debug_log.c
│ │ │ │ ├── memfault_platform_deep_sleep.c
│ │ │ │ ├── memfault_platform_demo_cli_cmds.c
│ │ │ │ ├── memfault_platform_device_info.c
│ │ │ │ ├── memfault_platform_http_client.c
│ │ │ │ ├── memfault_platform_http_client_buffer.c
│ │ │ │ ├── memfault_platform_http_periodic_upload.c
│ │ │ │ ├── memfault_platform_metrics.c
│ │ │ │ ├── memfault_platform_system_time.c
│ │ │ │ └── memfault_self_test_platform.c
│ │ │ ├── config/
│ │ │ │ ├── memfault_esp_idf_port_config.h
│ │ │ │ ├── memfault_esp_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_freertos_error_log.h
│ │ │ │ └── memfault_trace_reason_esp_idf_port_config.def
│ │ │ ├── include/
│ │ │ │ └── memfault/
│ │ │ │ └── esp_port/
│ │ │ │ ├── cli.h
│ │ │ │ ├── core.h
│ │ │ │ ├── coredump.h
│ │ │ │ ├── deep_sleep.h
│ │ │ │ ├── device_info.h
│ │ │ │ ├── http_client.h
│ │ │ │ ├── metrics.h
│ │ │ │ └── spi_flash.h
│ │ │ ├── v4.x/
│ │ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ │ └── memfault_esp_spi_flash.c
│ │ │ ├── v5.x/
│ │ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ │ └── memfault_esp_spi_flash.c
│ │ │ └── v6.x/
│ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ └── memfault_esp_spi_flash.c
│ │ └── memfault.cmake
│ ├── freertos/
│ │ ├── README.md
│ │ ├── config/
│ │ │ └── memfault_metrics_heartbeat_freertos_config.def
│ │ └── src/
│ │ ├── memfault_core_freertos.c
│ │ ├── memfault_freertos_ram_regions.c
│ │ ├── memfault_metrics_freertos.c
│ │ ├── memfault_panics_freertos.c
│ │ ├── memfault_sdk_metrics_freertos.c
│ │ ├── memfault_sdk_metrics_thread.c
│ │ └── memfault_self_test_platform.c
│ ├── include/
│ │ ├── .mtbsearch.h
│ │ └── memfault/
│ │ └── ports/
│ │ ├── ble/
│ │ │ └── mds.h
│ │ ├── buffered_coredump_storage.h
│ │ ├── freertos/
│ │ │ ├── metrics.h
│ │ │ └── thread_metrics.h
│ │ ├── freertos.h
│ │ ├── freertos_coredump.h
│ │ ├── freertos_trace.h
│ │ ├── lwip/
│ │ │ └── metrics.h
│ │ ├── mbedtls/
│ │ │ └── metrics.h
│ │ ├── reboot_reason.h
│ │ ├── stm32cube/
│ │ │ ├── l4/
│ │ │ │ └── flash.h
│ │ │ └── wb/
│ │ │ └── flash.h
│ │ ├── threadx_coredump.h
│ │ └── watchdog.h
│ ├── lwip/
│ │ ├── config/
│ │ │ └── memfault_lwip_metrics_heartbeat_config.def
│ │ └── memfault_lwip_metrics.c
│ ├── mbedtls/
│ │ ├── config/
│ │ │ └── memfault_mbedtls_metrics_heartbeat_config.def
│ │ ├── memfault_mbedtls_metrics.c
│ │ └── memfault_platform_http_client.c
│ ├── mynewt/
│ │ ├── README.md
│ │ ├── include/
│ │ │ ├── memfault_metrics_heartbeat_mynewt_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_platform_log_config.h
│ │ │ ├── memfault_shell.h
│ │ │ └── memfault_trace_reason_mynewt_config.def
│ │ ├── pkg.yml
│ │ ├── src/
│ │ │ ├── memfault_platform_flash_backed_coredump.c
│ │ │ ├── memfault_platform_port.c
│ │ │ └── memfault_shell.c
│ │ └── syscfg.yml
│ ├── nrf5_sdk/
│ │ ├── memfault_platform_metrics.c
│ │ ├── nrf5_coredump_regions.c
│ │ ├── nrf5_coredump_storage.c
│ │ ├── resetreas_reboot_tracking.c
│ │ └── software_watchdog.c
│ ├── nxp/
│ │ ├── rt1021/
│ │ │ └── src_reboot_tracking.c
│ │ └── rw61x/
│ │ └── pmu_reboot_tracking.c
│ ├── panics/
│ │ └── src/
│ │ └── memfault_platform_ram_backed_coredump.c
│ ├── particle/
│ │ ├── README.md
│ │ ├── examples/
│ │ │ └── memfault_test/
│ │ │ ├── project.properties
│ │ │ └── src/
│ │ │ ├── application.cpp
│ │ │ ├── memfault_particle_user_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ └── src/
│ │ ├── memfault.cpp
│ │ ├── memfault.h
│ │ ├── memfault_particle_metrics_heartbeat_config.def
│ │ ├── memfault_particle_trace_reason_user_config.def
│ │ ├── memfault_platform_config.h
│ │ └── memfault_platform_log_config.h
│ ├── qp/
│ │ ├── README.md
│ │ ├── qassert.h.patch
│ │ ├── qf_pkg.h.patch
│ │ └── qf_pkg.hpp.patch
│ ├── s32sdk/
│ │ ├── ftfc_flash_coredump_storage.c
│ │ ├── lpit_software_watchdog.c
│ │ └── rcm_reboot_tracking.c
│ ├── silabs/
│ │ └── wiseconnect/
│ │ └── siwx91x/
│ │ └── siwx91x_reboot_tracking.c
│ ├── stm32cube/
│ │ ├── README.md
│ │ ├── f4/
│ │ │ ├── flash_coredump_storage.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── f7/
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── h5/
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── h7/
│ │ │ ├── lptim_software_watchdog.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── l4/
│ │ │ ├── flash_coredump_storage.c
│ │ │ ├── lptim_software_watchdog.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── u5/
│ │ │ ├── flash_coredump_storage.c
│ │ │ └── rcc_reboot_tracking.c
│ │ └── wb/
│ │ ├── flash_coredump_storage.c
│ │ └── rcc_reboot_tracking.c
│ ├── templates/
│ │ ├── README.md
│ │ ├── apache-2.0.txt
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ └── memfault_trace_reason_user_config.def
│ ├── threadx/
│ │ └── src/
│ │ └── memfault_threadx_ram_regions.c
│ └── zephyr/
│ ├── CMakeLists.txt
│ ├── Kconfig
│ ├── README.md
│ ├── common/
│ │ ├── CMakeLists.txt
│ │ ├── coredump_storage/
│ │ │ ├── memfault_ambiq_mram_backed_coredump.c
│ │ │ ├── memfault_mram_backed_coredump.c
│ │ │ ├── memfault_nrf_rram_backed_coredump.c
│ │ │ └── memfault_stm32u5_flash_backed_coredump.c
│ │ ├── memfault-build-id.ld
│ │ ├── memfault-compact-log.ld
│ │ ├── memfault-mbedtls.conf
│ │ ├── memfault-no-init.ld
│ │ ├── memfault-rtc-noinit-region.ld
│ │ ├── memfault_demo_cli.c
│ │ ├── memfault_logging.c
│ │ ├── memfault_logging_legacy.c
│ │ ├── memfault_logging_minimal.c
│ │ ├── memfault_mcumgr.c
│ │ ├── memfault_periodic_upload.c
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_debug_log.c
│ │ ├── memfault_platform_fota.c
│ │ ├── memfault_platform_http.c
│ │ ├── memfault_platform_lock.c
│ │ ├── memfault_platform_post.c
│ │ ├── memfault_platform_ram_backed_coredump.c
│ │ ├── memfault_platform_system_time.c
│ │ ├── memfault_self_test_platform.c
│ │ ├── memfault_software_watchdog.c
│ │ ├── memfault_tls_root_cert_storage.c
│ │ ├── memfault_zephyr_ram_regions.c
│ │ └── metrics/
│ │ ├── CMakeLists.txt
│ │ ├── memfault_platform_bluetooth_metrics.c
│ │ ├── memfault_platform_metrics.c
│ │ ├── memfault_platform_thread_metrics.c
│ │ └── memfault_platform_wifi_metrics.c
│ ├── config/
│ │ ├── memfault_metrics_heartbeat_zephyr_port_config.def
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_trace_reason_zephyr_port_config.def
│ │ └── memfault_zephyr_platform_config.h
│ ├── include/
│ │ └── memfault/
│ │ └── ports/
│ │ ├── ncs/
│ │ │ ├── date_time_callback.h
│ │ │ └── version.h
│ │ └── zephyr/
│ │ ├── bluetooth_metrics.h
│ │ ├── core.h
│ │ ├── coredump.h
│ │ ├── deprecated_root_cert.h
│ │ ├── fota.h
│ │ ├── http.h
│ │ ├── include_compatibility.h
│ │ ├── log_backend.h
│ │ ├── log_panic.h
│ │ ├── memfault_mcumgr.h
│ │ ├── periodic_upload.h
│ │ ├── root_cert_storage.h
│ │ ├── thread_metrics.h
│ │ └── version.h
│ ├── ncs/
│ │ ├── CMakeLists.txt
│ │ ├── Kconfig
│ │ ├── README.md
│ │ ├── config/
│ │ │ └── memfault_metrics_heartbeat_ncs_port_config.def
│ │ ├── include/
│ │ │ └── memfault/
│ │ │ └── nrfconnect_port/
│ │ │ └── coap.h
│ │ └── src/
│ │ ├── CMakeLists.txt
│ │ ├── memfault_fota.c
│ │ ├── memfault_fota_legacy.c
│ │ ├── memfault_nrf_modem_root_cert_init.c
│ │ ├── memfault_nrf_modem_root_cert_storage.c
│ │ ├── memfault_platform_coap.c
│ │ ├── memfault_platform_metrics_connectivity_lte.c
│ │ ├── memfault_platform_npm13xx_battery.c
│ │ └── nrfx_pmu_reboot_tracking.c
│ └── panics/
│ ├── CMakeLists.txt
│ ├── memfault_fault_handler.c
│ ├── memfault_fault_handler_posix.c
│ ├── memfault_fault_handler_riscv.c
│ └── memfault_fault_handler_xtensa.c
├── repository.yml
├── requirements.txt
├── scripts/
│ ├── cmsis_pack_bundle.py
│ ├── create_arduino_library.py
│ ├── eclipse_patch.py
│ ├── fw_build_id.py
│ ├── memfault_gdb.py
│ ├── memfault_group.py
│ ├── mflt-build-id/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ ├── src/
│ │ │ └── mflt_build_id/
│ │ │ ├── __init__.py
│ │ │ └── py.typed
│ │ ├── tasks/
│ │ │ └── __init__.py
│ │ └── tests_mflt_build_id/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── elf_fixtures/
│ │ │ ├── __init__.py
│ │ │ ├── crc32_build_id_populated.elf
│ │ │ ├── crc32_build_id_unpopulated.elf
│ │ │ ├── gnu_id_present_and_not_used.elf
│ │ │ ├── gnu_id_present_and_used.elf
│ │ │ ├── gnu_id_with_short_len.elf
│ │ │ ├── memfault_build_id_present_and_populated.elf
│ │ │ ├── memfault_build_id_present_and_unpopulated.elf
│ │ │ ├── memfault_build_id_with_short_len.elf
│ │ │ ├── memfault_id_used_gnu_id_present.elf
│ │ │ ├── no_memfault_symbols.elf
│ │ │ └── no_symtab_no_text_no_data.elf
│ │ ├── test_elf_file_helper.py
│ │ └── test_fw_build_id.py
│ └── tests_embedded_scripts/
│ ├── __init__.py
│ ├── gdb_fake.py
│ ├── snapshots/
│ │ ├── __init__.py
│ │ ├── snap_test_eclipse_patch.py
│ │ └── snap_test_memfault_gdb.py
│ ├── test_eclipse_patch.py
│ ├── test_memfault_gdb.py
│ └── testinput/
│ ├── .cproject
│ └── .project
├── tasks/
│ ├── __init__.py
│ ├── esp32.py
│ ├── gdb.py
│ ├── macos_ftdi.py
│ ├── nrf.py
│ ├── print_chunk_watcher.py
│ ├── wiced.py
│ └── zephyr.py
├── tests/
│ ├── README.md
│ └── unit/
│ ├── Makefile
│ ├── MakefileWorker.mk
│ ├── MakefileWorkerOverrides.mk
│ ├── README.md
│ ├── comparators/
│ │ ├── comparator_memfault_fault_handling.hpp
│ │ └── comparator_memfault_metric_ids.hpp
│ ├── fakes/
│ │ ├── fake_memfault_buffered_coredump_storage.h
│ │ ├── fake_memfault_build_id.c
│ │ ├── fake_memfault_build_id.h
│ │ ├── fake_memfault_coredump_utils.c
│ │ ├── fake_memfault_event_storage.cpp
│ │ ├── fake_memfault_event_storage.h
│ │ ├── fake_memfault_metrics_platform_locking.c
│ │ ├── fake_memfault_platform_boot_time.c
│ │ ├── fake_memfault_platform_coredump_storage.c
│ │ ├── fake_memfault_platform_coredump_storage.h
│ │ ├── fake_memfault_platform_crc32.c
│ │ ├── fake_memfault_platform_debug_log.c
│ │ ├── fake_memfault_platform_get_device_info.c
│ │ ├── fake_memfault_platform_get_device_info.h
│ │ ├── fake_memfault_platform_http_client.c
│ │ ├── fake_memfault_platform_locking.c
│ │ ├── fake_memfault_platform_metrics_locking.h
│ │ ├── fake_memfault_platform_time.c
│ │ ├── fake_memfault_platform_time.h
│ │ ├── fake_memfault_reboot_tracking.c
│ │ └── fake_memfault_sdk_assert.c
│ ├── llvm-cov-wrapper.sh
│ ├── makefiles/
│ │ ├── Makefile_assert.mk
│ │ ├── Makefile_batched_events.mk
│ │ ├── Makefile_circular_buffer.mk
│ │ ├── Makefile_memfault_base64.mk
│ │ ├── Makefile_memfault_buffered_coredump_storage.mk
│ │ ├── Makefile_memfault_build_id_gnu.mk
│ │ ├── Makefile_memfault_build_id_memfault.mk
│ │ ├── Makefile_memfault_cdr_source.mk
│ │ ├── Makefile_memfault_chunking_transport.mk
│ │ ├── Makefile_memfault_compact_log.mk
│ │ ├── Makefile_memfault_compact_log_macros.mk
│ │ ├── Makefile_memfault_compact_log_save_truncation.mk
│ │ ├── Makefile_memfault_compact_log_serializer.mk
│ │ ├── Makefile_memfault_coredump.mk
│ │ ├── Makefile_memfault_coredump_sdk_regions.mk
│ │ ├── Makefile_memfault_coredump_utils.mk
│ │ ├── Makefile_memfault_coredump_with_serial.mk
│ │ ├── Makefile_memfault_crc16_ccitt.mk
│ │ ├── Makefile_memfault_crc16_ccitt_no_lut.mk
│ │ ├── Makefile_memfault_data_export.mk
│ │ ├── Makefile_memfault_data_packetizer.mk
│ │ ├── Makefile_memfault_data_packetizer_with_project_key.mk
│ │ ├── Makefile_memfault_data_source_rle.mk
│ │ ├── Makefile_memfault_demo_shell.mk
│ │ ├── Makefile_memfault_event_storage.mk
│ │ ├── Makefile_memfault_event_storage_batch_read.mk
│ │ ├── Makefile_memfault_event_storage_no_persistent_storage.mk
│ │ ├── Makefile_memfault_heap_stats.mk
│ │ ├── Makefile_memfault_heartbeat_metrics.mk
│ │ ├── Makefile_memfault_heartbeat_metrics_debug.mk
│ │ ├── Makefile_memfault_heartbeat_metrics_nocustom.mk
│ │ ├── Makefile_memfault_http_utils.mk
│ │ ├── Makefile_memfault_log.mk
│ │ ├── Makefile_memfault_log_data_source.mk
│ │ ├── Makefile_memfault_log_data_source_timestamps.mk
│ │ ├── Makefile_memfault_log_with_timestamps.mk
│ │ ├── Makefile_memfault_metrics_battery.mk
│ │ ├── Makefile_memfault_metrics_connectivity.mk
│ │ ├── Makefile_memfault_metrics_reliability.mk
│ │ ├── Makefile_memfault_metrics_serializer.mk
│ │ ├── Makefile_memfault_port_lwip_metrics.mk
│ │ ├── Makefile_memfault_port_mbedtls_metrics.mk
│ │ ├── Makefile_memfault_port_nrf5_coredump_regions.mk
│ │ ├── Makefile_memfault_printf_attribute.mk
│ │ ├── Makefile_memfault_ram_backed_coredump_port.mk
│ │ ├── Makefile_memfault_reboot_tracking_serializer.mk
│ │ ├── Makefile_memfault_rle.mk
│ │ ├── Makefile_memfault_root_cert.mk
│ │ ├── Makefile_memfault_sdk_assert.mk
│ │ ├── Makefile_memfault_sdk_metrics_freertos.mk
│ │ ├── Makefile_memfault_self_test.mk
│ │ ├── Makefile_memfault_self_test_component_boot_check.mk
│ │ ├── Makefile_memfault_self_test_coredump_regions.mk
│ │ ├── Makefile_memfault_self_test_coredump_storage.mk
│ │ ├── Makefile_memfault_self_test_data_export.mk
│ │ ├── Makefile_memfault_self_test_device_info.mk
│ │ ├── Makefile_memfault_self_test_reboot_reason.mk
│ │ ├── Makefile_memfault_self_test_time.mk
│ │ ├── Makefile_memfault_self_test_utils.mk
│ │ ├── Makefile_memfault_serializer_helper.mk
│ │ ├── Makefile_memfault_serializer_helper_with_device_serial.mk
│ │ ├── Makefile_memfault_serializer_helper_without_build_id.mk
│ │ ├── Makefile_memfault_session_metrics.mk
│ │ ├── Makefile_memfault_session_metrics_debug.mk
│ │ ├── Makefile_memfault_session_vitals.mk
│ │ ├── Makefile_memfault_task_watchdog.mk
│ │ ├── Makefile_memfault_test_coredump_storage_debug.mk
│ │ ├── Makefile_memfault_trace_event.mk
│ │ ├── Makefile_memfault_trace_event_compact_log.mk
│ │ ├── Makefile_memfault_trace_event_no_isr_log.mk
│ │ ├── Makefile_memfault_user_reboot_reasons.mk
│ │ ├── Makefile_minimal_cbor.mk
│ │ ├── Makefile_ram_reboot_tracking.mk
│ │ └── Makefile_varint.mk
│ ├── mocks/
│ │ ├── mock_memfault_coredump.cpp
│ │ ├── mock_memfault_coredump.h
│ │ ├── mock_memfault_fault_handling.cpp
│ │ ├── mock_memfault_metrics.cpp
│ │ ├── mock_memfault_metrics_reliability.cpp
│ │ ├── mock_memfault_platform_debug_log.cpp
│ │ ├── mock_memfault_platform_debug_log.h
│ │ ├── mock_memfault_platform_system_time.cpp
│ │ └── mock_memfault_reboot_tracking.cpp
│ ├── scripts/
│ │ └── filterGcov.sh
│ ├── src/
│ │ ├── AllTests.cpp
│ │ ├── memfault_test_compact_log_c.h
│ │ ├── test_assert.cpp
│ │ ├── test_memfault_base64.cpp
│ │ ├── test_memfault_batched_events.cpp
│ │ ├── test_memfault_buffered_coredump_storage.cpp
│ │ ├── test_memfault_buffered_coredump_storage_impl.c
│ │ ├── test_memfault_build_id.cpp
│ │ ├── test_memfault_chunk_transport.cpp
│ │ ├── test_memfault_circular_buffer.cpp
│ │ ├── test_memfault_compact_log_c.c
│ │ ├── test_memfault_compact_log_cxx.c
│ │ ├── test_memfault_compact_log_macros.cpp
│ │ ├── test_memfault_compact_log_save_truncation.cpp
│ │ ├── test_memfault_compact_log_serializer.cpp
│ │ ├── test_memfault_coredump.cpp
│ │ ├── test_memfault_coredump_sdk_regions.cpp
│ │ ├── test_memfault_coredump_storage_debug.cpp
│ │ ├── test_memfault_coredump_utils.cpp
│ │ ├── test_memfault_crc16_ccitt.cpp
│ │ ├── test_memfault_custom_data_recording.cpp
│ │ ├── test_memfault_data_export.cpp
│ │ ├── test_memfault_data_packetizer.cpp
│ │ ├── test_memfault_data_source_rle.cpp
│ │ ├── test_memfault_demo_shell.cpp
│ │ ├── test_memfault_event_storage.cpp
│ │ ├── test_memfault_heap_stats.cpp
│ │ ├── test_memfault_heartbeat_metrics.cpp
│ │ ├── test_memfault_heartbeat_metrics_debug.cpp
│ │ ├── test_memfault_heartbeat_metrics_nocustom.cpp
│ │ ├── test_memfault_http_utils.cpp
│ │ ├── test_memfault_log.cpp
│ │ ├── test_memfault_log_data_source.cpp
│ │ ├── test_memfault_log_with_timestamps.cpp
│ │ ├── test_memfault_metrics_battery.cpp
│ │ ├── test_memfault_metrics_connectivity.cpp
│ │ ├── test_memfault_metrics_reliability.cpp
│ │ ├── test_memfault_metrics_serializer.cpp
│ │ ├── test_memfault_minimal_cbor.cpp
│ │ ├── test_memfault_port_lwip_metrics.cpp
│ │ ├── test_memfault_port_mbedtls_metrics.cpp
│ │ ├── test_memfault_port_nrf5_coredump_regions.cpp
│ │ ├── test_memfault_printf_attribute.cpp
│ │ ├── test_memfault_ram_backed_coredump_port.cpp
│ │ ├── test_memfault_ram_reboot_tracking.cpp
│ │ ├── test_memfault_reboot_tracking_serializer.cpp
│ │ ├── test_memfault_rle.cpp
│ │ ├── test_memfault_root_cert.cpp
│ │ ├── test_memfault_sdk_assert.cpp
│ │ ├── test_memfault_sdk_freertos_metrics.cpp
│ │ ├── test_memfault_self_test.cpp
│ │ ├── test_memfault_self_test_component_boot_check.cpp
│ │ ├── test_memfault_self_test_coredump_regions.cpp
│ │ ├── test_memfault_self_test_coredump_storage.cpp
│ │ ├── test_memfault_self_test_data_export.cpp
│ │ ├── test_memfault_self_test_device_info.cpp
│ │ ├── test_memfault_self_test_reboot_reason.cpp
│ │ ├── test_memfault_self_test_time.cpp
│ │ ├── test_memfault_self_test_utils.cpp
│ │ ├── test_memfault_serializer_helper.cpp
│ │ ├── test_memfault_session_metrics.cpp
│ │ ├── test_memfault_session_metrics_debug.cpp
│ │ ├── test_memfault_session_vitals.cpp
│ │ ├── test_memfault_task_watchdog.cpp
│ │ ├── test_memfault_trace_event.cpp
│ │ ├── test_memfault_user_reboot_reasons.cpp
│ │ └── test_memfault_varint.cpp
│ ├── stub_includes/
│ │ ├── FreeRTOS.h
│ │ ├── lwip/
│ │ │ └── stats.h
│ │ ├── mbedtls_mem.h
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_reboot_reason_user_config.def
│ │ ├── memfault_task_watchdog_config.def
│ │ ├── memfault_trace_reason_user_config.def
│ │ ├── sdk_common.h
│ │ ├── task.h
│ │ └── timers.h
│ ├── stubs/
│ │ ├── stub_assert.c
│ │ ├── stub_component_booted.c
│ │ ├── stub_mbedtls_mem.c
│ │ ├── stub_memfault_coredump.c
│ │ ├── stub_memfault_coredump_regions.c
│ │ ├── stub_memfault_coredump_storage_debug.c
│ │ ├── stub_memfault_log.c
│ │ ├── stub_memfault_log_save.c
│ │ ├── stub_platform.c
│ │ └── stub_reboot_tracking.c
│ └── test.py
└── zephyr/
└── module.yml
================================================
FILE CONTENTS
================================================
================================================
FILE: .circleci/Dockerfile
================================================
# This Docker image is used in CircleCI to build the SDK. It's published to
# Docker Hub as "memfault/memfault-sdk-embedded-ci".
#
# It's built with the following command (assuming cwd is the directory
# containing this Dockerfile):
#
# ❯ DOCKER_BUILDKIT=1 docker build -t memfault/memfault-firmware-sdk-ci:<tag> .
#
# And uploaded to Docker Hub:
# ❯ docker push memfault/memfault-firmware-sdk-ci:<tag>
FROM ubuntu:22.04
# Some details based on this Dockerfile:
# https://github.com/CircleCI-Public/cimg-base/blob/2b2cc9584c5ce2256d0781106218ff4158c790a0/22.04/Dockerfile
SHELL ["/bin/bash", "-exo", "pipefail", "-c"]
ENV DEBIAN_FRONTEND=noninteractive \
TERM=dumb \
PAGER=cat
ARG MEMFAULT_SDK_APT_DEPS="\
build-essential \
cpputest \
curl \
gcc-12 \
g++-12 \
git \
gnupg \
python3.10 \
python3.10-venv\
"
# Run commands and tests as circleci user
RUN echo 'APT::Get::Assume-Yes "true";' > /etc/apt/apt.conf.d/90circleci && \
echo 'DPkg::Options "--force-confnew";' >> /etc/apt/apt.conf.d/90circleci && \
apt-get update && apt-get install -y --no-install-recommends \
locales \
sudo \
wget \
${MEMFAULT_SDK_APT_DEPS} \
&& \
locale-gen en_US.UTF-8 && \
rm -rf /var/lib/apt/lists/* && \
# create the circlci user
useradd --uid=3434 --user-group --create-home circleci && \
echo 'circleci ALL=NOPASSWD: ALL' >> /etc/sudoers.d/50-circleci && \
echo 'Defaults env_keep += "DEBIAN_FRONTEND"' >> /etc/sudoers.d/env_keep && \
sudo -u circleci mkdir /home/circleci/project && \
sudo -u circleci mkdir /home/circleci/bin
# Select gcc-12 as the default gcc/g++ version
RUN sudo update-alternatives --install \
/usr/bin/gcc gcc /usr/bin/gcc-12 60 \
--slave /usr/bin/g++ g++ /usr/bin/g++-12 \
--slave /usr/bin/gcov gcov /usr/bin/gcov-12
ENV PATH=/home/circleci/bin:/home/circleci/.local/bin:$PATH \
LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8
# Install lcov and add to PATH
ARG LCOV_VERSION=1.16
ARG LCOV_SHA256SUM=987031ad5528c8a746d4b52b380bc1bffe412de1f2b9c2ba5224995668e3240b
RUN \
cd /tmp && \
wget https://github.com/linux-test-project/lcov/releases/download/v${LCOV_VERSION}/lcov-${LCOV_VERSION}.tar.gz -O lcov.tar.gz && \
echo "${LCOV_SHA256SUM} lcov.tar.gz" | shasum --algorithm=256 --check && \
tar zvxf lcov.tar.gz && \
cd lcov-${LCOV_VERSION} && sudo make install && \
cd .. && \
rm -rf ./lcov* && \
lcov --version && \
genhtml --version
# Install clang-17
RUN \
echo deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main >> /etc/apt/sources.list.d/llvm.list && \
echo deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main >> /etc/apt/sources.list.d/llvm.list && \
wget -q -O - http://apt.llvm.org/llvm-snapshot.gpg.key|apt-key add - && \
apt-get update && apt-get install -y clang-17 llvm-17
ENV PATH=/home/circleci/lcov-${LCOV_VERSION}/bin:$PATH
USER circleci
# Match the default CircleCI working directory
WORKDIR /home/circleci/project
# Create the virtualenv
RUN python3 -m venv ~/venv
# Auto-activate the virtualenv in the container
RUN sudo mkdir -p /circleci/ && \
sudo bash -c "echo 'source ~/venv/bin/activate' >> /circleci/.bashrc_circleci" && \
echo 'source /circleci/.bashrc_circleci' >> ~/.bashrc
ENTRYPOINT ["bash"]
================================================
FILE: .circleci/config.yml
================================================
# Python CircleCI 2.1 configuration file
#
# Check for more details:
#
# - https://circleci.com/docs/2.0/configuration-reference/#section=reference
# - https://discuss.circleci.com/t/circleci-2-1-config-overview/26057
#
# Validate this via:
#
# - brew install circleci
# - circleci config validate
#
version: 2.1
executors:
memfault-ci:
docker:
- image: memfault/memfault-firmware-sdk-ci:2024-01-19
working_directory: ~/repo
commands:
virtualenv_activate:
steps:
- run:
name: Set environment variables and source virtualenv
command: |
if [ -f /circleci/.bashrc_circleci ]; then
cat /circleci/.bashrc_circleci >> $BASH_ENV
fi
pip_install:
steps:
- restore_cache:
name: Restore Python Package Cache
keys:
- v3-pip-dependencies-{{ checksum "requirements.txt" }}
- v3-pip-dependencies-
- run: pip install -r requirements.txt
- save_cache:
paths:
- ~/venv
key: v3-pip-dependencies-{{ checksum "requirements.txt" }}
prepare:
steps:
- checkout
- virtualenv_activate
- pip_install
jobs:
# TODO: also build demo apps in public CI (not just in our private CI)
fw-sdk-test:
executor: memfault-ci
steps:
- prepare
# run the tests with the sanitizer enabled first
- run: inv -e test --coverage
# now clean, and re-run with the sanitizer disabled- it adds extra
# branches that cannot be hit in a normal run, impacting coverage statistics
- run: git clean -dxff
- run: MEMFAULT_DISABLE_ASAN=1 inv -e test --coverage
- run: curl -s https://codecov.io/bash | bash -s -- -t ${CODECOV_TOKEN} -n ${CIRCLE_BUILD_NUM} -Z || echo 'Codecov upload failed'
workflows:
version: 2
build:
jobs:
- fw-sdk-test
================================================
FILE: .circleci/runas.sh
================================================
#!/usr/bin/env bash
# This script can be used (on a Linux host, at least) to set up a docker
# container to be able to write on a hosted volume, by using an overlay mount
# inside the container.
#
# It requires running docker with the --priviledged flag. An example:
#
# ❯docker run --privileged --rm -i -t -v"$PWD":/hostdir memfault/memfault-firmware-sdk-ci /hostdir/.circleci/runas.sh
set -euo pipefail
BASE_DIR=/hostdir
FINAL_DIR=/memfault-firmware-sdk
USER=${USER-$(whoami)}
mkdir -p /tmp/overlay/
sudo mount -t tmpfs tmpfs /tmp/overlay
mkdir /tmp/overlay/{up,work}
sudo mkdir "$FINAL_DIR"
sudo mount -t overlay overlay \
-o lowerdir="$BASE_DIR,upperdir=/tmp/overlay/up/,workdir=/tmp/overlay/work/" \
"$FINAL_DIR"
sudo chown -R "$USER:$USER $FINAL_DIR"
exec bash
================================================
FILE: .clang-format
================================================
---
BasedOnStyle: Google
AlignArrayOfStructures: None
AllowShortBlocksOnASingleLine: Empty
AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakBeforeMultilineStrings: false
AttributeMacros:
- MEMFAULT_ALIGNED
- MEMFAULT_NAKED_FUNC
- MEMFAULT_NO_ALLOC
- MEMFAULT_NO_OPT
- MEMFAULT_NORETURN
- MEMFAULT_PACKED
- MEMFAULT_PACKED_STRUCT
- MEMFAULT_PRINTF_LIKE_FUNC
- MEMFAULT_PUT_IN_SECTION
- MEMFAULT_UNREACHABLE
- MEMFAULT_UNUSED
- MEMFAULT_USED
- MEMFAULT_WEAK
BitFieldColonSpacing: None
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: false
ColumnLimit: 100
ContinuationIndentWidth: 2
Cpp11BracedListStyle: false
DerivePointerAlignment: false
FixNamespaceComments: false
ForEachMacros:
- MEMFAULT_SHELL_FOR_EACH_COMMAND
IndentPPDirectives: BeforeHash
IndentWidth: 2
NamespaceIndentation: All
NamespaceMacros:
- TEST
- TEST_GROUP
PointerAlignment: Right
SpaceInEmptyBlock: true
WhitespaceSensitiveMacros:
- MEMFAULT_QUOTE
- MEMFAULT_ZEPHYR_INCLUDE
- Pragma
================================================
FILE: .codecov.yml
================================================
coverage:
precision: 2
round: down
range: "70...100"
status:
patch: off
project:
default:
target: 70%
informational: true
ignore:
- "tests" # Don't include the tests themselves in the code coverage report
================================================
FILE: .cyignore
================================================
cmake
components/_feature_stubs
components/_sortme
examples
internal
makefile
ports/atmel
ports/dialog
ports/emlib
ports/esp_idf
ports/freertos/src/memfault_sdk_metrics_freertos.c
ports/lwip
ports/mbedtls
ports/mynewt
ports/nrf5_sdk
ports/nxp
ports/particle
ports/qp
ports/s32sdk
ports/silabs
ports/stm32cube
ports/templates
ports/threadx
ports/zephyr
scripts
tests
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/core
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/demo
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/http
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/metrics
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/panics
$(SEARCH_memfault-firmware-sdk)/components/include/memfault/util
$(SEARCH_memfault-firmware-sdk)/ports/include/memfault
================================================
FILE: .git-blame-ignore-revs
================================================
# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view
#
# This file contains a list of commits that are not likely what you
# are looking for in a blame, such as mass reformatting or renaming.
# You can set this file as a default ignore file for blame by running
# the following command.
#
# git config blame.ignoreRevsFile .git-blame-ignore-revs
0ca1a2a16f7cbf0420d795ca3a4f508fe09f95bd # SDK v1.6.2 clang-format run
================================================
FILE: .gitignore
================================================
build
/examples/mbedtls
/examples/modus
__pycache__/
================================================
FILE: CHANGELOG.md
================================================
# Memfault Firmware SDK Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.39.0] - 2026-05-06
This is a minor release, including new features, improvements, and bug fixes
across several platforms.
### 📈 Added
- Zephyr:
- Enable Zephyr RTOS thread awareness for ESP32-S3. Non-active Xtensa threads
now decode correctly.
- Added a new Kconfig option, `CONFIG_MEMFAULT_HTTP_DISABLE_TLS`, which
disables TLS for the Memfault HTTP transport and uses plain-text HTTP
instead. **This option is intended for local debugging only (e.g. with a
local proxy server) and must never be enabled in production firmware.**
Two companion options are available when `CONFIG_MEMFAULT_HTTP_DISABLE_TLS`
is set:
- `CONFIG_MEMFAULT_HTTP_CHUNKS_API_HOST` - override the chunks API host
(default: `chunks.memfault.com`)
- `CONFIG_MEMFAULT_HTTP_DEVICE_API_HOST` - override the device API host
(default: `device.memfault.com`)
- Add support for `CONFIG_USE_SWITCH` alternate context switching option for
ARM Cortex-M, added in Zephyr v4.4.0.
- General:
- Added build support for legacy ARM cores (ARMv4T, ARMv5TE/TEJ, ARMv6). Only
compilation is supported; coredump and exception tracking are not supported
on these platforms.
- ThreadX:
- Added `memfault_threadx_get_thread_regions()` and the accompanying
`memfault/ports/threadx_coredump.h` header, which capture per-thread stack
usage watermarks into the coredump at fault time.
The helper walks the ThreadX created-thread list, records each thread's TCB
and full stack, and scans the stack fill pattern to compute how many bytes
remain unused at the bottom of each thread's stack. Results are stored in a
compact `sMfltThreadXStackInfo[]` sidecar array that is captured as a
coredump region alongside the stacks.
Call it from `memfault_platform_coredump_get_regions()`:
```c
#include "memfault/ports/threadx_coredump.h"
// Add MEMFAULT_THREADX_MAX_TASK_REGIONS to your region array size:
// #define COREDUMP_MAX_REGIONS (4 + MEMFAULT_THREADX_MAX_TASK_REGIONS)
region_idx += memfault_threadx_get_thread_regions(
&s_coredump_regions[region_idx],
MEMFAULT_ARRAY_SIZE(s_coredump_regions) - region_idx);
```
The maximum number of tracked threads defaults to 16 and can be overridden
by defining `MEMFAULT_THREADX_MAX_THREADS` in `memfault_platform_config.h`.
The per-thread stack usage data is displayed in the Memfault web app
alongside each thread's backtrace.
A reference sample is provided at
<https://github.com/memfault/memfault-threadx-sample> .
### 🔥 Removed
- Mbed OS: removed the Mbed OS port, example app, and invoke tasks. The port was
deprecated in 1.38.0. Cloud-side support is not affected.
### 🐛 Fixed
- FreeRTOS:
- Add some compatibility workarounds to support building with FreeRTOS V9.0.0.
Relevant defines are `MEMFAULT_FREERTOS_DISABLE_STACK_OVERFLOW_HOOK` and
`MEMFAULT_FREERTOS_PXENDOFSTACK_AVAILABLE`.
- Zephyr:
- Fix Xtensa thread stack capture in `memfault_zephyr_ram_regions.c`.
- Fix a bug in `memfault_zephyr_port_http_upload_sdk_data()` /
`memfault_zephyr_port_http_post_chunk()` where only HTTP 200 was treated as
a successful response from the Memfault server. Fixed so any 2xx response is
treated as a success.
## [1.38.0] - 2026-04-24
This is a minor release, including new features, improvements, and bug fixes
across several platforms.
### 🚩 Deprecated
- Mbed OS:
Arm has announced that
[Mbed OS will reach end of life in July 2026](https://os.mbed.com/blog/entry/Important-Update-on-Mbed/).
As a result, the Memfault Firmware SDK port for Mbed OS is being deprecated,
and will be removed in a following release.
**Cloud-side support is not affected** - existing devices using the Mbed OS
port will continue to report data to Memfault and the Memfault cloud platform
will continue to process and display that data as before.
If your project relies on the Mbed OS port and you need continued SDK support,
please [contact us](https://mflt.io/contact-support)!
### 📈 Added
- ESP-IDF:
- Added a new Kconfig option, `CONFIG_MEMFAULT_RECORD_REBOOT_ON_BOOT` (default
`y`), to allow deferring reboot reason event serialization to a later point
in time. Set this option to `n` when reboot reason collection must be
deferred (i.e. if device serial is not available immediately at boot). When
deferring, the user application must call
`memfault_esp_port_collect_reset_info()` (declared in
`memfault/esp_port/core.h`) once device info initialization is complete, to
record the reboot event.
- Zephyr:
- Add a new Kconfig option, `CONFIG_MEMFAULT_PERIODIC_UPLOAD_ENABLED_DEFAULT`,
which controls the initial state of periodic Memfault data uploads at boot.
Defaults to `y` (enabled), preserving existing behavior. Set to `n` to start
with periodic uploads disabled at boot; the state can still be changed at
runtime with `memfault_zephyr_port_periodic_upload_enable()`.
- Add support to the [nRF91 sample app](examples/nrf-connect-sdk/nrf9160/) for
FOTA over CoAP in the CoAP overlay.
- Add a new Kconfig option, `CONFIG_MEMFAULT_PERIODIC_FOTA_CHECK`, to enable a
periodic FOTA check. This runs along the `CONFIG_MEMFAULT_PERIODIC_UPLOAD`
thread.
- Add a new Kconfig option,
`CONFIG_MEMFAULT_PERIODIC_UPLOAD_DEDICATED_WORKQUEUE_PRIORITY`, which
controls the workqueue priority for uploading data when
`CONFIG_MEMFAULT_PERIODIC_UPLOAD_USE_DEDICATED_WORKQUEUE=y`. The default is
the lowest priority (`K_LOWEST_APPLICATION_THREAD_PRIO`).
- Add a new system time implementation, used to timestamp events (Heartbeats,
Logs, Trace Events) on-device, using the Zephyr System Clock API. This adds
to the existing RTC and DATE_TIME implementations. It can be selected with
`CONFIG_MEMFAULT_SYSTEM_TIME_SOURCE_SYS_CLOCK=y`, and is auto-enabled when
other sources are not present but Zephyr provides `SYS_CLOCK_EXISTS` (system
clock support). This implementation is useful on platforms lacking an RTC
but do synchronize System Clock from an external time source (e.g. via NTP).
- Add a coredump storage implementation for the STM32U5 series SOC. Enable it
with `CONFIG_MEMFAULT_COREDUMP_STORAGE_STM32U5_FLASH=y`. Requires a device
tree partition labeled `memfault_coredump_partition` to be defined. See
[`ports/zephyr/common/coredump_storage/memfault_stm32u5_flash_backed_coredump.c`](ports/zephyr/common/coredump_storage/memfault_stm32u5_flash_backed_coredump.c)
for details.
### 🐛 Fixed
- Zephyr:
- Change `memfault_zephyr_port_http_upload_sdk_data()` and
`memfault_zephyr_port_http_post_chunk()` to return non-zero if an HTTP error
status code is returned by the Memfault server. Previously, non-200 HTTP
responses were silently ignored.
- Zephyr v4.4 removes support for the Mbed TLS legacy crypto backend, only
supporting PSA now. Update a compile time check in
`memfault_platform_http.c` to support the new option,
`CONFIG_PSA_WANT_ALG_SHA_1`, which replaces `CONFIG_MBEDTLS_SHA1`.
- Fix some errors in the RRAM and MRAM-backed coredump storage implementations
that were added in SDK v1.29.0. Incorrect offset computation was used, which
could result in incorrect positioning of the coredump when certain flash
region configurations are used (i.e. instead of partitions, flash regions
are used).
- Fix a few minor type inconsistencies in `memfault_platform_http.c`.
- General:
- Fix a few minor type inconsistencies in the following files:
- `ports/cypress/psoc6/memfault_platform_http.c`
- `ports/mbedtls/memfault_platform_http_client.c`
- `ports/stm32cube/l4/flash_coredump_storage.c`
- `ports/stm32cube/wb/flash_coredump_storage.c`
### 🛠️ Changed
- Zephyr:
- Changed the Kconfig symbol `MEMFAULT_COREDUMP_STORAGE_RRAM` to
`MEMFAULT_COREDUMP_STORAGE_NRF_RRAM` to better reflect that it supports nRF
devices only.
- Changed the default thread priority when
`CONFIG_MEMFAULT_PERIODIC_UPLOAD_USE_DEDICATED_WORKQUEUE=y` from the highest
thread priority (`K_HIGHEST_APPLICATION_THREAD_PRIO`) to the lowest
(`K_LOWEST_APPLICATION_THREAD_PRIO`). This change was made to prevent
Memfault data upload from pre-empting application threads. To change the
priority level, use the new Kconfig
`CONFIG_MEMFAULT_PERIODIC_UPLOAD_DEDICATED_WORKQUEUE_PRIORITY`.
- Handle rename of Kconfig symbol `MBEDTLS_CFG_FILE` -> `MBEDTLS_CONFIG_FILE`.
Thanks to [@tomi-font](https://github.com/tomi-font) for the fix in
[#113](https://github.com/memfault/memfault-firmware-sdk/pull/113) 🎉!
- nRF Connect SDK:
- Improved CoAP upload behavior when using the nRF Cloud CoAP library.
`CONFIG_MEMFAULT_COAP_MAX_POST_SIZE` has been removed; the chunk size is now
derived automatically from `CONFIG_COAP_CLIENT_BLOCK_SIZE` and
`CONFIG_COAP_CLIENT_MESSAGE_HEADER_SIZE`, ensuring each Memfault chunk maps
1:1 to one CoAP block. The message limit is now workqueue-aware: when using
a dedicated workqueue
(`CONFIG_MEMFAULT_PERIODIC_UPLOAD_USE_DEDICATED_WORKQUEUE`), uploads are
unbounded so all pending data is drained in one pass; when running on the
system workqueue, the limit defaults to 100
(`CONFIG_MEMFAULT_COAP_MAX_MESSAGES_TO_SEND`) to avoid blocking other work,
but can still be configured to a convenient value.
- The NCS FOTA implementation is now a backend option of the Zephyr FOTA
framework, selectable via `CONFIG_MEMFAULT_ZEPHYR_FOTA_BACKEND_NCS`. This
backend is chosen automatically on NCS targets with a direct connection to
the internet. The previous `CONFIG_MEMFAULT_FOTA` symbol no longer has any
effect, and is removed in this release.
The entry point `memfault_fota_start()` is replaced by
`memfault_zephyr_fota_start()`, consistent with the other Zephyr FOTA
backends. The `CONFIG_MEMFAULT_PERIODIC_FOTA_CHECK` option now works on NCS
targets as well.
The deprecated headers `memfault/nrfconnect_port/fota.h` and
`memfault/nrfconnect_port/http.h` have been removed; use
`memfault/ports/zephyr/fota.h` and `memfault/ports/zephyr/http.h` directly.
- `CONFIG_MEMFAULT_NRF_SHELL` is removed in this release, the commands are now
available from the general Memfault Zephyr shell commands.
- Internal: bumped two python deps: `pytest` (7.0.1 → 9.0.3, includes
CVE-2025-71176 fix) and `invoke` (2.1.1 → 3.0.3) in
`sdk/embedded/requirements.txt`.
## [1.37.1] - 2026-03-24
This is a patch release, fixing a single item.
### 🐛 Fixed
- Zephyr/nRF Connect SDK:
- Fix an error in the previous release, where Kconfig symbol stubs were added
to satisfy the Kconfig linter in certain project configurations. The stubs
are removed in this release. To successfully run compliance checking on nRF
Connect SDK versions other than current main, or on vanilla Zephyr projects,
it's necessary to add additional ignores to the compliance check list.
This addresses issue
[#112](https://github.com/memfault/memfault-firmware-sdk/issues/112).
## [1.37.0] - 2026-03-23
This is a minor release, including several improvements and bug fixes across
several platforms.
### 🛠️ Changed
- nRF Connect SDK:
- Use the native `/chunks` endpoint instead of the HTTP proxy endpoint for
sending Memfault data via nRF Cloud CoAP. This also enables sending data
with a Memfault Project Key built into the application. The `/chunks`
endpoint will automatically route data to the associated Memfault Project
🪄!
- Add `CONFIG_MEMFAULT_ROOT_CERT_INSTALL_ON_MODEM_LIB_INIT` to optionally
install Memfault root certificates from an `NRF_MODEM_LIB_ON_INIT` callback
after modem library initialization. This option is enabled by default for
nRF modem users. Note that the Memfault root cert installation is
idempotent.
- Update the nRF9160 sample app to call
`memfault_zephyr_port_install_root_certs()` only when
`CONFIG_MEMFAULT_ROOT_CERT_INSTALL_ON_MODEM_LIB_INIT` is disabled.
- Zephyr:
- Update a check in the Memfault HTTP implementation that was not correctly
using heap when `CONFIG_COMMON_LIBC_MALLOC_ARENA_SIZE=-1` (default, using
all unallocated memory for heap). Thanks to
[@SeppoTakalo](https://github.com/SeppoTakalo) for providing this fix in
[#104](https://github.com/memfault/memfault-firmware-sdk/pull/104) 🎉!
- Add missing Kconfig dependencies for choice config
`CONFIG_MEMFAULT_ROOT_CERT_STORAGE_CONTEXT`.
- Generalize the nRF modem root certificate storage Kconfig naming by adding
`CONFIG_MEMFAULT_ROOT_CERT_STORAGE_NRF_MODEM` and deprecating
`CONFIG_MEMFAULT_ROOT_CERT_STORAGE_NRF9160_MODEM`.
- General:
- Move the SDK unit tests from `tests/` to `tests/unit/`, to allow for
additional types of tests to be added in the future under `tests/` (i.e.
integration/port tests).
### 🐛 Fixed
- Zephyr:
- Fixed a bug in the Ambiq MRAM driver, where `FIXED_PARTITION_OFFSET` was
incorrectly used instead of `FIXED_PARTITION_ADDRESS` when accessing the
coredump partition.
- The Kconfig option `MBEDTLS_PEM_CERTIFICATE_FORMAT` was renamed into
`MBEDTLS_PEM_PARSE_C && MBEDTLS_PEM_WRITE_C`. Update
`CONFIG_MEMFAULT_TLS_CERTS_USE_PEM` to depend on the new symbol. Thanks to
[@tomi-font](https://github.com/tomi-font) for providing this fix in
[#105](https://github.com/memfault/memfault-firmware-sdk/pull/105) 🎉!
- Fix a [number](https://github.com/memfault/memfault-firmware-sdk/issues/107)
[of](https://github.com/memfault/memfault-firmware-sdk/issues/108)
[Kconfig](https://github.com/memfault/memfault-firmware-sdk/issues/109)
lints on older Zephyr versions. Thank you to
[@JordanYates](https://github.com/JordanYates) for reporting these issues.
- Fix a compilation issue due to missing `CONFIG_MEMFAULT_PROJECT_KEY`
definition when using the Memfault MCUmgr command group. Thanks to
[@JordanYates](https://github.com/JordanYates) for reporting this issue in
[#106](https://github.com/memfault/memfault-firmware-sdk/pull/106).
## [1.36.0] - 2026-03-11
This is a minor release, including several improvements and bug fixes across all
platforms. Highlights:
- Improved support for accessing Memfault over CoAP (vs. HTTPS) for Zephyr-based
devices
- Added support for optionally returning from a Watchdog interrupt handler,
instead of rebooting immediately
- For Zephyr-based devices, added a custom MCUmgr command group for Memfault
metadata. This enables Memfault FOTA via MCUmgr without sending device
information on a secondary interface (e.g., Bluetooth DIS)
### 📈 Added
- ESP-IDF:
- Add support for the upcoming ESP-IDF v6 release.
- General:
- Add support for optionally returning from a Watchdog interrupt handler,
instead of rebooting. Use the define
`MEMFAULT_FAULT_HANDLER_WATCHDOG_RETURN` to enable this behavior. Note that
the user is required to handle any necessary clean up or reboot in this
configuration.
- Zephyr:
- A custom
[MCUmgr](https://docs.zephyrproject.org/latest/services/device_mgmt/mcumgr_handlers.html)
command group for Memfault metadata, which allows a MCUmgr client to read
the following device information over the MCUmgr protocol:
- Device Serial
- Software Version
- Software Type
- Hardware Version
- Memfault Project Key
This enables using Memfault FOTA with only MCUmgr enabled on the target
device (i.e. SMP over BLE).
Memfault recommends enabling the
[Memfault Diagnostic Service (MDS)](https://docs.memfault.com/docs/mcu/mds)
when using the Nordic nRF Connect SDK on a Bluetooth-enabled application:
MDS provides a built-in way to export Memfault telemetry data over BLE,
using the Nordic-provided companion mobile apps.
See the [documentation here](https://docs.memfault.com/docs/mcu/mcumgr) for
more details on the Memfault MCUmgr command group.
### 🛠️ Changed
- nRF Connect SDK:
- Decouple CoAP upload from HTTP. Data upload over nRF Cloud CoAP via
`CONFIG_MEMFAULT_USE_NRF_CLOUD_COAP` no longer requires
`CONFIG_MEMFAULT_HTTP_ENABLE`.
- Use new options `CONFIG_MEMFAULT_COAP_MAX_MESSAGES_TO_SEND`,
`CONFIG_MEMFAULT_COAP_MAX_POST_SIZE`, and
`CONFIG_MEMFAULT_COAP_FOTA_URL_BUFFER_SIZE` instead of HTTP or
download-client configs to control CoAP upload behavior.
- Remove redundant default-enabled configs from the
[nRF91 sample app](examples/nrf-connect-sdk/nrf9160/) `prj.conf`.
- Rename `mflt_http` thread to `mflt_upload`. The associated thread metric
name is now `memory_mflt_upload_pct_max`.
- Add `CONFIG_NETWORKING` as a dependency for
`CONFIG_MEMFAULT_USE_NRF_CLOUD_COAP`.
- Add `CONFIG_COAP_CLIENT` and `CONFIG_NRF_CLOUD_COAP_MAX_USER_OPTIONS >= 2`
as dependencies for `CONFIG_MEMFAULT_USE_NRF_CLOUD_COAP`.
- Use the NCS nRF Cloud CoAP APIs in the Memfault CoAP port to share
connection ID with other nRF Cloud connections. Requires the latest NCS
development version when using `CONFIG_MEMFAULT_USE_NRF_CLOUD_COAP`.
- Zephyr:
- Deprecate `CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD` and related Kconfig in
favor of `CONFIG_MEMFAULT_PERIODIC_UPLOAD`. The legacy
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD_*` configs remain as
backwards-compatibility aliases. Choice config
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD_CONTEXT` is kept to allow for choice
override in NCS.
- Refactor HTTP client implementation to use `zsock_` prefixed socket
functions instead of depending on `CONFIG_POSIX_API`. This aligns with
Zephyr's native socket API and removes the requirement for POSIX API
compatibility layer to be enabled. As part of this change, add a missing
`NET_SOCKETS` Kconfig dependency to `CONFIG_MEMFAULT_HTTP_ENABLE`; this
dependency was always required, but not previously included.
### 🐛 Fixed
- General:
- Fix a few `-Wunused-variable` warnings in the battery metrics module when
debug logs are disabled.
- nRF-Connect SDK
- Fix a missed reference of Kconfig symbol `MEMFAULT_USE_NRF_CLOUD_TRANSPORT`
when it was updated to `MEMFAULT_USE_NRF_CLOUD_COAP` in SDK v1.34.0.
- Fix a reference of `CONFIG_MEMFAULT_METRICS_SYNC_SUCCESS` to
`CONFIG_MEMFAULT_METRICS_MEMFAULT_SYNC_SUCCESS` when marking sync successes
for the Memfault cloud
[Sync Success Vital](https://docs.memfault.com/docs/platform/memfault-core-metrics#periodic-connectivity).
- Zephyr:
- Fix an error in the Kconfig dependencies for the
`MEMFAULT_COREDUMP_STORAGE_AMBIQ_MRAM` symbol. This affects users on Ambiq
Apollo4 and Apollo510 SOCs.
## [1.35.0] - 2026-01-29
### 📈 Added
- Zephyr:
- Add a new API, `memfault_zephyr_port_http_periodic_upload_enabled()`, which
returns the current state of periodic Memfault data uploads.
## [1.34.0] - 2026-01-26
### 🔥 Removed
- ESP8266:
- This release removes support for the ESP8266 platform in the Memfault
Firmware SDK. ESP8266 support was deprecated in SDK 1.33.0, and is disabled
in the Memfault cloud. Please reach out to <https://mflt.io/contact-support>
if you need assistance!
### 📈 Added
- General:
- Add the printing of the stored reboot reason on boot to the
`memfault_platform_port.c` template when `MEMFAULT_ENABLE_REBOOT_DIAG_DUMP`
is enabled.
- ESP-IDF:
- Add support for downloading OTA images in multiple HTTP requests. This
feature is automatically enabled when
`CONFIG_ESP_HTTPS_OTA_ENABLE_PARTIAL_DOWNLOAD=y` is set, but can also be
manually controlled with `CONFIG_MEMFAULT_HTTP_PARTIAL_DOWNLOAD_ENABLE`. The
chunk size for each request can be configured using
`CONFIG_MEMFAULT_HTTP_MAX_REQUEST_SIZE`, which defaults to 15kB. This
support can reduce RAM usage by allowing a smaller mbedTLS receive buffer.
- Add the raw ESP reboot value and the Memfault-stored reboot reason to the
reboot reason information printed on boot when
`CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=y`. Only the raw enumerated values
are printed to save space. See
[reboot_reason_types.h](components/include/memfault/core/reboot_reason_types.h)
for all Memfault reboot reasons. Note: custom reason values equal the base
unexpected/expected reboot reason address plus their declaration order in
`memfault_reboot_reason_user_config.h`.
- Zephyr:
- Add the raw Zephyr hwinfo value and the Memfault-stored reboot reason to the
reboot reason information printed on boot when
`CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=y`. Only the raw enumerated values
are printed to save space. See
[reboot_reason_types.h](components/include/memfault/core/reboot_reason_types.h)
for all Memfault reboot reasons. Note: custom reason values equal the base
unexpected/expected reboot reason address plus their declaration order in
`memfault_reboot_reason_user_config.h`.
- Add a new API, `memfault_zephyr_port_http_periodic_upload_enable()`, which
can be used to enable or disable periodic Memfault data uploads at runtime.
This complements the existing Kconfig option
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD`, which enables periodic uploads at
boot time. See
[`ports/zephyr/include/memfault/ports/zephyr/http.h`](ports/zephyr/include/memfault/ports/zephyr/http.h)
for details.
### 🛠️ Changed
- General
- Align reboot tracking implementations to print the reboot reason register
value when `MEMFAULT_ENABLE_REBOOT_DIAG_DUMP` is enabled.
- nRF Connect SDK:
- Remove references to `SOC_SERIES_NRF52X` and similar, which have been
renamed in Zephyr v4.4. Thanks to [@nordicjm](https://github.com/nordicjm)
for providing this fix in
[#102](https://github.com/memfault/memfault-firmware-sdk/pull/102) 🎉!
- Changed name of Kconfig option `MEMFAULT_USE_NRF_CLOUD_TRANSPORT` to
`MEMFAULT_USE_NRF_CLOUD_COAP`. If you were using this Kconfig option, you
will need to rename it in your `prj.conf`.
- Zephyr:
- Remove the dependencies on `NET_SOCKETS_OFFLOAD` and
`NET_SOCKETS_OFFLOAD_DISPATCHER` for the Kconfig option
`MEMFAULT_HTTP_SOCKET_DISPATCH`. It's possible to use `SO_BINDTODEVICE`
sockopt without offloaded sockets, and it's useful to allow setting the
`netif` used for Memfault HTTP operations via
`memfault_zephyr_port_http_set_interface_name()` in cases where offloaded
sockets are not used. Thanks to [@chirambaht](https://github.com/chirambaht)
for reporting this issue in
[#101](https://github.com/memfault/memfault-firmware-sdk/issues/101) 🎉!
### 🐛 Fixed
- nRF-Connect SDK:
- Support user-configurable values for `MEMFAULT_HTTP_CHUNKS_API_HOST` and
`MEMFAULT_HTTP_DEVICE_API_HOST`. This was supported on other platforms,
including Zephyr, but was not supported on the nRF Connect SDK port.
## [1.33.0] - 2026-01-07
This is a minor release.
### 🚩 Deprecated
- ESP8266:
- This release deprecates support for the ESP8266 platform in the Memfault
Firmware SDK and backend. After this release, Memfault's cloud will no
longer process coredumps from ESP8266 devices, and a future version of the
SDK will remove ESP8266 support.
### 📈 Added
- ESP-IDF:
- Add a new Kconfig option, `MEMFAULT_COREDUMP_REGIONS_THREAD_ONLY`, which can
be used to limit coredump collection to only thread-related data (stacks,
TCBs, and FreeRTOS metadata), excluding .bss/.data and heap sections. This
can be useful for reducing the size of coredumps. When enabled, the
`MEMFAULT_PLATFORM_TASK_STACK_SIZE_TO_COLLECT` option can be used to adjust
the amount of stack data collected for each task.
- Zephyr
- Add support for dispatching the socket used for Memfault HTTP upload to a
specific network interface when multiple network interfaces are being used
(i.e. `CONFIG_NET_SOCKETS_OFFLOAD_DISPATCHER=y`). Enable this support with
`CONFIG_MEMFAULT_HTTP_SOCKET_DISPATCH` and specify the interface to dispatch
the socket to at runtime with the new API
`memfault_zephyr_port_http_set_interface_name()`.
- Add a coredump storage implementation for the Ambiq Apollo4 and Apollo510
series. This storage implementation can be enabled with
`CONFIG_MEMFAULT_COREDUMP_STORAGE_AMBIQ_MRAM=y`. Requires adding a fixed
partition named `memfault_coredump_partition` to the device tree. See
[`ports/zephyr/common/coredump_storage/memfault_ambiq_mram_backed_coredump.c`](ports/zephyr/common/coredump_storage/memfault_ambiq_mram_backed_coredump.c)
for details.
- nRF-Connect SDK
- Add the nRF54LM20-DK to the list of tested targets for the
[nRF52/53/54 sample app](examples/nrf-connect-sdk/nrf5/).
### 🛠️ Changed
- ESP-IDF:
- Eliminate some noisy warning/error logs that were being emitted on boot,
such as:
```plaintext
E (345) task_wdt: esp_task_wdt_status(765): TWDT was never initialized
W (362) mflt_sleep: No log backup data
W (372) mflt_sleep: No event storage backup data
W (372) mflt_sleep: No metrics backup data
```
- Change the default implementation of `memfault_platform_reboot()` to call
`panic_restart()` instead of `esp_restart()`. The latter is meant to be
called during a graceful reboot, while `panic_restart()` is what should be
used at the end of fault handling, to restart the system. Use
`CONFIG_MEMFAULT_PLATFORM_REBOOT_CUSTOM=y` to provide a custom
implementation of `memfault_platform_reboot()`.
- Zephyr:
- Changed the maximum compiled-in log level for `MEMFAULT_LOG_x()` statements
to match `CONFIG_MEMFAULT_LOG_LEVEL`. Previously, all log levels were
compiled in by default, and runtime filtering was applied based on the
configured log level. Now, only log statements at or below the configured
log level are compiled in, reducing code size. To restore the previous
behavior, set `CONFIG_MEMFAULT_PLATFORM_HAS_LOG_CONFIG=n` to disable the
custom log config header.
### 🐛 Fixed
- Zephyr:
- Fix a compilation error when targeting the VPR RISC-V coprocessors on Nordic
chips such as the nRF54L15 and nRF54LM20.
- Fix a few `-Wunused-variable` warnings when building with logs disabled
(`CONFIG_LOG=n`).
## [1.32.0] - 2025-12-03
This is a minor release. Key updates:
- Integrated fuel gauge battery metrics for nPM13xx PMICs on nRF Connect SDK.
- Added CoAP client for uploading Memfault data via nRF Cloud.
- Fixed build issues and compiler warnings on Zephyr and nRF Connect SDK.
### 📈 Added
- nRF-Connect SDK:
- Add a battery metrics port for the nPM1300 and nPM1304 PMICs, which includes
collecting battery metrics for the
[Battery Device Vital](https://docs.memfault.com/docs/platform/memfault-core-metrics?platform=MCU#battery)
and a heartbeat metric for battery voltage. To leverage this port, set
`CONFIG_MEMFAULT_NRF_PLATFORM_BATTERY_NPM13XX=y`. Note that users must
provide the header `memfault_nrf_platform_battery_model.h`, which should
define the battery model as specified by the nRF Fuel Gauge API. See the
[Nordic docs](https://docs.nordicsemi.com/bundle/ncs-latest/page/nrfxlib/nrf_fuel_gauge/README.html#nrf-fuel-gauge)
for more detail. Since this port calls `nrf_fuel_gauge_process()`,
applications that want to read state of charge should call
`memfault_platform_get_stateofcharge()` to avoid conflicting calls to the
fuel gauge library.
- Added a CoAP client implementation capable of uploading Memfault data
through an [nRF Cloud](https://www.nrfcloud.com/) connection. This is
primarily intended for use with the Nordic nRF91x series devices using LTE-M
or NB-IoT connectivity. To enable, use
`CONFIG_MEMFAULT_USE_NRF_CLOUD_COAP=y`. This will change the protocol used
by `memfault_zephyr_port_post_data()` (and
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD`), from HTTP to CoAP.
- Zephyr:
- Add the symbol `CONFIG_MEMFAULT_METRICS_BATTERY_SOC_PCT_SCALE_VALUE` with a
default value of 1000, which maps to 3 decimal places of precision for
battery metrics. See the
[Battery Device Vital docs](https://docs.memfault.com/docs/platform/memfault-core-metrics?platform=MCU#battery)
for more information on configuring battery metric collection.
### 🐛 Fixed
- Zephyr:
- Fix a compiler warning on Zephyr v4.1, when using
`CONFIG_MEMFAULT_METRICS_WIFI`. Thanks to
[@chshzh](https://github.com/chshzh) for reporting this issue in
[#98](https://github.com/memfault/memfault-firmware-sdk/issues/98) 🎉!
- Fix an incorrect check for the Kconfig option
`CONFIG_MEMFAULT_FAULT_HANDLER_LOG_PANIC` (previously was checking for
`defined(MEMFAULT_FAULT_HANDLER_LOG_PANIC)`, which is incorrect). Thanks to
[@konstk1](https://github.com/konstk1) for providing this fix in
[#100](https://github.com/memfault/memfault-firmware-sdk/pull/100) 🎉!
- General:
- Fix a few files that were missing necessary `#include <stdio.h>` or
`#include <string.h>` directives.
- nRF Connect SDK:
- Fix a compilation error when building for the nRF53 series on nRF Connect
SDK v3.2.0-rc1 and later, caused by a change in the NRFX HAL. Thanks to
[@Damian-Nordic](https://github.com/Damian-Nordic) for providing the fix in
[#99](https://github.com/memfault/memfault-firmware-sdk/pull/99) 🎉!
## [1.31.0] - 2025-11-22
This is a minor feature and bugfix release. Key updates:
- Fix for compact log serialization error when logs exceed max length
- Handle an upcoming Zephyr API change that renames BLE connection interval
field (used in built-in Bluetooth metrics)
### 📈 Added
- Zephyr:
- Added CPU temperature metrics support for additional platforms:
- Devices with a die temp device tree node with
`compatible = "nordic,nrf-temp"`;
- Platforms using `die_temp` or `die_temp0` aliases, a `temp` nodelabel, or
the `memfault_cpu_temp` alias. This support is enabled out of the box for
the nRF54L15-DK board.
- Add a new demo CLI command, `mflt get_reboot_reason`, which displays the
device reboot reason and the prior stored reboot reason. Example output:
```bash
uart:~$ mflt get_reboot_reason
Current Reboot Reason Reg: 0x0008
Prior Stored Reboot Reason: 0x0002
```
### 🛠️ Changed
- Zephyr:
- Updated the `mflt export` command to print out chunk data using
`shell_print()` instead of `printk()`. Using `printk()` can lead to dropped
chunk data when `CONFIG_LOG_PRINTK=y` and `CONFIG_LOG_MODE_DEFERRED=y`.
Using `shell_print()` avoids this issue.
- Change the precedence of reboot reason bits when decoding the Zephyr hwinfo
reset reason register. This improves the accuracy of reboot reasons on STM32
platforms, where the Pin Reset and Software Reset bits can be set
simultaneously with other reset reasons.
- Support an
[upcoming change](https://github.com/zephyrproject-rtos/zephyr/commit/c14dcaf1995ea9c70b4ce334e4c9765da09eb35d)
in Zephyr v4.4.0 / nRF Connect SDK v3.2.0, where the
`bt_conn_le_info.interval` field changes to `bt_conn_le_info.interval_us`.
Thanks to [@weeTike](https://github.com/weeTike) for providing this patch in
[#97](https://github.com/memfault/memfault-firmware-sdk/pull/97) 🎉!
This removes the existing metric `bt_connection_interval`, replacing with
`bt_connection_interval_us`. Please reach out if you need support for the
previous metric (which was added in SDK v1.29.0)
- General:
- Fix a few new warnings when building with clang 21.0.0+.
### 🐛 Fixed
- General:
- Fixed an error in Compact Log serialization that resulted in invalid log
data, which caused decoding to fail when processing the log in the Memfault
cloud. This issue only impacted compact logs that were within 4 bytes of the
`MEMFAULT_LOG_MAX_LINE_SAVE_LEN` limit; longer compact logs were silently
dropped but did not cause decoding failures.
This fix will now insert a placeholder log line when a compact log exceeds
the maximum length:
`[MFLT] compact log too long: 1234 bytes (file:<line number>)` (where `1234`
is the serialized log entry length that exceeded the limit).
- FreeRTOS
- Fixed an undefined macros build error on FreeRTOS versions < V11.0.0 in the
FreeRTOS thread metrics port. Thread metric collection is enabled by default
on FreeRTOS platforms but can be disabled with
`#define MEMFAULT_FREERTOS_COLLECT_THREAD_METRICS 0`.
## [1.30.3] - 2025-10-23
This is a patch release, fixing build errors and one bug.
### 🛠️ Changed
- Zephyr:
- Update the RRAM coredump storage backend implementation to support the
Nordic nRF54LM20 (and other Nordic nRF54L series chips) when not using
partition manager to assign flash regions (i.e. using device tree fixed
partitions). See
[`ports/zephyr/common/memfault_rram_backed_coredump.c`](ports/zephyr/common/memfault_rram_backed_coredump.c)
for details, and how to enable the coredump storage backend.
- Fix a compilation error when `CONFIG_MEMFAULT_METRICS_THREADS_DEFAULTS=n`.
- Remove an error log statement from
[`memfault_platform_thread_metrics.c`](ports/zephyr/common/memfault_platform_thread_metrics.c).
Previously this would log as
`<err> mflt: No thread name registered for 0x2000eae8`, for example, but was
not useful in many cases, and is not an error in any case.
### 🐛 Fixed
- ESP-IDF:
- Fix a compilation issue when building the [ESP32 sample app](examples/esp32)
for an ESP32-C6 with `MEMFAULT_DISABLE=` set (i.e.
`MEMFAULT_DISABLE=1 idf.py set-target esp32c6 build`). This only impacts the
sample application.
- Zephyr:
- Disable invoking `LOG_PANIC()` during fault handling by default. When
deferred logging is used (`CONFIG_LOG_MODE_DEFERRED=y`), triggering a panic
flush from fault context may result in some log backends
(`CONFIG_SHELL_LOG_BACKEND` for example) to double-fault, which results in
failed coredump captures. This specifically can happen when running a
non-secure application with TF-M, and passing back from a secure fault
handler using `CONFIG_TFM_ALLOW_NON_SECURE_FAULT_HANDLING=y`. Users who are
comfortable enabling this can re-enable `LOG_PANIC()` with
`CONFIG_MEMFAULT_FAULT_HANDLER_LOG_PANIC=y`.
- Remove an unnecessary `depends on PARTITION_MANAGER_ENABLED` in the
`MEMFAULT_COREDUMP_STORAGE_RRAM` Kconfig setting. This feature only requires
a partition labeled `memfault_coredump_partition`, but does not require
partition manager specifically (which is a Nordic nRF-Connect SDK feature,
not a Zephyr feature). Thanks to
[@JordanYates](https://github.com/JordanYates) for reporting this issue in
[#96](https://github.com/memfault/memfault-firmware-sdk/issues/96)!
## [1.30.2] - 2025-10-10
This is a patch release, including only a change to boolean Kconfig prompts so
they comply with Kconfig requirements in the nRF-Connect SDK.
## [1.30.1] - 2025-10-03
This is a patch release, fixing one bug and applying a minor code quality
improvement to the Python tooling files.
### 🐛 Fixed
- nRF-Connect SDK:
- Fixed an issue where panic logs generated from ISRs caused a double fault
for Nordic nRF91 users where `CONFIG_LOG_MODE_IMMEDIATE=n` and
`MEMFAULT_LOG_TIMESTAMPS_ENABLE` is 1.
- General:
- Added Python type annotations to the files in the `tasks` directory.
## [1.30.0] - 2025-09-23
This is a minor release. Highlights:
- Added active task stack collection control in Zephyr
- Changed mount point selection for filesystem metric to look up from Zephyr
device tree fstab entries
- Fixed potential WiFi stack overflow on nRF70 series devices during HTTP
uploads
### 📈 Added
- Zephyr:
- Add Kconfig option
`CONFIG_MEMFAULT_COREDUMP_ACTIVE_TASK_STACK_SIZE_TO_COLLECT` to control how
much of the active task stack is collected in coredumps. This can be used to
prioritize capturing details about the running task when coredump storage
space is limited. Defaults to
`CONFIG_MEMFAULT_COREDUMP_STACK_SIZE_TO_COLLECT` for backwards
compatibility.
- Add the `mflt_http` workqueue thread to the default set of threads tracked
with max stack usage metrics. The default thread metrics can be controlled
with `CONFIG_MEMFAULT_METRICS_THREADS_DEFAULTS`.
### 🛠️ Changed
- Zephyr:
- Replace use of deprecated API `bt_hci_cmd_create()` with
`bt_hci_cmd_alloc()` for Zephyr 4.2+.
- Enable `FileSystem_BytesFree` metric by default only when fstab is present
in the device tree. If present, the mount point is now automatically
detected from checking fstab nodes. Manual configuration of the mount point
via `CONFIG_MEMFAULT_FS_BYTES_FREE_VFS_PATH` still takes precedence when
set. If not using fstab, set `CONFIG_MEMFAULT_FS_BYTES_FREE_METRIC=y` to
enable collection.
### 🐛 Fixed
- nRF-Connect SDK:
- Increase the default value of
`CONFIG_MEMFAULT_HTTP_DEDICATED_WORKQUEUE_STACK_SIZE` to 4kB when uploading
via WiFi on the nRF70 series. This avoids potential stack overflows caused
while performing periodic uploads via HTTP. Thanks to
[@chshzh](https://github.com/chshzh) for reporting this and proposing a fix
in [#95](https://github.com/memfault/memfault-firmware-sdk/issues/95)!
## [1.29.0] - 2025-09-11
This is a minor release. Highlights:
- Added 9 new built-in metrics for BLE devices for Zephyr projects 🎉
- Added a session metrics API to deactivate a session
- Fixed a bug where thread state was missing from small coredumps in ESP-IDF
### 📈 Added
- General:
- Add a new Session Metric API: `MEMFAULT_METRICS_SESSION_RESET()`, which can
be used to deactivate an active session instead of ending it with
`MEMFAULT_METRICS_SESSION_END()`. This will discard the metrics in the
specified session.
- nRF-Connect SDK:
- Added an implementation for storing coredumps in RRAM, for SOCs that support
it (nRF54L series for example). Enable with
`CONFIG_MEMFAULT_COREDUMP_STORAGE_RRAM=y`. Requires a partition manager
entry named `memfault_coredump_partition`.
- Also added a coredump storage implementation for MRAM, specifically
targeting the nRF54H series of devices. Enable with
`CONFIG_MEMFAULT_COREDUMP_STORAGE_MRAM=y`. Requires adding a fixed partition
entry named `memfault_coredump_partition`, for example via a devicetree
overlay.
For the `nrf54h20dk_nrf54h20_cpuapp`, the following sample overlay reduces
the default size of the `storage_partition` and adds the necessary
`memfault_coredump_partition` entry:
```c
&mram1x {
partitions {
storage_partition: partition@1a4000 {
reg = <0x1a4000 DT_SIZE_K(20)>;
};
memfault_coredump_partition: partition@1b4000 {
reg = <0x1a9000 DT_SIZE_K(20)>;
};
};
};
```
- Added example definition and usage of custom reboot reasons in the nRF9160
app. These reboot reasons can be triggered with a new shell command:
`app reboot_custom <expected|unexpected>`
### 🛠️ Changed
- nRF-Connect SDK:
- Moved the default statement setting `CONFIG_MEMFAULT_HTTP_USES_MBEDTLS=n`
when `CONFIG_NRF_MODEM_LIB=y` into the Memfault SDK Kconfig file. This
default currently exists in NCS in a symbol re-definition but will be
removed in the next version of NCS (`v3.2` expected).
- Zephyr:
- The default implementation of `memfault_zephyr_get_device_id()`, used to
populate the Device Serial, will use the `hwinfo_get_device_id()` value by
default if `CONFIG_HWINFO` is enabled. Previously this also required
`CONFIG_MEMFAULT_REBOOT_REASON_GET_HWINFO=y`, and would default to
`{BOARD}-testserial` when that was not enabled.
- Add several new built-in BLE metrics:
- `bt_gatt_mtu_size`
- `bt_connection_remote_info`
- `bt_connection_event_count`
- `bt_connection_interval`
- `bt_connection_latency`
- `bt_connection_timeout`
- `bt_connection_rssi`
- `bt_connected_time_ms`
- `bt_disconnect_count`
These metrics are enabled by default when `CONFIG_BT=y` and
`CONFIG_BT_CONN=y`.
- ESP-IDF:
- Support `CONFIG_ESP_HTTPS_OTA_ENABLE_PARTIAL_DOWNLOAD` optional HTTP client
parameters in upcoming ESP-IDF v6
([this change](https://github.com/espressif/esp-idf/commit/2db4bcf87db492c03c90cb086c0b3bde06e51201)
made them optionally declared).
- Update the post-link steps to be compatible with upcoming ESP-IDF build
changes for ESP-IDF > 5.5.
### 🐛 Fixed
- ESP-IDF
- Fixed a bug where some FreeRTOS symbols needed for thread awareness were
missing from coredumps if the coredump storage was too small.
## [1.28.0] - 2025-08-04
This is a minor update release. Highlights:
- added a new test command for simulating hangs in ISRs
- improved NMI exception capture
- fixed a build issue in the nRF-Connect SDK port
### 📈 Added
- Zephyr:
- Add a new test command, `mflt test isr_hang`, which will cause a busy loop
hang inside a `k_timer`, which normally is executing from an ISR context.
The system will only exit this condition if there is a watchdog or other
higher-priority interrupt capable of preempting the `k_timer` ISR. The
[`qemu` sample app](examples/zephyr/qemu) is updated to enable a watchdog
which generates an NMI exception, caught by Memfault.
- Added a debug print when uploading data using
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD` that shows the bytes sent:
```bash
[00:09:45.821,000] <dbg> mflt: memfault_platform_log: Uploaded 118 bytes of Memfault data
```
Only enabled when debug level prints are enabled for Memfault
(`CONFIG_MEMFAULT_LOG_LEVEL_DBG=y`).
### 🛠️ Changed
- Zephyr:
- NMI exceptions are now properly handled. Prior to this change, a coredump
was captured on NMI exceptions but the MSP context was not fully unwound and
the NVIC state was not included in the trace data.
- Add a new Kconfig option,
`CONFIG_MEMFAULT_COREDUMP_NVIC_INTERRUPTS_TO_COLLECT`, which controls the
existing `memfault_platform_config.h` setting
`MEMFAULT_NVIC_INTERRUPTS_TO_COLLECT` for Cortex-M targets. The default now
is to collect all `NUM_IRQS` as defined by Zephyr, which on many platforms
will increase from the previous default of `32`. This improves the
out-of-the-box information at the cost of 44 bytes in coredump storage
consumed per additional 32 interrupts. Some example deltas shown below,
including the byte delta in the stored coredump:
| Platform | Previous Default | New Default | Byte Delta |
| --------- | ---------------- | ----------------------------------------------- | ---------- |
| nRF52840 | 32 | 64 (\*48, rounded up to nearest multiple of 32) | +44 |
| nRF91 | 32 | 96 (\*65 rounded up) | +88 |
| nRF53 | 32 | 96 (\*69 rounded up) | +88 |
| STM32F407 | 32 | 96 (\*82 rounded up) | +88 |
| STM32H7B0 | 32 | 160 (\*155 rounded up) | +176 |
| STM32H563 | 32 | 160 (\*155 rounded up) | +176 |
To restore the previous default, set
`CONFIG_MEMFAULT_COREDUMP_NVIC_INTERRUPTS_TO_COLLECT=32`.
- nRF-Connect SDK:
- Fix a build issue impacting some nRF54 series chips related to reboot reason
decoding. Thanks to [@grochu](https://github.com/grochu) for providing the
fix in [#94](https://github.com/memfault/memfault-firmware-sdk/pull/94) 🎉!
## [1.27.0] - 2025-07-21
### 📈 Added
- General:
- Add a reference software watchdog port for the STM32L4 series LPTIM
peripheral. Users of the STM32 HAL can now compile in the reference port and
the `MemfaultWatchdog_Handler`. The handler will save a coredump so the full
system state can be recovered when a watchdog takes place. More details can
be found in
[`ports/include/memfault/ports/watchdog.h`](ports/include/memfault/ports/watchdog.h).
- Add CLI commands `wdg_enable`, `wdg_disable`, and `wdog_update <timeout_ms>`
for testing a software watchdog port. These commands are disabled by default
and can be enabled for platforms using the minimal shell/console with
`MEMFAULT_DEMO_CLI_WATCHDOG`.
- Zephyr:
- Add a new Kconfig option, `CONFIG_MEMFAULT_HTTP_MAX_MESSAGES_TO_SEND`, which
controls the max number of messages that will be sent in a single invocation
of `memfault_zephyr_port_post_data()` or similar APIs. The default is `100`,
which is suitable for most applications. Before this change, the limit was
hard coded to 5 messages, which was too low for systems with infrequent
upload intervals.
- Support building for `native_sim` on arm64 hosts (specifically, the
`native_sim/native/64` target), in addition to x86 hosts.
### 🛠️ Changed
- Zephyr:
- Improve the default implementation of
`memfault_platform_sanitize_address_range()` to include all memory
accessible by the kernel. This enables collection of heap-allocated task
control blocks, which was previously unsupported. Users with discontiguous
memory regions should provide their own implementation, as before.
- Prioritize the thread bookkeeping array when collecting thread information
in a coredump (when `CONFIG_MEMFAULT_COREDUMP_COLLECT_TASKS_REGIONS=y`, the
default). This improves the quality of the processed coredump if the
coredump region is too small to collect all stacks for all threads in the
system (impacts systems with many threads and limited coredump storage
space).
- Add a new Kconfig option, `CONFIG_MEMFAULT_HTTP_PACKETIZER_BUFFER_SIZE`,
which controls the size of the intermediate buffer used when reading data
from the underlying data source (coredump storage, log buffer, CDR, etc)
when uploading data to Memfault via HTTP. The default size is 128 bytes, and
1024 bytes on nRF91x series SOCs to better support modem trace CDR upload.
Thanks to [@DematteisGiacomo](https://github.com/DematteisGiacomo) for
submitting this in
[#92](https://github.com/memfault/memfault-firmware-sdk/pull/92).
- Make the `mflt post_chunks` CLI command available only when
`CONFIG_NETWORKING` is enabled, to avoid confusion on platforms without
networking support.
- ESP-IDF:
- Handle deprecated Deep Sleep API calls for upcoming ESP-IDF v5.5 and v6.
- Supporting building with the Memfault CLI commands disabled,
`CONFIG_MEMFAULT_CLI_ENABLED=n`. Thanks to
[@finger563](https://github.com/finger563) for reporting this issue and
providing a fix in
[#93](https://github.com/memfault/memfault-firmware-sdk/issues/93) 🎉!
### 🐛 Fixed
- Zephyr:
- Fix an issue where the socket file descriptor can potentially be leaked when
the connection terminated unexpectedly during an HTTP chunk upload. Thanks
to [@DematteisGiacomo](https://github.com/DematteisGiacomo) for submitting
this in [#92](https://github.com/memfault/memfault-firmware-sdk/pull/92).
## [1.26.1] - 2025-06-30
This is a minor fix release, addressing one future compatibility issue with the
Zephyr port.
### 🛠️ Changed
- Zephyr:
- Apply a compatibility fix for upcoming Zephyr 4.2.0, fixing the size of the
`net_mgmt` callback `mgmt_event` parameter. Thanks to
[@rlubos](https://github.com/rlubos) for providing the fix in
[#91](https://github.com/memfault/memfault-firmware-sdk/pull/91) 🎉!
## [1.26.0] - 2025-06-26
This is a feature release, primarily addressing future compatibility changes for
the next nRF-Connect SDK release.
### 📈 Added
- Zephyr:
- Add support for the ESP32 chip on Zephyr, adding to the existing support for
ESP32-S3 and ESP32 C series chips.
- Add support for building the Memfault SDK on the `native_sim` board. Note
that Memfault does not support reboot tracking or coredumps on this target,
but other features are supported.
### 🛠️ Changed
- General:
- Add a `MEMFAULT_ENABLE_WARNING(warning)` macro complementing the existing
`MEMFAULT_DISABLE_WARNING(warning)` macro. This macro is only implemented
for GCC + Clang.
- Zephyr:
- Remove the External Module logic, used to support multiple Zephyr versions,
and instead use the normal Zephyr module Kconfig path specifier. There
should be no user-facing changes from this change. It addresses an issue
with Kconfig symbol linting.
- In the [Zephyr QEMU sample app](examples/zephyr/qemu/qemu-app/prj.conf), add
the `--param=min-pagesize=0x1000` compiler option, which will catch
dereferences to low memory addresses. This is only for static analysis
purposes and does not affect any behavior.
- ESP-IDF:
- The heartbeat metrics timer is now enabled by default when
`CONFIG_MEMFAULT_DEEP_SLEEP_SUPPORT=y`. Version `1.25.0`, which added deep
sleep support, had disabled the normal heartbeat metrics timer by default.
The default behavior can be overridden with the Kconfig option
`CONFIG_MEMFAULT_METRICS_HEARTBEAT_TIMER_ENABLE`.
- nRF-Connect SDK:
- Replace use of `LTE_LC_ON_CFUN` with `NRF_MODEM_LIB_ON_CFUN` for nRF-Connect
SDK v2.8.0+. This deprecated API is scheduled to be removed in the next
nRF-Connect SDK release.
## [1.25.0] - 2025-06-09
This is a feature release of the Memfault Firmware SDK. The main new feature
released in this version is support for tracking metrics through deep sleep on
ESP32 devices. Full release notes are below.
### 📈 Added
- Zephyr:
- Add a new choice config `CONFIG_MEMFAULT_REBOOT_REASON_GET`. By default,
`CONFIG_MEMFAULT_REBOOT_REASON_GET_HWINFO=y`, which is supported by
`imply CONFIG_HWINFO` in the overarching `MEMFAULT` symbol. This default
enables better reboot reasons out-of-the-box via Zephyr's `hwinfo` module.
The fall-back option is `CONFIG_MEMFAULT_REBOOT_REASON_GET_BASIC`, which
provides a simple implementation. As before, users can override the default
implementations with `CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM=y`.
- Add a new Kconfig setting, `CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP`, to
print the reboot reason code on system boot, for debugging purposes. This
feature is enabled by default. It can be disabled with
`CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=n`.
- Add a `boot_time_ms` metric, which tracks how long the system takes to boot
the application. Can be disabled with `CONFIG_MEMFAULT_METRICS_BOOT_TIME=n`.
- Add new builtin Wi-Fi metrics, enabled by default when `CONFIG_WIFI=y`, and
can be disabled with `CONFIG_MEMFAULT_METRICS_WIFI=n`:
- `wifi_beacon_interval`
- `wifi_dtim_interval`
- `wifi_frequency_band`
- `wifi_primary_channel`
- `wifi_security_type`
- `wifi_sta_rssi`
- `wifi_standard_version`
- `wifi_twt_capable`
- `wifi_tx_rate_mbps` (Zephyr 4.1.0+ only)
These add on top of the existing Zephyr Wi-Fi metrics:
- `wifi_ap_oui`
- `wifi_connected_time_ms`
- `wifi_disconnect_count`
- Add an option to upload logs by default when using
`MEMFAULT_HTTP_PERIODIC_UPLOAD`, controlled with the Kconfig symbol
`MEMFAULT_HTTP_PERIODIC_UPLOAD_LOGS`. This can also be controlled at runtime
with the included API
`memfault_zephyr_port_http_periodic_upload_logs(bool enable)`
- Add a new Kconfig option, `CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM`,
to provide a custom implementation of
`memfault_platform_get_time_since_boot_ms()` in your application. The
default is an implementation using `k_uptime_get()`.
- ESP-IDF:
- Add a `boot_time_ms` metric, which tracks how long the system takes to boot
the application. Can be disabled with `CONFIG_MEMFAULT_METRICS_BOOT_TIME=n`.
- Add support for tracking metrics across ESP32 deep sleep cycles, enabled
with the Kconfig `CONFIG_MEMFAULT_DEEP_SLEEP_SUPPORT=y`. To utilize this
feature, these functions must be called by the application:
- `memfault_platform_deep_sleep_save_state()`
Must be called just prior to entering deep sleep
(`esp_deep_sleep_start()`)
- `memfault_platform_deep_sleep_restore_state()`
Must be called before `memfault_platform_boot()` in the application
startup sequence.
This feature includes built-in metrics for tracking deep sleep:
- `deep_sleep_time_ms` - time spent in deep sleep
- `active_time_ms` - time spent out of deep sleep
- `deep_sleep_wakeup_count` - number of times the device woke up from deep
sleep
There are several Kconfig options for controlling the deep sleep feature,
including controlling the heartbeat trigger and HTTP periodic upload. See
`menuconfig` "Memfault deep sleep support" or
[`ports/esp_idf/memfault/Kconfig`](ports/esp_idf/memfault/Kconfig) for
details.
- Add new metrics tracking flash usage:
- `flash_spi_erase_bytes`
- `flash_spi_write_bytes`
- `flash_spi_total_size_bytes`
- Add capture of the ESP-IDF Task Watchdog stuck task list in coredumps. This
is enabled by default if ESP-IDF Task Watchdog is enabled, and can be
disabled with the Kconfig
`CONFIG_MEMFAULT_COREDUMP_CAPTURE_TASK_WATCHDOG=n`.
### 🛠️ Changed
- nRF Connect SDK:
- `CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM` is now a choice in the new choice
config `CONFIG_MEMFAULT_REBOOT_REASON_GET`. As a result, it will be the
default choice if `CONFIG_MEMFAULT_NRF_CONNECT_SDK=y` instead of being
`imply`-ed by `CONFIG_MEMFAULT_NRF_CONNECT_SDK` to work around the
restriction that choice configs cannot be selected. As before, users can
override this behavior with `CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM=n`.
- ESP-IDF:
- Rename `CONFIG_MEMFAULT_TIME_SINCE_BOOT_CUSTOM` ->
`CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM`. A new ESP-IDF port choice
Kconfig `CONFIG_MEMFAULT_PLATFORM_TIME_SINCE_BOOT` now supports 3 settings
for platform time since boot:
1. `MEMFAULT_PLATFORM_TIME_SINCE_BOOT_ESP_TIMER` default, suitable for most
applications
2. `MEMFAULT_PLATFORM_TIME_SINCE_BOOT_DEEP_SLEEP` applicable for deep-sleep
applications
3. `MEMFAULT_PLATFORM_TIME_SINCE_BOOT_CUSTOM` disable builtin
implementations and implement a custom
`memfault_platform_get_time_since_boot_ms()`
- Renamed the `spi_flash_chip_id` metric (added in `1.23.0`) to
`flash_spi_manufacturer_id`.
- Renamed the `wifi_auth_mode` metric to `wifi_security_type` to more
accurately indicate the property being measured.
- General:
- Add the `demo` component to the default set of components added to an
Eclipse project when using the
[`eclipse_patch.py`](scripts/eclipse_patch.py) utility. The default
components can be overridden with the `--components` argument.
- Coredumps no longer include the device serial by default. The uploading
serial (passed to the chunks endpoint) is instead used to identify the
device associated with the coredump. Enabling
`#define MEMFAULT_EVENT_INCLUDE_DEVICE_SERIAL 1` in
`memfault_platform_config.h` will include the device serial in coredumps.
### 🐛 Fixed
- ESP-IDF:
- Remove debug logging from `memfault_platform_time_get_current()`. When log
timestamps are enabled, and debug level logs are enabled, this function can
infinitely recurse.
- Fix Memfault Build ID insertion when
`CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES=y`. Previously, the build ID was
inserted at the wrong build step, resulting in a missing build ID in the
flashable image.
- Zephyr:
- Remove debug logging from the RTC-backed
`memfault_platform_time_get_current()` (enabled when
`CONFIG_MEMFAULT_SYSTEM_TIME_SOURCE_RTC=y`). When log timestamps are
enabled, logging from this function can result in infinite recursion under
certain conditions.
- Update the west module allowlist to include `cmsis_6` in the
[Zephyr QEMU Sample App](examples/zephyr/qemu/qemu-app). The `cmsis_6`
module is now used for TF-M and Cortex-M as of
[this PR](https://github.com/zephyrproject-rtos/zephyr/pull/89370/files).
- Update the Memfault Zephyr logging backend to properly capture log lines
when `CONFIG_LOG_MODE_IMMEDIATE=y` on Zephyr 3.7.0+.
- Wiced:
- Fix broken symlinks in the [Wiced example](examples/wiced).
## [1.24.0] - 2025-05-06
### 📈 Added
- General:
- Add a new API, `memfault_log_get_unsent_count()`, which returns the log
count and size in bytes of unsent logs in the log buffer. This can be used
inside `memfault_log_handle_saved_callback()` for example to drain the
packetized logs when a certain watermark is reached.
- ESP-IDF:
- Add a Kconfig option, `CONFIG_MEMFAULT_TIME_SINCE_BOOT_CUSTOM`, which when
set `=n`, enables using a custom implementation of
`memfault_platform_get_time_since_boot_ms()`.
- Add 2 new metrics for tracking raw network bytes rx / tx. These metrics
track network IO traffic on the default netif:
- `network_rx_bytes`
- `network_tx_bytes`
These metrics are enabled by default, and can be disabled with
`CONFIG_MEMFAULT_METRICS_NETWORK_IO=n`
### 🛠️ Changed
- FreeRTOS (including ESP-IDF):
- Rename the thread stack usage measurement variable included in coredumps
when `MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE` is enabled from
`high_watermark` to `stack_unused`. This change is to make the
implementation more readable. The Memfault backend is updated to process
both the old and new formats.
- FreeRTOS-detected stack overflows (via `vApplicationStackOverflowHook`) will
now be correctly tagged as `Stack Overflow` for the trace reason in
Memfault, instead of `Assert`.
### 🐛 Fixed
- Zephyr:
- Fix a null dereference when calling
`memfault_coredump_storage_compute_size_required()` (eg the shell command
`mflt coredump_size`).
- General:
- For the emlib WDOG port implementation,
[`ports/emlib/wdog_software_watchdog.c`](ports/emlib/wdog_software_watchdog.c),
enable the WDOG when in EM1 mode for series2 chips.
- Added support for `MEMFAULT_REBOOT_REASON_CLEAR` in the
[`ports/nrf5_sdk/resetreas_reboot_tracking.c`](ports/nrf5_sdk/resetreas_reboot_tracking.c)
implementation, by default enabled (like other ports). This permits opting
out of the auto-clearing of the `NRF_POWER->RESETREAS` register, in case the
user needs it after the function runs.
- FreeRTOS (including ESP-IDF):
- Fix incorrect computation of per-thread stack usage metrics
(`MEMFAULT_FREERTOS_COLLECT_THREAD_METRICS`). Before this fix, the returned
values had 2 errors:
1. the value is the _unused_ stack space, not the used stack space
2. on platforms where `sizeof(StackType_t)` is not 1 byte, the numerator
when computing percentage is incorrectly scaled down by
`sizeof(StackType_t)`, resulting in significant under-reporting of the
stack usage percentage.
Users can apply device and software version filtering on dashboards to
filter out reports from devices that are running an old version of the SDK.
- ESP-IDF:
- Fix a potential issue that would cause the wrong implementation of
`memfault_platform_time_get_current()` to be included in the final link,
when `CONFIG_MEMFAULT_SYSTEM_TIME=y` is enabled (default).
### 🛠️ Changed
- ESP-IDF:
- `CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP` now defaults to `y` instead of
`n`, to print out the reboot reason on boot. Disable it with
`CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP=n`.
## [1.23.1] - 2025-04-17
### 🐛 Fixed
- Modify the test command used in our public CircleCI job, to work around an
issue with
[CircleCI's v2 container runtime](https://discuss.circleci.com/t/docker-executor-infrastructure-upgrade/52282),
which uses `cgroupv2` instead of `cgroupv1`.
## [1.23.0] - 2025-04-16
### 📈 Added
- General:
- Improved support for run time tracking on FreeRTOS kernel version v11 and
later, by adding compile-time checks for possible configuration issues.
- Add reboot reason decoding for the NXP RW61x chip series, using the
`PMU.SYS_RST_STATUS` register to determine the reset reason. Add the file at
[`ports/nxp/rw61x/pmu_reboot_tracking.c`](ports/nxp/rw61x/pmu_reboot_tracking.c)
to your project to make use of it!
- Add reboot reason decoding for the SiLabs SiWx91x chip series. This
implementation supports `Power On Reset`, `Pin Reset`, and `Software Reset`
causes only. Please [reach out](mflt.io/support) if you are interested in
other reset reasons. Add the file at
[`sdk/embedded/ports/silabs/wiseconnect/siwx91x/siwx91x_reboot_tracking.c`](ports/silabs/wiseconnect/siwx91x/siwx91x_reboot_tracking.c)
to your project to make use of it.
- Add an
[implementation of `memfault_reboot_reason_get()`](ports/stm32cube/h5/rcc_reboot_tracking.c)
for the STM32H5xx series of MCUs, using the `RCC-RSR` register to determine
the reset reason. Add the file to your project to make use of it!
- ESP-IDF:
- Add 2 new out-of-box metrics:
- `spi_flash_chip_id` : the 24-bit RDID value of the SPI flash chip, for
example `"c84017"` = GigaDevice GD25Q64 8MiB
- `esp_chip_revision` : the ESP32 chip and revision, for example
`esp32c6-0.0` or `esp32s3-0.2`
- For ESP-IDF v5.5 and later, enable `-ggdb3` by default for enhanced
debugging. This is controlled with the Kconfig `CONFIG_MEMFAULT_GGDB3`.
- Set the User-Agent to `MemfaultSDK/<version>` when sending HTTP requests to
Memfault.
- Zephyr:
- Improve support for flushing data cache prior to reboot, for SOCs with
`CONFIG_DCACHE` enabled.
### 🛠️ Changed
- General:
- Updated the internally used `clang-format` version to 20.1.0, latest at time
of writing. This resulted in a few minor format changes in the SDK.
- Zephyr:
- Update the [Zephyr QEMU example](examples/zephyr/qemu) to use the latest
Zephyr version, v4.1.0.
- nRF-Connect SDK:
- Update the [nRF-Connect SDK examples](examples/nrf-connect-sdk) to use the
latest nRF-Connect SDK version, v2.9.1.
- Update the [nRF91 example](examples/nrf-connect-sdk/nrf9160) to enable the
`DATETIME` subsystem, to tag SDK event and log data with timestamps once the
network connection is activated.
- ESP-IDF:
- Update the `prv_panic_safe_putstr()` implementation to perform better on
modern ESP-IDF versions (>=4.4.0). This function is used to output local
prints during panic handling.
- Add a Kconfig `CONFIG_MEMFAULT_DATA_CHUNK_HANDLERS_CUSTOM` to allow
overriding `memfault_esp_port_data_available()` and
`memfault_esp_port_get_chunk()`. If other MCUs are forwarding data to an
ESP32 for transport, enable this option and provide definitions to handle
additional sources. By default, these functions only check the local device
for available chunks.
### 🐛 Fixed
- ESP-IDF:
- Correctly print the initial delay and period in seconds for the periodic
upload task. Previously, this info log print was using the value in
milliseconds.
## [1.22.0] - 2025-03-19
### 📈 Added
- General
- Enable building the SDK on `aarch64`. Note that this only adds support for
building the SDK on that target, full end-to-end support is not yet
available.
- Zephyr:
- For SOC's with a data cache, flush the cache prior to performing a system
reboot, to ensure data integrity of the RAM-backed reboot tracking data.
This is added to the `memfault_platform_reboot()` default implementation,
which can be overridden by the user if needed.
SOC's without a cache will have no effect from this change.
### 🛠️ Changed
- General:
- `MEMFAULT_LOG_TIMESTAMPS_ENABLE` is now enabled by default. When enabled,
and `memfault_platform_time_get_current()` returns a valid timestamp, logs
will include a second-precision timestamp. This applies to both:
- logs captured as part of a coredump
- logs sent to Memfault after invoking `memfault_log_trigger_collection()`
- Remove some 64-bit integer divides used when computing the built-in
`uptime_s` metric, and in the FreeRTOS
`memfault_platform_get_time_since_boot_ms()` implementation.
- ESP-IDF:
- Log lines that are only a single `'\n'` character are no longer recorded in
the Memfault Log Buffer.
- Zephyr:
- The `hwinfo`-based Reset Reason implementation did not clear the reset
reason register after reading the data. Updated to properly call
`hwinfo_clear_reset_cause()` after reading the reset reason.
## [1.21.1] - 2025-03-07
### 🐛 Fixed
- General:
- Disable `MEMFAULT_LOG_TIMESTAMPS_ENABLE` by default. The new timestamped log
feature was enabled by default in the previous release, but only logs
embedded in coredumps are fully supported. Logs captured with
`memfault_log_trigger_collection()` do not yet support timestamps, so the
feature should not be used in production until that support is added.
## [1.21.0] - 2025-03-06
### 📈 Added
- General:
- Logs captured by Memfault now include a timestamp by default, when the
platform implements `memfault_platform_time_get_current()`. This feature can
be disabled by setting `#define MEMFAULT_LOG_TIMESTAMPS_ENABLE 0` in
`memfault_platform_config.h`.
- ESP-IDF:
- Add new built-in Wi-Fi metrics:
- `wifi_primary_channel` - the primary channel ID of the associated Wi-Fi
access point
- `wifi_auth_mode` - the authentication mode of the associated Wi-Fi access
point, for example `WPA2_PSK`
- `wifi_standard_version` - the Wi-Fi version of the associated Wi-Fi access
point, for example `802.11n`
These metrics are enabled by default and can be disabled (along with other
built-in Wi-Fi metrics) with the Kconfig option
`CONFIG_MEMFAULT_ESP_WIFI_METRICS`
### 🛠️ Changed
- ESP-IDF:
- Support cases where the `IDF_VER` build variable is set to
`"HEAD-HASH-NOTFOUND"` (i.e. using an ESP-IDF SDK that is not a git repo),
when setting the built-in metric `MemfaultSdkMetric_os_version`. In this
case, the value is taken from the `ESP_IDF_VERSION_x` macros, which are less
precise.
- Use more specific Memfault reset reason codes for these watchdog reset
types, previously all categorized as `HardwareWatchdog`
- `ESP_RST_INT_WDT` -> `SoftwareWatchdog`
- `ESP_RST_TASK_WDT` -> `TaskWatchdog`
- `ESP_RST_WDT` (RTC watchdog, the real hardware watchdog), stays as
`HardwareWatchdog`
### 🐛 Fixed
- ESP-IDF:
- Correctly set the Memfault Firmware SDK version inside the
[espressif component](https://components.espressif.com/components/memfault/memfault-firmware-sdk)
version of the SDK. Prior to this fix, the SDK version reports as
`"MemfaultSdkMetric_sdk_version": "0.0.0"`. No change to the SDK, only a
tooling/release change.
## [1.20.0] - 2025-02-06
### 📈 Added
- General:
- Make `memfault_reboot_reason_get()` and
`memfault_platform_metrics_timer_boot()` weakly defined in the
[platform templates](ports/templates) to make removing them optional when
first integrating
- Added a configuration option, `MEMFAULT_CRC16_BUILTIN`, that permits
disabling the built-in [crc16](components/util/src/memfault_crc16_ccitt.c)
implementation. The user should provide a compatible implementation of
`memfault_crc16_compute()`. For example, if the Zephyr CRC library is used,
a compatible implementation would be:
```c
#include <zephyr/sys/crc.h>
uint16_t memfault_crc16_compute(uint16_t crc_initial_value, const void *data,
size_t data_len_bytes) {
return crc16_itu_t(crc_initial_value, data, data_len_bytes);
}
```
A Zephyr Kconfig setting, `CONFIG_MEMFAULT_CRC16_BUILTIN`, is also provided
to control this option.
Thanks to [@JordanYates](https://github.com/JordanYates) for submitting this
feature request in
[#84](https://github.com/memfault/memfault-firmware-sdk/issues/84) !
- Added an example `daily_heartbeat` session to the
[FreeRTOS QEMU example](examples/freertos/src/metrics.c), which demonstrates
how to send a daily heartbeat session to Memfault. Daily Heartbeats are a
special category of Session Metrics, and can be used to track device
properties over a longer interval than heartbeat metrics.
- Added an optional field to the built-in
[FreeRTOS task stack usage metrics](ports/include/memfault/ports/freertos/thread_metrics.h),
`.get_task_handle`, which allows the user to provide a custom function to
get the task handle for a given thread name, instead of using the thread
name to identify the thread. This is useful in systems where there are
threads with ambiguous names. The
[ESP32 example app](examples/esp32/apps/memfault_demo_app/main/metrics.c) is
updated to use this feature for ESP-IDF <5.3, where on dual-core SOCs, the
per-core idle threads are both named `IDLE`.
- nRF Connect SDK:
- Added a new Kconfig symbol `CONFIG_MEMFAULT_FOTA_HTTP_FRAG_SIZE` to enable
controlling the HTTP fragment size when using NCS >=2.9.9. Previously,
`CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y` was required, but this option
was deprecated in NCS 2.9.9.
- Add built-in support for the `thermal_cpu_c` (CPU temperature) metric for
nRF5x chips (nRF52 and nRF54 app core supported). Use the Kconfig setting
`MEMFAULT_METRICS_CPU_TEMP` to disable the metric.
- Zephyr
- Add a new Kconfig setting, `CONFIG_MEMFAULT_HTTP_CLIENT_TIMEOUT_MS`, which
controls the timeout for the Memfault HTTP client, used both for chunk
upload and OTA operations. The default timeout is 5 seconds. Connections
with poor latency may require a longer timeout to avoid premature
disconnection. Thanks to [@chirambaht](https://github.com/chirambaht) for
submitting this in
[#86](https://github.com/memfault/memfault-firmware-sdk/issues/86)!
### 🐛 Fixed
- ESP-IDF:
- Use the configuration `MEMFAULT_LOG_MAX_LINE_SAVE_LEN` to set the max length
of a log line when `CONFIG_MEMFAULT_LOG_USE_VPRINTF_HOOK=y`, which is the
default setting in ESP-IDF. Previously, the log line was arbitrarily
truncated in the Memfault vprintf hook before being saved to the Memfault
log buffer.
- General:
- Remove the `MEMFAULT_PACKED` attribute for the `eMemfaultRebootReason`
declaration; this compiler extension is not supported on IAR EWARM's
compiler. Change the assembly shim to properly zero-extend the enum constant
to avoid ABI issues when invoking the C fault handling code.
### 🛠️ Changed
- General:
- Remove an extra underscore in the folder name when using the
[`eclipse_patch.py`](scripts/eclipse_patch.py) utility with a port name that
is one folder deep (e.g. `freertos`)
- Rename the `memfault_crc16_ccitt_compute()` function to
`memfault_crc16_compute()`. The CRC-16 algorithm used is canonically named
`CRC-16/XMODEM`, **not** `CRC-16/CCITT` (aka `CRC-16/KERMIT`). The file
implementing that function is left as `memfault_crc16_ccitt.c` for backwards
compatibility. Thanks to [@JordanYates](https://github.com/JordanYates) for
reporting this issue in
[#83](https://github.com/memfault/memfault-firmware-sdk/issues/83)!
- Zephyr:
- Add a missing Kconfig dependency to `MEMFAULT_METRICS_THREADS`,
`INIT_STACKS`. Also add missing dependencies to the Kconfig option
`MEMFAULT_METRICS_DEFAULT_SET_ENABLE`:
- `INIT_STACKS`
- `THREAD_RUNTIME_STATS`
- `THREAD_STACK_INFO`
Thanks to [@JordanYates](https://github.com/JordanYates) for reporting this
problem in
[#86](https://github.com/memfault/memfault-firmware-sdk/issues/86) !
- Update the
[memfault_zephyr_port_post_data()/memfault_zephyr_port_post_data_return_size()](ports/zephyr/common/memfault_platform_http.c)
functions to only open the TLS socket if there is data ready to send, which
is otherwise wasteful, as the socket will be closed without sending any
Memfault data.
- Add an explicit module name, `memfault-firmware-sdk`, to the module
manifest. This avoids issues when the SDK is registered in a Zephyr manifest
under a directory name other than `memfault-firmware-sdk`. Thanks to
[@JordanYates](https://github.com/JordanYates) for reporting this issue in
[#81](https://github.com/memfault/memfault-firmware-sdk/issues/81)!
- Exclude unused stack space when capturing thread stacks, via the
`thread.stack_info.delta` property. This reduces the amount of coredump
storage used to capture thread stacks, especially when
`CONFIG_STACK_POINTER_RANDOM` or `CONFIG_THREAD_LOCAL_STORAGE` is enabled.
Thanks to [@JordanYates](https://github.com/JordanYates) for reporting this
issue in [#81](https://github.com/memfault/memfault-firmware-sdk/issues/85)!
- Fix a configuration issue when building for any of the following parts, but
NOT using nRF-Connect SDK (i.e. using Zephyr instead):
- SOC_SERIES_NRF52X
- SOC_SERIES_NRF53X
- SOC_SERIES_NRF54LX
- SOC_SERIES_NRF91X
The Memfault SDK now correctly enables nRF-Connect-SDK-specific
functionality ONLY when that SDK is included as a Zephyr module. Thanks to
[@JordanYates](https://github.com/JordanYates) for reporting this issue in
[#81](https://github.com/memfault/memfault-firmware-sdk/issues/89)!
- nRF Connect SDK:
- Remove use of child and parent image functionality in the nRF9160 sample
app, and replace with sysbuild support. Child image support was deprecated
in NCS 2.7.0 in favor of sysbuild.
- Use the downloader library instead of the download client library when using
NCS >= 2.9.9. The download_client was recently deprecated in favor of the
downloader. Download client support is now in `memfault_fota_legacy.c`.
## [1.19.0] - 2025-01-10
### 📈 Added
- General:
- Add an option to set the
[Self Test component](https://docs.memfault.com/docs/mcu/self-test) output
log level, `MEMFAULT_SELF_TEST_OUTPUT_LOG`, to control the verbosity of the
Self Test output. Set it by selecting the Memfault Log macro to use, for
example `#define MEMFAULT_SELF_TEST_OUTPUT_LOG MEMFAULT_LOG_DEBUG`. The
default level is the same as before, `MEMFAULT_LOG_INFO`.
- Add an
[implementation of `memfault_reboot_reason_get()`](ports/stm32cube/u5/rcc_reboot_tracking.c)
for the STM32U5xx series of MCUs, using the `RCC-CSR` register to determine
the reset reason. Add the file to your project to make use of it!
- Add an
[implementation for flash-backed coredump storage](ports/stm32cube/u5/flash_coredump_storage.c)
for the STM32U5xx series of MCUs, using the internal flash memory to store
coredumps. Add the file to your project to make use of it!
- Enable the MPU (Memory Protection Unit) in the
[FreeRTOS QEMU example](examples/freertos/), to demonstrate Memfault's
[MPU region analysis feature](https://docs.memfault.com/docs/platform/trace-details#mpu-analysis).
This feature is enabled in a Memfault project by setting
`#define MEMFAULT_COLLECT_MPU_STATE 1` in `memfault_platform_config.h`. The
MPU registers are captured as part of a coredump, and Memfault will analyze
the configuration and include the result in the Trace viewer.
- Add a new reboot reason code, `kMfltRebootReason_TaskWatchdog`, for marking
crashes due to a Task Watchdog. Memfault has a
[built-in Task Watchdog system](https://github.com/memfault/memfault-firmware-sdk/blob/master/components/include/memfault/core/task_watchdog.h),
and
[Zephyr](https://docs.zephyrproject.org/latest/services/task_wdt/index.html)
and
[ESP-IDF](https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/wdts.html#task-watchdog-timer-twdt)
both implement Task Watchdog systems.
- FreeRTOS:
- Add support for tracking per-thread stack usage in the
[Memfault FreeRTOS port](ports/freertos/src/memfault_sdk_metrics_thread.c).
This feature is enabled by default and can be disabled by setting
`#define MEMFAULT_FREERTOS_COLLECT_THREAD_METRICS 0` in
`memfault_platform_config.h`. The default threads monitored are `IDLE` and
`Tmr Svc`.
Threads are registered for tracking by defining
`MEMFAULT_METRICS_DEFINE_THREAD_METRICS()` in the application. For example:
```c
//! Set the list of threads to monitor for stack usage. The metric keys must
//! be defined in memfault_metrics_heartbeat_config.def, ex:
//!
//! MEMFAULT_METRICS_KEY_DEFINE_WITH_SCALE_VALUE(
//! memory_main_pct_max, kMemfaultMetricType_Unsigned,
//! CONFIG_MEMFAULT_METRICS_THREADS_MEMORY_SCALE_FACTOR
//! )
#include "memfault/ports/freertos/thread_metrics.h"
MEMFAULT_METRICS_DEFINE_THREAD_METRICS (
// monitor the main thread stack usage
{
.thread_name = "main",
.stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_main_pct_max),
},
// monitor the shell_uart thread stack usage
{
.thread_name = "shell_uart",
.stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_shell_uart_pct_max),
});
```
- Add example usage of per-thread stack usage support to the
[FreeRTOS QEMU example](examples/freertos/) for the idle, timer service,
console input, metrics, and heap tasks.
- Add tracking of libc heap usage via the `memory_pct_max` metric to the
[FreeRTOS QEMU example](examples/freertos/)
- Zephyr:
- Add support for tracking per-thread stack usage in the
[Memfault Zephyr port](ports/zephyr/common/memfault_platform_metrics.c).
This feature is enabled by default and can be disabled by setting
`CONFIG_MEMFAULT_METRICS_THREADS=n`. The default threads monitored are
`main` and `sysworkq`.
Threads are registered for tracking by defining
`MEMFAULT_METRICS_DEFINE_THREAD_METRICS()` in the application. For example:
```c
//! Set the list of threads to monitor for stack usage. The metric keys must
//! be defined in memfault_metrics_heartbeat_config.def, ex:
//!
//! MEMFAULT_METRICS_KEY_DEFINE_WITH_SCALE_VALUE(
//! memory_main_pct_max, kMemfaultMetricType_Unsigned,
//! CONFIG_MEMFAULT_METRICS_THREADS_MEMORY_SCALE_FACTOR
//! )
#include "memfault/ports/zephyr/thread_metrics.h"
MEMFAULT_METRICS_DEFINE_THREAD_METRICS (
{
.thread_name = "main",
.stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_main_pct_max),
},
{
.thread_name = "shell_uart",
.stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_shell_uart_pct_max),
});
```
- Update to support removal of the global `CSTD` compiler property (deprecated
in Zephyr v3.7.0, and just removed in Zephyr `main`), when
`CONFIG_MEMFAULT_COMPACT_LOG` is enabled. Thanks to
[@fouge](https://github.com/fouge) for providing this fix in
[#78](https://github.com/memfault/memfault-firmware-sdk/pull/78) !
- Add a new built-in metric, `cpu_usage_pct`, which reports the percentage of
the CPU used. This metric is enabled by default as part of the default set
of metrics, controlled with `CONFIG_MEMFAULT_METRICS_DEFAULT_SET_ENABLE`.
- For ARM targets implementing and enabling the MPU, automatically capture the
and
[analyze the MPU configuration](https://docs.memfault.com/docs/platform/trace-details#mpu-analysis)
as part of a coredump. This can be controlled with the
`CONFIG_MEMFAULT_COREDUMP_COLLECT_MPU_STATE` Kconfig option.
- Add a new Kconfig option, `CONFIG_MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS`,
which should be used instead of
`#define MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS xxx` in
`memfault_platform_config.h`. A build error will occur if the value is set
in `memfault_platform_config.h` to enforce migrating the setting. Thanks to
[@JordanYates](https://github.com/JordanYates) for reporting this feature
request in
[#80](https://github.com/memfault/memfault-firmware-sdk/issues/80)
- ESP-IDF:
- Add support for correctly marking crashes triggered due to a Task Watchdog.
A test command, `esp_task_watchdog <cpuid>`, has been added to the
[esp32 sample app](examples/esp32) to trigger a Task Watchdog fault on the
specified core. Be sure to enable the Kconfig option
`CONFIG_ESP_TASK_WDT_PANIC=y` to have the system panic when a Task Watchdog
fault occurs. Memfault will capture and tag the fault appropriately, as for
other fault types.
- Add a new Kconfig option, `CONFIG_MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS`,
which should be used instead of
`#define MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS xxx` in
`memfault_platform_config.h`. A build error will occur if the value is set
in `memfault_platform_config.h` to enforce migrating the setting.
- nRF-Connect SDK:
- Add an implementation for reboot reason tracking on the nRF54Lx series of
MCUs, using the `RESETREAS` register to determine the reset reason. This
will be automatically enabled when building for an nRF54Lx series device
(`CONFIG_SOC_SERIES_NRF54LX=y`).
- Add example usage of per-thread stack usage support to the
[nRF9160 example](examples/nrf-connect-sdk/nrf9160) for the idle, sysworkq,
mflt http, WDT, and shell uart tasks.
### 🐛 Fixed
- Zephyr:
- Fix the `MEMFAULT_METRICS_CPU_TEMP` Kconfig dependencies, to correctly check
for presence of the DT `die-temp0` alias, and remove the dependency on
`ADC`, which doesn't apply to all boards implementing a temp sensor. Thanks
to [@JordanYates](https://github.com/JordanYates) for reporting this issue
in [#79](https://github.com/memfault/memfault-firmware-sdk/issues/79) !
### 🛠️ Changed
- General:
- The [`eclipse_patch.py`](scripts/eclipse_patch.py) utility
`--memfault-sdk-dir` argument is now optional, and defaults to the parent
directory of the script folder.
- FreeRTOS:
- Renamed the [FreeRTOS QEMU sample app](examples/freertos) heap metrics from
`Example_HeapFreeBytes` and `Example_HeapMinFreeBytes` to
`FreeRTOS_HeapFreeBytes` and `FreeRTOS_HeapMinFreeBytes`.
- nRF-Connect SDK:
- Update the [nRF91 sample app](examples/nrf-connect-sdk/nrf91) to only enable
the UART log backend. Previously both the SHELL and UART log backends were
enabled, resulting in duplicate log lines emitted to the console.
- Update the [nRF91 sample app](examples/nrf-connect-sdk/nrf91) and the
[nRF5x sample app](examples/nrf-connect-sdk/nrf5) to use the latest version
of the nRF-Connect SDK, v2.9.0.
- Zephyr:
- Renamed the [QEMU sample app](examples/zephyr/qemu/) metric
`main_thread_cpu_time_permille` -> `cpu_usage_main_pct`.
## [1.18.0] - 2024-11-25
### 📈 Added
- General:
- Add a new built-in metric, `uptime_s`, which reports the total uptime of the
device in seconds. This metric is enabled by default, and can be disabled
with `#define MEMFAULT_METRICS_UPTIME_ENABLE 0` in
`memfault_platform_config.h`.
- Zephyr:
- Update the [QEMU sample app](examples/zephyr/qemu) to use newly-released
Zephyr v4.0.0 🥳.
- ESP-IDF:
- Added support for dual-core coredumps on ESP32 and ESP32-S3. This feature is
enabled by default and can be disabled with the Kconfig option
`CONFIG_MEMFAULT_COREDUMP_CPU_COUNT=1`. Note: not all fault conditions will
cause both CPU cores to be captured in the coredump. The SDK will always
capture the core that triggered the fault, and if the non-faulting core is
available for capture, it will be included as well.
### 🛠️ Changed
- ESP-IDF:
- Updated the [ESP32 example](examples/esp32) to no longer read some
non-volatile values into stack-allocated buffers. This reduces overall stack
usage for the `main` thread by about 350 bytes.
## [1.17.0] - 2024-11-14
### 📈 Added
- General:
- Add parsing of an optional log message argument for the `test_trace` command
in the [core demo cli](components/demo). This argument will be inserted as a
custom log message with the trace event, which can be useful for testing the
insertion of custom log messages into trace events at runtime.
- Add the following built-in metrics, enabled by default (and quota-exempt):
- `MemfaultSDKMetric_log_recorded_lines` : the total number of log lines
written into the Memfault log buffer during the heartbeat interval
- `MemfaultSDKMetric_log_dropped_lines` : the total number of log lines
dropped (overwritten or not recorded) due to buffer exhaustion during the
heartbeat interval
For example, if the buffer is sufficiently large to store 10 logs, and 15
logs are written:
- `MemfaultSDKMetric_log_recorded_lines` will be 15
- `MemfaultSDKMetric_log_dropped_lines` will be 5
If 5 more logs are written:
- `MemfaultSDKMetric_log_recorded_lines` will be 20
- `MemfaultSDKMetric_log_dropped_lines` will be 10
- Cosmetic updates to the `examples/freertos/` app log format, including
applying ANSI color codes based on log level.
```bash
# Before:
mflt> test_log
Raw log!
MFLT:[INFO] Info log!
MFLT:[WARN] Warning log!
MFLT:[ERRO] Error log!
# After:
mflt> test_log
Raw log!
2024-11-14T17:01:12Z|4284 I Info log!
2024-11-14T17:01:12Z|4284 W Warning log!
2024-11-14T17:01:12Z|4284 E Error log!
```
- ESP-IDF:
- Enable NTP time synchronization by default, controlled with the Kconfig
option `CONFIG_MEMFAULT_NTP_SYNC`. After NTP synchronization, events
(heartbeats and trace events) will be timestamped with the current device
time.
- Add a `test_trace` command to the ESP-IDF demo cli to capture an example
trace event. This behaves the same as the `test_trace` command in the
[core demo cli](components/demo).
- Mark coredumps with the `Software Watchdog` crash reason if the IWDT
triggered the fault, instead of marking them as `Hard Fault`.
- Add OTA update check-ins to the HTTP client's periodic upload, controlled
with the Kconfig option `CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD_OTA`. When
enabled, the system will be restarted after downloading the update. To
customize this behavior, enable
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD_OTA_CUSTOM_CBS`, and implement the
global callback struct `g_memfault_ota_update_handler`. This feature is
disabled by default.
### 🐛 Fixed
- General:
- Add missing type promotion rules for variants of `char` pointers when
encoding compact logs. Previously, these types that should promote to a
string in the compact logging encoding fell into the default case of `int`,
causing compact logging decode to fail when processed by the Memfault
backend.
- ESP-IDF:
- Fix an issue when using compact logs with
`CONFIG_MEMFAULT_USE_MEMFAULT_BUILD_ID=y` (default). The command would
always run (was always out-of-date) when any `idf.py [build|flash]` command
is run, even if the original .elf file did not change. This caused the
`log_fmt` section (used for decoding compact logs) to be removed from the
`/memfault-esp32-demo-app.elf.memfault_log_fmt` file, which causes Memfault
Compact Logs to fail to decode. The command is fixed to only run when the
.elf file changes.
## [1.16.0] - 2024-10-24
### 🔥 Removed
- Removed support for Zephyr < 2.7.0
- Removed support for nRF-Connect SDK < 1.9.2
- Removed support for ESP-IDF < 4.4.0
Please [contact us](https://mflt.io/contact-support) if you need support for
earlier versions!
### 🐛 Fixed
- General:
- Correct an issue where `eMemfaultRebootReason` is expressed as a 4-byte type
instead of 2-bytes when compiling with Clang with high optimization, when
targeting ARM. This results in Coredumps tagged as `Unknown` instead of the
correct reason code.
### 📈 Added
- General:
- Add a pair of optional user-provided functions,
`memfault_reboot_tracking_load()` / `memfault_reboot_tracking_save()`, to
allow users to provide their own implementations for saving and loading
reboot tracking data. This is useful when the default implementation is not
suitable for the platform or when the user wants to store the data in a
different location.
- The
[Stable Sessions Device Vital](https://docs.memfault.com/docs/platform/memfault-core-metrics#stable-sessions)
added in SDK version `1.15.0` is fully available and no longer considered
experimental.
- Add an optional `memfault_port_coredump_save_begin()` callback, for use by
Memfault ports. This allows `memfault_platform_coredump_save_begin()` to be
implemented by the platform instead, for custom pre-coredump operations.
Thanks to [@finger563](https://github.com/finger563) for reporting this
issue in [#77](https://github.com/memfault/memfault-firmware-sdk/issues/77)!
- Improved API docs for events and data packetizer components by noting
restrictions for use in ISR contexts
- Zephyr:
- Update the Qemu app to support the `nucleo_l496zg` board, with support for
the Zephyr `bbram` subsystem, and implement the new
`memfault_reboot_tracking_load()` / `memfault_reboot_tracking_save()`
functions to demonstrate the functionality.
- Added a Kconfig flag, `CONFIG_MEMFAULT_METRICS_LOGS_ENABLE`, to control the
new log lines metrics.
- ESP-IDF:
- New Kconfig setting, `CONFIG_MEMFAULT_ENABLE_REBOOT_DIAG_DUMP`, to print the
ESP-IDF reboot reason code on system boot, for debugging purposes. This
feature is disabled by default.
- Added a Kconfig flag, `CONFIG_MEMFAULT_METRICS_LOGS_ENABLE`, to control the
new log lines metrics.
### 🛠️ Changed
- General:
- Update support links to refer to the preferred site
<https://mflt.io/contact-support> instead of the Memfault support email.
This link will redirect to a form where questions can be sent to the
Memfault support team.
- nRF-Connect SDK:
- Changed the Kconfig symbol `MEMFAULT_REBOOT_REASON_GET_CUSTOM` to be `imply`
instead of `select` when the nRF-Connect SDK is enabled. This permits users
to disable the `nrfx`-based reboot reason tracking if needed.
## [1.15.0] - 2024-10-13
### 📈 Added
- General:
- **EXPERIMENTAL**: Metrics Sessions now include a built-in metric for the
[Stable Sessions Device Vital](https://docs.memfault.com/docs/platform/memfault-core-metrics#stable-sessions)
(`session.operational_crashes`) which tracks crashes that occurred when a
session is active.
### 🛠️ Changed
- General:
- Minor changes to support compiling with GCC ARM v4.9.3.
### 🐛 Fixed
- Corrected a spelling error, renamed
<!-- spellchecker:off -->
`MEMFAULT_METRIS_KEY_DEFINE_WITH_SESSION_AND_SCALE_VALUE()` to
<!-- spellchecker:on -->
`MEMFAULT_METRICS_KEY_DEFINE_WITH_SESSION_AND_SCALE_VALUE()`
## [1.14.0] - 2024-10-09
### 📈 Added
- ESP-IDF:
- The Memfault port will now disable the `IWDT` (Interrupt Watchdog Timer)
before starting coredump saving, to prevent interrupting the coredump
process. The ESP-IDF fault handler enables the `WDT_RWDT` hardware watchdog
when a fault occurs, so there is still protection if the fault handling
hangs.
## [1.13.0] - 2024-10-07
### 📈 Added
- FreeRTOS:
- The SDK now has a config to control whether to split CPU usage per core when
building for a multi-core device. Enable this setting by adding
`#define MEMFAULT_FREERTOS_RUNTIME_STATS_MULTI_CORE_SPLIT 1` to
`memfault_platform_config.h`. This setting is disabled by default.
- ESP-IDF:
- Added a Kconfig, `CONFIG_MEMFAULT_FREERTOS_RUNTIME_STATS_MULTI_CORE_SPLIT`,
to control `MEMFAULT_FREERTOS_RUNTIME_STATS_MULTI_CORE_SPLIT`. This Kconfig
is enabled by default for multi-core devices.
### 🛠️ Changed
- FreeRTOS:
- Changed previous idle task run time percent metrics to measure CPU usage
(i.e. the complement of the idle task run time)
- Renamed the following metrics:
- Single-Core + Multi-Core Default:
- `idle_task_run_time_percent` -> `cpu_usage_pct`
- Multi-Core Split:
- `idle0_task_run_time_percent` -> `cpu_usage_pct`
- `idle1_task_run_time_percent` -> `cpu1_usage_pct`
- ESP-IDF:
- Unknown or unclassified reboot reason codes returned by `get_reset_reason()`
are now correctly recorded as `kMfltRebootReason_Unknown` instead of
`kMfltRebootReason_UnknownError` (`UnknownError` is reserved for an
"unexpected" reboot path, where `Unknown` is used when the reboot reason
cannot be determined).
### 🚩 Deprecated
Support for the following vendor platform versions is deprecated in this
release, and will be removed in a future release:
- ESP-IDF < `v4.4` (Jan 26, 2022)
- Zephyr < `v2.7.0` (Oct 16, 2021)
- nRF-Connect SDK < `v1.9.2` (Jul 14, 2022)
Please [contact us](https://mflt.io/contact-support) if you need support for
earlier versions!
## [1.12.0] - 2024-09-25
### 📈 Added
- ESP-IDF:
- The SDK now supports being installed as an
[ESP Component](https://components.espressif.com/) from the Espressif
registry, by adding the following lines to an esp-idf project's
`idf_component.yml` manifest:
```yaml
dependencies:
memfault/memfault-firmware-sdk:
version: "1.12.0"
```
- [Heap Allocation Tracking](https://docs.memfault.com/docs/mcu/heap-stats) is
now enabled by default for ESP-IDF projects, controlled with the Kconfig
symbol `CONFIG_MEMFAULT_HEAP_STATS`. The Memfault Trace UI will show
information about the most recent heap allocations for `malloc()` calls.
### 🛠️ Changed
- ESP-IDF:
- The [Memfault Build ID](https://mflt.io/symbol-file-build-ids) will be
applied by default, controlled by the Kconfig setting
`CONFIG_MEMFAULT_USE_MEMFAULT_BUILD_ID`. This is _only_ valid for ESP-IDF
versions >= **4.2.5** , and will cause a build error on older versions,
requiring it to be set to `n`. Updating to this version of the SDK will
**require** removing the similar logic in the project's `CMakeLists.txt`
file (a build error will occur if both are present).
- The Memfault Core Vital for
[Periodic Connectivity](https://docs.memfault.com/docs/platform/memfault-core-metrics#periodic-connectivity)
will now count failures to sync Memfault data if the HTTP connection cannot
be established, but WiFi connectivity is available. This can occur when the
WAN connection is down but the access point is still up, or if there is an
external DNS failure. Previously this was not counted as a failure.
- Zephyr
- The Memfault HTTP client, enabled with Kconfig
`CONFIG_MEMFAULT_HTTP_ENABLE`, requires `POSIX_API` to be enabled on newer
versions of Zephyr. Previously, not explicitly enabling `POSIX_API` would
result in a build error. Update it to be enabled by default in the Zephyr
SDK, via Kconfig `imply POSIX_API`.
- Zephyr 3.7.0+ requires enabling `CONFIG_MBEDTLS_SHA1` when using Zephyr's
mbedtls implementation. Memfault added a build-time check for this setting
in Memfault SDK 1.11.2, but that check would also trip when not using
Zephyr's mbedtls implementation. Update the build check to be more precise.
- nRF-Connect SDK:
- Minor changes to provide compatibility with NCS versions > 2.7.0, which
target a Zephyr fork that is compatible with 3.7.0 but provides a
"development" version number, 3.6.99.
### 🐛 Fixed
- ESP-IDF:
- Corrected a theoretical integer overflow issue in the demo CLI `crash`
command, detected by static analysis tools. The impacted function was and is
exclusively called with an argument of `10`, so this issue was not
exploitable in practice.
## [1.11.5] - 2024-09-18
### 📈 Added
- General:
- Add two new core metrics, `MemfaultSdkMetric_os_name` and
`MemfaultSdkMetric_os_version`. These are string metrics that map to the OS
/ platform name and version string respectively, and are included in the the
ELF at build time, and processed out-of-band by Memfault for NCS, Zephyr,
and ESP-IDF. They **are not** ever transmitted over the air (no bandwidth
impact). For example, for Zephyr these metric string values would be
`zephyr` and `3.7.0` for a project on Zephyr v3.7.0. These metrics are
attributes by default and will not be counted towards attribute quotas.
- Zephyr:
- Add the following built-in WiFi metrics for Zephyr devices, enabled by
default on systems with WiFi:
- `wifi_connected_time_ms` : time in milliseconds the device has been
connected to a WiFi network
- `wifi_disconnect_count` : number of times the device has disconnected from
a WiFi network
- `wifi_ap_oui` : the OUI of the WiFi AP the device is connected to
The metrics can be disabled by setting `CONFIG_MEMFAULT_METRICS_WIFI=n`.
- The Memfault Zephyr fault handler now labels faults as Stack Overflow, Bus
Fault, MemManage Fault, and Usage Fault, among others, in addition to the
existing Hard Fault label. Note that this does not change the types of
faults collected (all these faults are already supported), but it does
correct the label presented in the Memfault UI.
- Add a new test command, `mflt test stack_overflow`, that will trigger a
stack overflow fault when `CONFIG_STACK_SENTINEL` or
`CONFIG_MPU_STACK_GUARD` is enabled.
- The `cpu_temp` metric has been renamed to `thermal_cpu_c` to better reflect
the metric's purpose. The metric is still collected by default on platforms
with an enabled `die-temp0` sensor, and can be disabled by setting
`CONFIG_MEMFAULT_METRICS_CPU_TEMP=n`.
- Add a new metric, `memory_pct_max`, which captures the max percentage of the
heap used. It is enabled by default. This metric and the existing
`Heap_BytesFree` metric are controlled with
`CONFIG_MEMFAULT_METRICS_MEMORY_USAGE`.
- ESP-IDF:
- Add an option to upload logs by default when using
`MEMFAULT_HTTP_PERIODIC_UPLOAD`, controlled with the Kconfig symbol
`MEMFAULT_HTTP_PERIODIC_UPLOAD_LOGS`. This can also be controlled at runtime
with the included API
`memfault_esp_port_http_periodic_upload_logs(bool enable)`
- Add a new metric, `memory_pct_max`, which captures the max percentage of the
heap used. It is enabled by default. This metric and the existing `heap_*`
metrics are now controlled with `CONFIG_MEMFAULT_METRICS_MEMORY_USAGE`.
- Print the Memfault OTA URL from `memfault_esp_port_ota_update()` when a new
update is available, for example:
```bash
esp32> memfault_ota_check
I (98125) mflt: Checking for OTA Update
Download URL: https://ota-cdn.memfault.com/2950/9757/19036619757?token=0123456789abcdef&expires=1726192800&v=2
I (98775) mflt: Update available!
esp32> memfault_ota_perform
I (15515) mflt: Checking for OTA Update
Download URL: https://ota-cdn.memfault.com/2950/9757/19036619757?token=0123456789abcdef&expires=1726192800&v=2
I (16205) mflt: Starting OTA download ...
```
### 🛠️ Changed
- Zephyr:
- The `cpu_temp` metric has been renamed to `thermal_cpu_c` to better reflect
the metric's purpose. The metric is still collected by default on platforms
with an enabled `die-temp0` sensor, and can be disabled by setting
`CONFIG_MEMFAULT_METRICS_CPU_TEMP=n`.
- ESP-IDF:
- The `cpu_temp` metric has been renamed to `thermal_cpu_c` to better reflect
the metric's purpose. The metric is still collected by default on ESP32
variants that support it (all but ESP32), and can be disabled by setting
`CONFIG_MEMFAULT_METRICS_CPU_TEMP=n`.
- The Kconfig `CONFIG_MEMFAULT_ESP_HEAP_METRICS` has been replaced with
`CONFIG_MEMFAULT_METRICS_MEMORY_USAGE`.
## [1.11.4] - 2024-09-10
### 📈 Improvements
- ESP-IDF:
- Fix a minor issue where MEMFAULT_LOG_x() macros (MEMFAULT_LOG_ERROR() etc )
would be recorded twice in the log buffer.
- General:
- Fix an error in the unit test CI build due to the addition of the
`-Wc11-c2x-compat` compiler warning flag. This flag is not valid for the C++
compiler, and has been changed to be enabled only for the C compiler.
- nRF-Connect SDK:
- Fix a possible stack overflow when tracking the Memfault Connectivity
Connected Time Vital for the nRF9160 LTE connection, due to a change in the
nRF-Connect SDK v2.7.0 from prior versions.
## [1.11.3] - 2024-09-05
### 📈 Improvements
- General:
- Improve assert stack unwinding for Clang builds when `-flto` is enabled.
- Zephyr:
- Add a new Kconfig option, `CONFIG_MEMFAULT_SOC_FAMILY_ESP32`, to resolve an
error when referencing the deprecated `CONFIG_SOC_FAMILY_ESP32` Kconfig
(removed in
[Zephyr 3.7.0](https://github.com/zephyrproject-rtos/zephyr/commit/8dc3f856229ce083c956aa301c31a23e65bd8cd8)
as part of Hardware Model V2). This new option is used in the Memfault
Zephyr port to check if an ESP32 SOC is being used.
- Remove references to the deprecated `BOOTLOADER_ESP_IDF` Kconfig symbol in
the Memfault Zephyr port (removed in Zephyr 3.7.0).
## [1.11.2] - 2024-08-29
### 📈 Improvements
- nRF-Connect SDK:
- Add support for the following reboot reasons on nRF series SOCs. These
reboot reasons are tracked as `kMfltRebootReason_DeepSleep`.
- `NRF_POWER_RESETREAS_OFF_MASK`
- `NRF_POWER_RESETREAS_NFC_MASK`
- `NRF_POWER_RESETREAS_CTRLAP_MASK`
- Zephyr:
- Use `MEMFAULT_ASSERT_HALT_IF_DEBUGGING_ENABLED` to control whether coredumps
trigger a halt when a debugger is attached.
- Add a new Kconfig option, `CONFIG_MEMFAULT_RAM_BACKED_COREDUMP_REGION`, to
set the RAM region used for storing RAM-backed coredumps.
- Fix a 🐛 when trying to communicate via HTTPS with Memfault on the nRF91x.
On the nRF91x, socket operations are offloaded to the nRF modem lib, which
does not currently support the socket option `TLS_CERT_NO_COPY`. In v1.9.4,
this socket option was applied when TLS was enabled
(`!g_mflt_http_client_config.disable_tls`) and Zephyr version was >=3.0.0
(when support for this socket option was added). Therefore, devices on SDK
versions >=1.9.4 and <1.11.2 trying to communicate with Memfault will run
into a no protocol support error (`ENOPROTOOPT`) in the nRF modem lib. Since
this option is only required to use the DER format,
`CONFIG_MEMFAULT_TLS_CERTS_USE_DER` now depends on the Zephyr-implemented
socket operations being used (`!NET_SOCKET_OFFLOAD`).
- Fix the build when using Zephyr 3.7.0 and leveraging the HTTP client and/or
ESP32 port. The Memfault HTTP client would fail to build due to the wrong
`crypto.h` header getting picked up in the build. Additionally, due to the
[removal of default support for mbedTLS hash algorithms in Zephyr](https://docs.zephyrproject.org/latest/releases/migration-guide-3.7.html#mbed-tls),
`CONFIG_MBEDTLS_SHA1` now must be enabled explicitly when using any of
Memfault's CA certificates. When using PEM and leveraging Zephyr's in-tree
mbedTLS and config file
(`CONFIG_MBEDTLS_BUILTIN=y && CONFIG_MBEDTLS_CFG_FILE="config-tls-generic.h"`),
`CONFIG_MBEDTLS_PEM_CERTIFICATE_FORMAT=y` is required for PEM certificate
support. To simplify certificate format selection, a new choice Kconfig
called `CONFIG_MEMFAULT_TLS_CERTS_FORMAT` has been added. Use the configs
`CONFIG_MEMFAULT_TLS_CERTS_USE_PEM` and `CONFIG_MEMFAULT_TLS_CERTS_USE_DER`
to choose the certificate format.`CONFIG_MEMFAULT_TLS_CERTS_USE_DER` is the
default choice config. Finally, the Kconfig `CONFIG_SOC_FAMILY_ESP32` is now
deprecated. References of this Kconfig now also check the new Kconfig
`CONFIG_SOC_FAMILY_ESPRESSIF_ESP32`. See
[Zephyr's 3.7 Migration guide](https://docs.zephyrproject.org/latest/releases/migration-guide-3.7.html)
for more details.
- Dialog
- Add support to the existing DA145xx port for the DA14535 by adding the
correct memory region for `memfault_platform_sanitize_address_range()`.
- Fix several 🐛s in `memfault_reboot_reason_get()` and
`memfault_platform_reboot()` implementations in the DA146x port. In
`memfault_reboot_reason_get()`, the bit masks were incorrectly applied and a
block was missing to reset the reboot reason register if
`MEMFAULT_REBOOT_REASON_CLEAR` is set. In `memfault_platform_reboot()`, the
mechanism to reboot the system has been updated from
`hw_cpm_reboot_system()` to `SWRESET`.
## [1.11.1] - 2024-08-12
### 📈 Improvements
- General:
- Add additional stubs to `ports/templates/memfault_platform_port.c` to help
when integrating on a new platform
- ESP-IDF:
- Trigger a null dereference crash when the `BOOT` button is pressed on the
ESP32 example app. This is useful for testing the Memfault crash handling
functionality without using the serial console.
## [1.11.0] - 2024-08-07
### 💥 Breaking Changes
- Add support for namespacing
[Session Metrics](https://docs.memfault.com/docs/mcu/metrics-api#session-metrics)
to support duplicate key names across heartbeats and sessions (eg
`heartbeat.cpu_temp` and `session.cpu_temp`). This requires a change to how
Session Metrics keys are set:
- Before: `MEMFAULT_METRIC_SET_SIGNED(cpu_temp, 25)` (only 1 metric key
`cpu_temp` supported across heartbeats/sessions)
- After:
- `MEMFAULT_METRIC_SET_SIGNED(cpu_temp, 25)` for setting
`heartbeat.cpu_temp`
- `MEMFAULT_METRIC_SESSION_SET_SIGNED(cpu_temp, session, 25)` for setting
`session.cpu_temp`
### 📈 Improvements
- General:
- Fix a 🐛 in reboot tracking classification when calling
`memfault_reboot_tracking_boot()` with a `bootup_info` parameter containing
an unexpected type of reboot reason (or no reboot reason) after a previously
recorded expected reason. This results in
["Expected Reboots"](components/include/memfault/core/reboot_reason_types.h#L33)
recorded using `MEMFAULT_REBOOT_MARK_RESET_IMMINENT()` to be incorrectly
flagged as an "Unexpected Reboot" and causes an incorrect
`operational_crashfree_hours` metric getting reported and a lower Stability
score.
- Cleanup comment to old packetizer API
- Add `-fdebug-prefix-map` to FreeRTOS QEMU example
- ESP-IDF:
- Improved the CLI results when running the `post_chunks` test command (used
to trigger an upload to Memfault) to be more informative, for example:
```bash
esp32> post_chunks
I (12593) mflt: Data posted successfully, 262285 bytes sent
esp32> post_chunks
I (204093) mflt: No new data found
```
- Zephyr
- Update samples to use the newly-released Zephyr v3.7.0 🥳
- Add explanatory output to Memfault `test busfault|hardfault` shell commands
when Trusted Firmware-M (TF-M) is in use
- The RTC-based implementation of
[`memfault_platform_time_get_current()`](ports/zephyr/common/memfault_platform_system_time.c)
used a define named `RTC`, which conflicts with the STM32 HAL definition
[here](https://github.com/zephyrproject-rtos/hal_stm32/blob/f1317150eac951fdd8259337a47cbbc4c2e6d335/stm32cube/stm32h7xx/soc/stm32h7b3xxq.h#L2441-L2442).
Rename the define to `MFLT_RTC_NODE` to avoid the conflict.
- nRF-Connect SDK:
- Fix a compilation error when building NCS v2.7.0 with the latest Memfault
firmware SDK (v1.10.1, the previous SDK release).
## [1.10.1] - 2024-07-24
### 📈 Improvements
- General:
- Removed a warning when compiling the SDK for Cortex-A targets (ARM v7a).
Support for this target is no longer experimental.
- Improve coredump capture on ARMv7-A/R (Cortex-A/R), capturing additional CPU
registers `r8` + `r9` in the coredump.
- Fix a compilation issue with older versions of `gcc-arm-none-eabi` that do
not support the `PRIu64` format specifier (or are missing C99 format
specifiers). Thanks to [@iotengtr](https://github.com/iotengtr) for
reporting this issue in
[#72](https://github.com/memfault/memfault-firmware-sdk/issues/72) !
- Zephyr:
- Include the Zephyr Device Tree output in the ELF file in a debug section,
which can be used for reference. Memfault is exploring other use cases for
this data in our backend. This feature is controlled with
`CONFIG_MEMFAULT_DTS_IN_ELF`, enabled by default.
## [1.10.0] - 2024-07-12
### 📈 Improvements
- Zephyr:
- Add support for Memfault Logging when `CONFIG_LOG_MODE_MINIMAL=y`, in
addition to the previously supported `LOG_MODE_DEFERRED` (Zephyr default)
and `LOG_MODE_IMMEDIATE`.
[Zephyr minimal log mode](https://docs.zephyrproject.org/3.6.0/kconfig.html#CONFIG_LOG_MODE_MINIMAL)
disables all backends- logs are simply sent to `printk`.
- For ESP32 chips, place the reboot reason tracking into a dedicated section,
`.rtc_noinit`, to ensure the reboot reason is preserved across reboots. This
was previously only supported on Zephyr ESP32-S3/S2 devices (all ESP32
devices on ESP-IDF already support this).
- Fix a bug where the default `memfault_platform_get_device_info()`, which
uses the hwinfo subsystem, when available, was incorrectly disabled when
`CONFIG_MEMFAULT_REBOOT_REASON_GET_CUSTOM=y`.
- General:
- Improve the `memfault_demo_cli_cmd_busfault()` function (accessed via
`test_busfault`/`mflt test busfault` demo CLI commands) to produce BusFaults
on more devices. Previously, certain chips would either not produce a fault,
or would produce a MemManage exception instead.
## [1.9.4] - 2024-07-01
### 📈 Improvements
- Zephyr:
- Updated the Memfault fault handler to support deprecated exception info
structure coming in Zephyr v3.7.0. This change is backward compatible with
older Zephyr versions.
- By default, include the `zephyr.meta` build metadata in the output ELF file
as an unallocated section. This provides a list of module SHAs, useful when
reconstructing the dependencies used to build a particular ELF file. This
feature is controlled with `CONFIG_MEMFAULT_BUILD_META_IN_ELF`.
- Add a new Kconfig option, `CONFIG_MEMFAULT_USE_MEMFAULT_BUILD_ID`, which
will apply a [Memfault Build ID](https://mflt.io/symbol-file-build-ids)
instead of a GNU Build ID when enabled. It defaults to enabled when
`CONFIG_BOOTLOADER_ESP_IDF` is enabled- this applies to ESP32 boards that
are using the ESP-IDF bootloader, instead of an MCUBoot bootloader. MCUBoot
bootable images are compatible with the standard GNU Build IDs.
- Add a new API, `memfault_zephyr_fota_download_callback()`, to the Zephyr
FOTA implementation to allow users to write their own callback that is
invoked when the download of a OTA payload is complete. The default download
callback will mark the new image as pending, set a firmware update reboot
reason, and reboot the system. Custom callbacks may, for example, be used to
perform application-specific system shutdown procedures, or allow the FOTA
update call to return to the calling context so a testing framework could
mark the operation successful. Users can override the default callback with
their own implementation using a new Kconfig option
`CONFIG_MEMFAULT_ZEPHYR_FOTA_DOWNLOAD_CALLBACK_CUSTOM`.
- ESP-IDF:
- Add a periodic HTTP upload task. This feature starts a task dedicated to
posting any available Memfault data via HTTPS. Enable with
`CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD=y`.
- General:
- Add 2 new QEMU targets for the FreeRTOS QEMU example, for Cortex-M4F and
Cortex-M33. The targets can be found [here](examples/freertos/boards/)
## [1.9.3] - 2024-06-10
### 📈 Improvements
- ESP-IDF:
- The default Device Info Software Version (Kconfig
`CONFIG_MEMFAULT_DEVICE_INFO_SOFTWARE_VERSION`) has been updated to `0.0.0`
from `1.0.0-dev` for the built-in Device Info implementation. See
`menuconfig` or
[`ports/esp_idf/memfault/Kconfig`](ports/esp_idf/memfault/Kconfig) for
details. This should only affect users who are using the default value for
that Kconfig.
- Fix a bug when `CONFIG_MEMFAULT_LWIP_METRICS=y` that may cause invalid
metric values. LwIP stats by default are only 16-bits wide and this can
cause underflow when calculating heartbeat values. This fix forces
`LWIP_STATS_LARGE=1` to make LwIP use 32-bit counters.
- Add a feature to the [esp32 example app](examples/esp32) to enable
overriding the Memfault server URLs (ex: for a proxy).
- Improve docs and comments in example app
- General:
- Updated the default exception handler name for Memory Management exceptions
from `MemoryManagement_Handler` to `MemManage_Handler` (set by
`MEMFAULT_EXC_HANDLER_MEMORY_MANAGEMENT` in
[`default_config.h`](components/include/memfault/default_config.h) when not
overridden by the user). This aligns with the more recent CMSIS naming
convention for exception handlers. A backwards-compatible implementation is
included to avoid breaking users relying on the previous default.
- Add [`libcurl`-based samples](examples/libcurl) for posting chunks to
Memfault and checking for latest OTA release.
## [1.9.2] - 2024-05-29
### 📈 Improvements
- ESP-IDF:
- Fix CLI command, `memfault_ota_check`, to return 0 to the console component
when an update is available.
- Add the temperature metric `cpu_temp` which is measured using an internal
temperature sensor that many ESP32 boards have built-in. This metric is
collected by default with the Kconfig `CONFIG_MEMFAULT_METRICS_CPU_TEMP=y`.
- Enable recording vprintf data into the Memfault log buffer through a vprintf
hook. Users can call `memfault_esp_port_vprintf_log_hook()` from their
vprintf handler so they can use both their vprintf handler and record logs
into Memfault's log buffer. To use this feature, set
`CONFIG_MEMFAULT_LOG_USE_VPRINTF_HOOK=n`.
- Zephyr:
- Fix a bug in `memfault_zephyr_port_post_data_return_size()` where a positive
value could be returned in the event of a failure instead of a negative
value. This would result in `mflt post_chunks` returning a successful post
message even though there was a failure such as a DNS lookup failure.
- Add the temperature metric `cpu_temp` which is measured using an internal
temperature sensor that some Zephyr boards have. Similar to ESP-IDF, this
metric is collected by default with the Kconfig
`CONFIG_MEMFAULT_METRICS_CPU_TEMP=y`, but the board must have the device
tree node `die-temp0` for this option to be used.
- Add an example for collecting thread stack usage metrics when the thread
handles are not accessible in the desired scope. Users can leverage the
Zephyr routine `k_thread_foreach()` to register a callback that will be
called with each thread's `k_thread` handle. In the callback, users can read
the stack usage via the handle and set their metrics.
### 💥 Breaking Changes
- Zephyr:
- Change the error return value for
`memfault_zephyr_port_http_upload_sdk_data()` to a negative value instead
of 1. This change aligns with the error return value for the other Zephyr
HTTP client APIs, and simplifies logic in the HTTP client.
### 🐛 Fixes
- ESP-IDF:
- Fix a case where `esp_http_client_cleanup()` was not called in certain
scenarios (for example, if the access point is connected, but there is no
outside internet access), which resulted in a memory leak. Thanks to
[@mykmelez](https://github.com/mykmelez) for providing the fix in
[#71](https://github.com/memfault/memfault-firmware-sdk/pull/71) 🎉!
## [1.9.1] - 2024-05-21
### 📈 Improvements
- ESP-IDF:
- Fix an issue with the Memfault ESP-IDF integration to support the newly
released ESP-IDF v5.1.4.
- Zephyr:
- Add support for tracking ESP32 reboots in `.rtc_noinit` section. This
improves tracking of the OTA [Reboot Reason](https://mflt.io/reboot-reasons)
when the device reboots after an OTA update.
- Fix compilation warnings when
`CONFIG_MEMFAULT_COREDUMP_FULL_THREAD_STACKS=y` is enabled. Thanks to @fouge
for providing this fix in
[#70](https://github.com/memfault/memfault-firmware-sdk/pull/70) 🎉!
- General:
- Extend [`eclipse_patch.py`](scripts/eclipse_patch.py) to support adding the
Memfault SDK files to an STM32Cube IDE project.
## [1.9.0] - 2024-05-10
### 📈 Improvements
- General:
- Correctly compile out the
[non-volatile event storage feature](https://docs.memfault.com/docs/mcu/metrics-api/#non-volatile-event-storage)
when `MEMFAULT_EVENT_STORAGE_NV_SUPPORT_ENABLED` is set to `0`. This feature
was previously not fully disabled, leaving some unused code in the final
executable. This is a minor code size improvement (approximately 300 bytes)
when the system is disabled (default).
- Zephyr:
- Improve support for
[event timestamps](https://docs.memfault.com/docs/mcu/event-timestamps)
using Zephyr RTC devices, by adding support for RTC nodes identified using
`DT_ALIAS()` in addition to `DT_NODELABEL()`. Thanks to
[@corytodd](https://github.com/corytodd) for providing the fix in
[#68](https://github.com/memfault/memfault-firmware-sdk/issues/68)!
- Add a Memfault HTTP OTA client backend for Zephyr MCUBoot platforms. This is
enabled with the `CONFIG_MEMFAULT_ZEPHYR_FOTA_BACKEND_MCUBOOT` Kconfig flag.
The OTA process is triggered by calling the `memfault_zephyr_fota_start()`
function, which is also exposed in the shell via the
`mflt get_latest_release` command.
- Add basic support for Xtensa targets in the Memfault Zephyr port. This
specifically targets the ESP32-S3 SOC.
- Add a success message when the Zephyr HTTP client posts data to Memfault.
- ESP-IDF:
- Wrap calls to `esp_event_loop_create_default()` to prevent crashes if called
multiple times. This feature is enabled by default and is disabled with
`CONFIG_MEMFAULT_WRAP_EVENT_LOOP_CREATE_DEFAULT=n`
- Add an example
[Session Metric](https://docs.memfault.com/docs/mcu/metrics-api/#session-metrics)
to the [ESP32 example app](examples/esp32), which tracks statistics during
the ESP32 OTA session (bytes sent + received, etc).
- nRF Connect SDK:
- Enable periodic upload, `CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD=y`, by default
for nRF91x builds
- Default to `CONFIG_MEMFAULT_HTTP_PERIODIC_UPLOAD_USE_DEDICATED_WORKQUEUE`
when periodic upload is enabled
- Improve the stability of the
[nRF9160 sample app](examples/nrf-connect-sdk/nrf9160), by increasing the
`CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE` to `2048`.
### 💥 Breaking Changes
- Zephyr:
- Add a built-in implementation of `g_mflt_http_client_config` for Zephyr
devices using the Memfault HTTP client, which holds the
[Memfault Project Key](https://mflt.io/project-key) set via the Kconfig
symbol `CONFIG_MEMFAULT_PROJECT_KEY`. Users updating from a previous version
will have to set this Kconfig symbol when building, and any existing
implementation of `g_mflt_http_client_config` should be removed.
## [1.8.1] - 2024-04-24
### 📈 Improvements
- General:
- A new platform function, `memfault_platform_metrics_connectivity_boot()`,
can be enabled to be called from the Memfault SDK `metrics_boot()` function
after the metrics subsystem is initialized. This platform function is used
for setting any initial state information for Connectivity metrics, and has
default implementations for ESP-IDF (WiFi) and nRF9160 (LTE) devices.
- ESP-IDF:
- Add a new Kconfig setting,
`CONFIG_MEMFAULT_COREDUMP_STORAGE_WRITE_OFFSET_SECTORS`, which can be used
to set an offset into the coredump storage area where coredumps are written.
The full partition will still be erased, but coredumps will be written
starting at the sector offset selected with this setting. The skipped sector
will remain at the erased value, `0xff` for all bytes.
- Zephyr:
- Added a built-in weakly defined implementation of
`memfault_platform_get_device_info()`, which provides:
- `.device_serial` : A default device serial based on the SOC's unique ID
registers, via the
[`hwinfo` subsystem](https://docs.zephyrproject.org/3.6.0/hardware/peripherals/hwinfo.html).
This is the default device serial when `CONFIG_HWINFO=y`. If
`CONFIG_HWINFO=n`, the fallback device serial is
`CONFIG_SOC "-testserial"`.
- `.software_type` : Configurable with
`CONFIG_MEMFAULT_BUILTIN_DEVICE_INFO_SOFTWARE_TYPE`, defaults to `"app"`
- `.software_version` : Configurable with
`CONFIG_MEMFAULT_BUILTIN_DEVICE_INFO_SOFTWARE_VERSION`. Defaults to an
identifier based on the `VERSION` file in the application, using the
Zephyr
[Application Version](https://docs.zephyrproject.org/3.6.0/build/version/index.html)
feature, or `"0.0.0"` if unavailable.
- `.hardware_version` : Configurable with
`CONFIG_MEMFAULT_BUILTIN_DEVICE_INFO_HARDWARE_VERSION`. Defaults to an
identifier based on `CONFIG_BOARD` and `CONFIG_BOARD_REVISION` (if set).
- Add a new Zephyr example app for the
[ST NUCLEO-WBA55CG board](https://docs.zephyrproject.org/3.6.0/boards/st/nucleo_wba55cg/doc/nucleo_wba55cg.html),
under [`examples/zephyr/nucleo_wba55cg`](examples/zephyr/nucleo_wba55cg).
This example demonstrates the Memfault SDK integration on the NUCLEO-WBA55CG
board.
- nRF-Connect SDK:
- Add [Connected Time Vital](https://mflt.io/connectivity-metrics)
out-of-the-box for nRF9160 projects, tracking modem connected time. This is
controlled with the Kconfig
`CONFIG_MEMFAULT_NRF_CONNECTIVITY_CONNECTED_TIME_NRF91X`, enabled by
default.
## [1.8.0] - 2024-04-17
### 📈 Improvements
- General:
- Scale values now fully supported. This metric metadata will scale down
metric values by the specified factor. Metrics with no specified scale value
will not be scaled
- Fix a 🐛 that would reset metric values after running a session start
callback. This prevented setting metrics at the start of a session.
- Zephyr:
- Add a metric using a scale value to our Zephyr QEMU example. This metric
measures CPU usage (in permille, 0.0-100.0%) of the main thread.
## [1.7.7] - 2024-04-15
- FreeRTOS:
- Add a compile time error when the
[`ports/freertos/config/memfault_metrics_heartbeat_freertos_config.def`](memfault_metrics_heartbeat_freertos_config.def)
file is not included from the user `memfault_metrics_heartbeat_config.def`
file. Compilation would fail previously with hard-to-follow errors due to
missing metrics definitions. This change makes the compilation error
explicit.
- ESP-IDF:
- Permit disabling the Memfault logging hook into `esp_log_set_vprintf()` (by
default this is enabled on system boot). Use
`CONFIG_MEMFAULT_LOG_USE_VPRINTF_HOOK=n` to disable the Memfault hook. Note
that this will disable capturing ESP-IDF logs in Memfault.
- Allow disabling the built-in Connectivity
[Core Metric](https://mflt.io/core-metrics?platform=MCU) collection, which
is enabled by default to track WiFi uptime. Use
`CONFIG_MEMFAULT_ESP_WIFI_CONNECTIVITY_TIME_METRICS=n` to disable the
built-in implementation.
- General:
- EXPERIMENTAL: Add the option to set a scale factor when defining a Metric.
The scale factor will in the future be used to divide the uploaded metric
values. For example, if a Metric is defined with a scale factor of `10`, all
values reported for that Metric will be divided by `10` when received by
Memfault. The resulting value is stored as a floating point number in
Memfault.
- Minor tweak to the [Eclipse patcher script](scripts/eclipse_patch.py) to
better handler folders with partially common path prefixes.
## [1.7.6] - 2024-04-03
### 📈 Improvements
- ESP-IDF:
- Fix missing call to `memfault_boot()` in the
[ESP32 example app](examples/esp32) that was causing the device to not boot
correctly. This was a regression in v1.7.4.
- FreeRTOS:
- Add a built-in metric for tracking the FreeRTOS Timer Task stack bytes free,
`timer_task_stack_free_bytes`. This metric is enabled by default and can be
disabled by setting
`#define MEMFAULT_FREERTOS_COLLECT_TIMER_STACK_FREE_BYTES 0` in
`memfault_platform_config.h`.
## [1.7.5] - 2024-03-29
### 📈 Improvements
- ESP-IDF:
- Modify a message when coredump storage is detected to be too small from an
error to a warning
- FreeRTOS:
- Fix an integer overflow issue affecting long heartbeat intervals (>> 1
hour), due to a limitation in the implementation of `pdMS_TO_TICKS()` in
older FreeRTOS versions. Newer version of FreeRTOS (as of `V11.0.0`
published December 2023) have fixed this
[issue](https://github.com/FreeRTOS/FreeRTOS-Kernel/commit/9c649ea7d1dd0206092697d73c894fd2c4fe29b3).
- Add a stack usage metric to the FreeRTOS example app
## [1.7.4] - 2024-03-26
### 📈 Improvements
- nRF-Connect SDK:
- Update the Memfault SDK's nRF-Connect SDK
[example apps](examples/nrf-connect-sdk) to nRF-Connect SDK v2.6.0
- In the Memfault SDK [nRF9160 example app](examples/nrf-connect-sdk/nrf9160),
set the Kconfig flag `CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_1024=y` in
`prj.conf` instead of via a conditional `CMakeLists.txt` expression. This
makes the setting more explicit for users that are referencing the sample
app.
- ESP-IDF:
- Enable disabling the Memfault component by setting the `MEMFAULT_DISABLE=1`
environment variable in the build environment (ex:
`MEMFAULT_DISABLE=1 idf.py build`). This is useful in cases where the
Memfault component can not be n-selected in the application's root
`CMakeLists.txt` but needs to be conditionally excluded, for example when
building a reduced factory firmware image.
## [1.7.3] - 2024-03-19
### 📈 Improvements
- Zephyr:
- Add new Kconfig flags for the following Memfault Core Metrics:
- `MEMFAULT_METRICS_SYNC_SUCCESS` (default=y)
- `MEMFAULT_METRICS_MEMFAULT_SYNC_SUCCESS` (default=y)
- `MEMFAULT_METRICS_CONNECTIVITY_CONNECTED_TIME` (default=y)
- `MEMFAULT_METRICS_BATTERY_ENABLE` (default=n)
Additionally, a Kconfig flag `MEMFAULT_BATTERY_METRICS_BOOT_ON_SYSTEM_INIT`
will enable auto-initialization of battery metrics on system init (requires
`memfault_platform_get_stateofcharge()` to be implemented).
See <https://mflt.io/core-metrics> for more information on Core Metrics.
- ESP-IDF:
- Add preliminary support for the upcoming ESP-IDF v5.3.0 release.
## [1.7.2] - 2024-03-09
### 📈 Improvements
- General:
- The Memfault Self Test component boot check now prints all components that
are booted (previously only un-booted components would print):
```plaintext
MFLT:[INFO] =============================
MFLT:[INFO] Component Boot Test
MFLT:[INFO] =============================
MFLT:[INFO] Component | Booted?|
MFLT:[INFO] -----------------------------
MFLT:[INFO] Event Storage | yes|
MFLT:[INFO] Logging | yes|
MFLT:[INFO] Reboot Tracking | yes|
MFLT:[INFO] Trace Event | yes|
MFLT:[INFO] All components booted
MFLT:[INFO] =============================
```
- Restore the Memfault Demo CLI `heartbeat` command, which was unintentionally
removed in v1.7.1. This command triggers a heartbeat on-demand, for testing
heartbeat functionality.
- Zephyr:
- A few minor changes to support the upcoming Zephyr 3.6 release, specifically
for devices that use mbedTLS for TLS connections.
- ESP-IDF:
- v1.7.0 of the SDK added a Kconfig flag to enabled Compact Logs,
`CONFIG_MEMFAULT_COMPACT_LOG_ENABLE`. Updating from older versions of the
SDK would require opting in to that option, even if Compact Logging was
enabled via the Memfault config flag, `MEMFAULT_COMPACT_LOG_ENABLE`.
Instead, support enabling Compact Logs both via the Memfault config flag or
the Kconfig flag, to require no changes when updating the SDK for existing
users.
## [1.7.1] - 2024-02-28
### 📈 Improvements
- General:
- Fix a reboot reason test on MacOS by adding a stub implementation of a
function to avoid an empty archive not allowed by the system clang install
- Add a new macro `MEMFAULT_REBOOT_MARK_RESET_IMMINENT_CUSTOM()` that is more
concise for custom reboot reasons by taking the reboot reason name directly.
Previously, `MEMFAULT_REBOOT_MARK_RESET_IMMINENT()` was the only option,
which requires passing a key with `MEMFAULT_REBOOT_REASON_KEY()`.
- Add a session start callback with
`memfault_metrics_session_register_start_cb()`. This change enables, for
example, tracking battery percent drop across sessions; battery state
tracking variables can now be initialized at the start of a session.
- Add a coredump storage test to the self test which will now test the
coredump storage implementations and check available storage capacity. This
is currently experimental and must be explicitly enabled with the Kconfig
`CONFIG_MEMFAULT_SHELL_SELF_TEST_COREDUMP_STORAGE=y` on Zephyr,
`CONFIG_MEMFAULT_CLI_SELF_TEST_COREDUMP_STORAGE=y` on ESP-IDF, or by adding
`#define MEMFAULT_DEMO_CLI_SELF_TEST_COREDUMP_STORAGE 1` to your
`memfault_platform_config.h` for other platforms.
- Convert the previous `heartbeat_dump` command to `metrics_dump` that can
either dump all current heartbeat metrics with `metrics_dump heartbeat` or
all session metrics with `metrics_dump sessions` that haven't yet been
exported. These commands help with testing metrics collection locally
without needing to push chunks to Memfault.
- Apply a handful of changes to fix items raised by a new static analyzer
- Fix a minor formatting issue that was causing a compilation error for CC ARM
- Update support links to refer to the preferred site
<https://mflt.io/contact-support> instead of the Memfault support email.
This link will redirect to a form where questions can be sent to the
Memfault support team.
- Update the `README.md`s in example apps to point to the
[Demo CLI](https://docs.memfault.com/docs/mcu/demo-cli) page on the Memfault
docs website where comprehensive information is available on commands and
their output
- nRF-Connect SDK:
- Fix a problem caused by mismatched root certificates in modem storage. This
change will ensure that all certificates are updated if they do not match
expected contents. Prior to v1.7.1, the SDK would only update a certificate
by checking each tag for certificate existence, not certificate content. In
v1.3.0, the order of root certificates was changed and one was removed. On
devices running pre-1.3.0 firmware, updating to later versions can hit a
mismatch between the expected certificates and those in modem storage.
- Remove a root certificate deprecated in v1.3.0 if present in modem storage.
Devices using an SDK version before v1.3.0 may contain a now deprecated root
certificate.
## [1.7.0] - 2024-02-15
### 🚀 New Features
- General:
- 🎉Custom Reboot Reasons!🎉 The SDK now allows creating custom reboot reasons
in addition to those defined in
[`components/include/memfault/core/reboot_reason_types.h`](components/include/memfault/core/reboot_reason_types.h).
Users can create custom reboot reasons for both expected and unexpected
reboots. For more information see
[`components/include/memfault/core/reboot_tracking.h`](components/include/memfault/core/reboot_tracking.h).
Enable this feature with Kconfigs in Zephyr and ESP-IDF
(`CONFIG_MEMFAULT_REBOOT_REASON_CUSTOM_ENABLE=y`) or by adding
`#define MEMFAULT_REBOOT_REASON_CUSTOM_ENABLE 1` to your
`memfault_platform_config.h`.
- Added an option to include a Project Key in a chunk message header. This
allows a chunk to specify which project the included data should be sent to.
The default behavior is to use the project specified by the Project Key
header in the POST upload. To enable, add
`#define MEMFAULT_MESSAGE_HEADER_CONTAINS_PROJECT_KEY 1` and
`#define MEMFAULT_PROJECT_KEY "<project key string>"` to your
`memfault_platform_config.h`. Any chunks sent using this configuration will
be sent to the project routed with `MEMFAULT_PROJECT_KEY` rather than the
project routed with the POST header's Project Key.
### 📈 Improvements
- General:
- Improved suggested linker snippets defining coredump memory regions
- Added a self test to validate platform time functions,
`memfault_platform_get_time_since_boot_ms()` and
`memfault_platform_time_get_current()`. This test will catch errors like
non-monotonically increasing counters and current time reported as near
epoch time
- Fixed backspace handling in the FreeRTOS QEMU example console
- Added `-fsanitize=leak` to the SDK unit tests (Linux only)
- Fixed a missing `strnlen()` definition when enabling the self test with some
libc implementations. This function is part of a POSIX standard that might
be missing from some libc implementations
- Added the previous release commit for 1.6.2 to `.git-blame-ignore-revs` to
allow for better `git blame` output since this commit contains _only_
formatting changes.
- Zephyr:
- Added an example CDR implementation to the example QEMU app
- Added a Kconfig, (`CONFIG_MEMFAULT_RECORD_REBOOT_ON_SYSTEM_INIT`) to allow
deferring reboot reason collection to a later point in time. Setting this
option to `n` is intended to help when device info is only available after
boot completes.
- Added built-in metrics for Zephyr's IP subsystem,
(`CONFIG_MEMFAULT_METRICS_TCP_IP`)
- Added Kconfig to select either PEM or DER formats for TLS certificates,
(`CONFIG_MEMFAULT_TLS_CERTS_USE_DER`)
- ESP-IDF:
- Added a Kconfig to enable/disable compact logging
(`CONFIG_MEMFAULT_COMPACT_LOG_ENABLE`)
- Improved build compatibility when building with PlatformIO
- Added support for networking over Ethernet interfaces
- Added a built-in `connectivity_connected_time` core metric for WiFi devices,
(`CONFIG_MEMFAULT_ESP_WIFI_CONNECTIVITY_TIME_METRICS`)
## [1.6.2] - 2024-01-29
### 📈 Improvements
- General:
- Apply `clang-format` to the entire codebase, to ensure consistent code
formatting. The formatting rules are defined in
[`.clang-format`](.clang-format). No other changes are included in this
release. A
[`.git-blame-ignore-revs`](https://git-scm.com/docs/git-config#Documentation/git-config.txt-blameignoreRevsFile)
entry will be added in the next release, to enable ignoring this commit when
running `git blame`. Use this ignore file in your local repo with
`git config blame.ignoreRevsFile=.git-blame-ignore-revs`.
## [1.6.1] - 2024-01-29
### 📈 Improvements
- General:
- Add a reboot reason self test, which validates the reboot reason data is
correctly preserved through device reboot. This test first sets a custom
reboot reason, then calls `memfault_platform_reboot()` to reboot the system.
To verify the operation succeeded, the self test is called again to check
the reboot reason was saved. The reboot reason self test can be performed by
passing the appropriate flags when calling the `memfault_self_test_run()`
file (see
[`components/include/memfault/core/self_test.h`](components/include/memfault/core/self_test.h)
for details), and from the demo CLI as
`self_test reboot`/`self_test reboot_verify`.
- Fix a `ti-armcl` compiler warning due to enumeration mismatch in
initialization (`#190-D`).
- Add a compile-time option to enable the self-test module. Enabling the
self-test increases code space utilization, and is usually of use during
set-up and SDK integration testing. The self-test can be enabled by setting
`#define MEMFAULT_SELF_TEST_ENABLED 1` in `memfault_platform_config.h`, or
via `CONFIG_MEMFAULT_CLI_SELF_TEST=y` for ESP-IDF and
`CONFIG_MEMFAULT_SHELL_SELF_TEST=y` for Zephyr.
- ESP-IDF:
- Expose a new function `memfault_esp_port_ota_get_release_url()` for fetching
the OTA release URL without performing a download. This is useful for cases
where the URL is needed for other purposes, such as for fetching a
downstream device OTA artifact. See
[`ports/esp_idf/memfault/include/memfault/esp_port/http_client.h`](ports/esp_idf/memfault/include/memfault/esp_port/http_client.h)
for details.
- nRF-Connect SDK:
- Add support for the new `fota_download_any()` (see
[documentation here](https://github.com/nrfconnect/sdk-nrf/blob/0692684d0e0b924335882969bc7bf474c673ac81/doc/nrf/releases_and_maturity/releases/release-notes-changelog.rst#L847-L848)),
which accepts a list of certificates to use when executing FOTA downloads.
This API is expected to be included in the upcoming nRF-Connect SDK v2.6.0
release.
## [1.6.0] - 2024-01-09
### 📈 Improvements
- ESP-IDF:
- In the [ESP32 example app](examples/esp32), disable the shell history cache
for the FatFS shell command handler, which saves some ~20kB of heap memory.
- Also in the [ESP32 example app](examples/esp32), add a new built-in metric
`sync_successful` which is set to `1` when a successful Memfault OTA
check-in is performed. Primarily added for demonstration purposes for the
metric. See more information about Memfault Core Metrics
[here](https://docs.memfault.com/docs/platform/memfault-core-metrics).
- General:
- Enhanced the Self-Test component with the following new features:
- Check that other components are initialized correctly (boot test)
- Check that exporting data over the console is supported (primiarly
checking that the output buffer is large enough)
- Print information about the coredump regions that would be collected
during a crash, for diagnostic purposes
- nRF-Connect SDK:
- Fix a use-after-free problem in the Memfault FOTA helper code
([`ports/zephyr/ncs/src/memfault_fota.c`](ports/zephyr/ncs/src/memfault_fota.c)),
where the allocated Memfault OTA download URL was freed too early. This
issue was introduced in Memfault SDK v1.5.0, where support for FOTA on
nRF-Connect SDK v2.4+ was improved.
- Zephyr:
- Fix a concurrent access bug in the Memfault Zephyr Logging Backend. Only
affected configurations with `CONFIG_LOG_MODE_IMMEDIATE=y`. In certain cases
the logging `ctx` could be corrupted, causing unpredictable behavior.
Replace the synchronization approach with an atomic primitive and correct a
potential concurrency issue in the log panic handler.
- Fix a build warning for certain Zephyr configurations (when using
`CONFIG_NEWLIB_LIBC=y`) due to a missing declaration for `strnlen`. This
warning was introduced with the Memfault Self-Test additions in Memfault SDK
v1.5.2.
### 💥 Breaking Changes
- General:
- The Battery Metrics platform API has been consolidated into a single
function,
`int memfault_platform_get_stateofcharge(sMfltPlatformBatterySoc *soc)`,
where the platform data is loaded into the `soc` struct. This should
simplify the platform implementation, and enables platforms to return a
non-zero value to indicate state-of-charge is unknown. See the new API in
the header file
[`memfault/metrics/platform/battery.h`](components/include/memfault/metrics/platform/battery.h)
## [1.5.2] - 2023-12-12
### 📈 Improvements
- General:
- Add a self-test component which checks the device's integration state. This
self test is available via the demo cli command `self_test`, or can be
called directly via `memfault_self_test_run()` (see
[`self_test.h`](components/include/memfault/core/self_test.h) for details).
Currently, it validates device info and the build ID.
- Add a helper macro called `MEMFAULT_REBOOT_MARK_RESET_IMMINENT` in order to
make marking an imminent reboot easier. It takes the reboot reason as an
argument.
- ESP-IDF:
- Add an opt-in assert on malloc failure, controlled with
`CONFIG_MEMFAULT_ASSERT_ON_ALLOC_FAILURE`. This is useful for tracking heap
memory issues. Depending on the design, a system may in general not have any
expected malloc failures, and may not be set up to handle them. This feature
will generate issues tagged as `Out Of Memory` in the Memfault platform.
- Zephyr:
- Adjust the implementation of `memfault_zephyr_port_http_upload_sdk_data()`
to check the socket before each incremental call to the `send()` socket
operation and wait for the socket to become available. If the socket takes
too long (a healthy 5 second timeout is given), the function will return
with an error. Note this function was previously blocking, but may now abort
mid-transfer. This check was primarily added to prevent a busy loop that
hogs the CPU, preventing lower priority threads from running. This situation
could occur with larger HTTP transfers during which the socket may be busy
processing tx data when another send request occurs.
- Fix a build error in the Zephyr RTC port.
## [1.5.1] - 2023-12-07
### 📈 Improvements
- nRF-Connect SDK:
- Correct a build error that occurs when `CONFIG_DOWNLOAD_CLIENT=y` +
`CONFIG_MEMFAULT_FOTA=n`. This fixes the second issue reported in
[#66](https://github.com/memfault/memfault-firmware-sdk/issues/66#issuecomment-1845301737)
### 💥 Breaking Changes
- General:
- The SDK config flag `MEMFAULT_EVENT_STORAGE_NV_SUPPORT_ENABLED` now defaults
to `0`, disabled. This saves a minor amount of code space. Most
implementations don't need the feature; for users that require it, the flag
will now need to be set in `memfault_platform_config.h` as
`#define MEMFAULT_EVENT_STORAGE_NV_SUPPORT_ENABLED 1`.
## [1.5.0] - 2023-11-29
### 🚀 New Features
- General:
- Added support for Session Metrics. These are similar to Heartbeat Metrics,
except they are set on an arbitrary session interval (not required to be
aligned to Heartbeat interval). Session metrics are useful for tracking
device operation sessions- for example, measuring properties for a BLE
connected stove top during a single cooking session. Session metrics
automatically include a "session duration" timer metric.
Session metrics must be defined using the new session-specific APIs, but are
set using the same `MEMFAULT_METRIC_SET_*` APIs as Heartbeat metrics.
See the
[`metrics.h` header file](components/include/memfault/metrics/metrics.h) for
usage details.
- New built in metrics for measuring the following properties:
- **crash-free hours**: enabled by default, generates `operational_hours`
and `operational_crashfree_hours` metrics, which are automatically
processed by Memfault
- **battery drop**: enabled with `#define MEMFAULT_METRICS_BATTERY_ENABLE 1`
in `memfault_platform_config.h`. See more information in the
[header file](components/include/memfault/metrics/battery.h) for how to
use the metric.
- **connectivity**: enabled with
`MEMFAULT_METRICS_SYNC_SUCCESS`/`MEMFAULT_METRICS_MEMFAULT_SYNC_SUCCESS`/`MEMFAULT_METRICS_CONNECTIVITY_CONNECTED_TIME`.
See more information in the
[header file](components/include/memfault/metrics/connectivity.h) for how
to use the metric.
These metrics are considered first-class metrics by Memfault, are exempt
from quota limits, and are automatically processed by Memfault.
- Zephyr:
- By default, set the `sync_memfault_successful`/`sync_memfault_failure`
metrics for devices using Memfault's Zephyr HTTP chunk upload functionality.
This feature is controlled with the `CONFIG_MEMFAULT_SYNC_MEMFAULT_METRICS`
Kconfig flag.
- Automatically set captured timestamps for events for devices that either
implement the RTC subsystem, or use the Nordic `date_time` library. The
appropriate option is enabled by default based on which features are
available, and can be controlled with the Kconfig flags:
`CONFIG_MEMFAULT_SYSTEM_TIME_SOURCE_DATETIME` or
`CONFIG_MEMFAULT_SYSTEM_TIME_SOURCE_RTC`.
- ESP-IDF:
- By default, set the `sync_memfault_successful`/`sync_memfault_failure`
metrics for devices using Memfault's ESP-IDF HTTP chunk upload
functionality. This feature is controlled with the
`CONFIG_MEMFAULT_SYNC_MEMFAULT_METRICS` Kconfig flag.
### 📈 Improvements
- General:
- Add the ability to extend the Memfault Demo Shell command table with custom
commands. This is used in the [`examples/freertos`](examples/freertos) demo
project to add 2 new commands:
- `freertos_tasks` : print FreeRTOS task information, via `vTaskList()`
- `freertos_vassert` : trigger a `vAssertCalled` FreeRTOS assert, via
`configASSERT()`
The Shell extension API is documented in
[`components/include/memfault/demo/shell_commands.h`](components/include/memfault/demo/shell_commands.h),
and must be enabled by setting
`#define MEMFAULT_DEMO_SHELL_COMMAND_EXTENSIONS 1` in
`memfault_platform_config.h`.
- Zephyr:
- Remove a warning in Zephyr 3.5+ where the `zephyr/random/rand32.h` header
was renamed to `zephyr/random/random.h`. This was reported in
[#66](https://github.com/memfault/memfault-firmware-sdk/issues/66)- thanks
to [@nordicjm](https://github.com/nordicjm) for reporting this!
- Add test commands for exercising Secure Faults in ARM TrustZone-enabled
chips:
- `mflt test badptr`
- `mflt test isr_badptr`
Note that non-TrustZone chips may not trigger a fault when running those
commands.
- nRF-Connect SDK:
- Add the `CONFIG_AT_SHELL` setting to the
[`examples/nrf-connect-sdk/nrf9160`](nrf-connect-sdk/nrf9160) sample app.
This permits sending raw AT commands, useful for testing.
- Specific to nRF-Connect based apps using FOTA, add a warning if
`CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE > 1024`, which can sporadically error
out on nRF9160 devices (there is a limitation in the modem, see
`CONFIG_DOWNLOAD_CLIENT_HTTP_FRAG_SIZE_2048=y`) and DevZone note
[here](https://devzone.nordicsemi.com/f/nordic-q-a/68601/tls-2303-bytes-packet-limit/281107).
- Improve FOTA support for nRF-Connect SDK 2.4+, by improving the technique
used to find the correct Memfault server root cert. Memfault uses a fast CDN
to improve OTA payload delivery, which uses a different root cert than the
Memfault device server. Please
[contact support](https://mflt.io/contact-support) immediately if you
encounter any cert-related issues.
### 💥 Breaking Changes
- The metrics convenience API added in v1.4.3 (`MEMFAULT_HEARTBEAT_SET_*` and
others) have been renamed to `MEMFAULT_METRIC_SET_*`, to better support the
new Session Metric feature.
## [1.4.4] - 2023-11-13
### 📈 Improvements
- General:
- Rename this file from [`CHANGES.md`] to [`CHANGELOG.md`].
- For FreeRTOS, add a warning when `configRECORD_STACK_HIGH_ADDRESS` is not
enabled. Memfault uses this to show stack sizes in the coredump view for
coredumps on FreeRTOS systems. The warning can be disabled by enabling the
`configRECORD_STACK_HIGH_ADDRESS` FreeRTOS config flag, or by setting
`#define MEMFAULT_FREERTOS_WARN_STACK_HIGH_ADDRESS_UNAVAILABLE 0`.
- Make `memfault_packetizer_get_chunk()` return `false` if the buffer was too
small to load a full chunk. Previously the function would return `true` but
with `0` bytes loaded into the output buffer and `*buf_len` set to `0`.
- Update all example Metrics implementations to use the new API from v1.4.3
(eg `MEMFAULT_METRIC_SET_UNSIGNED` instead of
`memfault_metrics_heartbeat_set_unsigned`).
- Fix compilation for systems not integrating the
[Metrics](https://mflt.io/embedded-metrics) component but using the Demo CLI
(this regressed in v1.4.3).
## [1.4.3] - 2023-11-08
### 🚀 New Features
- General:
- Add a new streamlined Metrics setter API:
- `MEMFAULT_METRIC_SET_SIGNED(key_name, signed_value)`
- `MEMFAULT_METRIC_SET_UNSIGNED(key_name, unsigned_value)`
- `MEMFAULT_METRIC_SET_STRING(key_name, value)`
- `MEMFAULT_METRIC_TIMER_START(key_name)`
- `MEMFAULT_METRIC_TIMER_STOP(key_name)`
- `MEMFAULT_METRIC_ADD(key_name, amount)`
These APIs can be used in place of the original APIs:
- `memfault_metrics_heartbeat_set_signed(MEMFAULT_METRICS_KEY(key_name), signed_value)`
- `memfault_metrics_heartbeat_set_unsigned(MEMFAULT_METRICS_KEY(key_name), unsigned_value)`
- `memfault_metrics_heartbeat_set_string(MEMFAULT_METRICS_KEY(key_name), value)`
- `memfault_metrics_heartbeat_timer_start(MEMFAULT_METRICS_KEY(key_name))`
- `memfault_metrics_heartbeat_timer_stop(MEMFAULT_METRICS_KEY(key_name))`
- `memfault_metrics_heartbeat_add(MEMFAULT_METRICS_KEY(key_name), amount)`
Saving some typing!
- Add the ability to compute FreeRTOS task stack high watermarks when storing
coredumps. This is useful only if the entire RAM (`.data` + `.bss`) cannot
be saved in the coredump. The feature is opt-in with the config flag
`#define MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE 1`.
- Add a `heartbeat` command to the [core demo cli](components/demo). This
behaves the same as the commands of the same name already present in the
Zephyr + ESP-IDF port.
- Add a `test_cassert` command to the core demo cli. This command executes a C
stdlib `<assert.h>``assert(0)` call. For platforms that do not implement a
`assert()` handler, a config flag `MEMFAULT_DEMO_DISABLE_CASSERT` can be
defined to `0` to disable the command.
- ESP-IDF:
- Add a new out-of-box metric, `wifi_ap_oui`, which will record the associated
AP's Organizationally Unique Identifier (OUI) in the Memfault heartbeat.
- Zephyr:
- Organize the Memfault Coredump Kconfig settings under a
`Memfault Coredump Settings` submenu, for easier navigation when using
graphical Kconfig frontends like menuconfig.
### 📈 Improvements
- General:
- Disable a warning emitted by the ARM C Compiler v5
(`#188-D: enumerated type mixed with another type`) when initializing a
structure in
[`components/core/src/memfault_log.c`:314](https://github.com/memfault/memfault-firmware-sdk/blob/1.4.3/components/core/src/memfault_log.c#L313).
- Improve the quality of Assert backtraces when using the ARM C Compiler v5.
Certain frames in the assert call stack were missing link register
information, due to compiler optimizations based on the `noreturn` and
unreachable compiler hints. These hints have been removed for `armcc`, which
should permit full stack unwinding for Assert coredumps generated from
builds on that toolchain.
- Perform an update of the timer when calling the
`memfault_metrics_heartbeat_timer_read()` debug function. Fixes
[#65](https://github.com/memfault/memfault-firmware-sdk/pull/65). Thanks to
[@LuskeyNoah](https://github.com/LuskeyNoah) for providing this fix!
- ESP-IDF:
- Fix a missing piece enabling the "zero-config" integration (originally added
in `1.4.0`)- the `memfault_platform_port.h` file was still incorrectly
required. This is now fixed.
## [1.4.2] - 2023-11-02
### 📈 Improvements
- General:
- Improve the trace quality for asserts when using the IAR compiler and high
optimization settings (`-Oh`)
- Add demo CLI command to print the current values of heartbeat metrics. Try
this out in your demo CLI implementation or with the built-in CLI with
Zephyr!
## [1.4.1] - 2023-10-31
### 🚀 New Features
- ESP-IDF:
- Add the following built-in heap allocation metrics by default. These can be
disabled with the `CONFIG_MEMFAULT_ESP_HEAP_METRICS` Kconfig flag.
- `heap_free_bytes`
- `heap_largest_free_block_bytes`
- `heap_allocated_blocks_count`
- `heap_min_free_bytes`
### 📈 Improvements
- Zephyr:
- Enable capturing [Memfault-style compact logs](https://mflt.io/compact-logs)
on Zephyr systems. Note that this does not enable decoding
[Zephyr "dictionary logs"](https://docs.zephyrproject.org/3.5.0/services/logging/index.html#dictionary-based-logging),
but requires using the Memfault logging APIs directly (i.e.
`MEMFAULT_LOG_INFO("...")` instead of `LOG_INF("...")`).
- General:
- Add a `coredump_size` CLI command to the Zephyr, ESP-IDF, and demo CLI
implementations. This command will print the computed size of the coredump
and the available storage space. Can be used to tune coredump size.
- Enable providing the Memfault HTTP Client with a custom
`memfault_platform_get_device_info()` callback, for when the device is
uploading data for a downstream device, with different device info.
- When [compact logging](https://mflt.io/compact-logs) is enabled, route all
`MEMFAULT_LOG_x()` statements through the compact serializer
(`MEMFAULT_COMPACT_LOG_SAVE`). Previously, logs had to explicitly use the
`MEMFAULT_COMPACT_LOG_SAVE` API to store in the compact form.
- Capture C stdlib `assert.h` asserts, by implementing the correct assert
hooks for Newlib/Picolibc and IAR libc's. This can be disabled with the
Memfault platform config `MEMFAULT_ASSERT_CSTDLIB_HOOK_ENABLED`. This should
improve the Trace quality for systems that are using the C stdlib
`assert(x)` functions.
### 📈 Improvements
## [1.4.0] - 2023-10-23
### 🚀 New Features
- ESP-IDF:
- Implement support for a "zero-config" integration on ESP-IDF. This change
makes the template + platform config files optional. See the
[ESP32 Integration Guide](https://mflt.io/esp-tutorial) section on
configuration files for details.
### 📈 Improvements
- ESP-IDF:
- Fix a build issue when overriding the default device-info implementation,
`CONFIG_MEMFAULT_DEFAULT_GET_DEVICE_INFO=n`. This was a regression in
**1.3.3**.
- Add a new Kconfig flag, `MEMFAULT_COREDUMP_STORAGE_MAX_SIZE`, which can be
used to set the Memfault SDK's built-in
[ESP-IDF coredump storage implementation](https://github.com/memfault/memfault-firmware-sdk/blob/master/ports/esp_idf/memfault/common/memfault_platform_coredump.c)
to artificially limit the maximum coredump storage size. This is useful for
situations where the default `memfault_platform_coredump_get_regions()`
function is still desirable, but the coredump maximum size needs to be
limited (eg for bandwidth reasons).
- Switch to using `ESP_DRAM_LOGE` when logging an error from Memfault's
FreeRTOS task tracking when the number of tasks created on the system
exceeds `MEMFAULT_PLATFORM_MAX_TRACKED_TASKS` (default of 16).
- General:
- Remove the setting of the Memfault Firmware SDK version into a string metric
on system boot. This value is now automatically extracted by the Memfault
backend from the symbol file, and does not need to be set by devices.
## [1.3.5] - 2023-10-14
### 📈 Improvements
- ESP-IDF:
- Fix build errors when building the [ESP32 example app](examples/esp32)
project on ESP-IDF versions earlier than v5. This was a regression in
**1.3.4**.
- Conditionally remove a redundant call to `esp_timer_init()` during the
`memfault_boot()` sequence, which was causing a runtime error message. This
call was originally required when `memfault_boot()` was called as part of
ESP-IDF system init, which was disabled by default in **0.31.4** and
deprecated in **0.40.0**. The redundant call was harmless but generated a
nuisance error message.
- Fix another build error in the public unit tests caused by the `-fanalyzer`
flag. The `-fanalyzer` static analyzer was generating a false positive on
GCC 11. Updating the GCC version to 12 removes the false positive.
## [1.3.4] - 2023-10-12
### 📈 Improvements
- ESP-IDF:
- Add a missing dependency to the `memfault` component, `esp_https_ota`. It's
only linked into the target project if the `memfault_esp_port_ota_update()`
API is used. This was previously an implicit dependency from the `common`
component dependencies, when building `memfault` into an ESP-IDF
component-style project. This change fixes building for non-component-style
ESP-IDF projects, where the default component dependencies might not be
included.
- Multiple changes to the
[`examples/esp32`](examples/esp32/apps/memfault_demo_app) sample project:
- Add a new `coredump_size` shell command, which prints out the maximum
coredump size and the available coredump storage capacity.
- Add new `settings_[get|set]` shell commands, and enable setting the LED
brightness and blink interval to NVS. This is intended as a minor
quality-of-life change for internal Memfault users of the example app.
- Fix a build error in the public unit tests, caused by the recent addition of
the `-fanalyzer` flag to the unit test compilation options.
## 1.3.3 - Oct 10, 2023
### 📈 Improvements
- Zephyr:
- Add a new Kconfig flag, `CONFIG_MEMFAULT_FAULT_HANDLER_RETURN`, which will
call the normal `z_fatal_error` handler at the end of Memfault fault
processing instead of rebooting the system. This is useful when user code
needs to run within `k_sys_fatal_error_handler()` just prior to system
shutdown. Thanks to [@JordanYates](https://github.com/JordanYates) for the
patch! Fixes
[#59](https://github.com/memfault/memfault-firmware-sdk/issues/59).
- Add a timeout to the initial `send()` socket operation in
`memfault_zephyr_port_http_upload_sdk_data()`, to abort the transfer if the
socket is blocking for too long. That function will execute repeated
`send()` calls to drain all the buffered Memfault data; this update only
changes the initial call to check for a timeout, but otherwise will keep
trying until the process completes, or a watchdog triggers. This is to
balance the existing behavior, where a badly performing socket will still
eventually push data through, but improves the case where the socket fails
on the initial send (more common failure mode).
- Remove a nuisance build warning generated when configured with
`CONFIG_LOG_PRINTK=y && CONFIG_LOG_MODE_DEFERRED=y`. This impacts the
usability of exporting base64-encoded chunks on the shell for testing
(`mflt export` command), but is otherwise harmless.
- ESP-IDF:
- Multiple changes to the
[`examples/esp32`](examples/esp32/apps/memfault_demo_app) sample project:
- Disable WiFi SoftAP by setting `CONFIG_ESP_WIFI_SOFTAP_SUPPORT=n`, since
it's unused in the sample app. This saves about 40kB flash.
- Permit setting the Memfault Project Key at runtime, with a new cli command
`project_key`. The key is saved in Non-Volatile Storage on the ESP32
board.
- General:
- Enable using compact logs with the IAR build tools, by adding the needed
`__no_alloc` attribute to the compact log symbols, to have the IAR linker
set the `NO_LOAD` attribute correctly on the compact log output section.
### 💥 Breaking Changes
- ESP-IDF:
- The [ESP-IDF port](ports/esp_idf/) now implements a default
`memfault_get_device_info()` function, which uses the device MAC address for
the Memfault Device Serial. When updating the Memfault SDK in an existing
project, this implementation will cause a **linker error** due to duplicate
definition. To disable the built-in definition, set
`CONFIG_MEMFAULT_DEFAULT_GET_DEVICE_INFO=n`.
## 1.3.2 - Sept 26, 2023
### 📈 Improvements
- Zephyr:
- use `<cmsis_core.h>` instead of `<nmi.h>`. Thanks
[@kmeinhar](https://github.com/kmeinhar) for this change! (see
[#64](https://github.com/memfault/memfault-firmware-sdk/pull/64))
- nRF Connect SDK:
- Add missing Kconfig flags `CONFIG_FLASH_MAP=y` + `CONFIG_STREAM_FLASH=y` for
the [`examples/nrf-connect-sdk/nrf5/`](examples/nrf-connect-sdk/nrf5/)
example app, for compatibility with nRF Connect SDK v2.4.1+. This was
required due to an
[upstream Zephyr change](https://github.com/zephyrproject-rtos/zephyr/commit/1b4b979f8789af6087f877c0daad0a660c1b9b28).
- General:
- Add support for Memfault Compact Logs for C++ source files (previously only
supported in C source files). Compact logging can be enabled by setting
`MEMFAULT_LOG_COMPACT_ENABLE=1` in `memfault_platform_config.h`. See
[the docs](https://docs.memfault.com/docs/mcu/compact-logs/) for more
details.
- Fix a missing include of `<intrinsics.h>` required by the IAR compiler
## 1.3.1 - Sept 21, 2023
### 📈 Improvements
- Zephyr:
- Add a new Kconfig, `CONFIG_MEMFAULT_COREDUMP_COMPUTE_THREAD_STACK_USAGE`, to
control whether thread stack usage is computed and collected on device
during a coredump.
## 1.3.0 - Sept 20, 2023
### 📈 Improvements
- General:
- Remove an unused root certificate and adjust the order of certs to minimize
additional TLS handshakes; DigiCert G2 is the most likely root cert so it is
now the first one attempted in every place certificates are used. This
update is trickled down from
[DigiCert's pivot in March 2023](https://knowledge.digicert.com/generalinformation/digicert-root-and-intermediate-ca-certificate-updates-2023.html)
to their G2 root cert as their default certificate.
- Zephyr:
- Add support for the new location of the `nmi.h` header which
[moved recently](https://github.com/zephyrproject-rtos/zephyr/pull/60031).
## 1.2.5 - Sept 18, 2023
### 📈 Improvements
- Add MQTT transport to esp32 example app
## 1.2.4 - Sept 12, 2023
### 📈 Improvements
- Fix a unit test failure introduced in 1.2.3. No on-target code was impacted.
## 1.2.3 - Sept 12, 2023
### 📈 Improvements
- General:
- Include the current MCU SDK version in the http client user agent header
- Zephyr:
- Update include paths for CMSIS headers for upcoming Zephyr support. Thanks
[@gmarull](https://github.com/gmarull) for the patch!
- Modus Toolbox:
- Allow a user application to override
`memfault_metrics_heartbeat_collect_data`.
## 1.2.2 - Sept 5, 2023
### 📈 Improvements
- ESP-IDF:
- Correct the heartbeat metrics key definition include configuration to
generate a consistent key index across the application. This regressed in
version 1.0.1 of the SDK.
### Changes between Memfault SDK 1.2.0 and 1.2.1 - Sept 1, 2023
#### 📈 Improvements
- ESP-IDF:
- Add a `heartbeat` cli command to the ESP-IDF port that does the same thing
as in Memfault's default demo console + Zephyr's console.
- Zephyr:
- Add a new Kconfig option to the Zephyr port,
`CONFIG_MEMFAULT_PLATFORM_EXTRA_CONFIG_FILE=y`, which causes
`memfault_platform_config_extra.h` to be included in platform
configurations. This can be utilized by a third party consumer of Zephyr to
more easily extend the platform configurations set by Zephyr and avoid
potentially losing a user's platform configurations set in
`memfault_platform_config.h`, which
[happened in the nRF Connect SDK recently](https://devzone.nordicsemi.com/f/nordic-q-a/103188/memfault-sdk-integration-missing-user-memfault_platform_config).
### Changes between Memfault SDK 1.1.3 and 1.2.0 - Aug 30, 2023
#### 📈 Improvements
- ESP-IDF:
- Eliminate several build warnings for our example app
- FreeRTOS:
- Fix a build error in our QEMU example when building on macOS
- Modus Toolbox:
- Update port to handle user override of SDK configs, metrics, trace_reasons,
etc
- Update port to fix errors when disabling built-in WiFi metrics
- nRF Connect SDK:
- Enable mcuboot & NCS 1.4 with our example apps
- Silicon Labs:
- Add a demo CLI component for the emblib port. Check out our
[Simplicity Studio example app](https://github.com/memfault/simplicity-studio-example)
for usage
- Fix a build warning in emblib port flash storage (MSC) module
- Zephyr:
- Fix a 🐛 when building with LOG_MODE_DEFERRED that prevent log messages from
flushing during a coredump
- Fix a 🐛 and warnings involving older Zephyr header paths. Resolves
[#62](https://github.com/memfault/memfault-firmware-sdk/issues/62) and
[#57](https://github.com/memfault/memfault-firmware-sdk/issues/57). Thanks
[@JordanYates](https://github.com/JordanYates) and
[@YHusain1](https://github.com/YHusain1) for reporting these issues.
### Changes between Memfault SDK 1.1.2 and 1.1.3 - Aug 8, 2023
#### 📈 Improvements
- Set Memfault SDK version in a string metric on device boot, for easier
tracking of SDK versions in the Memfault UI
- Support using a different identifier for the GNU build id symbol (previously
was fixed to `__start_gnu_build_id_start`). Use the
`MEMFAULT_GNU_BUILD_ID_SYMBOL` define in `memfault_platform_config.h` to
override the default. For Zephyr, the Kconfig option
`CONFIG_MEMFAULT_GNU_BUILD_ID_SOURCE_BUILTIN` can be used to override the
builtin section specifier + linker fragment for the GNU build ID. Thanks to
[@JordanYates](https://github.com/JordanYates) for posting this change in
[#60](https://github.com/memfault/memfault-firmware-sdk/pull/60) 🎉
- Improvements to the ARMv7-R exception handling when the supervisor processor
mode is active
- Zephyr:
- Add an optional mode to create and open the HTTP socket in separate function
calls, if the user needs to set additional socket options before connecting.
See
[ports/zephyr/include/memfault/ports/zephyr/http.h](ports/zephyr/include/memfault/ports/zephyr/http.h)
for details. Fixes
[#52](https://github.com/memfault/memfault-firmware-sdk/issues/52)- thanks
to [@anicare-tero](https://github.com/anicare-tero) for posting this 🎉
### Changes between Memfault SDK 1.1.1 and 1.1.2 - July 11, 2023
#### 📈 Improvements
- Improve compatibility in
[reboot reason tracking](ports/emlib/rmu_reboot_tracking.c) and
[watchdog implementation](ports/emlib/wdog_software_watchdog.c) on Silicon
Labs Series 2 MCUs
- Zephyr:
- Fix a build error when `CONFIG_MEMFAULT_LOGGING=n`, see
[#56](https://github.com/memfault/memfault-firmware-sdk/issues/56). Thanks
to [@JordanYates](https://github.com/JordanYates) for reporting this issue!
- Fix a potential bug in the Memfault Log Backend when
`CONFIG_LOG_MODE_IMMEDIATE=y` when flushing of fault logs during a crash
### Changes between Memfault SDK 1.1.0 and 1.1.1 - June 30, 2023
#### 📈 Improvements
- Reduce the amount of error logs emitted by the MbedTLS port HTTP client while
polling for session established. This regressed in SDK version 1.1.0.
### Changes between Memfault SDK 1.0.1 and 1.1.0 - June 29, 2023
#### 📈 Improvements
- New built-in metrics 🎉 !
- FreeRTOS Idle Task runtime percentage metric: `idle_task_run_time_percent`.
This is automatically enabled for FreeRTOS builds with the correct tracing
options enabled, see
[ports/include/memfault/ports/freertos/metrics.h](ports/include/memfault/ports/freertos/metrics.h)
for details on how to enable or disable this metric.
- MbedTLS metrics for maximum and current memory used: `mbedtls_mem_max_bytes`
and `mbedtls_mem_used_bytes`. These are automatically enabled for ESP-IDF
projects, see
[ports/mbedtls/memfault_mbedtls_metrics.c](ports/mbedtls/memfault_mbedtls_metrics.c)
for usage details
- Renamed the built-in LwIP metrics added in SDK version 1.0.1 from
`Tcp_Drop_Count`/`Tcp_Rx_Count`/`Tcp_Tx_Count`,
`Udp_Drop_Count`/`Udp_Rx_Count`/`Udp_Tx_Count` to be all lowercase
`tcp_drop_count`/`tcp_rx_count`/`tcp_tx_count`,
`udp_drop_count`/`udp_rx_count`/`udp_tx_count`
- Add the following automatically enabled WiFi performance metrics to the
ESP-IDF port:
- `wifi_connected_time_ms`
- `wifi_disconnect_count`
- `wifi_sta_min_rssi`
- Fix a bug in the [mbedtls port](ports/mbedtls/) causing an infinite loop under
certain error conditions on TLS handshake
- Zephyr:
- Improve log flushing in the Memfault log backend during fault when deferred
logging is enabled. This ensures the latest log statements are included in
the coredump log data, when the `CONFIG_MEMFAULT_LOGGING_ENABLE=y`
- ESP-IDF:
- `ESP_ERROR_CHECK()` assert coredumps will now correctly show as assert in
the Memfault coredump analysis view, instead of "Hard Fault"
### Changes between Memfault SDK 1.0.1 and 1.0.0 - June 9, 2023
#### 📈 Improvements
- Zephyr:
- Improve the quality of Zephyr stack usage detection when capturing less than
the full stack contents for each thread. This feature was originally
released in SDK `0.43.0`.
- ESP-IDF:
- Add Memfault Metrics tracking LwIP runtime statistics (packet counts). A new
Kconfig flag `CONFIG_MEMFAULT_LWIP_METRICS` controls this feature, which is
enabled by default. The LwIP metrics helper is available for non-ESP-IDF
projects using LwIP, see
[`ports/lwip/memfault_lwip_metrics.c`](ports/lwip/memfault_lwip_metrics.c)
for details
### Changes between Memfault SDK 1.0.0 and 0.43.3 - June 1, 2023
🎉🎉🎉
The Memfault Firmware SDK is now version `1.0.0` as of this release! Note that
this is just a procedural change, there are no breaking backwards-incompatible
changes in this release. We forgot to update our major version back in 2019, but
better late than never 😅! Hopefully the remaining 281,474,976,710,656 versions
are enough 🤞.
🎉🎉🎉
#### 📈 Improvements
- Zephyr:
- Add a new built-in metric `FileSystem_BytesFree` for tracking VFS bytes
free. This is enabled automatically when `CONFIG_FILE_SYSTEM=y`. Use the
Kconfig option `MEMFAULT_FS_BYTES_FREE_VFS_PATH` to set the VFS mount point
to monitor utilization (default value is `/lfs1`). The Kconfig option
`MEMFAULT_FS_BYTES_FREE_METRIC` can be used to disable the metric.
- Update a few spots in the Zephyr demo CLI to use `shell_print` instead of
`MEMFAULT_LOG` for command usage errors
### Changes between Memfault SDK 0.43.3 and 0.43.2 - May 22, 2023
#### 📈 Improvements
- Zephyr:
- Add more granular Kconfig settings to control what's collected in
[`memfault_zephyr_coredump_get_regions()`](ports/zephyr/common/memfault_platform_coredump_regions.c).
Default settings are identical to before this change.
- `CONFIG_MEMFAULT_COREDUMP_COLLECT_STACK_REGIONS`
- `CONFIG_MEMFAULT_COREDUMP_COLLECT_KERNEL_REGION`
- `CONFIG_MEMFAULT_COREDUMP_COLLECT_TASKS_REGIONS`
- Fix a build error when an application is configured without
`CONFIG_HEAP_MEM_POOL_SIZE=y` (i.e. no `kmalloc` in use).
- Fix a build error when building the
[nRF9160 example](examples/nrf-connect-sdk/nrf9160) on nRF-Connect SDK v2.3.0.
- ESP-IDF:
- Add support for upcoming v5.1 release of the ESP-IDF SDK
- Add support in the [ESP32 example app](examples/esp32) for the ESP32-C6 chip
### Changes between Memfault SDK 0.43.2 and 0.43.1 - May 3, 2023
#### 📈 Improvements
- Fix a bug 🐛 where metrics accumulated with `memfault_metrics_heartbeat_add()`
would no longer be included in the serialized heartbeat data. This regression
occurred in `0.42.0`.
### Changes between Memfault SDK 0.43.1 and 0.43.0 - April 26, 2023
#### 📈 Improvements
- Zephyr:
- The `z_NmiHandlerSet` function is renamed for the upcoming Zephyr 3.4.
Support the new name. Fixes
[#49](https://github.com/memfault/memfault-firmware-sdk/issues/49). Thanks
[@mbolivar-nordic](https://github.com/mbolivar-nordic) for filing this
issue!
### Changes between Memfault SDK 0.43.0 and 0.42.1 - April 18, 2023
#### 🚀 New Features
- Add coredump support for Cortex-R chips (ARMv7-R)
#### 📈 Improvements
- Add a QEMU-based FreeRTOS example project, find it under
[examples/freertos](examples/freertos)
- Switch `printf` function attribute to use `__printf__`, to avoid collision
with user code that redefines the `printf` token
- Zephyr:
- Compute thread stack high watermark values on-target when capturing a
coredump. This enables showing high watermark information in the Memfault
coredump analysis view without capturing the full stack for a thread
### Changes between Memfault SDK 0.42.1 and 0.42.0 - April 4, 2023
#### 📈 Improvements
- Zephyr:
- Remove `LEGACY_CONFIG_PATH` Kconfig selection, now that the `zephyr.h`
header is no longer used as of Memfault SDK `0.42.0`. This option no longer
exists after Zephyr v3.3.0. Fixes
[#48](https://github.com/memfault/memfault-firmware-sdk/issues/48)
- Minor changes to the [ESP8266 port](ports/esp8266_sdk) to improve
out-of-the-box compilation
- Add new functionality to output buffered log data via
`memfault_log_export_logs()`. See the
[`log.h` header](components/include/memfault/core/log.h) for detailed usage.
### Changes between Memfault SDK 0.42.0 and 0.41.2 - Mar 22, 2023
#### 📈 Improvements
- Zephyr:
- Add option to capture full thread stacks for classifying stack overflows and
determining stack high watermarks. This feature is enabled by setting
`CONFIG_MEMFAULT_COREDUMP_FULL_THREAD_STACKS=y`
- Remove usage of the `zephyr.h` header in preparation for Zephyr v3.4.0.
Thanks to [@jfischer-no](https://github.com/jfischer-no) for the patch!
- `memfault_gdb.py`:
- Add support for exporting data from GCC 12 compiled symbol files
- Add arguments to override device serial ID, software type, software version,
and hardware revision
#### 💥 Breaking Changes
- Metrics:
- Integer type metrics (signed/unsigned) will reset to NULL when not set
during a heartbeat interval. This NULL value will be discarded by Memfault
when received. The previous behavior was to reset to 0 which makes
discarding values difficult as 0 is a valid value for these types. For more
info please see the
[Metrics](https://docs.memfault.com/docs/mcu/metrics-api#setting-metric-values)
docs.
### Changes between Memfault SDK 0.41.2 and SDK 0.41.1 - Mar 10, 2023
#### 📈 Improvements
- Zephyr / nRF-Connect SDK:
- Improve compatibility with Zephyr pre-3.0 deferred logging, when using the
Memfault backend
- Add an option to the
[examples/nrf-connect-sdk/nrf5](examples/nrf-connect-sdk/nrf5) to enable
capturing all of RAM in a coredump.
### Changes between Memfault SDK 0.41.1 and SDK 0.41.0 - Mar 1, 2023
#### 📈 Improvements
- Zephyr / nRF-Connect SDK:
- Fix a bug 🐛 in the Memfault Logging backend, that causes coredump saving to
fail when building with Zephyr versions before 3.0 (nRF-Connect SDK < 2.0).
This regression was introduced in Memfault Firmware SDK **0.33.3**.
- ESP-IDF:
- Updated the [ESP32 example app](examples/esp32) for the ESP32-C3 on ESP-IDF
v5.0.1 to use size optimizations, to more closely mirror real world
environments and codesize.
- Fix a compilation error in the [ESP32 example app](examples/esp32) when
targeting ESP-IDF >=4.4,<4.4.3 . This regression was introduced in Memfault
Firmware SDK **0.39.1**.
### Changes between Memfault SDK 0.41.0 and SDK 0.40.0 - Feb 22, 2023
#### 🚀 New Features
- ESP-IDF:
- Added coredump support for the ESP32-C3 (RISC-V) chip. Thank you to @jlubawy
for your work on this in
[#42](https://github.com/memfault/memfault-firmware-sdk/pull/42) 🎉!
### Changes between Memfault SDK 0.40.0 and SDK 0.39.1 - Feb 15, 2023
#### 💥 Breaking Changes
- ESP-IDF:
- The Kconfig `CONFIG_MEMFAULT_AUTOMATIC_INIT` has been deprecated and is no
longer supported. Users of this Kconfig should refactor their application to
call `memfault_boot` during initialization. Use of this Kconfig now results
in a build error. For more information please see
<https://docs.memfault.com/docs/mcu/esp32-guide#initializing-memfault>
### Changes between Memfault SDK 0.39.1 and SDK 0.39.0 - Feb 3, 2023
#### 🚀 New Features
- **Experimental**
- CMSIS-Pack support
- Out Of Memory reboot reason added
#### 📈 Improvements
- ESP-IDF:
- The default implementation of `memfault_platform_coredump_get_regions` is
changed to collect the current active stack, .bss, .data, and .heap regions.
Additionally if you are using ESP-IDF >= 4.4.0, the SDK will prioritize
collecting FreeRTOS regions containing task TCB and stack data.
- Assert coredumps are now labeled with the Assert reason
### Changes between Memfault SDK 0.39.0 and SDK 0.38.0 - Feb 3, 2023
#### 💥 Breaking Changes
- Breaking changes to the
[`memfault_freertos_get_task_regions()`](ports/freertos/src/memfault_freertos_ram_regions.c)
function, which can be used to capture FreeRTOS tasks when coredumps are sized
smaller than all available RAM. The function will now, by default, capture a
truncated copy of each FreeRTOS TCB, instead of the complete structure. This
makes better use of coredump storage space; the TCB structures can be very
large (>1kB), but Memfault only needs the first few fields for coredump
decoding. The configuration flag `MEMFAULT_PLATFORM_FREERTOS_TCB_SIZE` (see
[`default_config.h`](components/include/memfault/default_config.h)) can be set
to `0` in `memfault_platform_config.h` to return to the previous behavior.
### Changes between Memfault SDK 0.38.0 and SDK 0.37.2 - Feb 1, 2023
#### 🚀 New Features
- Enable coredumps on the ESP32-S2 and ESP32-S3 chips.
### Changes between Memfault SDK 0.37.2 and SDK 0.37.1 - Jan 31, 2023
#### 📈 Improvements
- Zephyr:
- Support building with `CONFIG_POSIX_API=y` in the Zephyr port HTTP client
- ESP-IDF:
- Reduce the spamminess of the esp32 example app logging
- Update [`scripts/memfault_gdb.py`](scripts/memfault_gdb.py):
- When explicitly listing a region to insert into the coredump via
`memfault coredump --region x y`, now support parseable GDB expressions for
the range arguments instead of requiring integer values. Thanks to @alvarop
for this patch
[#43](https://github.com/memfault/memfault-firmware-sdk/pull/43) !
- Use the `info all-registers` command when dumping registers, instead of the
deprecated `info registers all` command, which works better on certain
arch/monitor setups. Thanks to [@alvarop](https://github.com/alvarop) for
this patch [#44](https://github.com/memfault/memfault-firmware-sdk/pull/44)
!
### Changes between Memfault SDK 0.37.1 and SDK 0.37.0 - Jan 17, 2023
#### 📈 Improvements
- FreeRTOS
- Add support for collecting truncated TCBs. This is particularly useful with
limited coredump space. Enable by defining
`MEMFAULT_PLATFORM_FREERTOS_TCB_SIZE` in `memfault_platform_config.h".
- ESP-IDF
- Add support for esp32s2/s3 platforms to the esp32 example application
#### 🏠 Internal
- Fixup some documentation typos/errors
- Add support for Python 3.10
### Changes between Memfault SDK 0.37.0 and SDK 0.36.1 - Dec 16, 2022
#### 📈 Improvements
- Built-in Metrics
- Add `MemfaultSdkMetric_UnexpectedRebootDidOccur` metric. This metric uses
the platform's reboot register and any reasons by the SDK function
`memfault_reboot_tracking_mark_reset_imminent` to classify a reboot. When
reboot tracking determines a reboot is unexpected, this metric is set to 1.
Otherwise this metric is 0.
- [ModusToolbox™️ Software](https://www.infineon.com/cms/en/design-support/tools/sdk/modustoolbox-software/)
- Add log capture during coredump to port
- Demo CLI
- Add `mflt test loadaddr` command. This command is used to test specific
faults due to protected regions
#### 💥 Breaking Changes
- Built-in Metrics
- The built-in metric, `MemfaultSdkMetric_UnexpectedRebootDidOccur`,
classifies all reboot reasons greater than or equal to
`kMfltRebootReason_UnknownError` **or** equal to `kMfltRebootReason_Unknown`
as "unexpected reboots". It is recommended to ensure your platform's
implementation of `memfault_reboot_reason_get` classifies the reboot
register values as accurately and precisely as possible to avoid incorrect
metric values.
### Changes between Memfault SDK 0.36.1 and SDK 0.36.0 - Dec 9, 2022
#### 📈 Improvements
- ESP-IDF:
- Fix a bug 🐛 in the [ESP32 example app](examples/esp32), where wifi join
fails when using versions of ESP-IDF prior to 5.0
### Changes between Memfault SDK 0.36.0 and SDK 0.35.0 - Dec 6, 2022
#### 📈 Improvements
- ESP-IDF:
- Add support for
[just-released ESP-IDF v5](https://github.com/espressif/esp-idf/releases/tag/v5.0)
🎉! Thanks to [@jlubawy](https://github.com/jlubawy) and the patch supplied
in #39 for this, very much appreciated!
- Add an auto-OTA (and auto-WiFi-join) feature to the
[ESP32 example app](examples/esp32)- enabled by default but can be disabled
with Kconfig
- The [Heap Stats tracing component](https://mflt.io/mcu-heap-stats) has been
revamped to make more efficient usage of the bookkeeping structure. Usage
should be the same as before, but now should provide more data without
significantly expanding the memory utilization.
### Changes between Memfault SDK 0.35.0 and SDK 0.34.2 - Nov 22, 2022
#### 🚀 New Features
- **Experimental** Custom Data Recording API
- Allows sending custom data collected over the course of a recording period
#### 📈 Improvements
- Zephyr:
- Modify heap stats to only collect info during allocations/deallocations from
threads
- ESP-IDF:
- ESP32 reboot tracking into RTC noinit
- nRF5 SDK:
- NRF5 coredump regions -Wunused-macros, fixes warning for unused macros
#### 🏠 Internal
- Experiment: pytest as fw test frontend
- README: Add additional details on port integration
### Changes between Memfault SDK 0.34.2 and SDK 0.34.1 - Nov 8, 2022
#### 📈 Improvements
- [ModusToolbox™️ Software](https://www.infineon.com/cms/en/design-support/tools/sdk/modustoolbox-software/)
- Updates SDK for compatibility with MTB 3.0
### Changes between Memfault SDK 0.34.1 and SDK 0.34.0 - Nov 7, 2022
#### 📈 Improvements
- nRF-Connect:
- Updates for Zephyr upmerge 2022.11.03 (see #35 + #36)
- Fix watchdog test (`mflt test hang`) in
[`examples/nrf-connect-sdk/nrf5/`](examples/nrf-connect-sdk/nrf5/)
- Zephyr:
- Set `CONFIG_QEMU_ICOUNT=n` in
[`examples/zephyr/qemu/`](examples/zephyr/qemu/), which fixes the emulated
target execution speed
- Add heap free and stack usage Metrics to
[`examples/zephyr/qemu/`](examples/zephyr/qemu/)
- Update the `memfault_demo_cli_cmd_assert()` test command to take a single arg,
which is used in `MEMFAULT_ASSERT_RECORD()`. This enables testing that assert
variant from the CLI.
### Changes between Memfault SDK 0.34.0 and SDK 0.33.5 - Nov 1, 2022
#### 📈 Improvements
- Misc ESP32 [port](ports/esp_idf) &
[example app](examples/esp32/apps/memfault_demo_app) improvements
- Added diagnostic print line containing Build Id at boot up
- Improved messaging displayed when using `memfault_ota_check` test command
- Example app now prints device info on bootup
- Fix an issue where incremental build (`idf.py build && idf.py build`) would
report a nuisance failure.
- Flatten + simplify the directory structure of the QEMU based example project
- A new [`ports/mbedtls`](ports/mbedtls) is available, which implements a basic
Mbed TLS client for performing Memfault data upload.
- Zephyr: Collect sysheap stats using the
[Memfault Heap Tracking](https://mflt.io/mcu-heap-stats) component. This is
configured with the `CONFIG_MEMFAULT_HEAP_STATS` Kconfig option (enabled by
default), and will track allocations done with `k_malloc()`.
- Fix an enum-mismatch warning in `memfault_metrics.c` when using the ARMCC v5
compiler.
#### 💥 Breaking Changes
- If you are using the ESP32 HTTP Client, the Memfault Project Key is now
configured directly via the
[ESP32 Project Configuration System](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/kconfig.html).
You need to do the following:
1. Remove the `g_mflt_http_client_config` in your platform port
2. Add `CONFIG_MEMFAULT_PROJECT_KEY="YOUR_PROJECT_KEY"` to your projects
`sdkconfig.defaults`
### Changes between Memfault SDK 0.33.4 and SDK 0.33.5 - Oct 19, 2022
#### 📈 Improvements
- nRF-Connect: Update the nRF9160 example application,
`examples/nrf-connect-sdk/nrf9160`, to build and run correctly with
nRF-Connect SDK v2.1.0
- Zephyr: Add an example Zephyr application targeting the QEMU board
- ESP-IDF:
- Add a configuration option for setting the ESP-IDF HTTP client timeout value
- Fix compilation for the ESP32-S3. _Note: coredumps are currently only
supported on the ESP32, not the ESP32-S2, -S3, or -C3. This change only
fixes compiling for the -S3 platform_
- Add support for ESP-IDF v4.2.3
#### 🏠 Internal
- Support building the unit tests with GCC 12
- Miscellaneous fixes to unit test infrastructure to better support building in
Mac OSX
### Changes between Memfault SDK 0.33.3 and SDK 0.33.4 - Sept 15, 2022
#### 📈 Improvements
- Zephyr port updates:
- Handle thread abort in the task stack capture hook. Previous to this change,
aborted tasks would remain on the captured task list, and restarting the
task would create a duplicate entry.
### Changes between Memfault SDK 0.33.2 and SDK 0.33.3 - Sept 14, 2022
#### 📈 Improvements
- Zephyr port updates:
- Add a call to `LOG_PANIC()` before running the Memfault fault handler, to
flush any deferred logs before the reboot
### Changes between Memfault SDK 0.33.1 and SDK 0.33.2 - Sept 7, 2022
#### 📈 Improvements
- Zephyr port updates:
- fix a few minor nuisance build warnings on niche Zephyr configurations
- enable `LOG_OUTPUT` when `MEMFAULT_LOGGING_ENABLE` is enabled- this fixes a
build error if all other log backends are disabled. thanks to @balaji-nordic
for this fix! closes #33
- Add a debug cli test command to the nRF-Connect SDK port for printing the OTA
url
### Changes between Memfault SDK 0.33.0 and SDK 0.33.1 - Aug 26, 2022
#### 📈 Improvements
- Fix a 🐛 in the heap stats component (#32), thanks
[@christophgreen](https://github.com/christophgreen) for reporting it!
- Zephyr port updates:
- add support for the newly namespaced Zephyr include path in upcoming Zephyr
v3.2 (`#include <zephyr.h>` → `#include <zephyr/zephyr.h>`). The includes
were moved
[prior to v3.1](https://github.com/zephyrproject-rtos/zephyr/commit/53ef68d4598b2f9005c5da3fc0b860ca1999d350)
of Zephyr, but v3.2
[changes the backwards compatibility support to opt-in](https://github.com/zephyrproject-rtos/zephyr/commit/1ec0c6f5308937dc8e77acc2567d6f53cdd7a74e).
The Memfault SDK is now updated to support both.
- fix Zephyr Memfault log capture to have the correct prefix in the decoded
output when using LOG2 - previously all log lines regardless of level would
have an `E` prefix (regression introduced in Memfault SDK version 0.32.0)
- fix Zephyr Memfault log capture when in `CONFIG_LOG_MODE_IMMEDIATE` and
using LOG2 to capture the full log line instead of each logged character as
a separate line.
#### 🏠 Internal
- Zephyr port folder for `v2.x` migrated to `common`, now that Zephyr v1.14
support has been removed (done in v0.32.0 of the Memfault SDK)
- Update README's for the example projects to match the new demo shell command
structure (`crash 1` → `test_hardfault`, etc).
- Tidy up nrf9160 example app Kconfig setup
- Fix parallel unit test invocation
### Changes between Memfault SDK 0.33.0 and SDK 0.32.2 - Aug 18, 2022
#### 📈 Improvements
- Extend [memfault demo shell](components/demo/src/memfault_demo_shell.c) to
support terminals that only emit CR for line endings
- nRF5 SDK Updates:
- Added a [software watchdog](https://mflt.io/root-cause-watchdogs) reference
port for nRF5 SDK which makes use of the RTC Peripheral. See
[ports/nrf5_sdk/software_watchdog.c](ports/nrf5_sdk/software_watchdog.c) for
more details.
- Updated [nRF5 example app](examples/nrf5/apps/memfault_demo_app/) to make
use of hardware and new software watchdog port.
- Zephyr Port Updates:
- Added Kconfig option to fallback to using `printk` by default when no
logging is enabled. This can be disabled by setting
`CONFIG_MEMFAULT_PLATFORM_LOG_FALLBACK_TO_PRINTK=n`.
- nRF Connect SDK Updates:
- Fixed a 🐛 which could result in download errors when using
[Memfault nRF Connect SDK FOTA client](ports/nrf-connect-sdk/zephyr/include/memfault/nrfconnect_port/fota.h)
and enabled client in example application by default.
- Added new example application for trying Memfault with nRF53 & nRF52 based
development kits. See
[examples/nrf-connect-sdk/nrf5](examples/nrf-connect-sdk/nrf5) for more
details.
### Changes between Memfault SDK 0.32.2 and SDK 0.32.1 - Aug 16, 2022
#### 📈 Improvements
- Zephyr port: added a fix for upcoming Zephyr 3.2 compatibility, thanks
[@nordicjm](https://github.com/nordicjm) for the fix!
#
gitextract_wb972ssr/
├── .circleci/
│ ├── Dockerfile
│ ├── config.yml
│ └── runas.sh
├── .clang-format
├── .codecov.yml
├── .cyignore
├── .git-blame-ignore-revs
├── .gitignore
├── CHANGELOG.md
├── CMakeLists.txt
├── Kconfig
├── LICENSE
├── README.md
├── VERSION
├── cmake/
│ └── Memfault.cmake
├── components/
│ ├── README.md
│ ├── core/
│ │ ├── README.md
│ │ └── src/
│ │ ├── .gitkeep
│ │ ├── arch_arm_cortex_m.c
│ │ ├── memfault_batched_events.c
│ │ ├── memfault_build_id.c
│ │ ├── memfault_build_id_private.h
│ │ ├── memfault_compact_log_serializer.c
│ │ ├── memfault_core_utils.c
│ │ ├── memfault_custom_data_recording.c
│ │ ├── memfault_custom_data_recording_private.h
│ │ ├── memfault_data_export.c
│ │ ├── memfault_data_packetizer.c
│ │ ├── memfault_data_source_rle.c
│ │ ├── memfault_event_storage.c
│ │ ├── memfault_heap_stats.c
│ │ ├── memfault_log.c
│ │ ├── memfault_log_data_source.c
│ │ ├── memfault_log_data_source_private.h
│ │ ├── memfault_log_private.h
│ │ ├── memfault_ram_reboot_info_tracking.c
│ │ ├── memfault_reboot_tracking_private.h
│ │ ├── memfault_reboot_tracking_serializer.c
│ │ ├── memfault_sdk_assert.c
│ │ ├── memfault_self_test.c
│ │ ├── memfault_self_test_private.h
│ │ ├── memfault_self_test_utils.c
│ │ ├── memfault_serializer_helper.c
│ │ ├── memfault_task_watchdog.c
│ │ ├── memfault_trace_event.c
│ │ └── memfault_trace_event_private.h
│ ├── demo/
│ │ ├── README.md
│ │ └── src/
│ │ ├── http/
│ │ │ └── memfault_demo_http.c
│ │ ├── memfault_demo_cli_drain_chunks.c
│ │ ├── memfault_demo_cli_log.c
│ │ ├── memfault_demo_cli_trace_event.c
│ │ ├── memfault_demo_core.c
│ │ ├── memfault_demo_shell.c
│ │ ├── memfault_demo_shell_commands.c
│ │ ├── memfault_demo_watchdog.c
│ │ └── panics/
│ │ ├── memfault_demo_cli_aux.c
│ │ ├── memfault_demo_cli_aux_private.h
│ │ └── memfault_demo_panics.c
│ ├── http/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_http_client.c
│ │ ├── memfault_http_client_post_chunk.c
│ │ ├── memfault_http_utils.c
│ │ └── memfault_root_certs_der.c
│ ├── include/
│ │ └── memfault/
│ │ ├── components.h
│ │ ├── config.h
│ │ ├── core/
│ │ │ ├── arch.h
│ │ │ ├── batched_events.h
│ │ │ ├── build_info.h
│ │ │ ├── compact_log_compile_time_checks.h
│ │ │ ├── compact_log_helpers.h
│ │ │ ├── compact_log_serializer.h
│ │ │ ├── compiler.h
│ │ │ ├── compiler_armcc.h
│ │ │ ├── compiler_gcc.h
│ │ │ ├── compiler_iar.h
│ │ │ ├── compiler_ti_arm.h
│ │ │ ├── custom_data_recording.h
│ │ │ ├── data_export.h
│ │ │ ├── data_packetizer.h
│ │ │ ├── data_packetizer_source.h
│ │ │ ├── data_source_rle.h
│ │ │ ├── debug_log.h
│ │ │ ├── device_info.h
│ │ │ ├── errors.h
│ │ │ ├── event_storage.h
│ │ │ ├── event_storage_implementation.h
│ │ │ ├── heap_stats.h
│ │ │ ├── heap_stats_impl.h
│ │ │ ├── log.h
│ │ │ ├── log_impl.h
│ │ │ ├── math.h
│ │ │ ├── platform/
│ │ │ │ ├── core.h
│ │ │ │ ├── crc32.h
│ │ │ │ ├── debug_log.h
│ │ │ │ ├── device_info.h
│ │ │ │ ├── nonvolatile_event_storage.h
│ │ │ │ ├── overrides.h
│ │ │ │ ├── reboot_tracking.h
│ │ │ │ └── system_time.h
│ │ │ ├── preprocessor.h
│ │ │ ├── reboot_reason_types.h
│ │ │ ├── reboot_tracking.h
│ │ │ ├── sdk_assert.h
│ │ │ ├── self_test.h
│ │ │ ├── serializer_helper.h
│ │ │ ├── serializer_key_ids.h
│ │ │ ├── task_watchdog.h
│ │ │ ├── task_watchdog_impl.h
│ │ │ ├── trace_event.h
│ │ │ ├── trace_event_impl.h
│ │ │ └── trace_reason_user.h
│ │ ├── default_config.h
│ │ ├── demo/
│ │ │ ├── cli.h
│ │ │ ├── shell.h
│ │ │ ├── shell_commands.h
│ │ │ └── util.h
│ │ ├── http/
│ │ │ ├── http_client.h
│ │ │ ├── platform/
│ │ │ │ └── http_client.h
│ │ │ ├── root_certs.h
│ │ │ └── utils.h
│ │ ├── metrics/
│ │ │ ├── battery.h
│ │ │ ├── connectivity.h
│ │ │ ├── heartbeat_config.def
│ │ │ ├── ids_impl.h
│ │ │ ├── metrics.h
│ │ │ ├── platform/
│ │ │ │ ├── battery.h
│ │ │ │ ├── connectivity.h
│ │ │ │ ├── overrides.h
│ │ │ │ └── timer.h
│ │ │ ├── reliability.h
│ │ │ ├── serializer.h
│ │ │ └── utils.h
│ │ ├── panics/
│ │ │ ├── arch/
│ │ │ │ ├── arm/
│ │ │ │ │ ├── aarch64.h
│ │ │ │ │ ├── cortex_m.h
│ │ │ │ │ └── v7_a_r.h
│ │ │ │ ├── posix/
│ │ │ │ │ └── posix.h
│ │ │ │ ├── riscv/
│ │ │ │ │ └── riscv.h
│ │ │ │ └── xtensa/
│ │ │ │ └── xtensa.h
│ │ │ ├── assert.h
│ │ │ ├── coredump.h
│ │ │ ├── coredump_impl.h
│ │ │ ├── fault_handling.h
│ │ │ └── platform/
│ │ │ └── coredump.h
│ │ ├── util/
│ │ │ ├── align.h
│ │ │ ├── banner.h
│ │ │ ├── base64.h
│ │ │ ├── cbor.h
│ │ │ ├── chunk_transport.h
│ │ │ ├── circular_buffer.h
│ │ │ ├── crc16.h
│ │ │ ├── rle.h
│ │ │ └── varint.h
│ │ └── version.h
│ ├── metrics/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_metrics.c
│ │ ├── memfault_metrics_battery.c
│ │ ├── memfault_metrics_connectivity.c
│ │ ├── memfault_metrics_reliability.c
│ │ └── memfault_metrics_serializer.c
│ ├── panics/
│ │ ├── README.md
│ │ └── src/
│ │ ├── memfault_coredump.c
│ │ ├── memfault_coredump_regions_armv7.c
│ │ ├── memfault_coredump_sdk_regions.c
│ │ ├── memfault_coredump_storage_debug.c
│ │ ├── memfault_coredump_utils.c
│ │ ├── memfault_fault_handling_aarch64.c
│ │ ├── memfault_fault_handling_arm.c
│ │ ├── memfault_fault_handling_armv7_a_r.c
│ │ ├── memfault_fault_handling_posix.c
│ │ ├── memfault_fault_handling_riscv.c
│ │ ├── memfault_fault_handling_xtensa.c
│ │ └── memfault_stdlib_assert.c
│ └── util/
│ ├── README.md
│ └── src/
│ ├── memfault_base64.c
│ ├── memfault_chunk_transport.c
│ ├── memfault_circular_buffer.c
│ ├── memfault_crc16_ccitt.c
│ ├── memfault_minimal_cbor.c
│ ├── memfault_rle.c
│ └── memfault_varint.c
├── examples/
│ ├── README.md
│ ├── cypress/
│ │ └── CY8CKIT-064S0S2-4343W/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── amazon-freertos.patch
│ │ └── src/
│ │ ├── README.md
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ ├── memfault_platform_storage.c
│ │ ├── memfault_platform_storage.h
│ │ ├── memfault_test.c
│ │ ├── memfault_test.h
│ │ ├── memfault_trace_reason_user_config.def
│ │ └── mqtt_demo_memfault.c
│ ├── dialog/
│ │ ├── README.md
│ │ ├── da145xx/
│ │ │ ├── README.md
│ │ │ └── apps/
│ │ │ └── memfault_demo_app/
│ │ │ ├── .gitignore
│ │ │ ├── Eclipse/
│ │ │ │ ├── .cproject
│ │ │ │ ├── .project
│ │ │ │ └── makefile.targets
│ │ │ ├── Keil_5/
│ │ │ │ ├── memfault_demo_app.uvoptx
│ │ │ │ ├── memfault_demo_app.uvprojx
│ │ │ │ ├── unused_531.txt
│ │ │ │ ├── unused_585.txt
│ │ │ │ └── unused_586.txt
│ │ │ └── src/
│ │ │ ├── config/
│ │ │ │ ├── da1458x_config_advanced.h
│ │ │ │ ├── da1458x_config_basic.h
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ ├── memfault_trace_reason_user_config.def
│ │ │ │ ├── user_callback_config.h
│ │ │ │ ├── user_config.h
│ │ │ │ ├── user_modules_config.h
│ │ │ │ ├── user_periph_setup.h
│ │ │ │ └── user_profiles_config.h
│ │ │ ├── custom_profile/
│ │ │ │ ├── user_custs1_def.c
│ │ │ │ ├── user_custs1_def.h
│ │ │ │ ├── user_custs_config.c
│ │ │ │ └── user_custs_config.h
│ │ │ ├── memfault_platform_device_info.c
│ │ │ ├── platform/
│ │ │ │ └── user_periph_setup.c
│ │ │ ├── user_app.c
│ │ │ └── user_app.h
│ │ └── da1469x/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .cproject
│ │ ├── .gitignore
│ │ ├── .project
│ │ ├── config/
│ │ │ ├── custom_config_qspi.h
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── main.c
│ │ ├── makefile.targets
│ │ └── memfault_platform_device_info.c
│ ├── esp32/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .gitignore
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── main/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig.projbuild
│ │ │ ├── app_memfault_transport.h
│ │ │ ├── app_memfault_transport_http.c
│ │ │ ├── app_memfault_transport_mqtt.c
│ │ │ ├── button.c
│ │ │ ├── button.h
│ │ │ ├── cmd_app.c
│ │ │ ├── cmd_decl.h
│ │ │ ├── cmd_system.c
│ │ │ ├── cmd_wifi.c
│ │ │ ├── cmd_wifi_legacy.c
│ │ │ ├── config/
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ ├── memfault_reboot_reason_user_config.def
│ │ │ │ ├── memfault_task_watchdog_config.def
│ │ │ │ └── memfault_trace_reason_user_config.def
│ │ │ ├── deep_sleep.c
│ │ │ ├── deep_sleep.h
│ │ │ ├── idf_component.yml
│ │ │ ├── led.c
│ │ │ ├── led.h
│ │ │ ├── main.c
│ │ │ ├── metrics.c
│ │ │ ├── ota_session_metrics.c
│ │ │ ├── ota_session_metrics.h
│ │ │ ├── settings.c
│ │ │ └── settings.h
│ │ ├── partitions_example.csv
│ │ ├── sdkconfig.defaults
│ │ ├── sdkconfig.heaptrace
│ │ └── sdkconfig.mqtt
│ ├── freertos/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── boards/
│ │ │ ├── qemu_mps2_an385/
│ │ │ │ ├── Makefile
│ │ │ │ ├── linker.ld
│ │ │ │ ├── memfault_platform_impl.c
│ │ │ │ └── startup.c
│ │ │ ├── qemu_mps2_an386/
│ │ │ │ ├── Makefile
│ │ │ │ ├── linker.ld
│ │ │ │ ├── memfault_platform_impl.c
│ │ │ │ └── startup.c
│ │ │ └── qemu_mps2_an505/
│ │ │ ├── Makefile
│ │ │ ├── README.md
│ │ │ ├── linker.ld
│ │ │ ├── memfault_platform_impl.c
│ │ │ └── startup.c
│ │ └── src/
│ │ ├── FreeRTOSConfig.h
│ │ ├── compact_log.cpp
│ │ ├── compact_log.h
│ │ ├── console.c
│ │ ├── console.h
│ │ ├── heap_task.c
│ │ ├── heap_task.h
│ │ ├── main.c
│ │ ├── memfault/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_platform_log_config.h
│ │ │ ├── memfault_platform_port.c
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── metrics.c
│ │ ├── metrics.h
│ │ ├── mpu.c
│ │ └── mpu.h
│ ├── libcurl/
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── get_latest.c
│ │ └── post_chunks.c
│ ├── nrf-connect-sdk/
│ │ ├── nrf5/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ └── memfault_demo_app/
│ │ │ ├── 1mbaud_uart.overlay
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig
│ │ │ ├── Kconfig.sysbuild
│ │ │ ├── VERSION
│ │ │ ├── boards/
│ │ │ │ ├── nrf54h20dk_nrf54h20_cpuapp.conf
│ │ │ │ ├── nrf54h20dk_nrf54h20_cpuapp.overlay
│ │ │ │ ├── nrf54l15dk_nrf54l15_cpuapp.conf
│ │ │ │ ├── nrf54l15dk_nrf54l15_cpuapp_noinit.ld
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.conf
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.overlay
│ │ │ │ ├── nrf54lm20dk_nrf54lm20a_cpuapp.overlay.example
│ │ │ │ └── nrf54lm20dk_nrf54lm20a_cpuapp_noinit.ld
│ │ │ ├── config/
│ │ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_config.h
│ │ │ │ └── memfault_trace_reason_user_config.def
│ │ │ ├── pm_static_nrf54l15dk_nrf54l15_cpuapp.yml
│ │ │ ├── pm_static_nrf54lm20dk_nrf54lm20a_cpuapp.yml
│ │ │ ├── prj.conf
│ │ │ ├── sample.yaml
│ │ │ ├── src/
│ │ │ │ ├── main.c
│ │ │ │ └── shell_commands.c
│ │ │ ├── sysbuild/
│ │ │ │ └── ipc_radio/
│ │ │ │ └── prj.conf
│ │ │ ├── sysbuild.conf
│ │ │ └── west.yml
│ │ └── nrf9160/
│ │ ├── .gitignore
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── README.md
│ │ ├── boards/
│ │ │ └── nrf9160dk_nrf9160_ns_0_14_0.overlay
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_reboot_reason_user_config.def
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── overlay-coap.conf
│ │ ├── overlays/
│ │ │ ├── ncs-main.conf
│ │ │ ├── ncs-pre-v2.0.0.conf
│ │ │ ├── ncs-pre-v2.2.99.conf
│ │ │ ├── ncs-pre-v2.4.0.conf
│ │ │ ├── ncs-pre-v2.8.0.conf
│ │ │ └── ncs-pre-v2.9.99.conf
│ │ ├── prj.conf
│ │ ├── sample.yaml
│ │ ├── src/
│ │ │ ├── main.c
│ │ │ ├── memfault_demo_app.h
│ │ │ └── watchdog.c
│ │ ├── submanifests/
│ │ │ └── .gitkeep
│ │ ├── sysbuild.conf
│ │ └── west.yml
│ ├── nrf5/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── .gitignore
│ │ ├── Makefile
│ │ ├── config/
│ │ │ └── sdk_config.h
│ │ ├── memfault_demo_app_nrf52.ld
│ │ ├── src/
│ │ │ ├── cli.c
│ │ │ ├── main.c
│ │ │ └── mflt_cli.h
│ │ └── third_party/
│ │ └── memfault/
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ ├── memfault_trace_reason_user_config.def
│ │ └── sdk_overrides/
│ │ └── app_error.h
│ ├── qp/
│ │ ├── README.md
│ │ └── apps/
│ │ └── memfault_demo_app/
│ │ ├── Makefile
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ └── src/
│ │ ├── arm-generic.ld
│ │ ├── bsp.c
│ │ ├── bsp.h
│ │ ├── main.c
│ │ ├── platform_reference_impl/
│ │ │ ├── memfault_platform_core.c
│ │ │ └── memfault_platform_log.c
│ │ └── startup_stm32f4xx.c
│ ├── stm32/
│ │ ├── README.md
│ │ └── stm32h743i/
│ │ ├── Makefile_test.mk
│ │ ├── README.md
│ │ ├── chibios-memfault-integration.patch
│ │ ├── memfault_sdk.mk
│ │ └── platform_reference_impl/
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump.c
│ │ ├── memfault_platform_device_info.c
│ │ ├── memfault_trace_reason_user_config.def
│ │ ├── stm32h7xx_hal_conf.h
│ │ └── stm32h7xx_hal_stubs.c
│ ├── wiced/
│ │ ├── README.md
│ │ ├── apps/
│ │ │ └── memfault_demo_app/
│ │ │ ├── config/
│ │ │ │ └── memfault_platform_config.h
│ │ │ ├── memfault_demo_app.c
│ │ │ └── memfault_demo_app.mk
│ │ └── libraries/
│ │ └── memfault/
│ │ ├── core/
│ │ │ └── core.mk
│ │ ├── demo/
│ │ │ └── demo.mk
│ │ ├── http/
│ │ │ └── http.mk
│ │ ├── panics/
│ │ │ └── panics.mk
│ │ ├── platform_reference_impl/
│ │ │ ├── memfault_platform_coredump.c
│ │ │ ├── memfault_platform_coredump.ld
│ │ │ ├── memfault_platform_crc32.c
│ │ │ ├── memfault_platform_debug_log.c
│ │ │ ├── memfault_platform_device_info.c
│ │ │ ├── memfault_platform_fault_handling_arm_gcc.c
│ │ │ ├── memfault_platform_http_client.c
│ │ │ ├── memfault_platform_impl.c
│ │ │ ├── memfault_platform_wiced.h
│ │ │ └── platform_reference_impl.mk
│ │ └── util/
│ │ └── util.mk
│ └── zephyr/
│ ├── nucleo_wba55cg/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── VERSION
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── prj.conf
│ │ ├── src/
│ │ │ └── main.c
│ │ └── west.yml
│ ├── qemu/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ └── qemu-app/
│ │ ├── CMakeLists.txt
│ │ ├── Kconfig
│ │ ├── LICENSE
│ │ ├── boards/
│ │ │ ├── apollo4p_blue_kxr_evb.conf
│ │ │ ├── apollo4p_blue_kxr_evb.overlay
│ │ │ ├── apollo510_evb.conf
│ │ │ ├── apollo510_evb.overlay
│ │ │ ├── b_u585i_iot02a.conf
│ │ │ ├── b_u585i_iot02a.overlay
│ │ │ ├── mps2_an385.conf
│ │ │ ├── mps2_an385.overlay
│ │ │ ├── nucleo_f756zg.conf
│ │ │ ├── nucleo_f756zg.overlay
│ │ │ ├── nucleo_l496zg.conf
│ │ │ ├── nucleo_l496zg.overlay
│ │ │ ├── qemu_cortex_m3.conf
│ │ │ └── qemu_cortex_m3.overlay
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ └── memfault_platform_config.h
│ │ ├── prj.conf
│ │ ├── src/
│ │ │ ├── cdr.c
│ │ │ ├── cdr.h
│ │ │ ├── main.c
│ │ │ └── metrics.c
│ │ └── west.yml
│ └── stm32l4_disco/
│ ├── .ci-project-setup.json
│ ├── .gitignore
│ ├── README.md
│ ├── apps/
│ │ └── memfault_demo_app/
│ │ ├── CMakeLists.txt
│ │ ├── config/
│ │ │ ├── memfault_metrics_heartbeat_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ ├── prj.conf
│ │ ├── sample.yaml
│ │ └── src/
│ │ └── main.c
│ └── stm32l4_disco_zephyr2.5_wifi.patch
├── idf_component.yml
├── makefiles/
│ └── MemfaultWorker.mk
├── ports/
│ ├── README.md
│ ├── atmel/
│ │ └── saml1x/
│ │ └── rcause_reboot_tracking.c
│ ├── cypress/
│ │ └── psoc6/
│ │ ├── README.md
│ │ ├── configs/
│ │ │ ├── memfault_metrics_mtb_heartbeat_config.def
│ │ │ ├── memfault_mtb_platform_config.h
│ │ │ └── memfault_platform_log_config.h
│ │ ├── memfault_bss.ld
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_http.c
│ │ ├── memfault_psoc6_port.h
│ │ ├── psoc6_default_config.h
│ │ └── res_cause_reboot_tracking.c
│ ├── dialog/
│ │ ├── da145xx/
│ │ │ ├── armcc-fault-handler.patch
│ │ │ ├── gcc-hardfault.patch
│ │ │ ├── gnu-build-id.patch
│ │ │ ├── memfault_platform_core.c
│ │ │ ├── memfault_platform_coredump_regions.c
│ │ │ ├── memfault_platform_coredump_storage.c
│ │ │ ├── memfault_platform_debug_log.c
│ │ │ ├── memfault_platform_metrics.c
│ │ │ └── reset_reboot_tracking.c
│ │ ├── da1468x/
│ │ │ ├── gnu-build-id.patch
│ │ │ ├── memfault-qspi-coredump-storage.patch
│ │ │ ├── qspi_coredump_storage.c
│ │ │ ├── reset_stat_reboot_tracking.c
│ │ │ └── wdog_software_watchdog.c
│ │ └── da1469x/
│ │ ├── fault-handlers.patch
│ │ ├── freertos-config.patch
│ │ ├── gnu-build-id.patch
│ │ ├── memfault_diagnostic_service.c
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_coredump_storage.c
│ │ ├── memfault_platform_debug_log.c
│ │ └── reset_reboot_tracking.c
│ ├── emlib/
│ │ ├── README.md
│ │ ├── memfault_demo_cli.c
│ │ ├── msc_coredump_storage.c
│ │ ├── rmu_reboot_tracking.c
│ │ └── wdog_software_watchdog.c
│ ├── esp_idf/
│ │ ├── README.md
│ │ ├── memfault/
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Kconfig
│ │ │ ├── common/
│ │ │ │ ├── memfault_compact_log.ld
│ │ │ │ ├── memfault_esp_freertos.lf
│ │ │ │ ├── memfault_fault_handler.c
│ │ │ │ ├── memfault_platform_core.c
│ │ │ │ ├── memfault_platform_coredump.c
│ │ │ │ ├── memfault_platform_debug_log.c
│ │ │ │ ├── memfault_platform_deep_sleep.c
│ │ │ │ ├── memfault_platform_demo_cli_cmds.c
│ │ │ │ ├── memfault_platform_device_info.c
│ │ │ │ ├── memfault_platform_http_client.c
│ │ │ │ ├── memfault_platform_http_client_buffer.c
│ │ │ │ ├── memfault_platform_http_periodic_upload.c
│ │ │ │ ├── memfault_platform_metrics.c
│ │ │ │ ├── memfault_platform_system_time.c
│ │ │ │ └── memfault_self_test_platform.c
│ │ │ ├── config/
│ │ │ │ ├── memfault_esp_idf_port_config.h
│ │ │ │ ├── memfault_esp_metrics_heartbeat_config.def
│ │ │ │ ├── memfault_platform_freertos_error_log.h
│ │ │ │ └── memfault_trace_reason_esp_idf_port_config.def
│ │ │ ├── include/
│ │ │ │ └── memfault/
│ │ │ │ └── esp_port/
│ │ │ │ ├── cli.h
│ │ │ │ ├── core.h
│ │ │ │ ├── coredump.h
│ │ │ │ ├── deep_sleep.h
│ │ │ │ ├── device_info.h
│ │ │ │ ├── http_client.h
│ │ │ │ ├── metrics.h
│ │ │ │ └── spi_flash.h
│ │ │ ├── v4.x/
│ │ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ │ └── memfault_esp_spi_flash.c
│ │ │ ├── v5.x/
│ │ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ │ └── memfault_esp_spi_flash.c
│ │ │ └── v6.x/
│ │ │ ├── Memfault-esp-idf-compat.cmake
│ │ │ └── memfault_esp_spi_flash.c
│ │ └── memfault.cmake
│ ├── freertos/
│ │ ├── README.md
│ │ ├── config/
│ │ │ └── memfault_metrics_heartbeat_freertos_config.def
│ │ └── src/
│ │ ├── memfault_core_freertos.c
│ │ ├── memfault_freertos_ram_regions.c
│ │ ├── memfault_metrics_freertos.c
│ │ ├── memfault_panics_freertos.c
│ │ ├── memfault_sdk_metrics_freertos.c
│ │ ├── memfault_sdk_metrics_thread.c
│ │ └── memfault_self_test_platform.c
│ ├── include/
│ │ ├── .mtbsearch.h
│ │ └── memfault/
│ │ └── ports/
│ │ ├── ble/
│ │ │ └── mds.h
│ │ ├── buffered_coredump_storage.h
│ │ ├── freertos/
│ │ │ ├── metrics.h
│ │ │ └── thread_metrics.h
│ │ ├── freertos.h
│ │ ├── freertos_coredump.h
│ │ ├── freertos_trace.h
│ │ ├── lwip/
│ │ │ └── metrics.h
│ │ ├── mbedtls/
│ │ │ └── metrics.h
│ │ ├── reboot_reason.h
│ │ ├── stm32cube/
│ │ │ ├── l4/
│ │ │ │ └── flash.h
│ │ │ └── wb/
│ │ │ └── flash.h
│ │ ├── threadx_coredump.h
│ │ └── watchdog.h
│ ├── lwip/
│ │ ├── config/
│ │ │ └── memfault_lwip_metrics_heartbeat_config.def
│ │ └── memfault_lwip_metrics.c
│ ├── mbedtls/
│ │ ├── config/
│ │ │ └── memfault_mbedtls_metrics_heartbeat_config.def
│ │ ├── memfault_mbedtls_metrics.c
│ │ └── memfault_platform_http_client.c
│ ├── mynewt/
│ │ ├── README.md
│ │ ├── include/
│ │ │ ├── memfault_metrics_heartbeat_mynewt_config.def
│ │ │ ├── memfault_platform_config.h
│ │ │ ├── memfault_platform_log_config.h
│ │ │ ├── memfault_shell.h
│ │ │ └── memfault_trace_reason_mynewt_config.def
│ │ ├── pkg.yml
│ │ ├── src/
│ │ │ ├── memfault_platform_flash_backed_coredump.c
│ │ │ ├── memfault_platform_port.c
│ │ │ └── memfault_shell.c
│ │ └── syscfg.yml
│ ├── nrf5_sdk/
│ │ ├── memfault_platform_metrics.c
│ │ ├── nrf5_coredump_regions.c
│ │ ├── nrf5_coredump_storage.c
│ │ ├── resetreas_reboot_tracking.c
│ │ └── software_watchdog.c
│ ├── nxp/
│ │ ├── rt1021/
│ │ │ └── src_reboot_tracking.c
│ │ └── rw61x/
│ │ └── pmu_reboot_tracking.c
│ ├── panics/
│ │ └── src/
│ │ └── memfault_platform_ram_backed_coredump.c
│ ├── particle/
│ │ ├── README.md
│ │ ├── examples/
│ │ │ └── memfault_test/
│ │ │ ├── project.properties
│ │ │ └── src/
│ │ │ ├── application.cpp
│ │ │ ├── memfault_particle_user_config.h
│ │ │ └── memfault_trace_reason_user_config.def
│ │ └── src/
│ │ ├── memfault.cpp
│ │ ├── memfault.h
│ │ ├── memfault_particle_metrics_heartbeat_config.def
│ │ ├── memfault_particle_trace_reason_user_config.def
│ │ ├── memfault_platform_config.h
│ │ └── memfault_platform_log_config.h
│ ├── qp/
│ │ ├── README.md
│ │ ├── qassert.h.patch
│ │ ├── qf_pkg.h.patch
│ │ └── qf_pkg.hpp.patch
│ ├── s32sdk/
│ │ ├── ftfc_flash_coredump_storage.c
│ │ ├── lpit_software_watchdog.c
│ │ └── rcm_reboot_tracking.c
│ ├── silabs/
│ │ └── wiseconnect/
│ │ └── siwx91x/
│ │ └── siwx91x_reboot_tracking.c
│ ├── stm32cube/
│ │ ├── README.md
│ │ ├── f4/
│ │ │ ├── flash_coredump_storage.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── f7/
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── h5/
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── h7/
│ │ │ ├── lptim_software_watchdog.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── l4/
│ │ │ ├── flash_coredump_storage.c
│ │ │ ├── lptim_software_watchdog.c
│ │ │ └── rcc_reboot_tracking.c
│ │ ├── u5/
│ │ │ ├── flash_coredump_storage.c
│ │ │ └── rcc_reboot_tracking.c
│ │ └── wb/
│ │ ├── flash_coredump_storage.c
│ │ └── rcc_reboot_tracking.c
│ ├── templates/
│ │ ├── README.md
│ │ ├── apache-2.0.txt
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_platform_port.c
│ │ └── memfault_trace_reason_user_config.def
│ ├── threadx/
│ │ └── src/
│ │ └── memfault_threadx_ram_regions.c
│ └── zephyr/
│ ├── CMakeLists.txt
│ ├── Kconfig
│ ├── README.md
│ ├── common/
│ │ ├── CMakeLists.txt
│ │ ├── coredump_storage/
│ │ │ ├── memfault_ambiq_mram_backed_coredump.c
│ │ │ ├── memfault_mram_backed_coredump.c
│ │ │ ├── memfault_nrf_rram_backed_coredump.c
│ │ │ └── memfault_stm32u5_flash_backed_coredump.c
│ │ ├── memfault-build-id.ld
│ │ ├── memfault-compact-log.ld
│ │ ├── memfault-mbedtls.conf
│ │ ├── memfault-no-init.ld
│ │ ├── memfault-rtc-noinit-region.ld
│ │ ├── memfault_demo_cli.c
│ │ ├── memfault_logging.c
│ │ ├── memfault_logging_legacy.c
│ │ ├── memfault_logging_minimal.c
│ │ ├── memfault_mcumgr.c
│ │ ├── memfault_periodic_upload.c
│ │ ├── memfault_platform_core.c
│ │ ├── memfault_platform_coredump_regions.c
│ │ ├── memfault_platform_debug_log.c
│ │ ├── memfault_platform_fota.c
│ │ ├── memfault_platform_http.c
│ │ ├── memfault_platform_lock.c
│ │ ├── memfault_platform_post.c
│ │ ├── memfault_platform_ram_backed_coredump.c
│ │ ├── memfault_platform_system_time.c
│ │ ├── memfault_self_test_platform.c
│ │ ├── memfault_software_watchdog.c
│ │ ├── memfault_tls_root_cert_storage.c
│ │ ├── memfault_zephyr_ram_regions.c
│ │ └── metrics/
│ │ ├── CMakeLists.txt
│ │ ├── memfault_platform_bluetooth_metrics.c
│ │ ├── memfault_platform_metrics.c
│ │ ├── memfault_platform_thread_metrics.c
│ │ └── memfault_platform_wifi_metrics.c
│ ├── config/
│ │ ├── memfault_metrics_heartbeat_zephyr_port_config.def
│ │ ├── memfault_platform_log_config.h
│ │ ├── memfault_trace_reason_zephyr_port_config.def
│ │ └── memfault_zephyr_platform_config.h
│ ├── include/
│ │ └── memfault/
│ │ └── ports/
│ │ ├── ncs/
│ │ │ ├── date_time_callback.h
│ │ │ └── version.h
│ │ └── zephyr/
│ │ ├── bluetooth_metrics.h
│ │ ├── core.h
│ │ ├── coredump.h
│ │ ├── deprecated_root_cert.h
│ │ ├── fota.h
│ │ ├── http.h
│ │ ├── include_compatibility.h
│ │ ├── log_backend.h
│ │ ├── log_panic.h
│ │ ├── memfault_mcumgr.h
│ │ ├── periodic_upload.h
│ │ ├── root_cert_storage.h
│ │ ├── thread_metrics.h
│ │ └── version.h
│ ├── ncs/
│ │ ├── CMakeLists.txt
│ │ ├── Kconfig
│ │ ├── README.md
│ │ ├── config/
│ │ │ └── memfault_metrics_heartbeat_ncs_port_config.def
│ │ ├── include/
│ │ │ └── memfault/
│ │ │ └── nrfconnect_port/
│ │ │ └── coap.h
│ │ └── src/
│ │ ├── CMakeLists.txt
│ │ ├── memfault_fota.c
│ │ ├── memfault_fota_legacy.c
│ │ ├── memfault_nrf_modem_root_cert_init.c
│ │ ├── memfault_nrf_modem_root_cert_storage.c
│ │ ├── memfault_platform_coap.c
│ │ ├── memfault_platform_metrics_connectivity_lte.c
│ │ ├── memfault_platform_npm13xx_battery.c
│ │ └── nrfx_pmu_reboot_tracking.c
│ └── panics/
│ ├── CMakeLists.txt
│ ├── memfault_fault_handler.c
│ ├── memfault_fault_handler_posix.c
│ ├── memfault_fault_handler_riscv.c
│ └── memfault_fault_handler_xtensa.c
├── repository.yml
├── requirements.txt
├── scripts/
│ ├── cmsis_pack_bundle.py
│ ├── create_arduino_library.py
│ ├── eclipse_patch.py
│ ├── fw_build_id.py
│ ├── memfault_gdb.py
│ ├── memfault_group.py
│ ├── mflt-build-id/
│ │ ├── .gitignore
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── pyproject.toml
│ │ ├── setup.py
│ │ ├── src/
│ │ │ └── mflt_build_id/
│ │ │ ├── __init__.py
│ │ │ └── py.typed
│ │ ├── tasks/
│ │ │ └── __init__.py
│ │ └── tests_mflt_build_id/
│ │ ├── __init__.py
│ │ ├── conftest.py
│ │ ├── elf_fixtures/
│ │ │ ├── __init__.py
│ │ │ ├── crc32_build_id_populated.elf
│ │ │ ├── crc32_build_id_unpopulated.elf
│ │ │ ├── gnu_id_present_and_not_used.elf
│ │ │ ├── gnu_id_present_and_used.elf
│ │ │ ├── gnu_id_with_short_len.elf
│ │ │ ├── memfault_build_id_present_and_populated.elf
│ │ │ ├── memfault_build_id_present_and_unpopulated.elf
│ │ │ ├── memfault_build_id_with_short_len.elf
│ │ │ ├── memfault_id_used_gnu_id_present.elf
│ │ │ ├── no_memfault_symbols.elf
│ │ │ └── no_symtab_no_text_no_data.elf
│ │ ├── test_elf_file_helper.py
│ │ └── test_fw_build_id.py
│ └── tests_embedded_scripts/
│ ├── __init__.py
│ ├── gdb_fake.py
│ ├── snapshots/
│ │ ├── __init__.py
│ │ ├── snap_test_eclipse_patch.py
│ │ └── snap_test_memfault_gdb.py
│ ├── test_eclipse_patch.py
│ ├── test_memfault_gdb.py
│ └── testinput/
│ ├── .cproject
│ └── .project
├── tasks/
│ ├── __init__.py
│ ├── esp32.py
│ ├── gdb.py
│ ├── macos_ftdi.py
│ ├── nrf.py
│ ├── print_chunk_watcher.py
│ ├── wiced.py
│ └── zephyr.py
├── tests/
│ ├── README.md
│ └── unit/
│ ├── Makefile
│ ├── MakefileWorker.mk
│ ├── MakefileWorkerOverrides.mk
│ ├── README.md
│ ├── comparators/
│ │ ├── comparator_memfault_fault_handling.hpp
│ │ └── comparator_memfault_metric_ids.hpp
│ ├── fakes/
│ │ ├── fake_memfault_buffered_coredump_storage.h
│ │ ├── fake_memfault_build_id.c
│ │ ├── fake_memfault_build_id.h
│ │ ├── fake_memfault_coredump_utils.c
│ │ ├── fake_memfault_event_storage.cpp
│ │ ├── fake_memfault_event_storage.h
│ │ ├── fake_memfault_metrics_platform_locking.c
│ │ ├── fake_memfault_platform_boot_time.c
│ │ ├── fake_memfault_platform_coredump_storage.c
│ │ ├── fake_memfault_platform_coredump_storage.h
│ │ ├── fake_memfault_platform_crc32.c
│ │ ├── fake_memfault_platform_debug_log.c
│ │ ├── fake_memfault_platform_get_device_info.c
│ │ ├── fake_memfault_platform_get_device_info.h
│ │ ├── fake_memfault_platform_http_client.c
│ │ ├── fake_memfault_platform_locking.c
│ │ ├── fake_memfault_platform_metrics_locking.h
│ │ ├── fake_memfault_platform_time.c
│ │ ├── fake_memfault_platform_time.h
│ │ ├── fake_memfault_reboot_tracking.c
│ │ └── fake_memfault_sdk_assert.c
│ ├── llvm-cov-wrapper.sh
│ ├── makefiles/
│ │ ├── Makefile_assert.mk
│ │ ├── Makefile_batched_events.mk
│ │ ├── Makefile_circular_buffer.mk
│ │ ├── Makefile_memfault_base64.mk
│ │ ├── Makefile_memfault_buffered_coredump_storage.mk
│ │ ├── Makefile_memfault_build_id_gnu.mk
│ │ ├── Makefile_memfault_build_id_memfault.mk
│ │ ├── Makefile_memfault_cdr_source.mk
│ │ ├── Makefile_memfault_chunking_transport.mk
│ │ ├── Makefile_memfault_compact_log.mk
│ │ ├── Makefile_memfault_compact_log_macros.mk
│ │ ├── Makefile_memfault_compact_log_save_truncation.mk
│ │ ├── Makefile_memfault_compact_log_serializer.mk
│ │ ├── Makefile_memfault_coredump.mk
│ │ ├── Makefile_memfault_coredump_sdk_regions.mk
│ │ ├── Makefile_memfault_coredump_utils.mk
│ │ ├── Makefile_memfault_coredump_with_serial.mk
│ │ ├── Makefile_memfault_crc16_ccitt.mk
│ │ ├── Makefile_memfault_crc16_ccitt_no_lut.mk
│ │ ├── Makefile_memfault_data_export.mk
│ │ ├── Makefile_memfault_data_packetizer.mk
│ │ ├── Makefile_memfault_data_packetizer_with_project_key.mk
│ │ ├── Makefile_memfault_data_source_rle.mk
│ │ ├── Makefile_memfault_demo_shell.mk
│ │ ├── Makefile_memfault_event_storage.mk
│ │ ├── Makefile_memfault_event_storage_batch_read.mk
│ │ ├── Makefile_memfault_event_storage_no_persistent_storage.mk
│ │ ├── Makefile_memfault_heap_stats.mk
│ │ ├── Makefile_memfault_heartbeat_metrics.mk
│ │ ├── Makefile_memfault_heartbeat_metrics_debug.mk
│ │ ├── Makefile_memfault_heartbeat_metrics_nocustom.mk
│ │ ├── Makefile_memfault_http_utils.mk
│ │ ├── Makefile_memfault_log.mk
│ │ ├── Makefile_memfault_log_data_source.mk
│ │ ├── Makefile_memfault_log_data_source_timestamps.mk
│ │ ├── Makefile_memfault_log_with_timestamps.mk
│ │ ├── Makefile_memfault_metrics_battery.mk
│ │ ├── Makefile_memfault_metrics_connectivity.mk
│ │ ├── Makefile_memfault_metrics_reliability.mk
│ │ ├── Makefile_memfault_metrics_serializer.mk
│ │ ├── Makefile_memfault_port_lwip_metrics.mk
│ │ ├── Makefile_memfault_port_mbedtls_metrics.mk
│ │ ├── Makefile_memfault_port_nrf5_coredump_regions.mk
│ │ ├── Makefile_memfault_printf_attribute.mk
│ │ ├── Makefile_memfault_ram_backed_coredump_port.mk
│ │ ├── Makefile_memfault_reboot_tracking_serializer.mk
│ │ ├── Makefile_memfault_rle.mk
│ │ ├── Makefile_memfault_root_cert.mk
│ │ ├── Makefile_memfault_sdk_assert.mk
│ │ ├── Makefile_memfault_sdk_metrics_freertos.mk
│ │ ├── Makefile_memfault_self_test.mk
│ │ ├── Makefile_memfault_self_test_component_boot_check.mk
│ │ ├── Makefile_memfault_self_test_coredump_regions.mk
│ │ ├── Makefile_memfault_self_test_coredump_storage.mk
│ │ ├── Makefile_memfault_self_test_data_export.mk
│ │ ├── Makefile_memfault_self_test_device_info.mk
│ │ ├── Makefile_memfault_self_test_reboot_reason.mk
│ │ ├── Makefile_memfault_self_test_time.mk
│ │ ├── Makefile_memfault_self_test_utils.mk
│ │ ├── Makefile_memfault_serializer_helper.mk
│ │ ├── Makefile_memfault_serializer_helper_with_device_serial.mk
│ │ ├── Makefile_memfault_serializer_helper_without_build_id.mk
│ │ ├── Makefile_memfault_session_metrics.mk
│ │ ├── Makefile_memfault_session_metrics_debug.mk
│ │ ├── Makefile_memfault_session_vitals.mk
│ │ ├── Makefile_memfault_task_watchdog.mk
│ │ ├── Makefile_memfault_test_coredump_storage_debug.mk
│ │ ├── Makefile_memfault_trace_event.mk
│ │ ├── Makefile_memfault_trace_event_compact_log.mk
│ │ ├── Makefile_memfault_trace_event_no_isr_log.mk
│ │ ├── Makefile_memfault_user_reboot_reasons.mk
│ │ ├── Makefile_minimal_cbor.mk
│ │ ├── Makefile_ram_reboot_tracking.mk
│ │ └── Makefile_varint.mk
│ ├── mocks/
│ │ ├── mock_memfault_coredump.cpp
│ │ ├── mock_memfault_coredump.h
│ │ ├── mock_memfault_fault_handling.cpp
│ │ ├── mock_memfault_metrics.cpp
│ │ ├── mock_memfault_metrics_reliability.cpp
│ │ ├── mock_memfault_platform_debug_log.cpp
│ │ ├── mock_memfault_platform_debug_log.h
│ │ ├── mock_memfault_platform_system_time.cpp
│ │ └── mock_memfault_reboot_tracking.cpp
│ ├── scripts/
│ │ └── filterGcov.sh
│ ├── src/
│ │ ├── AllTests.cpp
│ │ ├── memfault_test_compact_log_c.h
│ │ ├── test_assert.cpp
│ │ ├── test_memfault_base64.cpp
│ │ ├── test_memfault_batched_events.cpp
│ │ ├── test_memfault_buffered_coredump_storage.cpp
│ │ ├── test_memfault_buffered_coredump_storage_impl.c
│ │ ├── test_memfault_build_id.cpp
│ │ ├── test_memfault_chunk_transport.cpp
│ │ ├── test_memfault_circular_buffer.cpp
│ │ ├── test_memfault_compact_log_c.c
│ │ ├── test_memfault_compact_log_cxx.c
│ │ ├── test_memfault_compact_log_macros.cpp
│ │ ├── test_memfault_compact_log_save_truncation.cpp
│ │ ├── test_memfault_compact_log_serializer.cpp
│ │ ├── test_memfault_coredump.cpp
│ │ ├── test_memfault_coredump_sdk_regions.cpp
│ │ ├── test_memfault_coredump_storage_debug.cpp
│ │ ├── test_memfault_coredump_utils.cpp
│ │ ├── test_memfault_crc16_ccitt.cpp
│ │ ├── test_memfault_custom_data_recording.cpp
│ │ ├── test_memfault_data_export.cpp
│ │ ├── test_memfault_data_packetizer.cpp
│ │ ├── test_memfault_data_source_rle.cpp
│ │ ├── test_memfault_demo_shell.cpp
│ │ ├── test_memfault_event_storage.cpp
│ │ ├── test_memfault_heap_stats.cpp
│ │ ├── test_memfault_heartbeat_metrics.cpp
│ │ ├── test_memfault_heartbeat_metrics_debug.cpp
│ │ ├── test_memfault_heartbeat_metrics_nocustom.cpp
│ │ ├── test_memfault_http_utils.cpp
│ │ ├── test_memfault_log.cpp
│ │ ├── test_memfault_log_data_source.cpp
│ │ ├── test_memfault_log_with_timestamps.cpp
│ │ ├── test_memfault_metrics_battery.cpp
│ │ ├── test_memfault_metrics_connectivity.cpp
│ │ ├── test_memfault_metrics_reliability.cpp
│ │ ├── test_memfault_metrics_serializer.cpp
│ │ ├── test_memfault_minimal_cbor.cpp
│ │ ├── test_memfault_port_lwip_metrics.cpp
│ │ ├── test_memfault_port_mbedtls_metrics.cpp
│ │ ├── test_memfault_port_nrf5_coredump_regions.cpp
│ │ ├── test_memfault_printf_attribute.cpp
│ │ ├── test_memfault_ram_backed_coredump_port.cpp
│ │ ├── test_memfault_ram_reboot_tracking.cpp
│ │ ├── test_memfault_reboot_tracking_serializer.cpp
│ │ ├── test_memfault_rle.cpp
│ │ ├── test_memfault_root_cert.cpp
│ │ ├── test_memfault_sdk_assert.cpp
│ │ ├── test_memfault_sdk_freertos_metrics.cpp
│ │ ├── test_memfault_self_test.cpp
│ │ ├── test_memfault_self_test_component_boot_check.cpp
│ │ ├── test_memfault_self_test_coredump_regions.cpp
│ │ ├── test_memfault_self_test_coredump_storage.cpp
│ │ ├── test_memfault_self_test_data_export.cpp
│ │ ├── test_memfault_self_test_device_info.cpp
│ │ ├── test_memfault_self_test_reboot_reason.cpp
│ │ ├── test_memfault_self_test_time.cpp
│ │ ├── test_memfault_self_test_utils.cpp
│ │ ├── test_memfault_serializer_helper.cpp
│ │ ├── test_memfault_session_metrics.cpp
│ │ ├── test_memfault_session_metrics_debug.cpp
│ │ ├── test_memfault_session_vitals.cpp
│ │ ├── test_memfault_task_watchdog.cpp
│ │ ├── test_memfault_trace_event.cpp
│ │ ├── test_memfault_user_reboot_reasons.cpp
│ │ └── test_memfault_varint.cpp
│ ├── stub_includes/
│ │ ├── FreeRTOS.h
│ │ ├── lwip/
│ │ │ └── stats.h
│ │ ├── mbedtls_mem.h
│ │ ├── memfault_metrics_heartbeat_config.def
│ │ ├── memfault_platform_config.h
│ │ ├── memfault_reboot_reason_user_config.def
│ │ ├── memfault_task_watchdog_config.def
│ │ ├── memfault_trace_reason_user_config.def
│ │ ├── sdk_common.h
│ │ ├── task.h
│ │ └── timers.h
│ ├── stubs/
│ │ ├── stub_assert.c
│ │ ├── stub_component_booted.c
│ │ ├── stub_mbedtls_mem.c
│ │ ├── stub_memfault_coredump.c
│ │ ├── stub_memfault_coredump_regions.c
│ │ ├── stub_memfault_coredump_storage_debug.c
│ │ ├── stub_memfault_log.c
│ │ ├── stub_memfault_log_save.c
│ │ ├── stub_platform.c
│ │ └── stub_reboot_tracking.c
│ └── test.py
└── zephyr/
└── module.yml
Showing preview only (352K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3233 symbols across 446 files)
FILE: components/core/src/arch_arm_cortex_m.c
function memfault_arch_is_inside_isr (line 14) | bool memfault_arch_is_inside_isr(void) {
function memfault_arch_disable_configurable_faults (line 22) | void memfault_arch_disable_configurable_faults(void) {
function MEMFAULT_WEAK (line 30) | MEMFAULT_WEAK void memfault_platform_halt_if_debugging(void) {
FILE: components/core/src/memfault_batched_events.c
function memfault_batched_events_build_header (line 13) | void memfault_batched_events_build_header(size_t num_events,
FILE: components/core/src/memfault_build_id_private.h
type eMemfaultBuildIdType (line 27) | typedef enum {
type sMfltOsVersion (line 36) | typedef struct {
type sMemfaultBuildIdStorage (line 41) | typedef struct {
FILE: components/core/src/memfault_compact_log_serializer.c
function memfault_vlog_compact_serialize (line 32) | bool memfault_vlog_compact_serialize(sMemfaultCborEncoder *encoder, uint...
type eMemfaultCompactLogExtendedReason (line 128) | typedef enum {
function memfault_vlog_compact_serialize_fallback_entry (line 131) | bool memfault_vlog_compact_serialize_fallback_entry(sMemfaultCborEncoder...
function memfault_log_compact_serialize (line 162) | bool memfault_log_compact_serialize(sMemfaultCborEncoder *encoder, uint3...
FILE: components/core/src/memfault_core_utils.c
function memfault_build_info_read (line 36) | bool memfault_build_info_read(sMemfaultBuildInfo *info) {
function prv_nib_to_hex_ascii (line 46) | static char prv_nib_to_hex_ascii(uint8_t val) {
function memfault_build_id_get_string (line 50) | bool memfault_build_id_get_string(char *out_buf, size_t buf_len) {
function memfault_build_info_dump (line 111) | void memfault_build_info_dump(void) {
function memfault_device_info_dump (line 134) | void memfault_device_info_dump(void) {
FILE: components/core/src/memfault_custom_data_recording.c
type sMemfaultCdrEncodedMetadata (line 28) | typedef struct {
type sMfltCdrSourceCtx (line 35) | typedef struct {
function prv_encode_cdr_metadata (line 45) | static bool prv_encode_cdr_metadata(sMemfaultCborEncoder *encoder, sMflt...
function prv_try_get_cdr_source_with_data (line 94) | static void prv_try_get_cdr_source_with_data(sMfltCdrSourceCtx *ctx) {
function prv_has_cdr (line 113) | static bool prv_has_cdr(size_t *total_size) {
function prv_cdr_read (line 139) | static bool prv_cdr_read(uint32_t offset, void *buf, size_t buf_len) {
function prv_cdr_mark_sent (line 173) | static void prv_cdr_mark_sent(void) {
function memfault_cdr_register_source (line 184) | bool memfault_cdr_register_source(const sMemfaultCdrSourceImpl *impl) {
function memfault_cdr_source_reset (line 201) | void memfault_cdr_source_reset(void) {
FILE: components/core/src/memfault_data_export.c
function MEMFAULT_WEAK (line 17) | MEMFAULT_WEAK void memfault_data_export_base64_encoded_chunk(const char ...
function prv_memfault_data_export_chunk (line 22) | static void prv_memfault_data_export_chunk(void *chunk_data, size_t chun...
function MEMFAULT_NO_OPT (line 47) | MEMFAULT_NO_OPT void memfault_data_export_chunk(void *chunk_data, size_t...
function prv_try_send_memfault_data (line 51) | static bool prv_try_send_memfault_data(void) {
function memfault_data_export_dump_chunks (line 64) | void memfault_data_export_dump_chunks(void) {
FILE: components/core/src/memfault_data_packetizer.c
function prv_data_source_has_event_stub (line 25) | static bool prv_data_source_has_event_stub(size_t *event_size) {
function prv_data_source_read_stub (line 30) | static bool prv_data_source_read_stub(MEMFAULT_UNUSED uint32_t offset, M...
function prv_data_source_mark_event_read_stub (line 35) | static void prv_data_source_mark_event_read_stub(void) { }
function MEMFAULT_WEAK (line 67) | MEMFAULT_WEAK bool memfault_data_source_rle_encoder_set_active(
type eMfltMessageType (line 73) | typedef enum {
type sMemfaultDataSource (line 93) | typedef struct MemfaultDataSource {
type sMessageMetadata (line 125) | typedef struct {
type sMfltTransportState (line 130) | typedef struct {
function memfault_packetizer_set_active_sources (line 173) | void memfault_packetizer_set_active_sources(uint32_t mask) {
function prv_reset_packetizer_state (line 178) | static void prv_reset_packetizer_state(void) {
function prv_data_source_chunk_transport_msg_reader (line 186) | static void prv_data_source_chunk_transport_msg_reader(uint32_t offset, ...
function prv_get_source_with_data (line 234) | static bool prv_get_source_with_data(size_t *total_size, sMemfaultDataSo...
function prv_more_messages_to_send (line 260) | static bool prv_more_messages_to_send(sMessageMetadata *msg_metadata) {
function prv_load_next_message_to_send (line 277) | static bool prv_load_next_message_to_send(bool enable_multi_packet_chunks,
function prv_mark_message_send_complete_and_cleanup (line 300) | static void prv_mark_message_send_complete_and_cleanup(void) {
function memfault_packetizer_abort (line 307) | void memfault_packetizer_abort(void) {
function eMemfaultPacketizerStatus (line 311) | eMemfaultPacketizerStatus memfault_packetizer_get_next(void *buf, size_t...
function memfault_packetizer_begin (line 347) | bool memfault_packetizer_begin(const sPacketizerConfig *cfg, sPacketizer...
function memfault_packetizer_data_available (line 369) | bool memfault_packetizer_data_available(void) {
function memfault_packetizer_get_chunk (line 377) | bool memfault_packetizer_get_chunk(void *buf, size_t *buf_len) {
FILE: components/core/src/memfault_data_source_rle.c
type eMemfaultDataSourceRleState (line 47) | typedef enum {
type sMemfaultDataSourceRleEncodeCtx (line 56) | typedef struct {
type sMemfaultDataSourceRleState (line 67) | typedef struct {
function memfault_data_source_rle_encoder_set_active (line 77) | bool memfault_data_source_rle_encoder_set_active(const sMemfaultDataSour...
function prv_data_source_rle_has_more_msgs_prepare (line 87) | static bool prv_data_source_rle_has_more_msgs_prepare(const void *data, ...
function prv_data_source_rle_get_backing_read_offset (line 108) | static uint32_t prv_data_source_rle_get_backing_read_offset(void) {
function prv_data_source_rle_read_msg_prepare (line 126) | static bool prv_data_source_rle_read_msg_prepare(const void *data, size_...
function prv_data_source_rle_build_msg_incremental (line 142) | static uint32_t prv_data_source_rle_build_msg_incremental(uint8_t *buf, ...
function prv_data_source_rle_fill_msg (line 181) | static bool prv_data_source_rle_fill_msg(uint8_t **bufpp, size_t *buf_le...
function prv_data_source_rle_read (line 188) | static bool prv_data_source_rle_read(uint32_t offset, void *buf, size_t ...
function prv_compute_rle_size (line 226) | static size_t prv_compute_rle_size(void) {
function MEMFAULT_WEAK (line 248) | MEMFAULT_WEAK bool memfault_data_source_rle_read_msg(uint32_t offset, vo...
function memfault_data_source_rle_has_more_msgs (line 252) | bool memfault_data_source_rle_has_more_msgs(size_t *total_size_out) {
function memfault_data_source_rle_mark_msg_read (line 270) | void memfault_data_source_rle_mark_msg_read(void) {
FILE: components/core/src/memfault_event_storage.c
function MEMFAULT_WEAK (line 38) | MEMFAULT_WEAK bool memfault_platform_time_get_current(MEMFAULT_UNUSED sM...
function MEMFAULT_WEAK (line 43) | MEMFAULT_WEAK void memfault_lock(void) { }
function MEMFAULT_WEAK (line 45) | MEMFAULT_WEAK void memfault_unlock(void) { }
function MEMFAULT_WEAK (line 48) | MEMFAULT_WEAK void memfault_event_storage_request_persist_callback(
function prv_nonvolatile_event_storage_enabled (line 51) | static bool prv_nonvolatile_event_storage_enabled(void) {
type sMemfaultEventStorageWriteState (line 61) | typedef struct {
type sMemfaultEventStorageReadState (line 66) | typedef struct {
type sMfltEventStorageContext (line 79) | typedef struct {
function sMfltEventStorageSaveState (line 90) | sMfltEventStorageSaveState memfault_event_storage_get_state(void) {
function prv_invoke_request_persist_callback (line 101) | static void prv_invoke_request_persist_callback(void) {
function prv_get_total_event_size (line 118) | static size_t prv_get_total_event_size(sMemfaultEventStorageReadState *s...
function prv_compute_read_state (line 130) | static void prv_compute_read_state(sMemfaultEventStorageReadState *state) {
function prv_has_data_ram (line 162) | static bool prv_has_data_ram(size_t *total_size) {
function prv_event_storage_read_ram (line 187) | static bool prv_event_storage_read_ram(uint32_t offset, void *buf, size_...
function prv_event_storage_mark_event_read_ram (line 250) | static void prv_event_storage_mark_event_read_ram(void) {
function prv_event_storage_storage_begin_write (line 266) | static size_t prv_event_storage_storage_begin_write(void) {
function prv_event_storage_storage_append_data (line 290) | static bool prv_event_storage_storage_append_data(const void *bytes, siz...
function prv_event_storage_storage_finish_write (line 302) | static void prv_event_storage_storage_finish_write(bool rollback) {
function prv_get_size_cb (line 331) | static size_t prv_get_size_cb(void) {
function prv_save_event_to_persistent_storage (line 375) | static bool prv_save_event_to_persistent_storage(void) {
function prv_nv_event_storage_enabled (line 391) | static bool prv_nv_event_storage_enabled(void) {
function memfault_event_storage_persist (line 414) | int memfault_event_storage_persist(void) {
function prv_nv_event_storage_mark_read_cb (line 427) | static void prv_nv_event_storage_mark_read_cb(void) {
function sMemfaultDataSourceImpl (line 439) | static const sMemfaultDataSourceImpl *prv_get_active_event_storage_sourc...
function prv_has_event (line 461) | static bool prv_has_event(size_t *event_size) {
function prv_event_storage_read (line 466) | static bool prv_event_storage_read(uint32_t offset, void *buf, size_t bu...
function prv_event_storage_mark_event_read (line 471) | static void prv_event_storage_mark_event_read(void) {
function memfault_event_storage_bytes_used (line 485) | size_t memfault_event_storage_bytes_used(void) {
function memfault_event_storage_bytes_free (line 495) | size_t memfault_event_storage_bytes_free(void) {
function memfault_event_storage_booted (line 505) | bool memfault_event_storage_booted(void) {
function memfault_event_storage_reset (line 517) | void memfault_event_storage_reset(void) {
FILE: components/core/src/memfault_heap_stats.c
function prv_heap_stats_lock (line 42) | static void prv_heap_stats_lock(void) {
function prv_heap_stats_unlock (line 48) | static void prv_heap_stats_unlock(void) {
function memfault_heap_stats_reset (line 54) | void memfault_heap_stats_reset(void) {
function memfault_heap_stats_empty (line 64) | bool memfault_heap_stats_empty(void) {
function prv_get_previous_entry (line 75) | static uint16_t prv_get_previous_entry(uint16_t search_entry_index) {
function prv_get_new_entry_index (line 93) | static uint16_t prv_get_new_entry_index(void) {
function memfault_heap_stats_increment_in_use_block_count (line 120) | void memfault_heap_stats_increment_in_use_block_count(void) {
function memfault_heap_stats_decrement_in_use_block_count (line 126) | void memfault_heap_stats_decrement_in_use_block_count(void) {
function memfault_heap_stats_malloc (line 130) | void memfault_heap_stats_malloc(const void *lr, const void *ptr, size_t ...
function memfault_heap_stats_free (line 171) | void memfault_heap_stats_free(const void *ptr) {
FILE: components/core/src/memfault_log.c
type sMfltLogStorageRegionInfo (line 37) | typedef struct MfltLogStorageInfo {
type sMfltRamLogger (line 43) | typedef struct {
function sMfltLogSaveState (line 75) | sMfltLogSaveState memfault_log_get_state(void) {
function prv_compute_log_region_crc16 (line 87) | static uint16_t prv_compute_log_region_crc16(void) {
function memfault_log_get_dropped_count (line 92) | uint32_t memfault_log_get_dropped_count(void) {
function memfault_log_get_recorded_count (line 96) | uint32_t memfault_log_get_recorded_count(void) {
function memfault_log_get_regions (line 100) | bool memfault_log_get_regions(sMemfaultLogRegions *regions) {
function prv_build_header (line 122) | static uint8_t prv_build_header(eMemfaultPlatformLogLevel level, eMemfau...
function memfault_log_set_min_save_level (line 135) | void memfault_log_set_min_save_level(eMemfaultPlatformLogLevel min_log_l...
function prv_try_free_space (line 139) | static bool prv_try_free_space(sMfltCircularBuffer *circ_bufp, int bytes...
function prv_iterate (line 192) | static void prv_iterate(MemfaultLogIteratorCallback callback, sMfltLogIt...
function memfault_log_iterate (line 211) | void memfault_log_iterate(MemfaultLogIteratorCallback callback, sMfltLog...
function memfault_log_iter_update_entry (line 217) | bool memfault_log_iter_update_entry(sMfltLogIterator *iter) {
function memfault_log_iter_copy_msg (line 225) | bool memfault_log_iter_copy_msg(sMfltLogIterator *iter, MemfaultLogMsgCo...
type sMfltReadLogCtx (line 232) | typedef struct {
function prv_read_log_iter_callback (line 237) | static bool prv_read_log_iter_callback(sMfltLogIterator *iter) {
function prv_read_log (line 271) | static bool prv_read_log(sMemfaultLog *log) {
function memfault_log_read (line 299) | bool memfault_log_read(sMemfaultLog *log) {
function MEMFAULT_WEAK (line 311) | MEMFAULT_WEAK void memfault_log_export_msg(MEMFAULT_UNUSED eMemfaultPlat...
function memfault_log_export_log (line 316) | void memfault_log_export_log(sMemfaultLog *log) {
function memfault_log_export_logs (line 354) | void memfault_log_export_logs(void) {
function prv_should_log (line 389) | static bool prv_should_log(eMemfaultPlatformLogLevel level) {
function MEMFAULT_WEAK (line 402) | MEMFAULT_WEAK void memfault_log_handle_saved_callback(void) {
function memfault_vlog_save (line 406) | void memfault_vlog_save(eMemfaultPlatformLogLevel level, const char *fmt...
function memfault_log_save (line 428) | void memfault_log_save(eMemfaultPlatformLogLevel level, const char *fmt,...
function prv_log_save (line 435) | static void prv_log_save(eMemfaultPlatformLogLevel level, const void *lo...
function memfault_compact_log_save (line 501) | void memfault_compact_log_save(eMemfaultPlatformLogLevel level, uint32_t...
function memfault_log_save_preformatted (line 541) | void memfault_log_save_preformatted(eMemfaultPlatformLogLevel level, con...
function memfault_log_save_preformatted_nolock (line 546) | void memfault_log_save_preformatted_nolock(eMemfaultPlatformLogLevel lev...
function memfault_log_reset (line 598) | void memfault_log_reset(void) {
function memfault_log_booted (line 604) | bool memfault_log_booted(void) {
FILE: components/core/src/memfault_log_data_source.c
type sMfltLogDataSourceCtx (line 26) | typedef struct {
function prv_log_is_sent (line 34) | static bool prv_log_is_sent(uint8_t hdr) {
type sMfltLogCountingCtx (line 38) | typedef struct {
function prv_log_iterate_counting_callback (line 43) | static bool prv_log_iterate_counting_callback(sMfltLogIterator *iter) {
function memfault_log_trigger_collection (line 53) | void memfault_log_trigger_collection(void) {
function memfault_log_data_source_has_been_triggered (line 81) | bool memfault_log_data_source_has_been_triggered(void) {
type sMfltLogEncodingCtx (line 86) | typedef struct {
function prv_serialize_msg_callback (line 100) | __attribute__((no_sanitize("undefined")))
function prv_log_iterate_encode_callback (line 150) | static bool prv_log_iterate_encode_callback(sMfltLogIterator *iter) {
function prv_encode (line 167) | static bool prv_encode(sMemfaultCborEncoder *encoder, void *iter) {
function prv_init_encoding_ctx (line 194) | static void prv_init_encoding_ctx(sMfltLogEncodingCtx *ctx) {
function prv_has_logs (line 201) | static bool prv_has_logs(size_t *total_size) {
type sMfltLogsDestCtx (line 215) | typedef struct {
function prv_encoder_callback (line 223) | static void prv_encoder_callback(void *encoder_ctx, uint32_t src_offset,...
function prv_logs_read (line 245) | static bool prv_logs_read(uint32_t offset, void *buf, size_t buf_len) {
function prv_log_iterate_mark_sent_callback (line 266) | static bool prv_log_iterate_mark_sent_callback(sMfltLogIterator *iter) {
function prv_logs_mark_sent (line 278) | static void prv_logs_mark_sent(void) {
function memfault_log_data_source_reset (line 298) | void memfault_log_data_source_reset(void) {
function memfault_log_data_source_count_unsent_logs (line 302) | size_t memfault_log_data_source_count_unsent_logs(void) {
function sMfltLogUnsentCount (line 309) | sMfltLogUnsentCount memfault_log_get_unsent_count(void) {
FILE: components/core/src/memfault_log_private.h
function eMemfaultPlatformLogLevel (line 53) | static inline eMemfaultPlatformLogLevel memfault_log_get_level_from_hdr(...
function eMemfaultLogRecordType (line 58) | static inline eMemfaultLogRecordType memfault_log_get_type_from_hdr(uint...
function memfault_log_hdr_is_timestamped (line 62) | static inline bool memfault_log_hdr_is_timestamped(uint8_t hdr) {
type sMfltLogIterator (line 93) | typedef struct {
FILE: components/core/src/memfault_ram_reboot_info_tracking.c
type sMfltRebootReasonData (line 54) | typedef struct {
function prv_check_or_init_struct (line 65) | static bool prv_check_or_init_struct(void) {
function prv_read_reset_info (line 83) | static bool prv_read_reset_info(sMfltResetReasonInfo *info) {
function prv_record_reboot_reason (line 109) | static void prv_record_reboot_reason(eMemfaultRebootReason reboot_reg_re...
function prv_get_unexpected_reboot_occurred (line 123) | static bool prv_get_unexpected_reboot_occurred(void) {
function prv_record_reboot_event (line 142) | static void prv_record_reboot_event(eMemfaultRebootReason reboot_reason,
function MEMFAULT_WEAK (line 165) | MEMFAULT_WEAK void memfault_reboot_tracking_load(sMemfaultRebootTracking...
function MEMFAULT_WEAK (line 169) | MEMFAULT_WEAK void memfault_reboot_tracking_save(const sMemfaultRebootTr...
function memfault_reboot_tracking_boot (line 173) | void memfault_reboot_tracking_boot(void *start_addr, const sResetBootupI...
function memfault_reboot_tracking_mark_reset_imminent (line 199) | void memfault_reboot_tracking_mark_reset_imminent(eMemfaultRebootReason ...
function memfault_reboot_tracking_read_reset_info (line 210) | bool memfault_reboot_tracking_read_reset_info(sMfltResetReasonInfo *info) {
function memfault_reboot_tracking_reset_crash_count (line 222) | void memfault_reboot_tracking_reset_crash_count(void) {
function memfault_reboot_tracking_get_crash_count (line 230) | size_t memfault_reboot_tracking_get_crash_count(void) {
function memfault_reboot_tracking_clear_reset_info (line 238) | void memfault_reboot_tracking_clear_reset_info(void) {
function memfault_reboot_tracking_mark_coredump_saved (line 250) | void memfault_reboot_tracking_mark_coredump_saved(void) {
function memfault_reboot_tracking_get_reboot_reason (line 258) | int memfault_reboot_tracking_get_reboot_reason(sMfltRebootReason *reboot...
function memfault_reboot_tracking_get_unexpected_reboot_occurred (line 271) | int memfault_reboot_tracking_get_unexpected_reboot_occurred(bool *unexpe...
function memfault_reboot_tracking_clear_reboot_reason (line 280) | void memfault_reboot_tracking_clear_reboot_reason(void) {
function memfault_reboot_tracking_booted (line 286) | bool memfault_reboot_tracking_booted(void) {
function memfault_reboot_tracking_metrics_session (line 291) | void memfault_reboot_tracking_metrics_session(bool active, uint32_t inde...
function memfault_reboot_tracking_clear_metrics_sessions (line 303) | void memfault_reboot_tracking_clear_metrics_sessions(void) {
function memfault_reboot_tracking_metrics_session_was_active (line 311) | bool memfault_reboot_tracking_metrics_session_was_active(uint32_t index) {
FILE: components/core/src/memfault_reboot_tracking_private.h
type MEMFAULT_PACKED_STRUCT (line 20) | typedef MEMFAULT_PACKED_STRUCT MfltRebootInfo
type sMfltResetReasonInfo (line 47) | typedef struct MfltResetReasonInfo {
FILE: components/core/src/memfault_reboot_tracking_serializer.c
function prv_serialize_reboot_info (line 25) | static bool prv_serialize_reboot_info(sMemfaultCborEncoder *e, const sMf...
function prv_encode_cb (line 50) | static bool prv_encode_cb(sMemfaultCborEncoder *encoder, void *ctx) {
function memfault_reboot_tracking_compute_worst_case_storage_size (line 55) | size_t memfault_reboot_tracking_compute_worst_case_storage_size(void) {
function memfault_reboot_tracking_collect_reset_info (line 69) | int memfault_reboot_tracking_collect_reset_info(const sMemfaultEventStor...
FILE: components/core/src/memfault_sdk_assert.c
function MEMFAULT_WEAK (line 13) | MEMFAULT_WEAK void memfault_sdk_assert_func_noreturn(void) {
function memfault_sdk_assert_func (line 17) | void memfault_sdk_assert_func(void) {
FILE: components/core/src/memfault_self_test.c
type eDeviceInfoField (line 39) | typedef enum {
function prv_validate_string (line 71) | static bool prv_validate_string(const char *str, size_t len, FieldCharVa...
function is_field_valid (line 82) | static bool is_field_valid(const char *str, eDeviceInfoField field) {
function prv_validate_device_info_field (line 104) | static uint32_t prv_validate_device_info_field(const char *str, eDeviceI...
function prv_validate_device_info (line 113) | static uint32_t prv_validate_device_info(void) {
function prv_validate_build_id (line 134) | static uint32_t prv_validate_build_id(void) {
function prv_device_info_test_describe (line 145) | static void prv_device_info_test_describe(uint32_t results) {
function memfault_self_test_device_info_test (line 160) | uint32_t memfault_self_test_device_info_test(void) {
type eMfltBootComponent (line 174) | typedef enum MfltBootComponent {
function memfault_self_test_component_boot_test (line 204) | uint32_t memfault_self_test_component_boot_test(void) {
function memfault_self_test_data_export_test (line 226) | void memfault_self_test_data_export_test(void) {
function prv_print_region_group_info (line 241) | static void prv_print_region_group_info(const char *group_name, const sM...
function memfault_self_test_coredump_regions_test (line 257) | uint32_t memfault_self_test_coredump_regions_test(void) {
function MEMFAULT_NORETURN (line 297) | MEMFAULT_NORETURN void memfault_self_test_reboot_reason_test(void) {
function memfault_self_test_reboot_reason_test_verify (line 308) | uint32_t memfault_self_test_reboot_reason_test_verify(void) {
function MEMFAULT_NO_OPT (line 331) | MEMFAULT_NO_OPT static uint32_t prv_get_time_since_boot_test(void) {
function prv_platform_time_get_current_test (line 358) | static uint32_t prv_platform_time_get_current_test(void) {
function memfault_self_test_time_test (line 388) | uint32_t memfault_self_test_time_test(void) {
function memfault_self_test_coredump_storage_capacity_test (line 398) | uint32_t memfault_self_test_coredump_storage_capacity_test(void) {
function memfault_self_test_coredump_storage_test (line 412) | uint32_t memfault_self_test_coredump_storage_test(void) {
function memfault_self_test_run (line 443) | int memfault_self_test_run(uint32_t run_flags) {
FILE: components/core/src/memfault_self_test_utils.c
function memfault_self_test_valid_device_serial (line 16) | bool memfault_self_test_valid_device_serial(unsigned char c) {
function memfault_self_test_valid_hw_version_sw_type (line 20) | bool memfault_self_test_valid_hw_version_sw_type(unsigned char c) {
function memfault_self_test_valid_sw_version (line 24) | bool memfault_self_test_valid_sw_version(unsigned char c) {
function memfault_self_test_arg_to_flag (line 48) | uint32_t memfault_self_test_arg_to_flag(const char *arg) {
function memfault_strnlen (line 62) | size_t memfault_strnlen(const char *str, size_t n) {
function MEMFAULT_WEAK (line 74) | MEMFAULT_WEAK void memfault_self_test_platform_delay(MEMFAULT_UNUSED uin...
function MEMFAULT_WEAK (line 78) | MEMFAULT_WEAK bool memfault_self_test_platform_disable_irqs(void) {
function MEMFAULT_WEAK (line 83) | MEMFAULT_WEAK bool memfault_self_test_platform_enable_irqs(void) {
FILE: components/core/src/memfault_serializer_helper.c
function prv_encode_event_key_string_pair (line 32) | static bool prv_encode_event_key_string_pair(sMemfaultCborEncoder *encod...
function prv_encode_device_version_info (line 38) | static bool prv_encode_device_version_info(sMemfaultCborEncoder *e) {
function memfault_serializer_helper_encode_uint32_kv_pair (line 74) | bool memfault_serializer_helper_encode_uint32_kv_pair(sMemfaultCborEncod...
function memfault_serializer_helper_encode_int32_kv_pair (line 80) | bool memfault_serializer_helper_encode_int32_kv_pair(sMemfaultCborEncode...
function memfault_serializer_helper_encode_byte_string_kv_pair (line 86) | bool memfault_serializer_helper_encode_byte_string_kv_pair(sMemfaultCbor...
function prv_encode_event_key_uint32_pair (line 93) | static bool prv_encode_event_key_uint32_pair(sMemfaultCborEncoder *encod...
function memfault_serializer_helper_encode_metadata (line 99) | bool memfault_serializer_helper_encode_metadata(sMemfaultCborEncoder *en...
function memfault_serializer_helper_encode_metadata_with_time (line 108) | bool memfault_serializer_helper_encode_metadata_with_time(sMemfaultCborE...
function memfault_serializer_helper_encode_trace_event (line 161) | bool memfault_serializer_helper_encode_trace_event(sMemfaultCborEncoder *e,
type sMemfaultSerializerHelperEncoderCtx (line 193) | typedef struct {
function prv_encoder_write_cb (line 197) | static void prv_encoder_write_cb(void *ctx, MEMFAULT_UNUSED uint32_t off...
function memfault_serializer_helper_encode_to_storage (line 204) | bool memfault_serializer_helper_encode_to_storage(
function memfault_serializer_helper_read_drop_count (line 234) | uint32_t memfault_serializer_helper_read_drop_count(void) {
function memfault_serializer_helper_compute_size (line 241) | size_t memfault_serializer_helper_compute_size(
function memfault_serializer_helper_check_storage_size (line 249) | bool memfault_serializer_helper_check_storage_size(const sMemfaultEventS...
FILE: components/core/src/memfault_task_watchdog.c
function memfault_task_watchdog_init (line 30) | void memfault_task_watchdog_init(void) {
function prv_memfault_task_watchdog_expired (line 34) | static bool prv_memfault_task_watchdog_expired(struct MemfaultTaskWatchd...
function prv_memfault_task_watchdog_do_check (line 43) | static size_t prv_memfault_task_watchdog_do_check(void) {
function memfault_task_watchdog_check_all (line 57) | void memfault_task_watchdog_check_all(void) {
function memfault_task_watchdog_bookkeep (line 68) | void memfault_task_watchdog_bookkeep(void) {
function memfault_task_watchdog_start (line 73) | void memfault_task_watchdog_start(eMemfaultTaskWatchdogChannel channel_i...
function memfault_task_watchdog_feed (line 80) | void memfault_task_watchdog_feed(eMemfaultTaskWatchdogChannel channel_id) {
function memfault_task_watchdog_stop (line 85) | void memfault_task_watchdog_stop(eMemfaultTaskWatchdogChannel channel_id) {
function MEMFAULT_WEAK (line 92) | MEMFAULT_WEAK void memfault_task_watchdog_platform_refresh_callback(void...
function memfault_task_watchdog_bookkeep (line 96) | void memfault_task_watchdog_bookkeep(void) { }
FILE: components/core/src/memfault_trace_event.c
type sMemfaultTraceEventInfo (line 32) | typedef struct {
function memfault_trace_event_boot (line 54) | int memfault_trace_event_boot(const sMemfaultEventStorageImpl *storage_i...
function prv_encode_cb (line 68) | static bool prv_encode_cb(sMemfaultCborEncoder *encoder, void *ctx) {
type sMemfaultIsrTraceEvent (line 110) | typedef struct {
function prv_trace_event_capture_from_isr (line 122) | static int prv_trace_event_capture_from_isr(sMemfaultTraceEventInfo *tra...
function prv_trace_event_capture (line 147) | static int prv_trace_event_capture(sMemfaultTraceEventInfo *info) {
function memfault_trace_event_try_flush_isr_event (line 159) | int memfault_trace_event_try_flush_isr_event(void) {
function prv_capture_trace_event_info (line 172) | static int prv_capture_trace_event_info(sMemfaultTraceEventInfo *info) {
function memfault_trace_event_capture (line 192) | int memfault_trace_event_capture(eMfltTraceReasonUser reason, void *pc_a...
function memfault_trace_event_with_status_capture (line 201) | int memfault_trace_event_with_status_capture(eMfltTraceReasonUser reason...
function memfault_trace_event_with_log_capture (line 215) | int memfault_trace_event_with_log_capture(eMfltTraceReasonUser reason, v...
function memfault_trace_event_with_compact_log_capture (line 247) | int memfault_trace_event_with_compact_log_capture(eMfltTraceReasonUser r...
function memfault_trace_event_compute_worst_case_storage_size (line 282) | size_t memfault_trace_event_compute_worst_case_storage_size(void) {
function memfault_trace_event_reset (line 294) | void memfault_trace_event_reset(void) {
function memfault_trace_event_booted (line 299) | bool memfault_trace_event_booted(void) {
FILE: components/demo/src/http/memfault_demo_http.c
function memfault_demo_cli_cmd_post_core (line 26) | int memfault_demo_cli_cmd_post_core(MEMFAULT_UNUSED int argc, MEMFAULT_U...
FILE: components/demo/src/memfault_demo_cli_drain_chunks.c
function user_transport_send_chunk_data (line 29) | void user_transport_send_chunk_data(
function prv_try_send_memfault_data (line 32) | static bool prv_try_send_memfault_data(void) {
function memfault_demo_drain_chunk_data (line 45) | int memfault_demo_drain_chunk_data(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
FILE: components/demo/src/memfault_demo_cli_log.c
function memfault_demo_cli_cmd_test_log (line 16) | int memfault_demo_cli_cmd_test_log(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
function memfault_demo_cli_cmd_trigger_logs (line 35) | int memfault_demo_cli_cmd_trigger_logs(MEMFAULT_UNUSED int argc, MEMFAUL...
FILE: components/demo/src/memfault_demo_cli_trace_event.c
function memfault_demo_cli_cmd_trace_event_capture (line 13) | int memfault_demo_cli_cmd_trace_event_capture(int argc, char *argv[]) {
FILE: components/demo/src/memfault_demo_core.c
function memfault_demo_cli_cmd_get_device_info (line 20) | int memfault_demo_cli_cmd_get_device_info(MEMFAULT_UNUSED int argc, MEMF...
function memfault_demo_cli_cmd_system_reboot (line 25) | int memfault_demo_cli_cmd_system_reboot(MEMFAULT_UNUSED int argc, MEMFAU...
FILE: components/demo/src/memfault_demo_shell.c
type MemfaultShellContext (line 41) | struct MemfaultShellContext {
function prv_booted (line 53) | static bool prv_booted(void) {
function prv_send_char (line 57) | static void prv_send_char(char c) {
function prv_echo (line 64) | static void prv_echo(char c) {
function prv_last_char (line 77) | static char prv_last_char(void) {
function prv_is_rx_buffer_full (line 81) | static bool prv_is_rx_buffer_full(void) {
function prv_reset_rx_buffer (line 85) | static void prv_reset_rx_buffer(void) {
function prv_echo_str (line 90) | static void prv_echo_str(const char *str) {
function prv_send_prompt (line 96) | static void prv_send_prompt(void) {
function sMemfaultShellCommand (line 100) | static const sMemfaultShellCommand *prv_find_command(const char *name) {
function prv_process (line 109) | static void prv_process(void) {
function memfault_demo_shell_boot (line 150) | void memfault_demo_shell_boot(const sMemfaultShellImpl *impl) {
function memfault_shell_command_set_extensions (line 158) | void memfault_shell_command_set_extensions(const sMemfaultShellCommand *...
function prv_should_ignore_eol_char (line 167) | static bool prv_should_ignore_eol_char(char c) {
function memfault_demo_shell_receive_char (line 186) | void memfault_demo_shell_receive_char(char c) {
function memfault_shell_help_handler (line 213) | int memfault_shell_help_handler(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSE...
FILE: components/demo/src/memfault_demo_shell_commands.c
function prv_panics_component_required (line 21) | static int prv_panics_component_required(void) {
function MEMFAULT_WEAK (line 26) | MEMFAULT_WEAK int memfault_demo_cli_cmd_get_core(MEMFAULT_UNUSED int argc,
function MEMFAULT_WEAK (line 31) | MEMFAULT_WEAK int memfault_demo_cli_cmd_clear_core(MEMFAULT_UNUSED int a...
function MEMFAULT_WEAK (line 36) | MEMFAULT_WEAK int memfault_demo_cli_cmd_crash(MEMFAULT_UNUSED int argc,
function memfault_demo_cli_cmd_export (line 41) | int memfault_demo_cli_cmd_export(MEMFAULT_UNUSED int argc, MEMFAULT_UNUS...
function MEMFAULT_WEAK (line 48) | MEMFAULT_WEAK void memfault_metrics_heartbeat_debug_print(void) {
function MEMFAULT_WEAK (line 52) | MEMFAULT_WEAK void memfault_metrics_heartbeat_debug_trigger(void) {
function MEMFAULT_WEAK (line 56) | MEMFAULT_WEAK void memfault_metrics_all_sessions_debug_print(void) {
function memfault_demo_cli_cmd_metrics_dump (line 60) | static int memfault_demo_cli_cmd_metrics_dump(int argc, char *argv[]) {
function memfault_demo_cli_cmd_heartbeat (line 78) | int memfault_demo_cli_cmd_heartbeat(MEMFAULT_UNUSED int argc, MEMFAULT_U...
function memfault_demo_cli_cmd_self_test (line 84) | int memfault_demo_cli_cmd_self_test(int argc, char *argv[]) {
FILE: components/demo/src/memfault_demo_watchdog.c
function memfault_demo_cli_cmd_software_watchdog_enable (line 19) | int memfault_demo_cli_cmd_software_watchdog_enable(MEMFAULT_UNUSED int a...
function memfault_demo_cli_cmd_software_watchdog_disable (line 29) | int memfault_demo_cli_cmd_software_watchdog_disable(MEMFAULT_UNUSED int ...
function memfault_demo_cli_cmd_software_watchdog_update_timeout (line 39) | int memfault_demo_cli_cmd_software_watchdog_update_timeout(MEMFAULT_UNUS...
FILE: components/demo/src/panics/memfault_demo_panics.c
function MEMFAULT_NO_OPT (line 32) | MEMFAULT_NO_OPT static void do_some_work_base(char *argv[]) {
function MEMFAULT_NO_OPT (line 39) | MEMFAULT_NO_OPT static void do_some_work1(char *argv[]) {
function MEMFAULT_NO_OPT (line 43) | MEMFAULT_NO_OPT static void do_some_work2(char *argv[]) {
function MEMFAULT_NO_OPT (line 47) | MEMFAULT_NO_OPT static void do_some_work3(char *argv[]) {
function MEMFAULT_NO_OPT (line 51) | MEMFAULT_NO_OPT static void do_some_work4(char *argv[]) {
function MEMFAULT_NO_OPT (line 55) | MEMFAULT_NO_OPT static void do_some_work5(char *argv[]) {
function memfault_demo_cli_cmd_crash (line 59) | int memfault_demo_cli_cmd_crash(int argc, char *argv[]) {
function memfault_demo_cli_cmd_get_core (line 100) | int memfault_demo_cli_cmd_get_core(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
function memfault_demo_cli_cmd_clear_core (line 110) | int memfault_demo_cli_cmd_clear_core(MEMFAULT_UNUSED int argc, MEMFAULT_...
function memfault_demo_cli_cmd_coredump_size (line 116) | int memfault_demo_cli_cmd_coredump_size(MEMFAULT_UNUSED int argc, MEMFAU...
function memfault_demo_cli_cmd_assert (line 124) | int memfault_demo_cli_cmd_assert(int argc, char *argv[]) {
function memfault_demo_cli_cmd_cassert (line 135) | int memfault_demo_cli_cmd_cassert(int argc, char *argv[]) {
function memfault_demo_cli_cmd_hardfault (line 149) | int memfault_demo_cli_cmd_hardfault(MEMFAULT_UNUSED int argc, MEMFAULT_U...
function memfault_demo_cli_cmd_memmanage (line 158) | int memfault_demo_cli_cmd_memmanage(MEMFAULT_UNUSED int argc, MEMFAULT_U...
function memfault_demo_cli_cmd_busfault (line 174) | int memfault_demo_cli_cmd_busfault(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
function memfault_demo_cli_cmd_usagefault (line 188) | int memfault_demo_cli_cmd_usagefault(MEMFAULT_UNUSED int argc, MEMFAULT_...
function memfault_demo_cli_cmd_dataabort (line 201) | int memfault_demo_cli_cmd_dataabort(MEMFAULT_UNUSED int argc, MEMFAULT_U...
function memfault_demo_cli_cmd_prefetchabort (line 208) | int memfault_demo_cli_cmd_prefetchabort(MEMFAULT_UNUSED int argc, MEMFAU...
function memfault_demo_cli_loadaddr (line 220) | int memfault_demo_cli_loadaddr(int argc, char *argv[]) {
FILE: components/http/src/memfault_http_client.c
function memfault_http_build_url (line 20) | bool memfault_http_build_url(char url_buffer[MEMFAULT_HTTP_URL_BUFFER_SI...
function sMfltHttpClient (line 31) | sMfltHttpClient *memfault_http_client_create(void) {
function prv_handle_post_data_response (line 35) | static void prv_handle_post_data_response(const sMfltHttpResponse *respo...
function memfault_http_client_post_data (line 53) | int memfault_http_client_post_data(sMfltHttpClient *client) {
function memfault_http_client_wait_until_requests_completed (line 60) | int memfault_http_client_wait_until_requests_completed(sMfltHttpClient *...
function memfault_http_client_destroy (line 68) | int memfault_http_client_destroy(sMfltHttpClient *client) {
FILE: components/http/src/memfault_http_client_post_chunk.c
function memfault_http_client_post_chunk (line 14) | int memfault_http_client_post_chunk(void) {
FILE: components/http/src/memfault_http_utils.c
function prv_write_msg (line 30) | static bool prv_write_msg(MfltHttpClientSendCb write_callback, void *ctx...
function prv_write_crlf (line 39) | static bool prv_write_crlf(MfltHttpClientSendCb write_callback, void *ct...
function prv_write_host_hdr (line 47) | static bool prv_write_host_hdr(MfltHttpClientSendCb write_callback, void...
function prv_write_user_agent_hdr (line 62) | static bool prv_write_user_agent_hdr(MfltHttpClientSendCb write_callback...
function prv_write_project_key_hdr (line 68) | static bool prv_write_project_key_hdr(MfltHttpClientSendCb write_callbac...
function memfault_http_start_chunk_post (line 85) | bool memfault_http_start_chunk_post(MfltHttpClientSendCb write_callback,...
function prv_write_qparam (line 134) | static bool prv_write_qparam(MfltHttpClientSendCb write_callback, void *...
function memfault_http_get_latest_ota_payload_url (line 140) | bool memfault_http_get_latest_ota_payload_url(MfltHttpClientSendCb write...
function prv_is_number (line 232) | static bool prv_is_number(char c) {
function prv_count_spaces (line 236) | static size_t prv_count_spaces(const char *line, size_t start_offset, si...
function prv_lower (line 248) | static char prv_lower(char in) {
function prv_strcasecmp (line 260) | static bool prv_strcasecmp(const char *line, const char *search_str, siz...
function prv_str_to_dec (line 272) | static int prv_str_to_dec(const char *buf, size_t buf_len, int *value_ou...
function prv_parse_header (line 310) | static bool prv_parse_header(char *line, size_t len, int *content_length...
function prv_parse_status_line (line 337) | static bool prv_parse_status_line(char *line, size_t len, int *http_stat...
function prv_is_cr_lf (line 376) | static bool prv_is_cr_lf(char *buf) {
function prv_parse_http_response (line 380) | static bool prv_parse_http_response(sMemfaultHttpResponseContext *ctx, c...
function memfault_http_parse_response (line 470) | bool memfault_http_parse_response(sMemfaultHttpResponseContext *ctx, con...
function memfault_http_parse_response_header (line 476) | bool memfault_http_parse_response_header(sMemfaultHttpResponseContext *c...
function prv_find_first_occurrence (line 482) | static bool prv_find_first_occurrence(const char *line, size_t total_len...
function prv_find_last_occurrence (line 494) | static bool prv_find_last_occurrence(const char *line, size_t total_len,...
function prv_startswith_str (line 506) | static bool prv_startswith_str(const char *match, size_t match_len, cons...
function prv_is_http_or_https_scheme (line 515) | static size_t prv_is_http_or_https_scheme(const void *uri, size_t total_...
function memfault_http_parse_uri (line 540) | bool memfault_http_parse_uri(const char *uri, size_t uri_len, sMemfaultU...
function memfault_http_get_ota_payload (line 611) | bool memfault_http_get_ota_payload(MfltHttpClientSendCb write_callback, ...
function prv_is_unreserved (line 653) | static bool prv_is_unreserved(char c) {
function memfault_http_needs_escape (line 657) | bool memfault_http_needs_escape(const char *str, size_t len) {
function memfault_http_urlencode (line 666) | int memfault_http_urlencode(const char *inbuf, size_t inbuf_len, char *o...
function memfault_http_get_device_info (line 700) | void memfault_http_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_http_build_latest_ota_url (line 710) | bool memfault_http_build_latest_ota_url(char *buf, size_t buf_len) {
function memfault_http_build_chunk_post_url (line 758) | bool memfault_http_build_chunk_post_url(char *buf, size_t buf_len) {
FILE: components/include/memfault/core/batched_events.h
type sMemfaultBatchedEventsHeader (line 20) | typedef struct {
FILE: components/include/memfault/core/build_info.h
type sMemfaultBuildInfo (line 57) | typedef struct {
FILE: components/include/memfault/core/compact_log_compile_time_checks.h
function MEMFAULT_USED (line 33) | MEMFAULT_USED static void run_printf_like_func_check_(MEMFAULT_UNUSED co...
FILE: components/include/memfault/core/compact_log_helpers.h
type MemfaultLogArgPromotionType (line 89) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE (line 90) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE> { }
type MemfaultLogArgPromotionType (line 93) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE (line 94) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE> { }
type MemfaultLogArgPromotionType (line 97) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE (line 98) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_DOUBLE> { }
type MemfaultLogArgPromotionType (line 101) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_STR (line 102) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_STR> { }
type MemfaultLogArgPromotionType (line 105) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_STR (line 106) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_STR> { }
type MemfaultLogArgPromotionType (line 109) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_STR (line 110) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_STR> { }
type MemfaultLogArgPromotionType (line 113) | struct MemfaultLogArgPromotionType
type MemfaultLogArgPromotionType (line 117) | struct MemfaultLogArgPromotionType
function MEMFAULT_LOG_ARG_PROMOTED_TO_STR (line 118) | int, MEMFAULT_LOG_ARG_PROMOTED_TO_STR> { }
type MemfaultLogArgPromotionType (line 121) | struct MemfaultLogArgPromotionType
type sMemfaultLogFmtElfSectionHeader (line 265) | typedef struct MemfaultLogFmtElfSectionHeader {
FILE: components/include/memfault/core/compiler_ti_arm.h
function MEMFAULT_NAKED_FUNC (line 45) | MEMFAULT_NAKED_FUNC static void *memfault_get_pc(void) {
function MEMFAULT_NAKED_FUNC (line 51) | MEMFAULT_NAKED_FUNC static uint32_t __get_PSP(void) {
FILE: components/include/memfault/core/custom_data_recording.h
type sMemfaultCdrMetadata (line 40) | typedef struct MemfaultCdrMetadata {
type sMemfaultCdrSourceImpl (line 81) | typedef struct MemfaultCdrSourceImpl {
FILE: components/include/memfault/core/data_packetizer.h
type eMemfaultPacketizerStatus (line 39) | typedef enum {
type sPacketizerConfig (line 67) | typedef struct {
type sPacketizerMetadata (line 82) | typedef struct {
type eMfltDataSourceMask (line 140) | typedef enum {
FILE: components/include/memfault/core/data_packetizer_source.h
type sMemfaultDataSourceImpl (line 56) | typedef struct MemfaultDataSourceImpl {
FILE: components/include/memfault/core/errors.h
type MemfaultInternalReturnCode (line 30) | typedef enum MemfaultInternalReturnCode {
FILE: components/include/memfault/core/event_storage.h
type sMemfaultEventStorageImpl (line 39) | typedef struct MemfaultEventStorageImpl sMemfaultEventStorageImpl;
type sMemfaultEventStorageInfo (line 67) | typedef struct MemfaultEventStorageInfo {
type sMemfaultEventStoragePersistCbStatus (line 73) | typedef struct MemfaultEventStoragePersistCbStatus {
type sMfltEventStorageSaveState (line 128) | typedef struct {
FILE: components/include/memfault/core/event_storage_implementation.h
type MemfaultEventStorageImpl (line 22) | struct MemfaultEventStorageImpl {
FILE: components/include/memfault/core/heap_stats_impl.h
type sMfltHeapStatEntry (line 29) | typedef struct MfltHeapStatEntry {
type sMfltHeapStats (line 47) | typedef struct MfltHeapStats {
FILE: components/include/memfault/core/log.h
type eMemfaultLogRecordType (line 133) | typedef enum {
type sMemfaultLog (line 139) | typedef struct {
type sMfltLogUnsentCount (line 244) | typedef struct {
type sMfltLogSaveState (line 252) | typedef struct {
FILE: components/include/memfault/core/log_impl.h
type sMemfaultLogMemoryRegion (line 27) | typedef struct {
type sMemfaultLogRegions (line 32) | typedef struct {
FILE: components/include/memfault/core/platform/debug_log.h
type eMemfaultPlatformLogLevel (line 22) | typedef enum {
FILE: components/include/memfault/core/platform/device_info.h
type sMemfaultDeviceInfo (line 24) | typedef struct MemfaultDeviceInfo {
FILE: components/include/memfault/core/platform/nonvolatile_event_storage.h
type sMemfaultNonVolatileEventStorageImpl (line 25) | typedef struct MemfaultNonVolatileEventStorageImpl {
FILE: components/include/memfault/core/platform/system_time.h
type eMemfaultCurrentTimeType (line 19) | typedef enum {
type sMemfaultCurrentTime (line 26) | typedef struct {
FILE: components/include/memfault/core/reboot_reason_types.h
type eMemfaultRebootReason (line 27) | typedef enum MfltResetReason {
FILE: components/include/memfault/core/reboot_tracking.h
type sResetBootupInfo (line 36) | typedef struct BootupInfo {
type sMfltRebootReason (line 55) | typedef struct MfltRebootType {
type sMfltRebootTrackingRegInfo (line 92) | typedef struct MfltRebootTrackingRegInfo {
type MEMFAULT_PACKED_STRUCT (line 248) | typedef MEMFAULT_PACKED_STRUCT MemfaultRebootTrackingStorage
FILE: components/include/memfault/core/self_test.h
type eMemfaultSelfTestFlag (line 17) | typedef enum {
FILE: components/include/memfault/core/serializer_helper.h
type sMemfaultTraceEventHelperInfo (line 42) | typedef struct MemfaultTraceEventHelperInfo {
FILE: components/include/memfault/core/serializer_key_ids.h
type eMemfaultEventKey (line 18) | typedef enum {
type eMemfaultEventType (line 33) | typedef enum {
type eMemfaultHeartbeatInfoKey (line 43) | typedef enum {
type eMemfaultTraceInfoEventKey (line 49) | typedef enum {
type eMemfaultLogErrorInfoKey (line 62) | typedef enum {
type eMemfaultCdrInfoKey (line 70) | typedef enum {
FILE: components/include/memfault/core/task_watchdog.h
type kMemfaultTaskWatchdogChannel_NumChannels (line 74) | typedef enum {
FILE: components/include/memfault/core/task_watchdog_impl.h
type MemfaultTaskWatchdogChannelState (line 25) | enum MemfaultTaskWatchdogChannelState {
type MemfaultTaskWatchdogChannel (line 30) | struct MemfaultTaskWatchdogChannel {
type sMemfaultTaskWatchdogInfo (line 36) | typedef struct MemfaultTaskWatchdogInfo {
FILE: components/include/memfault/core/trace_reason_user.h
type MfltTraceReasonUser (line 70) | enum MfltTraceReasonUser {
FILE: components/include/memfault/demo/shell.h
type sMemfaultShellImpl (line 16) | typedef struct MemfaultShellImpl {
FILE: components/include/memfault/demo/shell_commands.h
type sMemfaultShellCommand (line 19) | typedef struct MemfaultShellCommand {
FILE: components/include/memfault/http/http_client.h
type sMemfaultHttpApi (line 29) | typedef struct {
type sMfltHttpClientConfig (line 37) | typedef struct MfltHttpClientConfig {
type sMfltHttpClient (line 92) | typedef struct MfltHttpClient sMfltHttpClient;
type eMfltPostDataStatus (line 106) | typedef enum {
FILE: components/include/memfault/http/platform/http_client.h
type sMfltHttpResponse (line 29) | typedef struct MfltHttpResponse sMfltHttpResponse;
FILE: components/include/memfault/http/utils.h
type eMfltHttpParseStatus (line 81) | typedef enum MfltHttpParseStatus {
type eMfltHttpParsePhase (line 88) | typedef enum MfltHttpParsePhase {
type sMemfaultHttpResponseContext (line 94) | typedef struct {
type eMemfaultUriScheme (line 144) | typedef enum {
type sMemfaultUriInfo (line 151) | typedef struct {
FILE: components/include/memfault/metrics/connectivity.h
type eMemfaultMetricsConnectivityState (line 72) | typedef enum {
FILE: components/include/memfault/metrics/ids_impl.h
type eMfltMetricsIndexV2 (line 85) | typedef enum MfltMetricsIndex {
type eMfltMetricsIndexV2 (line 90) | typedef eMfltMetricsIndexV2 eMfltMetricsIndex;
type MemfaultMetricId (line 273) | typedef struct {
FILE: components/include/memfault/metrics/metrics.h
type eMemfaultMetricType (line 44) | typedef enum MemfaultMetricValueType {
type sMemfaultMetricBootInfo (line 148) | typedef struct MemfaultMetricsBootInfo {
FILE: components/include/memfault/metrics/platform/battery.h
type sMfltPlatformBatterySoc (line 18) | typedef struct MfltPlatformBatterySoc {
FILE: components/include/memfault/metrics/reliability.h
type sMemfaultMetricsReliabilityCtx (line 16) | typedef struct {
FILE: components/include/memfault/metrics/utils.h
type sMemfaultMetricInfo (line 28) | typedef struct {
FILE: components/include/memfault/panics/arch/arm/aarch64.h
function MEMFAULT_PACKED_STRUCT (line 21) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/arch/arm/cortex_m.h
type MEMFAULT_PACKED_STRUCT (line 20) | typedef MEMFAULT_PACKED_STRUCT MfltExceptionFrame
function MEMFAULT_PACKED_STRUCT (line 33) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/arch/arm/v7_a_r.h
function MEMFAULT_PACKED_STRUCT (line 23) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/arch/posix/posix.h
function MEMFAULT_PACKED_STRUCT (line 21) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/arch/riscv/riscv.h
function MEMFAULT_PACKED_STRUCT (line 21) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/arch/xtensa/xtensa.h
type eMemfaultEsp32RegCollectionType (line 20) | typedef enum {
function MEMFAULT_PACKED_STRUCT (line 31) | MEMFAULT_PACKED_STRUCT MfltRegState {
FILE: components/include/memfault/panics/coredump.h
type sMemfaultCoredumpSaveInfo (line 23) | typedef struct MemfaultCoredumpSaveInfo {
FILE: components/include/memfault/panics/coredump_impl.h
type eMfltCoredumpBlockType (line 26) | typedef enum MfltCoredumpBlockType {
type sMfltCachedBlock (line 43) | typedef struct MfltCachedBlock {
FILE: components/include/memfault/panics/fault_handling.h
type sMemfaultAssertInfo (line 22) | typedef struct MemfaultAssertInfo {
FILE: components/include/memfault/panics/platform/coredump.h
type sMfltRegState (line 28) | typedef struct MfltRegState sMfltRegState;
type eMfltCoredumpRegionType (line 30) | typedef enum MfltCoredumpRegionType {
type sMfltCoredumpRegion (line 44) | typedef struct MfltCoredumpRegion {
type sCoredumpCrashInfo (line 50) | typedef struct CoredumpCrashInfo {
type sMfltCoredumpStorageInfo (line 100) | typedef struct MfltCoredumpStorageInfo {
FILE: components/include/memfault/util/align.h
type uMemfaultMaxAlignType (line 22) | typedef union {
FILE: components/include/memfault/util/cbor.h
type sMemfaultCborEncoder (line 26) | typedef struct MemfaultCborEncoder sMemfaultCborEncoder;
type MemfaultCborEncoder (line 180) | struct MemfaultCborEncoder {
FILE: components/include/memfault/util/chunk_transport.h
type sMfltChunkTransportCtx (line 39) | typedef struct {
FILE: components/include/memfault/util/circular_buffer.h
type sMfltCircularBuffer (line 24) | typedef struct {
FILE: components/include/memfault/util/rle.h
type eMemfaultRleState (line 28) | typedef enum {
type sMemfaultRleWriteInfo (line 34) | typedef struct {
type sMemfaultRleCtx (line 48) | typedef struct {
FILE: components/include/memfault/version.h
type sMfltSdkVersion (line 16) | typedef struct {
FILE: components/metrics/src/memfault_metrics.c
type sMemfaultMetricValues (line 139) | typedef struct {
type sMemfaultMetricValueMetadata (line 157) | typedef struct MemfaultMetricValueMetadata {
type sMemfaultMetricValueInfo (line 166) | typedef struct MemfaultMetricValueInfo {
type sMemfaultMetricsContext (line 173) | struct sMemfaultMetricsContext {
type sMemfaultMetricKVPair (line 420) | typedef struct MemfaultMetricKVPair {
type eMfltMetricKeyToValueIndex (line 546) | typedef enum MfltMetricKeyToValueIndex {
type eMfltMetricsTimerIndex (line 637) | typedef enum MfltTimerIndex {
function MEMFAULT_WEAK (line 667) | MEMFAULT_WEAK void memfault_metrics_heartbeat_collect_data(void) { }
function MEMFAULT_WEAK (line 669) | MEMFAULT_WEAK void memfault_metrics_heartbeat_collect_sdk_data(void) { }
function prv_memfault_collect_log_metrics (line 672) | static void prv_memfault_collect_log_metrics(void) {
function prv_collect_builtin_data (line 691) | static void prv_collect_builtin_data(void) {
function sMemfaultMetricValueMetadata (line 724) | static sMemfaultMetricValueMetadata *prv_find_timer_metadatap(eMfltMetri...
function prv_read_write_is_value_set (line 745) | static bool prv_read_write_is_value_set(MemfaultMetricId id, bool write) {
function prv_clear_is_value_set (line 759) | static void prv_clear_is_value_set(eMfltMetricKeyToValueIndex key) {
function eMemfaultMetricType (line 769) | static eMemfaultMetricType prv_find_value_for_key(MemfaultMetricId id,
function prv_metric_iterator (line 818) | static void prv_metric_iterator(void *ctx, MemfaultMetricKvIteratorCb cb) {
function sMemfaultMetricKVPair (line 833) | static const sMemfaultMetricKVPair *prv_find_kvpair_for_key(MemfaultMetr...
function prv_find_value_info_for_type (line 842) | static int prv_find_value_info_for_type(MemfaultMetricId key, eMemfaultM...
function prv_set_value_for_key (line 856) | static void prv_set_value_for_key(MemfaultMetricId key, union MemfaultMe...
function prv_find_and_set_value_for_key (line 862) | static int prv_find_and_set_value_for_key(MemfaultMetricId key, eMemfaul...
function memfault_metrics_heartbeat_set_signed (line 875) | int memfault_metrics_heartbeat_set_signed(MemfaultMetricId key, int32_t ...
function memfault_metrics_heartbeat_set_unsigned (line 886) | int memfault_metrics_heartbeat_set_unsigned(MemfaultMetricId key, uint32...
function memfault_metrics_heartbeat_set_string (line 897) | int memfault_metrics_heartbeat_set_string(MemfaultMetricId key, const ch...
type eMemfaultTimerOp (line 920) | typedef enum {
function prv_update_timer_metric (line 926) | static bool prv_update_timer_metric(const sMemfaultMetricValueInfo *valu...
function prv_find_timer_metric_and_update (line 973) | static int prv_find_timer_metric_and_update(MemfaultMetricId key, eMemfa...
function memfault_metrics_heartbeat_timer_start (line 987) | int memfault_metrics_heartbeat_timer_start(MemfaultMetricId key) {
function memfault_metrics_heartbeat_timer_stop (line 995) | int memfault_metrics_heartbeat_timer_stop(MemfaultMetricId key) {
function prv_tally_and_update_timer_cb (line 1003) | static bool prv_tally_and_update_timer_cb(MEMFAULT_UNUSED void *ctx,
function prv_reset_metrics (line 1014) | static void prv_reset_metrics(bool full_reset, eMfltMetricsSessionIndex ...
function prv_heartbeat_timer_update (line 1065) | static void prv_heartbeat_timer_update(void) {
function prv_heartbeat_update (line 1071) | static void prv_heartbeat_update(void) {
function prv_heartbeat_timer (line 1078) | static void prv_heartbeat_timer(void) {
function prv_find_key_and_add (line 1087) | static int prv_find_key_and_add(MemfaultMetricId key, int32_t amount) {
function memfault_metrics_heartbeat_add (line 1132) | int memfault_metrics_heartbeat_add(MemfaultMetricId key, int32_t amount) {
function prv_find_key_of_type (line 1145) | static int prv_find_key_of_type(MemfaultMetricId key, eMemfaultMetricTyp...
function memfault_metrics_heartbeat_read_unsigned (line 1164) | int memfault_metrics_heartbeat_read_unsigned(MemfaultMetricId key, uint3...
function memfault_metrics_heartbeat_read_signed (line 1182) | int memfault_metrics_heartbeat_read_signed(MemfaultMetricId key, int32_t...
function memfault_metrics_heartbeat_timer_read (line 1200) | int memfault_metrics_heartbeat_timer_read(MemfaultMetricId key, uint32_t...
function memfault_metrics_heartbeat_read_string (line 1218) | int memfault_metrics_heartbeat_read_string(MemfaultMetricId key, char *r...
function prv_metrics_session_start (line 1247) | static int prv_metrics_session_start(eMfltMetricsSessionIndex session_ke...
function memfault_metrics_session_start (line 1274) | int memfault_metrics_session_start(eMfltMetricsSessionIndex session_key) {
function prv_metrics_session_end (line 1278) | static int prv_metrics_session_end(eMfltMetricsSessionIndex session_key,...
function memfault_metrics_session_end (line 1307) | int memfault_metrics_session_end(eMfltMetricsSessionIndex session_key) {
function memfault_metrics_session_reset (line 1311) | void memfault_metrics_session_reset(eMfltMetricsSessionIndex session_key) {
function memfault_metrics_session_register_start_cb (line 1324) | void memfault_metrics_session_register_start_cb(eMfltMetricsSessionIndex...
function memfault_metrics_session_register_end_cb (line 1331) | void memfault_metrics_session_register_end_cb(eMfltMetricsSessionIndex s...
type sMetricHeartbeatIterateCtx (line 1338) | typedef struct {
function prv_metrics_heartbeat_iterate_cb (line 1343) | static bool prv_metrics_heartbeat_iterate_cb(void *ctx, const sMemfaultM...
function memfault_metrics_heartbeat_iterate (line 1361) | void memfault_metrics_heartbeat_iterate(MemfaultMetricIteratorCallback c...
type sGetNumMetricsCtx (line 1373) | typedef struct {
function prv_get_num_metrics_iter_cb (line 1378) | static bool prv_get_num_metrics_iter_cb(void *ctx, const sMemfaultMetric...
function prv_get_num_metrics (line 1388) | static size_t prv_get_num_metrics(eMfltMetricsSessionIndex session_key) {
function memfault_metrics_heartbeat_get_num_metrics (line 1396) | size_t memfault_metrics_heartbeat_get_num_metrics(void) {
function memfault_metrics_session_get_num_metrics (line 1400) | size_t memfault_metrics_session_get_num_metrics(eMfltMetricsSessionIndex...
type sMetricDebugPrintCtx (line 1417) | typedef struct {
function prv_metrics_debug_print (line 1422) | static bool prv_metrics_debug_print(void *ctx, const sMemfaultMetricInfo...
function prv_all_sessions_debug_print_filter (line 1467) | static bool prv_all_sessions_debug_print_filter(MEMFAULT_UNUSED eMfltMet...
function prv_session_debug_print_filter (line 1473) | static bool prv_session_debug_print_filter(eMfltMetricsSessionIndex ctx_...
function memfault_metrics_session_debug_print (line 1478) | void memfault_metrics_session_debug_print(eMfltMetricsSessionIndex sessi...
function memfault_metrics_all_sessions_debug_print (line 1488) | void memfault_metrics_all_sessions_debug_print(void) {
function memfault_metrics_heartbeat_debug_print (line 1497) | void memfault_metrics_heartbeat_debug_print(void) {
function memfault_metrics_heartbeat_debug_trigger (line 1501) | void memfault_metrics_heartbeat_debug_trigger(void) {
function memfault_metrics_heartbeat_collect (line 1505) | void memfault_metrics_heartbeat_collect(void) {
function prv_session_check_for_unexpected_reboot (line 1513) | static void prv_session_check_for_unexpected_reboot(void) {
function memfault_metrics_boot (line 1567) | int memfault_metrics_boot(const sMemfaultEventStorageImpl *storage_impl,
FILE: components/metrics/src/memfault_metrics_battery.c
function prv_accumulate_discharge_session_drop (line 29) | static void prv_accumulate_discharge_session_drop(bool session_valid,
function memfault_metrics_battery_stopped_discharging (line 61) | void memfault_metrics_battery_stopped_discharging(void) {
function prv_soc_is_valid (line 65) | static bool prv_soc_is_valid(int32_t soc) {
function memfault_metrics_battery_collect_data (line 70) | void memfault_metrics_battery_collect_data(void) {
function memfault_metrics_battery_boot (line 130) | void memfault_metrics_battery_boot(void) {
FILE: components/metrics/src/memfault_metrics_connectivity.c
function memfault_metrics_connectivity_record_sync_success (line 19) | void memfault_metrics_connectivity_record_sync_success(void) {
function memfault_metrics_connectivity_record_sync_failure (line 23) | void memfault_metrics_connectivity_record_sync_failure(void) {
function memfault_metrics_connectivity_record_memfault_sync_success (line 29) | void memfault_metrics_connectivity_record_memfault_sync_success(void) {
function memfault_metrics_connectivity_record_memfault_sync_failure (line 33) | void memfault_metrics_connectivity_record_memfault_sync_failure(void) {
function memfault_metrics_connectivity_connected_state_change (line 39) | void memfault_metrics_connectivity_connected_state_change(eMemfaultMetri...
FILE: components/metrics/src/memfault_metrics_reliability.c
function memfault_metrics_reliability_boot (line 16) | void memfault_metrics_reliability_boot(sMemfaultMetricsReliabilityCtx *c...
function sMemfaultMetricsReliabilityCtx (line 28) | sMemfaultMetricsReliabilityCtx *memfault_metrics_reliability_get_ctx(voi...
function memfault_metrics_reliability_collect (line 33) | void memfault_metrics_reliability_collect(void) {
FILE: components/metrics/src/memfault_metrics_serializer.c
type sMemfaultSerializerState (line 29) | typedef struct {
function prv_metric_heartbeat_write_integer (line 36) | static bool prv_metric_heartbeat_write_integer(sMemfaultSerializerState ...
function prv_metric_heartbeat_writer (line 57) | static bool prv_metric_heartbeat_writer(void *ctx, const sMemfaultMetric...
function prv_serialize_latest_heartbeat_and_deinit (line 93) | static bool prv_serialize_latest_heartbeat_and_deinit(sMemfaultSerialize...
function prv_encode_cb (line 119) | static bool prv_encode_cb(MEMFAULT_UNUSED sMemfaultCborEncoder *encoder,...
function prv_compute_worst_case_size (line 124) | static size_t prv_compute_worst_case_size(eMfltMetricsSessionIndex sessi...
function memfault_metrics_heartbeat_compute_worst_case_storage_size (line 130) | size_t memfault_metrics_heartbeat_compute_worst_case_storage_size(void) {
function memfault_metrics_session_compute_worst_case_storage_size (line 134) | size_t memfault_metrics_session_compute_worst_case_storage_size(eMfltMet...
function memfault_metrics_heartbeat_serialize (line 138) | bool memfault_metrics_heartbeat_serialize(const sMemfaultEventStorageImp...
function memfault_metrics_session_serialize (line 142) | bool memfault_metrics_session_serialize(const sMemfaultEventStorageImpl ...
FILE: components/panics/src/memfault_coredump.c
type MEMFAULT_PACKED_STRUCT (line 33) | typedef MEMFAULT_PACKED_STRUCT MfltCoredumpHeader
type eMfltCoredumpFooterFlags (line 43) | typedef enum MfltCoredumpFooterFlags {
type MEMFAULT_PACKED_STRUCT (line 47) | typedef MEMFAULT_PACKED_STRUCT MfltCoredumpFooter
type MEMFAULT_PACKED_STRUCT (line 55) | typedef MEMFAULT_PACKED_STRUCT MfltCoredumpBlock
type MEMFAULT_PACKED_STRUCT (line 63) | typedef MEMFAULT_PACKED_STRUCT MfltTraceReasonBlock
type eMfltCoredumpMachineType (line 97) | typedef enum MfltCoredumpMachineType {
type MEMFAULT_PACKED_STRUCT (line 110) | typedef MEMFAULT_PACKED_STRUCT MfltMachineTypeBlock
type sMfltCoredumpWriteCtx (line 115) | typedef struct {
function prv_fixup_if_cached_block (line 135) | static bool prv_fixup_if_cached_block(sMfltCoredumpRegion *region, uint3...
function prv_platform_coredump_write (line 159) | static bool prv_platform_coredump_write(const void *data, size_t len,
function prv_write_block_with_address (line 173) | static bool prv_write_block_with_address(eMfltCoredumpBlockType block_type,
function prv_write_non_memory_block (line 230) | static bool prv_write_non_memory_block(eMfltCoredumpBlockType block_type...
function eMfltCoredumpBlockType (line 237) | static eMfltCoredumpBlockType prv_region_type_to_storage_type(eMfltCored...
function eMfltCoredumpMachineType (line 250) | static eMfltCoredumpMachineType prv_get_machine_type(void) {
function prv_write_device_info_blocks (line 284) | static bool prv_write_device_info_blocks(sMfltCoredumpWriteCtx *ctx) {
function prv_write_coredump_header (line 336) | static bool prv_write_coredump_header(size_t total_coredump_size, sMfltC...
function prv_write_trace_reason (line 345) | static bool prv_write_trace_reason(sMfltCoredumpWriteCtx *ctx, uint32_t ...
function prv_insert_padding_if_necessary (line 356) | static void prv_insert_padding_if_necessary(sMfltCoredumpWriteCtx *write...
function prv_get_info_and_header (line 376) | static bool prv_get_info_and_header(sMfltCoredumpHeader *hdr_out,
function prv_coredump_get_header (line 398) | static bool prv_coredump_get_header(sMfltCoredumpHeader *hdr_out,
function prv_coredump_header_is_valid (line 403) | static bool prv_coredump_header_is_valid(const sMfltCoredumpHeader *hdr) {
function prv_write_regions (line 407) | static bool prv_write_regions(sMfltCoredumpWriteCtx *write_ctx, const sM...
function prv_write_coredump_sections (line 434) | static bool prv_write_coredump_sections(const sMemfaultCoredumpSaveInfo ...
function MEMFAULT_WEAK (line 547) | MEMFAULT_WEAK bool memfault_platform_coredump_save_begin(void) {
function MEMFAULT_WEAK (line 551) | MEMFAULT_WEAK bool memfault_port_coredump_save_begin(void) {
function memfault_coredump_get_save_size (line 555) | size_t memfault_coredump_get_save_size(const sMemfaultCoredumpSaveInfo *...
function memfault_coredump_save (line 562) | bool memfault_coredump_save(const sMemfaultCoredumpSaveInfo *save_info) {
function memfault_coredump_has_valid_coredump (line 568) | bool memfault_coredump_has_valid_coredump(size_t *total_size_out) {
function MEMFAULT_WEAK (line 585) | MEMFAULT_WEAK bool memfault_coredump_read(uint32_t offset, void *buf, si...
FILE: components/panics/src/memfault_coredump_regions_armv7.c
function memfault_coredump_cache_fault_regs (line 128) | void memfault_coredump_cache_fault_regs(void) {
function sMfltCoredumpRegion (line 151) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
FILE: components/panics/src/memfault_coredump_sdk_regions.c
function sMfltCoredumpRegion (line 43) | const sMfltCoredumpRegion *memfault_coredump_get_sdk_regions(size_t *num...
FILE: components/panics/src/memfault_coredump_storage_debug.c
type eMemfaultCoredumpStorageTestOp (line 34) | typedef enum {
type eMemfaultCoredumpStorageResult (line 42) | typedef enum {
type sMemfaultCoredumpStorageTestResult (line 49) | typedef struct {
function prv_record_failure (line 60) | static void prv_record_failure(eMemfaultCoredumpStorageTestOp op,
function prv_scrub_read_buf (line 74) | static void prv_scrub_read_buf(void) {
function prv_verify_erased (line 79) | static bool prv_verify_erased(uint8_t byte) {
function memfault_coredump_storage_debug_test_begin (line 86) | bool memfault_coredump_storage_debug_test_begin(void) {
function prv_verify_coredump_clear_operation (line 221) | static bool prv_verify_coredump_clear_operation(void) {
function prv_log_error_hexdump (line 244) | static void prv_log_error_hexdump(const char *prefix, const uint8_t *buf...
function memfault_coredump_storage_debug_test_finish (line 260) | bool memfault_coredump_storage_debug_test_finish(void) {
FILE: components/panics/src/memfault_coredump_utils.c
function memfault_coredump_storage_check_size (line 12) | bool memfault_coredump_storage_check_size(void) {
function memfault_coredump_size_and_storage_capacity (line 25) | void memfault_coredump_size_and_storage_capacity(size_t *total_size, siz...
FILE: components/panics/src/memfault_fault_handling_aarch64.c
function memfault_platform_halt_if_debugging (line 19) | void memfault_platform_halt_if_debugging(void) { }
function memfault_arch_is_inside_isr (line 20) | bool memfault_arch_is_inside_isr(void) {
function MEMFAULT_WEAK (line 24) | MEMFAULT_WEAK void memfault_platform_fault_handler(MEMFAULT_UNUSED const...
function sMfltCoredumpRegion (line 27) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
function MEMFAULT_NORETURN (line 34) | MEMFAULT_NORETURN void memfault_fault_handler(const sMfltRegState *regs,
function MEMFAULT_NORETURN (line 69) | MEMFAULT_NORETURN static void prv_fault_handling_assert(void *pc, void *lr,
function memfault_fault_handling_assert (line 85) | void memfault_fault_handling_assert(void *pc, void *lr) {
function memfault_fault_handling_assert_extra (line 89) | void memfault_fault_handling_assert_extra(void *pc, void *lr, sMemfaultA...
function memfault_coredump_storage_compute_size_required (line 93) | size_t memfault_coredump_storage_compute_size_required(void) {
FILE: components/panics/src/memfault_fault_handling_arm.c
type MEMFAULT_PACKED_STRUCT (line 22) | typedef MEMFAULT_PACKED_STRUCT MfltCortexMRegs
function memfault_coredump_storage_compute_size_required (line 45) | size_t memfault_coredump_storage_compute_size_required(void) {
function prv_read_psp_reg (line 73) | static uint32_t prv_read_psp_reg(void) {
function prv_read_msp_reg (line 78) | static uint32_t prv_read_msp_reg(void) {
function prv_read_psp_reg (line 85) | static uint32_t prv_read_psp_reg(void) {
function prv_read_msp_reg (line 89) | static uint32_t prv_read_msp_reg(void) {
function prv_read_psp_reg (line 95) | static uint32_t prv_read_psp_reg(void) {
function prv_read_msp_reg (line 101) | static uint32_t prv_read_msp_reg(void) {
function MEMFAULT_WEAK (line 112) | MEMFAULT_WEAK void memfault_platform_fault_handler(MEMFAULT_UNUSED const...
function MEMFAULT_USED (line 116) | MEMFAULT_USED void memfault_fault_handler(const sMfltRegState *regs, eMe...
function memfault_fault_handling_shim (line 221) | __forceinline void memfault_fault_handling_shim(int reason) {
function MEMFAULT_NAKED_FUNC (line 279) | MEMFAULT_NAKED_FUNC void MemoryManagement_Handler(void) {
function MEMFAULT_NAKED_FUNC (line 330) | MEMFAULT_NAKED_FUNC void memfault_fault_handling_shim(void /* int reason...
function MEMFAULT_NAKED_FUNC (line 341) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_HARD_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 346) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_MEMORY_MANAGEMENT(void) {
function MEMFAULT_NAKED_FUNC (line 351) | MEMFAULT_NAKED_FUNC void MemoryManagement_Handler(void) {
function MEMFAULT_NAKED_FUNC (line 357) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_BUS_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 362) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_USAGE_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 367) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_NMI(void) {
function MEMFAULT_NAKED_FUNC (line 372) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_WATCHDOG(void) {
function MEMFAULT_NAKED_FUNC (line 431) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_HARD_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 435) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_MEMORY_MANAGEMENT(void) {
function MEMFAULT_NAKED_FUNC (line 441) | MEMFAULT_NAKED_FUNC void MemoryManagement_Handler(void) {
function MEMFAULT_NAKED_FUNC (line 446) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_BUS_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 450) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_USAGE_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 454) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_NMI(void) {
function MEMFAULT_NAKED_FUNC (line 458) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_WATCHDOG(void) {
function MEMFAULT_NAKED_FUNC (line 532) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_HARD_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 536) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_MEMORY_MANAGEMENT(void) {
function MEMFAULT_NAKED_FUNC (line 542) | MEMFAULT_NAKED_FUNC void MemoryManagement_Handler(void) {
function MEMFAULT_NAKED_FUNC (line 547) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_BUS_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 551) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_USAGE_FAULT(void) {
function MEMFAULT_NAKED_FUNC (line 555) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_NMI(void) {
function MEMFAULT_NAKED_FUNC (line 559) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_WATCHDOG(void) {
function MEMFAULT_ASSERT_TRAP (line 581) | __forceinline void MEMFAULT_ASSERT_TRAP(void) {
function MEMFAULT_ASSERT_TRAP (line 595) | void MEMFAULT_ASSERT_TRAP(void) {
function prv_fault_handling_assert (line 609) | static void
function MEMFAULT_NO_OPT (line 642) | MEMFAULT_NO_OPT void memfault_fault_handling_assert(void *pc, void *lr) {
function MEMFAULT_NO_OPT (line 653) | MEMFAULT_NO_OPT void memfault_fault_handling_assert_extra(void *pc, void...
FILE: components/panics/src/memfault_fault_handling_armv7_a_r.c
function sMfltCoredumpRegion (line 38) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
function memfault_arch_is_inside_isr (line 43) | bool memfault_arch_is_inside_isr(void) {
function __get_DBGDSCR (line 72) | static uint32_t __get_DBGDSCR(void) {
function memfault_platform_halt_if_debugging (line 81) | void memfault_platform_halt_if_debugging(void) {
function memfault_coredump_storage_compute_size_required (line 95) | size_t memfault_coredump_storage_compute_size_required(void) {
function MEMFAULT_WEAK (line 116) | MEMFAULT_WEAK void memfault_platform_fault_handler(MEMFAULT_UNUSED const...
function MEMFAULT_USED (line 120) | MEMFAULT_USED void memfault_fault_handler(const sMfltRegState *regs, eMe...
function MEMFAULT_NAKED_FUNC (line 305) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_UNDEFINED_INSTRUCTION(void) {
function MEMFAULT_NAKED_FUNC (line 320) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_DATA_ABORT(void) {
function MEMFAULT_NAKED_FUNC (line 326) | MEMFAULT_NAKED_FUNC void MEMFAULT_EXC_HANDLER_PREFETCH_ABORT(void) {
function prv_fault_handling_assert (line 361) | static void prv_fault_handling_assert(void *pc, void *lr, eMemfaultReboo...
function MEMFAULT_NO_OPT (line 388) | MEMFAULT_NO_OPT void memfault_fault_handling_assert(void *pc, void *lr) {
function MEMFAULT_NO_OPT (line 399) | MEMFAULT_NO_OPT void memfault_fault_handling_assert_extra(void *pc, void...
FILE: components/panics/src/memfault_fault_handling_posix.c
function sMfltCoredumpRegion (line 19) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
function prv_fault_handling_assert (line 26) | static void prv_fault_handling_assert(void *pc, void *lr, eMemfaultReboo...
function memfault_platform_halt_if_debugging (line 39) | void memfault_platform_halt_if_debugging(void) {
function memfault_arch_is_inside_isr (line 43) | bool memfault_arch_is_inside_isr(void) {
function MEMFAULT_NO_OPT (line 47) | MEMFAULT_NO_OPT void memfault_fault_handling_assert_extra(void *pc, void...
function MEMFAULT_NO_OPT (line 55) | MEMFAULT_NO_OPT void memfault_fault_handling_assert(void *pc, void *lr) {
function memfault_fault_handler (line 62) | void memfault_fault_handler(const sMfltRegState *regs, eMemfaultRebootRe...
function memfault_coredump_storage_compute_size_required (line 87) | size_t memfault_coredump_storage_compute_size_required(void) {
FILE: components/panics/src/memfault_fault_handling_riscv.c
function sMfltCoredumpRegion (line 19) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
function prv_fault_handling_assert (line 26) | static void prv_fault_handling_assert(void *pc, void *lr, eMemfaultReboo...
function memfault_arch_fault_handling_assert (line 39) | void memfault_arch_fault_handling_assert(void *pc, void *lr, eMemfaultRe...
function memfault_platform_halt_if_debugging (line 53) | void memfault_platform_halt_if_debugging(void) {
function memfault_platform_halt_if_debugging (line 68) | void memfault_platform_halt_if_debugging(void) {
function memfault_arch_is_inside_isr (line 96) | bool memfault_arch_is_inside_isr(void) {
function prv_fault_handling_assert_native (line 106) | static void prv_fault_handling_assert_native(void *pc, void *lr, eMemfau...
function MEMFAULT_NO_OPT (line 121) | MEMFAULT_NO_OPT void memfault_fault_handling_assert_extra(void *pc, void...
function MEMFAULT_NO_OPT (line 128) | MEMFAULT_NO_OPT void memfault_fault_handling_assert(void *pc, void *lr) {
function memfault_fault_handler (line 136) | void memfault_fault_handler(const sMfltRegState *regs, eMemfaultRebootRe...
function memfault_coredump_storage_compute_size_required (line 168) | size_t memfault_coredump_storage_compute_size_required(void) {
FILE: components/panics/src/memfault_fault_handling_xtensa.c
function sMfltCoredumpRegion (line 19) | const sMfltCoredumpRegion *memfault_coredump_get_arch_regions(size_t *nu...
function prv_fault_handling_assert (line 26) | static void prv_fault_handling_assert(void *pc, void *lr, eMemfaultReboo...
function memfault_arch_fault_handling_assert (line 39) | void memfault_arch_fault_handling_assert(void *pc, void *lr, eMemfaultRe...
function memfault_platform_halt_if_debugging (line 51) | void memfault_platform_halt_if_debugging(void) {
function memfault_arch_is_inside_isr (line 64) | bool memfault_arch_is_inside_isr(void) {
function prv_fault_handling_assert_native (line 69) | static void prv_fault_handling_assert_native(void *pc, void *lr, eMemfau...
function MEMFAULT_NO_OPT (line 85) | MEMFAULT_NO_OPT void memfault_fault_handling_assert_extra(void *pc, void...
function MEMFAULT_NO_OPT (line 92) | MEMFAULT_NO_OPT void memfault_fault_handling_assert(void *pc, void *lr) {
function prv_get_current_cpu_id (line 110) | static int prv_get_current_cpu_id(void) {
function memfault_fault_handler (line 115) | void memfault_fault_handler(const sMfltRegState *regs, eMemfaultRebootRe...
function memfault_coredump_storage_compute_size_required (line 159) | size_t memfault_coredump_storage_compute_size_required(void) {
FILE: components/panics/src/memfault_stdlib_assert.c
function __assert_func (line 29) | void __assert_func(const char *file, int line, const char *func, const c...
FILE: components/util/src/memfault_base64.c
function prv_get_char_from_word (line 11) | static char prv_get_char_from_word(uint32_t word, int offset) {
function memfault_base64_encode (line 17) | void memfault_base64_encode(const void *buf, size_t buf_len, void *base6...
function memfault_base64_encode_inplace (line 36) | void memfault_base64_encode_inplace(void *buf, size_t bin_len) {
FILE: components/util/src/memfault_chunk_transport.c
type sMemfaultHeaderSettings (line 30) | typedef struct {
function prv_build_hdr (line 35) | static uint8_t prv_build_hdr(const sMemfaultHeaderSettings *settings) {
function prv_compute_single_message_chunk_size (line 68) | static size_t prv_compute_single_message_chunk_size(sMfltChunkTransportC...
function memfault_chunk_transport_get_next_chunk (line 72) | bool memfault_chunk_transport_get_next_chunk(sMfltChunkTransportCtx *ctx...
function memfault_chunk_transport_get_chunk_info (line 175) | void memfault_chunk_transport_get_chunk_info(sMfltChunkTransportCtx *ctx) {
FILE: components/util/src/memfault_circular_buffer.c
function memfault_circular_buffer_init (line 17) | bool memfault_circular_buffer_init(sMfltCircularBuffer *circular_buf, vo...
function memfault_circular_buffer_read (line 33) | bool memfault_circular_buffer_read(sMfltCircularBuffer *circular_buf, si...
function memfault_circular_buffer_get_read_pointer (line 59) | bool memfault_circular_buffer_get_read_pointer(sMfltCircularBuffer *circ...
function memfault_circular_buffer_read_with_callback (line 78) | bool memfault_circular_buffer_read_with_callback(sMfltCircularBuffer *ci...
function memfault_circular_buffer_consume (line 112) | bool memfault_circular_buffer_consume(sMfltCircularBuffer *circular_buf,...
function memfault_circular_buffer_consume_from_end (line 126) | bool memfault_circular_buffer_consume_from_end(sMfltCircularBuffer *circ...
function prv_get_space_available (line 140) | static size_t prv_get_space_available(const sMfltCircularBuffer *circula...
function memfault_circular_buffer_get_write_size (line 144) | size_t memfault_circular_buffer_get_write_size(const sMfltCircularBuffer...
function prv_write_at_offset_from_end (line 152) | static bool prv_write_at_offset_from_end(sMfltCircularBuffer *circular_b...
function memfault_circular_buffer_write (line 187) | bool memfault_circular_buffer_write(sMfltCircularBuffer *circular_buf, c...
function memfault_circular_buffer_write_at_offset (line 192) | bool memfault_circular_buffer_write_at_offset(sMfltCircularBuffer *circu...
function memfault_circular_buffer_get_read_size (line 198) | size_t memfault_circular_buffer_get_read_size(const sMfltCircularBuffer ...
FILE: components/util/src/memfault_crc16_ccitt.c
function memfault_crc16_compute (line 55) | uint16_t memfault_crc16_compute(uint16_t crc_initial_value, const void *...
function memfault_crc16_compute (line 71) | uint16_t memfault_crc16_compute(uint16_t crc_initial_value, const void *...
FILE: components/util/src/memfault_minimal_cbor.c
type eCborMajorType (line 14) | typedef enum CborMajorType {
type eCborAddInfoSimpleVals (line 27) | typedef enum CborAddInfoSimpleVals {
function memfault_cbor_encoder_init (line 43) | void memfault_cbor_encoder_init(sMemfaultCborEncoder *encoder, MemfaultC...
function memfault_cbor_encoder_size_only_init (line 54) | void memfault_cbor_encoder_size_only_init(sMemfaultCborEncoder *encoder) {
function memfault_cbor_encoder_deinit (line 58) | size_t memfault_cbor_encoder_deinit(sMemfaultCborEncoder *encoder) {
function prv_add_to_result_buffer (line 64) | static bool prv_add_to_result_buffer(sMemfaultCborEncoder *encoder, cons...
function prv_encode_unsigned_integer (line 87) | static bool prv_encode_unsigned_integer(sMemfaultCborEncoder *encoder, u...
function prv_encode_uint64 (line 116) | static void prv_encode_uint64(uint8_t buf[8], uint64_t val) {
function memfault_cbor_encode_long_signed_integer (line 125) | bool memfault_cbor_encode_long_signed_integer(sMemfaultCborEncoder *enco...
function memfault_cbor_encode_uint64_as_double (line 145) | bool memfault_cbor_encode_uint64_as_double(sMemfaultCborEncoder *encoder...
function memfault_cbor_encode_unsigned_integer (line 154) | bool memfault_cbor_encode_unsigned_integer(sMemfaultCborEncoder *encoder...
function memfault_cbor_join (line 158) | bool memfault_cbor_join(sMemfaultCborEncoder *encoder, const void *cbor_...
function memfault_cbor_encode_signed_integer (line 163) | bool memfault_cbor_encode_signed_integer(sMemfaultCborEncoder *encoder, ...
function memfault_cbor_encode_byte_string (line 174) | bool memfault_cbor_encode_byte_string(sMemfaultCborEncoder *encoder, con...
function memfault_cbor_encode_byte_string_begin (line 180) | bool memfault_cbor_encode_byte_string_begin(sMemfaultCborEncoder *encode...
function memfault_cbor_encode_string (line 184) | bool memfault_cbor_encode_string(sMemfaultCborEncoder *encoder, const ch...
function memfault_cbor_encode_string_begin (line 190) | bool memfault_cbor_encode_string_begin(sMemfaultCborEncoder *encoder, si...
function memfault_cbor_encode_dictionary_begin (line 194) | bool memfault_cbor_encode_dictionary_begin(sMemfaultCborEncoder *encoder...
function memfault_cbor_encode_array_begin (line 198) | bool memfault_cbor_encode_array_begin(sMemfaultCborEncoder *encoder, siz...
function memfault_cbor_encode_null (line 202) | bool memfault_cbor_encode_null(sMemfaultCborEncoder *encoder) {
function memfault_cbor_encoder_memcpy_write (line 207) | void memfault_cbor_encoder_memcpy_write(void *ctx, uint32_t offset, cons...
function memfault_cbor_encoder_get_status (line 213) | int memfault_cbor_encoder_get_status(sMemfaultCborEncoder *encoder) {
FILE: components/util/src/memfault_rle.c
function prv_handle_rle_change (line 19) | static void prv_handle_rle_change(sMemfaultRleCtx *ctx) {
function memfault_rle_encode_finalize (line 45) | void memfault_rle_encode_finalize(sMemfaultRleCtx *ctx) {
function memfault_rle_encode (line 49) | size_t memfault_rle_encode(sMemfaultRleCtx *ctx, const void *buf, size_t...
FILE: components/util/src/memfault_varint.c
function memfault_encode_varint_u32 (line 8) | size_t memfault_encode_varint_u32(uint32_t value, void *buf) {
function memfault_encode_varint_si32 (line 20) | size_t memfault_encode_varint_si32(int32_t value, void *buf) {
FILE: examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_port.c
type sMemRegions (line 24) | typedef struct {
function memfault_platform_get_device_info (line 33) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_reboot (line 59) | void memfault_platform_reboot(void) {
function memfault_platform_time_get_current (line 65) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *time) {
function memfault_platform_sanitize_address_range (line 73) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function memfault_reboot_reason_get (line 85) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
function memfault_platform_log (line 134) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_reboot_tracking_boot (line 172) | void memfault_platform_reboot_tracking_boot(void) {
function memfault_platform_boot (line 178) | int memfault_platform_boot(void) {
FILE: examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_storage.c
type sCoredumpWorkingBuffer (line 19) | typedef struct {
function sCoredumpWorkingBuffer (line 42) | static sCoredumpWorkingBuffer *prv_get_working_buf(uint32_t offset) {
function prv_write_blk (line 46) | static bool prv_write_blk(sCoredumpWorkingBuffer *blk) {
function prv_try_flush (line 61) | static bool prv_try_flush(void) {
function sMfltCoredumpRegion (line 92) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function memfault_platform_coredump_storage_get_info (line 109) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_read (line 120) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 133) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_write (line 144) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_clear (line 186) | void memfault_platform_coredump_storage_clear(void) {
FILE: examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_test.c
function memfault_test_heartbeat (line 18) | int memfault_test_heartbeat(int argc, char *argv[]) {
function memfault_test_trace (line 23) | int memfault_test_trace(int argc, char *argv[]) {
function memfault_test_reboot (line 29) | int memfault_test_reboot(int argc, char *argv[]) {
function memfault_test_assert (line 38) | int memfault_test_assert(int argc, char *argv[]) {
function memfault_test_fault (line 43) | int memfault_test_fault(void) {
function memfault_test_hang (line 49) | int memfault_test_hang(int argc, char *argv[]) {
function memfault_test_export (line 55) | int memfault_test_export(int argc, char *argv[]) {
FILE: examples/cypress/CY8CKIT-064S0S2-4343W/src/mqtt_demo_memfault.c
type NetworkContext (line 265) | struct NetworkContext {
type topicFilterContext_t (line 425) | typedef struct topicFilterContext {
function RunCoreMqttMemfaultDemo (line 458) | int RunCoreMqttMemfaultDemo(bool awsIotMqttMode, const char *pIdentifier...
function BaseType_t (line 584) | static BaseType_t prvBackoffForRetry(BackoffAlgorithmContext_t *pxRetryP...
function BaseType_t (line 626) | static BaseType_t prvConnectToServerWithBackoffRetries(NetworkContext_t ...
function BaseType_t (line 688) | static BaseType_t prvCreateMQTTConnectionWithBroker(MQTTContext_t *pxMQT...
function prvUpdateSubAckStatus (line 747) | static void prvUpdateSubAckStatus(MQTTPacketInfo_t *pxPacketInfo) {
function BaseType_t (line 766) | static BaseType_t prvMQTTPublishToTopic(MQTTContext_t *pxMQTTContext, co...
function prvMQTTProcessResponse (line 800) | static void prvMQTTProcessResponse(MQTTPacketInfo_t *pxIncomingPacket, u...
function prvMQTTProcessIncomingPublish (line 860) | static void prvMQTTProcessIncomingPublish(MQTTPublishInfo_t *pxPublishIn...
function prvEventCallback (line 884) | static void prvEventCallback(MQTTContext_t *pxMQTTContext, MQTTPacketInf...
function prvGetTimeMs (line 898) | static uint32_t prvGetTimeMs(void) {
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/config/user_callback_config.h
type app_bass_cb (line 62) | struct app_bass_cb
type app_findt_cb (line 69) | struct app_findt_cb
type app_proxr_cb (line 75) | struct app_proxr_cb
type app_suotar_cb (line 81) | struct app_suotar_cb
type app_callbacks (line 86) | struct app_callbacks
type app_bond_db_callbacks (line 126) | struct app_bond_db_callbacks
type default_app_operations (line 151) | struct default_app_operations
type arch_main_loop_callbacks (line 155) | struct arch_main_loop_callbacks
type prf_func_callbacks (line 180) | struct prf_func_callbacks
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/config/user_config.h
type advertise_configuration (line 91) | struct advertise_configuration
type gapm_configuration (line 200) | struct gapm_configuration
type connection_param_configuration (line 279) | struct connection_param_configuration
type default_handlers_configuration (line 311) | struct default_handlers_configuration
type central_configuration (line 338) | struct central_configuration
type security_configuration (line 435) | struct security_configuration
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/custom_profile/user_custs1_def.c
type attm_desc_128 (line 83) | struct attm_desc_128
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/custom_profile/user_custs_config.c
type attm_desc_128 (line 40) | struct attm_desc_128
type cust_prf_func_callbacks (line 44) | struct cust_prf_func_callbacks
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/custom_profile/user_custs_config.h
type cust_prf_func_callbacks (line 40) | struct cust_prf_func_callbacks
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/memfault_platform_device_info.c
function prv_get_device_serial (line 13) | static void prv_get_device_serial(char *buf, size_t buf_len) {
function memfault_platform_get_device_info (line 22) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/platform/user_periph_setup.c
function GPIO_reservations (line 38) | void GPIO_reservations(void) {
function set_pad_functions (line 56) | void set_pad_functions(void) {
function periph_init (line 120) | void periph_init(void) {
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/user_app.c
function prv_send_char (line 19) | static int prv_send_char(char c) {
function user_app_on_init (line 26) | void user_app_on_init(void) {
function user_on_connection (line 38) | void user_on_connection(uint8_t connection_idx, struct gapc_connection_r...
function user_on_disconnect (line 42) | void user_on_disconnect(struct gapc_disconnect_ind const *param) {
function prv_test_storage (line 47) | static int prv_test_storage(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSED ch...
function prv_export_data (line 56) | static int prv_export_data(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSED cha...
function arch_main_loop_callback_ret_t (line 79) | arch_main_loop_callback_ret_t user_app_on_system_powered(void) {
FILE: examples/dialog/da145xx/apps/memfault_demo_app/src/user_app.h
type gapc_connection_req_ind (line 69) | struct gapc_connection_req_ind
type gapc_disconnect_ind (line 71) | struct gapc_disconnect_ind
FILE: examples/dialog/da1469x/apps/memfault_demo_app/main.c
function prv_send_char (line 22) | static int prv_send_char(char c) {
function prv_test_storage (line 27) | static int prv_test_storage(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSED ch...
function prv_export_data (line 35) | static int prv_export_data(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSED cha...
function cli_task (line 55) | static void cli_task(void *pvParameters) {
function periph_init (line 69) | static void periph_init(void) { }
function prvSetupHardware (line 71) | static void prvSetupHardware(void) {
function system_init (line 77) | static void system_init(void *pvParameters) {
function main (line 105) | int main(void) {
function vApplicationMallocFailedHook (line 119) | void vApplicationMallocFailedHook(void) {
function vApplicationIdleHook (line 123) | void vApplicationIdleHook(void) { }
function vApplicationTickHook (line 124) | void vApplicationTickHook(void) { }
FILE: examples/dialog/da1469x/apps/memfault_demo_app/memfault_platform_device_info.c
function memfault_platform_get_device_info (line 13) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
FILE: examples/esp32/apps/memfault_demo_app/main/app_memfault_transport_http.c
function app_memfault_transport_init (line 9) | void app_memfault_transport_init(void) { }
function app_memfault_transport_send_chunks (line 11) | int app_memfault_transport_send_chunks(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/app_memfault_transport_mqtt.c
function mqtt_event_handler (line 38) | static void mqtt_event_handler(MEMFAULT_UNUSED void *handler_args,
function prv_close_client (line 54) | static void prv_close_client(void) {
function prv_create_client (line 69) | static int prv_create_client(void) {
function prv_build_topic_string (line 119) | void prv_build_topic_string(void) {
function app_memfault_transport_init (line 130) | void app_memfault_transport_init(void) {
function app_memfault_transport_send_chunks (line 139) | int app_memfault_transport_send_chunks(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/button.c
function prv_gpio_isr_handler (line 19) | static void IRAM_ATTR prv_gpio_isr_handler(void *arg) {
function prv_button_glitch_filter_enable (line 34) | static void prv_button_glitch_filter_enable(void) {
function prv_button_glitch_filter_enable (line 57) | static void prv_button_glitch_filter_enable(void) {
function button_setup (line 62) | void button_setup(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/cmd_app.c
function test_task_watchdog (line 29) | static int test_task_watchdog(int argc, char **argv) {
function prv_trigger_stack_overflow (line 47) | static void prv_trigger_stack_overflow(void) {
function prv_overflow_task (line 78) | static void prv_overflow_task(MEMFAULT_UNUSED void *params) {
function prv_test_stack_overflow (line 93) | static int prv_test_stack_overflow(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
function prv_init_stack_overflow_test (line 99) | static void prv_init_stack_overflow_test(void) {
function prv_heap_task_stats (line 120) | static int prv_heap_task_stats(MEMFAULT_UNUSED int argc, MEMFAULT_UNUSED...
function prv_stuck_task (line 159) | static void prv_stuck_task(void *pvParameters) {
function prv_esp_task_watchdog (line 174) | static int prv_esp_task_watchdog(int argc, char **argv) {
function prv_collect_reboot_info (line 194) | static int prv_collect_reboot_info(MEMFAULT_UNUSED int argc, MEMFAULT_UN...
function prv_deep_sleep (line 200) | static int prv_deep_sleep(int argc, char **argv) {
function register_app (line 210) | void register_app(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/cmd_system.c
function register_system (line 36) | void register_system() {
function restart (line 47) | static int restart(int argc, char **argv) {
function register_restart (line 52) | static void register_restart() {
function free_mem (line 64) | static int free_mem(int argc, char **argv) {
function dump_heap (line 69) | static int dump_heap(int argc, char **argv) {
function register_free (line 74) | static void register_free() {
function register_heap_dump (line 84) | static void register_heap_dump() {
function tasks_info (line 97) | static int tasks_info(int argc, char **argv) {
function register_tasks (line 111) | static void register_tasks() {
FILE: examples/esp32/apps/memfault_demo_app/main/cmd_wifi.c
function event_handler (line 68) | static void event_handler(void *arg, esp_event_base_t event_base, int32_...
function wifi_join (line 92) | bool wifi_join(const char *ssid, const char *pass) {
function wifi_disconnect (line 169) | static int wifi_disconnect(int argc, char **argv) {
type arg_str (line 176) | struct arg_str
type arg_str (line 177) | struct arg_str
type arg_end (line 178) | struct arg_end
function connect (line 181) | static int connect(int argc, char **argv) {
function prv_save_wifi_creds (line 200) | static void prv_save_wifi_creds(const char *ssid, const char *password) {
function wifi_load_creds (line 218) | void wifi_load_creds(char **ssid, char **password) {
type arg_str (line 252) | struct arg_str
type arg_str (line 253) | struct arg_str
type arg_end (line 254) | struct arg_end
function wifi_creds_set (line 257) | static int wifi_creds_set(int argc, char **argv) {
type arg_str (line 294) | struct arg_str
type arg_end (line 295) | struct arg_end
function wifi_get_project_key (line 298) | __attribute__((access(write_only, 1, 2))) int wifi_get_project_key(char ...
function esp_err_t (line 309) | __attribute__((access(read_only, 1, 2))) static esp_err_t prv_set_projec...
function project_key_set (line 318) | static int project_key_set(int argc, char **argv) {
function register_wifi (line 348) | void register_wifi(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/cmd_wifi_legacy.c
function wifi_get_project_key (line 37) | int wifi_get_project_key(char *project_key, size_t project_key_len) {
function esp_err_t (line 43) | static esp_err_t event_handler(void *ctx, system_event_t *event) {
function initialise_wifi (line 58) | static void initialise_wifi(void) {
function wifi_join (line 75) | bool wifi_join(const char *ssid, const char *pass) {
type arg_str (line 95) | struct arg_str
type arg_str (line 96) | struct arg_str
type arg_end (line 97) | struct arg_end
function connect (line 100) | static int connect(int argc, char **argv) {
function prv_save_wifi_creds (line 119) | static void prv_save_wifi_creds(const char *ssid, const char *password) {
function wifi_load_creds (line 173) | void wifi_load_creds(char **ssid, char **password) {
type arg_str (line 234) | struct arg_str
type arg_str (line 235) | struct arg_str
type arg_end (line 236) | struct arg_end
function wifi_creds_set (line 239) | static int wifi_creds_set(int argc, char **argv) {
function register_wifi (line 275) | void register_wifi(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/deep_sleep.c
function esp_err_t (line 23) | esp_err_t deep_sleep_start(uint32_t sleep_seconds) {
function prv_auto_deep_sleep_start_cb (line 43) | static void prv_auto_deep_sleep_start_cb(MEMFAULT_UNUSED TimerHandle_t h...
function deep_sleep_wakeup (line 50) | void deep_sleep_wakeup(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/led.c
function led_set_color (line 40) | void led_set_color(enum LED_COLORS color) {
type rgb_led_s (line 45) | struct rgb_led_s {
function led_config (line 54) | static void led_config(void) {
function prv_set_pixel (line 68) | static void prv_set_pixel(struct rgb_led_s rgb, bool set) {
function prv_set_pixel (line 85) | static void prv_set_pixel(struct rgb_led_s rgb, bool set) {
function led_config (line 97) | static void led_config(void) {
function prv_heartbeat_led_callback (line 105) | static void prv_heartbeat_led_callback(TimerHandle_t handle) {
function prv_heartbeat_led_callback (line 137) | static void prv_heartbeat_led_callback(TimerHandle_t handle) {
function led_config (line 152) | static void led_config(void) {
function led_init (line 164) | void led_init(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/led.h
type LED_COLORS (line 10) | enum LED_COLORS {
type LED_COLORS (line 16) | enum LED_COLORS
FILE: examples/esp32/apps/memfault_demo_app/main/main.c
function initialize_filesystem (line 64) | static void initialize_filesystem() {
function initialize_nvs (line 82) | static void initialize_nvs() {
function initialize_console (line 91) | static void initialize_console() {
function prv_handle_ota_upload_available (line 158) | static bool prv_handle_ota_upload_available(void *user_ctx) {
function prv_handle_ota_download_complete (line 170) | static bool prv_handle_ota_download_complete(void *user_ctx) {
function prv_handle_ota_done (line 185) | static void prv_handle_ota_done(int status, void *user_ctx) {
function memfault_esp_port_wifi_autojoin (line 229) | void memfault_esp_port_wifi_autojoin(void) {
function prv_ota_task (line 250) | static void prv_ota_task(void *args) {
function prv_example_task (line 276) | static void prv_example_task(void *args) {
function prv_task_watchdog_timer_callback (line 310) | static void prv_task_watchdog_timer_callback(MEMFAULT_UNUSED TimerHandle...
function prv_initialize_task_watchdog (line 314) | static void prv_initialize_task_watchdog(void) {
function prv_initialize_task_watchdog (line 342) | static void prv_initialize_task_watchdog(void) {
function esp_heap_trace_alloc_hook (line 352) | void esp_heap_trace_alloc_hook(void *ptr, size_t size, uint32_t caps) {
function prv_vprintf_hook (line 368) | static int prv_vprintf_hook(const char *fmt, va_list args) {
function prv_load_memfault_settings_from_nvs (line 397) | static void prv_load_memfault_settings_from_nvs(void) {
function memfault_platform_get_time_since_boot_ms (line 420) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function prv_conditionally_init_task_wdt (line 427) | static void prv_conditionally_init_task_wdt(void) {
function app_main (line 458) | void app_main() {
FILE: examples/esp32/apps/memfault_demo_app/main/metrics.c
function TaskHandle_t (line 18) | static TaskHandle_t prv_get_idle0_task_handle_for_core(void) {
function TaskHandle_t (line 22) | static TaskHandle_t prv_get_idle1_task_handle_for_core(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/ota_session_metrics.c
type ota_session_metrics_lwip_stats_prev (line 21) | struct ota_session_metrics_lwip_stats_prev {
type ota_session_metrics_mbedtls_stats (line 26) | struct ota_session_metrics_mbedtls_stats {
function ota_session_metrics_start (line 35) | void ota_session_metrics_start(void) {
function __wrap_mbedtls_net_send (line 54) | int __wrap_mbedtls_net_send(void *ctx, unsigned char const *buf, size_t ...
function __wrap_mbedtls_net_recv (line 63) | int __wrap_mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) {
function ota_session_metrics_end (line 71) | void ota_session_metrics_end(int ota_error_code) {
FILE: examples/esp32/apps/memfault_demo_app/main/settings.c
type settings_type (line 26) | enum settings_type {
type settings_type (line 33) | enum settings_type
function prv_settings_key_is_valid (line 91) | static bool prv_settings_key_is_valid(enum settings_key key) {
function esp_err_t (line 95) | static esp_err_t prv_open_nvs(nvs_handle_t *nvs_handle) {
function settings_get (line 117) | __attribute__((access(write_only, 2)))
function settings_set (line 181) | __attribute__((access(read_only, 2, 3)))
type arg_str (line 239) | struct arg_str
type arg_end (line 240) | struct arg_end
type arg_str (line 244) | struct arg_str
type arg_str (line 245) | struct arg_str
type arg_end (line 246) | struct arg_end
function prv_string_to_key (line 249) | static int prv_string_to_key(const char *str, enum settings_key *key) {
function prv_get_and_print_setting (line 260) | static int prv_get_and_print_setting(enum settings_key key) {
function prv_get_cmd (line 292) | static int prv_get_cmd(int argc, char **argv) {
function prv_set_cmd (line 316) | static int prv_set_cmd(int argc, char **argv) {
function settings_register_shell_commands (line 358) | void settings_register_shell_commands(void) {
FILE: examples/esp32/apps/memfault_demo_app/main/settings.h
type settings_key (line 14) | enum settings_key {
type settings_key (line 28) | enum settings_key
type settings_key (line 33) | enum settings_key
FILE: examples/freertos/boards/qemu_mps2_an385/memfault_platform_impl.c
function memfault_platform_reboot (line 20) | void memfault_platform_reboot(void) {
function memfault_platform_sanitize_address_range (line 27) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function prv_read_reboot_reg (line 48) | static uint32_t prv_read_reboot_reg(void) {
function prv_clear_reboot_reg (line 53) | static void prv_clear_reboot_reg(void) {
function eMemfaultRebootReason (line 63) | static eMemfaultRebootReason prv_decode_reboot_reg(uint32_t reboot_reg) {
function memfault_reboot_reason_get (line 79) | void memfault_reboot_reason_get(sResetBootupInfo *reset_info) {
FILE: examples/freertos/boards/qemu_mps2_an385/startup.c
type UART_t (line 11) | typedef struct UART_t {
function uart_init (line 32) | void uart_init(void) {
function _read (line 42) | int _read(__attribute__((unused)) int file, __attribute__((unused)) char...
function _write (line 66) | int _write(__attribute__((unused)) int file, __attribute__((unused)) cha...
function prv_cinit (line 93) | __attribute__((noinline)) static void prv_cinit(void) {
function Reset_Handler (line 106) | __attribute__((noreturn)) void Reset_Handler(void) {
FILE: examples/freertos/boards/qemu_mps2_an386/memfault_platform_impl.c
function memfault_platform_reboot (line 19) | void memfault_platform_reboot(void) {
function memfault_platform_sanitize_address_range (line 26) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function prv_read_reboot_reg (line 45) | static uint32_t prv_read_reboot_reg(void) {
function prv_clear_reboot_reg (line 50) | static void prv_clear_reboot_reg(void) {
function eMemfaultRebootReason (line 60) | static eMemfaultRebootReason prv_decode_reboot_reg(uint32_t reboot_reg) {
function memfault_reboot_reason_get (line 76) | void memfault_reboot_reason_get(sResetBootupInfo *reset_info) {
FILE: examples/freertos/boards/qemu_mps2_an386/startup.c
type UART_t (line 11) | typedef struct UART_t {
function uart_init (line 32) | void uart_init(void) {
function _read (line 42) | int _read(__attribute__((unused)) int file, __attribute__((unused)) char...
function _write (line 66) | int _write(__attribute__((unused)) int file, __attribute__((unused)) cha...
function prv_cinit (line 93) | __attribute__((noinline)) static void prv_cinit(void) {
function Reset_Handler (line 106) | __attribute__((noreturn)) void Reset_Handler(void) {
FILE: examples/freertos/boards/qemu_mps2_an505/memfault_platform_impl.c
function memfault_platform_reboot (line 19) | void memfault_platform_reboot(void) {
function memfault_platform_sanitize_address_range (line 29) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function memfault_reboot_reason_get (line 48) | void memfault_reboot_reason_get(sResetBootupInfo *reset_info) {
FILE: examples/freertos/boards/qemu_mps2_an505/startup.c
type UART_t (line 11) | typedef struct UART_t {
function uart_init (line 29) | void uart_init(void) {
function _read (line 34) | int _read(__attribute__((unused)) int file, __attribute__((unused)) char...
function _write (line 58) | int _write(__attribute__((unused)) int file, __attribute__((unused)) cha...
function prv_cinit (line 85) | __attribute__((noinline)) static void prv_cinit(void) {
function Reset_Handler (line 98) | __attribute__((noreturn)) void Reset_Handler(void) {
FILE: examples/freertos/src/compact_log.cpp
function compact_log_cpp_example (line 11) | void compact_log_cpp_example(void) {
FILE: examples/freertos/src/console.c
function prv_send_char (line 27) | static int prv_send_char(char c) {
function prv_console_input_task (line 34) | static void prv_console_input_task(MEMFAULT_UNUSED void *pvParameters) {
function prv_freertos_vassert_cmd (line 49) | static int prv_freertos_vassert_cmd(int argc, char *argv[]) {
function prv_freertos_tasks_cmd (line 57) | static int prv_freertos_tasks_cmd(int argc, char *argv[]) {
function prv_fake_fw_update_error_assert_cmd (line 72) | static int prv_fake_fw_update_error_assert_cmd(int argc, char *argv[]) {
function MEMFAULT_WEAK (line 79) | MEMFAULT_WEAK int memfault_metrics_session_start(eMfltMetricsSessionInde...
function MEMFAULT_WEAK (line 85) | MEMFAULT_WEAK int memfault_metrics_session_end(eMfltMetricsSessionIndex ...
function MEMFAULT_WEAK (line 91) | MEMFAULT_WEAK int memfault_metrics_heartbeat_set_string(MemfaultMetricId...
function prv_session (line 98) | static int prv_session(int argc, char *argv[]) {
function prv_spin_cpu (line 115) | static int prv_spin_cpu(int argc, char *argv[]) {
function prv_session_crash (line 133) | static int prv_session_crash(int argc, char *argv[]) {
function prv_leak_memory (line 144) | static int prv_leak_memory(int argc, char *argv[]) {
function prv_assert_with_reason (line 160) | static int prv_assert_with_reason(int argc, char *argv[]) {
function prv_get_log_count (line 174) | static int prv_get_log_count(int argc, char *argv[]) {
function prv_stack_overflow (line 184) | static int prv_stack_overflow(int argc, char *argv[]) {
function prv_long_compact_log (line 207) | static int prv_long_compact_log(int argc, char *argv[]) {
function memfault_platform_fault_handler (line 227) | void memfault_platform_fault_handler(MEMFAULT_UNUSED const sMfltRegState...
function prv_reboot_timer_callback (line 242) | static void prv_reboot_timer_callback(TimerHandle_t xTimer) {
function prv_watchdog_cmd (line 248) | static int prv_watchdog_cmd(int argc, char *argv[]) {
function console_task_init (line 348) | void console_task_init(void) {
FILE: examples/freertos/src/heap_task.c
function prv_run_heap_task (line 23) | static void prv_run_heap_task(MEMFAULT_UNUSED void *pvParameters) {
function heap_task_init (line 41) | void heap_task_init(void) {
FILE: examples/freertos/src/main.c
function vApplicationGetIdleTaskMemory (line 22) | void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer,
function vApplicationGetTimerTaskMemory (line 46) | void vApplicationGetTimerTaskMemory(StaticTask_t **ppxTimerTaskTCBBuffer,
function ulGetRunTimeCounterValue (line 67) | unsigned long ulGetRunTimeCounterValue(void) {
function compact_log_c_example (line 74) | void compact_log_c_example(void) {
function main (line 122) | int main(void) {
FILE: examples/freertos/src/memfault/memfault_platform_log_config.h
type tm (line 28) | struct tm
FILE: examples/freertos/src/memfault/memfault_platform_port.c
function memfault_platform_get_device_info (line 42) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_log (line 51) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 84) | void memfault_platform_log_raw(const char *fmt, ...) {
function memfault_data_export_base64_encoded_chunk (line 97) | void memfault_data_export_base64_encoded_chunk(const char *base64_chunk) {
function memfault_platform_time_get_current (line 101) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *time_outpu...
function memfault_platform_reboot_tracking_boot (line 132) | void memfault_platform_reboot_tracking_boot(void) {
function memfault_platform_boot (line 146) | int memfault_platform_boot(void) {
function prv_read_psp_reg (line 180) | static uint32_t prv_read_psp_reg(void) {
function sMfltCoredumpRegion (line 196) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
FILE: examples/freertos/src/metrics.c
function memfault_event_storage_restore_state (line 36) | bool memfault_event_storage_restore_state(sMfltEventStorageSaveState *st...
function memfault_metrics_restore_state (line 44) | bool memfault_metrics_restore_state(void *state) {
function memfault_log_restore_state (line 52) | bool memfault_log_restore_state(sMfltLogSaveState *state) {
function prv_run_metrics_task (line 83) | static void prv_run_metrics_task(MEMFAULT_UNUSED void *pvParameters) {
function metrics_task_init (line 100) | void metrics_task_init(void) {
function prv_collect_libc_heap_usage_metrics (line 111) | static void prv_collect_libc_heap_usage_metrics(void) {
function prv_daily_heartbeat (line 129) | static void prv_daily_heartbeat(void) {
function memfault_platform_get_stateofcharge (line 163) | int memfault_platform_get_stateofcharge(sMfltPlatformBatterySoc *soc) {
function memfault_metrics_heartbeat_collect_data (line 179) | void memfault_metrics_heartbeat_collect_data(void) {
FILE: examples/freertos/src/mpu.c
function mpu_init (line 8) | void mpu_init(void) {
FILE: examples/libcurl/get_latest.c
function CURLcode (line 44) | static CURLcode prv_install_root_certs(CURL *curl, void *sslctx, void *p...
function prv_get_latest_release (line 84) | static int prv_get_latest_release(const char *device_serial, const char ...
function main (line 156) | int main(int argc, char *argv[]) {
FILE: examples/libcurl/post_chunks.c
function CURLcode (line 41) | static CURLcode prv_install_root_certs(CURL *curl, void *sslctx, void *p...
function prv_post_chunk (line 81) | static int prv_post_chunk(const char *device_serial, const void *chunk, ...
function main (line 139) | int main(int argc, char *argv[]) {
FILE: examples/nrf-connect-sdk/nrf5/memfault_demo_app/src/main.c
type bt_data (line 31) | struct bt_data
type bt_data (line 36) | struct bt_data
type bt_conn (line 40) | struct bt_conn
type k_work (line 41) | struct k_work
type k_work (line 43) | struct k_work
function security_changed (line 47) | static void security_changed(struct bt_conn *conn, bt_security_t level, ...
function adv_work_handler (line 66) | static void adv_work_handler(struct k_work *work) {
function advertising_start (line 77) | static void advertising_start(void) {
function connected (line 81) | static void connected(struct bt_conn *conn, uint8_t conn_err) {
function disconnected (line 95) | static void disconnected(struct bt_conn *conn, uint8_t reason) {
function recycled_cb (line 105) | static void recycled_cb(void) {
function pairing_complete (line 117) | static void pairing_complete(struct bt_conn *conn, bool bonded) {
function pairing_failed (line 125) | static void pairing_failed(struct bt_conn *conn, enum bt_security_err re...
type bt_conn_auth_info_cb (line 133) | struct bt_conn_auth_info_cb
function auth_cancel (line 137) | static void auth_cancel(struct bt_conn *conn) {
type bt_conn_auth_cb (line 145) | struct bt_conn_auth_cb
function mds_access_enable (line 150) | static bool mds_access_enable(struct bt_conn *conn) {
type bt_mds_cb (line 158) | struct bt_mds_cb
function button_handler (line 163) | static void button_handler(uint32_t button_state, uint32_t has_changed) {
function bas_notify (line 217) | static void bas_notify(void) {
function bas_work_handler (line 237) | static void bas_work_handler(struct k_work *work) {
function serial_number_init (line 244) | static void serial_number_init(void) {
function cmd_set_bt_serial (line 278) | static int cmd_set_bt_serial(const struct shell *shell_ptr, size_t argc,...
function prv_memfault_mgmt_is_access_allowed (line 307) | static bool prv_memfault_mgmt_is_access_allowed(void *user_arg) {
function cmd_memfault_mcumgr_access (line 311) | static int cmd_memfault_mcumgr_access(const struct shell *shell_ptr, siz...
function sMfltCoredumpRegion (line 348) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function prv_wd_feed_thread_function (line 367) | static void prv_wd_feed_thread_function(void *arg0, void *arg1, void *ar...
function prv_start_watchdog_feed_thread (line 380) | static void prv_start_watchdog_feed_thread(void) {
function main (line 386) | int main(void) {
FILE: examples/nrf-connect-sdk/nrf5/memfault_demo_app/src/shell_commands.c
type gpio_dt_spec (line 17) | struct gpio_dt_spec
function cmd_poweroff (line 20) | static int cmd_poweroff(const struct shell *shell, size_t argc, char **a...
FILE: examples/nrf-connect-sdk/nrf9160/memfault_demo_app/src/main.c
function prv_date_time_evt_handler (line 31) | static void prv_date_time_evt_handler(const struct date_time_evt *evt) {
function prv_init_modem_lib (line 72) | static int prv_init_modem_lib(void) {
function prv_init_modem_lib (line 78) | static int prv_init_modem_lib(void) {
function prv_get_imei (line 95) | static int prv_get_imei(char *buf, size_t buf_len) {
function prv_init_device_info (line 106) | static void prv_init_device_info(void) {
function main (line 124) | int main(void) {
function prv_reboot_custom (line 216) | static int prv_reboot_custom(const struct shell *shell, size_t argc, cha...
function prv_set_net_iface (line 239) | static int prv_set_net_iface(const struct shell *shell, size_t argc, cha...
FILE: examples/nrf-connect-sdk/nrf9160/memfault_demo_app/src/watchdog.c
type k_thread (line 30) | struct k_thread
type device (line 38) | struct device
type device (line 41) | struct device
function memfault_demo_app_watchdog_feed (line 60) | void memfault_demo_app_watchdog_feed(void) {
function prv_wdt_task (line 73) | static void prv_wdt_task(void *arg1, void *arg2, void *arg3) {
function memfault_demo_app_watchdog_boot (line 81) | void memfault_demo_app_watchdog_boot(void) {
FILE: examples/nrf5/apps/memfault_demo_app/src/cli.c
function mflt_cli_init (line 25) | void mflt_cli_init(void) {
function mflt_cli_try_process (line 31) | void mflt_cli_try_process(void) {
function prv_clear_core_cmd (line 35) | static void prv_clear_core_cmd(nrf_cli_t const *p_cli, size_t argc, char...
function prv_get_core_cmd (line 39) | static void prv_get_core_cmd(nrf_cli_t const *p_cli, size_t argc, char *...
function prv_crash_example (line 43) | static void prv_crash_example(nrf_cli_t const *p_cli, size_t argc, char ...
function prv_test_log (line 47) | static void prv_test_log(nrf_cli_t const *p_cli, size_t argc, char **arg...
function prv_trigger_logs (line 51) | static void prv_trigger_logs(nrf_cli_t const *p_cli, size_t argc, char *...
function prv_trace_example (line 55) | static void prv_trace_example(nrf_cli_t const *p_cli, size_t argc, char ...
function prv_get_device_info (line 59) | static void prv_get_device_info(nrf_cli_t const *p_cli, size_t argc, cha...
function prv_system_reboot_cmd (line 63) | static void prv_system_reboot_cmd(nrf_cli_t const *p_cli, size_t argc, c...
function prv_export_data_cmd (line 67) | static void prv_export_data_cmd(nrf_cli_t const *p_cli, size_t argc, cha...
function prv_coredump_storage_test_cmd (line 71) | static void prv_coredump_storage_test_cmd(nrf_cli_t const *p_cli, size_t...
function prv_hang_example (line 79) | static void prv_hang_example(nrf_cli_t const *p_cli, size_t argc, char *...
function prv_help_cmd (line 118) | static void prv_help_cmd(nrf_cli_t const *p_cli, size_t argc, char **arg...
FILE: examples/nrf5/apps/memfault_demo_app/src/main.c
function timers_init (line 27) | static void timers_init(void) {
function log_init (line 34) | static void log_init(void) {
function prv_wdt_event_handler (line 41) | static void prv_wdt_event_handler(void) {
function prv_hardware_watchdog_enable (line 51) | static void prv_hardware_watchdog_enable(void) {
function prv_hardware_watchdog_feed (line 61) | static void prv_hardware_watchdog_feed(void) {
function main (line 65) | int main(void) {
FILE: examples/nrf5/apps/memfault_demo_app/third_party/memfault/memfault_platform_port.c
function prv_get_device_serial (line 21) | static void prv_get_device_serial(char *buf, size_t buf_len) {
function memfault_platform_get_device_info (line 43) | void memfault_platform_get_device_info(struct MemfaultDeviceInfo *info) {
function memfault_platform_reboot (line 62) | void memfault_platform_reboot(void) {
function memfault_platform_time_get_current (line 67) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *time) {
function memfault_platform_boot (line 72) | int memfault_platform_boot(void) {
FILE: examples/nrf5/apps/memfault_demo_app/third_party/memfault/sdk_overrides/app_error.h
type error_info_t (line 92) | typedef struct {
type assert_info_t (line 100) | typedef struct {
FILE: examples/qp/apps/memfault_demo_app/src/bsp.c
function bsp_init (line 15) | void bsp_init(void) {
function bsp_send_char_over_uart (line 51) | int bsp_send_char_over_uart(char c) {
function bsp_read_char_from_uart (line 58) | bool bsp_read_char_from_uart(char *out_char) {
function SysTick_Handler (line 66) | void SysTick_Handler(void) {
FILE: examples/qp/apps/memfault_demo_app/src/main.c
function memfault_platform_get_device_info (line 11) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_sanitize_address_range (line 24) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function main (line 39) | void main(void) {
function QF_onStartup (line 55) | void QF_onStartup(void) { }
function QF_onCleanup (line 57) | void QF_onCleanup(void) { }
function QV_onIdle (line 59) | void QV_onIdle(void) {
FILE: examples/qp/apps/memfault_demo_app/src/platform_reference_impl/memfault_platform_core.c
function memfault_platform_boot (line 10) | int memfault_platform_boot(void) {
function MEMFAULT_NORETURN (line 14) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
FILE: examples/qp/apps/memfault_demo_app/src/platform_reference_impl/memfault_platform_log.c
function prv_send_log_to_uart (line 19) | static void prv_send_log_to_uart(const char *str, size_t size) {
function prv_log (line 26) | static void prv_log(const char *fmt, va_list *args) {
function memfault_platform_log (line 32) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 39) | void memfault_platform_log_raw(const char *fmt, ...) {
FILE: examples/qp/apps/memfault_demo_app/src/startup_stm32f4xx.c
function Reset_Handler (line 245) | void Reset_Handler(void) {
function Default_Handler (line 286) | void Default_Handler(void) {
FILE: examples/stm32/stm32h743i/platform_reference_impl/memfault_platform_core.c
function memfault_platform_boot (line 10) | int memfault_platform_boot(void) {
function MEMFAULT_NORETURN (line 14) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
FILE: examples/stm32/stm32h743i/platform_reference_impl/memfault_platform_coredump.c
function sMfltCoredumpRegion (line 42) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function prv_coredump_writer_assert_and_reboot (line 59) | __attribute__((optimize("O0"))) __attribute__((noinline)) static void
function memfault_platform_coredump_storage_clear (line 64) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 83) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
type sCoredumpWorkingBuffer (line 101) | typedef struct {
function sCoredumpWorkingBuffer (line 110) | static sCoredumpWorkingBuffer *prv_get_working_buf(uint32_t offset) {
function prv_write_block (line 114) | static void prv_write_block(sCoredumpWorkingBuffer *blk) {
function prv_try_flush (line 131) | static void prv_try_flush(void) {
function memfault_platform_coredump_storage_write (line 149) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_read (line 189) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 202) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: examples/stm32/stm32h743i/platform_reference_impl/memfault_platform_device_info.c
function prv_int_to_ascii_hex (line 29) | static char prv_int_to_ascii_hex(uint8_t val) {
function memfault_platform_get_device_info (line 48) | void memfault_platform_get_device_info(struct MemfaultDeviceInfo *info) {
FILE: examples/stm32/stm32h743i/platform_reference_impl/stm32h7xx_hal_stubs.c
function HAL_GetTick (line 10) | uint32_t HAL_GetTick(void) {
FILE: examples/wiced/apps/memfault_demo_app/memfault_demo_app.c
function prv_get_core_region (line 35) | static int prv_get_core_region(int argc, char *argv[]) {
function application_start (line 71) | void application_start(void) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_coredump.c
type sMemfaultPlatformCoredumpCtx (line 60) | typedef struct sMemfaultPlatformCoredumpCtx {
function sMfltCoredumpRegion (line 69) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function wiced_result_t (line 92) | static wiced_result_t prv_init(void) {
function memfault_platform_coredump_boot (line 142) | bool memfault_platform_coredump_boot(void) {
function prv_get_start_and_end_addr (line 146) | static bool prv_get_start_and_end_addr(uint32_t *flash_start, uint32_t *...
function memfault_platform_get_spi_start_and_end_addr (line 157) | bool memfault_platform_get_spi_start_and_end_addr(uint32_t *flash_start,...
function prv_offset_to_addr (line 161) | static bool prv_offset_to_addr(uint32_t offset, size_t read_len, uint32_...
function memfault_platform_coredump_storage_clear (line 175) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 180) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function wiced_result_t (line 194) | static wiced_result_t prv_write(uint32_t addr, const void *data, size_t ...
function memfault_platform_coredump_storage_write (line 202) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function wiced_result_t (line 210) | static wiced_result_t prv_read(uint32_t addr, void *data, size_t read_le...
function memfault_platform_coredump_storage_read (line 218) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function wiced_result_t (line 226) | static wiced_result_t prv_erase(uint32_t addr, size_t erase_size) {
function memfault_platform_coredump_storage_erase (line 237) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_crc32.c
function memfault_platform_crc32 (line 12) | uint32_t memfault_platform_crc32(const void *data, size_t data_len) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_debug_log.c
function prv_print (line 23) | static void prv_print(const char *fmt, va_list *args) {
function memfault_platform_log (line 35) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 44) | void memfault_platform_log_raw(const char *fmt, ...) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_device_info.c
function memfault_platform_device_info_boot (line 30) | bool memfault_platform_device_info_boot(void) {
function prv_get_device_serial (line 37) | static void prv_get_device_serial(char *buf, size_t buf_len) {
function memfault_platform_get_device_info (line 51) | void memfault_platform_get_device_info(struct MemfaultDeviceInfo *info) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_fault_handling_arm_gcc.c
function MEMFAULT_NAKED_FUNC (line 25) | MEMFAULT_NAKED_FUNC void HardFaultException(void) {
function MEMFAULT_NAKED_FUNC (line 29) | MEMFAULT_NAKED_FUNC void MemManageException(void) {
function MEMFAULT_NAKED_FUNC (line 33) | MEMFAULT_NAKED_FUNC void BusFaultException(void) {
function MEMFAULT_NAKED_FUNC (line 37) | MEMFAULT_NAKED_FUNC void UsageFaultException(void) {
function MEMFAULT_NAKED_FUNC (line 41) | MEMFAULT_NAKED_FUNC void NMIException(void) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_http_client.c
type sMfltHttpClient (line 35) | typedef struct MfltHttpClient {
function memfault_platform_http_response_get_status (line 49) | int memfault_platform_http_response_get_status(const sMfltHttpResponse *...
function prv_finalize_request_and_run_callback (line 64) | static void prv_finalize_request_and_run_callback(sMfltHttpClient *client,
function prv_handle_data_received (line 87) | static void prv_handle_data_received(sMfltHttpClient *client, http_respo...
function prv_http_event_handler (line 106) | static void prv_http_event_handler(http_client_t *wiced_client, http_eve...
function sMfltHttpClient (line 131) | sMfltHttpClient *memfault_platform_http_client_create(void) {
function prv_do_dns_lookup (line 171) | static bool prv_do_dns_lookup(sMfltHttpClient *client) {
function wiced_result_t (line 186) | static wiced_result_t prv_send_chunk_in_http_request(sMfltHttpClient *cl...
type eMemfaultPlatformHttpPost (line 277) | typedef enum {
function memfault_platform_http_client_post_data (line 285) | int memfault_platform_http_client_post_data(sMfltHttpClient *client,
function memfault_platform_http_client_wait_until_requests_completed (line 335) | int memfault_platform_http_client_wait_until_requests_completed(sMfltHtt...
function memfault_platform_http_client_destroy (line 349) | int memfault_platform_http_client_destroy(sMfltHttpClient *client) {
FILE: examples/wiced/libraries/memfault/platform_reference_impl/memfault_platform_impl.c
type eMemfaultPlatformBoot (line 19) | typedef enum {
function memfault_platform_boot (line 24) | int memfault_platform_boot(void) {
function MEMFAULT_NORETURN (line 44) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
FILE: examples/zephyr/nucleo_wba55cg/memfault_demo_app/src/main.c
function blink_forever (line 19) | static void blink_forever(void) {
function main (line 43) | int main(void) {
FILE: examples/zephyr/qemu/qemu-app/src/cdr.c
function prv_has_cdr_cb (line 52) | static bool prv_has_cdr_cb(sMemfaultCdrMetadata *metadata) {
function prv_read_data_cb (line 58) | static bool prv_read_data_cb(uint32_t offset, void *data, size_t data_le...
function prv_mark_cdr_read_cb (line 74) | static void prv_mark_cdr_read_cb(void) {
function prv_stage_cdr (line 91) | static int prv_stage_cdr(const struct shell *shell, size_t argc, char **...
FILE: examples/zephyr/qemu/qemu-app/src/main.c
type k_thread (line 39) | struct k_thread
function blink_forever (line 43) | static void blink_forever(void) {
function memfault_platform_get_device_info (line 68) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
type k_thread (line 80) | struct k_thread
function prv_test_thread_function (line 82) | static void prv_test_thread_function(void *arg0, void *arg1, void *arg2) {
function prv_test_thread_work_handler (line 90) | static void prv_test_thread_work_handler(struct k_work *work) {
function prv_test_thread_timer_expiry_handler (line 112) | static void prv_test_thread_timer_expiry_handler(struct k_timer *dummy) {
function prv_init_test_thread_timer (line 117) | static void prv_init_test_thread_timer(void) {
function prv_init_test_thread_timer (line 124) | static void prv_init_test_thread_timer(void) { }
function prv_collect_main_thread_stack_free (line 131) | static void prv_collect_main_thread_stack_free(void) {
function prv_collect_main_thread_run_stats (line 149) | static void prv_collect_main_thread_run_stats(void) {
function prv_run_example_memory_metrics (line 190) | static int prv_run_example_memory_metrics(const struct shell *shell, siz...
function prv_collect_thread_stack_usage_cb (line 222) | static void prv_collect_thread_stack_usage_cb(const struct k_thread *thr...
function memfault_metrics_heartbeat_collect_data (line 245) | void memfault_metrics_heartbeat_collect_data(void) {
function prv_run_stack_metrics_example (line 257) | static void prv_run_stack_metrics_example(void) {
function k_sys_fatal_error_handler (line 265) | void k_sys_fatal_error_handler(unsigned int reason, const z_arch_esf_t *...
function prv_metrics_session (line 271) | static int prv_metrics_session(const struct shell *shell, size_t argc, c...
function prv_session_crash (line 292) | static int prv_session_crash(const struct shell *shell, size_t argc, cha...
function memfault_reboot_tracking_load (line 311) | void memfault_reboot_tracking_load(sMemfaultRebootTrackingStorage *dst) {
function memfault_reboot_tracking_save (line 324) | void memfault_reboot_tracking_save(const sMemfaultRebootTrackingStorage ...
function prv_log_overflow (line 333) | static int prv_log_overflow(const struct shell *shell, size_t argc, char...
function memfault_crc16_compute (line 355) | uint16_t memfault_crc16_compute(uint16_t crc_initial_value, const void *...
function memfault_platform_get_time_since_boot_ms (line 362) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function prv_watchdog_feed_timer_handler (line 372) | static void prv_watchdog_feed_timer_handler(struct k_timer *dummy) {
function prv_start_watchdog_feed_timer (line 380) | static int prv_start_watchdog_feed_timer() {
function main (line 389) | int main(void) {
FILE: examples/zephyr/stm32l4_disco/apps/memfault_demo_app/src/main.c
function memfault_platform_get_device_info (line 19) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function main (line 28) | int main(void) {
FILE: ports/atmel/saml1x/rcause_reboot_tracking.c
function memfault_reboot_reason_get (line 15) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/cypress/psoc6/memfault_platform_core.c
function memfault_metrics_heartbeat_collect_sdk_data (line 36) | void memfault_metrics_heartbeat_collect_sdk_data(void) {
function prv_wcm_event_cb (line 82) | static void prv_wcm_event_cb(cy_wcm_event_t event, cy_wcm_event_data_t *...
function memfault_wcm_metrics_boot (line 127) | void memfault_wcm_metrics_boot(void) {
function MEMFAULT_WEAK (line 133) | MEMFAULT_WEAK void memfault_platform_reboot(void) {
function memfault_platform_sanitize_address_range (line 138) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function memfault_platform_boot (line 157) | int memfault_platform_boot(void) {
FILE: ports/cypress/psoc6/memfault_platform_coredump_regions.c
function Cy_OnResetUser (line 37) | void Cy_OnResetUser(void) {
function sMfltCoredumpRegion (line 43) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
FILE: ports/cypress/psoc6/memfault_platform_http.c
type MfltHttpClient (line 16) | struct MfltHttpClient {
type sMfltHttpResponse (line 22) | typedef struct MfltHttpResponse {
function cy_rslt_t (line 28) | static cy_rslt_t prv_teardown_connection(sMfltHttpClient *client) {
function cy_rslt_t (line 39) | static cy_rslt_t prv_disconnect_handler(cy_socket_t socket_handle, void ...
function cy_rslt_t (line 45) | static cy_rslt_t prv_open_socket(sMfltHttpClient *client) {
function sMfltHttpClient (line 82) | sMfltHttpClient *memfault_platform_http_client_create(void) {
function prv_try_send (line 110) | static bool prv_try_send(sMfltHttpClient *client, const uint8_t *buf, si...
function prv_send_data (line 127) | static bool prv_send_data(const void *data, size_t data_len, void *ctx) {
function prv_read_socket_data (line 132) | static bool prv_read_socket_data(sMfltHttpClient *client, void *buf, siz...
function memfault_platform_http_response_get_status (line 140) | int memfault_platform_http_response_get_status(const sMfltHttpResponse *...
function prv_wait_for_http_response (line 148) | static int prv_wait_for_http_response(sMfltHttpClient *client) {
function memfault_platform_http_client_post_data (line 169) | int memfault_platform_http_client_post_data(sMfltHttpClient *client,
function memfault_platform_http_client_destroy (line 224) | int memfault_platform_http_client_destroy(sMfltHttpClient *client) {
function memfault_platform_http_client_wait_until_requests_completed (line 233) | int memfault_platform_http_client_wait_until_requests_completed(sMfltHtt...
FILE: ports/cypress/psoc6/res_cause_reboot_tracking.c
function memfault_reboot_reason_get (line 23) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
function memfault_platform_reboot_tracking_boot (line 124) | void memfault_platform_reboot_tracking_boot(void) {
FILE: ports/dialog/da145xx/memfault_platform_core.c
function memfault_platform_boot (line 18) | int memfault_platform_boot(void) {
function MEMFAULT_NORETURN (line 38) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
FILE: ports/dialog/da145xx/memfault_platform_coredump_regions.c
function sMfltCoredumpRegion (line 16) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function memfault_platform_sanitize_address_range (line 50) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
FILE: ports/dialog/da145xx/memfault_platform_coredump_storage.c
function memfault_platform_coredump_storage_get_info (line 40) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_op_within_flash_bounds (line 47) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_read (line 53) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 72) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_write (line 96) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_clear (line 117) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/dialog/da145xx/memfault_platform_debug_log.c
function memfault_platform_log (line 22) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 59) | void memfault_platform_log_raw(const char *fmt, ...) {
FILE: ports/dialog/da145xx/memfault_platform_metrics.c
function memfault_platform_metrics_timer_boot (line 14) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
function memfault_platform_get_time_since_boot_ms (line 24) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
FILE: ports/dialog/da145xx/reset_reboot_tracking.c
function reset_indication (line 31) | void reset_indication(uint16_t reset_status) {
function reset_indication (line 45) | void reset_indication(uint16_t por_time) {
function memfault_platform_reboot_tracking_boot (line 56) | void memfault_platform_reboot_tracking_boot(void) {
function memfault_reboot_reason_get (line 62) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/dialog/da1468x/qspi_coredump_storage.c
type nvms_partition_t (line 67) | typedef struct nvms_partition_t {
type sQspiCoredumpPartitionInfo (line 74) | typedef struct {
function prv_get_partition_info_crc (line 86) | static uint32_t prv_get_partition_info_crc(void) {
function nvms_partition_t (line 91) | static const nvms_partition_t *prv_get_core_partition(void) {
function nvms_partition_t (line 99) | static const nvms_partition_t *prv_validate_and_get_core_partition(void) {
function MEMFAULT_NO_OPT (line 110) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function memfault_platform_coredump_storage_boot (line 119) | void memfault_platform_coredump_storage_boot(void) {
function memfault_platform_saving_coredump (line 143) | bool memfault_platform_saving_coredump(void) {
function memfault_port_coredump_save_begin (line 150) | bool memfault_port_coredump_save_begin(void) {
function memfault_platform_coredump_storage_get_info (line 174) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_read (line 191) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_write (line 207) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_erase (line 226) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_clear (line 239) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/dialog/da1468x/reset_stat_reboot_tracking.c
function __RETAINED_UNINIT (line 33) | __RETAINED_UNINIT
function prv_reset_reason_get (line 47) | static uint32_t prv_reset_reason_get(void) {
function prv_reset_reason_clear (line 51) | static void prv_reset_reason_clear(uint32_t reset_reas_clear_mask) {
function memfault_reboot_reason_get (line 70) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/dialog/da1468x/wdog_software_watchdog.c
function memfault_software_watchdog_enable (line 46) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_disable (line 51) | int memfault_software_watchdog_disable(void) {
function memfault_software_watchdog_feed (line 55) | int memfault_software_watchdog_feed(void) {
function memfault_software_watchdog_update_timeout (line 60) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
FILE: ports/dialog/da1469x/memfault_diagnostic_service.c
type eMdsDataExportMode (line 93) | typedef enum {
type md_service_t (line 106) | typedef struct {
type eMdsAppError (line 134) | typedef enum {
function MEMFAULT_WEAK (line 146) | MEMFAULT_WEAK bool mds_access_enabled(uint16_t connection_handle) {
function prv_handle_disconnected_evt (line 151) | static void prv_handle_disconnected_evt(ble_service_t *svc, const ble_ev...
function prv_try_notify (line 164) | static void prv_try_notify(md_service_t *mds, uint16_t conn_idx) {
function prv_mds_timer_callback (line 213) | static void prv_mds_timer_callback(MEMFAULT_UNUSED TimerHandle_t handle) {
function prv_handle_read_req (line 233) | static void prv_handle_read_req(ble_service_t *svc, const ble_evt_gatts_...
function att_error_t (line 296) | static att_error_t prv_handle_cccd_write(md_service_t *mds, uint16_t con...
function att_error_t (line 326) | static att_error_t prv_handle_data_export_write(md_service_t *mds, uint1...
function prv_handle_write_req (line 357) | static void prv_handle_write_req(ble_service_t *svc, const ble_evt_gatts...
function prv_cleanup_service (line 375) | static void prv_cleanup_service(ble_service_t *svc) {
function prv_handle_event_sent (line 388) | static void prv_handle_event_sent(ble_service_t *svc, const ble_evt_gatt...
FILE: ports/dialog/da1469x/memfault_platform_core.c
function memfault_platform_boot (line 15) | int memfault_platform_boot(void) {
function MEMFAULT_NORETURN (line 36) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
FILE: ports/dialog/da1469x/memfault_platform_coredump_regions.c
function sMfltCoredumpRegion (line 16) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function memfault_platform_sanitize_address_range (line 33) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
FILE: ports/dialog/da1469x/memfault_platform_coredump_storage.c
function memfault_platform_coredump_storage_get_info (line 49) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_op_within_flash_bounds (line 56) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_read (line 62) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 73) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_write (line 92) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_clear (line 110) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/dialog/da1469x/memfault_platform_debug_log.c
function memfault_platform_log (line 18) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 55) | void memfault_platform_log_raw(const char *fmt, ...) {
FILE: ports/dialog/da1469x/reset_reboot_tracking.c
function memfault_platform_reboot_tracking_boot (line 16) | void memfault_platform_reboot_tracking_boot(void) {
function memfault_reboot_reason_get (line 22) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/emlib/memfault_demo_cli.c
function prv_adjust_arg_vars (line 21) | static void prv_adjust_arg_vars(sl_cli_command_arg_t *arguments, int *ar...
function memfault_emlib_cli_clear_core (line 30) | void memfault_emlib_cli_clear_core(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_get_core (line 37) | void memfault_emlib_cli_get_core(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_logs (line 44) | void memfault_emlib_cli_logs(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_log_capture (line 51) | void memfault_emlib_cli_log_capture(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_get_device_info (line 56) | void memfault_emlib_cli_get_device_info(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_export (line 63) | void memfault_emlib_cli_export(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_trace (line 68) | void memfault_emlib_cli_trace(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_heartbeat (line 75) | void memfault_emlib_cli_heartbeat(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_reboot (line 80) | void memfault_emlib_cli_reboot(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_assert (line 86) | void memfault_emlib_cli_assert(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_hang (line 93) | void memfault_emlib_cli_hang(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_busfault (line 99) | void memfault_emlib_cli_busfault(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_hardfault (line 106) | void memfault_emlib_cli_hardfault(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_usagefault (line 113) | void memfault_emlib_cli_usagefault(sl_cli_command_arg_t *arguments) {
function memfault_emlib_cli_memmanage (line 120) | void memfault_emlib_cli_memmanage(sl_cli_command_arg_t *arguments) {
FILE: ports/emlib/msc_coredump_storage.c
function MEMFAULT_NO_OPT (line 50) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_flash_bounds (line 56) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_clear (line 62) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 72) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_buffered_write (line 81) | bool memfault_platform_coredump_storage_buffered_write(sCoredumpWorkingB...
function memfault_platform_coredump_storage_read (line 92) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 103) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/emlib/rmu_reboot_tracking.c
function eMemfaultRebootReason (line 31) | static eMemfaultRebootReason prv_get_and_print_reason(uint32_t reset_cau...
function eMemfaultRebootReason (line 79) | static eMemfaultRebootReason prv_get_and_print_reason(uint32_t reset_cau...
function memfault_reboot_reason_get (line 154) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/emlib/wdog_software_watchdog.c
function prv_build_configuration (line 60) | static void prv_build_configuration(WDOG_Init_TypeDef *cfg, uint32_t per...
function prv_configure_watchdog_with_timeout (line 99) | static int prv_configure_watchdog_with_timeout(uint32_t timeout_ms) {
function memfault_software_watchdog_update_timeout (line 171) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
function memfault_software_watchdog_enable (line 175) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_disable (line 180) | int memfault_software_watchdog_disable(void) {
function memfault_software_watchdog_feed (line 190) | int memfault_software_watchdog_feed(void) {
FILE: ports/esp_idf/memfault/common/memfault_fault_handler.c
function memfault_fault_handling_assert (line 44) | void memfault_fault_handling_assert(void *pc, void *lr) {
function memfault_fault_handling_assert_extra (line 75) | void memfault_fault_handling_assert_extra(void *pc, void *lr, sMemfaultA...
function sMfltRegState (line 81) | static sMfltRegState prv_esp_frame_info_to_memfault(const void *frame) {
function __wrap_esp_core_dump_to_flash (line 183) | void __wrap_esp_core_dump_to_flash(panic_info_t *info) {
FILE: ports/esp_idf/memfault/common/memfault_platform_core.c
function MEMFAULT_WEAK (line 71) | MEMFAULT_WEAK bool memfault_esp_port_data_available(void) {
function MEMFAULT_WEAK (line 75) | MEMFAULT_WEAK bool memfault_esp_port_get_chunk(void *buf, size_t *buf_le...
function memfault_platform_get_time_since_boot_ms (line 82) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function memfault_arch_is_inside_isr (line 88) | bool memfault_arch_is_inside_isr(void) {
function MEMFAULT_NORETURN (line 92) | MEMFAULT_NORETURN void memfault_sdk_assert_func_noreturn(void) {
function eMemfaultRebootReason (line 108) | static eMemfaultRebootReason prv_record_reboot_reason(void) {
function memfault_esp_port_collect_reset_info (line 187) | void memfault_esp_port_collect_reset_info(void) {
function memfault_lock (line 202) | void memfault_lock(void) {
function memfault_unlock (line 206) | void memfault_unlock(void) {
function memfault_esp_port_vprintf_log_hook (line 210) | int memfault_esp_port_vprintf_log_hook(const char *fmt, va_list args) {
function prv_copy_log_to_mflt_buffer (line 237) | __attribute__((noinline)) static int prv_copy_log_to_mflt_buffer(const c...
function prv_memfault_log_wrapper (line 241) | static int prv_memfault_log_wrapper(const char *fmt, va_list args) {
function prv_alloc_failed_callback (line 253) | static void prv_alloc_failed_callback(size_t size, uint32_t caps, const ...
function memfault_boot (line 260) | void memfault_boot(void) {
function MEMFAULT_NORETURN (line 313) | MEMFAULT_NORETURN void memfault_platform_reboot(void) {
function prv_memfault_boot (line 320) | static void __attribute__((constructor)) prv_memfault_boot(void) {
function prv_heap_lock_acquire (line 332) | static bool prv_heap_lock_acquire(void) {
function prv_heap_lock_release (line 341) | static void prv_heap_lock_release(void) {
function __wrap_free (line 369) | void __wrap_free(void *ptr) {
function esp_heap_trace_alloc_hook (line 380) | void esp_heap_trace_alloc_hook(void *ptr, size_t size, uint32_t caps) {
function esp_heap_trace_free_hook (line 387) | void esp_heap_trace_free_hook(void *ptr) {
FILE: ports/esp_idf/memfault/common/memfault_platform_coredump.c
type sEspIdfCoredumpPartitionInfo (line 82) | typedef struct {
function prv_get_partition_info_crc (line 92) | static uint32_t prv_get_partition_info_crc(void) {
function esp_partition_t (line 97) | static const esp_partition_t *prv_get_core_partition(void) {
function prv_get_freertos_bss_common (line 110) | size_t prv_get_freertos_bss_common(sMfltCoredumpRegion *regions, size_t ...
function MEMFAULT_WEAK (line 157) | MEMFAULT_WEAK size_t memfault_platform_sanitize_address_range(void *star...
function prv_task_watchdog_msg_handler (line 177) | static void prv_task_watchdog_msg_handler(void *opaque, const char *msg) {
function prv_get_task_watchdog_region (line 214) | size_t prv_get_task_watchdog_region(sMfltCoredumpRegion *regions, size_t...
function sMfltCoredumpRegion (line 248) | const sMfltCoredumpRegion *memfault_esp_port_coredump_get_regions(
function MEMFAULT_WEAK (line 305) | MEMFAULT_WEAK const sMfltCoredumpRegion *memfault_platform_coredump_get_...
function prv_get_adjusted_size (line 311) | static uint32_t prv_get_adjusted_size(const esp_partition_t *core_part) {
function __wrap_esp_core_dump_init (line 327) | void __wrap_esp_core_dump_init(void) {
function esp_err_t (line 349) | esp_err_t __wrap_esp_core_dump_image_get(size_t *out_addr, size_t *out_s...
function esp_partition_t (line 368) | const esp_partition_t *prv_validate_and_get_core_partition(void) {
function memfault_platform_coredump_storage_clear (line 377) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 398) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_panic_safe_putchar (line 424) | static void prv_panic_safe_putchar(const char c) {
function prv_panic_safe_putchar (line 430) | static void prv_panic_safe_putchar(char c) { }
function prv_panic_safe_putstr (line 434) | static void prv_panic_safe_putstr(const char *str) {
function memfault_port_coredump_save_begin (line 442) | bool memfault_port_coredump_save_begin(void) {
function memfault_platform_coredump_storage_write (line 463) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_read (line 479) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 494) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/esp_idf/memfault/common/memfault_platform_debug_log.c
function memfault_platform_log (line 24) | void memfault_platform_log(eMemfaultPlatformLogLevel level, const char *...
function memfault_platform_log_raw (line 54) | void memfault_platform_log_raw(const char *fmt, ...) {
function memfault_platform_hexdump (line 64) | void memfault_platform_hexdump(eMemfaultPlatformLogLevel level, const vo...
FILE: ports/esp_idf/memfault/common/memfault_platform_deep_sleep.c
function RTC_NOINIT_ATTR (line 39) | static RTC_NOINIT_ATTR struct MemfaultDeepSleepMetricsBackup {
function prv_clear_backup_data (line 63) | static void prv_clear_backup_data(void) {
function memfault_platform_metrics_timer_boot (line 73) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
function memfault_platform_get_time_since_boot_ms (line 81) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function prv_backup_event_storage (line 88) | static void prv_backup_event_storage(void) {
function prv_backup_metrics (line 125) | static void prv_backup_metrics(void) {
function prv_backup_logs (line 140) | static void prv_backup_logs(void) {
function prv_check_and_trigger_heartbeat (line 172) | static void prv_check_and_trigger_heartbeat(void) {
function prv_check_and_trigger_upload (line 199) | static void prv_check_and_trigger_upload(void) {
function memfault_platform_deep_sleep_save_state (line 230) | void memfault_platform_deep_sleep_save_state(void) {
function prv_woke_up_from_deep_sleep (line 280) | static bool prv_woke_up_from_deep_sleep(void) {
function memfault_event_storage_restore_state (line 301) | bool memfault_event_storage_restore_state(sMfltEventStorageSaveState *st...
function memfault_metrics_restore_state (line 333) | bool memfault_metrics_restore_state(void *state) {
function memfault_log_restore_state (line 368) | extern bool memfault_log_restore_state(sMfltLogSaveState *state) {
function memfault_platform_deep_sleep_restore_state (line 399) | void memfault_platform_deep_sleep_restore_state(void) {
FILE: ports/esp_idf/memfault/common/memfault_platform_demo_cli_cmds.c
function prv_recursive_crash (line 34) | static void IRAM_ATTR prv_recursive_crash(int depth) {
function prv_check1 (line 53) | void prv_check1(const void *buf) {
function prv_check2 (line 57) | void prv_check2(const void *buf) {
function prv_check3 (line 62) | void prv_check3(const void *buf) {
function prv_check4 (line 67) | void prv_check4(void) {
function prv_timer_cb (line 73) | static bool IRAM_ATTR prv_timer_cb(gptimer_handle_t timer, const gptimer...
function prv_timer_init (line 82) | static void prv_timer_init(void) {
function prv_timer_start (line 97) | static void prv_timer_start(uint32_t timer_interval_ms) {
function prv_timer_group0_isr (line 110) | static void IRAM_ATTR prv_timer_group0_isr(void *para) {
function prv_timer_init (line 122) | static void prv_timer_init(void) {
function prv_timer_start (line 136) | static void prv_timer_start(uint32_t timer_interval_ms) {
function prv_esp32_assert_example (line 150) | static int prv_esp32_assert_example(int argc, char **argv) {
function prv_esp32_crash_example (line 169) | static int prv_esp32_crash_example(int argc, char **argv) {
function prv_esp32_leak_cmd (line 189) | static int prv_esp32_leak_cmd(int argc, char **argv) {
function prv_esp32_reboot_cmd (line 213) | static int prv_esp32_reboot_cmd(int argc, char **argv) {
function prv_esp32_memfault_heartbeat (line 248) | static int prv_esp32_memfault_heartbeat(int argc, char **argv) {
function prv_esp32_memfault_heartbeat_dump (line 253) | static int prv_esp32_memfault_heartbeat_dump(int argc, char **argv) {
function prv_memfault_demo_cli_cmd_time (line 258) | static int prv_memfault_demo_cli_cmd_time(int argc, char **argv) {
function prv_event_storage_used (line 281) | static int prv_event_storage_used(int argc, char **argv) {
function prv_netif_connected_check (line 287) | static bool prv_netif_connected_check(const char *op) {
type sMemfaultOtaUserCtx (line 297) | typedef struct {
function prv_handle_ota_upload_available (line 301) | static bool prv_handle_ota_upload_available(void *user_ctx) {
function prv_handle_ota_download_complete (line 311) | static bool prv_handle_ota_download_complete(void *user_ctx) {
function prv_memfault_ota (line 317) | static int prv_memfault_ota(sMemfaultOtaUserCtx *ctx) {
function prv_memfault_ota_perform (line 343) | static int prv_memfault_ota_perform(int argc, char **argv) {
function prv_memfault_ota_check (line 350) | static int prv_memfault_ota_check(int argc, char **argv) {
function prv_post_memfault_data (line 357) | static int prv_post_memfault_data(int argc, char **argv) {
function prv_chunk_data_export (line 362) | static int prv_chunk_data_export(int argc, char **argv) {
function memfault_register_cli (line 367) | void memfault_register_cli(void) {
FILE: ports/esp_idf/memfault/common/memfault_platform_device_info.c
function prv_get_device_serial (line 22) | static void prv_get_device_serial(char *buf, size_t buf_len) {
function memfault_esp_port_get_device_info (line 39) | void memfault_esp_port_get_device_info(struct MemfaultDeviceInfo *info) {
function memfault_platform_get_device_info (line 62) | void memfault_platform_get_device_info(struct MemfaultDeviceInfo *info) {
FILE: ports/esp_idf/memfault/common/memfault_platform_http_client.c
function esp_err_t (line 55) | static esp_err_t prv_http_event_handler(esp_http_client_event_t *evt) {
function prv_post_chunks (line 92) | static int prv_post_chunks(esp_http_client_handle_t client, void *buffer...
function sMfltHttpClient (line 124) | sMfltHttpClient *memfault_platform_http_client_create(void) {
function memfault_platform_http_client_destroy (line 144) | int memfault_platform_http_client_destroy(sMfltHttpClient *_client) {
type sMfltHttpResponse (line 154) | typedef struct MfltHttpResponse {
function memfault_platform_http_response_get_status (line 158) | int memfault_platform_http_response_get_status(const sMfltHttpResponse *...
function prv_deviceinfo_needs_url_escaping (line 169) | static int prv_deviceinfo_needs_url_escaping(sMemfaultDeviceInfo *device...
function prv_build_latest_release_url (line 200) | static int prv_build_latest_release_url(char *buf, size_t buf_len) {
function memfault_esp_port_ota_get_release_url (line 228) | int memfault_esp_port_ota_get_release_url(char **download_url_out) {
function memfault_esp_port_ota_update (line 324) | int memfault_esp_port_ota_update(const sMemfaultOtaUpdateHandler *handle...
function memfault_platform_http_client_post_data (line 398) | int memfault_platform_http_client_post_data(sMfltHttpClient *_client,
function memfault_platform_http_client_wait_until_requests_completed (line 442) | int memfault_platform_http_client_wait_until_requests_completed(sMfltHtt...
function memfault_esp_port_wifi_connected (line 448) | bool memfault_esp_port_wifi_connected(void) {
function memfault_esp_port_netif_connected (line 454) | bool memfault_esp_port_netif_connected(void) {
function memfault_esp_port_http_client_post_data (line 480) | int memfault_esp_port_http_client_post_data(void) {
FILE: ports/esp_idf/memfault/common/memfault_platform_http_client_buffer.c
function MEMFAULT_WEAK (line 24) | MEMFAULT_WEAK void *memfault_http_client_allocate_chunk_buffer(size_t *b...
function MEMFAULT_WEAK (line 44) | MEMFAULT_WEAK void memfault_http_client_release_chunk_buffer(void *buffe...
FILE: ports/esp_idf/memfault/common/memfault_platform_http_periodic_upload.c
function prv_handle_ota_upload_available (line 32) | static bool prv_handle_ota_upload_available(void *user_ctx) {
function prv_handle_ota_download_complete (line 38) | static bool prv_handle_ota_download_complete(void *user_ctx) {
function prv_do_periodic_ota (line 54) | static void prv_do_periodic_ota(void) {
function prv_periodic_upload_task (line 60) | static void prv_periodic_upload_task(void *args) {
function memfault_esp_port_http_periodic_upload_logs (line 107) | void memfault_esp_port_http_periodic_upload_logs(bool enable) {
function memfault_esp_port_http_periodic_upload_start (line 112) | void memfault_esp_port_http_periodic_upload_start(void) {
FILE: ports/esp_idf/memfault/common/memfault_platform_metrics.c
function MEMFAULT_WEAK (line 71) | MEMFAULT_WEAK void memfault_esp_metric_timer_dispatch(MemfaultPlatformTi...
function prv_metric_timer_handler (line 78) | static void prv_metric_timer_handler(void *arg) {
function prv_network_io_metric_event_handler (line 91) | static void prv_network_io_metric_event_handler(void *arg, esp_event_bas...
function prv_enable_network_io_tap (line 102) | static void prv_enable_network_io_tap(void) {
function __wrap_esp_startup_start_app (line 135) | void __wrap_esp_startup_start_app(void) {
function prv_boot_time_metric_handler (line 141) | static void prv_boot_time_metric_handler(void) {
function prv_wifi_metric_event_handler (line 152) | static void prv_wifi_metric_event_handler(void *arg, esp_event_base_t ev...
function prv_register_event_handler (line 203) | static void prv_register_event_handler(void) {
function prv_collect_oui (line 210) | static void prv_collect_oui(wifi_ap_record_t *ap_info) {
function prv_collect_wifi_version (line 256) | static void prv_collect_wifi_version(wifi_ap_record_t *ap_info) {
function prv_collect_wifi_metrics (line 283) | static void prv_collect_wifi_metrics(void) {
function prv_collect_memory_usage_metrics (line 314) | static void prv_collect_memory_usage_metrics(void) {
function memfault_platform_metrics_timer_boot (line 335) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
function prv_collect_temperature_metric (line 367) | static void prv_collect_temperature_metric(void) {
function prv_collect_chip_metrics (line 408) | static void prv_collect_chip_metrics(void) {
function sMfltFlashCounters (line 432) | sMfltFlashCounters memfault_platform_metrics_get_flash_counters(
function prv_collect_flash_metrics (line 456) | static void prv_collect_flash_metrics(void) {
function memfault_metrics_heartbeat_collect_sdk_data (line 489) | void memfault_metrics_heartbeat_collect_sdk_data(void) {
function memfault_platform_metrics_connectivity_boot (line 533) | void memfault_platform_metrics_connectivity_boot(void) {
function esp_err_t (line 543) | esp_err_t __wrap_esp_event_loop_create_default(void) {
FILE: ports/esp_idf/memfault/common/memfault_platform_system_time.c
function memfault_platform_time_get_current (line 11) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *mflt_time) {
FILE: ports/esp_idf/memfault/common/memfault_self_test_platform.c
function memfault_self_test_platform_delay (line 21) | void memfault_self_test_platform_delay(uint32_t delay_ms) {
function memfault_self_test_platform_disable_irqs (line 28) | bool memfault_self_test_platform_disable_irqs(void) {
function memfault_self_test_platform_enable_irqs (line 47) | bool memfault_self_test_platform_enable_irqs(void) {
function memfault_esp_idf_include_self_test_impl (line 66) | void memfault_esp_idf_include_self_test_impl(void) { }
FILE: ports/esp_idf/memfault/include/memfault/esp_port/device_info.h
type MemfaultDeviceInfo (line 20) | struct MemfaultDeviceInfo
FILE: ports/esp_idf/memfault/include/memfault/esp_port/http_client.h
type sMemfaultOtaUpdateHandler (line 38) | typedef struct {
FILE: ports/esp_idf/memfault/include/memfault/esp_port/metrics.h
type sMfltFlashCounters (line 32) | typedef struct sMfltFlashCounters {
FILE: ports/esp_idf/memfault/v4.x/memfault_esp_spi_flash.c
function memfault_esp_spi_flash_coredump_begin (line 15) | int memfault_esp_spi_flash_coredump_begin(void) {
function memfault_esp_spi_flash_erase_range (line 22) | int memfault_esp_spi_flash_erase_range(size_t start_address, size_t size) {
function memfault_esp_spi_flash_write (line 26) | int memfault_esp_spi_flash_write(size_t dest_addr, const void *src, size...
function memfault_esp_spi_flash_read (line 30) | int memfault_esp_spi_flash_read(size_t src_addr, void *dest, size_t size) {
FILE: ports/esp_idf/memfault/v5.x/memfault_esp_spi_flash.c
function memfault_esp_spi_flash_coredump_begin (line 13) | int memfault_esp_spi_flash_coredump_begin(void) {
function memfault_esp_spi_flash_erase_range (line 20) | int memfault_esp_spi_flash_erase_range(size_t start_address, size_t size) {
function memfault_esp_spi_flash_write (line 24) | int memfault_esp_spi_flash_write(size_t dest_addr, const void *src, size...
function memfault_esp_spi_flash_read (line 52) | int memfault_esp_spi_flash_read(size_t src_addr, void *dest, size_t size) {
FILE: ports/esp_idf/memfault/v6.x/memfault_esp_spi_flash.c
function memfault_esp_spi_flash_coredump_begin (line 18) | int memfault_esp_spi_flash_coredump_begin(void) {
function memfault_esp_spi_flash_erase_range (line 25) | int memfault_esp_spi_flash_erase_range(size_t start_address, size_t size) {
function memfault_esp_spi_flash_write (line 29) | int memfault_esp_spi_flash_write(size_t dest_addr, const void *src, size...
function memfault_esp_spi_flash_read (line 57) | int memfault_esp_spi_flash_read(size_t src_addr, void *dest, size_t size) {
FILE: ports/freertos/src/memfault_core_freertos.c
function memfault_platform_get_time_since_boot_ms (line 23) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function SemaphoreHandle_t (line 47) | SemaphoreHandle_t prv_init_memfault_mutex(void) {
function memfault_lock (line 56) | void memfault_lock(void) {
function memfault_unlock (line 60) | void memfault_unlock(void) {
function memfault_freertos_port_boot (line 64) | void memfault_freertos_port_boot(void) {
FILE: ports/freertos/src/memfault_freertos_ram_regions.c
type MfltTaskWatermarks (line 135) | struct MfltTaskWatermarks {
function prv_find_slot (line 178) | static bool prv_find_slot(size_t *idx, void *desired_tcb) {
function memfault_freertos_trace_task_create (line 194) | void memfault_freertos_trace_task_create(void *tcb) {
function memfault_freertos_trace_task_delete (line 208) | void memfault_freertos_trace_task_delete(void *tcb) {
function prv_stack_bytes_unused (line 219) | static uint32_t prv_stack_bytes_unused(void *tcb_address) {
function memfault_freertos_get_task_regions (line 252) | size_t memfault_freertos_get_task_regions(sMfltCoredumpRegion *regions, ...
FILE: ports/freertos/src/memfault_metrics_freertos.c
function prv_metric_timer_callback (line 29) | static void prv_metric_timer_callback(MEMFAULT_UNUSED TimerHandle_t hand...
function TimerHandle_t (line 33) | static TimerHandle_t prv_metric_timer_init(const char *const pcTimerName,
function memfault_platform_metrics_timer_boot (line 47) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
FILE: ports/freertos/src/memfault_panics_freertos.c
function vAssertCalled (line 17) | void vAssertCalled(MEMFAULT_UNUSED const char *file, MEMFAULT_UNUSED int...
function vApplicationStackOverflowHook (line 33) | void vApplicationStackOverflowHook(MEMFAULT_UNUSED TaskHandle_t xTask,
FILE: ports/freertos/src/memfault_sdk_metrics_freertos.c
function configRUN_TIME_COUNTER_TYPE (line 72) | static configRUN_TIME_COUNTER_TYPE prv_calculate_delta_runtime(
function prv_calc_runtime_percent (line 82) | static int32_t prv_calc_runtime_percent(configRUN_TIME_COUNTER_TYPE prev...
function configRUN_TIME_COUNTER_TYPE (line 116) | static configRUN_TIME_COUNTER_TYPE prv_get_total_runtime(void) {
function configRUN_TIME_COUNTER_TYPE (line 128) | static configRUN_TIME_COUNTER_TYPE prv_get_idle_counter_for_core(uint32_...
function prv_record_timer_stack_free_bytes (line 158) | static void prv_record_timer_stack_free_bytes(void) {
function memfault_freertos_port_task_runtime_metrics (line 168) | void memfault_freertos_port_task_runtime_metrics(void) {
FILE: ports/freertos/src/memfault_sdk_metrics_thread.c
type MfltFreeRTOSTCB (line 84) | struct MfltFreeRTOSTCB {
function prv_get_stack_usage_pct_for_thread (line 110) | static uint32_t prv_get_stack_usage_pct_for_thread(const TaskHandle_t ta...
function memfault_freertos_port_thread_metrics (line 139) | void memfault_freertos_port_thread_metrics(void) {
FILE: ports/freertos/src/memfault_self_test_platform.c
function memfault_self_test_platform_delay (line 11) | void memfault_self_test_platform_delay(uint32_t delay_ms) {
function memfault_self_test_platform_disable_irqs (line 15) | bool memfault_self_test_platform_disable_irqs(void) {
function memfault_self_test_platform_enable_irqs (line 20) | bool memfault_self_test_platform_enable_irqs(void) {
FILE: ports/include/memfault/ports/buffered_coredump_storage.h
type sCoredumpWorkingBuffer (line 54) | typedef struct CoredumpWorkingBuffer sCoredumpWorkingBuffer;
type CoredumpWorkingBuffer (line 69) | struct CoredumpWorkingBuffer {
function sCoredumpWorkingBuffer (line 82) | static sCoredumpWorkingBuffer *prv_get_working_buf(uint32_t offset) {
function prv_write_blk (line 86) | static bool prv_write_blk(sCoredumpWorkingBuffer *block) {
function prv_try_flush (line 94) | static bool prv_try_flush(void) {
function memfault_coredump_storage_buffered_write (line 125) | static bool memfault_coredump_storage_buffered_write(uint32_t offset, co...
function memfault_platform_coredump_storage_write (line 174) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
FILE: ports/include/memfault/ports/freertos/thread_metrics.h
type sMfltFreeRTOSTaskMetricsIndex (line 29) | typedef struct MfltFreeRTOSTaskMetricsIndex {
FILE: ports/include/memfault/ports/mbedtls/metrics.h
type sMemfaultMbedtlsMetricData (line 15) | typedef struct MemfaultMbedtlsMetricData {
FILE: ports/lwip/memfault_lwip_metrics.c
function memfault_lwip_heartbeat_collect_data (line 34) | void memfault_lwip_heartbeat_collect_data(void) {
FILE: ports/mbedtls/memfault_mbedtls_metrics.c
type uAllocMetadata (line 15) | typedef union {
function __wrap_mbedtls_free (line 72) | void __wrap_mbedtls_free(void *ptr) {
function memfault_mbedtls_heartbeat_get_data (line 88) | void memfault_mbedtls_heartbeat_get_data(sMemfaultMbedtlsMetricData *met...
function memfault_mbedtls_heartbeat_collect_data (line 92) | void memfault_mbedtls_heartbeat_collect_data(void) {
function memfault_mbedtls_test_clear_values (line 97) | void memfault_mbedtls_test_clear_values(void) {
FILE: ports/mbedtls/memfault_platform_http_client.c
function mbedtls_net_init (line 38) | void mbedtls_net_init(mbedtls_net_context *ctx) {
function mbedtls_net_connect (line 42) | int mbedtls_net_connect(mbedtls_net_context *ctx, const char *host, cons...
function mbedtls_net_send (line 68) | int mbedtls_net_send(void *ctx, unsigned char const *buf, size_t len) {
function mbedtls_net_recv (line 73) | int mbedtls_net_recv(void *ctx, unsigned char *buf, size_t len) {
function mbedtls_net_close (line 78) | void mbedtls_net_close(mbedtls_net_context *ctx) {
function mbedtls_net_free (line 87) | void mbedtls_net_free(mbedtls_net_context *ctx) {
type MfltHttpClient (line 92) | struct MfltHttpClient {
type sMfltHttpResponse (line 104) | typedef struct MfltHttpResponse {
function prv_teardown_mbedtls (line 111) | static void prv_teardown_mbedtls(sMfltHttpClient *client) {
function sMfltHttpClient (line 120) | sMfltHttpClient *memfault_platform_http_client_create(void) {
function memfault_platform_http_client_destroy (line 207) | int memfault_platform_http_client_destroy(sMfltHttpClient *client) {
function memfault_platform_http_client_wait_until_requests_completed (line 218) | int memfault_platform_http_client_wait_until_requests_completed(
function prv_try_send (line 224) | static bool prv_try_send(sMfltHttpClient *client, const uint8_t *buf, si...
function prv_send_data (line 239) | static bool prv_send_data(const void *data, size_t data_len, void *ctx) {
function prv_read_socket_data (line 244) | static bool prv_read_socket_data(sMfltHttpClient *client, void *buf, siz...
function prv_wait_for_http_response (line 259) | static int prv_wait_for_http_response(sMfltHttpClient *client) {
function memfault_platform_http_client_post_data (line 280) | int memfault_platform_http_client_post_data(sMfltHttpClient *client,
function memfault_platform_http_response_get_status (line 335) | int memfault_platform_http_response_get_status(const sMfltHttpResponse *...
FILE: ports/mynewt/src/memfault_platform_flash_backed_coredump.c
function sMfltCoredumpRegion (line 21) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function prv_flash_open (line 48) | static int prv_flash_open(const struct flash_area **fa) {
function memfault_platform_coredump_storage_get_info (line 62) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_read (line 75) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 93) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_write (line 111) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_clear (line 129) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/mynewt/src/memfault_platform_port.c
function memfault_platform_get_device_info (line 22) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_reboot (line 35) | void memfault_platform_reboot(void) {
function memfault_platform_time_get_current (line 42) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *time) {
function memfault_platform_sanitize_address_range (line 61) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
type os_callout (line 78) | struct os_callout
function prv_heartbeat_timer_cb (line 81) | static void prv_heartbeat_timer_cb(struct os_event *ev) {
function memfault_platform_metrics_timer_boot (line 88) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
function memfault_platform_get_time_since_boot_ms (line 99) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function memfault_platform_boot (line 103) | int memfault_platform_boot(void) {
function eMemfaultRebootReason (line 127) | static eMemfaultRebootReason prv_get_reboot_reason(enum hal_reset_reason...
function memfault_reboot_reason_get (line 151) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
function memfault_platform_reboot_tracking_boot (line 162) | void memfault_platform_reboot_tracking_boot(void) {
function os_assert_cb (line 173) | void os_assert_cb(void) {
function eMemfaultRebootReason (line 178) | static eMemfaultRebootReason prv_resolve_reason_from_active_isr(void) {
function os_coredump_cb (line 200) | void os_coredump_cb(void *tf) {
FILE: ports/mynewt/src/memfault_shell.c
type shell_cmd (line 38) | struct shell_cmd
function mflt_shell_err_unknown_arg (line 43) | static int mflt_shell_err_unknown_arg(char *cmd_name) {
function mflt_shell_help (line 48) | static int mflt_shell_help(void) {
function test_logging (line 70) | static int test_logging(int argc, char *argv[]) {
function test_coredump_storage (line 79) | static int test_coredump_storage(int argc, char *argv[]) {
function test_heartbeat (line 97) | static int test_heartbeat(int argc, char *argv[]) {
function test_trace (line 102) | static int test_trace(int argc, char *argv[]) {
function test_reboot (line 108) | static int test_reboot(int argc, char *argv[]) {
function test_assert (line 117) | static int test_assert(int argc, char *argv[]) {
function test_fault (line 122) | static int test_fault(int argc, char *argv[]) {
function test_hang (line 128) | static int test_hang(int argc, char *argv[]) {
function test_export (line 134) | static int test_export(int argc, char *argv[]) {
function mflt_shell_cmd (line 139) | static int mflt_shell_cmd(int argc, char **argv) {
function mflt_shell_init (line 165) | int mflt_shell_init(void) {
FILE: ports/nrf5_sdk/memfault_platform_metrics.c
type sMfltPlatformUptimeCtx (line 27) | typedef struct {
function memfault_platform_get_time_since_boot_ms (line 38) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function prv_update_boot_time (line 48) | static void prv_update_boot_time(void) {
function prv_update_boot_time (line 58) | static void prv_update_boot_time(void) { }
function prv_mflt_metric_timer (line 61) | static void prv_mflt_metric_timer(void *p_context) {
function memfault_platform_metrics_timer_boot (line 78) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
FILE: ports/nrf5_sdk/nrf5_coredump_regions.c
function memfault_platform_sanitize_address_range (line 32) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function sMfltCoredumpRegion (line 66) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
FILE: ports/nrf5_sdk/nrf5_coredump_storage.c
type eMemfaultCoredumpClearState (line 52) | typedef enum {
function prv_handle_flash_op_complete (line 60) | static void prv_handle_flash_op_complete(bool success) {
function prv_coredump_handle_soc_update (line 80) | static void prv_coredump_handle_soc_update(uint32_t sys_evt, void *p_con...
function memfault_platform_coredump_storage_clear (line 96) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 130) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_op_within_flash_bounds (line 139) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_coredump_read (line 151) | bool memfault_coredump_read(uint32_t offset, void *data, size_t read_len) {
function memfault_platform_coredump_storage_write (line 160) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_read (line 183) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 193) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/nrf5_sdk/resetreas_reboot_tracking.c
function prv_reset_reason_get (line 38) | static uint32_t prv_reset_reason_get(void) {
function prv_reset_reason_clear (line 49) | static void prv_reset_reason_clear(uint32_t reset_reas_clear_mask) {
function memfault_platform_reboot_tracking_boot (line 59) | void memfault_platform_reboot_tracking_boot(void) {
function memfault_reboot_reason_get (line 77) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/nrf5_sdk/software_watchdog.c
function prv_software_watchdog_timeout (line 116) | static void prv_software_watchdog_timeout(nrfx_rtc_int_type_t int_type) {
function memfault_software_watchdog_enable (line 130) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_disable (line 155) | int memfault_software_watchdog_disable(void) {
function memfault_software_watchdog_feed (line 160) | int memfault_software_watchdog_feed(void) {
function memfault_software_watchdog_update_timeout (line 165) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
FILE: ports/nxp/rt1021/src_reboot_tracking.c
function memfault_reboot_reason_get (line 24) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/nxp/rw61x/pmu_reboot_tracking.c
function memfault_reboot_reason_get (line 28) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/panics/src/memfault_platform_ram_backed_coredump.c
function MEMFAULT_WEAK (line 63) | MEMFAULT_WEAK const sMfltCoredumpRegion *memfault_platform_coredump_get_...
function memfault_platform_coredump_storage_get_info (line 77) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_op_within_flash_bounds (line 83) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_read (line 89) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 100) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_write (line 111) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_clear (line 122) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/particle/examples/memfault_test/src/application.cpp
function setup (line 44) | void setup() {
function loop (line 49) | void loop() {
function JSONValue (line 60) | JSONValue getValue(const JSONValue &obj, const char *name) {
function ctrl_request_custom_handler (line 70) | void ctrl_request_custom_handler(ctrl_request *req) {
FILE: ports/particle/src/memfault.cpp
function prv_memfault_panic_handler (line 39) | static void prv_memfault_panic_handler(const ePanicCode code, const void...
function memfault_sdk_assert_func_noreturn (line 47) | void memfault_sdk_assert_func_noreturn(void) {
function prv_test_logging (line 99) | static int prv_test_logging(int argc, char *argv[]) {
function prv_test_heartbeat (line 109) | static int prv_test_heartbeat(int argc, char *argv[]) {
function prv_test_trace (line 114) | static int prv_test_trace(int argc, char *argv[]) {
function prv_test_reboot (line 120) | static int prv_test_reboot(int argc, char *argv[]) {
function prv_test_assert (line 129) | static int prv_test_assert(int argc, char *argv[]) {
function prv_test_memfault (line 134) | static int prv_test_memfault(int argc, char *argv[]) {
function prv_test_nmi (line 140) | static int prv_test_nmi(int argc, char *argv[]) {
function prv_test_hang (line 145) | static int prv_test_hang(int argc, char *argv[]) {
function prv_test_particle_panic (line 150) | static int prv_test_particle_panic(int argc, char *argv[]) {
function prv_test_busfault (line 155) | static int prv_test_busfault(int argc, char *argv[]) {
function prv_test_spark_assert (line 161) | static int prv_test_spark_assert(int argc, char *argv[]) {
function prv_test_coredump_storage (line 166) | static int prv_test_coredump_storage(int argc, char *argv[]) {
function prv_test_device_info (line 173) | static int prv_test_device_info(int argc, char *argv[]) {
function prv_test_export (line 180) | static int prv_test_export(int argc, char *argv[]) {
type MemfaultTestCommand (line 185) | struct MemfaultTestCommand {
function prv_memfault_reboot_reason_get (line 267) | static void prv_memfault_reboot_reason_get(sResetBootupInfo *info) {
function memfault_platform_get_time_since_boot_ms (line 316) | uint64_t memfault_platform_get_time_since_boot_ms(void) {
function prv_metric_timer_callback (line 322) | static void prv_metric_timer_callback() {
function memfault_platform_metrics_timer_boot (line 339) | bool memfault_platform_metrics_timer_boot(uint32_t period_sec,
function memfault_platform_get_device_info (line 353) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_reboot (line 365) | void memfault_platform_reboot(void) {
function prv_get_task_region (line 376) | static size_t prv_get_task_region(os_thread_dump_info_t *info, sMfltCore...
function memfault_platform_sanitize_address_range (line 410) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function sMfltCoredumpRegion (line 426) | const sMfltCoredumpRegion *memfault_platform_coredump_get_regions(
function memfault_platform_reboot_tracking_boot (line 472) | void memfault_platform_reboot_tracking_boot(void) {
FILE: ports/particle/src/memfault.h
function class (line 18) | class Memfault {
FILE: ports/s32sdk/ftfc_flash_coredump_storage.c
function MEMFAULT_NO_OPT (line 62) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_flash_bounds (line 67) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_get_info (line 73) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function prv_lookup_flash_info (line 85) | static bool prv_lookup_flash_info(uint32_t start_addr, uint32_t end_addr...
function prv_flash_wait_for_ready (line 106) | static void prv_flash_wait_for_ready(void) {
function prv_flash_clear_errors (line 111) | static void prv_flash_clear_errors(void) {
function prv_flash_start_cmd (line 115) | static void prv_flash_start_cmd(void) {
function prv_erase_sector (line 119) | static bool prv_erase_sector(uint32_t flash_address) {
function prv_erase_sector_assert_success (line 137) | static void prv_erase_sector_assert_success(uint32_t flash_address) {
function prv_write_double_word (line 143) | static void prv_write_double_word(uint32_t flash_address,
function memfault_platform_coredump_storage_buffered_write (line 170) | bool memfault_platform_coredump_storage_buffered_write(sCoredumpWorkingB...
function memfault_platform_coredump_storage_read (line 194) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 205) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
function memfault_platform_coredump_storage_clear (line 226) | void memfault_platform_coredump_storage_clear(void) {
FILE: ports/s32sdk/lpit_software_watchdog.c
function prv_configure_irq (line 53) | static void prv_configure_irq(IRQn_Type irqn) {
function prv_lpit_with_timeout (line 62) | static int prv_lpit_with_timeout(uint32_t timeout_ms) {
function memfault_software_watchdog_enable (line 177) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_disable (line 182) | int memfault_software_watchdog_disable(void) {
function memfault_software_watchdog_feed (line 187) | int memfault_software_watchdog_feed(void) {
function memfault_software_watchdog_update_timeout (line 197) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
FILE: ports/s32sdk/rcm_reboot_tracking.c
function memfault_reboot_reason_get (line 24) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/silabs/wiseconnect/siwx91x/siwx91x_reboot_tracking.c
function memfault_reboot_reason_get (line 54) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/f4/flash_coredump_storage.c
function MEMFAULT_NO_OPT (line 52) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_flash_bounds (line 57) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_clear (line 63) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 68) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_write (line 77) | bool memfault_platform_coredump_storage_write(uint32_t offset, const voi...
function memfault_platform_coredump_storage_read (line 97) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 108) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/stm32cube/f4/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 25) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/f7/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 24) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/h5/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 24) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/h7/lptim_software_watchdog.c
function prv_lptim_clock_config (line 70) | static void prv_lptim_clock_config(RCC_PeriphCLKInitTypeDef *config) {
function prv_lptim_clk_enable (line 103) | static void prv_lptim_clk_enable(void) {
function prv_lptim_clk_freeze_during_dbg (line 140) | static void prv_lptim_clk_freeze_during_dbg(void) {
function prv_lptim_irq_enable (line 169) | static void prv_lptim_irq_enable(void) {
function memfault_software_watchdog_enable (line 201) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_feed (line 265) | int memfault_software_watchdog_feed(void) {
function memfault_software_watchdog_update_timeout (line 275) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
function memfault_software_watchdog_disable (line 301) | int memfault_software_watchdog_disable(void) {
FILE: ports/stm32cube/h7/rcc_reboot_tracking.c
type eResetSource (line 27) | typedef enum ResetSource {
function memfault_reboot_reason_get (line 41) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/l4/flash_coredump_storage.c
function memfault_stm32cubel4_flash_clear_ecc_error (line 50) | bool memfault_stm32cubel4_flash_clear_ecc_error(uint32_t start_addr, uin...
function memfault_platform_fault_handler (line 94) | void memfault_platform_fault_handler(const sMfltRegState *regs, eMemfaul...
function MEMFAULT_NO_OPT (line 101) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_flash_bounds (line 106) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_get_info (line 112) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_buffered_write (line 131) | bool memfault_platform_coredump_storage_buffered_write(sCoredumpWorkingB...
function memfault_platform_coredump_storage_clear (line 154) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_read (line 168) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function prv_erase_from_bank (line 179) | static bool prv_erase_from_bank(uint32_t Banks, uint32_t Page, uint32_t ...
function memfault_platform_coredump_storage_erase (line 198) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/stm32cube/l4/lptim_software_watchdog.c
function prv_lptim_clock_config (line 67) | static void prv_lptim_clock_config(RCC_PeriphCLKInitTypeDef *config) {
function prv_lptim_clk_enable (line 85) | static void prv_lptim_clk_enable(void) {
function prv_lptim_clk_freeze_during_dbg (line 104) | static void prv_lptim_clk_freeze_during_dbg(void) {
function prv_lptim_irq_enable (line 121) | static void prv_lptim_irq_enable(void) {
function memfault_software_watchdog_enable (line 138) | int memfault_software_watchdog_enable(void) {
function memfault_software_watchdog_feed (line 204) | int memfault_software_watchdog_feed(void) {
function memfault_software_watchdog_update_timeout (line 226) | int memfault_software_watchdog_update_timeout(uint32_t timeout_ms) {
function memfault_software_watchdog_disable (line 256) | int memfault_software_watchdog_disable(void) {
FILE: ports/stm32cube/l4/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 25) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/u5/flash_coredump_storage.c
function MEMFAULT_NO_OPT (line 76) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_flash_bounds (line 82) | static bool prv_op_within_flash_bounds(uint32_t offset, size_t data_len) {
function memfault_platform_coredump_storage_clear (line 88) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 92) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_buffered_write (line 101) | bool memfault_platform_coredump_storage_buffered_write(sCoredumpWorkingB...
function memfault_platform_coredump_storage_read (line 124) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function memfault_platform_coredump_storage_erase (line 135) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/stm32cube/u5/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 21) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/stm32cube/wb/flash_coredump_storage.c
function memfault_stm32cubewb_flash_clear_ecc_errors (line 54) | bool memfault_stm32cubewb_flash_clear_ecc_errors(uint32_t start_addr, ui...
function memfault_platform_fault_handler (line 90) | void memfault_platform_fault_handler(const sMfltRegState *regs, eMemfaul...
function MEMFAULT_NO_OPT (line 97) | MEMFAULT_NO_OPT static void prv_coredump_writer_assert_and_reboot(int er...
function prv_op_within_storage_bounds (line 102) | static bool prv_op_within_storage_bounds(uint32_t offset, size_t data_le...
function memfault_platform_coredump_storage_clear (line 108) | void memfault_platform_coredump_storage_clear(void) {
function memfault_platform_coredump_storage_get_info (line 122) | void memfault_platform_coredump_storage_get_info(sMfltCoredumpStorageInf...
function memfault_platform_coredump_storage_buffered_write (line 131) | bool memfault_platform_coredump_storage_buffered_write(sCoredumpWorkingB...
function memfault_platform_coredump_storage_read (line 154) | bool memfault_platform_coredump_storage_read(uint32_t offset, void *data...
function prv_erase_pages (line 165) | static bool prv_erase_pages(uint32_t Page, uint32_t NbPages) {
function memfault_platform_coredump_storage_erase (line 183) | bool memfault_platform_coredump_storage_erase(uint32_t offset, size_t er...
FILE: ports/stm32cube/wb/rcc_reboot_tracking.c
function memfault_reboot_reason_get (line 25) | void memfault_reboot_reason_get(sResetBootupInfo *info) {
FILE: ports/templates/memfault_platform_port.c
function memfault_platform_get_device_info (line 29) | void memfault_platform_get_device_info(sMemfaultDeviceInfo *info) {
function memfault_platform_reboot (line 58) | void memfault_platform_reboot(void) {
function memfault_platform_time_get_current (line 76) | bool memfault_platform_time_get_current(sMemfaultCurrentTime *time) {
function memfault_platform_sanitize_address_range (line 90) | size_t memfault_platform_sanitize_address_range(void *start_addr, size_t...
function MEMFAULT_WEAK (line 113) | MEMFAULT_WEAK void memfault_reboot_reason_get(sResetBootupInfo *info) {
function memfault_platform_reboot_tracking_boot (line 122) | void memfault_platform_reboot_tracking_boot(void) {
function MEMFAULT_WEAK (line 138) | MEMFAULT_WEAK bool memfault_platform_metrics_timer_boot(uint32_t period_...
function MEMFAULT_WEAK (line 147) | MEMFAULT_WEAK uint64_t memfault_platform_get_time_since_boot_ms(void) {
function memfault_platform_log (line 152) | void memfault_platform_log(eMemfaultPlatformLogLevel level,
function memfault_platform_log_raw (line 160) | void memfault_platform_log_raw(const char *fmt, ...) {
function
Condensed preview — 960 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,907K chars).
[
{
"path": ".circleci/Dockerfile",
"chars": 3385,
"preview": "# This Docker image is used in CircleCI to build the SDK. It's published to\n# Docker Hub as \"memfault/memfault-sdk-embed"
},
{
"path": ".circleci/config.yml",
"chars": 1871,
"preview": "# Python CircleCI 2.1 configuration file\n#\n# Check for more details:\n#\n# - https://circleci.com/docs/2.0/configuration-r"
},
{
"path": ".circleci/runas.sh",
"chars": 776,
"preview": "#!/usr/bin/env bash\n\n# This script can be used (on a Linux host, at least) to set up a docker\n# container to be able to "
},
{
"path": ".clang-format",
"chars": 1007,
"preview": "---\nBasedOnStyle: Google\n\nAlignArrayOfStructures: None\nAllowShortBlocksOnASingleLine: Empty\nAllowShortFunctionsOnASingle"
},
{
"path": ".codecov.yml",
"chars": 246,
"preview": "coverage:\n precision: 2\n round: down\n range: \"70...100\"\n status:\n patch: off\n project:\n default:\n "
},
{
"path": ".cyignore",
"chars": 816,
"preview": "cmake\ncomponents/_feature_stubs\ncomponents/_sortme\nexamples\ninternal\nmakefile\nports/atmel\nports/dialog\nports/emlib\nports"
},
{
"path": ".git-blame-ignore-revs",
"chars": 490,
"preview": "# https://docs.github.com/en/repositories/working-with-files/using-files/viewing-a-file#ignore-commits-in-the-blame-view"
},
{
"path": ".gitignore",
"chars": 53,
"preview": "build\n/examples/mbedtls\n/examples/modus\n__pycache__/\n"
},
{
"path": "CHANGELOG.md",
"chars": 286851,
"preview": "# Memfault Firmware SDK Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is b"
},
{
"path": "CMakeLists.txt",
"chars": 205,
"preview": "cmake_minimum_required(VERSION 3.12.4)\n\nif(ESP_PLATFORM)\n include(${CMAKE_CURRENT_LIST_DIR}/ports/esp_idf/memfault/CMak"
},
{
"path": "Kconfig",
"chars": 199,
"preview": "# If the repo is being used as an ESP-IDF component, bring in the ESP-IDF specific\n# Kconfig file. Otherwise this should"
},
{
"path": "LICENSE",
"chars": 1611,
"preview": "Copyright (c) 2019 - Present, Memfault\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or "
},
{
"path": "README.md",
"chars": 6605,
"preview": "# Memfault Firmware SDK\n\n[](https://cir"
},
{
"path": "VERSION",
"chars": 55,
"preview": "BUILD ID: 17586\nGIT COMMIT: 09acdc44af\nVERSION: 1.39.0\n"
},
{
"path": "cmake/Memfault.cmake",
"chars": 4249,
"preview": "# A convenience helper cmake function that can be used to collect the sources and include\n# paths needed for the Memfaul"
},
{
"path": "components/README.md",
"chars": 1317,
"preview": "# Memfault 💥\n\n## Components\n\nThis directory contains the Memfault components that fall into two categories:\n\n- Main comp"
},
{
"path": "components/core/README.md",
"chars": 2555,
"preview": "# core\n\nCommon code that is used by all other components.\n\n## Application/platform-specific customizations\n\n### Device i"
},
{
"path": "components/core/src/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "components/core/src/arch_arm_cortex_m.c",
"chars": 1347,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <stdint.h>\n\n#include \"memfault/core"
},
{
"path": "components/core/src/memfault_batched_events.c",
"chars": 866,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n\n#include <string.h>\n\n#include \"memfault/"
},
{
"path": "components/core/src/memfault_build_id.c",
"chars": 3323,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! See header for more detail"
},
{
"path": "components/core/src/memfault_build_id_private.h",
"chars": 2250,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal fil"
},
{
"path": "components/core/src/memfault_compact_log_serializer.c",
"chars": 6049,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <stdarg.h>\n#include <stdio.h>\n#incl"
},
{
"path": "components/core/src/memfault_core_utils.c",
"chars": 4366,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n\n#include <stdio.h>\n#include <"
},
{
"path": "components/core/src/memfault_custom_data_recording.c",
"chars": 6688,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Implements sMemfaultDataSourceImpl AP"
},
{
"path": "components/core/src/memfault_custom_data_recording_private.h",
"chars": 325,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! APIs intended for inter"
},
{
"path": "components/core/src/memfault_data_export.c",
"chars": 2225,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n\n#include <string.h>\n\n#include"
},
{
"path": "components/core/src/memfault_data_packetizer.c",
"chars": 13743,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <inttypes.h>\n#include <string.h>\n\n#"
},
{
"path": "components/core/src/memfault_data_source_rle.c",
"chars": 10652,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! See header for more detail"
},
{
"path": "components/core/src/memfault_event_storage.c",
"chars": 17860,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A RAM-backed storage API f"
},
{
"path": "components/core/src/memfault_heap_stats.c",
"chars": 6890,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Simple heap allocation tracking utili"
},
{
"path": "components/core/src/memfault_log.c",
"chars": 22148,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! A simple RAM backed logging storage i"
},
{
"path": "components/core/src/memfault_log_data_source.c",
"chars": 10510,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n\n#include \"memfault/config.h\"\n\n#if MEMFAU"
},
{
"path": "components/core/src/memfault_log_data_source_private.h",
"chars": 631,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal log"
},
{
"path": "components/core/src/memfault_log_private.h",
"chars": 4755,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Utilities to"
},
{
"path": "components/core/src/memfault_ram_reboot_info_tracking.c",
"chars": 10491,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A RAM-backed implementatio"
},
{
"path": "components/core/src/memfault_reboot_tracking_private.h",
"chars": 1950,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal uti"
},
{
"path": "components/core/src/memfault_reboot_tracking_serializer.c",
"chars": 4105,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Reads the current reboot t"
},
{
"path": "components/core/src/memfault_sdk_assert.c",
"chars": 621,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <inttypes.h>\n\n#include \"memfault/co"
},
{
"path": "components/core/src/memfault_self_test.c",
"chars": 17518,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Memfault SDK self test fun"
},
{
"path": "components/core/src/memfault_self_test_private.h",
"chars": 3487,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n#pragma once\n\n#include <stdbool.h>\n#include <"
},
{
"path": "components/core/src/memfault_self_test_utils.c",
"chars": 2363,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n#include <ctype.h>\n#include <stdbool.h>\n#incl"
},
{
"path": "components/core/src/memfault_serializer_helper.c",
"chars": 9910,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! See header for more detail"
},
{
"path": "components/core/src/memfault_task_watchdog.c",
"chars": 3269,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Task watchdog implementation.\n\n#inclu"
},
{
"path": "components/core/src/memfault_trace_event.c",
"chars": 10052,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <stdarg.h>\n#include <stdbool.h>\n#in"
},
{
"path": "components/core/src/memfault_trace_event_private.h",
"chars": 326,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal uti"
},
{
"path": "components/demo/README.md",
"chars": 650,
"preview": "# demo\n\nCommon code that is used by demo apps for the various platforms. See\ndocumentation in header files for details o"
},
{
"path": "components/demo/src/http/memfault_demo_http.c",
"chars": 868,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI commands which require"
},
{
"path": "components/demo/src/memfault_demo_cli_drain_chunks.c",
"chars": 1796,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! This file contains an exam"
},
{
"path": "components/demo/src/memfault_demo_cli_log.c",
"chars": 1406,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI commands that exercise"
},
{
"path": "components/demo/src/memfault_demo_cli_trace_event.c",
"chars": 717,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI command that exercises"
},
{
"path": "components/demo/src/memfault_demo_core.c",
"chars": 863,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI commands used by demo "
},
{
"path": "components/demo/src/memfault_demo_shell.c",
"chars": 6615,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Minimal shell/console impl"
},
{
"path": "components/demo/src/memfault_demo_shell_commands.c",
"chars": 5887,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Command definitions for th"
},
{
"path": "components/demo/src/memfault_demo_watchdog.c",
"chars": 1756,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI commands used by demo "
},
{
"path": "components/demo/src/panics/memfault_demo_cli_aux.c",
"chars": 694,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Some variables that are us"
},
{
"path": "components/demo/src/panics/memfault_demo_cli_aux_private.h",
"chars": 531,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Some globals"
},
{
"path": "components/demo/src/panics/memfault_demo_panics.c",
"chars": 6929,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! CLI commands which require"
},
{
"path": "components/http/README.md",
"chars": 166,
"preview": "# http\n\nHTTP client API, to post coredumps and events directly to the Memfault service\nfrom devices. See documentation i"
},
{
"path": "components/http/src/memfault_http_client.c",
"chars": 2475,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Memfault HTTP Client imple"
},
{
"path": "components/http/src/memfault_http_client_post_chunk.c",
"chars": 1195,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Implements conveninece API"
},
{
"path": "components/http/src/memfault_http_utils.c",
"chars": 24066,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! See header for more detail"
},
{
"path": "components/http/src/memfault_root_certs_der.c",
"chars": 17235,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Representation of Root Cer"
},
{
"path": "components/include/memfault/components.h",
"chars": 2667,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! A convenience header to"
},
{
"path": "components/include/memfault/config.h",
"chars": 1563,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Configuration settings "
},
{
"path": "components/include/memfault/core/arch.h",
"chars": 491,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! APIs for MCU"
},
{
"path": "components/include/memfault/core/batched_events.h",
"chars": 898,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Helpers used"
},
{
"path": "components/include/memfault/core/build_info.h",
"chars": 3272,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! The Memfault"
},
{
"path": "components/include/memfault/core/compact_log_compile_time_checks.h",
"chars": 2304,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Compile "
},
{
"path": "components/include/memfault/core/compact_log_helpers.h",
"chars": 12919,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Utilitie"
},
{
"path": "components/include/memfault/core/compact_log_serializer.h",
"chars": 1891,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A backend wh"
},
{
"path": "components/include/memfault/core/compiler.h",
"chars": 2703,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Wrappers for"
},
{
"path": "components/include/memfault/core/compiler_armcc.h",
"chars": 1406,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Wrappers for"
},
{
"path": "components/include/memfault/core/compiler_gcc.h",
"chars": 5682,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Wrappers for"
},
{
"path": "components/include/memfault/core/compiler_iar.h",
"chars": 1310,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Wrappers for"
},
{
"path": "components/include/memfault/core/compiler_ti_arm.h",
"chars": 2349,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Wrappers for"
},
{
"path": "components/include/memfault/core/custom_data_recording.h",
"chars": 4674,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Many embedde"
},
{
"path": "components/include/memfault/core/data_export.h",
"chars": 3497,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Utilitie"
},
{
"path": "components/include/memfault/core/data_packetizer.h",
"chars": 9413,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! API for pack"
},
{
"path": "components/include/memfault/core/data_packetizer_source.h",
"chars": 3068,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Various data"
},
{
"path": "components/include/memfault/core/data_source_rle.h",
"chars": 1231,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n\n//! A generic d"
},
{
"path": "components/include/memfault/core/debug_log.h",
"chars": 2341,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n\n//! Log utility"
},
{
"path": "components/include/memfault/core/device_info.h",
"chars": 253,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#ifdef __cplusplus\nextern \"C\" "
},
{
"path": "components/include/memfault/core/errors.h",
"chars": 1778,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! All Memfault APIs retur"
},
{
"path": "components/include/memfault/core/event_storage.h",
"chars": 7171,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Stores seria"
},
{
"path": "components/include/memfault/core/event_storage_implementation.h",
"chars": 1563,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! The API an e"
},
{
"path": "components/include/memfault/core/heap_stats.h",
"chars": 3329,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! A minima"
},
{
"path": "components/include/memfault/core/heap_stats_impl.h",
"chars": 1759,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Heap tra"
},
{
"path": "components/include/memfault/core/log.h",
"chars": 12844,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! A lightw"
},
{
"path": "components/include/memfault/core/log_impl.h",
"chars": 913,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Logging "
},
{
"path": "components/include/memfault/core/math.h",
"chars": 528,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Math helpers"
},
{
"path": "components/include/memfault/core/platform/core.h",
"chars": 1789,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! APIs the pla"
},
{
"path": "components/include/memfault/core/platform/crc32.h",
"chars": 762,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Platform API"
},
{
"path": "components/include/memfault/core/platform/debug_log.h",
"chars": 1919,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! APIs that ne"
},
{
"path": "components/include/memfault/core/platform/device_info.h",
"chars": 2575,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//! @details\n//!\n//! @brief\n//!"
},
{
"path": "components/include/memfault/core/platform/nonvolatile_event_storage.h",
"chars": 2790,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Dependencies which must"
},
{
"path": "components/include/memfault/core/platform/overrides.h",
"chars": 951,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Functions th"
},
{
"path": "components/include/memfault/core/platform/reboot_tracking.h",
"chars": 490,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#ifdef __cplusplus\nextern \"C\" "
},
{
"path": "components/include/memfault/core/platform/system_time.h",
"chars": 1441,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Dependency f"
},
{
"path": "components/include/memfault/core/preprocessor.h",
"chars": 2374,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include \"memfault/core/compil"
},
{
"path": "components/include/memfault/core/reboot_reason_types.h",
"chars": 5639,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Different ty"
},
{
"path": "components/include/memfault/core/reboot_tracking.h",
"chars": 12790,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A subsystem "
},
{
"path": "components/include/memfault/core/sdk_assert.h",
"chars": 1433,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Assert imple"
},
{
"path": "components/include/memfault/core/self_test.h",
"chars": 2409,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Public interface for self_"
},
{
"path": "components/include/memfault/core/serializer_helper.h",
"chars": 3371,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal hel"
},
{
"path": "components/include/memfault/core/serializer_key_ids.h",
"chars": 2522,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internal key"
},
{
"path": "components/include/memfault/core/task_watchdog.h",
"chars": 5104,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Task watchdo"
},
{
"path": "components/include/memfault/core/task_watchdog_impl.h",
"chars": 1215,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//!\n//! Task wat"
},
{
"path": "components/include/memfault/core/trace_event.h",
"chars": 6583,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Subsystem to"
},
{
"path": "components/include/memfault/core/trace_event_impl.h",
"chars": 1018,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! APIs used in"
},
{
"path": "components/include/memfault/core/trace_reason_user.h",
"chars": 3510,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Helpers to a"
},
{
"path": "components/include/memfault/default_config.h",
"chars": 27421,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Default configuration s"
},
{
"path": "components/include/memfault/demo/cli.h",
"chars": 5344,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief CLI console comm"
},
{
"path": "components/include/memfault/demo/shell.h",
"chars": 731,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Minimal shel"
},
{
"path": "components/include/memfault/demo/shell_commands.h",
"chars": 980,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Command defi"
},
{
"path": "components/include/memfault/demo/util.h",
"chars": 783,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Utilities us"
},
{
"path": "components/include/memfault/http/http_client.h",
"chars": 6075,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! API when usi"
},
{
"path": "components/include/memfault/http/platform/http_client.h",
"chars": 3447,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Dependency f"
},
{
"path": "components/include/memfault/http/root_certs.h",
"chars": 6188,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n\n//! All the Root Certs are"
},
{
"path": "components/include/memfault/http/utils.h",
"chars": 10122,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A collection"
},
{
"path": "components/include/memfault/metrics/battery.h",
"chars": 1084,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Memfault bui"
},
{
"path": "components/include/memfault/metrics/connectivity.h",
"chars": 3872,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief Connectivity met"
},
{
"path": "components/include/memfault/metrics/heartbeat_config.def",
"chars": 2579,
"preview": "//! The Memfault SDK tracks a few select heartbeat metrics by default to compute\n//! default health statistics for the f"
},
{
"path": "components/include/memfault/metrics/ids_impl.h",
"chars": 13300,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! NOTE: The internals of "
},
{
"path": "components/include/memfault/metrics/metrics.h",
"chars": 19755,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! The Memfault"
},
{
"path": "components/include/memfault/metrics/platform/battery.h",
"chars": 1781,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Required dep"
},
{
"path": "components/include/memfault/metrics/platform/connectivity.h",
"chars": 657,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Optional pla"
},
{
"path": "components/include/memfault/metrics/platform/overrides.h",
"chars": 624,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Functions th"
},
{
"path": "components/include/memfault/metrics/platform/timer.h",
"chars": 821,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//! @brief\n//!\n//! A timer API "
},
{
"path": "components/include/memfault/metrics/reliability.h",
"chars": 1104,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//! @brief APIs for tracking re"
},
{
"path": "components/include/memfault/metrics/serializer.h",
"chars": 1543,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Heartbeat me"
},
{
"path": "components/include/memfault/metrics/utils.h",
"chars": 1443,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Utilities to"
},
{
"path": "components/include/memfault/panics/arch/arm/aarch64.h",
"chars": 686,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! aarch64 spec"
},
{
"path": "components/include/memfault/panics/arch/arm/cortex_m.h",
"chars": 1245,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Cortex-M spe"
},
{
"path": "components/include/memfault/panics/arch/arm/v7_a_r.h",
"chars": 1194,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! ARMv7-R (Cor"
},
{
"path": "components/include/memfault/panics/arch/posix/posix.h",
"chars": 1262,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Posix (Intel"
},
{
"path": "components/include/memfault/panics/arch/riscv/riscv.h",
"chars": 1002,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! RISC-V speci"
},
{
"path": "components/include/memfault/panics/arch/xtensa/xtensa.h",
"chars": 1808,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! ESP32 specif"
},
{
"path": "components/include/memfault/panics/assert.h",
"chars": 3354,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Hooks for li"
},
{
"path": "components/include/memfault/panics/coredump.h",
"chars": 4829,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Infra for co"
},
{
"path": "components/include/memfault/panics/coredump_impl.h",
"chars": 2538,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Internals us"
},
{
"path": "components/include/memfault/panics/fault_handling.h",
"chars": 4671,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Handlers for"
},
{
"path": "components/include/memfault/panics/platform/coredump.h",
"chars": 7708,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Dependency f"
},
{
"path": "components/include/memfault/util/align.h",
"chars": 1163,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n#pragma once\n\n#ifdef __cplusplus\nextern \"C\" {"
},
{
"path": "components/include/memfault/util/banner.h",
"chars": 869,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Memfault splash screen "
},
{
"path": "components/include/memfault/util/base64.h",
"chars": 1696,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Utilities for base64 en"
},
{
"path": "components/include/memfault/util/cbor.h",
"chars": 7774,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! A utility that implemen"
},
{
"path": "components/include/memfault/util/chunk_transport.h",
"chars": 3327,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Some IOT topologies hav"
},
{
"path": "components/include/memfault/util/circular_buffer.h",
"chars": 6853,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A simple cir"
},
{
"path": "components/include/memfault/util/crc16.h",
"chars": 995,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! C Implementa"
},
{
"path": "components/include/memfault/util/rle.h",
"chars": 3277,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A utility fo"
},
{
"path": "components/include/memfault/util/varint.h",
"chars": 1603,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Simple utili"
},
{
"path": "components/include/memfault/version.h",
"chars": 434,
"preview": "#pragma once\n\n//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Contains Memfault SDK v"
},
{
"path": "components/metrics/README.md",
"chars": 697,
"preview": "# metrics\n\nThis API can easily be used to monitor device health over time (i.e.\nconnectivity, battery life, MCU resource"
},
{
"path": "components/metrics/src/memfault_metrics.c",
"chars": 68074,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Memfault metrics API imple"
},
{
"path": "components/metrics/src/memfault_metrics_battery.c",
"chars": 5847,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Memfault Battery Metrics i"
},
{
"path": "components/metrics/src/memfault_metrics_connectivity.c",
"chars": 2505,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief Connectivity metrics implement"
},
{
"path": "components/metrics/src/memfault_metrics_reliability.c",
"chars": 2456,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//! @brief APIs for tracking reliability metr"
},
{
"path": "components/metrics/src/memfault_metrics_serializer.c",
"chars": 6208,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Utility responsible for se"
},
{
"path": "components/panics/README.md",
"chars": 2123,
"preview": "# panics\n\nFault handling, coredump, reboot tracking and reboot loop detection API. See\ndocumentation in header files for"
},
{
"path": "components/panics/src/memfault_coredump.c",
"chars": 21400,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Logic for saving a coredum"
},
{
"path": "components/panics/src/memfault_coredump_regions_armv7.c",
"chars": 8847,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Architecture-specific registers colle"
},
{
"path": "components/panics/src/memfault_coredump_sdk_regions.c",
"chars": 3039,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Enables collection of memory regions "
},
{
"path": "components/panics/src/memfault_coredump_storage_debug.c",
"chars": 11577,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! A collection of utilities "
},
{
"path": "components/panics/src/memfault_coredump_utils.c",
"chars": 974,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Convenience utilities that"
},
{
"path": "components/panics/src/memfault_fault_handling_aarch64.c",
"chars": 3646,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for AARCH64"
},
{
"path": "components/panics/src/memfault_fault_handling_arm.c",
"chars": 21871,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for Cortex "
},
{
"path": "components/panics/src/memfault_fault_handling_armv7_a_r.c",
"chars": 15679,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for ARMv7-A"
},
{
"path": "components/panics/src/memfault_fault_handling_posix.c",
"chars": 3221,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for Posix ("
},
{
"path": "components/panics/src/memfault_fault_handling_riscv.c",
"chars": 6443,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for RISC-V "
},
{
"path": "components/panics/src/memfault_fault_handling_xtensa.c",
"chars": 6032,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Fault handling for Xtensa "
},
{
"path": "components/panics/src/memfault_stdlib_assert.c",
"chars": 1306,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Implements a hook into C s"
},
{
"path": "components/util/README.md",
"chars": 309,
"preview": "# util\n\nVarious utilities that support the Memfault services.\n\n- A base-64 encoder\n- A CCITT CRC16 calculator\n- An RLE e"
},
{
"path": "components/util/src/memfault_base64.c",
"chars": 2878,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include <stddef.h>\n#include <stdint.h>\n\n#in"
},
{
"path": "components/util/src/memfault_chunk_transport.c",
"chars": 7410,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! See header for more details around th"
},
{
"path": "components/util/src/memfault_circular_buffer.c",
"chars": 6707,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n//! Convenience circular buffe"
},
{
"path": "components/util/src/memfault_crc16_ccitt.c",
"chars": 4121,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Note that the CRC implementation is C"
},
{
"path": "components/util/src/memfault_minimal_cbor.c",
"chars": 7889,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! A minimal implementation of a CBOR en"
},
{
"path": "components/util/src/memfault_rle.c",
"chars": 3708,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! @brief\n\n#include <stdbool.h>\n#include"
},
{
"path": "components/util/src/memfault_varint.c",
"chars": 1029,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n\n#include \"memfault/util/varint.h\"\n\nsize_t me"
},
{
"path": "examples/README.md",
"chars": 2793,
"preview": "# Example Platform Ports with Demo Applications\n\n## Demo Applications\n\nWe have example integrations available for a numb"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/Makefile",
"chars": 7626,
"preview": "################################################################################\n# \\file Makefile\n# \\version 1.0\n#\n# \\br"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/README.md",
"chars": 8848,
"preview": "# Memfault for Cypress CY8CKIT-064S0S2-4343W kit with Amazon-FreeRTOS\n\nThis folder contains an integration example for t"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/amazon-freertos.patch",
"chars": 12902,
"preview": "From 05af48609ae5887a55c1d8b396b8417132bd838d Mon Sep 17 00:00:00 2001\nFrom: Memfault Inc <hello@memfault.com>\nDate: Fri"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/README.md",
"chars": 1279,
"preview": "# CY8CKIT-064S0S2-4343W port\n\nPort for the\n[CY8CKIT-064S0S2-4343W](https://www.cypress.com/documentation/development-kit"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_metrics_heartbeat_config.def",
"chars": 288,
"preview": "//! Define custom system metrics to track. For example,\n// MEMFAULT_METRICS_KEY_DEFINE(main_task_stack_hwm, kMemfaultMet"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_config.h",
"chars": 362,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Platform overrides for the default co"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_log_config.h",
"chars": 310,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n// Logging depends on how your configurat"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_port.c",
"chars": 6646,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Glue layer between the Memfault SDK a"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_storage.c",
"chars": 6325,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Persistent storage using chip interna"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_platform_storage.h",
"chars": 473,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Persistent storage using chip interna"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_test.c",
"chars": 1410,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Test functions for exercising memfaul"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_test.h",
"chars": 841,
"preview": "//! @file\n//!\n//! Copyright (c) Memfault, Inc.\n//! See LICENSE for details\n//!\n//! Test functions for exercising memfaul"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/memfault_trace_reason_user_config.def",
"chars": 137,
"preview": "//! Define custom error reasons that can be filtered & searched\n//! on in the Memfault UI.\n\nMEMFAULT_TRACE_REASON_DEFINE"
},
{
"path": "examples/cypress/CY8CKIT-064S0S2-4343W/src/mqtt_demo_memfault.c",
"chars": 35263,
"preview": "/*\n * FreeRTOS V202012.00\n * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Permissi"
},
{
"path": "examples/dialog/README.md",
"chars": 310,
"preview": "# Memfault for Dialog Semiconductor Devices\n\nThe subdirectories in this folder contain example integrations of the Memfa"
},
{
"path": "examples/dialog/da145xx/README.md",
"chars": 5090,
"preview": "# Memfault for the DA145xx Family of Wireless Microcontrollers\n\nThis example application shows an integration with Dialo"
},
{
"path": "examples/dialog/da145xx/apps/memfault_demo_app/.gitignore",
"chars": 115,
"preview": "DA14531/\nDA14585/\nDA14586/\n.settings/\n*.uvguix.*\njlink.log\nJLinkLog.txt\nJLinkSettings.ini\nEventRecorderStub.scvd\n\n\n"
},
{
"path": "examples/dialog/da145xx/apps/memfault_demo_app/Eclipse/.cproject",
"chars": 119086,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<?fileVersion 4.0.0?><cproject storage_type_id=\"org.eclipse.cdt.c"
},
{
"path": "examples/dialog/da145xx/apps/memfault_demo_app/Eclipse/.project",
"chars": 22783,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<projectDescription>\n\t<name>memfault_demo_app</name>\n\t<comment></comment>\n\t<proje"
}
]
// ... and 760 more files (download for full content)
About this extraction
This page contains the full source code of the memfault/memfault-firmware-sdk GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 960 files (4.4 MB), approximately 1.2M tokens, and a symbol index with 3233 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.