diff options
Diffstat (limited to 'src/gsmd/usock.c')
-rw-r--r-- | src/gsmd/usock.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c index 41814c8..157a874 100644 --- a/src/gsmd/usock.c +++ b/src/gsmd/usock.c @@ -1062,7 +1062,14 @@ static int network_opers_parse(const char *str, struct gsmd_msg_oper **out) return len; } -static int network_opers_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) +/* should we use AT@COPS=? instead of AT+COPS=? */ +int g_use_ATatCOPS; + +/* the last user that requested an AT@COPS=? scan */ +struct gsmd_user *g_last_cops_user; +int g_last_cops_id; + +int network_opers_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp) { struct gsmd_user *gu = ctx; struct gsmd_msg_oper *buf = NULL; @@ -1206,7 +1213,12 @@ static int usock_rcv_network(struct gsmd_user *gu, struct gsmd_msg_hdr *gph, cmd = atcmd_fill("AT+COPS?", 8+1, &network_oper_n_cb, gu, 0, NULL); break; case GSMD_NETWORK_OPER_LIST: - cmd = atcmd_fill("AT+COPS=?", 9+1, &network_opers_cb, gu, 0, NULL); + if (g_use_ATatCOPS) { + g_last_cops_user = gu; + g_last_cops_id = cmd->id; + cmd = atcmd_fill("AT@COPS=?", 9+1, &network_opers_cb, gu, 0, NULL); + } else + cmd = atcmd_fill("AT+COPS=?", 9+1, &network_opers_cb, gu, 0, NULL); break; case GSMD_NETWORK_PREF_LIST: /* Set long alphanumeric format */ |