
History of USB_ModeSwitch
=========================

Version 2.6.2, 2025/02/19
    Bug in C code (with gcc 1.5) fixed
Version 2.6.1, 2020/07/10
    Wrapper now handles devices with non-continuous interface numbering:
    www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=2&t=2915&p=19605
    (thanks to Jakub Vaněk); catch error with retrieving the active confi-
    guration, exit gracefully: https://bugs.launchpad.net/bugs/1880191
Version 2.6.0, 2019/11/28
    Removed included libjim source alltogether; rewrote parts of the
    dispatcher script to make location of global config file into a
    parameter: --config-file, so it can be customised now;
    replaced tcl helper file for jim embedding with a sh script, dropping
    the install dependency on a tcl interpreter (Attention maintainers!);
    changed Makefile to prevent parallel build issues as reported here:
    http://www.draisberghof.de/usb_modeswitch/bb/viewtopic.php?f=2&t=2829,
    make targets have changed names (Attention maintainers!)
Version 2.5.2, 2017/12/31
    Bugfix release: fixed additional MessageContent parameters not working,
    reported by Frank Schmirler (see
    http://draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=18369 );
    fixed "early crash" when killed before libusb context initialization
    (see https://bugzilla.redhat.com/show_bug.cgi?id=1358472 ), reported
    by Lubomir Rintel;
    fixed bad string reference, reported by Lubomir Rintel, (see
    http://draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=18238 );
    fixed detection of systemd if /sbin/init is a cascaded symlink
    (see http://draisberghof.de/usb_modeswitch/bb/viewtopic.php?p=18218 );
    fixed quirk in help message from usb_modeswitch binary
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' <does this and that>"
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 ...
