Hi Zhenhua Zhang, > 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 | 31 ++++++++++++++++++++++++++++++- > plugins/ofono.rules | 3 +++ > plugins/udev.c | 3 +++ > 3 files changed, 36 insertions(+), 1 deletions(-) > > diff --git a/plugins/huawei.c b/plugins/huawei.c > index e2dfd1e..0dc6ae4 100644 > --- a/plugins/huawei.c > +++ b/plugins/huawei.c > @@ -43,13 +43,24 @@ > #include <ofono/gprs.h> > #include <ofono/gprs.h> > #include <ofono/gprs-context.h> > +#include <ofono/voicecall.h> > +#include <ofono/call-forwarding.h> > +#include <ofono/call-settings.h> > +#include <ofono/call-meter.h> > +#include <ofono/call-barring.h> > +#include <ofono/ssn.h> > +#include <ofono/phonebook.h> > +#include <ofono/message-waiting.h> > #include <ofono/log.h> > > #include <drivers/atmodem/atutil.h> > #include <drivers/atmodem/vendor.h> > > +#define HUAWEI_MODEL_EM770W "1404" > + > static const char *none_prefix[] = { NULL }; > static const char *sysinfo_prefix[] = { "^SYSINFO:", NULL }; > +static const char *model = ""; > > struct huawei_data { > GAtChat *modem; > @@ -205,8 +216,9 @@ static int huawei_enable(struct ofono_modem *modem) > > modem_device = ofono_modem_get_string(modem, "Modem"); > pcui_device = ofono_modem_get_string(modem, "Pcui"); > + model = ofono_modem_get_string(modem, "Model"); > > - if (modem_device == NULL || pcui_device == NULL) > + if (modem_device == NULL || pcui_device == NULL || model == NULL) > return -EINVAL; > > data->modem = create_port(modem_device); > @@ -288,6 +300,9 @@ 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 (g_str_equal(model, HUAWEI_MODEL_EM770W)) > + ofono_voicecall_create(modem, 0, "atmodem", data->pcui); > } > > static void huawei_post_sim(struct ofono_modem *modem) > @@ -296,6 +311,7 @@ static void huawei_post_sim(struct ofono_modem *modem) > struct ofono_gprs_context *gc; > struct ofono_netreg *netreg; > struct ofono_gprs *gprs; > + struct ofono_message_waiting *mw; > > DBG("%p", modem); > > @@ -312,6 +328,19 @@ static void huawei_post_sim(struct ofono_modem *modem) > > if (gprs && gc) > ofono_gprs_add_context(gprs, gc); > + > + if (g_str_equal(model, HUAWEI_MODEL_EM770W)) { > + ofono_call_forwarding_create(modem, 0, "atmodem", data->pcui); > + ofono_call_settings_create(modem, 0, "atmodem", data->pcui); > + ofono_call_meter_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 06c5c8f..3541833 100644 > --- a/plugins/ofono.rules > +++ b/plugins/ofono.rules > @@ -24,6 +24,9 @@ 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}=="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 09ee93e..7d34b0b 100644 > --- a/plugins/udev.c > +++ b/plugins/udev.c > @@ -227,6 +227,9 @@ 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, "ID_MODEL_ID") == TRUE) > + ofono_modem_set_string(modem, "Model", type); > +
so this is the part that I don't like. I prefer we have some udev rules that create OFONO_HUAWEI_VOICE=1 and we use that as indicator to enable voice capabilities or not. Regards Marcel _______________________________________________ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono