From 1ca0c45409a3f0bd1c75b9201aca07644e11597b Mon Sep 17 00:00:00 2001 From: Steffen Ritter Date: Thu, 4 Nov 2010 14:23:32 +0100 Subject: added huawei control utility Signed-off-by: Steffen Ritter --- package/huawei/src/huawei.c | 95 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 package/huawei/src/huawei.c (limited to 'package/huawei/src') diff --git a/package/huawei/src/huawei.c b/package/huawei/src/huawei.c new file mode 100644 index 000000000..09c905085 --- /dev/null +++ b/package/huawei/src/huawei.c @@ -0,0 +1,95 @@ +/* HUAWEI 3G modems activator + Copyright (C) 2006 bobovsky bobovsky@kanoistika.sk GPL + Copyright (C) 2009 Nuno Goncalves nunojpg@gmail.com GPL + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License2. +*/ + +#include +#include +#include +#include +#include +#include +#include + +struct usb_dev_handle *devh; + +void release_usb_device(int dummy) { + int ret; + ret = usb_release_interface(devh, 0); + + if (!ret) + printf("failed to release interface: %d\n", ret); + + usb_close(devh); + + if (!ret) + printf("failed to close interface: %d\n", ret); + + exit(1); +} + +void list_devices() { + struct usb_bus *bus; + for (bus = usb_get_busses(); bus; bus = bus->next) { + struct usb_device *dev; + + for (dev = bus->devices; dev; dev = dev->next) + printf("0x%04x 0x%04x\n", dev->descriptor.idVendor, dev->descriptor.idProduct); + } +} + +struct usb_device *find_device() { + struct usb_bus *bus; + + for (bus = usb_get_busses(); bus; bus = bus->next) { + struct usb_device *dev; + + for (dev = bus->devices; dev; dev = dev->next) { + if (dev->descriptor.idVendor == 0x12d1 && dev->descriptor.idProduct == 0x1001 || //Huawei E169, Huawei E169G + dev->descriptor.idVendor == 0x12d1 && dev->descriptor.idProduct == 0x1003) //Huawei E220, Huawei E156G + return dev; + } + } + return NULL; +} + +int main(int argc, char **argv) { + int ret, vendor, product; + struct usb_device *dev; + char buf[65535], *endptr; + + usb_init(); + usb_find_busses(); + usb_find_devices(); + + printf("Searching modem..."); + dev = find_device(); + + if(dev == NULL){ + printf("No supported modem found\n"); + return 1; + } + + printf("found supported modem!\n"); + + assert(dev); + devh = usb_open(dev); + assert(devh); + + signal(SIGTERM, release_usb_device); + + ret = usb_get_descriptor(devh, 0x0000001, 0x0000000, buf, 0x0000012); + usleep(1*1000); + ret = usb_get_descriptor(devh, 0x0000002, 0x0000000, buf, 0x0000009); + usleep(1*1000); + ret = usb_get_descriptor(devh, 0x0000002, 0x0000000, buf, 0x0000020); + usleep(1*1000); + ret = usb_control_msg(devh, USB_TYPE_STANDARD + USB_RECIP_DEVICE, USB_REQ_SET_FEATURE, 00000001, 0, buf, 0, 1000); + + ret = usb_close(devh); + assert(ret == 0); + + printf("Modem poked!\n"); + return 0; +} -- cgit v1.2.3