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

Reply via email to