Release Notes for JMRI 4.16 release
      
    Date: July 6, 2019
    From: Bob Jacobsen
    Subject: Production Release 4.16 of JMRI/DecoderPro is available for download.
We are very pleased to announce that the 4.15 series of JMRI test releases has resulted in a
version that's good enough to be recommended for general use, including by new users.
We're therefore making that version, "Production Release 4.16" available for download today.
Notes:
JMRI is now only available under the
GNU General Public License. For more information, please
see our
copyright and licensing page.
Update From Older JMRI Versions
If you are currently using JMRI 4.11.9 or earlier, we strongly recommend that you update to 
        JMRI 4.12 and make sure that's running OK before
        updating to this test release.  Once you have JMRI 4.12 running OK, 
        store your configuration and panel files and use those from then on.
        There have been a number of 
        changes in serial port support, panel file format and configuration options since those earlier releases, 
        and moving to the stable JMRI 4.12 release
        is a good way to work through any possible problems.
        
If you are currently using JMRI 4.7.3 or earlier on Linux or macOS (Windows doesn't need this), 
    you must 
    update to JMRI 4.12 and
    carrying out the migration process described in the JMRI 4.12 release note
    before updating to this release.
Known problems with this release
    - MERG CBUS - Throttle direction changes are not always sent to the Layout, resolved in 
        JMRI 4.17.2
 
    - LocoNet connections - New and updated LocoNet connections with this release might 
        end up with the wrong baud rate, which will cause them to not function.  
        This is resolved in  
        JMRI 4.17.3
 
These are serious enough that we recommend that users skip this release
and go straight to 
JMRI 4.18 instead.
New warnings for this production release:
- Since JMRI 4.15.7
    In some cases, existing C/MRI, TMCC, Oaktree, and Maple users
    might have to reset the connection rate in the preferences before a 
    serial connection will work with this version.  You only have to do this once, and only
    if the connection doesn't start up OK after updating from an earlier JMRI version.  In that 
    case, open the Preferences, go to the Connection pane, check the box for Advanced Preferences
    so they're visible, set the baud rate (connection speed) to some other value,
    then set it back to the correct one (this is so JMRI sees a change and stores it properly),
    then Save and restart. For example, if you want your C/MRI serial line to run at 19.200,
    you should open the Preferences, change the speed selection (in Advanced Preferences) to 9,600
    then back to 19,200, then save your preferences and restart. 
    
 
- Since JMRI 4.15.7
    The version of the JSON protocol used for JMRI web access has been bumped to version 5.0 due to backwards incompatible
    changes to make different JSON objects more internally consistent and to accomodate the ability to remove some
    objects. See the JSON Version
    History for more details.
    Specifically, due to underlying changes in the Operations web access, 
    train manifests will need to rebuilt before web access to train manifests works.
    
 
- Since JMRI 4.15.6
        Remembering the location and size of layout panels created and maintained
        using Layout Editor, Panel Editor, Control Panel Editor, and Switchboard
        Editor is no longer dependent on saving the panel.  The location and size
        values are retained using the same processes used by other JMRI windows.  This
        makes the window management behavior consistent.  To continue using the
        old behavior, go to Preferences >> Display and enable
        Use old location and size logic for editor panels.
 - Since JMRI 4.15.6
        Starting in JMRI 4.15.6, Memories
        must have valid system names of the form "IM" folllowed by something.
        "IM123" and "IMEAST" are both valid. 
        The system name "IM", all by itself, has never been valid, but JMRI 
        will now be enforcing that:
        
            - You won't be able to create a memory with that name via
                the Memory table or scripts
            
 - If you have that name in a panel file, an error will be 
                logged and the panel file won't load. You'll have to 
                remove it from the file or rename it in the file
                before loading it.
        
 
        JMRI needs to start enforcing this in preparation for some
        future code that will appear later this year.
 
- Since JMRI 4.15.5
        The handling of Turnout system names has been updated
        to be (more, hopefully completely) consistent with the
        planned approach.
        Specifically, case now (generally) matters in system names:
        
            - You can now have an internal turnout named "ITsome lower case name".
            
 - But note you can no longer refer to "ITSOME LOWER CASE NAME" or
                "ITSome LoWeR cAse Name" and get the same one.
        
 
        This should not require any migration for stored configurations or 
        panel files, as they have been automatically been being kept consistent 
        since JMRI 4.8.  But you might have case errors in i.e. scripts which
        will fixing inconsistent references in your scripts.
        Of course, bugs are always possible. If you find a place where 
        names seem to be handled inconsistently, please let us know!
 - Since JMRI 4.15.4
        The calculation of Turnout Addresses for the
        
        Direct DCC Accessory Command ("a" command) mode
        has been fixed (commands are now sent to the correct accessory address rather
        than 4 less than the nominated hardware address). For pre-existing panels,
        changes will need to be made to either the actual decoder address or the panel.
        If help is required, ask on the
        
        jmriusers group.
 - Since JMRI 4.15.3
        The prefix that identifies a layout connection should be a single letter, like "N" or "L",
        or a letter and some digits, like "K2" or "D3". Some older systems used to have
        longer "legacy system prefixes" like "DX", "DCCPP", "DP", "MR", "MC", "PI", and "TM".
        Those legacy system prefixes
        will now cause JMRI to issues a warning at startup. In this release, JMRI will
        still work with those prefixes, but they will need to be migrated to the proper form soon;
        JMRI 4.17.1 and later will require that this have been fixed.
        Therefore, this warning can't be suppressed
        without migrating the prefix in the connection configuration (and any associated
        panel files and scripts).
        If you're getting this warning and therefore need to do that migration,
        migration page.
 
Older warnings
See the 
JMRI 4.14 release note for more warnings predating the 4.15 development series.
These may be relevant to you if you're updating from an earlier version.
- Since JMRI 4.11.4
    There are issues with the Pi-SPROG One command station operation. A number of workarounds should be applied:
    
        - Do not turn on the track power until the power supply to the Pi-SPROG ONE is turned on
 
        - Do not enable extra debugging through default.lcf, nor open the system console window
 
        - Do not open the SPROG console window
 
        - Disable power conversion (CV 29) in all locos
 
        - If connecting via VNC (or similar), setup the screen layout before turning on the track power
 
    
    Pi-SPROG One with version 2.4 or earlier firmware will cause a timeout after a track short circuit. A dialog box will
    open to inform the user of this. The track power will be turned off and must be turned on again using the power control.
 
      
Download links:
Please note that the download links in this and future JMRI releases link to
Github servers.
People are welcome to distribute the download files further via other websites, etc.
If you want to check that you've received original, unmodified versions, please
check the files against the checksums shown below.
This production version is made from test releases 4.15.1 through 4.15.9.  The 
full list of changes
in those is 
available from our code repository.
    
Hardware Support
        DCC++
        
            - 
                The calculation of Turnout Addresses for the
                
                    Direct DCC Accessory Command ("a" command) mode
                has been fixed. Commands are now sent to the accessory address entered in
                the JMRI Turnout Table. (Dave Heap)
            
 
            - 
                The DCC++ Traffic Monitor no longer crashes when attempting to display some commands.
            
 
        
        Hornby
            
                - Improve the sequence of messages used when programming with the Hornby Elite
 
            
        LocoNet
            
                - "PR3 Standalone Programmer" mode has been updated so that only one LocoNet menu will be displayed, instead of displaying two menus.
 
                - Digitrax connections now support PR4, DCS240 and DCS210 via uniquely named connection types.
 
                - Addresses a problem when track power status is changed on the DCS52 which can cause a JMRI code failure.
 
                JMRI's support for the Digitrax PR4 has been updated to
                    reflect the PR4's inability to provide
                    "LocoNet Data Signal termination". 
                    This is a correction to JMRI's previous implementation of
                    PR4 functionality.  It reflects a a more-accurate understanding
                    of PR4 features by the JMRI development team.
                    When configuring a JMRI "connection" for the PR4, the "Command
                    station type" of "Stand-alone LocoNet" is no longer available.
                    Users with an existing PR4 connection which has been configured
                    for a "Command station type" of "Stand-alone LocoNet" should
                    change their "Command station type" to some other selection,
                    such as "DCS100", and save the configuration profile.
                    Because LocoNet requires some source of "LocoNet Data Signal
                    termination", and because the PR4 is not capable of providing
                    that feature, it will be necessary to provide it using some
                    other piece of LocoNet hardware.  Both commercially-available and
                    do-it-yourself options are available, as described in the
                    "
                    LocoNet Data Signal termination" section of the JMRI
                    
                    Standalone LocoNet" help page.
                 
                - 
                    Track Current support for the DCS240,DCS210 and DCS52 has been added.
                
 
                - 
                    Turnouts can now be configured to send only a single LTnnn command (ON)
                    instead of an ON followed by OFF, and turnouts can also be configured
                    to bypass a command station "Bushby" feature as described in Command Station Turnout Command Rejection Avoidance Strategies
                
 
            
        MERG CBUS
            
                - Steve Young made multiple improvements
 
                - Turnouts now accept DIRECT and DELAYED feedback.
 
                - Querying a turnout will also query any feedback sensors for that turnout.
 
                - Event Request monitoring has moved from the Event Table to a stand-alone request monitoring table.
 
                - The CBUS console will attempt to lookup event ( and node ) names from the Event Table.
 
                - CBUS
                Node Manager provides a Node Table with further Node Configuration tools.
 
                - CBUS Event Table name import from MERG FCU file has moved to the Node Manager,
                where a file preview and further import tools are now available.
 
                - Track Current meter avaiable for supported Command Stations via
                PanelPro > Tools > Track Current Meter
 
                - Fixed issue with Roster speed-profiling
 
                - CBUS Reporters are no longer automatically created when hearing a DDES or ACDAT CBUS OPC.
                    
New CBUS Reporters can now be created in a sequential range.
                 
                - Increased support for stealing / sharing command station sessions, see
                    CBUS Hardware Support
 
                - Update some node identification information
 
            
        MQTT
            
                - The updated MQTT support in this release
                    
                    - allows you to change the topic string used for publishing and subscribing and
                    
 - allows changing the payload
                    of MqttTurnouts, i.e. to use JSON instead of fixed strings.
                    
 
                    For more information, see the description at the bottom of the
                    MQTT page.
                     
            
            
        Roco z21/Z21
            
                - Paul Bender added support for RMBus sensors
 
                - Fixed Delay in throttle message processing
 
            
        SPROG
            
                - Added fixes for SPROG bootloader client
 
            
        XpressNet
            
                - Added support for Idle mode to the power manager.  
                    This indicates a global emergency stop (track power on, all locomotives stopped)
 
            
    New / Updated decoder definitions
      
        - Dave Heap improved how the decoder identification process handles optional CVs
 
     
        CT Elektronik
            
                - Nigel Cliffe added a decoder definition for the
                    NGS custom CT decoder
 
            
        Digitrax
            
                - Fixed an issue in CV11 of SFX Series 6 decoders
 
            
        ESU
            
                - 
                    ESU LokSound decoder users can now read the loaded Sound Project Name
                    (and other decoder information) on the Information Pane.
                    
                    This allows cross-referencing to the ESU website
                    (copy the "Loco Name" to search the Projects section) in order to
                    find the ESU bulletin and hence determine
                    Sound Slot and Function Key names. (Dave Heap)
                 
                - Added the Essential Sound Unit (an OEM-only decoder).
 
                - Added the LokSound 5 family.
 
                - Added the SUSI Map to those V4/5 decoders that support it.
 
                - Split the Sound Pane into two panes - "Sound" and "Sound Levels".
 
                - Improved the speed of Import->LokProgrammer CV list file.
 
            
        Hornby
            
                - Brian Jackson updated the Hornby TTS definition
 
            
        Kuehn
            
                - The Kuehn N025/N45 definition was updated
 
            
        Lenz
            
                - Added connection option for the Lenz LZV200
 
            
        RR-CirKits
            
                - The RR-CirKits Motorman definition was updated
 
            
        SoundTraxx
            
                - Michael Mosher fixed a bug in GP35 SP CV54
 
		        - Michael Mosher added more models to Athearn ECO OEM file
 
		        - Michael Mosher added more models to Athearn Genesis TSU2 OEM file
 
            
        TCS
            
                - 
		            Add Trim CV to Basic Speed Control pane
 
		        - 
		            Add WOW Ver 4 Prime decoder (Michael Mosher)
 
                - Fix FN ditch light
 
            
        Uhlenbrock
            
                - A new definition was added for the 73xx5 IntelliDrive2 decoders. It also works on two Piko 4.1
                sound decoder models.
                The definition is still under development and not complete. Please report read test results on
                your hardware. 
            
        ZIMO
            
                - Ronald Kuhn did a lot of work on the Zimo definitions, including adding V37 definitions
 
            
    DecoderPro
        
        
            - Added "Accept All" button to roster import
 
            - Dave Heap improved how the decoder identification process handles optional CVs
 
            - Decoder definitions for indexed-access CVs can now use a "81=23.40" (cvFirst = false) /
            "40.81=23" (cvFirst = true) syntax to specify an alternate PI and/or SI CV.
            The previous syntax continues to work unchanged.
             
            - "output" definition elements can now be included in the "family" element, or
            via including a fragment file.  The 0NMRA.xml file has an example of this.
            
 - 
                Changes to
                Split Variables.
                
                    - 
                        More than 2 CVs can be specified for
                        splitVal
                        and the other new types, using a new notation format.
                    
 
                    - 
                        A new
                        splitHexVal
                        type for hexadecimal entry/display.
                    
 
                    - 
                        A new
                        splitDateTimeVal
                        type for Date/Time information stored across CVs
                        (e.g. dates in the RailCom® CV page).
                    
 
                    - 
                        A new
                        splitTextVal
                        type for entry and display of text strings stored across CVs .
                    
 
                
                For more information see
                Advanced Decoder Definitions. (Dave Heap)
             
        
    Internationalization
        
        
            - Petr Šídlo improved the Czech translation
 
        
    Layout Editor
        
        
	   - Dave Sand improved tooltip handling
 
           - The Save Location and Size Options menu item is
              not displayed when automatic location and size behavior is active.
              See the above warning.
 
           - Color for new tracks is now consistent within a single Layout Editor.
 
           - Turnouts, level crossings, track segments and positional points (A/EB/EC) cannot
              be deleted if signal heads, signal masts or sensors have been assigned to the item.
              Also, an edge connector cannot be deleted if the link is defined.
 
	   - Fixed a problem with deleting edge connectors or end bumpers that did not
              have an attached track segment.
 
        
    Panel Editors
        
        CTC Tool
            
            
                - A new CTC tool has been added to JMRI.  An Editor component uses
                a set of screens to define the CTC system.  The resulting data can
                be used to create a USS CTC Panel (Panel Editor) with all of the
                levers, indicators, and a minimal track plan with turnouts and
                signals.  A run time component uses the configuration to implement
                prototype CTC logic with no scripting or Logix.
 
            
    Operations
        
        
            - Due to underlying changes in the Operations web access, train manifests will need to rebuilt before web access to train manifests works.
 
        
    Roster
        
        
            - Added "Accept All" button to roster import operation
 
            - Improved handling of timestamps for the last run and running duration features
 
        
    Turnouts, Lights, Sensors and other elements
        
        
            - Fixed an issue where Reporters with a system letter of M
                were erroneously tagged as 
                requiring migration.
 
            - RailCom Tags now appear in the ID Tag table and are available to operations and other tools just like other Identifiable tags.
 
            - LocoNet reporters now report a Transponding Tag object instead of a string.  This object allows extracting the address without further parsing.  As with RailCom tags, these also apear in the IdTag table and are available totools such as operations.
 
            - Internal Reporters can now collect information.  An example showing how to use this feature is available here.
 
            - The handling of Turnout system names has been updated
                to be (more, hopefully completely) consistent with the
                planned approach.
                Specifically, case now (generally) matters in system names:
                
                    - You can now have an internal turnout named "ITsome lower case name".
                    
 - But note you can no longer refer to "ITSOME LOWER CASE NAME" or
                        "ITSome LoWeR cAse Name" and get the same one.
                
 
                This should not require any migration for stored configurations or
                panel files, as they have been automatically been being kept consistent
                since JMRI 4.8.  But you might have case errors in i.e. scripts which
                will fixing inconsistent references in your scripts.
                 
            - The table and manager containing the element are no longer listed as items using the element when deleting the
                element in the delete confirmation dialog. The count of items using the element shown in the delete confirmation
                dialog now match the number of items shown to be using the element.
 
        
    Scripting
        
        
            - Geoff Bunza provided sample scripts supporting bulk 
            sensor channels
            and
            turnout channels
            via USB between JMRI Sensor and Turnout Tables and Arduino interfaces to hardware.
            For more information, see the Readme files linked in the previous sentence.
            
 - The handling of how throttles are released has changed.
                
                Old syntax: self.throttle.release() 
                New syntax assuming no throttle listeners in script: self.throttle.release(None)
                Custom scripts that release throttles may need to be modified.
                
                    - AutoDispatcher2
 
                    - RobotThrottle2
 
                    - RobotThrottle3
 
                    - RocoCrane
 
                    - Zimo Programmers
 
                
            2 lines in scripts that use the
            DCCThrottle.py Jynstrument may need to be added,
            Insert after line 141
            New line 142 : def notifyDecisionRequired(LocoAddress, decision):
            New line 143 : pass #
            These changes were made to enhance the JMRI Steal / Share mechanism for hardware types that support this.
             
        
    Signals
        
        Signal Systems
            
                - Petr Šídlo updated the Czechoslovak state railway Elektrosignal Praga (CSD ESP) definition
 
                - Dick Bronson corrected a bad link to an image in the PRR-1956 definition
 
            
        Signal Heads
            
                - Fix an XML validation problem when reading files with RGB heads
 
            
        Signal Masts
            
                - Better messages when a Turnout Signal Mast encounters errors
                    due to part of its configuration not completed.
 
                - Better reporting of issues when Signal Mast Logic encounters
                    a problem with a Signal Mast
 
                - Output Matrix Signal Masts now allow to set a mast-specific delay interval between the individual
                commands sent to the connected Turnout outputs.
 
                - A bug was fixed that wrote the wrong mast system name as Comment in the Turnout outputs.
 
            
	    USS CTC Logic
            
                - Updated how lock information is
                    stored in the 'logging memory'
                    so that it can be displayed e.g.
                    on a panel.  For more info,
                    see the
                    help page
 
            
    Timetable
        
        
            - Dave Sand made multiple updates to the Timetable support
 
	    - Added the ability to print a train graph.  An item has been
	    added to the Timetable menu to print the graph using two pages.
 
            - New menu item: Export CSV File — Create a
            CSV file that can be imported into a spreadsheet program.  This can
            be used to create a traditional timetable.
 
            - New menu item: Import CSV File — Import a
            CSV file that contains external timetable data to create a new
            layout defintion or extend an existing layout definition.
 
        
   Virtual Sound Decoder
        
        
            - Klaus Killinger added "headless" mode, i.e. running VSD without a graphical user interface.
	            See the documentation for details.
 
            - Klaus Killinger added functionality to handle a throttle direction change at speed > 0:
                slow down to 0, change the direction, ramp-up to the old speed.
 
            - The engine sound will continue after an Emergency Stop.
 
        
   Warrants
        
        
            - Pete Cressman updated how Warrants interact
 
            - Down ramps used by NXWarrants and are also used when speed changes required by signals, occupancy 
            	conditions or user interventions occur. The throttle settings generated for down ramps have been modified. 
            	The throttle setting is increased by 10% at each time interval. Also, the last throttle interval now is always the throttle
            	interval as specified in Warrant Preferences. Accuracy of the position where the train stops should be improved.
            
 
            - A bug where looped routes ending at an adjacent block could be missed by the Find Route algorithm has been fixed.
            
 
            - A stop button to halt execution of the Find Route Operation has been added.
            
 
            - The dynamic recording of speeds during sessions has been extended. A weighted average of the speed over a block is recorded to
            	the session speed profile.  These speeds may be edited and merger into the Roster SpeedProfile according to the settings
            	selected in WarrantPreferences. 
            
 
            - A bug where a Halt at zero speed would not restart has been fixed. Scripts now resume at any command where the user does a Halt.
            
 
            - The "Run Warrant" command linking warrants now executes for all cases.
            
 
            - A bug when dragging an unnamed Portal icon in CircuitBuilder might cause a freeze has been fixed.
            
 
            - Deleting an OBlock will also delete all other elements (Portals and Paths using the block). Previously when saved after such editing, 
			    any warrants referencing the deleted block would re-register the OBlock when the panel was re-loaded. Now such warrants are loaded, but 
		        will indicate that editing is needed to establish a correct route for them.  
            
 
            - A checkBox to suppress the generation of sound commands has been added to the create NXWarrant window.
            
 
            - TextFields have been added to the create NXWarrant window so ramp parameters can be modified.
            
 
            - Missing help pages have been added to the sidebar index.
            
 
            - Circuit Builder has more error help and ease of use features. The help page is updated.
 
            - 40 scale feet has been added to the ramp down distance.
  
        
   Web Access
        
        
            - Multiple updates to the JSON service:
                
                - JSON clients can now add, edit, or remove Blocks, IdTags, LayoutBlocks, Operations Locations, Operations Cars,
                    Operations Engines, Operations Tracks, Reporters, and Sensors.
 
                - JSON clients using WebSockets can now include an 
id property in the message to match a direct response
                    to a message to the original message. 
                - The JSON protocol version has been bumped to version 5.0 due to backwards incompatible
                    changes to make different JSON objects more internally consistent and to accomodate the ability to remove some
                    objects. See the JSON Version
                        History for more details.
 
                - JSON schema are, with the exception of consists, usable, even when JMRI is running on a computer not connected to
                    the internet. See the JSON
                        Schema for more details.
 
                
             
        
    Miscellaneous
        
        
            - Fixed a compatibility problem when reading files containing timebase information
 
            - We're building the release note a
                different way
                starting with this release.
 
            - All the PackageList test files were updated to JUnit4 form, without a separate main()
 
            - The Windows "installer" and "launcher" have been updated to support 
                Oracle's Java JDK 11 installation mechanisms on Windows platforms.
 
            - Starting with this release, 
                legacy system prefixes
                will cause JMRI to issues a warning at startup.  This warning can't be suppressed
                without migrating the prefix in the connection configuration (and any associated
                panel files and scripts).
                For help with that, see the 
                migration page.
 
            - Fix bug with launcher on Windows introduced when adding JDK 11 support in 4.15.3. This caused JMRI to not launch on certain 64-bit Windows systems that had only a 32-bit Java installation.
 
            - Fixed occasional problem where an item in the Turnout, Sensor, Memory or Light table couldn't be deleted.
            
 - JSON protocol documentation updated. (#6777)
 
            - JSON services no longer automatically listen for changes to objects provided to a client unless the client explicitly requests the object. (#6777)
 
            - NamedBeans now allow property change listeners to listen only to specified properties. (#6777)
 
            - Add new 
TestWaitsForever test class to allow end-of-job debug. 
            - The 
jmri.util.ColorUtil.stringToColor() method now throws an
                IllegalArgumentException if unable to turn a String into a Color instead of returning the Color Black.
             
            - The Help Index and Table Of Contents were updated and expanded to include the current Hardware
                systems.
                In the process we discovered that additional instructions for many of the new tools are welcome.