modem: hl7800: sync APN for PDN and GPRS connection

Ensure the GPRS connection APN settings match the PDP
context. This it best to ensure proper IP connectivity.

Signed-off-by: Ryan Erickson <ryan.erickson@lairdconnect.com>
This commit is contained in:
Ryan Erickson 2021-09-21 10:54:37 -05:00 committed by Christopher Friedt
parent bd24fba6c4
commit e1eb55d7f7

View file

@ -320,9 +320,6 @@ static const struct mdm_control_pinconfig pinconfig[] = {
#define MODEM_HL7800_ADDRESS_FAMILY "IPV6" #define MODEM_HL7800_ADDRESS_FAMILY "IPV6"
#endif #endif
#define SETUP_GPRS_CONNECTION_CMD \
"AT+KCNXCFG=1,\"GPRS\",\"\",,," \
"\"" MODEM_HL7800_ADDRESS_FAMILY "\""
#define SET_RAT_M1_CMD_LEGACY "AT+KSRAT=0" #define SET_RAT_M1_CMD_LEGACY "AT+KSRAT=0"
#define SET_RAT_NB1_CMD_LEGACY "AT+KSRAT=1" #define SET_RAT_NB1_CMD_LEGACY "AT+KSRAT=1"
#define SET_RAT_M1_CMD "AT+KSRAT=0,1" #define SET_RAT_M1_CMD "AT+KSRAT=0,1"
@ -4659,6 +4656,21 @@ static int compare_versions(char *v1, const char *v2)
return result; return result;
} }
static int setup_gprs_connection(char *access_point_name)
{
char cmd_string[sizeof("AT+KCNXCFG=1,\"GPRS\",\"\",,,"
"\"IPV4V6\"") +
MDM_HL7800_APN_MAX_SIZE];
int cmd_max_len = sizeof(cmd_string) - 1;
memset(cmd_string, 0, cmd_max_len);
strncat(cmd_string, "AT+KCNXCFG=1,\"GPRS\",\"", cmd_max_len);
strncat(cmd_string, access_point_name, cmd_max_len);
strncat(cmd_string, "\",,,\"", cmd_max_len);
strncat(cmd_string, MODEM_HL7800_ADDRESS_FAMILY "\"", cmd_max_len);
return send_at_cmd(NULL, cmd_string, MDM_CMD_SEND_TIMEOUT, 0, false);
}
static int modem_reset_and_configure(void) static int modem_reset_and_configure(void)
{ {
int ret = 0; int ret = 0;
@ -4926,10 +4938,10 @@ reboot:
} }
} }
/* An empty string is used here so that it doesn't conflict ret = setup_gprs_connection(ictx.mdm_apn.value);
* with the APN used in the +CGDCONT command. if (ret < 0) {
*/ goto error;
SEND_AT_CMD_EXPECT_OK(SETUP_GPRS_CONNECTION_CMD); }
/* Query PDP authentication context to get APN username/password. /* Query PDP authentication context to get APN username/password.
* Temporary Workaroud - Ignore error * Temporary Workaroud - Ignore error
@ -5219,8 +5231,7 @@ static int reconfigure_IP_connection(void)
ictx.reconfig_IP_connection = false; ictx.reconfig_IP_connection = false;
/* reconfigure GPRS connection so sockets can be used */ /* reconfigure GPRS connection so sockets can be used */
ret = send_at_cmd(NULL, SETUP_GPRS_CONNECTION_CMD, ret = setup_gprs_connection(ictx.mdm_apn.value);
MDM_CMD_SEND_TIMEOUT, 0, false);
if (ret < 0) { if (ret < 0) {
LOG_ERR("AT+KCNXCFG= ret:%d", ret); LOG_ERR("AT+KCNXCFG= ret:%d", ret);
goto done; goto done;