Hello community, here is the log from the commit of package usb_modeswitch for openSUSE:Factory checked in at 2016-03-02 14:19:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/usb_modeswitch (Old) and /work/SRC/openSUSE:Factory/.usb_modeswitch.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "usb_modeswitch" Changes: -------- --- /work/SRC/openSUSE:Factory/usb_modeswitch/usb_modeswitch.changes 2015-11-18 22:31:02.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.usb_modeswitch.new/usb_modeswitch.changes 2016-03-02 14:19:25.000000000 +0100 @@ -1,0 +2,17 @@ +Tue Feb 16 15:03:17 UTC 2016 - joerg.loren...@ki.tng.de + +- Update to version 2.3.0 + * ATTENTION: -I flag is now history and being ignored - determining + SCSI attributes is really an 'outside task'. + * -n flag (NeedResponse) is being ignored, CSW response will now + always be read. + * Introduction of parameter "OptionMode", wrapping the standard + bulk message for all newer Huawei devices. + * Fixed missing variable initialization in dispatcher script which + could lead to crash (thanks, Dmitry Kunilov!). + * Fixed bug which prevented early logging. + * Fixed success report for Cisco AM10. + * Some source code formatting and clean-up. +- Removed fix for bnc#899013, fixed upstream. + +------------------------------------------------------------------- Old: ---- usb-modeswitch-2.2.6.tar.bz2 usb-modeswitch-data-20151101.tar.bz2 New: ---- usb-modeswitch-2.3.0.tar.bz2 usb-modeswitch-data-20160112.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ usb_modeswitch.spec ++++++ --- /var/tmp/diff_new_pack.gErBHM/_old 2016-03-02 14:19:26.000000000 +0100 +++ /var/tmp/diff_new_pack.gErBHM/_new 2016-03-02 14:19:26.000000000 +0100 @@ -1,7 +1,7 @@ # # spec file for package usb_modeswitch # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,10 +17,10 @@ %define source_name usb-modeswitch -%define date 20151101 +%define date 20160112 %define _udevdir %(pkg-config --variable=udevdir udev) Name: usb_modeswitch -Version: 2.2.6 +Version: 2.3.0 Release: 0 Summary: A mode switching tool for controlling multiple-device USB gear License: GPL-2.0+ @@ -69,28 +69,6 @@ cd %{source_name}-data-%{date} make DESTDIR=%{buildroot} install %{?_smp_mflags} RULESDIR=%{buildroot}%{_udevdir}/rules.d -### TO REMOVE ONCE IN UPSTREAM DATA PACKAGE, FIX BNC 899013 ### - -cat > %{buildroot}/%{_datadir}/usb_modeswitch/12d1:1583 <<EOF -# Vodafone W5101 - -TargetVendor=0x12d1 -TargetProduct=0x1589 - -MessageContent="55534243123456780000000000000011062000000101000100000000000000" -EOF - -cat > %{buildroot}/%{_datadir}/usb_modeswitch/12d1:1582 <<EOF -# Vodafone R215 - -TargetVendor=0x12d1 -TargetProduct=0x1588 - -MessageContent="55534243123456780000000000000011062000000101000100000000000000" -EOF - -### END SECTION TO REMOVE ### - %fdupes -s %{buildroot} %files ++++++ usb-modeswitch-2.2.6.tar.bz2 -> usb-modeswitch-2.3.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/ChangeLog new/usb-modeswitch-2.3.0/ChangeLog --- old/usb-modeswitch-2.2.6/ChangeLog 2015-11-01 09:09:22.000000000 +0100 +++ new/usb-modeswitch-2.3.0/ChangeLog 2016-01-13 07:53:03.000000000 +0100 @@ -2,6 +2,15 @@ History of USB_ModeSwitch ========================= +Version 2.3.0, 2016/01/12 + ATTENTION: -I flag is now history and being ignored - determining SCSI + attributes is really an 'outside task'; -n flag (NeedResponse) is being + ignored, CSW response will now always be read; introduction of parameter + "OptionMode", wrapping the standard bulk message for all newer Huawei + devices; fixed missing variable initialization in dispatcher script which + could lead to crash (thanks, Dmitry Kunilov!); fixed bug which prevented + early logging; fixed success report for Cisco AM10; some source code + formatting and clean-up Version 2.2.6, 2015/11/01 Renamed function abort(), avoiding possible conflicts in static builds with libjim (thanks, Gustavo Zacharias); removed storage class check of diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/Makefile new/usb-modeswitch-2.3.0/Makefile --- old/usb-modeswitch-2.2.6/Makefile 2015-11-01 09:10:12.000000000 +0100 +++ new/usb-modeswitch-2.3.0/Makefile 2016-01-11 19:53:39.000000000 +0100 @@ -1,5 +1,5 @@ PROG = usb_modeswitch -VERS = 2.2.6 +VERS = 2.3.0 CC ?= gcc CFLAGS += -Wall LIBS = `pkg-config --libs --cflags libusb-1.0` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/dispatcher.c new/usb-modeswitch-2.3.0/dispatcher.c --- old/usb-modeswitch-2.2.6/dispatcher.c 2015-06-20 15:19:19.000000000 +0200 +++ new/usb-modeswitch-2.3.0/dispatcher.c 2016-01-12 23:02:41.000000000 +0100 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2015 Josua Dietze, usb_modeswitch version 2.2.2 + * Copyright (c) 2011-2016 Josua Dietze, usb_modeswitch version 2.3.0 * Contains code under * Copyright (c) 2010 Wojciech A. Koszek <wkos...@freebsd.org> * All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/usb_modeswitch.1 new/usb-modeswitch-2.3.0/usb_modeswitch.1 --- old/usb-modeswitch-2.2.6/usb_modeswitch.1 2015-06-27 00:12:45.000000000 +0200 +++ new/usb-modeswitch-2.3.0/usb_modeswitch.1 2016-01-12 23:07:49.000000000 +0100 @@ -77,19 +77,14 @@ After issuing all bulk messages, wait for NUM milliseconds before releasing the interface. Required for some modems on older systems (especially after an EJECT message) .IP "\fB-n\fP \fB\-\-need-response\fP " 10 -Read the response (command status wrapper) to a mass storage command -transfer. -Some devices have trouble switching if the response is not read; most -are disappearing right away. When sending multiple mass storage commands -with \fB\-2\fR and \fB\-3\fR, this may need to be set to avoid transfer errors +Obsolete. CSW is always attempted to being read after mass storage transfers. No downside .IP "\fB-r\fP \fB\-\-response-endpoint NUM\fP " 10 -Try to read the response to a storage command from there -if option \-n is active. Only for testing purposes; usually -endpoints are determined from the device attributes +Try to read the response to a storage command from there. Only for testing purposes; +usually endpoints are determined from the device attributes .IP "\fB-K\fP \fB\-\-std-eject\fP " 10 Apply the standard SCSI sequence of "Allow Medium Removal" and "Eject". Implies \fB-n\fP. One 'Message' can be added with \fB-M\fP -that will be transmitted after the eject sequence +that will be transmitted after the eject sequence. Used by many modems .IP "\fB-d\fP \fB\-\-detach-only\fP " 10 Just detach the current driver. This is sufficient for some early devices to switch successfully. Otherwise this feature can @@ -118,6 +113,8 @@ Value NUM will be used in control message as 'wValue' .IP "\fB-Z\fP \fB\-\-blackberry-mode\fP " 10 Send a special control message used by some newer Blackberry devices +.IP "\fB-S\fP \fB\-\-option-mode\fP " 10 +Send a special control message used by all Option devices .IP "\fB-O\fP \fB\-\-sony-mode\fP " 10 Apply a special sequence used by Sony Ericsson devices. Implies option \--check-success .IP "\fB-L\fP \fB\-\-cisco-mode\fP " 10 @@ -151,10 +148,8 @@ After switching, keep checking for the result up to max. NUM seconds. If target IDs or target class were provided, their appearance indicates certain success. Otherwise the disconnection of the original device is rated as likely proof -.IP "\fB-I\fP \fB\-\-no-inquire\fP " 10 -do not obtain SCSI attributes from device (default is on). For proper identification -of differing devices the attributes of the storage part provide valuable information. -This is not needed for devices that are known and supported +.IP "\fB-I\fP \fB\-\-inquire\fP " 10 +Obsolete. Formerly obtained SCSI attributes, now ignored .IP "\fB-i\fP \fB\-\-interface NUM\fP " 10 Select initial USB interface (default: 0). Only for testing purposes .IP "\fB-u\fP \fB\-\-configuration NUM\fP " 10 @@ -174,4 +169,4 @@ The complete text of the current GNU General Public License can be found in http://www.gnu.org/licenses/gpl.txt -.\" last edited 2014-05-29 for version 2.2.0 +.\" last edited 2016-01-11 for version 2.3.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/usb_modeswitch.c new/usb-modeswitch-2.3.0/usb_modeswitch.c --- old/usb-modeswitch-2.2.6/usb_modeswitch.c 2015-11-01 09:10:46.000000000 +0100 +++ new/usb-modeswitch-2.3.0/usb_modeswitch.c 2016-01-12 23:15:13.000000000 +0100 @@ -1,8 +1,8 @@ /* Mode switching tool for controlling mode of 'multi-state' USB devices - Version 2.2.6, 2015/11/01 + Version 2.3.0, 2016/01/12 - Copyright (C) 2007 - 2015 Josua Dietze (mail to "digidietze" at the domain + Copyright (C) 2007 - 2016 Josua Dietze (mail to "digidietze" at the domain of the home page; or write a personal message through the forum to "Josh". NO SUPPORT VIA E-MAIL - please use the forum for that) @@ -18,7 +18,7 @@ Created with initial help from: "usbsnoop2libusb.pl" by Timo Lindfors (http://iki.fi/lindi/usb/usbsnoop2libusb.pl) - Config file parsing stuff borrowed from: + Config file parsing code borrowed from: Guillaume Dargaud (http://www.gdargaud.net/Hack/SourceCode.html) Hexstr2bin function borrowed from: @@ -45,7 +45,7 @@ /* Recommended tab size: 4 */ -#define VERSION "2.2.5" +#define VERSION "2.3.0" #include <stdio.h> #include <stdlib.h> @@ -59,17 +59,17 @@ #include "usb_modeswitch.h" -/* libusb 1.0 wrappers, lazy leftover */ +// Little helpers -int usb_bulk_io(struct libusb_device_handle *handle, int ep, char *bytes, - int size, int timeout) +int usb_bulk_io(struct libusb_device_handle *handle, int ep, unsigned char *bytes, + int size, int timeout) { int actual_length; int r; // usbi_dbg("endpoint %x size %d timeout %d", ep, size, timeout); - r = libusb_bulk_transfer(handle, ep & 0xff, (unsigned char *)bytes, size, + r = libusb_bulk_transfer(handle, ep & 0xff, bytes, size, &actual_length, timeout); - + /* if we timed out but did transfer some data, report as successful short * read. FIXME: is this how libusb-0.1 works? */ if (r == 0 || (r == LIBUSB_ERROR_TIMEOUT && actual_length > 0)) @@ -78,15 +78,16 @@ return r; } -static int usb_interrupt_io(libusb_device_handle *handle, int ep, char *bytes, - int size, int timeout) + +static int usb_interrupt_io(libusb_device_handle *handle, int ep, unsigned char *bytes, + int size, int timeout) { int actual_length; int r; // usbi_dbg("endpoint %x size %d timeout %d", ep, size, timeout); - r = libusb_interrupt_transfer(handle, ep & 0xff, (unsigned char *)bytes, size, + r = libusb_interrupt_transfer(handle, ep & 0xff, bytes, size, &actual_length, timeout); - + /* if we timed out but did transfer some data, report as successful short * read. FIXME: is this how libusb-0.1 works? */ if (r == 0 || (r == LIBUSB_ERROR_TIMEOUT && actual_length > 0)) @@ -136,21 +137,21 @@ #define BLACKBERRY_MODE 0x00000800 #define PANTECH_MODE 0x00001000 #define HUAWEINEW_MODE 0x00002000 +#define OPTION_MODE 0x00004000 + int PantechMode=0; char verbose=0, show_progress=1, ResetUSB=0, CheckSuccess=0, config_read=0; -char NeedResponse=0, NoDriverLoading=0, InquireDevice=0, sysmode=0, mbim=0; +char NoDriverLoading=0, sysmode=0, mbim=0; char StandardEject=0; -char imanufact[DESCR_MAX], iproduct[DESCR_MAX], iserial[DESCR_MAX]; - char MessageContent[LINE_DIM]; char MessageContent2[LINE_DIM]; char MessageContent3[LINE_DIM]; char TargetProductList[LINE_DIM]; char DefaultProductList[5]; -char ByteString[LINE_DIM/2]; -char buffer[BUF_SIZE]; +unsigned char ByteString[LINE_DIM/2]; +unsigned char buffer[BUF_SIZE]; FILE *output; @@ -177,6 +178,7 @@ {"device-num", required_argument, 0, 'g'}, {"detach-only", no_argument, 0, 'd'}, {"huawei-mode", no_argument, 0, 'H'}, + {"huawei-new-mode", no_argument, 0, 'J'}, {"sierra-mode", no_argument, 0, 'S'}, {"sony-mode", no_argument, 0, 'O'}, {"qisda-mode", no_argument, 0, 'B'}, @@ -187,6 +189,7 @@ {"mobileaction-mode", no_argument, 0, 'A'}, {"cisco-mode", no_argument, 0, 'L'}, {"blackberry-mode", no_argument, 0, 'Z'}, + {"option-mode", no_argument, 0, 'U'}, {"pantech-mode", required_argument, 0, 'F'}, {"std-eject", no_argument, 0, 'K'}, {"need-response", no_argument, 0, 'n'}, @@ -227,6 +230,7 @@ ParseParamBoolMap(configFilename, CiscoMode, ModeMap, CISCO_MODE); ParseParamBoolMap(configFilename, QisdaMode, ModeMap, QISDA_MODE); ParseParamBoolMap(configFilename, QuantaMode, ModeMap, QUANTA_MODE); + ParseParamBoolMap(configFilename, OptionMode, ModeMap, OPTION_MODE); ParseParamBoolMap(configFilename, BlackberryMode, ModeMap, BLACKBERRY_MODE); ParseParamInt(configFilename, PantechMode); if (PantechMode) @@ -238,10 +242,8 @@ ParseParamString(configFilename, MessageContent2); ParseParamString(configFilename, MessageContent3); ParseParamInt(configFilename, ReleaseDelay); - ParseParamHex(configFilename, NeedResponse); ParseParamHex(configFilename, ResponseEndpoint); ParseParamHex(configFilename, ResetUSB); - ParseParamHex(configFilename, InquireDevice); ParseParamInt(configFilename, CheckSuccess); ParseParamHex(configFilename, Interface); ParseParamHex(configFilename, Configuration); @@ -260,17 +262,17 @@ void printConfig() { if ( DefaultVendor ) - fprintf (output,"DefaultVendor= 0x%04x\n", DefaultVendor); + fprintf (output,"DefaultVendor= 0x%04x\n", DefaultVendor); if ( DefaultProduct ) - fprintf (output,"DefaultProduct= 0x%04x\n", DefaultProduct); + fprintf (output,"DefaultProduct= 0x%04x\n", DefaultProduct); if ( TargetVendor ) - fprintf (output,"TargetVendor= 0x%04x\n", TargetVendor); + fprintf (output,"TargetVendor= 0x%04x\n", TargetVendor); if ( TargetProduct > -1 ) - fprintf (output,"TargetProduct= 0x%04x\n", TargetProduct); + fprintf (output,"TargetProduct= 0x%04x\n", TargetProduct); if ( TargetClass ) - fprintf (output,"TargetClass= 0x%02x\n", TargetClass); + fprintf (output,"TargetClass= 0x%02x\n", TargetClass); if ( strlen(TargetProductList) ) - fprintf (output,"TargetProductList=\"%s\"\n", TargetProductList); + fprintf (output,"TargetProductList=\"%s\"\n", TargetProductList); if (StandardEject) fprintf (output,"\nStandardEject=1\n"); if (ModeMap & DETACHONLY_MODE) @@ -299,6 +301,8 @@ fprintf (output,"CiscoMode=1\n"); if (ModeMap & BLACKBERRY_MODE) fprintf (output,"BlackberryMode=1\n"); + if (ModeMap & OPTION_MODE) + fprintf (output,"OptionMode=1\n"); if (ModeMap & PANTECH_MODE) fprintf (output,"PantechMode=1\n"); if ( MessageEndpoint ) @@ -309,7 +313,6 @@ fprintf (output,"MessageContent2=\"%s\"\n", MessageContent2); if ( strlen(MessageContent3) ) fprintf (output,"MessageContent3=\"%s\"\n", MessageContent3); - fprintf (output,"NeedResponse=%i\n", (int)NeedResponse); if ( ResponseEndpoint ) fprintf (output,"ResponseEndpoint=0x%02x\n", ResponseEndpoint); if ( Interface > -1 ) @@ -318,8 +321,6 @@ fprintf (output,"Configuration=0x%02x\n", Configuration); if ( AltSetting > -1 ) fprintf (output,"AltSetting=0x%02x\n", AltSetting); - if ( InquireDevice ) - fprintf (output,"\nInquireDevice=1\n"); if ( CheckSuccess ) fprintf (output,"Success check enabled, max. wait time %d seconds\n", CheckSuccess); if ( sysmode ) @@ -340,7 +341,7 @@ while (1) { - c = getopt_long (argc, argv, "hejWQDndKHJSOBEGTNALZF:RItv:p:V:P:C:m:M:2:3:w:r:c:i:u:a:s:f:b:g:", + c = getopt_long (argc, argv, "hejWQDndKHJSOBEGTNALZUF:RItv:p:V:P:C:m:M:2:3:w:r:c:i:u:a:s:f:b:g:", long_options, &option_index); /* Detect the end of the options. */ @@ -360,7 +361,7 @@ case '2': strncpy(MessageContent2, optarg, LINE_DIM); break; case '3': strncpy(MessageContent3, optarg, LINE_DIM); break; case 'w': ReleaseDelay = strtol(optarg, NULL, 10); break; - case 'n': NeedResponse = 1; break; + case 'n': break; case 'r': ResponseEndpoint = strtol(optarg, NULL, 16); break; case 'K': StandardEject = 1; break; case 'd': ModeMap = ModeMap + DETACHONLY_MODE; break; @@ -376,6 +377,7 @@ case 'A': ModeMap = ModeMap + MOBILEACTION_MODE; break; case 'L': ModeMap = ModeMap + CISCO_MODE; break; case 'Z': ModeMap = ModeMap + BLACKBERRY_MODE; break; + case 'U': ModeMap = ModeMap + OPTION_MODE; break; case 'F': ModeMap = ModeMap + PANTECH_MODE; PantechMode = strtol(optarg, NULL, 10); break; case 'c': readConfigFile(optarg); break; @@ -384,7 +386,7 @@ case 'Q': show_progress = 0; verbose = 0; count--; break; case 'D': sysmode = 1; count--; break; case 's': CheckSuccess = strtol(optarg, NULL, 10); count--; break; - case 'I': InquireDevice = 1; break; + case 'I': break; case 'b': busnum = strtol(optarg, NULL, 10); break; case 'g': devnum = strtol(optarg, NULL, 10); break; @@ -418,7 +420,6 @@ exit(1); } } - return count; } @@ -426,7 +427,7 @@ int main(int argc, char **argv) { int ret=0, numDefaults=0, sonySuccess=0; - int currentConfig=0, defaultClass=0, interfaceClass=0; + int currentConfigVal=0, defaultClass=0, interfaceClass=0; struct libusb_device_descriptor descriptor; enum libusb_error libusbError; @@ -474,7 +475,9 @@ exit(1); } if ( hexstr2bin(MessageContent, ByteString, strlen(MessageContent)/2) == -1) { - fprintf(stderr, "Error: MessageContent %s\n is not a hex string. Abort\n\n", MessageContent); + fprintf(stderr, "Error: MessageContent %s\n is not a hex string. Abort\n\n", + MessageContent); + exit(1); } } @@ -487,7 +490,9 @@ } if (show_progress) - if (CheckSuccess && !(TargetVendor || TargetProduct > -1 || TargetProductList[0] != '\0') && !TargetClass) + if (CheckSuccess && !(TargetVendor || TargetProduct > -1 || TargetProductList[0] != '\0') + && !TargetClass) + fprintf(output,"Note: No target parameter given; success check limited\n"); if (TargetProduct > -1 && TargetProductList[0] == '\0') { @@ -497,7 +502,8 @@ /* libusb initialization */ if ((libusbError = libusb_init(&ctx)) != LIBUSB_SUCCESS) { - fprintf(stderr, "Error: Failed to initialize libusb. %s (%d)\n\n", libusb_error_name(libusbError), libusbError); + fprintf(stderr, "Error: Failed to initialize libusb. %s (%d)\n\n", + libusb_error_name(libusbError), libusbError); exit(1); } @@ -512,7 +518,9 @@ /* Count existing target devices, remember for success check */ if (searchMode != SEARCH_BUSDEV && (TargetVendor || TargetClass)) { SHOW_PROGRESS(output,"Look for target devices ...\n"); - search_devices(&targetDeviceCount, TargetVendor, TargetProductList, TargetClass, 0, SEARCH_TARGET); + search_devices(&targetDeviceCount, TargetVendor, TargetProductList, TargetClass, 0, + SEARCH_TARGET); + if (targetDeviceCount) { SHOW_PROGRESS(output," Found devices in target mode or class (%d)\n", targetDeviceCount); } else @@ -523,7 +531,9 @@ SHOW_PROGRESS(output,"Look for default devices ...\n"); sprintf(DefaultProductList,"%04x",DefaultProduct); - dev = search_devices(&numDefaults, DefaultVendor, DefaultProductList, TargetClass, Configuration, searchMode); + dev = search_devices(&numDefaults, DefaultVendor, DefaultProductList, TargetClass, + Configuration, searchMode); + if (numDefaults) { SHOW_PROGRESS(output," Found devices in default mode (%d)\n", numDefaults); } else { @@ -531,6 +541,7 @@ close_all(); exit(0); } + if (dev == NULL) { SHOW_PROGRESS(output," No bus/device match. Is device connected? Abort\n\n"); close_all(); @@ -548,14 +559,14 @@ } } - - /* Get current configuration of default device if parameter is set */ - libusb_get_active_config_descriptor(dev, &active_config); + /* Get current configuration of default device, note value if Configuration + * parameter is set. Also sets active_config + */ + currentConfigVal = get_current_config_value(dev); if (Configuration > -1) { - currentConfig = active_config->bConfigurationValue; - SHOW_PROGRESS(output,"Current configuration number is %d\n", currentConfig); + SHOW_PROGRESS(output,"Current configuration number is %d\n", currentConfigVal); } else - currentConfig = 0; + currentConfigVal = 0; libusb_get_device_descriptor(dev, &descriptor); defaultClass = descriptor.bDeviceClass; @@ -567,7 +578,9 @@ interfaceClass = get_interface_class(); /* Check or get endpoints */ - if (strlen(MessageContent) || StandardEject || InquireDevice || ModeMap & CISCO_MODE || ModeMap & HUAWEINEW_MODE) { + if (strlen(MessageContent) || StandardEject || ModeMap & CISCO_MODE + || ModeMap & HUAWEINEW_MODE || ModeMap & OPTION_MODE) { + if (!MessageEndpoint) MessageEndpoint = find_first_bulk_endpoint(LIBUSB_ENDPOINT_OUT); if (!ResponseEndpoint) @@ -580,7 +593,9 @@ fprintf(stderr,"Error: response endpoint not given or found. Abort\n\n"); abortExit(); } - SHOW_PROGRESS(output,"Use endpoints 0x%02x (out) and 0x%02x (in)\n", MessageEndpoint, ResponseEndpoint); + SHOW_PROGRESS(output,"Use endpoints 0x%02x (out) and 0x%02x (in)\n", MessageEndpoint, + ResponseEndpoint); + } if (interfaceClass == -1) { @@ -591,7 +606,9 @@ if (defaultClass == 0) defaultClass = interfaceClass; else - if (interfaceClass == 8 && defaultClass != 8 && defaultClass != 0xef && defaultClass != 0xff) { + if (interfaceClass == LIBUSB_CLASS_MASS_STORAGE && defaultClass != LIBUSB_CLASS_MASS_STORAGE + && defaultClass != 0xef && defaultClass != LIBUSB_CLASS_VENDOR_SPEC) { + /* Unexpected default class combined with differing interface class */ SHOW_PROGRESS(output,"Bogus Class/InterfaceClass: 0x%02x/0x08\n", defaultClass); defaultClass = 8; @@ -604,24 +621,9 @@ abortExit(); } - if (InquireDevice && show_progress) { - if (defaultClass == 0x08) { - SHOW_PROGRESS(output,"Inquire device details; driver will be detached ...\n"); - detachDriver(); - if (deviceInquire() >= 0) - InquireDevice = 2; - } else - SHOW_PROGRESS(output,"Not a storage device, skip SCSI inquiry\n"); - } - - deviceDescription(); if (show_progress) { fprintf(output,"\nUSB description data (for identification)\n"); - fprintf(output,"-------------------------\n"); - fprintf(output,"Manufacturer: %s\n", imanufact); - fprintf(output," Product: %s\n", iproduct); - fprintf(output," Serial No.: %s\n", iserial); - fprintf(output,"-------------------------\n"); + deviceDescription(); } /* Special modes are exclusive, so check for illegal combinations. @@ -651,18 +653,16 @@ if (sysmode) { openlog("usb_modeswitch", 0, LOG_SYSLOG); - syslog(LOG_NOTICE, "switch device %04x:%04x on %03d/%03d", DefaultVendor, DefaultProduct, busnum, devnum); + syslog(LOG_NOTICE, "switch device %04x:%04x on %03d/%03d", DefaultVendor, DefaultProduct, + busnum, devnum); + } if (ModeMap & DETACHONLY_MODE) { SHOW_PROGRESS(output,"Detach storage driver as switching method ...\n"); - if (InquireDevice == 2) { - SHOW_PROGRESS(output," Any driver was already detached for inquiry. Do nothing\n"); - } else { - ret = detachDriver(); - if (ret == 2) - SHOW_PROGRESS(output," You may want to remove the storage driver manually\n"); - } + ret = detachDriver(); + if (ret == 2) + SHOW_PROGRESS(output," You may want to remove the storage driver manually\n"); } if(ModeMap & HUAWEI_MODE) { @@ -723,32 +723,35 @@ strcpy(MessageContent,"5553424387654321000000000000061e000000000000000000000000000000"); strcpy(MessageContent2,"5553424397654321000000000000061b000000020000000000000000000000"); - NeedResponse = 1; switchSendMessage(); } else if (ModeMap & HUAWEINEW_MODE) { SHOW_PROGRESS(output,"Using standard Huawei switching message\n"); detachDriver(); strcpy(MessageContent,"55534243123456780000000000000011062000000101000100000000000000"); - NeedResponse = 0; + switchSendMessage(); + } else if (ModeMap & OPTION_MODE) { + SHOW_PROGRESS(output,"Using standard Option switching message\n"); + detachDriver(); +// strcpy(MessageContent,"55534243123456780100000080000601000000000000000000000000000000"); + strcpy(MessageContent,"55534243123456780000000000000601000000000000000000000000000000"); switchSendMessage(); } else if (strlen(MessageContent)) { - if (InquireDevice != 2) - detachDriver(); + detachDriver(); switchSendMessage(); } if (Configuration > 0) { - if (currentConfig != Configuration) { + if (currentConfigVal != Configuration) { if (switchConfiguration()) { - currentConfig = get_current_configuration(dev); - if (currentConfig == Configuration) { + currentConfigVal = get_current_config_value(dev); + if (currentConfigVal == Configuration) { SHOW_PROGRESS(output,"The configuration was set successfully\n"); } else { SHOW_PROGRESS(output,"Changing the configuration has failed\n"); } } } else { - SHOW_PROGRESS(output,"Target configuration %d found. Do nothing\n", currentConfig); + SHOW_PROGRESS(output,"Target configuration %d found. Do nothing\n", currentConfigVal); } } @@ -811,6 +814,7 @@ /* Get descriptor strings if available (identification details) */ void deviceDescription () { + char imanufact[DESCR_MAX], iproduct[DESCR_MAX], iserial[DESCR_MAX]; int ret=0; char* c; memset (imanufact, ' ', DESCR_MAX); @@ -826,8 +830,10 @@ if (iManufacturer) { ret = libusb_get_string_descriptor_ascii(devh, iManufacturer, (unsigned char *)imanufact, DESCR_MAX); - if (ret < 0) + if (ret < 0) { fprintf(stderr, "Error: could not get description string \"manufacturer\"\n"); + strcpy(imanufact, "read error"); + } } else strcpy(imanufact, "not provided"); c = strstr(imanufact, " "); @@ -836,8 +842,10 @@ if (iProduct) { ret = libusb_get_string_descriptor_ascii(devh, iProduct, (unsigned char *)iproduct, DESCR_MAX); - if (ret < 0) + if (ret < 0) { fprintf(stderr, "Error: could not get description string \"product\"\n"); + strcpy(iproduct, "read error"); + } } else strcpy(iproduct, "not provided"); c = strstr(iproduct, " "); @@ -846,81 +854,20 @@ if (iSerialNumber) { ret = libusb_get_string_descriptor_ascii(devh, iSerialNumber, (unsigned char *)iserial, DESCR_MAX); - if (ret < 0) + if (ret < 0) { fprintf(stderr, "Error: could not get description string \"serial number\"\n"); + strcpy(iserial, "read error"); + } } else strcpy(iserial, "not provided"); c = strstr(iserial, " "); if (c) memset((void*)c, '\0', 1); - -} - -/* Print result of SCSI command INQUIRY (identification details) */ -int deviceInquire () -{ - const unsigned char inquire_msg[] = { - 0x55, 0x53, 0x42, 0x43, 0x12, 0x34, 0x56, 0x78, - 0x24, 0x00, 0x00, 0x00, 0x80, 0x00, 0x06, 0x12, - 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - }; - char *command; - char data[36]; - int i, ret=0; - - command = malloc(31); - if (command == NULL) { - ret = 1; - goto out; - } - - memcpy(command, inquire_msg, sizeof (inquire_msg)); - - ret = libusb_claim_interface(devh, Interface); - if (ret != 0) { - SHOW_PROGRESS(output," Could not claim interface (error %d). Skip device inquiry\n", ret); - goto out; - } - libusb_clear_halt(devh, MessageEndpoint); - - ret = usb_bulk_io(devh, MessageEndpoint, (char *)command, 31, 0); - if (ret < 0) { - SHOW_PROGRESS(output," INQUIRY message failed (error %d)\n", ret); - goto out; - } - - ret = usb_bulk_io(devh, ResponseEndpoint, data, 36, 0); - if (ret < 0) { - SHOW_PROGRESS(output," INQUIRY response failed (error %d)\n", ret); - goto out; - } - - i = usb_bulk_io(devh, ResponseEndpoint, command, 13, 0); - - fprintf(output,"\nSCSI inquiry data (for identification)\n"); fprintf(output,"-------------------------\n"); - - fprintf(output," Vendor String: "); - for (i = 8; i < 16; i++) printf("%c",data[i]); - fprintf(output,"\n"); - - fprintf(output," Model String: "); - for (i = 16; i < 32; i++) printf("%c",data[i]); - fprintf(output,"\n"); - - fprintf(output,"Revision String: "); - for (i = 32; i < 36; i++) printf("%c",data[i]); - - fprintf(output,"\n-------------------------\n"); - -out: - if (strlen(MessageContent) == 0) { - libusb_clear_halt(devh, MessageEndpoint); - libusb_release_interface(devh, Interface); - } - free(command); - return ret; + fprintf(output,"Manufacturer: %s\n", imanufact); + fprintf(output," Product: %s\n", iproduct); + fprintf(output," Serial No.: %s\n", iserial); + fprintf(output,"-------------------------\n"); } @@ -979,6 +926,7 @@ return 0; } + void resetUSB () { int success; @@ -1020,17 +968,11 @@ msg[1] = MessageContent2; msg[2] = MessageContent3; - /* May be activated in future versions */ -// if (MessageContent2[0] != '\0' || MessageContent3[0] != '\0') -// NeedResponse = 1; - SHOW_PROGRESS(output,"Set up interface %d\n", Interface); - if (InquireDevice != 2) { - ret = libusb_claim_interface(devh, Interface); - if (ret != 0) { - SHOW_PROGRESS(output," Could not claim interface (error %d). Skip message sending\n", ret); - return 0; - } + ret = libusb_claim_interface(devh, Interface); + if (ret != 0) { + SHOW_PROGRESS(output," Could not claim interface (error %d). Skip message sending\n", ret); + return 0; } libusb_clear_halt(devh, MessageEndpoint); SHOW_PROGRESS(output,"Use endpoint 0x%02x for message sending ...\n", MessageEndpoint); @@ -1042,21 +984,19 @@ continue; if ( sendMessage(msg[i], i+1) ) - goto skip; + goto skip; - if (NeedResponse) { - if ( strstr(msg[i],cmdHead) != NULL ) { - // UFI command - SHOW_PROGRESS(output,"Read the response to message %d (CSW) ...\n", i+1); - ret = read_bulk(ResponseEndpoint, ByteString, 13); - } else { - // Other bulk transfer - SHOW_PROGRESS(output,"Read the response to message %d ...\n", i+1); - ret = read_bulk(ResponseEndpoint, ByteString, strlen(msg[i])/2 ); - } - if (ret < 0) - goto skip; + if ( strstr(msg[i],cmdHead) != NULL ) { + // UFI command + SHOW_PROGRESS(output,"Read the response to message %d (CSW) ...\n", i+1); + ret = read_bulk(ResponseEndpoint, ByteString, 13); + } else { + // Other bulk transfer + SHOW_PROGRESS(output,"Read the response to message %d ...\n", i+1); + ret = read_bulk(ResponseEndpoint, ByteString, strlen(msg[i])/2 ); } + if (ret < 0) + goto skip; } SHOW_PROGRESS(output,"Reset response endpoint 0x%02x\n", ResponseEndpoint); @@ -1104,6 +1044,7 @@ } } + int switchAltSetting () { int ret; @@ -1127,8 +1068,9 @@ { int ret; SHOW_PROGRESS(output,"Send old Huawei control message ...\n"); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE, \ - LIBUSB_REQUEST_SET_FEATURE, 00000001, 0, (unsigned char *)buffer, 0, 1000); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_STANDARD | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT, + LIBUSB_REQUEST_SET_FEATURE, 00000001, 0, buffer, 0, 1000); + if (ret != 0) { fprintf(stderr, "Error: Huawei control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1140,7 +1082,8 @@ { int ret; SHOW_PROGRESS(output,"Send Sierra control message\n"); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR, 0x0b, 00000001, 0, (unsigned char *)buffer, 0, 1000); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT, + LIBUSB_REQUEST_SET_INTERFACE, 00000001, 0, buffer, 0, 1000); if (ret == LIBUSB_ERROR_PIPE) { SHOW_PROGRESS(output," communication with device stopped. May have switched modes anyway\n"); return; @@ -1160,13 +1103,19 @@ SHOW_PROGRESS(output," Could not claim interface (error %d). Skip GCT sequence\n", ret); return; } - SHOW_PROGRESS(output,"Send GCT control message 1 ...\n"); - ret = libusb_control_transfer(devh, 0xa1, 0xa0, 0, Interface, (unsigned char *)buffer, 1, 1000); + SHOW_PROGRESS(output,"Send GCT control message 1 ...\n type (should be 161/0xA1): %d", + LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN); + + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN, + 0xa0, 0, Interface, buffer, 1, 1000); + if (ret < 0) { SHOW_PROGRESS(output," GCT control message 1 failed (error %d), continue anyway ...\n", ret); } SHOW_PROGRESS(output,"Send GCT control message 2 ...\n"); - ret = libusb_control_transfer(devh, 0xa1, 0xfe, 0, Interface, (unsigned char *)buffer, 1, 1000); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_IN, + 0xfe, 0, Interface, buffer, 1, 1000); + if (ret < 0) { SHOW_PROGRESS(output," GCT control message 2 failed (error %d). Abort\n\n", ret); } @@ -1180,7 +1129,8 @@ int ret; SHOW_PROGRESS(output,"Send Kobil control message ...\n"); ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0x88, 0, 0, (unsigned char *)buffer, 8, 1000); + 0x88, 0, 0, buffer, 8, 1000); + if (ret < 0) { fprintf(stderr, "Error: Kobil control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1192,7 +1142,7 @@ int ret; SHOW_PROGRESS(output,"Sending Qisda control message ...\n"); memcpy(buffer, "\x05\x8c\x04\x08\xa0\xee\x20\x00\x5c\x01\x04\x08\x98\xcd\xea\xbf", 16); - ret = libusb_control_transfer(devh, 0x40, 0x04, 0, 0, (unsigned char *)buffer, 16, 1000); + ret = libusb_control_transfer(devh, 0x40, 0x04, 0, 0, buffer, 16, 1000); if (ret < 0) { fprintf(stderr, "Error: Qisda control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1204,7 +1154,8 @@ int ret; SHOW_PROGRESS(output,"Send Quanta control message ...\n"); ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0xff, 0, 0, (unsigned char *)buffer, 0, 1000); + 0xff, 0, 0, buffer, 0, 1000); + if (ret < 0) { SHOW_PROGRESS(output,"Error: Quanta control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1217,13 +1168,15 @@ int ret; SHOW_PROGRESS(output,"Send Blackberry control message 1 ...\n"); ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0xb1, 0x0000, 0, (unsigned char *)buffer, 8, 1000); + 0xb1, 0x0000, 0, buffer, 8, 1000); + if (ret != 8) { fprintf(stderr, "Error: Blackberry control message 1 failed (result %d)\n", ret); } SHOW_PROGRESS(output,"Send Blackberry control message 2 ...\n"); ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0xa9, 0x000e, 0, (unsigned char *)buffer, 2, 1000); + 0xa9, 0x000e, 0, buffer, 2, 1000); + if (ret != 2) { fprintf(stderr, "Error: Blackberry control message 2 failed (result %d). Abort\n\n", ret); exit(0); @@ -1235,7 +1188,9 @@ { int ret; SHOW_PROGRESS(output,"Send Pantech control message, wValue %d ...\n", PantechMode); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, 0x70, PantechMode, 0, (unsigned char *)buffer, 0, 1000); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT, + 0x70, PantechMode, 0, buffer, 0, 1000); + if (ret < 0) { SHOW_PROGRESS(output," Error: Pantech control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1250,9 +1205,8 @@ #define MOBILE_ACTION_READLOOP1 63 #define MOBILE_ACTION_READLOOP2 73 -/* If anyone can test the MobileAction cable - I bet this - * function (which is confirmed working) can be greatly - * simplified ... +/* The code here is statically derived from sniffing (and confirmed working). + * However I bet it could be simplified significantly. */ void switchActionMode () @@ -1260,9 +1214,13 @@ int ret, i; SHOW_PROGRESS(output,"Send MobileAction control sequence ...\n"); memcpy(buffer, "\xb0\x04\x00\x00\x02\x90\x26\x86", SIZE); - libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS + LIBUSB_RECIPIENT_INTERFACE, 0x09, 0x0300, 0, (unsigned char *)buffer, SIZE, 1000); + libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT, + 0x09, 0x0300, 0, buffer, SIZE, 1000); + memcpy(buffer, "\xb0\x04\x00\x00\x02\x90\x26\x86", SIZE); - libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS + LIBUSB_RECIPIENT_INTERFACE, 0x09, 0x0300, 0, (unsigned char *)buffer, SIZE, 1000); + libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS | LIBUSB_RECIPIENT_INTERFACE | LIBUSB_ENDPOINT_OUT, + 0x09, 0x0300, 0, buffer, SIZE, 1000); + usb_interrupt_io(devh, EP_IN, buffer, SIZE, 1000); usb_interrupt_io(devh, EP_IN, buffer, SIZE, 1000); memcpy(buffer, "\x37\x01\xfe\xdb\xc1\x33\x1f\x83", SIZE); @@ -1308,19 +1266,24 @@ #define SQN_MASS_STORAGE_MODE 0x01 #define SQN_CUSTOM_DEVICE_MODE 0x02 -void switchSequansMode() { +void switchSequansMode() +{ int ret; SHOW_PROGRESS(output,"Send Sequans control message\n"); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, SQN_SET_DEVICE_MODE_REQUEST, SQN_CUSTOM_DEVICE_MODE, 0, (unsigned char *)buffer, 0, 1000); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_OUT, + SQN_SET_DEVICE_MODE_REQUEST, SQN_CUSTOM_DEVICE_MODE, 0, buffer, 0, 1000); + if (ret < 0) { fprintf(stderr, "Error: Sequans request failed (error %d). Abort\n\n", ret); exit(0); } } -void switchCiscoMode() { - int ret, i; + +void switchCiscoMode() +{ + int ret, i, j; char* msg[11]; msg[0] = "55534243f83bcd810002000080000afd000000030000000100000000000000"; @@ -1352,20 +1315,21 @@ if ( sendMessage(msg[i], i+1) ) goto skip; - SHOW_PROGRESS(output," Read the response (CSW) to bulk message %d ...\n",i+1); - ret = read_bulk(ResponseEndpoint, ByteString, 13); - if (ret < 0) - goto skip; - if (ret < 13) { - SHOW_PROGRESS(output," Repeat reading the response to bulk message %d ...\n",i+1); - ret = read_bulk(ResponseEndpoint, ByteString, 13); - } - if (ret < 13) { - SHOW_PROGRESS(output," Repeat reading the response to bulk message %d ...\n",i+1); + for (j=1; j<4; j++) { + + SHOW_PROGRESS(output," Read the CSW for bulk message %d (attempt %d) ...\n",i+1,j); ret = read_bulk(ResponseEndpoint, ByteString, 13); + + if (ret < 0) + goto skip; + if (ret == 13) + break; } } + libusb_clear_halt(devh, MessageEndpoint); + libusb_clear_halt(devh, ResponseEndpoint); +ReleaseDelay = 2000; if (ReleaseDelay) { SHOW_PROGRESS(output,"Wait for %d ms before releasing interface ...\n", ReleaseDelay); usleep(ReleaseDelay*1000); @@ -1392,7 +1356,9 @@ } SHOW_PROGRESS(output,"Send Sony control message\n"); - ret = libusb_control_transfer(devh, 0xc0, 0x11, 2, 0, (unsigned char *)buffer, 3, 100); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, + 0x11, 2, 0, buffer, 3, 100); + if (ret < 0) { fprintf(stderr, "Error: Sony control message failed (error %d). Abort\n\n", ret); exit(0); @@ -1435,7 +1401,9 @@ sleep(1); SHOW_PROGRESS(output,"Send Sony control message again ...\n"); - ret = libusb_control_transfer(devh, 0xc0, 0x11, 2, 0, (unsigned char *)buffer, 3, 100); + ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, + 0x11, 2, 0, buffer, 3, 100); + if (ret < 0) { fprintf(stderr, "Error: Sony control message (2) failed (error %d)\n", ret); return 0; @@ -1451,9 +1419,6 @@ { int ret; - // Driver already detached during SCSI inquiry ? - if (InquireDevice == 2) - return 1; SHOW_PROGRESS(output,"Looking for active driver ...\n"); ret = libusb_kernel_driver_active(devh, 0); if (ret == LIBUSB_ERROR_NOT_SUPPORTED) { @@ -1492,7 +1457,9 @@ } message_length = strlen(message) / 2; if ( hexstr2bin(message, ByteString, message_length) == -1) { - fprintf(stderr, "Error: MessageContent %d %s\n is not a hex string. Skipping ...\n", count, MessageContent); + fprintf(stderr, "Error: MessageContent %d %s\n is not a hex string. Skipping ...\n", + count, MessageContent); + return 1; } SHOW_PROGRESS(output,"Trying to send message %d to endpoint 0x%02x ...\n", count, MessageEndpoint); @@ -1549,7 +1516,8 @@ break; } if (i == CheckSuccess-1) { - SHOW_PROGRESS(output," Original device still present after the timeout\n\nMode switch most likely failed. Bye!\n\n"); + SHOW_PROGRESS(output," Original device still present after the timeout\n\n" + "Mode switch most likely failed. Bye!\n\n"); } else sleep(1); } @@ -1562,29 +1530,29 @@ */ for (i=i; i < CheckSuccess; i++) { SHOW_PROGRESS(output," Search for target devices ...\n"); - dev = search_devices(&newTargetCount, TargetVendor, TargetProductList, TargetClass, 0, SEARCH_TARGET); + dev = search_devices(&newTargetCount, TargetVendor, TargetProductList, TargetClass, + 0, SEARCH_TARGET); + if (dev && (newTargetCount > targetDeviceCount)) { - fprintf(output,"\nFound target device, open it\n"); - libusb_open(dev, &devh); - deviceDescription(); - libusb_close(devh); - devh = NULL; if (verbose) { - fprintf(output,"\nFound target device %03d on bus %03d\n", \ - libusb_get_device_address(dev), libusb_get_bus_number(dev)); + libusb_open(dev, &devh); + fprintf(output,"\nFound target device %03d on bus %03d\n", + libusb_get_device_address(dev), libusb_get_bus_number(dev)); + fprintf(output,"\nTarget device description data\n"); - fprintf(output,"-------------------------\n"); - fprintf(output,"Manufacturer: %s\n", imanufact); - fprintf(output," Product: %s\n", iproduct); - fprintf(output," Serial No.: %s\n", iserial); - fprintf(output,"-------------------------\n"); + deviceDescription(); + libusb_close(devh); + devh = NULL; } - SHOW_PROGRESS(output," Found correct target device\n\nMode switch succeeded. Bye!\n\n"); + SHOW_PROGRESS(output," Found correct target device\n\n" + "Mode switch succeeded. Bye!\n\n"); + success = 2; break; } if (i == CheckSuccess-1) { - SHOW_PROGRESS(output," No new devices in target mode or class found\n\nMode switch has failed. Bye!\n\n"); + SHOW_PROGRESS(output," No new devices in target mode or class found\n\n" + "Mode switch has failed. Bye!\n\n"); } else sleep(1); } @@ -1592,7 +1560,8 @@ /* No target data given, rely on the vanished device */ if (!devh) { SHOW_PROGRESS(output," (For a better success check provide target IDs or class)\n"); - SHOW_PROGRESS(output," Original device vanished after switching\n\nMode switch most likely succeeded. Bye!\n\n"); + SHOW_PROGRESS(output," Original device vanished after switching\n\n" + "Mode switch most likely succeeded. Bye!\n\n"); success = 1; } @@ -1605,7 +1574,9 @@ break; case 2: if (sysmode) - syslog(LOG_NOTICE, "switched to %04x:%04x on %03d/%03d", TargetVendor, TargetProduct, busnum, devnum); + syslog(LOG_NOTICE, "switched to %04x:%04x on %03d/%03d", TargetVendor, + TargetProduct, busnum, devnum); + success = 1; break; case 1: @@ -1622,7 +1593,7 @@ } -int write_bulk(int endpoint, char *message, int length) +int write_bulk(int endpoint, unsigned char *message, int length) { int ret = usb_bulk_io(devh, endpoint, message, length, 3000); if (ret >= 0 ) { @@ -1636,7 +1607,8 @@ } -int read_bulk(int endpoint, char *buffer, int length) + +int read_bulk(int endpoint, unsigned char *buffer, int length) { int ret = usb_bulk_io(devh, endpoint, buffer, length, 3000); if (ret >= 0 ) { @@ -1650,7 +1622,9 @@ } -void release_usb_device(int __attribute__((unused)) dummy) { + +void release_usb_device(int __attribute__((unused)) dummy) +{ SHOW_PROGRESS(output,"Program cancelled by system. Bye!\n\n"); if (devh) libusb_release_interface(devh, Interface); @@ -1663,9 +1637,11 @@ /* Iterates over busses and devices, counts the ones which match the given * parameters and returns the last one of them */ -struct libusb_device* search_devices( int *numFound, int vendor, char* productList, int targetClass, int configuration, int mode) +struct libusb_device* search_devices( int *numFound, int vendor, char* productList, + int targetClass, int configuration, int mode) { - char *listcopy=NULL, *token, buffer[2]; + char *listcopy=NULL, *token; + unsigned char buffer[2]; int devClass, product; struct libusb_device* right_dev = NULL; // struct libusb_device_handle *testdevh; @@ -1714,11 +1690,15 @@ token = strtok(listcopy, ","); while (token != NULL) { if (strlen(token) != 4) { - SHOW_PROGRESS(output,"Error: entry in product ID list has wrong length: %s. Ignored\n", token); + SHOW_PROGRESS(output,"Error: entry in product ID list has wrong length: %s. " + "Ignored\n", token); + goto NextToken; } if ( hexstr2bin(token, buffer, strlen(token)/2) == -1) { - SHOW_PROGRESS(output,"Error: entry in product ID list is not a hex string: %s. Ignored\n", token); + SHOW_PROGRESS(output,"Error: entry in product ID list is not a hex string: %s. " + "Ignored\n", token); + goto NextToken; } product = 0; @@ -1766,10 +1746,12 @@ } } else if (configuration > 0) { // Configuration parameter is set, check device configuration - int testconfig = get_current_configuration(dev); + int testconfig = get_current_config_value(dev); if (testconfig != configuration) { if (verbose) - fprintf (output," device configuration %d not matching target\n", testconfig); + fprintf (output," device configuration %d not matching target\n", + testconfig); + (*numFound)++; right_dev = dev; if (verbose) @@ -1796,9 +1778,6 @@ } -#define USB_DIR_OUT 0x00 -#define USB_DIR_IN 0x80 - /* Autodetect bulk endpoints (ab) */ int find_first_bulk_endpoint(int direction) @@ -1810,10 +1789,11 @@ for (j=0; j < active_config->bNumInterfaces; j++) { alt = &(active_config->interface[j].altsetting[0]); if (alt->bInterfaceNumber == Interface) { - for(i=0; i < alt->bNumEndpoints; i++) { - ep=&(alt->endpoint[i]); - if( ( (ep->bmAttributes & LIBUSB_ENDPOINT_ADDRESS_MASK) == LIBUSB_TRANSFER_TYPE_BULK) && - ( (ep->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) == direction ) ) { + for (i=0; i < alt->bNumEndpoints; i++) { + ep = &(alt->endpoint[i]); + if ( ( (ep->bmAttributes & LIBUSB_ENDPOINT_ADDRESS_MASK) == LIBUSB_TRANSFER_TYPE_BULK) + && ( (ep->bEndpointAddress & LIBUSB_ENDPOINT_DIR_MASK) == direction ) ) { + return ep->bEndpointAddress; } } @@ -1822,7 +1802,8 @@ return 0; } -int get_current_configuration() + +int get_current_config_value() { SHOW_PROGRESS(output,"Get the current device configuration ...\n"); if (active_config != NULL) { @@ -1837,6 +1818,7 @@ return active_config->bConfigurationValue; } + int get_interface_class() { int i; @@ -1847,6 +1829,7 @@ return -1; } + /* Parameter parsing */ char* ReadParseParam(const char* FileName, char *VariableName) @@ -1923,7 +1906,9 @@ LastQuote=strrchr (Equal, '"'); if (FirstQuote!=NULL) { if (LastQuote==NULL) { - fprintf(stderr, "Error reading parameters from file %s - Missing end quote:\n%s\n", FileName, Str); + fprintf(stderr, "Error reading parameters from file %s - " + "Missing end quote:\n%s\n", FileName, Str); + goto Next; } *FirstQuote=*LastQuote='\0'; @@ -1933,7 +1918,9 @@ // removes leading/trailing spaces Pos=strspn (Str, " \t"); if (Pos==strlen(Str)) { - fprintf(stderr, "Error reading parameters from file %s - Missing variable name:\n%s\n", FileName, Str); + fprintf(stderr, "Error reading parameters from file %s - " + "Missing variable name:\n%s\n", FileName, Str); + goto Next; } while ((P1=strrchr(Str, ' '))!=NULL or (P2=strrchr(Str, '\t'))!=NULL) @@ -1943,7 +1930,9 @@ Pos=strspn (Equal, " \t"); if (Pos==strlen(Equal)) { - fprintf(stderr, "Error reading parameter from file %s - Missing value:\n%s\n", FileName, Str); + fprintf(stderr, "Error reading parameter from file %s - " + "Missing value:\n%s\n", FileName, Str); + goto Next; } Equal+=Pos; @@ -1983,23 +1972,25 @@ return (a << 4) | b; } -int hexstr2bin(const char *hex, char *buffer, int len) + +int hexstr2bin(const char *hex, unsigned char *buffer, int len) { int i; int a; const char *ipos = hex; - char *opos = buffer; + unsigned char *opos = buffer; for (i = 0; i < len; i++) { a = hex2byte(ipos); if (a < 0) return -1; - *opos++ = a; + *opos++ = (unsigned char) a; ipos += 2; } return 0; } + void close_all() { if (active_config) @@ -2014,6 +2005,7 @@ closelog(); } + void abortExit() { close_all(); @@ -2030,6 +2022,7 @@ " ! PLEASE REPORT NEW CONFIGURATIONS !\n\n", version); } + void printHelp() { fprintf(output,"\nUsage: usb_modeswitch [<params>] [-c filename]\n\n" @@ -2046,7 +2039,8 @@ " -m, --message-endpoint NUM direct the message transfer there (optional)\n" " -M, --message-content <msg> message to send (hex number as string)\n" " -2 <msg>, -3 <msg> additional messages to send (-n recommended)\n" - " -n, --need-response read response to the message transfer (CSW)\n" + " -w, --release-delay NUM wait NUM ms before releasing the interface\n" + " -n, --need-response obsolete, no effect (always on)\n" " -r, --response-endpoint NUM read response from there (optional)\n" " -K, --std-eject send standard EJECT sequence\n" " -d, --detach-only detach the active driver, no further action\n" @@ -2062,12 +2056,14 @@ " -B, --qisda-mode apply a special procedure\n" " -E, --quanta-mode apply a special procedure\n" " -F, --pantech-mode NUM apply a special procedure, pass NUM through\n" + " -Z, --blackberry-mode apply a special procedure\n" + " -U, --option-mode apply a special procedure\n" " -R, --reset-usb reset the device after all other actions\n" " -Q, --quiet don't show progress or error messages\n" " -W, --verbose print all settings and debug output\n" " -D, --sysmode specific result and syslog message\n" " -s, --success <seconds> switching result check with timeout\n" - " -I, --inquire retrieve SCSI attributes initially\n\n" + " -I, --inquire obsolete, no effect\n\n" " -c, --config-file <filename> load long configuration from file\n\n" " -t, --stdinput read long configuration from stdin\n\n" " -f, --long-config <text> get long configuration from string\n\n" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/usb_modeswitch.h new/usb-modeswitch-2.3.0/usb_modeswitch.h --- old/usb-modeswitch-2.2.6/usb_modeswitch.h 2015-11-01 08:53:34.000000000 +0100 +++ new/usb-modeswitch-2.3.0/usb_modeswitch.h 2016-01-12 23:03:12.000000000 +0100 @@ -2,8 +2,8 @@ This file is part of usb_modeswitch, a mode switching tool for controlling the mode of 'multi-state' USB devices - Version 2.2.6, 2015/11/01 - Copyright (C) 2007 - 2015 Josua Dietze + Version 2.3.0, 2016/01/12 + Copyright (C) 2007 - 2016 Josua Dietze Config file parsing stuff borrowed from Guillaume Dargaud (http://www.gdargaud.net/Hack/SourceCode.html) @@ -46,25 +46,24 @@ int detachDriver(); int checkSuccess(); int sendMessage(char* message, int count); -int write_bulk(int endpoint, char *message, int length); -int read_bulk(int endpoint, char *buffer, int length); +int write_bulk(int endpoint, unsigned char *message, int length); +int read_bulk(int endpoint, unsigned char *buffer, int length); void release_usb_device(int dummy); struct libusb_device* search_devices( int *numFound, int vendor, char* productList, int targetClass, int configuration, int mode); int find_first_bulk_endpoint(int direction); -int get_current_configuration(); +int get_current_config_value(); int get_interface_class(); char* ReadParseParam(const char* FileName, char *VariableName); int hex2num(char c); int hex2byte(const char *hex); -int hexstr2bin(const char *hex, char *buffer, int len); +int hexstr2bin(const char *hex, unsigned char *buffer, int len); void printVersion(); void printHelp(); void close_all(); void abortExit(); int readArguments(int argc, char **argv); void deviceDescription(); -int deviceInquire(); void resetUSB(); void release_usb_device(int dummy); int findMBIMConfig(int vendor, int product, int mode); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/usb_modeswitch.sh new/usb-modeswitch-2.3.0/usb_modeswitch.sh --- old/usb-modeswitch-2.2.6/usb_modeswitch.sh 2015-11-01 09:11:07.000000000 +0100 +++ new/usb-modeswitch-2.3.0/usb_modeswitch.sh 2016-01-11 20:18:57.000000000 +0100 @@ -1,5 +1,5 @@ #!/bin/sh -# part of usb_modeswitch 2.2.6 +# part of usb_modeswitch 2.3.0 device_in() { if [ ! -e /var/lib/usb_modeswitch/$1 ]; then diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.2.6/usb_modeswitch.tcl new/usb-modeswitch-2.3.0/usb_modeswitch.tcl --- old/usb-modeswitch-2.2.6/usb_modeswitch.tcl 2015-11-01 09:11:22.000000000 +0100 +++ new/usb-modeswitch-2.3.0/usb_modeswitch.tcl 2016-01-12 22:48:53.000000000 +0100 @@ -9,8 +9,8 @@ # the mode switching program with the matching parameter # file from /usr/share/usb_modeswitch # -# Part of usb-modeswitch-2.2.6 package -# (C) Josua Dietze 2009-2015 +# Part of usb-modeswitch-2.3.0 package +# (C) Josua Dietze 2009-2016 set arg0 [lindex $argv 0] if [regexp {\.tcl$} $arg0] { @@ -28,6 +28,8 @@ set flags(noswitching) 0 set flags(stordelay) 0 set flags(logwrite) 0 +# also settable in device config files +set flags(nombim) 0 # Execution starts at file bottom @@ -129,14 +131,14 @@ set iface 0 Log "Check class of first interface ..." -set config(class) [IfClass 0] +set config(class) [IfClass 0 $devdir] if {$config(class) < 0} { Log " No access to interface 0. Exit" SafeExit } Log " Interface 0 class is $config(class)." -set ifdir [file tail [IfDir $iface]] +set ifdir [file tail [IfDir $iface $devdir]] regexp {:([0-9]+\.[0-9]+)$} $ifdir d iface set flags(logwrite) 1 @@ -241,7 +243,7 @@ Log "Check config: $mconfig" if [MatchDevice $mconfig] { Log "! matched. Read config data" - set flags(config) $mconfig +# set flags(config) $mconfig if [string length $usb(busnum)] { set busParam "-b [string trimleft $usb(busnum) 0]" set devParam "-g [string trimleft $usb(devnum) 0]" @@ -346,7 +348,7 @@ # Checking for bound drivers if there is an interface with class 0xff if {$config(DriverModule) != "" && [regexp {ok:} $report]} { - if [HasFF] { + if [HasFF $devdir] { AddToList link_list $usb(idVendor):$usb(idProduct) } else { set config(DriverModule) "" @@ -715,7 +717,7 @@ proc {SafeExit} {} { global flags -set $flags(logwrite) 1 +set flags(logwrite) 1 Log "" exit @@ -978,8 +980,12 @@ proc {CheckSuccess} {devdir} { global config usb flags -set ifdir [file tail [IfDir 0]] +# For Cisco AM10, target device not on same port +if {$usb(idVendor) == "1307" && $usb(idProduct) == "1169"} { + set devdir [string range $devdir 0 end-1]2 +} +set ifdir [file tail [IfDir 0 $devdir]] if {[string length $config(TargetClass)] || [string length $config(Configuration)]} { set config(TargetVendor) $usb(idVendor) set config(TargetProduct) $usb(idProduct) @@ -995,7 +1001,7 @@ } else { Log " Read attributes ..." } - set ifdir [IfDir 0] + set ifdir [IfDir 0 $devdir] if {$ifdir == ""} {continue} set ifdir [file tail $ifdir] if {![ReadUSBAttrs $devdir $ifdir]} { @@ -1041,9 +1047,8 @@ # end of proc {CheckSuccess} -proc {IfDir} {iface} { +proc {IfDir} {iface devdir} { -global devdir set allfiles [glob -nocomplain $devdir/*] set files [glob -nocomplain $devdir/*.$iface] if {[llength $files] == 0} { @@ -1058,9 +1063,9 @@ } # end of proc {IfDir} -proc {IfClass} {iface} { +proc {IfClass} {iface devdir} { -set ifdir [IfDir $iface] +set ifdir [IfDir $iface $devdir] if {![file exists $ifdir/bInterfaceClass]} { return -1 @@ -1179,10 +1184,10 @@ } -proc {HasFF} {} { +proc {HasFF} {devdir} { set i 0 -while {[set dir [IfDir $i]] != ""} { +while {[set dir [IfDir $i $devdir]] != ""} { set c [exec cat $dir/bInterfaceClass] if {$c == "ff"} {return 1} incr i ++++++ usb-modeswitch-data-20151101.tar.bz2 -> usb-modeswitch-data-20160112.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/40-usb_modeswitch.rules new/usb-modeswitch-data-20160112/40-usb_modeswitch.rules --- old/usb-modeswitch-data-20151101/40-usb_modeswitch.rules 2015-11-01 16:20:08.000000000 +0100 +++ new/usb-modeswitch-data-20160112/40-usb_modeswitch.rules 2016-01-12 21:31:06.000000000 +0100 @@ -1,4 +1,4 @@ -# Part of usb-modeswitch-data, version 20151101 +# Part of usb-modeswitch-data, version 20160112 # # Works with usb_modeswitch versions >= 2.2.2 (extension of PantechMode) # @@ -116,7 +116,7 @@ # Axesstel Modems (w/ initial idProduct 0x0010) ATTR{idVendor}=="05c6", ATTR{idProduct}=="0010", RUN+="usb_modeswitch '%b/%k'" -# Prolink P2000 CDMA, Samsung SGH-Z810, older Option devices, Vertex Wireless 100 Series, AnyDATA devices, Bless UC165, Celot K-300, Celot CT-680, StrongRising device, TechFaith Venus VT-18 +# Prolink P2000 CDMA, Samsung SGH-Z810, older Option devices, Vertex Wireless 100 Series, AnyDATA devices, Bless UC165, Option GlobeTrotter GX0201, Celot K-300, Celot CT-680, StrongRising device, TechFaith Venus VT-18 ATTR{idVendor}=="05c6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '%b/%k'" # Various USB modems @@ -149,12 +149,18 @@ # D-Link DWM-156 HSUPA 3.75G USB Modem ATTR{idVendor}=="07d1", ATTR{idProduct}=="a804", RUN+="usb_modeswitch '%b/%k'" +# D-Link DWM-151 A1 +ATTR{idVendor}=="07d1", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '%b/%k'" + # Dymo LabelManager ATTR{idVendor}=="0922", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '%b/%k'" # Dymo LabelManager 420P ATTR{idVendor}=="0922", ATTR{idProduct}=="1003", RUN+="usb_modeswitch '%b/%k'" +# Dymo LabelManager Wireless PnP +ATTR{idVendor}=="0922", ATTR{idProduct}=="1007", RUN+="usb_modeswitch '%b/%k'" + # Toshiba G450 ATTR{idVendor}=="0930", ATTR{idProduct}=="0d46", RUN+="usb_modeswitch '%b/%k'" @@ -464,6 +470,36 @@ # Sierra devices (specific driver) ATTR{idVendor}=="1199", ATTR{idProduct}=="0fff", RUN+="usb_modeswitch '%b/%k'" +# Sierra MC8305 +ATTR{idVendor}=="1199", ATTR{idProduct}=="9011", RUN+="usb_modeswitch '%b/%k'" + +# Sierra MC8355 +ATTR{idVendor}=="1199", ATTR{idProduct}=="9013", RUN+="usb_modeswitch '%b/%k'" + +# Sierra MC8355 Variant +ATTR{idVendor}=="1199", ATTR{idProduct}=="9017", RUN+="usb_modeswitch '%b/%k'" + +# Sierra MC7770 +ATTR{idVendor}=="1199", ATTR{idProduct}=="901b", RUN+="usb_modeswitch '%b/%k'" + +# Sierra EM7700 +ATTR{idVendor}=="1199", ATTR{idProduct}=="901c", RUN+="usb_modeswitch '%b/%k'" + +# Sierra EM7355 +ATTR{idVendor}=="1199", ATTR{idProduct}=="901f", RUN+="usb_modeswitch '%b/%k'" + +# Sierra EM7305 +ATTR{idVendor}=="1199", ATTR{idProduct}=="9041", RUN+="usb_modeswitch '%b/%k'" + +# Sierra AC340U +ATTR{idVendor}=="1199", ATTR{idProduct}=="9051", RUN+="usb_modeswitch '%b/%k'" + +# Sierra AC770S +ATTR{idVendor}=="1199", ATTR{idProduct}=="9053", RUN+="usb_modeswitch '%b/%k'" + +# Sierra EM7305 +ATTR{idVendor}=="1199", ATTR{idProduct}=="9063", RUN+="usb_modeswitch '%b/%k'" + # Digicom 8E4455 (and all Pirelli devices - EXPERIMENTAL) ATTR{idVendor}=="1266", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '%b/%k'" @@ -503,9 +539,6 @@ # Novatel U620L ATTR{idVendor}=="1410", ATTR{idProduct}=="9020", RUN+="usb_modeswitch '%b/%k'" -# Novatel U620L -ATTR{idVendor}=="1410", ATTR{idProduct}=="9022", RUN+="usb_modeswitch '%b/%k'" - # Sequans SQN1210/SQN1220 (generic chipsets) ATTR{idVendor}=="148e", ATTR{idProduct}=="a000", RUN+="usb_modeswitch '%b/%k'" @@ -716,7 +749,10 @@ # ZTE MF710M Variants ATTR{idVendor}=="19d2", ATTR{idProduct}=="1588", RUN+="usb_modeswitch '%b/%k'" -# ZTE devices +# ZTE MF710 (Vietnam) +ATTR{idVendor}=="19d2", ATTR{idProduct}=="1595", RUN+="usb_modeswitch '%b/%k'" + +# ZTE devices, some Onda devices ATTR{idVendor}=="19d2", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '%b/%k'" # ZTE MF60 @@ -794,6 +830,9 @@ # Telewell TW-3G HSPA+, FS01BU 3G, SmartBro WM66E ATTR{idVendor}=="1c9e", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '%b/%k'" +# XS Stick W100 (Omega) +ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9bfe", RUN+="usb_modeswitch '%b/%k'" + # Prolink PCM100 ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9d00", RUN+="usb_modeswitch '%b/%k'" @@ -839,6 +878,9 @@ # Onda MV815U ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '%b/%k'" +# Onda POM1051 +ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0007", RUN+="usb_modeswitch '%b/%k'" + # Onda MW833UP ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0009", RUN+="usb_modeswitch '%b/%k'" @@ -854,6 +896,9 @@ # Onda MDC655 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0045", RUN+="usb_modeswitch '%b/%k'" +# Onda MT655 +ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0048", RUN+="usb_modeswitch '%b/%k'" + # Onda MDC655 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="004a", RUN+="usb_modeswitch '%b/%k'" @@ -866,7 +911,7 @@ # Onda MSA 14.4 (TIM Brasil) ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0060", RUN+="usb_modeswitch '%b/%k'" -# Onda TM201 14.4 (TIM Italy) +# Onda TM201, CM201 ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0063", RUN+="usb_modeswitch '%b/%k'" # Onda WM301 @@ -938,6 +983,9 @@ # Telenet 3G dongle (T&W WU160) and others ATTR{idVendor}=="2077", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '%b/%k'" +# BM WM78 +ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00a", RUN+="usb_modeswitch '%b/%k'" + # Intex 3.5G ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '%b/%k'" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/ChangeLog new/usb-modeswitch-data-20160112/ChangeLog --- old/usb-modeswitch-data-20151101/ChangeLog 2015-11-01 16:18:34.000000000 +0100 +++ new/usb-modeswitch-data-20160112/ChangeLog 2016-01-12 21:45:22.000000000 +0100 @@ -1,3 +1,18 @@ +20160112: + ATTENTION: requires usb-modeswitch version >= 2.3.0 due to new para- + meter OptionMode (further reducing config file space demand); + Added devices: D-Link DWM-151 A1 [07d1:f000], Dymo LabelManager Wireless + PnP [0922:1007], Sierra MC8305 [1199:9011], Sierra MC8355 [1199:9013], + Sierra MC8355 Variant [1199:9017], Sierra MC7770 [1199:901b], Sierra + EM7700 [1199:901c], Sierra EM7355 [1199:901f], Sierra EM7305 [1199:9041], + Sierra AC340U [1199:9051], Sierra AC770S [1199:9053], Sierra EM7305 + [1199:9063], ZTE MF710 (Vietnam) [19d2:1595], XS Stick W100 (Omega) + [1c9e:9bfe], Onda POM1051 [1ee8:0007], Onda MT655 [1ee8:0048], BM WM78 + [20a6:f00a]; Corrected: Quanta MU-Q101 [0408:1000], Huawei U7510 / U7517 + [12d1:101e], Novatel U620L [1410:9020], D-Link DWM-221 B1 [2001:a401]; + Removed: [1410:9022] which was just one of the modes of [1410:9020]; + some new target IDs added to existing device configs; all Option configs + updated with new parameter 20151101: Added devices: Huawei ME909u-521 [12d1:1573], Huawei E327s-150 (Variant) [12d1:1597], Huawei E3531s-2, E3131 (Variant) [12d1:15ce], Huawei E3131 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/Makefile new/usb-modeswitch-data-20160112/Makefile --- old/usb-modeswitch-data-20151101/Makefile 2015-11-01 10:29:27.000000000 +0100 +++ new/usb-modeswitch-data-20160112/Makefile 2016-01-12 21:34:25.000000000 +0100 @@ -1,5 +1,5 @@ PROG = usb-modeswitch-data -VERS = 20151101 +VERS = 20160112 RM = /bin/rm -f PREFIX = $(DESTDIR)/usr ETCDIR = $(DESTDIR)/etc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/README new/usb-modeswitch-data-20160112/README --- old/usb-modeswitch-data-20151101/README 2015-06-27 22:58:13.000000000 +0200 +++ new/usb-modeswitch-data-20160112/README 2016-01-13 08:12:16.000000000 +0100 @@ -1,11 +1,16 @@ README for USB_ModeSwitch Data +Almost all new and corrected device configurations since around 2012 +were collected and compiled by Lars Melin. Thank you! -For up-to-date and detailed information (plus a friendly forum) visit -http://www.draisberghof.de/usb_modeswitch +Without a well-maintained base of configuration info, usb_modeswitch +would just be a useless blob of code. So: PLEASE REPORT NEW DEVICES ! +For up-to-date and detailed information (plus a friendly forum) visit +http://www.draisberghof.de/usb_modeswitch + This is a data package to complement the full release package of @@ -144,4 +149,4 @@ -Last revised: 2015-06-27, Josua Dietze +Last revised: 2016-01-12, Josua Dietze diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/REFERENCE new/usb-modeswitch-data-20160112/REFERENCE --- old/usb-modeswitch-data-20151101/REFERENCE 2015-06-27 23:56:10.000000000 +0200 +++ new/usb-modeswitch-data-20160112/REFERENCE 2016-01-12 21:54:12.000000000 +0100 @@ -1,7 +1,7 @@ Configuration File Reference for USB_ModeSwitch ----------------------------------------------- -Last modified: 2015-06-27 +Last modified: 2016-01-12 @@ -113,6 +113,11 @@ message; use MessageContent for these +* OptionMode <0/1> -U + +The standard for all devices by Option. Sends a specific bulk message + + * SonyMode <0/1> -O Some Sony-Ericsson devices can be switched by a special control @@ -179,9 +184,8 @@ * InquireDevice <0|1> -I (enables inquiry) -Prints out SCSI device attributes in addition to USB device attributes. -These may be used later to tell apart ambiguous device IDs. Only needed -for creating new configurations +Formerly printed out SCSI device attributes. Obsolete and ignored since +version 2.3.0. * CheckSuccess -s <number> @@ -214,3 +218,8 @@ Disable the check for devices providing the MBIM standard; this check is otherwise done by default. See /etc/usb_modeswitch.conf from the program package for a global setting regarding this. +The usb_modeswitch wrapper will test if a device has a configuration +according to the MBIM standard. If so, it will search for the matching +kernel driver. It it's available, the device will be configured for +MBIM usage which is preferable to other modes and configurations + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/gen-rules.tcl new/usb-modeswitch-data-20160112/gen-rules.tcl --- old/usb-modeswitch-data-20151101/gen-rules.tcl 2015-11-01 16:23:05.000000000 +0100 +++ new/usb-modeswitch-data-20160112/gen-rules.tcl 2016-01-12 21:34:07.000000000 +0100 @@ -4,12 +4,14 @@ # # <date> should be in the form YYYYMMDD # +# Config files are expected to be in subfolder "usb_modeswitch.d" +# # A config file is expected to have one comment line containing # a model name or other concise device specifications # Default version string -set version "20151101" +set version "20160112" # Devices excluded from Huawei catch-all rule set x_huaweiList {12d1:1573} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0408:1000 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0408:1000 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0408:1000 2015-01-14 23:39:14.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0408:1000 2016-01-12 20:19:50.000000000 +0100 @@ -1,4 +1,4 @@ # Quanta MU-Q101 TargetVendor=0x0408 TargetProduct=0xea02 -Message="5553424338474ffc0002000000000a2a000000003300000100000000000000" +MessageContent="55534243123456780002000000000a2a000000003300000100000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:sVe=GT new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:sVe=GT --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:sVe=GT 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:sVe=GT 2016-01-11 20:57:00.000000000 +0100 @@ -1,5 +1,4 @@ # Option GlobeTrotter GX0201 TargetVendor=0x0af0 TargetProduct=0x6701 -MessageContent="55534243123456780000000000000601000000000000000000000000000000" -NeedResponse=1 +OptionMode=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:sVe=Option new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:sVe=Option --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:sVe=Option 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:sVe=Option 2016-01-11 20:57:00.000000000 +0100 @@ -1,5 +1,4 @@ # Older Option devices TargetVendor= 0x0af0 TargetProductList="6901,6701,6600" -MessageContent="55534243123456780000000000000601000000000000000000000000000000" -NeedResponse=1 +OptionMode=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:uMa=Option new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:uMa=Option --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/05c6:1000:uMa=Option 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:1000:uMa=Option 2016-01-11 20:57:00.000000000 +0100 @@ -1,5 +1,4 @@ # Quirky Option devices TargetVendor=0x0af0 TargetProduct=0x6901 -MessageContent="55534243123456780000000000000601000000000000000000000000000000" -NeedResponse=1 +OptionMode=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/07d1:f000 new/usb-modeswitch-data-20160112/usb_modeswitch.d/07d1:f000 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/07d1:f000 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/07d1:f000 2016-01-12 20:42:32.000000000 +0100 @@ -0,0 +1,4 @@ +# D-Link DWM-151 A1 +TargetVendor=0x07d1 +TargetProduct=0x7e07 +MessageContent="555342431234567800000000000006bd000000020000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0922:1007 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0922:1007 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0922:1007 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0922:1007 2016-01-12 20:56:12.000000000 +0100 @@ -0,0 +1,5 @@ +# Dymo LabelManager Wireless PnP +TargetVendor= 0x0922 +TargetProduct= 0x1008 +MessageContent="1b5a01" +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6711 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6711 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6711 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6711 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6731 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6731 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6731 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6731 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6751 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6751 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6751 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6751 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6771 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6771 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6771 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6771 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6791 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6791 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6791 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6791 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6811 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6811 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6811 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6811 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6911 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6911 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6911 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6911 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6951 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6951 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6951 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6951 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6971 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6971 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:6971 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:6971 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7011 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7011 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7011 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7011 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7031 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7031 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7031 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7031 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7051 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7051 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7051 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7051 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7071 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7071 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7071 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7071 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7111 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7111 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7111 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7111 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7211 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7211 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7211 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7211 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7251 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7251 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7251 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7251 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7271 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7271 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7271 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7271 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7301 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7301 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7301 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7301 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7311 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7311 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7311 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7311 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7361 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7361 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7361 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7361 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7381 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7381 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7381 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7381 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7401 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7401 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7401 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7401 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7501 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7501 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7501 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7501 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7601 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7601 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7601 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7601 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7701 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7701 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7701 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7701 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7706 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7706 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7706 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7706 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7801 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7801 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7801 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7801 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7901 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7901 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7901 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7901 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7a01 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7a01 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7a01 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7a01 2016-01-11 20:52:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243123456780000000000000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7a05 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7a05 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:7a05 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:7a05 2016-01-11 20:52:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option iCon 461 TargetClass=0xff -MessageContent="55534243123456780000000000000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8006 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8006 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8006 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8006 2016-01-11 20:51:00.000000000 +0100 @@ -1,5 +1,5 @@ # Option Globetrotter (Variant) TargetVendor=0x0af0 TargetProduct=0x9100 -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8200 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8200 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8200 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8200 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8201 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8201 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8201 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8201 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8300 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8300 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8300 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8300 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8302 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8302 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8302 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8302 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8304 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8304 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8304 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8304 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8400 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8400 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8400 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8400 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8600 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8600 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8600 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8600 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8700 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8700 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8700 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8700 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option GI0643 (aka XYFI) TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8800 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8800 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8800 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8800 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8900 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8900 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:8900 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:8900 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:9000 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:9000 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:9000 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:9000 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:9200 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:9200 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:9200 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:9200 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:c031 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:c031 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:c031 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:c031 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:c100 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:c100 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:c100 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:c100 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d001 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d001 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d001 2014-03-26 20:49:48.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d001 2016-01-11 20:52:00.000000000 +0100 @@ -1,6 +1,5 @@ # Option GlobeTrotter GI1515 TargetVendor=0x0af0 TargetProductList="d157,d255,d257" -Interface=0x01 -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d013 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d013 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d013 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d013 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d031 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d031 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d031 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d031 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d033 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d033 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d033 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d033 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d035 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d035 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d035 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d035 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d055 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d055 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d055 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d055 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d057 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d057 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d057 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d057 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d058 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d058 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d058 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d058 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d155 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d155 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d155 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d155 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d157 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d157 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d157 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d157 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d255 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d255 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d255 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d255 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d257 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d257 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d257 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d257 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d357 new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d357 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/0af0:d357 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/0af0:d357 2016-01-11 20:51:00.000000000 +0100 @@ -1,4 +1,4 @@ # Option HSO device TargetClass=0xff -MessageContent="55534243785634120100000080000601000000000000000000000000000000" +OptionMode=1 NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9011 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9011 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9011 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9011 2016-01-12 20:57:47.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra MC8305 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9013 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9013 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9013 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9013 2016-01-12 20:59:46.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra MC8355 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9017 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9017 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9017 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9017 2016-01-12 21:00:10.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra MC8355 Variant +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901b new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901b --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901b 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901b 2016-01-12 21:05:08.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra MC7770 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901c new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901c --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901c 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901c 2016-01-12 21:05:33.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra EM7700 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901f new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901f --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:901f 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:901f 2016-01-12 21:06:03.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra EM7355 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9041 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9041 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9041 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9041 2016-01-12 21:15:25.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra EM7305 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9051 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9051 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9051 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9051 2016-01-12 21:15:46.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra AC340U +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9053 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9053 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9053 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9053 2016-01-12 21:16:06.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra AC770S +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9063 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9063 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1199:9063 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1199:9063 2016-01-12 21:16:23.000000000 +0100 @@ -0,0 +1,3 @@ +# Sierra EM7305 +Configuration=1 +NoDriverLoading=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/12d1:101e new/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:101e --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/12d1:101e 2015-01-14 21:25:31.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:101e 2016-01-12 20:20:18.000000000 +0100 @@ -1,3 +1,3 @@ # Huawei U7510 / U7517 TargetClass=0xff -Message="55534243123456780600000080000601000000000000000000000000000000" +MessageContent="55534243123456780600000080000601000000000000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1410:9020 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1410:9020 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1410:9020 2015-10-27 21:51:38.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1410:9020 2016-01-12 20:20:48.000000000 +0100 @@ -1,2 +1,2 @@ # Novatel U620L -Configuration=2 +Configuration=4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1410:9022 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1410:9022 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1410:9022 2015-10-27 21:51:38.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1410:9022 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -# Novatel U620L -Configuration=2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/19d2:1595 new/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:1595 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/19d2:1595 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:1595 2016-01-12 20:39:14.000000000 +0100 @@ -0,0 +1,5 @@ +# ZTE MF710 (Vietnam) +TargetVendor= 0x19d2 +TargetProductList=0x1596 +StandardEject=1 +MessageContent="55534243123456702000000080000c85010101180101010101000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/19d2:2000 new/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:2000 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/19d2:2000 2015-01-15 19:46:36.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:2000 2016-01-12 20:37:33.000000000 +0100 @@ -1,5 +1,5 @@ -# ZTE devices +# ZTE devices, some Onda devices TargetVendor= 0x19d2 -TargetProductList="0001,0002,0015,0016,0017,0019,0031,0033,0037,0042,0052,0055,0061,0063,0064,0066,0091,0108,0117,0128,0151,0157,0177,1402,2002,2003" +TargetProductList="0001,0002,0015,0016,0017,0019,0024,0031,0033,0037,0042,0052,0055,0061,0063,0064,0066,0091,0108,0117,0128,0151,0157,0177,1402,2002,2003" StandardEject=1 MessageContent="55534243123456702000000080000c85010101180101010101000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1c9e:9bfe new/usb-modeswitch-data-20160112/usb_modeswitch.d/1c9e:9bfe --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1c9e:9bfe 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1c9e:9bfe 2016-01-12 20:55:00.000000000 +0100 @@ -0,0 +1,4 @@ +# XS Stick W100 (Omega) +TargetVendor=0x1c9e +TargetProduct=0x9b01 +MessageContent="55534243123456780000000000000606f50402527000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0007 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0007 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0007 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0007 2016-01-12 20:28:39.000000000 +0100 @@ -0,0 +1,4 @@ +# Onda POM1051 +TargetVendor=0x1ee8 +TargetProduct=0x000b +MessageContent="555342431234567800000000000010ff000000000000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0048 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0048 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0048 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0048 2016-01-12 20:35:26.000000000 +0100 @@ -0,0 +1,4 @@ +# Onda MT655 +TargetVendor=0x1ee8 +TargetProduct=0x0049 +MessageContent="555342431234567800000000000010ff000000000000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0063 new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0063 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/1ee8:0063 2015-01-14 21:27:10.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/1ee8:0063 2016-01-12 20:30:15.000000000 +0100 @@ -1,4 +1,4 @@ -# Onda TM201 14.4 (TIM Italy) +# Onda TM201, CM201 TargetVendor=0x1ee8 -TargetProduct=0x0064 +TargetProductList="0064,0065" MessageContent="555342431234567800000000000008ff000000000000030000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/2001:a401 new/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a401 --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/2001:a401 2015-06-21 18:33:22.000000000 +0200 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a401 2016-01-12 19:11:45.000000000 +0100 @@ -1,7 +1,5 @@ # D-Link DWM-221 B1 TargetVendor=0x2001 TargetProduct=0x7e19 -#StandardEject=1 -MessageContent="5553424312345678000000000000061e000000000000000000000000000000" -MessageContent2="5553424312345679000000000001061b000000010000000000000000000000" -MessageContent3="5553424312345670000000000000061b000000020000000000000000000000" +MessageContent="5553424312345678000000000001061e000000000000000000000000000000" +MessageContent2="5553424312345679000000000001061b000000020000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20151101/usb_modeswitch.d/20a6:f00a new/usb-modeswitch-data-20160112/usb_modeswitch.d/20a6:f00a --- old/usb-modeswitch-data-20151101/usb_modeswitch.d/20a6:f00a 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160112/usb_modeswitch.d/20a6:f00a 2016-01-12 20:45:51.000000000 +0100 @@ -0,0 +1,4 @@ +# BM WM78 +TargetVendor=0x20a6 +TargetProduct=0x1000 +StandardEject=1