Skip to main content

February 2025

Improved Device Details Page

We have been making a number of usability improvements to the Device Details page including streamlining the amount of information visible when first viewing the page. Below is the view when first viewing the Device details page, highlighting software version and last seen.

Expanding this section now reveals more details on the status, config state and Release information.

This is the first in a series of planned improvements to the Device Details page designed to make it easier, and faster to get to the information that really matters. These changes should also make the Device Details more usable for team members who may be less familiar with Memfault, or do not require the level of information available in the Device timeline.

General

  • Improved the Device Page featuring collapsible Device properties, streamlined navigation, and more intuitive filtering.
  • Added new "Impacted Devices Summary" for Issue Cards, allowing to quickly identify and assess widespread issues affecting their Fleet.
  • Added the ability to group Trace Count charts by Software Type and Hardware Version, enhancing data analysis capabilities.
  • Various UX improvements for log search by replacing pagination with infinite scrolling, and giving access to metadata via expandable rows.

MCU

SDK version 1.20.0 was released. Some highlights:

Added

  • Configuration option, MEMFAULT_CRC16_BUILTIN, that permits disabling the built-in crc16 implementation. The user should provide a compatible implementation of memfault_crc16_compute().

Improved

  • Made memfault_reboot_reason_get() and memfault_platform_metrics_timer_boot() weakly defined in the platform templates to make removing them optional when first integrating. A Zephyr Kconfig setting, CONFIG_MEMFAULT_CRC16_BUILTIN, is also provided to control this option. Thanks to @JordanYates for submitting this feature request in #84 !
  • FreeRTOS
    • Example daily_heartbeat session to the FreeRTOS QEMU example, which demonstrates how to send a daily heartbeat session to Memfault.
    • Optional field to the built-in FreeRTOS task stack usage metrics, .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.
  • nRF Connect SDK:
    • 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.
    • 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
    • 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 for submitting this in #86!

Changed

  • Removed an extra underscore in the folder name when using the eclipse_patch.py utility with a port name that is one folder deep (e.g. freertos)
  • Renamed the memfault_crc16_ccitt_compute() function to memfault_crc16_compute(). The CRC-16 algorithm used is canonically named CRC-16/XMODEMnot 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 for reporting this Issue in #83!
  • Zephyr:
    • Add a missing Kconfig dependency to MEMFAULT_METRICS_THREADSINIT_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 for reporting this problem in #86 !
    • Updated the memfault_zephyr_port_post_data() and memfault_zephyr_port_post_data_return_size() 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.
    • Added 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 for reporting this Issue in #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 for reporting this Issue in #81!
  • nRF Connect SDK:
    • Removed 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.

Fixed

  • 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.:
  • On 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.

Android

SDK version v5.3.0 was released. Some highlights:

Added

  • Per-component total storage metrics. The total storage used (apps+cache+data+external) by an application can be recorded as a storage_<package>_bytes metric.
  • Mechanism to group operational crashes by package. The existing operational_crashes core Metric can be divided into operational_crashes_<group> metrics, based off of the package names of the crashes.
  • New DropBox count core metrics. The number of DropBox entries processed each heartbeat, grouped by Issue type, is now recorded as a drop_box_<type>_count metric. This makes identifying crashy devices even easier.
  • New .mean_time_in_state metric alongside .total_secs when the TIME_TOTALS aggregation is used with StateTrackers. The existing .total_secs metric is truncated between heartbeats, so it is only useful as a rough percentage comparison versus other states. The new .mean_time_in_state metric can be used to track the absolute time spent in a state, even across heartbeats, so its value can be used as an absolute number.

Improved

  • Returning a Session object when startSession is called to improve the API usability.
  • Removed SYSTEM_BOOT from the default list of 'other' collected DropBox Entries. After some field testing, this DropBox Entry was not consistently collected and did not contain useful information.

Fixed

  • Logs-to-metrics bug where it could not parse logcat tags with spaces.
  • Harmless SELinux violation where memfault_structured_app could not access its own data directory.
  • Bug in bort_cli.py's validation-sdk-integration command where it wouldn't check the right location for system_ext sepolicy.
  • Continuous log bug where spaces in the tag would break parsing.

Linux

SDK version 1.18.0 was released. Some highlights:

Added

  • mar.mar_entry_max_count, which allows for setting the max number of MAR entries in your tmp directory. This will default to 1000.
  • logs.max_buffered_lines, which sets the max number of lines that will be kept in memory before lines are dropped. Note that this is the same as fluent-bit.max_buffered_lines, but will apply to both the fluent-bit log source as well as the journald log source. If you have previously configured fluent-bit.max_buffered_lines that value will be used instead of the general config.
  • kind field in the MAR POST body. This is a field that is used by Memfault to differentiate the source of a MAR entry.
  • Added logs.extra_attributes option to configure extra log attributes to keep in the log file (similar to fluent-bit.extra_attributes which still works but will be deprecated)

Changed

  • The LogCollector has gone through a refactor to make the concurrency methods more consistent with the rest of the code base.
  • Moved recovery of logs in the logs directory into the LogCollector thread. This prevents a case where memfaultd could be slow to start when there is a large number of MAR entries on disk, and depending on systemd configuration, could be considered crashed and restarted before booting completely.

Fixed

  • Passing a null to disable a feature there was a case where the config merging logic could fail. This would result in a case where a subset of configs were not possible. Fixed this logic to allow these valid use cases.

CLI

We did not publish a new version of the memfault-cli in February 2025.