phonesim: Support set_online/post_online

This commit is contained in:
Denis Kenzior 2010-08-12 14:56:18 -05:00
parent ad8607994f
commit 3b34dd44f1
1 changed files with 47 additions and 6 deletions

View File

@ -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)