drivers: modem: gsm: Add setting of MCC number

Add Kconfig option that allows user to set MCC (Mobile Country
Code). If user does not set it, then automatic operator
registration is used.

Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit is contained in:
Jukka Rissanen 2020-02-07 10:42:30 +02:00
commit b05e72f3bb
2 changed files with 39 additions and 0 deletions

View file

@ -29,4 +29,12 @@ config MODEM_GSM_APN
Specify Access Point Name, i.e. the name to identify Internet IP
GPRS cellular data context.
config MODEM_GSM_MANUAL_MCCMNO
string "MCC/MNO for establishing network connection"
help
This setting is used in the AT+COPS command to set the MCC/MNO
for the network connection context. This value is specific to
the network provider and may need to be changed if auto is not
selected.
endif

View file

@ -205,6 +205,36 @@ static struct setup_cmd setup_cmds[] = {
SETUP_CMD_NOHANDLE("ATD*99#")
};
static int gsm_setup_mccmno(struct gsm_modem *gsm)
{
int ret;
if (CONFIG_MODEM_GSM_MANUAL_MCCMNO[0]) {
/* use manual MCC/MNO entry */
ret = modem_cmd_send(&gsm->context.iface,
&gsm->context.cmd_handler,
NULL, 0,
"AT+COPS=1,2,\""
CONFIG_MODEM_GSM_MANUAL_MCCMNO
"\"",
&gsm->sem_response,
GSM_CMD_AT_TIMEOUT);
} else {
/* register operator automatically */
ret = modem_cmd_send(&gsm->context.iface,
&gsm->context.cmd_handler,
NULL, 0, "AT+COPS=0,0",
&gsm->sem_response,
GSM_CMD_AT_TIMEOUT);
}
if (ret < 0) {
LOG_ERR("AT+COPS ret:%d", ret);
}
return ret;
}
static void gsm_configure(struct k_work *work)
{
int r = -1;
@ -225,6 +255,7 @@ static void gsm_configure(struct k_work *work)
LOG_DBG("modem not ready %d", r);
} else {
LOG_DBG("connect with modem %d", r);
(void)gsm_setup_mccmno(gsm);
break;
}
}