diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2010-05-12 03:20:53 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-05-12 12:18:33 -0500 |
commit | 5e11442ef70643872b3d265b7272b7aa889d4638 (patch) | |
tree | bd44735061a391cc67b49d53f29e24ac1dea934e | |
parent | 8a33071cd0321b0dfdd8b5a92294d0f5ca21a58f (diff) | |
download | ofono-5e11442ef70643872b3d265b7272b7aa889d4638.tar.bz2 |
atmodem: Pass allowed response prefixes to gatchat
Not doing this creates a race condition where any notification
comming in in the middle of a sequence of commands may be counted
as a response to one of the commands and get lost.
-rw-r--r-- | drivers/atmodem/sim.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/atmodem/sim.c b/drivers/atmodem/sim.c index 13e74593..1f5cf9b3 100644 --- a/drivers/atmodem/sim.c +++ b/drivers/atmodem/sim.c @@ -47,6 +47,9 @@ struct sim_data { }; static const char *crsm_prefix[] = { "+CRSM:", NULL }; +static const char *cpin_prefix[] = { "+CPIN:", NULL }; +static const char *clck_prefix[] = { "+CLCK:", NULL }; +static const char *none_prefix[] = { NULL }; static void at_crsm_info_cb(gboolean ok, GAtResult *result, gpointer user_data) { @@ -488,7 +491,7 @@ static void at_pin_query(struct ofono_sim *sim, ofono_sim_passwd_cb_t cb, cbd->user = sim; - if (g_at_chat_send(sd->chat, "AT+CPIN?", NULL, + if (g_at_chat_send(sd->chat, "AT+CPIN?", cpin_prefix, at_cpin_cb, cbd, g_free) > 0) return; @@ -524,7 +527,7 @@ static void at_pin_send(struct ofono_sim *sim, const char *passwd, snprintf(buf, sizeof(buf), "AT+CPIN=\"%s\"", passwd); - ret = g_at_chat_send(sd->chat, buf, NULL, + ret = g_at_chat_send(sd->chat, buf, none_prefix, at_lock_unlock_cb, cbd, g_free); memset(buf, 0, sizeof(buf)); @@ -553,7 +556,7 @@ static void at_pin_send_puk(struct ofono_sim *sim, const char *puk, snprintf(buf, sizeof(buf), "AT+CPIN=\"%s\",\"%s\"", puk, passwd); - ret = g_at_chat_send(sd->chat, buf, NULL, + ret = g_at_chat_send(sd->chat, buf, none_prefix, at_lock_unlock_cb, cbd, g_free); memset(buf, 0, sizeof(buf)); @@ -599,7 +602,7 @@ static void at_pin_enable(struct ofono_sim *sim, snprintf(buf, sizeof(buf), "AT+CLCK=\"%s\",%i,\"%s\"", at_clck_cpwd_fac[passwd_type], enable ? 1 : 0, passwd); - ret = g_at_chat_send(sd->chat, buf, NULL, + ret = g_at_chat_send(sd->chat, buf, none_prefix, at_lock_unlock_cb, cbd, g_free); memset(buf, 0, sizeof(buf)); @@ -635,7 +638,7 @@ static void at_change_passwd(struct ofono_sim *sim, snprintf(buf, sizeof(buf), "AT+CPWD=\"%s\",\"%s\",\"%s\"", at_clck_cpwd_fac[passwd_type], old, new); - ret = g_at_chat_send(sd->chat, buf, NULL, + ret = g_at_chat_send(sd->chat, buf, none_prefix, at_lock_unlock_cb, cbd, g_free); memset(buf, 0, sizeof(buf)); @@ -698,7 +701,7 @@ static void at_pin_query_enabled(struct ofono_sim *sim, snprintf(buf, sizeof(buf), "AT+CLCK=\"%s\",2", at_clck_cpwd_fac[passwd_type]); - if (g_at_chat_send(sd->chat, buf, NULL, + if (g_at_chat_send(sd->chat, buf, clck_prefix, at_lock_status_cb, cbd, g_free) > 0) return; |