Skip to content

Commit

Permalink
memfault: Various fixes for FOTA
Browse files Browse the repository at this point in the history
 - Use nrf modem library CFUN callback to prevent modem info
   calls in offline and powered off states. This is needed instead of
   fetching the func mode due to the modem being shutdown when
   a lte handler notification is received.

 - Ease up on the logging when modem info API are called.
   Its expected that they fail in certain scenarios, and logging an
   error in those instances is not necessary.

Signed-off-by: Simen S. Røstad <[email protected]>
  • Loading branch information
simensrostad authored and rlubos committed Sep 19, 2024
1 parent 406cb97 commit 5f189de
Showing 1 changed file with 36 additions and 26 deletions.
62 changes: 36 additions & 26 deletions modules/memfault-firmware-sdk/memfault_lte_metrics.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

#include <modem/lte_lc.h>
#include <modem/lte_lc_trace.h>
#include <modem/nrf_modem_lib.h>

#if defined(CONFIG_MODEM_INFO)
#include <modem/modem_info.h>
Expand All @@ -23,6 +24,16 @@
LOG_MODULE_DECLARE(memfault_ncs_metrics, CONFIG_MEMFAULT_NCS_LOG_LEVEL);

static bool connected;
static enum lte_lc_func_mode current_func_mode;

static void memfault_on_modem_cfun(int mode, void *ctx)
{
ARG_UNUSED(ctx);

current_func_mode = mode;
}

NRF_MODEM_LIB_ON_CFUN(memfault_cfun_hook, memfault_on_modem_cfun, NULL);

#if CONFIG_MEMFAULT_NCS_STACK_METRICS
static struct memfault_ncs_metrics_thread lte_metrics_thread = {
Expand Down Expand Up @@ -64,45 +75,44 @@ static void modem_params_get(void)

err = modem_info_get_rsrp(&rsrp);
if (err) {
LOG_WRN("LTE RSRP value collection failed, error: %d", err);
} else {
err = MEMFAULT_METRIC_SET_SIGNED(ncs_lte_rsrp_dbm, rsrp);
if (err) {
LOG_ERR("Failed to set ncs_lte_rsrp_dbm");
}
};
return;
}

err = MEMFAULT_METRIC_SET_SIGNED(ncs_lte_rsrp_dbm, rsrp);
if (err) {
LOG_ERR("Failed to set ncs_lte_rsrp_dbm");
return;
}

err = modem_info_get_current_band(&band);
if (err != 0) {
LOG_WRN("Network band collection failed, error: %d", err);
} else {
err = MEMFAULT_METRIC_SET_UNSIGNED(ncs_lte_band, band);
if (err) {
LOG_ERR("Failed to set nce_lte_band");
}
if (err) {
return;
}

err = MEMFAULT_METRIC_SET_UNSIGNED(ncs_lte_band, band);
if (err) {
LOG_ERR("Failed to set nce_lte_band");
return;
}

err = modem_info_get_snr(&snr);
if (err != 0) {
LOG_WRN("SNR collection failed, error: %d", err);
} else {
err = MEMFAULT_METRIC_SET_SIGNED(ncs_lte_snr_decibels, snr);
if (err) {
LOG_ERR("Failed to set ncs_lte_snr_decibels");
}
if (err) {
return;
}

err = MEMFAULT_METRIC_SET_SIGNED(ncs_lte_snr_decibels, snr);
if (err) {
LOG_ERR("Failed to set ncs_lte_snr_decibels");
return;
}
#endif
}

static void lte_handler(const struct lte_lc_evt *const evt)
{
int err;
enum lte_lc_func_mode mode = LTE_LC_FUNC_MODE_OFFLINE;

err = lte_lc_func_mode_get(&mode);
if (err) {
LOG_ERR("Failed to get LTE mode, error: %d", err);
} else if (mode != LTE_LC_FUNC_MODE_OFFLINE) {
if (current_func_mode == LTE_LC_FUNC_MODE_NORMAL) {
modem_params_get();
}

Expand Down

0 comments on commit 5f189de

Please sign in to comment.