This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to get the signal strength value of NB quickly after power on

I have a 9160 project, users hope to display on the screen as soon as possible in the boot of operators NB signal value, actual test when I found this problem, on the product pcba board, I use the AT command to open the modem, and then call the function, only later modem will give me back the signal value of the current environment,like this:

#if CONFIG_MODEM_INFO
/**@brief Callback handler for LTE RSRP data. */
static void modem_rsrp_handler(char rsrp_value)
{
	/* RSRP raw values that represent actual signal strength are
	 * 0 through 97 (per "nRF91 AT Commands" v1.1). If the received value
	 * falls outside this range, we should not send the value.
	 */
	LOG_INF("rsrp_value:%d\n", rsrp_value);

	if(rsrp_value > 97)
	{
		g_nb_sig = NB_SIG_LEVEL_NO;
	}
	else if(rsrp_value >= 80)
	{
		g_nb_sig = NB_SIG_LEVEL_4;
	}
	else if(rsrp_value >= 60)
	{
		g_nb_sig = NB_SIG_LEVEL_3;
	}
	else if(rsrp_value >= 40)
	{
		g_nb_sig = NB_SIG_LEVEL_2;
	}
	else if(rsrp_value >= 20)
	{
		g_nb_sig = NB_SIG_LEVEL_1;
	}
	else
	{
		g_nb_sig = NB_SIG_LEVEL_0;
	}

	nb_redraw_sig_flag = true;
}

/**brief Initialize LTE status containers. */
void modem_data_init(void)
{
	int err;

	err = modem_info_init();
	if(err)
	{
		LOG_INF("Modem info could not be established: %d", err);
		return;
	}

	modem_info_params_init(&modem_param);
	modem_info_rsrp_register(modem_rsrp_handler);
}
#endif /* CONFIG_MODEM_INFO */


void NB_init(void)
{
	u8_t tmpbuf[128] = {0};
	
	if(at_cmd_write("AT+CFUN=1", NULL, 0, NULL) != 0)
	{
		LOG_INF("Set modem on fail!\n");
		return;
	}

	modem_data_init();

	k_timer_start(&get_modem_timer, K_MSEC(2000), NULL);
}

.But I found on the development board, this effect, but there was no return signal value has always been 255, behind my reference sample code, registration and networking operation, lte_lc_init_and_connect(); so although you can get to the signal value, but Internet is very slow, and the system is in a wait state, so to the user feel very bad, why can't development board like the one above, please directly register callback function?

void NB_init(void)
{
	u8_t tmpbuf[128] = {0};
	
	lte_lc_init_and_connect();
	modem_data_init();

	k_timer_start(&get_modem_timer, K_MSEC(2000), NULL);
}

Parents Reply
  • I understand. The issues you are seeing, are they only on the client board? NB-IoT is a quite slow protocol and it can take some time to establish connection, especially if the reception is bad. 

    Anyway, based on the code you posted initially I see that you're using "at_cmd_write" directly. I'd recommend that you'd rather use the LTE link controller for initiating the LTE connection. It handles all responses from the modem properly and could help with stability.

    Best regards,
    Carl Richard

Children
No Data
Related