Date: Fri, 14 Dec 2007 15:35:36 +1100 From: Edwin Groothuis <edwin@mavetju.org> To: freebsd-usb@freebsd.org Subject: Huawei E220 USB modem Message-ID: <20071214043536.GD54304@k7.mavetju>
next in thread | raw e-mail | index | archive | help
Hello, I'm the lucky owner of a Huawei E220 USB modem. For certain kinds of lucky that is. I've read up various mailinglists and see that NetBSD manages to get it working. I've done some tests on FreeBSD (mostly adding it to usbdevs and ubsa.c) and I get it working up to the same level of the people there: I get the disk on it as an umass device (that was a piece of cake), and I get it recognized but not loaded as an ucom device: usbd reports: usbd: processing event queue on /dev/usb usbd: device-attach event at 1197602138.124080000, HUAWEI Mobile, HUAWEI Technologies: vndr=0x12d1 prdct=0x1003 rlse=0x0000 clss=0x0000 subclss=0x0000 prtcl=0x0000 the kernel reports: ucom0: HUAWEI Technologies HUAWEI Mobile, rev 1.10/0.00, addr 2 ucom0: Could not find interrupt in device_attach: ucom0 attach returned 6 Going through the code of ubsa.c, that "interrupt in" missing is part of the information exchanged with the device. udesc_dump gives me: [~] root@vaio-edwin>udesc_dump /dev/ugen0 Standard Device Descriptor: bLength 18 bDescriptorType 01 bcdUSB 0110 bDeviceClass 00 bDeviceSubClass 00 bDeviceProtocol 00 bMaxPacketSize 64 idVendor 12d1 idProduct 1003 bcdDevice 0000 iManufacturer 1 iProduct 2 iSerialNumber 0 bNumConfigurations 1 Configuration 0: Standard Configuration Descriptor: bLength 9 bDescriptorType 02 wTotalLength 32 bNumInterface 1 bConfigurationValue 1 iConfiguration 0 bmAttributes a0 (remote-wakeup) bMaxPower 250 (500 mA) Standard Interface Descriptor: bLength 9 bDescriptorType 04 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 08 bInterfaceSubClass 06 bInterfaceProtocol 50 iInterface 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 83 (in) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 04 (out) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Codes Representing Languages by the Device: bLength 4 bDescriptorType 03 wLANGID[0] 0409 String (index 1): HUAWEI Technologies String (index 2): HUAWEI Mobile Yes, I see the bulk-in and the bulk-out, but not the interrupt-in. In /dev/ I see an ugen0.3 and ugen0.4, which I assume it related to the bulk-in and bulk-out. Could it be that it is reading the USB definitions of the first USB device on the modem, which is the umass device. Re-reading the whole thread on netbsd-current again (http://www.google.com/search?hl=en&domains=openbsd.org&q=huawei+e220+site%3Anetbsd.org&btnG=Search&sitesearch=) and seeing this line: > Indeed, it works (at least I can talk with the device). However, it > needs to be plugged two times (keeping the 'assistant power' link > connected): What does this mean? What does it say? What is assistant power? Anyway, I carefully pull out the cable from the modem itself, and when I see it disconnecting in the usbd (but the light on the modem is still on) I put it back in: Dec 14 15:14:36 vaio-edwin kernel: ucom0: at uhub1 port 1 (addr 2) disconnected Dec 14 15:14:57 vaio-edwin kernel: ucom0: HUAWEI Technologies HUAWEI Mobile, rev 1.10/0.00, addr 2 Without the dreaded "Couldn't find interrupt in" message. I suddenly have a /dev/cuaaU0, and minicom reports: OK ATI Manufacturer: huawei Model: E220 Revision: 11.117.06.00.100 IMEI: 358191018517800 +GCAP: +CGSM,+DS,+ES OK Something works! But what and where and how and who? Back to the basics: usbd reports: usbd: device-attach event at 1197606165.553779000, HUAWEI Mobile, HUAWEI Technologies: vndr=0x12d1 prdct=0x1003 rlse=0x0000 clss=0x0000 subclss=0x0000 prtcl=0x0000 device names: ugen0 === match attempt: ugen0 usbd: Found action 'USB device' for HUAWEI Mobile, HUAWEI Technologies at ugen0 usbd: action 0: USB device usbd: Setting DEVNAME='ugen0' the kernel reports: ugen0: HUAWEI Technologies HUAWEI Mobile, rev 1.10/0.00, addr 2 udesc_dump tells me: [/home/edwin] root@vaio-edwin>udesc_dump Standard Device Descriptor: bLength 18 bDescriptorType 01 bcdUSB 0110 bDeviceClass 00 bDeviceSubClass 00 bDeviceProtocol 00 bMaxPacketSize 64 idVendor 12d1 idProduct 1003 bcdDevice 0000 iManufacturer 1 iProduct 2 iSerialNumber 0 bNumConfigurations 1 Configuration 0: Standard Configuration Descriptor: bLength 9 bDescriptorType 02 wTotalLength 85 bNumInterface 3 bConfigurationValue 1 iConfiguration 0 bmAttributes a0 (remote-wakeup) bMaxPower 250 (500 mA) Standard Interface Descriptor: bLength 9 bDescriptorType 04 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass ff bInterfaceSubClass ff bInterfaceProtocol ff iInterface 3 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 81 (in) bmAttributes 03 (Interrupt) wMaxPacketSize 16 bInterval 128 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 82 (in) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 02 (out) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Interface Descriptor: bLength 9 bDescriptorType 04 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass ff bInterfaceSubClass ff bInterfaceProtocol ff iInterface 3 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 85 (in) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 05 (out) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Interface Descriptor: bLength 9 bDescriptorType 04 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 08 bInterfaceSubClass 06 bInterfaceProtocol 50 iInterface 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 83 (in) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Standard Endpoint Descriptor: bLength 7 bDescriptorType 05 bEndpointAddress 04 (out) bmAttributes 02 (Bulk) wMaxPacketSize 64 bInterval 0 Codes Representing Languages by the Device: bLength 4 bDescriptorType 03 wLANGID[0] 0409 String (index 1): HUAWEI Technologies String (index 2): HUAWEI Mobile String (index 3): Data Interface There is an interrupt-in! That will probably make usba.c happier. What did I change in usbdevs: [/sys/dev/usb] edwin@vaio-edwin>grep -A4 -B4 E220 usbdevs /* HP products */ product HP2 C500 0x6002 PhotoSmart C500 /* HUAWEI products */ product HUAWEI MOBILE 0x1001 Huawei Mobile + product HUAWEI E220 0x1003 Huawei E220 HSDPA USB Modem /* IBM Corporation */ product IBM USBCDROMDRIVE 0x4427 USB CD-ROM Drive And in ubda.c: [/sys/dev/usb] edwin@vaio-edwin>grep -A4 -B4 E220 ubsa.c { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G }, /* Option GlobeTrotter 3G QUAD */ { USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD }, /* Huawei Mobile */ { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE }, + { USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220 }, { 0, 0 } }; (Are people still reading this? Or did I lose you guys 200 lines ago?) I'm now going to see if I can get ppp to work with it, that will be more an issue for -questions if it doesn't work. Edwin -- Edwin Groothuis | Personal website: http://www.mavetju.org edwin@mavetju.org | Weblog: http://www.mavetju.org/weblog/
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071214043536.GD54304>