mirror of git://git.sysmocom.de/ofono
icera: Request USSD mode and firmware details
This commit is contained in:
parent
6d83fbdf00
commit
a5ae2e37df
|
@ -48,11 +48,13 @@
|
|||
|
||||
static const char *none_prefix[] = { NULL };
|
||||
static const char *siminit_prefix[] = { "%ISIMINIT:", NULL };
|
||||
static const char *ussdmode_prefix[] = { "%IUSSDMODE:", NULL };
|
||||
|
||||
struct icera_data {
|
||||
GAtChat *chat;
|
||||
struct ofono_sim *sim;
|
||||
gboolean have_sim;
|
||||
int ussdmode;
|
||||
};
|
||||
|
||||
static int icera_probe(struct ofono_modem *modem)
|
||||
|
@ -132,6 +134,51 @@ static GAtChat *open_device(struct ofono_modem *modem,
|
|||
return chat;
|
||||
}
|
||||
|
||||
static void ussdmode_query(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct ofono_modem *modem = user_data;
|
||||
struct icera_data *data = ofono_modem_get_data(modem);
|
||||
GAtResultIter iter;
|
||||
int mode;
|
||||
|
||||
if (!ok)
|
||||
return;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
if (!g_at_result_iter_next(&iter, "%IUSSDMODE:"))
|
||||
return;
|
||||
|
||||
if (!g_at_result_iter_next_number(&iter, &mode))
|
||||
return;
|
||||
|
||||
DBG("mode %d", mode);
|
||||
|
||||
data->ussdmode = mode;
|
||||
}
|
||||
|
||||
static void ussdmode_support(gboolean ok, GAtResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
struct ofono_modem *modem = user_data;
|
||||
struct icera_data *data = ofono_modem_get_data(modem);
|
||||
GAtResultIter iter;
|
||||
|
||||
if (!ok)
|
||||
return;
|
||||
|
||||
g_at_result_iter_init(&iter, result);
|
||||
|
||||
DBG("a");
|
||||
if (!g_at_result_iter_next(&iter, "%IUSSDMODE:"))
|
||||
return;
|
||||
|
||||
DBG("b");
|
||||
g_at_chat_send(data->chat, "AT%IUSSDMODE?", ussdmode_prefix,
|
||||
ussdmode_query, modem, NULL);
|
||||
}
|
||||
|
||||
static void icera_set_sim_state(struct icera_data *data, int state)
|
||||
{
|
||||
DBG("state %d", state);
|
||||
|
@ -233,7 +280,7 @@ static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data)
|
|||
g_at_chat_send(data->chat, "AT%ISIMINIT", siminit_prefix,
|
||||
siminit_query, modem, NULL);
|
||||
|
||||
g_at_chat_send(data->chat, "AT*TSIMINS=1", none_prefix,
|
||||
g_at_chat_send(data->chat, "AT%IAIRCRAFT?", none_prefix,
|
||||
NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
|
@ -249,6 +296,12 @@ static int icera_enable(struct ofono_modem *modem)
|
|||
|
||||
g_at_chat_send(data->chat, "ATE0 +CMEE=1", NULL, NULL, NULL, NULL);
|
||||
|
||||
g_at_chat_send(data->chat, "AT%IFWR", none_prefix, NULL, NULL, NULL);
|
||||
g_at_chat_send(data->chat, "AT%ISWIN", none_prefix, NULL, NULL, NULL);
|
||||
|
||||
g_at_chat_send(data->chat, "AT%IUSSDMODE=?", ussdmode_prefix,
|
||||
ussdmode_support, modem, NULL);
|
||||
|
||||
g_at_chat_send(data->chat, "AT+CFUN=4", none_prefix,
|
||||
cfun_enable, modem, NULL);
|
||||
|
||||
|
|
Loading…
Reference in New Issue