summaryrefslogtreecommitdiff
path: root/src/gsmd/usock.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gsmd/usock.c')
-rw-r--r--src/gsmd/usock.c16
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 */
personal git repositories of Harald Welte. Your mileage may vary