Re: [PATCH] Add support of Huawei EM770 modem
Hi Yang, Comparing with general Huawei modem, EM770 is a full feature modem that supports voicecall, phonebook, call forwarding, call barring, etc. --- Makefile.am|3 + plugins/huawei-em770.c | 226 plugins/ofono.rules|1 + plugins/udev.c | 27 ++ 4 files changed, 257 insertions(+), 0 deletions(-) create mode 100644 plugins/huawei-em770.c for simplicity just let call it em770.c and everything where you have huawei_em770 just use em770. We do similar things for G1 etc. Regards Marcel ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
RE: [PATCH] Add support of Huawei EM770 modem
-Original Message- From: ofono-boun...@ofono.org [mailto:ofono-boun...@ofono.org] On Behalf Of Marcel Holtmann Sent: Tuesday, March 16, 2010 2:45 PM To: ofono@ofono.org Subject: Re: [PATCH] Add support of Huawei EM770 modem Hi Yang, Comparing with general Huawei modem, EM770 is a full feature modem that supports voicecall, phonebook, call forwarding, call barring, etc. --- Makefile.am|3 + plugins/huawei-em770.c | 226 plugins/ofono.rules|1 + plugins/udev.c | 27 ++ 4 files changed, 257 insertions(+), 0 deletions(-) create mode 100644 plugins/huawei-em770.c for simplicity just let call it em770.c and everything where you have huawei_em770 just use em770. We do similar things for G1 etc. I added the prefix huawei on purpose so that other users may not confuse about what kind of modem it belongs. Anyway, I will remove it soon. Regards Marcel ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
[PATCH] Add support of Huawei EM770 modem
Comparing with general Huawei modem, EM770 is a full feature modem that supports voicecall, phonebook, call forwarding, call barring, etc. --- Makefile.am |3 + plugins/em770.c | 226 +++ plugins/ofono.rules |1 + plugins/udev.c | 27 ++ 4 files changed, 257 insertions(+), 0 deletions(-) create mode 100644 plugins/em770.c diff --git a/Makefile.am b/Makefile.am index 93d4f67..eca8eee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -195,6 +195,9 @@ builtin_sources += plugins/hso.c builtin_modules += huawei builtin_sources += plugins/huawei.c +builtin_modules += em770 +builtin_sources += plugins/em770.c + builtin_modules += novatel builtin_sources += plugins/novatel.c diff --git a/plugins/em770.c b/plugins/em770.c new file mode 100644 index 000..a5d87f7 --- /dev/null +++ b/plugins/em770.c @@ -0,0 +1,226 @@ +/* + * + * oFono - Open Source Telephony + * + * Copyright (C) 2008-2010 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include config.h +#endif + +#include stdio.h +#include errno.h +#include stdlib.h + +#include glib.h +#include gatchat.h +#include gattty.h + +#define OFONO_API_SUBJECT_TO_CHANGE +#include ofono/plugin.h +#include ofono/log.h +#include ofono/modem.h +#include ofono/call-barring.h +#include ofono/call-forwarding.h +#include ofono/call-meter.h +#include ofono/call-settings.h +#include ofono/devinfo.h +#include ofono/message-waiting.h +#include ofono/netreg.h +#include ofono/phonebook.h +#include ofono/sim.h +#include ofono/sms.h +#include ofono/ssn.h +#include ofono/ussd.h +#include ofono/gprs.h +#include ofono/voicecall.h + +#include drivers/atmodem/vendor.h + +struct em770_data { + GAtChat *chat; +}; + +static int em770_probe(struct ofono_modem *modem) +{ + struct em770_data *data; + + DBG(%p, modem); + + data = g_try_new0(struct em770_data, 1); + if (!data) + return -ENOMEM; + + ofono_modem_set_data(modem, data); + + return 0; +} + +static void em770_remove(struct ofono_modem *modem) +{ + struct em770_data *data = ofono_modem_get_data(modem); + + DBG(%p, modem); + + ofono_modem_set_data(modem, NULL); + + g_at_chat_unref(data-chat); + g_free(data); +} + +static void em770_debug(const char *str, void *user_data) +{ + ofono_info(%s, str); +} + +static void cfun_enable(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + + DBG(); + + if (ok) + ofono_modem_set_powered(modem, TRUE); +} + +static int em770_enable(struct ofono_modem *modem) +{ + struct em770_data *data = ofono_modem_get_data(modem); + GAtSyntax *syntax; + GIOChannel *channel; + const char *device; + + DBG(%p, modem); + + device = ofono_modem_get_string(modem, Device); + if (!device) + return -EINVAL; + + channel = g_at_tty_open(device, NULL); + if (!channel) + return -EIO; + + syntax = g_at_syntax_new_gsmv1(); + data-chat = g_at_chat_new(channel, syntax); + g_at_syntax_unref(syntax); + g_io_channel_unref(channel); + + if (!data-chat) + return -EIO; + + g_at_chat_add_terminator(data-chat, COMMAND NOT SUPPORT, -1, FALSE); + g_at_chat_add_terminator(data-chat, TOO MANY PARAMETERS, -1, FALSE); + + if (getenv(OFONO_AT_DEBUG)) + g_at_chat_set_debug(data-chat, em770_debug, NULL); + + g_at_chat_send(data-chat, ATE0, NULL, NULL, NULL, NULL); + + g_at_chat_send(data-chat, AT+CFUN=1, NULL, + cfun_enable, modem, NULL); + + return 0; +} + +static void cfun_disable(gboolean ok, GAtResult *result, gpointer user_data) +{ + struct ofono_modem *modem = user_data; + struct em770_data *data = ofono_modem_get_data(modem); + + DBG(); + + g_at_chat_shutdown(data-chat); + g_at_chat_unref(data-chat); + data-chat = NULL; + + if (ok) + ofono_modem_set_powered(modem, FALSE); +} + +static int em770_disable(struct ofono_modem *modem) +{ + struct em770_data *data = ofono_modem_get_data(modem); + + DBG(%p, modem); + +
Re: [PATCH] Add support of Huawei EM770 modem
Hi Yang, Comparing with general Huawei modem, EM770 is a full feature modem that supports voicecall, phonebook, call forwarding, call barring, etc. --- Makefile.am |3 + plugins/em770.c | 226 +++ plugins/ofono.rules |1 + plugins/udev.c | 27 ++ 4 files changed, 257 insertions(+), 0 deletions(-) create mode 100644 plugins/em770.c patch has been applied. Thanks. Regards Marcel ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
[PATCH] Add support of Huawei EM770 modem
Hi, This is the updated patch to guarantee the correct port is used by using bInterfaceNumber attribute. Please review! Regards, -Yang 0001-Add-support-of-Huawei-EM770-modem.patch Description: 0001-Add-support-of-Huawei-EM770-modem.patch ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
Re: [PATCH] Add support of Huawei EM770 modem
On 11 February 2010 06:54, Gu, Yang yang...@intel.com wrote: In oFono code, device4 represents the modem, while device1 is the udev_device when calling function add_huawei_em770(modem, udev_device). When I check if it's ttyUSB2 or not in my code, I think I'm checking the device1 and its sysname (Showed as KERNEL in device1, but not the one showed in /dev directory), and in the context of this modem (device4). I do believe there may be some other ttyUSB2 in the system, for example, we have another em770 modem pluged in. But these two ttyUSB2 are in different context. I ever tried to change the name showed in /dev directory by writing some udev rules, but this sysname (KERNEL) seems stable (It's still ttyUSB2). Is it possible this sysname gets changed under some circumstance expect the kernel or driver changes? If not, I still think it's safe and convenient to check this value here. Honestly I don't know. But the whole /dev path may change between kernel versions, for example I believe ttyUSB was ttyU a long time ago (I'm not 100% sure). So in my opinion the safe way is to compare the bInetrfaceNumber and configuration of the parent devices to 02 and Huawei Configuration. Best regards ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
[PATCH] Add support of Huawei EM770 modem
Hi, This patch is to enable Huawei EM770 modem, which is a full feature modem that supports voicecall, phonebook, call forwarding, call barring, etc. There are two known parts of code that may have problem and need your comments. 1. Once connecting this modem to PC via USB, we can get 5 tty ports: ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 and ttyUSB4. The correct way to talk to this modem is using ttyUSB2. I'm not sure if I handled this correctly in file udev.c. 2. When creating the modem, a global modem id will be appended to the name of it while constructing the path. This modem has name huawei_em770, thus the path becomes things like /huawei_em7700 or /huawei_em7701. This looks strange. Need I change the name of this modem, or can we use some smarter way to append the modem id? There is also one known issue for this modem: The return of CSMS=? from this modem is not compatible with spec. This is deemed as a modem issue, so the sms wouldn't work before this hardware issue get solved. Comments are welcome! Regards, -Yang 0001-Add-support-of-Huawei-EM770-modem.patch Description: 0001-Add-support-of-Huawei-EM770-modem.patch ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
Re: [PATCH] Add support of Huawei EM770 modem
Hi Yang, There are two known parts of code that may have problem and need your comments. 1. Once connecting this modem to PC via USB, we can get 5 tty ports: ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 and ttyUSB4. The correct way to talk to this modem is using ttyUSB2. I'm not sure if I handled this correctly in file udev.c. 2. When creating the modem, a global modem id So Andrew had it exactly correct, you can't just use ttyUSB2 here. Most devices have other udev attributes you can examine for what type of port it is, to help you pick the right one. Perhaps examination of 'udevadm info -- attribute-walk --path=device' might be in order? will be appended to the name of it while constructing the path. This modem has name huawei_em770, thus the path becomes things like /huawei_em7700 or /huawei_em7701. This looks strange. Need I change the name of this modem, or can we use some smarter way to append the modem id? We should be using the udev short serial from the device. For some reason this seems to be failing on the EM770. Can you check whether get_serial returns NULL for this device? Regards, -Denis ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono
RE: [PATCH] Add support of Huawei EM770 modem
Hi, Andrew and Denis, -Original Message- From: ofono-boun...@ofono.org [mailto:ofono-boun...@ofono.org] On Behalf Of Denis Kenzior Sent: Thursday, February 11, 2010 6:38 AM To: ofono@ofono.org Subject: Re: [PATCH] Add support of Huawei EM770 modem Hi Yang, There are two known parts of code that may have problem and need your comments. 1. Once connecting this modem to PC via USB, we can get 5 tty ports: ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 and ttyUSB4. The correct way to talk to this modem is using ttyUSB2. I'm not sure if I handled this correctly in file udev.c. 2. When creating the modem, a global modem id So Andrew had it exactly correct, you can't just use ttyUSB2 here. Most devices have other udev attributes you can examine for what type of port it is, to help you pick the right one. Perhaps examination of 'udevadm info -- attribute-walk --path=device' might be in order? The check of ttyUSB2 in my code is not the same as you see in /dev directory. Below is the output of this modem along its path (not a full path and I removed some unimportant attributes in each path): looking at device '/devices/pci:00/:00:1a.7/usb1/1-3/1-3:1.2/ttyUSB2/tty/ttyUSB2': (device1) KERNEL==ttyUSB2 SUBSYSTEM==tty DRIVER== looking at parent device '/devices/pci:00/:00:1a.7/usb1/1-3/1-3:1.2/ttyUSB2': (device2) KERNELS==ttyUSB2 SUBSYSTEMS==usb-serial DRIVERS==option1 ATTRS{port_number}==0 looking at parent device '/devices/pci:00/:00:1a.7/usb1/1-3/1-3:1.2': (device3) KERNELS==1-3:1.2 SUBSYSTEMS==usb DRIVERS==option ATTRS{bInterfaceNumber}==02 ATTRS{modalias}==usb:v12D1p1404ddc00dsc00dp00icFFiscFFipFF ATTRS{supports_autosuspend}==0 looking at parent device '/devices/pci:00/:00:1a.7/usb1/1-3':(device4) KERNELS==1-3 ATTRS{configuration}==Huawei Configuration ATTRS{bNumInterfaces}== 5 ATTRS{idVendor}==12d1 ATTRS{idProduct}==1404 ATTRS{manufacturer}==HUAWEI Technology ATTRS{product}==HUAWEI Mobile In oFono code, device4 represents the modem, while device1 is the udev_device when calling function add_huawei_em770(modem, udev_device). When I check if it's ttyUSB2 or not in my code, I think I'm checking the device1 and its sysname (Showed as KERNEL in device1, but not the one showed in /dev directory), and in the context of this modem (device4). I do believe there may be some other ttyUSB2 in the system, for example, we have another em770 modem pluged in. But these two ttyUSB2 are in different context. I ever tried to change the name showed in /dev directory by writing some udev rules, but this sysname (KERNEL) seems stable (It's still ttyUSB2). Is it possible this sysname gets changed under some circumstance expect the kernel or driver changes? If not, I still think it's safe and convenient to check this value here. Maybe we can use another attribute bInterfaceNumber. But this attribute is udev_device's parent's parent (device3), so the code could become more complicated. What's your opinion? will be appended to the name of it while constructing the path. This modem has name huawei_em770, thus the path becomes things like /huawei_em7700 or /huawei_em7701. This looks strange. Need I change the name of this modem, or can we use some smarter way to append the modem id? We should be using the udev short serial from the device. For some reason this seems to be failing on the EM770. Can you check whether get_serial returns NULL for this device? Yes. get_serial() will return NULL, and we just use its type as name. Regards, -Denis ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono Regards, -Yang ___ ofono mailing list ofono@ofono.org http://lists.ofono.org/listinfo/ofono