mirror of git://git.sysmocom.de/ofono
phonesim: Support set_online/post_online
This commit is contained in:
parent
ad8607994f
commit
3b34dd44f1
|
@ -30,6 +30,7 @@
|
|||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <glib.h>
|
||||
#include <gatmux.h>
|
||||
|
@ -60,6 +61,9 @@
|
|||
|
||||
#include <drivers/atmodem/vendor.h>
|
||||
#include <drivers/atmodem/sim-poll.h>
|
||||
#include <drivers/atmodem/atutil.h>
|
||||
|
||||
static const char *none_prefix[] = { NULL };
|
||||
|
||||
struct phonesim_data {
|
||||
GAtMux *mux;
|
||||
|
@ -247,12 +251,38 @@ static int phonesim_enable(struct ofono_modem *modem)
|
|||
g_at_mux_setup_gsm0710(data->chat, mux_setup, modem, NULL);
|
||||
g_at_chat_unref(data->chat);
|
||||
data->chat = NULL;
|
||||
} else {
|
||||
g_at_chat_send(data->chat, "AT+CFUN=1", NULL,
|
||||
cfun_set_on_cb, modem, NULL);
|
||||
}
|
||||
|
||||
return -EINPROGRESS;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void set_online_cb(gboolean ok, GAtResult *result, gpointer user_data)
|
||||
{
|
||||
struct cb_data *cbd = user_data;
|
||||
ofono_modem_online_cb_t callback = cbd->cb;
|
||||
struct ofono_error error;
|
||||
|
||||
decode_at_error(&error, g_at_result_final_response(result));
|
||||
|
||||
callback(&error, cbd->data);
|
||||
}
|
||||
|
||||
static void phonesim_set_online(struct ofono_modem *modem, ofono_bool_t online,
|
||||
ofono_modem_online_cb_t cb, void *user_data)
|
||||
{
|
||||
struct phonesim_data *data = ofono_modem_get_data(modem);
|
||||
struct cb_data *cbd = cb_data_new(cb, user_data);
|
||||
char buf[64];
|
||||
|
||||
DBG("%p", modem);
|
||||
|
||||
snprintf(buf, sizeof(buf), "AT+CFUN=%d", online ? 1 : 4);
|
||||
|
||||
if (g_at_chat_send(data->chat, buf, none_prefix,
|
||||
set_online_cb, cbd, g_free) > 0)
|
||||
return;
|
||||
|
||||
CALLBACK_WITH_FAILURE(cb, user_data);
|
||||
}
|
||||
|
||||
static int phonesim_disable(struct ofono_modem *modem)
|
||||
|
@ -294,6 +324,15 @@ static void phonesim_pre_sim(struct ofono_modem *modem)
|
|||
}
|
||||
|
||||
static void phonesim_post_sim(struct ofono_modem *modem)
|
||||
{
|
||||
struct phonesim_data *data = ofono_modem_get_data(modem);
|
||||
|
||||
DBG("%p", modem);
|
||||
|
||||
ofono_phonebook_create(modem, 0, "atmodem", data->chat);
|
||||
}
|
||||
|
||||
static void phonesim_post_online(struct ofono_modem *modem)
|
||||
{
|
||||
struct phonesim_data *data = ofono_modem_get_data(modem);
|
||||
struct ofono_message_waiting *mw;
|
||||
|
@ -324,7 +363,6 @@ static void phonesim_post_sim(struct ofono_modem *modem)
|
|||
|
||||
if (!data->calypso) {
|
||||
ofono_sms_create(modem, 0, "atmodem", data->chat);
|
||||
ofono_phonebook_create(modem, 0, "atmodem", data->chat);
|
||||
ofono_cbs_create(modem, 0, "atmodem", data->chat);
|
||||
}
|
||||
|
||||
|
@ -337,6 +375,7 @@ static void phonesim_post_sim(struct ofono_modem *modem)
|
|||
mw = ofono_message_waiting_create(modem);
|
||||
if (mw)
|
||||
ofono_message_waiting_register(mw);
|
||||
|
||||
}
|
||||
|
||||
static struct ofono_modem_driver phonesim_driver = {
|
||||
|
@ -345,8 +384,10 @@ static struct ofono_modem_driver phonesim_driver = {
|
|||
.remove = phonesim_remove,
|
||||
.enable = phonesim_enable,
|
||||
.disable = phonesim_disable,
|
||||
.set_online = phonesim_set_online,
|
||||
.pre_sim = phonesim_pre_sim,
|
||||
.post_sim = phonesim_post_sim
|
||||
.post_sim = phonesim_post_sim,
|
||||
.post_online = phonesim_post_online,
|
||||
};
|
||||
|
||||
static int phonesim_init(void)
|
||||
|
|
Loading…
Reference in New Issue