From bf562fd639b3cd06206f64e699b3206bc2e464d8 Mon Sep 17 00:00:00 2001 From: Zhenhua Zhang Date: Fri, 2 Jul 2010 11:04:34 +0800 Subject: [PATCH] huawei: Add Huawei EM770 modem support Huawei EM770W is a 3G WCDMA modem that supports HSPA/UMTS/EDGE/GPRS/GSM data service and WCDMA/GSM short message services. It also has voice call capability that supports both 2G and 3G network. --- plugins/huawei.c | 23 +++++++++++++++++++++++ plugins/ofono.rules | 4 ++++ plugins/udev.c | 8 ++++++++ 3 files changed, 35 insertions(+) diff --git a/plugins/huawei.c b/plugins/huawei.c index 7c8703e1..cfc693da 100644 --- a/plugins/huawei.c +++ b/plugins/huawei.c @@ -43,6 +43,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include #include #include @@ -326,12 +333,16 @@ static void huawei_pre_sim(struct ofono_modem *modem) ofono_devinfo_create(modem, 0, "atmodem", data->pcui); data->sim = ofono_sim_create(modem, 0, "atmodem", data->pcui); + + if (ofono_modem_get_boolean(modem, "HasVoice") == TRUE) + ofono_voicecall_create(modem, 0, "atmodem", data->pcui); } static void huawei_post_sim(struct ofono_modem *modem) { struct huawei_data *data = ofono_modem_get_data(modem); struct ofono_netreg *netreg; + struct ofono_message_waiting *mw; DBG("%p", modem); @@ -348,6 +359,18 @@ static void huawei_post_sim(struct ofono_modem *modem) if (data->gprs && data->gc) ofono_gprs_add_context(data->gprs, data->gc); + + if (ofono_modem_get_boolean(modem, "HasVoice") == TRUE) { + ofono_call_forwarding_create(modem, 0, "atmodem", data->pcui); + ofono_call_settings_create(modem, 0, "atmodem", data->pcui); + ofono_call_barring_create(modem, 0, "atmodem", data->pcui); + ofono_ssn_create(modem, 0, "atmodem", data->pcui); + ofono_phonebook_create(modem, 0, "atmodem", data->pcui); + + mw = ofono_message_waiting_create(modem); + if (mw) + ofono_message_waiting_register(mw); + } } static struct ofono_modem_driver huawei_driver = { diff --git a/plugins/ofono.rules b/plugins/ofono.rules index 06c5c8fa..826b0da8 100644 --- a/plugins/ofono.rules +++ b/plugins/ofono.rules @@ -24,6 +24,10 @@ ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1401", ENV{OFONO_IFACE_NUM}=="02", E ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1402", ENV{OFONO_IFACE_NUM}=="00", ENV{OFONO_HUAWEI_TYPE}="Modem" ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1402", ENV{OFONO_IFACE_NUM}=="02", ENV{OFONO_HUAWEI_TYPE}="Pcui" +ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1404", ENV{OFONO_IFACE_NUM}=="00", ENV{OFONO_HUAWEI_TYPE}="Modem" +ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1404", ENV{OFONO_IFACE_NUM}=="02", ENV{OFONO_HUAWEI_TYPE}="Pcui" +ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1404", ENV{OFONO_HUAWEI_VOICE}="1" + ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1405", ENV{OFONO_IFACE_NUM}=="03", ENV{OFONO_HUAWEI_TYPE}="Modem" ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1405", ENV{OFONO_IFACE_NUM}=="00", ENV{OFONO_HUAWEI_TYPE}="Pcui" diff --git a/plugins/udev.c b/plugins/udev.c index 09ee93ee..75f8b6c9 100644 --- a/plugins/udev.c +++ b/plugins/udev.c @@ -227,6 +227,14 @@ static void add_huawei(struct ofono_modem *modem, const char *name = udev_list_entry_get_name(entry); type = udev_list_entry_get_value(entry); + if (g_str_equal(name, "OFONO_HUAWEI_VOICE") == TRUE) { + gboolean value = g_str_equal(type, "1"); + + ofono_modem_set_boolean(modem, "HasVoice", value); + entry = udev_list_entry_get_next(entry); + continue; + } + if (g_str_equal(name, "OFONO_HUAWEI_TYPE") != TRUE) { entry = udev_list_entry_get_next(entry); continue;