mirror of git://git.sysmocom.de/ofono
atmodem: Add SIM ready quirk for IFX when entering PUK
For the Infineon modem, also the PUK entering needs to be extended with a quirk to wait for the SIM ready notification.
This commit is contained in:
parent
56480ba582
commit
a917f094cb
|
@ -618,18 +618,6 @@ done:
|
||||||
g_free(cbd);
|
g_free(cbd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void at_lock_unlock_cb(gboolean ok, GAtResult *result,
|
|
||||||
gpointer user_data)
|
|
||||||
{
|
|
||||||
struct cb_data *cbd = user_data;
|
|
||||||
ofono_sim_lock_unlock_cb_t cb = cbd->cb;
|
|
||||||
struct ofono_error error;
|
|
||||||
|
|
||||||
decode_at_error(&error, g_at_result_final_response(result));
|
|
||||||
|
|
||||||
cb(&error, cbd->data);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void at_pin_send(struct ofono_sim *sim, const char *passwd,
|
static void at_pin_send(struct ofono_sim *sim, const char *passwd,
|
||||||
ofono_sim_lock_unlock_cb_t cb, void *data)
|
ofono_sim_lock_unlock_cb_t cb, void *data)
|
||||||
{
|
{
|
||||||
|
@ -659,6 +647,38 @@ error:
|
||||||
CALLBACK_WITH_FAILURE(cb, data);
|
CALLBACK_WITH_FAILURE(cb, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void at_pin_send_puk_cb(gboolean ok, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
struct cb_data *cbd = user_data;
|
||||||
|
struct sim_data *sd = cbd->user;
|
||||||
|
ofono_sim_lock_unlock_cb_t cb = cbd->cb;
|
||||||
|
struct ofono_error error;
|
||||||
|
|
||||||
|
decode_at_error(&error, g_at_result_final_response(result));
|
||||||
|
|
||||||
|
if (!ok)
|
||||||
|
goto done;
|
||||||
|
|
||||||
|
switch (sd->vendor) {
|
||||||
|
case OFONO_VENDOR_IFX:
|
||||||
|
/*
|
||||||
|
* On the IFX modem, AT+CPIN? can return READY too
|
||||||
|
* early and so use +XSIM notification to detect
|
||||||
|
* the ready state of the SIM.
|
||||||
|
*/
|
||||||
|
sd->ready_id = g_at_chat_register(sd->chat, "+XSIM",
|
||||||
|
at_xsim_notify,
|
||||||
|
FALSE, cbd, g_free);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
cb(&error, cbd->data);
|
||||||
|
|
||||||
|
g_free(cbd);
|
||||||
|
}
|
||||||
|
|
||||||
static void at_pin_send_puk(struct ofono_sim *sim, const char *puk,
|
static void at_pin_send_puk(struct ofono_sim *sim, const char *puk,
|
||||||
const char *passwd,
|
const char *passwd,
|
||||||
ofono_sim_lock_unlock_cb_t cb, void *data)
|
ofono_sim_lock_unlock_cb_t cb, void *data)
|
||||||
|
@ -671,10 +691,12 @@ static void at_pin_send_puk(struct ofono_sim *sim, const char *puk,
|
||||||
if (!cbd)
|
if (!cbd)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
cbd->user = sd;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "AT+CPIN=\"%s\",\"%s\"", puk, passwd);
|
snprintf(buf, sizeof(buf), "AT+CPIN=\"%s\",\"%s\"", puk, passwd);
|
||||||
|
|
||||||
ret = g_at_chat_send(sd->chat, buf, none_prefix,
|
ret = g_at_chat_send(sd->chat, buf, none_prefix,
|
||||||
at_lock_unlock_cb, cbd, g_free);
|
at_pin_send_puk_cb, cbd, NULL);
|
||||||
|
|
||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
|
|
||||||
|
@ -687,6 +709,18 @@ error:
|
||||||
CALLBACK_WITH_FAILURE(cb, data);
|
CALLBACK_WITH_FAILURE(cb, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void at_lock_unlock_cb(gboolean ok, GAtResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
struct cb_data *cbd = user_data;
|
||||||
|
ofono_sim_lock_unlock_cb_t cb = cbd->cb;
|
||||||
|
struct ofono_error error;
|
||||||
|
|
||||||
|
decode_at_error(&error, g_at_result_final_response(result));
|
||||||
|
|
||||||
|
cb(&error, cbd->data);
|
||||||
|
}
|
||||||
|
|
||||||
static const char *const at_clck_cpwd_fac[] = {
|
static const char *const at_clck_cpwd_fac[] = {
|
||||||
[OFONO_SIM_PASSWORD_SIM_PIN] = "SC",
|
[OFONO_SIM_PASSWORD_SIM_PIN] = "SC",
|
||||||
[OFONO_SIM_PASSWORD_SIM_PIN2] = "P2",
|
[OFONO_SIM_PASSWORD_SIM_PIN2] = "P2",
|
||||||
|
|
Loading…
Reference in New Issue