History of USB_ModeSwitch ========================= Version 2.5.1, 2017/08/06 New parameter "HuaweiAltMode", uses an alternative Huawei standard bulk message which will either provide NCM (newer modems) or plain PPP ports (older modems); new option in the global configuration file "HuaweiAltModeGlobal", allowing easy override of "HuwaeiNewMode" with "HuaweiAltMode"; reworked USB configuration switching, configuring a device reset first before setting the target configuration; improved driver detachment, now taking all configured interfaces into account Version 2.5.0, 2017/01/17 ATTENTION: Parameter transmitted from udev now reduced to %k (kernel name), however, rules file parameters can be '%b/%k' or '%k' - this fixes issues with parameter handling by the systemd unit file; remove endpoint reset ahead of bulk message transmission, only reset if endpoints are actually stalled, helping with quirky device behaviour (see www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=2&t=2582 ); stability fix by making a buffer in the config parser static, preventing problems seen in Fedora (thanks to Lubomir Rintel for patches and hints regarding the three previous issues); removed premature driver unbinding in wrapper which could disrupt certain devices already in target mode (reported by Aleksander Morgado); improved check for determining install mode (essential with generic config files present, e.g. 12d1:#linux) 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 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 interface 0 from dispatcher, enabling new multi-config devices in data package 20151101 Version 2.2.5, 2015/07/16 Fixed bug in configuration check, possibly leading to segfault (thanks, Leonid Lisovskiy); fixed Pantech commandline parameter evaluation (was not working at all); added driver unbind step via sysfs in wrapper, getting rid of the USB subsystem complaint "interface 0 claimed by usb-storage while 'usb_modeswitch' " Version 2.2.4, 2015/07/14 Fixed buggy check of USB configuration selection (possibly leading to segfault), tested with Alcatel X602D; removed call to 'libusb_strerror' from libusb initialization - not available in earlier libusb1 versions Version 2.2.3, 2015/06/29 Fixed problem arising with systemd version 221 (220 untested), which affects starting the usb_modeswitch systemd unit from the sh script (reported by Archlinux users) Version 2.2.2, 2015/06/27 Added catch for libusb init error (thanks, Henrik Gustafsson); removed global function result variable; added catch for USB configuration read error (both thanks to "otila"); fixed wrapper script where port search for symlinking modem port was broken ("/dev/gsmmodem"); changed PantechMode parameter to represent different targets; added global config option to disable MBIM checking and setting alltogether (request from "kai"); changed udev sh script so that systemd processing takes precedence over upstart; changed systemd template unit parameter to avoid escaping problems Version 2.2.1, 2015/01/15 Fixed unreliable switching function for Cisco AM10 Version 2.2.0, 2014/05/29 Introduction of parameter "HuaweiNewMode", wrapping the standard bulk message for all newer Huawei devices; support for generic fall-back config files, combined with OS switch (per vendor ID), implementation to use a specific switching command on Android for all Huawei devices (see README of data package for details); this change was suggested by Huawei Version 2.1.1, 2014/03/27 Code cleanup, better use of libusb1; this also fixes problems with determination of the active USB configuration (Samsung, Option modems); "Interface" parameter was not working as expected, fixed (see also: https://bugs.launchpad.net/bugs/1261923 ); fixed bogus interface release in "inquire" function, again a report by "Sonya@zte" Version 2.1.0, 2014/01/28 ATTENTION: -I flag meaning reversed, default is to skip SCSI inquiry; introduction of StandardEject, replacing many MessageContents with the same function, reducing size of device config files, and always including the 'Allow Medium Removal' before ejecting (thanks to Lars Melin for the idea); fix in "bulk_read", removing bogus CSW request (report from "Sonya@zte") Version 2.0.1, 2013/09/03 Fixed stupid string size bug which could lead to memory corruption (thanks to Leonid Myravjev) Version 2.0.0, 2013/09/01 Switched to libusb1.0, with much help from folks of the wl500g project (http://wl500g.googlecode.com): Vladislav Grishenko, Leonid Lisovskiy, Roman Samarev, Andrey Tikhomirov; major code and debug output cleanup; man page corrections and additions (thanks to Thomas Haller); experimental systemd and upstart integration, if present (Explanation: newer udev versions kill all subprocesses, detached or not. The suggested way to handle longer running processes like the usb_modeswitch_dispatcher is to add simple services or tasks and start these by sending signals from the udev rule) !! Attention, system integrators: a crude install facility is included in the Makefile to check if "upstart" or "systemd" is active and to install the matching service file; you may want to adapt it better to your respective system, possibly adding dependencies/targets to the services. Note that the udev starter script usb_modeswitch.sh also checks for the existence of the service/unit files Version 1.2.7, 2013/08/07 Two new dedicated control message functions to support Pantech LTE (thanks to Adam Goode) and Blackberry Q10/Z10 (thanks to Daniel Mende) Version 1.2.6, 2013/06/02 Several changes to streamline compiling as part of larger projects (thanks to Nicolas Carrier), mostly in Makefile; fix compiler warnings appearing in certain build environments (N. Carrier); new Quanta procedure (thanks to Andrey Tikhomirov) for Quanta 1K3 LTE; fix for error with cascaded hubs in dispatcher script (hint from N. Carrier) Version 1.2.5, 2012/11/09 Initial support for MBIM devices, use with data package >= 20121109; checking for these is the automatic default, new parameter NoMBIMCheck prevents the check per device in case of problems; new global option to set "delay_use" of usb-storage (as low values may prevent mode-switching); fix for handling multi-configuration devices (thanks to Bjørn Mork for advice) Version 1.2.4, 2012/08/12 Additional interface checks to prevent sending UFI commands to non- storage interfaces (prompted by more ambiguous device IDs popping up); change in SierraMode for handling newer devices which caused an error abort before; Makefile fix for parallelized make runs Version 1.2.3, 2012/01/28 Fixed two bugs both causing the embedded-jimsh install variant of the dispatcher crash (the "pure-script" install variant was NOT affected); fixed some "regexp" incompatibilities with Debian's libjim Version 1.2.2, 2012/01/19 Fixed bad bug preventing mode switch for devices using TargetClass; improved logging in case of negative success check Version 1.2.1, 2011/12/26 Fixed possible ambiguities when multiple identical modems are plugged synchronously; this is achieved by adding -b and -g parameter (busnum and devnum) for proper id'ing; some resulting workflow changes and shortcuts in "system integration" mode (use sysfs/wrapper for success control, reduce informative checks); improved hub usage robustness; future data packages can be ridded of redundancies (default ID, success check parameters), resulting in smaller files; fixed bad bug which may prevent switching completely when logging is not activated; fixed possible overflow in dispatcher C code (thanks to Gilles Espinasse) Version 1.2.0, 2011/10/23 Added QisdaMode for Qisda H21 (thanks to Chi-Hang Long for the code); dispatcher can now be installed with an embedded interpreter, so that Tcl is no longer required; added command line options for binary program to accept configuration data via stdin or as a long string parameter - this fixes the bug with non-writable temporary file during boot; reversed skipping of pre-switching delay, which has caused problems; fixed potential buffer overflow (thanks to Rafael Silva for the find); get first interface right even on some broken devices (thanks to Alexander Gordeev for the patch); increased post-switch delay before driver binding to avoid possible conflict with usb-storage Version 1.1.9, 2011/08/05 Added CiscoMode for Valet device; additional checking for CDC ACM device to prevent erroneous driver loading after switching; no more post-switch check for access to initial device if target parameters are given Version 1.1.8, 2011/06/19 Cleaned up switchSendMessage(); added workaround for quirky devices not reporting configuration setting; added non-CSW response for arbitrary bulk transfers; added SequansMode and MobileActionMode; check for active configuration will be skipped if bNumConfigurations is 1 (most cases) Version 1.1.7, 2011/02/27 Attention: paths for runtime files and database have changed! Old places will be found but are deprecated; /usr/share/usb_modeswitch for database, /var/lib/usb_modeswitch for "remembered" IDs; fix for configuration setting race (thanks to Amit Mendapara); discovered incompatibility between Tcl versions <= 8.3 and >=8.4, so 8.4 is the minimum prerequisite now; first availability of an alternative source pack which includes "jimsh", a fast Tcl mini shell, intended for resource-constrained systems Version 1.1.6, 2010/12/22 Moved warm-boot driver binding to sh wrapper, was unreliable in 1.1.5; sh wrapper overhaul, made compatible with Ubuntu's "dash" shell, tclsh calls reduced further; initial device checking includes current bConfigurationValue now, should work with config setting for multiple devices; made tcl script conform to limitations of "jimsh", the minimal tcl shell (hint from Barry Kauler); fixes for "usbserial" fallback (driver binding for old systems); in the C program, changed parameter "MessageDelay" (hitherto unused) to "ReleaseDelay", to be used in one device configuration (delay interface release after bulk message sending) Version 1.1.5, 2010/11/28 Added special control message for Kobil devices (patch from Filip Aben); try to get active configuration for interface class checking (there are some new devices 'switching' via configuration selection); fixed "0000" target product ID - again; new bash and tcl wrapper logic: the convenience functions for driver binding and symlinking will now start the tcl shell ONLY for known devices; changed and appended logging capabilities of said convenience functions; add loading of "usbserial" as a fallback for older systems to support new devices; add workaround for bug in libusb1 which affects device search during success check Version 1.1.4, 2010/08/17 The package should work at boot time now (cold and warm); product IDs of "0000" do exist but were not accepted, fixed (thanks to Sakis Dimopoulos); response endpoint is now always detected (led to possible error report when resetting all endpoints in version 1.1.3); wrapper script can now work with a packed collection of config files as well as with the plain folder of files; use with the "install-packed" make target of the data package (for use on systems with resource constraints); wrapper fix for the symlink feature: handling of multiple interrupt ports was incomplete; wrapper does not longer use a temporary file for the symlink feature (security considerations, Marco d'Itri) Version 1.1.3, 2010/06/21 Added delay option to separate multiple message transfers by millisecs; fixed (possibly dangerous) sloppy string handling (thanks to Christophe Fergeau); added "clear_halt" for response endpoint; small additions in Makefile (install with -D); changes in option handling (NO MORE DEFAULT CONFIG FILE!) and help text; symlink feature in wrapper can now cope with devices providing more than one interrupt port; wrapper now ignores package manager leftovers in config folder; replaced bash-specific syntax in wrapper; changed ZTE skipping (if existing rules are found) to warning Version 1.1.2, 2010/04/18 Added support for two additional bulk messages; wrapper handles special ZTE case; generalized driver loading, new parameter "DriverModule" and "DriverIDPath"; new wrapper facility to add symlink pointing to interrupt port (used in rule file from data pack >= 20100418) Version 1.1.1, 2010/03/17 Attention: old usb_modeswitch.conf renamed to usb_modeswitch.setup! Add separate config file for wrapper (global settings for switching and logging); add config file option to disable driver loading; handling of kernel attribute AVOID_RESET_QUIRK added; bug fixed in SonyMode (reported by "no-0n3"); bug fixed in SuccessCheck logic; minor flow alignments and fixes; new devices Version 1.1.0, 2010/01/24 Attention: wrapper script location changed, uninstall old versions! Major fixes in the wrapper script (stabilizing and time-saving); back to unified installation, defaults to "integrated" approach; new -D parameter to enable "integrated" behaviour; bugs fixed in success check; man file included (borrowed from the Debian package); C code and binary works with the compat library from libusb-1.0; some new devices Version 1.0.7, 2010/01/06 Bug fixed for Sony mode, thanks to Marco Chiaranda; fix for parameter substitution in newer udev versions, fix for bad bug in wrapper script practically disabling automatic mode Version 1.0.6, 2009/12/21 New "GCT Mode", fixes for device quirks (NXP Dragonfly), fix for multiple Huawei devices, cleanups, loads of new devices in config file and database, minor tcl script changes Version 1.0.5, 2009/08/26 More changes and fixes regarding success check; "--version" option; config "database" updated Version 1.0.4, 2009/08/23 Success check bugs (and others) fixed Version 1.0.3, 2009/08/20 Success check improved; experimental system integration (fully automated), optional; new parameter "TargetProductList" needed for this; other necessary small adaptations; more devices Version 1.0.2, 2009/06/10 Output bugs fixed Version 1.0.1, 2009/06/08 Added output of descriptor strings for further identification Version 1.0.0, 2009/06/01 Attention: possible incompatibilities for command line control! On/off flags don't require arguments anymore (-H, -S, -O, -d, -R, -n, new: -I), meaning "-R 0" does a reset like "-R 1" or "-R"; long option names changed to standard format (e.g. --HuaweiMode to --huawei-mode); added device inquiry, for future help with device identification; catch error -19 as possible success; send and response endpoints now autoselected (consequently NeedResponse is back); new devices Version 0.9.7, 2009/04/15 Updated SonyMode, MD 400 now stable; automatic default endpoint detection from Andrew Bird Version 0.9.7beta, 2009/03/15 Major code clean up, optional success control (both suggested by Daniel Cooper), new devices Version 0.9.6, 2009/01/08 Special modes added for Sierra and Sony Ericsson, new devices Version 0.9.5, 2008/10/27 New options for USB tuning (jokedst), lots of new devices, clean up Version 0.9.4, 2008/06/09 Compat fix for libusb on FreeBSD quirks, more devices Version 0.9.4beta2, 2008/03/19 Successful udev device release fix Version 0.9.4beta, 2008/03/16 Multiple device support Version 0.9.3, 2008/03/09 More devices, no changes from beta version Version 0.9.3beta, 2007/12/30 New TargetClass parameter for recent Option firmware (Paul Hardwick), more devices Version 0.9.2, 2007/11/02 New Huawei mode (code from Miroslav Bobovsky, added by Denis Sutter), more devices Version 0.9.1beta, 2007/09/04 (jokedst) Added command line parsing, cleaned up config stuff, doc updates Version 0.9beta, 2007/08/15 Name change from "icon_switch", parameter file and generalizing Version 0.2, 2006/09/25 Code cleaning, more messages Version 0.1, 2006/09/24 (as "icon_switch") Just very basic functionality ...