From: Marcel Holtmann Date: Sat, 7 Jan 2012 02:52:12 +0000 (-0800) Subject: hso: Enable voice call handling if support has been detected X-Git-Tag: 1.2~6 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1600d4fdcc89dc8008df9e80ff351ebd4bcb6603;p=platform%2Fupstream%2Fofono.git hso: Enable voice call handling if support has been detected Check if AT_OPCMENABLE is supported and if so, then enable the voice call handling as well. --- diff --git a/plugins/hso.c b/plugins/hso.c index ed1a4c1..30719a2 100644 --- a/plugins/hso.c +++ b/plugins/hso.c @@ -44,6 +44,7 @@ #include #include #include +#include #include #include @@ -52,6 +53,7 @@ static const char *none_prefix[] = { NULL }; static const char *opmn_prefix[] = { "_OPMN:", NULL }; static const char *obls_prefix[] = { "_OBLS:", NULL }; +static const char *opcm_prefix[] = { "_OPCMENABLE:", NULL }; struct hso_data { GAtChat *app; @@ -59,6 +61,7 @@ struct hso_data { guint sim_poll_source; guint sim_poll_count; ofono_bool_t have_sim; + ofono_bool_t have_voice; }; static int hso_probe(struct ofono_modem *modem) @@ -99,6 +102,48 @@ static void hso_debug(const char *str, void *user_data) ofono_info("%s%s", prefix, str); } +static void opcm_query(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct hso_data *data = ofono_modem_get_data(modem); + GAtResultIter iter; + + DBG(""); + + if (!ok) + return; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "_OPCMENABLE:")) + return; + + g_at_chat_send(data->app, "AT_OPCMENABLE=1", none_prefix, + NULL, NULL, NULL); +} + +static void opcm_support(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct hso_data *data = ofono_modem_get_data(modem); + GAtResultIter iter; + + DBG(""); + + if (!ok) + return; + + g_at_result_iter_init(&iter, result); + + if (!g_at_result_iter_next(&iter, "_OPCMENABLE:")) + return; + + data->have_voice = TRUE; + + g_at_chat_send(data->app, "AT_OPCMENABLE?", opcm_prefix, + opcm_query, modem, NULL); +} + static gboolean init_sim_check(gpointer user_data); static void sim_status(gboolean ok, GAtResult *result, gpointer user_data) @@ -185,6 +230,9 @@ static void sim_status(gboolean ok, GAtResult *result, gpointer user_data) */ g_at_chat_send(data->app, "AT_ODO?", none_prefix, NULL, NULL, NULL); g_at_chat_send(data->app, "AT_ODO=0", none_prefix, NULL, NULL, NULL); + + g_at_chat_send(data->app, "AT_OPCMENABLE=?", opcm_prefix, + opcm_support, modem, NULL); } static gboolean init_sim_check(gpointer user_data) @@ -376,7 +424,7 @@ static void hso_pre_sim(struct ofono_modem *modem) ofono_devinfo_create(modem, 0, "atmodem", data->control); sim = ofono_sim_create(modem, OFONO_VENDOR_OPTION_HSO, - "atmodem", data->control); + "atmodem", data->control); if (sim && data->have_sim == TRUE) ofono_sim_inserted_notify(sim, TRUE); @@ -388,6 +436,11 @@ static void hso_post_sim(struct ofono_modem *modem) DBG("%p", modem); + if (data->have_voice == TRUE) { + ofono_voicecall_create(modem, OFONO_VENDOR_QUALCOMM_MSM, + "atmodem", data->app); + } + ofono_phonebook_create(modem, 0, "atmodem", data->app); ofono_radio_settings_create(modem, 0, "hsomodem", data->app); @@ -403,12 +456,12 @@ static void hso_post_online(struct ofono_modem *modem) DBG("%p", modem); ofono_netreg_create(modem, OFONO_VENDOR_OPTION_HSO, - "atmodem", data->app); + "atmodem", data->app); ofono_cbs_create(modem, OFONO_VENDOR_QUALCOMM_MSM, - "atmodem", data->app); + "atmodem", data->app); ofono_ussd_create(modem, OFONO_VENDOR_QUALCOMM_MSM, - "atmodem", data->app); + "atmodem", data->app); gprs = ofono_gprs_create(modem, 0, "atmodem", data->app); gc = ofono_gprs_context_create(modem, 0, "hsomodem", data->control);