Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion generated/include/infuse/rpc/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ struct rpc_struct_wifi_state {

/** LTE interface status */
struct rpc_struct_lte_state {
/** Network registration state */
/** Network registration state (3GPP TS 127.007) */
uint8_t registration_state;
/** Access Technology (3GPP TS 127.007) */
uint8_t access_technology;
Expand Down
54 changes: 7 additions & 47 deletions include/infuse/lib/lte_modem_monitor.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
#include <stdbool.h>
#include <stdint.h>

#include <zephyr/drivers/cellular.h>

#ifdef __cplusplus
extern "C" {
#endif
Expand All @@ -25,49 +27,6 @@ extern "C" {
* @{
*/

/**
* Network registration status.
*
* @note Maps directly to the registration status as returned by the AT command `AT+CEREG?`.
*/
enum lte_registration_status {
/** Not registered. UE is not currently searching for an operator to register to. */
LTE_REGISTRATION_NOT_REGISTERED = 0,
/** Registered, home network. */
LTE_REGISTRATION_REGISTERED_HOME = 1,
/**
* Not registered, but UE is currently trying to attach or searching for an operator to
* register to.
*/
LTE_REGISTRATION_SEARCHING = 2,
/** Registration denied. */
LTE_REGISTRATION_REGISTRATION_DENIED = 3,
/** Unknown, for example out of LTE coverage. */
LTE_REGISTRATION_UNKNOWN = 4,
/** Registered, roaming. */
LTE_REGISTRATION_REGISTERED_ROAMING = 5,
/** Registered for "SMS only", home network. */
LTE_REGISTRATION_REGISTERED_HOME_SMS_ONLY = 6,
/** Registered for "SMS only", roaming. */
LTE_REGISTRATION_REGISTERED_ROAMING_SMS_ONLY = 7,
/** Attached for emergency bearer services only */
LTE_REGISTRATION_ATTACHED_EMERGENCY_ONLY = 7,
/** Not registered due to UICC failure (nRF91 only). */
LTE_REGISTRATION_NRF91_UICC_FAIL = 90
};

/**
* LTE mode.
*/
enum lte_access_technology {
/** None. */
LTE_ACCESS_TECH_NONE = 0,
/** LTE-M. */
LTE_ACCESS_TECH_LTE_M = 7,
/** NB-IoT. */
LTE_ACCESS_TECH_NB_IOT = 9,
};

/**
* LTE "Radio Resource Control" state.
*/
Expand Down Expand Up @@ -127,9 +86,10 @@ struct lte_edrx_cfg {
/**
* LTE mode for which the configuration is valid.
*
* If the mode is @ref LTE_ACCESS_TECH_NONE, access technology is not using eDRX.
* If the mode is @a CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN, access technology is not using
* eDRX.
*/
enum lte_access_technology mode;
enum cellular_access_technology mode;

/** eDRX interval in seconds. */
float edrx;
Expand All @@ -139,8 +99,8 @@ struct lte_edrx_cfg {
};

struct lte_modem_network_state {
enum lte_registration_status nw_reg_status;
enum lte_access_technology lte_mode;
enum cellular_registration_status nw_reg_status;
enum cellular_access_technology lte_mode;
enum lte_rrc_mode rrc_mode;
struct lte_psm_cfg psm_cfg;
struct lte_edrx_cfg edrx_cfg;
Expand Down
50 changes: 30 additions & 20 deletions lib/modem_monitor/modem_nrf9x/nrf_modem_monitor.c
Original file line number Diff line number Diff line change
Expand Up @@ -78,22 +78,23 @@ static struct {
} monitor;

/* Validate nRF and generic event mappings */
BUILD_ASSERT(LTE_REGISTRATION_NOT_REGISTERED ==
(enum lte_registration_status)LTE_LC_NW_REG_NOT_REGISTERED);
BUILD_ASSERT(LTE_REGISTRATION_REGISTERED_HOME ==
(enum lte_registration_status)LTE_LC_NW_REG_REGISTERED_HOME);
BUILD_ASSERT(LTE_REGISTRATION_SEARCHING == (enum lte_registration_status)LTE_LC_NW_REG_SEARCHING);
BUILD_ASSERT(LTE_REGISTRATION_REGISTRATION_DENIED ==
(enum lte_registration_status)LTE_LC_NW_REG_REGISTRATION_DENIED);
BUILD_ASSERT(LTE_REGISTRATION_UNKNOWN == (enum lte_registration_status)LTE_LC_NW_REG_UNKNOWN);
BUILD_ASSERT(LTE_REGISTRATION_REGISTERED_ROAMING ==
(enum lte_registration_status)LTE_LC_NW_REG_REGISTERED_ROAMING);
BUILD_ASSERT(LTE_REGISTRATION_NRF91_UICC_FAIL ==
(enum lte_registration_status)LTE_LC_NW_REG_UICC_FAIL);

BUILD_ASSERT(LTE_ACCESS_TECH_NONE == (enum lte_access_technology)LTE_LC_LTE_MODE_NONE);
BUILD_ASSERT(LTE_ACCESS_TECH_LTE_M == (enum lte_access_technology)LTE_LC_LTE_MODE_LTEM);
BUILD_ASSERT(LTE_ACCESS_TECH_NB_IOT == (enum lte_access_technology)LTE_LC_LTE_MODE_NBIOT);
BUILD_ASSERT(CELLULAR_REGISTRATION_NOT_REGISTERED ==
(enum cellular_registration_status)LTE_LC_NW_REG_NOT_REGISTERED);
BUILD_ASSERT(CELLULAR_REGISTRATION_REGISTERED_HOME ==
(enum cellular_registration_status)LTE_LC_NW_REG_REGISTERED_HOME);
BUILD_ASSERT(CELLULAR_REGISTRATION_SEARCHING ==
(enum cellular_registration_status)LTE_LC_NW_REG_SEARCHING);
BUILD_ASSERT(CELLULAR_REGISTRATION_DENIED ==
(enum cellular_registration_status)LTE_LC_NW_REG_REGISTRATION_DENIED);
BUILD_ASSERT(CELLULAR_REGISTRATION_UNKNOWN ==
(enum cellular_registration_status)LTE_LC_NW_REG_UNKNOWN);
BUILD_ASSERT(CELLULAR_REGISTRATION_REGISTERED_ROAMING ==
(enum cellular_registration_status)LTE_LC_NW_REG_REGISTERED_ROAMING);

BUILD_ASSERT(CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN ==
(enum cellular_access_technology)LTE_LC_LTE_MODE_LTEM);
BUILD_ASSERT(CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1 ==
(enum cellular_access_technology)LTE_LC_LTE_MODE_NBIOT);

BUILD_ASSERT(LTE_RRC_MODE_IDLE == (enum lte_rrc_mode)LTE_LC_RRC_MODE_IDLE);
BUILD_ASSERT(LTE_RRC_MODE_CONNECTED == (enum lte_rrc_mode)LTE_LC_RRC_MODE_CONNECTED);
Expand Down Expand Up @@ -157,8 +158,8 @@ static void network_info_update(struct k_work *work)
}
}

if ((monitor.network_state.nw_reg_status != LTE_REGISTRATION_REGISTERED_HOME) &&
(monitor.network_state.nw_reg_status != LTE_REGISTRATION_REGISTERED_ROAMING)) {
if ((monitor.network_state.nw_reg_status != CELLULAR_REGISTRATION_REGISTERED_HOME) &&
(monitor.network_state.nw_reg_status != CELLULAR_REGISTRATION_REGISTERED_ROAMING)) {
/* No cell information (except for potentially Cell ID and TAC) */
uint32_t id = monitor.network_state.cell.id;
uint32_t tac = monitor.network_state.cell.tac;
Expand Down Expand Up @@ -312,7 +313,11 @@ static void lte_reg_handler(const struct lte_lc_evt *const evt)
LOG_DBG(" Mode: %d", evt->edrx_cfg.mode);
LOG_DBG(" PTW: %d", (int)evt->edrx_cfg.ptw);
LOG_DBG("Interval: %d", (int)evt->edrx_cfg.edrx);
monitor.network_state.edrx_cfg.mode = evt->edrx_cfg.mode;
if (evt->lte_mode == LTE_LC_LTE_MODE_NONE) {
monitor.network_state.edrx_cfg.mode = CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN;
} else {
monitor.network_state.edrx_cfg.mode = evt->edrx_cfg.mode;
}
monitor.network_state.edrx_cfg.edrx = evt->edrx_cfg.edrx;
monitor.network_state.edrx_cfg.ptw = evt->edrx_cfg.ptw;
break;
Expand Down Expand Up @@ -346,7 +351,11 @@ static void lte_reg_handler(const struct lte_lc_evt *const evt)
case LTE_LC_EVT_LTE_MODE_UPDATE:
LOG_DBG("LTE_MODE_UPDATE");
LOG_DBG(" Mode: %d", evt->lte_mode);
monitor.network_state.lte_mode = evt->lte_mode;
if (evt->lte_mode == LTE_LC_LTE_MODE_NONE) {
monitor.network_state.lte_mode = CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN;
} else {
monitor.network_state.lte_mode = evt->lte_mode;
}
break;
case LTE_LC_EVT_MODEM_SLEEP_ENTER:
LOG_DBG("MODEM_SLEEP_ENTER");
Expand Down Expand Up @@ -567,6 +576,7 @@ int lte_modem_monitor_init(void)
/* Initial state */
monitor.network_state.psm_cfg.tau = -1;
monitor.network_state.psm_cfg.active_time = -1;
monitor.network_state.edrx_cfg.mode = CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN;
monitor.network_state.edrx_cfg.edrx = -1.0f;
monitor.network_state.edrx_cfg.ptw = -1.0f;
monitor.rsrp_cached = INT16_MIN;
Expand Down
2 changes: 1 addition & 1 deletion scripts/west_commands/cloud_definitions/rpc.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
"rpc_struct_lte_state": {
"description": "LTE interface status",
"fields": [
{"name": "registration_state", "type": "uint8_t", "description": "Network registration state"},
{"name": "registration_state", "type": "uint8_t", "description": "Network registration state (3GPP TS 127.007)"},
{"name": "access_technology", "type": "uint8_t", "description": "Access Technology (3GPP TS 127.007)"},
{"name": "mcc", "type": "uint16_t", "description": "Mobile Country Code"},
{"name": "mnc", "type": "uint16_t", "description": "Mobile Network Code"},
Expand Down
7 changes: 7 additions & 0 deletions subsys/validation/validation_flash.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,13 @@ static int write_read_erase_page(const struct device *dev, size_t page, size_t p
VALIDATION_REPORT_INFO(TEST, "Testing address %d.%d (0x%08lX)", page, page_offset,
write_offset);

/* Ensure page starts erased */
rc = flash_erase(dev, erase_offset, page_size);
if (rc < 0) {
VALIDATION_REPORT_ERROR(TEST, "flash_erase (%d)", rc);
return rc;
}

/* Fill buffer with random bytes */
sys_rand_get(write_buffer, sizeof(write_buffer));

Expand Down
14 changes: 7 additions & 7 deletions tests/net/nrf_modem_lib/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ ZTEST(infuse_nrf_modem_monitor, test_integration)
zassert_equal(PDN_FAM_IPV4V6, default_family);

lte_modem_monitor_network_state(&net_state);
zassert_equal(LTE_REGISTRATION_NOT_REGISTERED, net_state.nw_reg_status);
zassert_equal(CELLULAR_REGISTRATION_NOT_REGISTERED, net_state.nw_reg_status);

/* Searching for a second */
nrf_modem_lib_sim_send_at("+CEREG: 2,\"702A\",\"08C3BD0C\",7\r\n");
Expand All @@ -235,7 +235,7 @@ ZTEST(infuse_nrf_modem_monitor, test_integration)
zassert_equal(atoll(CONFIG_INFUSE_NRF_MODEM_LIB_SIM_IMSI), imsi.imsi);

lte_modem_monitor_network_state(&net_state);
zassert_equal(LTE_REGISTRATION_SEARCHING, net_state.nw_reg_status);
zassert_equal(CELLULAR_REGISTRATION_SEARCHING, net_state.nw_reg_status);
zassert_equal(0x702A, net_state.cell.tac);
zassert_equal(0x08C3BD0C, net_state.cell.id);

Expand Down Expand Up @@ -270,18 +270,18 @@ ZTEST(infuse_nrf_modem_monitor, test_integration)
k_sleep(K_SECONDS(1));

lte_modem_monitor_network_state(&net_state);
zassert_equal(LTE_REGISTRATION_REGISTERED_ROAMING, net_state.nw_reg_status);
zassert_equal(CELLULAR_REGISTRATION_REGISTERED_ROAMING, net_state.nw_reg_status);
zassert_equal(0x702A, net_state.cell.tac);
zassert_equal(0x08C3BD0C, net_state.cell.id);
zassert_equal(103, net_state.cell.phys_cell_id);
zassert_equal(505, net_state.cell.mcc);
zassert_equal(1, net_state.cell.mnc);
zassert_equal(9410, net_state.cell.earfcn);
zassert_equal(LTE_ACCESS_TECH_LTE_M, net_state.lte_mode);
zassert_equal(CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN, net_state.lte_mode);
zassert_equal(28, net_state.band);
zassert_equal(16, net_state.psm_cfg.active_time);
zassert_equal(46800, net_state.psm_cfg.tau);
zassert_equal(0, net_state.edrx_cfg.mode);
zassert_equal(CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN, net_state.edrx_cfg.mode);
zassert_equal(-1.0f, net_state.edrx_cfg.edrx);
zassert_equal(-1.0f, net_state.edrx_cfg.ptw);

Expand All @@ -304,7 +304,7 @@ ZTEST(infuse_nrf_modem_monitor, test_integration)
nrf_modem_lib_sim_send_at("+CEDRXP: 4,\"0001\",\"0001\",\"0001\"\r\n");
k_sleep(K_SECONDS(1));
lte_modem_monitor_network_state(&net_state);
zassert_equal(LTE_ACCESS_TECH_LTE_M, net_state.edrx_cfg.mode);
zassert_equal(CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN, net_state.edrx_cfg.mode);
zassert_within(10.24f, net_state.edrx_cfg.edrx, 0.01f);
zassert_within(2.56f, net_state.edrx_cfg.ptw, 0.01f);

Expand Down Expand Up @@ -355,7 +355,7 @@ ZTEST(infuse_nrf_modem_monitor, test_integration)
k_sleep(K_SECONDS(2));

lte_modem_monitor_network_state(&net_state);
zassert_equal(LTE_ACCESS_TECH_NB_IOT, net_state.lte_mode);
zassert_equal(CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1, net_state.lte_mode);
zassert_equal(0x702B, net_state.cell.tac);
zassert_equal(0x08C3BD0D, net_state.cell.id);

Expand Down
2 changes: 1 addition & 1 deletion west.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ manifest:

projects:
- name: zephyr
revision: 0d3f625a5a7b7bb7cc2628f4efb8a6135cf27927
revision: 8dcf7ccb9021ac78b4fd64a9fb7ac7eef2380072
# Limit imported repositories to reduce clone time
import:
name-allowlist:
Expand Down