Hello community, here is the log from the commit of package usb_modeswitch for openSUSE:Factory checked in at 2016-08-06 20:37:56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 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 2016-03-02 14:19:25.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.usb_modeswitch.new/usb_modeswitch.changes 2016-08-06 20:37:57.000000000 +0200 @@ -1,0 +2,21 @@ +Fri Jul 29 13:55:21 UTC 2016 - [email protected] + +- Update to version 2.4.0 + * ATTENTION: All ad-hoc driver binding code (using new_id driver + attribute) removed - was a potential source of side effects and + should now be obsoleted by good kernel support for modems. + * Added "dummy" setting for config files, to conditionally + refrain from handling a device (see this topic: + www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=2458). + * Extended StandardEject sequence to include LUN 1, required for + some D-Link devices. + * Add device class 239 ("miscellaneous") to sanity check (thanks + to Daniel Drake for reporting). + * udev shell script - removed driver binding, removed almost all + waiting and forking, improved check for systemd (thanks to + Daniel Drake for problem analysis and solution, see this + topic/patch: + www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=16777#p16777, + gist.github.com/dsd/9f83c4830ab78ce94078aedb2cf16a8f). + +------------------------------------------------------------------- Old: ---- usb-modeswitch-2.3.0.tar.bz2 usb-modeswitch-data-20160112.tar.bz2 New: ---- usb-modeswitch-2.4.0.tar.bz2 usb-modeswitch-data-20160612.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ usb_modeswitch.spec ++++++ --- /var/tmp/diff_new_pack.nLCSVR/_old 2016-08-06 20:37:58.000000000 +0200 +++ /var/tmp/diff_new_pack.nLCSVR/_new 2016-08-06 20:37:58.000000000 +0200 @@ -17,10 +17,10 @@ %define source_name usb-modeswitch -%define date 20160112 +%define date 20160612 %define _udevdir %(pkg-config --variable=udevdir udev) Name: usb_modeswitch -Version: 2.3.0 +Version: 2.4.0 Release: 0 Summary: A mode switching tool for controlling multiple-device USB gear License: GPL-2.0+ ++++++ usb-modeswitch-2.3.0.tar.bz2 -> usb-modeswitch-2.4.0.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/ChangeLog new/usb-modeswitch-2.4.0/ChangeLog --- old/usb-modeswitch-2.3.0/ChangeLog 2016-01-13 07:53:03.000000000 +0100 +++ new/usb-modeswitch-2.4.0/ChangeLog 2016-06-12 14:08:36.000000000 +0200 @@ -2,6 +2,19 @@ History of USB_ModeSwitch ========================= +Version 2.4.0, 2016/06/12 + ATTENTION: All ad-hoc driver binding code (using new_id driver attribute) + removed - was a potential source of side effects and should now be + obsoleted by good kernel support for modems; Added "dummy" setting for + config files, to conditionally refrain from handling a device (see this + topic: www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=4&t=2458 ); + extended StandardEject sequence to include LUN 1, required for some D-Link + devices; add device class 239 ("miscellaneous") to sanity check (thanks to + Daniel Drake for reporting); udev shell script - removed driver binding, + removed almost all waiting and forking, improved check for systemd (thanks + to Daniel Drake for problem analysis and solution, see this topic/patch: + www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=16777#p16777 , + gist.github.com/dsd/9f83c4830ab78ce94078aedb2cf16a8f ) 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 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/Makefile new/usb-modeswitch-2.4.0/Makefile --- old/usb-modeswitch-2.3.0/Makefile 2016-01-11 19:53:39.000000000 +0100 +++ new/usb-modeswitch-2.4.0/Makefile 2016-06-12 10:13:53.000000000 +0200 @@ -1,5 +1,5 @@ PROG = usb_modeswitch -VERS = 2.3.0 +VERS = 2.4.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.3.0/README new/usb-modeswitch-2.4.0/README --- old/usb-modeswitch-2.3.0/README 2015-06-27 22:00:55.000000000 +0200 +++ new/usb-modeswitch-2.4.0/README 2016-06-12 22:33:35.000000000 +0200 @@ -239,6 +239,7 @@ Adam Goode Leonid Lisovskiy Vladislav Grishenko + Daniel Drake Device information contributors are named in the "device_reference.txt" file. @@ -267,4 +268,4 @@ -Last revised: 2015-06-27, Josua Dietze +Last revised: 2016-06-12, Josua Dietze diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/usb_modeswitch.c new/usb-modeswitch-2.4.0/usb_modeswitch.c --- old/usb-modeswitch-2.3.0/usb_modeswitch.c 2016-01-12 23:15:13.000000000 +0100 +++ new/usb-modeswitch-2.4.0/usb_modeswitch.c 2016-06-12 19:48:35.000000000 +0200 @@ -1,8 +1,8 @@ /* Mode switching tool for controlling mode of 'multi-state' USB devices - Version 2.3.0, 2016/01/12 + Version 2.4.0, 2016/06/12 - Copyright (C) 2007 - 2016 Josua Dietze (mail to "digidietze" at the domain + Copyright (C) 2007 - 2016 Josua Dietze (mail to "usb_admin" 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) @@ -45,7 +45,7 @@ /* Recommended tab size: 4 */ -#define VERSION "2.3.0" +#define VERSION "2.4.0" #include <stdio.h> #include <stdlib.h> @@ -98,6 +98,7 @@ #define LINE_DIM 1024 +#define MSG_DIM 11 #define MAXLINES 50 #define BUF_SIZE 4096 #define DESCR_MAX 129 @@ -152,6 +153,7 @@ char DefaultProductList[5]; unsigned char ByteString[LINE_DIM/2]; unsigned char buffer[BUF_SIZE]; +char **Messages = NULL; FILE *output; @@ -426,7 +428,7 @@ int main(int argc, char **argv) { - int ret=0, numDefaults=0, sonySuccess=0; + int ret=0, numDefaults=0, sonySuccess=0, i; int currentConfigVal=0, defaultClass=0, interfaceClass=0; struct libusb_device_descriptor descriptor; enum libusb_error libusbError; @@ -577,10 +579,16 @@ /* Get class of default device/interface */ interfaceClass = get_interface_class(); - /* Check or get endpoints */ + /* Check or get endpoints and alloc message list if needed*/ if (strlen(MessageContent) || StandardEject || ModeMap & CISCO_MODE || ModeMap & HUAWEINEW_MODE || ModeMap & OPTION_MODE) { + Messages = (char**) calloc(MSG_DIM, sizeof(char*)); + for (i = 0; i < MSG_DIM; i++) { + Messages[i] = (char*) calloc(LINE_DIM, sizeof(char)); + Messages[i][0] = '\0'; + } + if (!MessageEndpoint) MessageEndpoint = find_first_bulk_endpoint(LIBUSB_ENDPOINT_OUT); if (!ResponseEndpoint) @@ -603,11 +611,11 @@ abortExit(); } - if (defaultClass == 0) + if (defaultClass == 0 || defaultClass == 0xef) defaultClass = interfaceClass; else if (interfaceClass == LIBUSB_CLASS_MASS_STORAGE && defaultClass != LIBUSB_CLASS_MASS_STORAGE - && defaultClass != 0xef && defaultClass != LIBUSB_CLASS_VENDOR_SPEC) { + && defaultClass != LIBUSB_CLASS_VENDOR_SPEC) { /* Unexpected default class combined with differing interface class */ SHOW_PROGRESS(output,"Bogus Class/InterfaceClass: 0x%02x/0x08\n", defaultClass); @@ -716,27 +724,29 @@ if (StandardEject) { SHOW_PROGRESS(output,"Sending standard EJECT sequence\n"); detachDriver(); + + strcpy(Messages[0],"5553424387654321000000000000061e000000000000000000000000000000"); + strcpy(Messages[1],"5553424397654321000000000000061b000000020000000000000000000000"); + strcpy(Messages[2],"5553424387654321000000000001061e000000000000000000000000000000"); + strcpy(Messages[3],"5553424397654321000000000001061b000000020000000000000000000000"); if (MessageContent[0] != '\0') - strcpy(MessageContent3, MessageContent); - else - MessageContent3[0] = '\0'; + strcpy(Messages[4], MessageContent); - strcpy(MessageContent,"5553424387654321000000000000061e000000000000000000000000000000"); - strcpy(MessageContent2,"5553424397654321000000000000061b000000020000000000000000000000"); switchSendMessage(); } else if (ModeMap & HUAWEINEW_MODE) { SHOW_PROGRESS(output,"Using standard Huawei switching message\n"); detachDriver(); - strcpy(MessageContent,"55534243123456780000000000000011062000000101000100000000000000"); + strcpy(Messages[0],"55534243123456780000000000000011062000000101000100000000000000"); switchSendMessage(); } else if (ModeMap & OPTION_MODE) { SHOW_PROGRESS(output,"Using standard Option switching message\n"); detachDriver(); // strcpy(MessageContent,"55534243123456780100000080000601000000000000000000000000000000"); - strcpy(MessageContent,"55534243123456780000000000000601000000000000000000000000000000"); + strcpy(Messages[0],"55534243123456780000000000000601000000000000000000000000000000"); switchSendMessage(); } else if (strlen(MessageContent)) { detachDriver(); + strcpy(Messages[0],MessageContent); switchSendMessage(); } @@ -963,11 +973,11 @@ { const char* cmdHead = "55534243"; int ret, i; - char* msg[3]; +/* char* msg[3]; msg[0] = MessageContent; msg[1] = MessageContent2; msg[2] = MessageContent3; - +*/ SHOW_PROGRESS(output,"Set up interface %d\n", Interface); ret = libusb_claim_interface(devh, Interface); if (ret != 0) { @@ -979,22 +989,25 @@ if (show_progress) fflush(stdout); - for (i=0; i<3; i++) { - if ( strlen(msg[i]) == 0) - continue; + for (i=0; i<MSG_DIM; i++) { + if ( strlen(Messages[i]) == 0) + break; - if ( sendMessage(msg[i], i+1) ) + if ( sendMessage(Messages[i], i+1) ) goto skip; - if ( strstr(msg[i],cmdHead) != NULL ) { + if ( strstr(Messages[i],cmdHead) != NULL ) { // UFI command SHOW_PROGRESS(output,"Read the response to message %d (CSW) ...\n", i+1); ret = read_bulk(ResponseEndpoint, ByteString, 13); + if (ret >= 0) + SHOW_PROGRESS(output,", status %d",ByteString[12]); } 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 ); + ret = read_bulk(ResponseEndpoint, ByteString, strlen(Messages[i])/2 ); } + SHOW_PROGRESS(output,"\n"); if (ret < 0) goto skip; } @@ -1252,7 +1265,8 @@ ret = usb_interrupt_io(devh, EP_OUT, buffer, SIZE, 1000); usb_interrupt_io(devh, EP_IN, buffer, SIZE, 1000); if (ret < 0) { - SHOW_PROGRESS(output," MobileAction control sequence did not complete\n Last error was %d\n",ret); + SHOW_PROGRESS(output," MobileAction control sequence did not complete\n" + " Last error was %d\n",ret); } else { SHOW_PROGRESS(output," MobileAction control sequence complete\n"); } @@ -1271,8 +1285,9 @@ int ret; SHOW_PROGRESS(output,"Send Sequans control message\n"); - 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); + 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); @@ -1284,19 +1299,18 @@ void switchCiscoMode() { int ret, i, j; - char* msg[11]; - msg[0] = "55534243f83bcd810002000080000afd000000030000000100000000000000"; - msg[1] = "55534243984300820002000080000afd000000070000000100000000000000"; - msg[2] = "55534243984300820000000000000afd000100071000000000000000000000"; - msg[3] = "55534243984300820002000080000afd000200230000000100000000000000"; - msg[4] = "55534243984300820000000000000afd000300238200000000000000000000"; - msg[5] = "55534243984300820002000080000afd000200260000000100000000000000"; - msg[6] = "55534243984300820000000000000afd00030026c800000000000000000000"; - msg[7] = "55534243d84c04820002000080000afd000010730000000100000000000000"; - msg[8] = "55534243d84c04820002000080000afd000200240000000100000000000000"; - msg[9] = "55534243d84c04820000000000000afd000300241300000000000000000000"; - msg[10] = "55534243d84c04820000000000000afd000110732400000000000000000000"; + strcpy(Messages[0],"55534243f83bcd810002000080000afd000000030000000100000000000000"); + strcpy(Messages[1],"55534243984300820002000080000afd000000070000000100000000000000"); + strcpy(Messages[2],"55534243984300820000000000000afd000100071000000000000000000000"); + strcpy(Messages[3],"55534243984300820002000080000afd000200230000000100000000000000"); + strcpy(Messages[4],"55534243984300820000000000000afd000300238200000000000000000000"); + strcpy(Messages[5],"55534243984300820002000080000afd000200260000000100000000000000"); + strcpy(Messages[6],"55534243984300820000000000000afd00030026c800000000000000000000"); + strcpy(Messages[7],"55534243d84c04820002000080000afd000010730000000100000000000000"); + strcpy(Messages[8],"55534243d84c04820002000080000afd000200240000000100000000000000"); + strcpy(Messages[9],"55534243d84c04820000000000000afd000300241300000000000000000000"); + strcpy(Messages[10],"55534243d84c04820000000000000afd000110732400000000000000000000"); SHOW_PROGRESS(output,"Set up Cisco interface %d\n", Interface); ret = libusb_claim_interface(devh, Interface); @@ -1312,13 +1326,14 @@ // SHOW_PROGRESS(output," Extra response (CSW) read, result %d\n",ret); for (i=0; i<11; i++) { - if ( sendMessage(msg[i], i+1) ) + if ( sendMessage(Messages[i], i+1) ) goto skip; 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); + SHOW_PROGRESS(output,"\n"); if (ret < 0) goto skip; @@ -1329,11 +1344,10 @@ 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); - } + ReleaseDelay = 2000; + SHOW_PROGRESS(output,"Wait for %d ms before releasing interface ...\n", ReleaseDelay); + usleep(ReleaseDelay*1000); + ret = libusb_release_interface(devh, Interface); if (ret < 0) goto skip; @@ -1356,8 +1370,8 @@ } SHOW_PROGRESS(output,"Send Sony control message\n"); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0x11, 2, 0, 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); @@ -1375,7 +1389,8 @@ dev = 0; while ( dev == 0 && i < 30 ) { if ( i > 5 ) { - dev = search_devices(&found, DefaultVendor, DefaultProductList, TargetClass, 0, SEARCH_TARGET); + dev = search_devices(&found, DefaultVendor, DefaultProductList, TargetClass, + 0, SEARCH_TARGET); } if ( dev != 0 ) break; @@ -1401,8 +1416,8 @@ sleep(1); SHOW_PROGRESS(output,"Send Sony control message again ...\n"); - ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN, - 0x11, 2, 0, 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); @@ -1530,8 +1545,8 @@ */ 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)) { if (verbose) { @@ -1612,12 +1627,12 @@ { int ret = usb_bulk_io(devh, endpoint, buffer, length, 3000); if (ret >= 0 ) { - SHOW_PROGRESS(output," Response successfully read (%d bytes).\n", ret); + SHOW_PROGRESS(output," Response successfully read (%d bytes)", ret); } else if (ret == LIBUSB_ERROR_NO_DEVICE) { - SHOW_PROGRESS(output," Device seems to have vanished after reading. Good.\n"); + SHOW_PROGRESS(output," Device seems to have vanished after reading. Good."); } else - SHOW_PROGRESS(output," Response reading failed (error %d)\n", ret); + SHOW_PROGRESS(output," Response reading failed (error %d)", ret); return ret; } @@ -1993,6 +2008,13 @@ void close_all() { + int i; + if (Messages) { + for ( i = 0; i < MSG_DIM; i++ ) { + free(Messages[i]); + } + free(Messages); + } if (active_config) libusb_free_config_descriptor(active_config); if (devh) @@ -2017,7 +2039,7 @@ { char* version = VERSION; fprintf(output,"\n * usb_modeswitch: handle USB devices with multiple modes\n" - " * Version %s (C) Josua Dietze 2015\n" + " * Version %s (C) Josua Dietze 2016\n" " * Based on libusb1/libusbx\n\n" " ! PLEASE REPORT NEW CONFIGURATIONS !\n\n", version); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/usb_modeswitch.h new/usb-modeswitch-2.4.0/usb_modeswitch.h --- old/usb-modeswitch-2.3.0/usb_modeswitch.h 2016-01-12 23:03:12.000000000 +0100 +++ new/usb-modeswitch-2.4.0/usb_modeswitch.h 2016-06-12 21:48:26.000000000 +0200 @@ -2,7 +2,7 @@ This file is part of usb_modeswitch, a mode switching tool for controlling the mode of 'multi-state' USB devices - Version 2.3.0, 2016/01/12 + Version 2.4.0, 2016/06/12 Copyright (C) 2007 - 2016 Josua Dietze Config file parsing stuff borrowed from Guillaume Dargaud diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/usb_modeswitch.sh new/usb-modeswitch-2.4.0/usb_modeswitch.sh --- old/usb-modeswitch-2.3.0/usb_modeswitch.sh 2016-01-11 20:18:57.000000000 +0100 +++ new/usb-modeswitch-2.4.0/usb_modeswitch.sh 2016-06-12 14:12:27.000000000 +0200 @@ -1,5 +1,5 @@ #!/bin/sh -# part of usb_modeswitch 2.3.0 +# part of usb_modeswitch 2.4.0 device_in() { if [ ! -e /var/lib/usb_modeswitch/$1 ]; then @@ -40,27 +40,7 @@ PATH=/sbin:/usr/sbin:$PATH case "$1" in --driver-bind) - ( - dir=$(ls -d /sys$2/ttyUSB* 2>/dev/null) - sleep 1 - if [ ! -z "$dir" ]; then - exit 0 - fi - set +e - device_in "bind_list" $v_id $p_id - if [ "$?" = "1" ]; then - id_attr="/sys/bus/usb-serial/drivers/option1/new_id" - if [ ! -e "$id_attr" ]; then - modprobe option 2>/dev/null || true - fi - if [ -e "$id_attr" ]; then - echo "$v_id $p_id ff" > $id_attr - else - modprobe -r usbserial 2>/dev/null - modprobe usbserial "vendor=0x$v_id" "product=0x$p_id" 2>/dev/null - fi - fi - ) & + # driver binding code removed exit 0 ;; --symlink-name) @@ -73,26 +53,20 @@ exit 0 ;; esac -( + IFS='/' read -r p1 p2 <<EOF $1 EOF + PATH=/bin:/sbin:/usr/bin:/usr/sbin -count=20 -while [ $count != 0 ]; do - if [ ! -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then - sleep 1 - count=$(($count - 1)) - else - if [ -e "/etc/systemd/system/[email protected]" ]; then - exec systemctl --no-block start usb_modeswitch@$p1'_'$p2.service - elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then - exec initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$1 - else - exec usb_modeswitch_dispatcher --switch-mode $1 & - fi - exit 0 - fi -done -) & +init_path=`readlink /sbin/init` +if [ `basename $init_path` = "systemd" ]; then + systemctl --no-block start usb_modeswitch@$p1'_'$p2.service +elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then + initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$1 +else + # only old distros, new udev will kill all subprocesses + exec 1<&- 2<&- 5<&- 7<&- + exec usb_modeswitch_dispatcher --switch-mode $1 & +fi exit 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-2.3.0/usb_modeswitch.tcl new/usb-modeswitch-2.4.0/usb_modeswitch.tcl --- old/usb-modeswitch-2.3.0/usb_modeswitch.tcl 2016-01-12 22:48:53.000000000 +0100 +++ new/usb-modeswitch-2.4.0/usb_modeswitch.tcl 2016-06-12 11:33:56.000000000 +0200 @@ -9,7 +9,7 @@ # the mode switching program with the matching parameter # file from /usr/share/usb_modeswitch # -# Part of usb-modeswitch-2.3.0 package +# Part of usb-modeswitch-2.4.0 package # (C) Josua Dietze 2009-2016 set arg0 [lindex $argv 0] @@ -276,7 +276,6 @@ set cfgno [string trim $cfgno] if {$cfgno > 0} { set config(Configuration) $cfgno - set config(DriverModule) "" set flags(config) "Configuration=$cfgno" } else { Log " No MBIM configuration found, switch to legacy modem mode" @@ -291,6 +290,10 @@ set report "ok:busdev" break } + if {$config(Configuration) == 0} { + Log "Config file contains dummy method, do nothing. Exit" + SafeExit + } UnbindDriver $devdir $ifdir # Now we are actually switching if $flags(logging) { @@ -345,68 +348,19 @@ ReadUSBAttrs $devdir $ifdir } -# Checking for bound drivers if there is an interface with class 0xff - -if {$config(DriverModule) != "" && [regexp {ok:} $report]} { - if [HasFF $devdir] { - AddToList link_list $usb(idVendor):$usb(idProduct) - } else { - set config(DriverModule) "" - Log " No vendor-specific class found, skip driver check" - } -} - -# If module is set (it is by default), driver shall be loaded. -# If not, then NoDriverLoading is active +# driver binding removed !! -if {$config(DriverModule) != ""} { - if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} { - if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} { - Log "No target vendor/product ID found or given, can't continue. Abort" - SafeExit - } - } - # wait for any drivers to bind automatically - after 1500 - Log "Now check for bound driver ..." - if {![file exists $devdir/$ifdir/driver]} { - Log " no driver has bound to interface 0 yet" - - # If device is known, the sh wrapper will take care, else: - if {[InBindList $usb(idVendor):$usb(idProduct)] == 0} { - Log "Device is not in \"bind_list\" yet, bind it now" - - # Load driver - CheckDriverBind $usb(idVendor) $usb(idProduct) - - # Old/slow systems may take a while to create the devices - set counter 0 - while {![file exists $devdir/$ifdir/driver]} { - if {$counter == 14} {break} - after 500 - incr counter - } - if {$counter == 14} { - Log " driver binding failed" - } else { - Log " driver was bound to the device" - AddToList bind_list $usb(idVendor):$usb(idProduct) - } - } - } else { - Log " driver has bound, device is known" - if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} { - AddToList link_list $usb(idVendor):$usb(idProduct) - } +if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} { + if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) usb(idProduct)]} { + Log "No target vendor/product ID found or given, can't continue. Abort" + SafeExit } -} else { - # Just in case "NoDriverLoading" was added after the first bind - RemoveFromBindList $usb(idVendor):$usb(idProduct) } - -if [regexp {ok:$} $report] { - # "NoDriverLoading" was set - Log "No driver check or bind for this device" +# wait for drivers to bind +after 500 +if {[llength [glob -nocomplain $devdir/$ifdir/ttyUSB*]] > 0} { + Log "Serial USB driver bound to interface 0\n will try to guess and symlink modem port on next connect" + AddToList link_list $usb(idVendor):$usb(idProduct) } # In newer kernels there is a switch to avoid the use of a device @@ -599,8 +553,6 @@ proc ParseDeviceConfig {cfg} { global config -set config(DriverModule) "" -set config(DriverIDPath) "" set config(WaitBefore) "" set config(TargetVendor) "" set config(TargetProduct) "" @@ -609,7 +561,6 @@ set config(NoMBIMCheck) 0 set config(PantechMode) 0 set config(CheckSuccess) 20 -set loadDriver 1 foreach pname [lsort [array names config]] { if [regexp -line "^\[^# \]*?$pname.*?= *(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] { @@ -617,26 +568,6 @@ } } -if [regexp -line {^[^#]*?NoDriverLoading.*?=.*?(1|yes|true).*?$} $cfg] { - set loadDriver 0 - Log "config: NoDriverLoading is set to active" -} - -# For general driver loading; TODO: add respective device names. -# Presently only useful for HSO devices (which are recounted now) -if $loadDriver { - if {$config(DriverModule) == ""} { - set config(DriverModule) "option" - set config(DriverIDPath) "/sys/bus/usb-serial/drivers/option1" - } else { - if {$config(DriverIDPath) == ""} { - set config(DriverIDPath) "/sys/bus/usb/drivers/$config(DriverModule)" - } - } - Log "Driver module is \"$config(DriverModule)\", ID path is $config(DriverIDPath)\n" -} else { - Log "Driver will not be handled by usb_modeswitch" -} set config(WaitBefore) [string trimleft $config(WaitBefore) 0] } @@ -837,92 +768,6 @@ # end of proc {SymLinkName} -# Load and bind driver (default "option") -# -proc {CheckDriverBind} {vid pid} { -global config - -foreach fn {/sbin/modprobe /usr/sbin/modprobe} { - if [file exists $fn] { - set loader $fn - } -} -Log "Module loader is $loader" - -set idfile $config(DriverIDPath)/new_id -if {![file exists $idfile]} { - if {$loader == ""} { - Log "Can't do anymore without module loader; get \"modtools\"!" - return - } - Log "\nTry to load module \"$config(DriverModule)\"" - if [catch {set result [exec $loader -v $config(DriverModule)]} err] { - Log " Running \"$loader $config(DriverModule)\" gave an error:\n $err" - } else { - Log " Module was loaded successfully:\n$result" - } -} else { - Log "Module is active already" -} -set i 0 -while {$i < 50} { - if [file exists $idfile] { - break - } - after 20 - incr i -} -if {$i < 50} { - Log "Try to add ID to driver \"$config(DriverModule)\"" - SysLog "usb_modeswitch: add device ID $vid:$pid to driver \"$config(DriverModule)\"" - SysLog "usb_modeswitch: please report the device ID to the Linux USB developers!" - if [catch {exec echo "$vid $pid ff" >$idfile} err] { - Log " Error adding ID to driver:\n $err" - } else { - Log " ID added to driver; check for new devices in /dev" - } -} else { - Log " \"$idfile\" not found, check if kernel version is at least 2.6.27" - Log "Fall back to \"usbserial\"" - set config(DriverModule) usbserial - Log "\nTry to unload driver \"usbserial\"" - if [catch {exec $loader -r usbserial} err] { - Log " Running \"$loader -r usbserial\" gave an error:\n $err" - Log "No more fallbacks" - return - } - after 50 - Log "\nTry to load driver \"usbserial\" with device IDs" - if [catch {set result [exec $loader -v usbserial vendor=0x$vid product=0x$pid]} err] { - Log " Running \"$loader usbserial\" gave an error:\n $err" - } else { - Log " Driver was loaded successfully:\n$result" - } -} - -} -# end of proc {CheckDriverBind} - - -# Check if USB ID is listed as needing driver binding -proc {InBindList} {id} { - -set listfile /var/lib/usb_modeswitch/bind_list -if {![file exists $listfile]} {return 0} -set rc [open $listfile r] -set buffer [read $rc] -close $rc -if [string match *$id* $buffer] { -Log "Found $id in bind_list" - return 1 -} else { -Log "No $id in bind_list" - return 0 -} - -} -# end of proc {InBindList} - # Add USB ID to list of devices needing later treatment proc {AddToList} {name id} { @@ -946,37 +791,6 @@ # end of proc {AddToList} -# Remove USB ID from bind list (NoDriverLoading is set) -proc {RemoveFromBindList} {id} { - -set listfile /var/lib/usb_modeswitch/bind_list -if [file exists $listfile] { - set rc [open $listfile r] - set buffer [read $rc] - close $rc - set idList [split [string trim $buffer] \n] -} else { - return -} -set idx [lsearch $idList $id] -if {$idx > -1} { - set idList [lreplace $idList $idx $idx] -} else { - return -} -if {[llength $idList] == 0} { - file delete $listfile - return -} -set buffer [join $idList "\n"] -if [catch {set lc [open $listfile w]}] {return} -puts $lc $buffer -close $lc - -} -# end of proc {RemoveFromBindList} - - proc {CheckSuccess} {devdir} { global config usb flags ++++++ usb-modeswitch-data-20160112.tar.bz2 -> usb-modeswitch-data-20160612.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/40-usb_modeswitch.rules new/usb-modeswitch-data-20160612/40-usb_modeswitch.rules --- old/usb-modeswitch-data-20160112/40-usb_modeswitch.rules 2016-01-12 21:31:06.000000000 +0100 +++ new/usb-modeswitch-data-20160612/40-usb_modeswitch.rules 2016-06-12 21:17:38.000000000 +0200 @@ -1,6 +1,6 @@ -# Part of usb-modeswitch-data, version 20160112 +# Part of usb-modeswitch-data, version 20160612 # -# Works with usb_modeswitch versions >= 2.2.2 (extension of PantechMode) +# Works with usb_modeswitch versions >= 2.4.0 (extension of StandardEject) # ACTION!="add|change", GOTO="modeswitch_rules_end" @@ -8,16 +8,7 @@ # transfer; checked against a list of known modems, or else no action KERNEL=="ttyUSB*", ATTRS{bNumConfigurations}=="*", PROGRAM="usb_modeswitch --symlink-name %p %s{idVendor} %s{idProduct} %E{PRODUCT}", SYMLINK+="%c" -SUBSYSTEM!="usb", GOTO="modeswitch_rules_end" - -# Adds the device ID to the "option" driver after a warm boot -# in cases when the device is yet unknown to the driver; checked -# against a list of known modems, or else no action -ATTR{bInterfaceClass}=="ff", ATTR{bInterfaceNumber}=="00", ATTRS{bNumConfigurations}=="*", RUN+="usb_modeswitch --driver-bind %p %s{idVendor} %s{idProduct} %E{PRODUCT}" - - -# Don't continue on "change" event, prevent trigger by changed configuration -ACTION!="add", GOTO="modeswitch_rules_end" +SUBSYSTEM!="usb", ACTION!="add",, GOTO="modeswitch_rules_end" # Generic entry for most Huawei devices, excluding Android phones @@ -71,7 +62,7 @@ # Nokia CS-21M-02 ATTR{idVendor}=="0421", ATTR{idProduct}=="0637", RUN+="usb_modeswitch '%b/%k'" -# Vodafone MD950 (Wisue Technology), Philips (?) +# Philips (?), Vodafone MD950 (Wisue Technology) ATTR{idVendor}=="0471", ATTR{idProduct}=="1210", RUN+="usb_modeswitch '%b/%k'" # Philips TalkTalk (NXP Semiconductors "Dragonfly") @@ -116,7 +107,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, Option GlobeTrotter GX0201, Celot K-300, Celot CT-680, StrongRising device, TechFaith Venus VT-18 +# TechFaith Venus VT-18, AnyDATA devices, Bless UC165, Samsung SGH-Z810, StrongRising device, Vertex Wireless 100 Series, Celot K-300, Older Option devices, Prolink P2000 CDMA, Celot CT-680 ATTR{idVendor}=="05c6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '%b/%k'" # Various USB modems @@ -131,6 +122,9 @@ # Alcatel-sbell ASB TL131 TD-LTE ATTR{idVendor}=="05c6", ATTR{idProduct}=="9024", RUN+="usb_modeswitch '%b/%k'" +# U901 (LTE modem) +ATTR{idVendor}=="05c6", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '%b/%k'" + # Siptune LM-75 ("LinuxModem") ATTR{idVendor}=="05c6", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '%b/%k'" @@ -506,6 +500,9 @@ # Huawei ME909u-521 ATTR{idVendor}=="12d1", ATTR{idProduct}=="1573", RUN+="usb_modeswitch '%b/%k'" +# Huawei ME906, ME909 +ATTR{idVendor}=="12d1", ATTR{idProduct}=="15c1", RUN+="usb_modeswitch '%b/%k'" + # Cisco AM10 "Valet Connector" ATTR{idVendor}=="1307", ATTR{idProduct}=="1169", RUN+="usb_modeswitch '%b/%k'" @@ -749,7 +746,7 @@ # ZTE MF710M Variants ATTR{idVendor}=="19d2", ATTR{idProduct}=="1588", RUN+="usb_modeswitch '%b/%k'" -# ZTE MF710 (Vietnam) +# ZTE MF710 (Vietnam) a.o. ATTR{idVendor}=="19d2", ATTR{idProduct}=="1595", RUN+="usb_modeswitch '%b/%k'" # ZTE devices, some Onda devices @@ -797,6 +794,9 @@ # Alcatel X602D ATTR{idVendor}=="1bbb", ATTR{idProduct}=="022c", RUN+="usb_modeswitch '%b/%k'" +# Yota W8 +ATTR{idVendor}=="1bbb", ATTR{idProduct}=="025e", RUN+="usb_modeswitch '%b/%k'" + # Alcatel X200/X200L/X060S/L100V, Archos G9 3G Key ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '%b/%k'" @@ -842,7 +842,7 @@ # Explay Slim ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9e08", RUN+="usb_modeswitch '%b/%k'" -# MobiData MBD-200HU and others, Longcheer/Longsoon (aka Omega Technology) devices +# Longcheer/Longsoon (aka Omega Technology) devices, MobiData MBD-200HU and others ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '%b/%k'" # TechFaith BSNL Capitel @@ -947,6 +947,18 @@ # D-Link DWM-167 A1 ATTR{idVendor}=="2001", ATTR{idProduct}=="a405", RUN+="usb_modeswitch '%b/%k'" +# D-Link DWM-221 +ATTR{idVendor}=="2001", ATTR{idProduct}=="a406", RUN+="usb_modeswitch '%b/%k'" + +# D-Link DWM-157 C1 +ATTR{idVendor}=="2001", ATTR{idProduct}=="a407", RUN+="usb_modeswitch '%b/%k'" + +# D-Link DWM-156 A8 (Myanmar) +ATTR{idVendor}=="2001", ATTR{idProduct}=="a40a", RUN+="usb_modeswitch '%b/%k'" + +# D-Link DWR-910 +ATTR{idVendor}=="2001", ATTR{idProduct}=="a40d", RUN+="usb_modeswitch '%b/%k'" + # D-Link DWM-156 A7 ATTR{idVendor}=="2001", ATTR{idProduct}=="a706", RUN+="usb_modeswitch '%b/%k'" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/ChangeLog new/usb-modeswitch-data-20160612/ChangeLog --- old/usb-modeswitch-data-20160112/ChangeLog 2016-01-12 21:45:22.000000000 +0100 +++ new/usb-modeswitch-data-20160612/ChangeLog 2016-06-12 21:12:56.000000000 +0200 @@ -1,3 +1,16 @@ +20160612: + ATTENTION: requires usb-modeswitch version >= 2.4.0 due to appended + StandardEject sequence (affects D-Link devices); + Added devices: [046d:c261] Logitech G920 Racing Wheel, [05c6:98ff] + U901 (LTE modem), [12d1:15c1] Huawei ME906, ME909, [1bbb:025e] Yota + 4G LTE W8, [2001:a406] D-Link DWM-221, [2001:a407] D-Link DWM-157 C1, + [2001:a40a] D-Link DWM-156 A8 (Myanmar), [2001:a40d] D-Link DWR-910, + Corrected/updated devices: [05c6:f000] Siptune LM-75 ("LinuxModem"), + EWangshikong 4G, [10a9:6080] Pantech LTE Modem, [12d1:1573] Huawei + ME909u-521, [12d1:1f1e] Vodafone / Huawei K5160, [19d2:1595] ZTE + MF710 (Vietnam) a.o., [2001:a401] D-Link DWM-221 B1; + "NoDriverLoading" parameter removed from all configs, with respect + to removed feature in usb-modeswitch 2.4.0 20160112: ATTENTION: requires usb-modeswitch version >= 2.3.0 due to new para- meter OptionMode (further reducing config file space demand); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/Makefile new/usb-modeswitch-data-20160612/Makefile --- old/usb-modeswitch-data-20160112/Makefile 2016-01-12 21:34:25.000000000 +0100 +++ new/usb-modeswitch-data-20160612/Makefile 2016-06-12 19:44:42.000000000 +0200 @@ -1,5 +1,5 @@ PROG = usb-modeswitch-data -VERS = 20160112 +VERS = 20160612 RM = /bin/rm -f PREFIX = $(DESTDIR)/usr ETCDIR = $(DESTDIR)/etc diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/gen-rules.tcl new/usb-modeswitch-data-20160612/gen-rules.tcl --- old/usb-modeswitch-data-20160112/gen-rules.tcl 2016-01-12 21:34:07.000000000 +0100 +++ new/usb-modeswitch-data-20160612/gen-rules.tcl 2016-06-12 19:44:01.000000000 +0200 @@ -11,7 +11,7 @@ # Default version string -set version "20160112" +set version "20160612" # 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-20160112/usb_modeswitch.d/046d:c261 new/usb-modeswitch-data-20160612/usb_modeswitch.d/046d:c261 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/046d:c261 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/046d:c261 2016-06-12 17:44:07.000000000 +0200 @@ -0,0 +1,5 @@ +# Logitech G920 Racing Wheel +MessageEndpoint=0x01 +ResponseEndpoint=0x01 +TargetClass=0x03 +MessageContent="0f00010142" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:98ff new/usb-modeswitch-data-20160612/usb_modeswitch.d/05c6:98ff --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:98ff 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/05c6:98ff 2016-06-12 08:53:42.000000000 +0200 @@ -0,0 +1,4 @@ +# U901 (LTE modem) +TargetVendor=0x05c6 +TargetProduct=0x6001 +SierraMode=1 \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:f000 new/usb-modeswitch-data-20160612/usb_modeswitch.d/05c6:f000 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/05c6:f000 2014-03-26 20:49:48.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/05c6:f000 2016-06-12 17:51:04.000000000 +0200 @@ -1,4 +1,5 @@ -# Siptune LM-75 ("LinuxModem") +# Siptune LM-75 ("LinuxModem"), EWangshikong 4G TargetVendor=0x05c6 -TargetProductList="0016,9000" +TargetProductList="0016,6000,9000" StandardEject=1 +MessageContent="5553424308306384c000000080000671030000000000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/10a9:6080 new/usb-modeswitch-data-20160612/usb_modeswitch.d/10a9:6080 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/10a9:6080 2014-03-26 20:50:18.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/10a9:6080 2016-06-11 13:25:42.000000000 +0200 @@ -1,4 +1,4 @@ # Pantech LTE Modem TargetVendor=0x10a9 TargetProduct=0x6085 -PantechMode=1 +PantechMode=2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:1573 new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:1573 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:1573 2015-10-27 21:04:17.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:1573 2016-06-12 20:50:08.000000000 +0200 @@ -1,2 +1,2 @@ -# Huawei ME909u-521 -Configuration=1 +# Huawei ME909u-521 (MBIM, handled by kernel, dummy config) +Configuration=0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:15c1 new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:15c1 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:15c1 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:15c1 2016-06-12 09:27:09.000000000 +0200 @@ -0,0 +1,2 @@ +# Huawei ME906, ME909 (MBIM, handled by kernel, dummy config) +Configuration=0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:1f1e new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:1f1e --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/12d1:1f1e 2014-05-29 14:57:00.000000000 +0200 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/12d1:1f1e 2016-06-11 13:25:26.000000000 +0200 @@ -1,4 +1,4 @@ -# Vodafone / Huawei Kxxxx +# Vodafone / Huawei K5160 TargetVendor=0x12d1 TargetProductList="157f,1592" HuaweiNewMode=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:1595 new/usb-modeswitch-data-20160612/usb_modeswitch.d/19d2:1595 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/19d2:1595 2016-01-12 20:39:14.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/19d2:1595 2016-06-11 13:30:19.000000000 +0200 @@ -1,5 +1,5 @@ -# ZTE MF710 (Vietnam) +# ZTE MF710 (Vietnam) a.o. TargetVendor= 0x19d2 -TargetProductList=0x1596 +TargetProductList="1592,1596,1600" StandardEject=1 MessageContent="55534243123456702000000080000c85010101180101010101000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/1bbb:025e new/usb-modeswitch-data-20160612/usb_modeswitch.d/1bbb:025e --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/1bbb:025e 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/1bbb:025e 2016-06-12 20:54:07.000000000 +0200 @@ -0,0 +1,4 @@ +# Yota 4G LTE W8 +TargetVendor=0x1bbb +TargetProduct=0x0195 +MessageContent="55534243123456788000000080000606f50402527000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a401 new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a401 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a401 2016-01-12 19:11:45.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a401 2016-06-12 14:02:48.000000000 +0200 @@ -1,5 +1,4 @@ # D-Link DWM-221 B1 TargetVendor=0x2001 TargetProduct=0x7e19 -MessageContent="5553424312345678000000000001061e000000000000000000000000000000" -MessageContent2="5553424312345679000000000001061b000000020000000000000000000000" +StandardEject=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a406 new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a406 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a406 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a406 2016-06-12 09:31:14.000000000 +0200 @@ -0,0 +1,4 @@ +# D-Link DWM-221 +TargetVendor=0x2001 +TargetProduct=0x7e19 +StandardEject=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a407 new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a407 --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a407 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a407 2016-06-12 15:22:02.000000000 +0200 @@ -0,0 +1,4 @@ +# D-Link DWM-157 C1 +TargetVendor=0x2001 +TargetProduct=0x7d0e +StandardEject=1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a40a new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a40a --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a40a 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a40a 2016-06-12 15:22:42.000000000 +0200 @@ -0,0 +1,4 @@ +# D-Link DWM-156 A8 (Myanmar) +TargetVendor=0x2001 +TargetProduct=0x7d10 +MessageContent="555342431234567800000000000003f0010100000000000000000000000000" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a40d new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a40d --- old/usb-modeswitch-data-20160112/usb_modeswitch.d/2001:a40d 1970-01-01 01:00:00.000000000 +0100 +++ new/usb-modeswitch-data-20160612/usb_modeswitch.d/2001:a40d 2016-06-12 15:10:43.000000000 +0200 @@ -0,0 +1,4 @@ +# D-Link DWR-910 +TargetVendor=0x2001 +TargetProduct=0x7e38 +StandardEject=1
