Release Notes for JMRI 4.9.2 release
Date: August 13, 2017
From: Bob Jacobsen
Subject: Test Release 4.9.2 of JMRI/DecoderPro is available for download.
This is a test release. Please post a note if you encounter any new or old bugs! And please back up your JMRI files before installing this, in case you want to go back to an earlier version.
This is the second in a series of test releases. We expect this series to end in the next JMRI production release around the end of 2017. (See the tentative release schedule)
Some of the changes involved are quite extensive. They may require a certain amount of experience before they are working well. Therefore, this test release should be considered experimental.
Required Migration StepSince JMRI 4.7.4JMRI was updated in JMRI 4.7.4 to use a new serial library. Depending on your exact circumstances, you may need to do some migrations:
- If you are using JMRI on Linux or Mac OS X and are updating from an older JMRI version,
you must open the JMRI preferences and make sure that the selections are
correct for your serial device(s). Be sure to save the changes.
In general, previous versions used serial device names like "/dev/cu.usbserial-ABC123FG". This version will generally omit the prefix, and use serial device names like "cu.usbserial-ABC123FG". (If given the choice if a name starting with "tty" and one starting with "cu", pick the "cu" one). See the before and after images to the right.
- If you are using Linux and have previously used the "JMRI_SERIAL_PORTS" option to make sure your serial device is visible to JMRI, you'll have to change that to use the "purejavacomm.portnamepattern" option instead. See the JMRI Linux install page for more information.
If you have your own JMRI scripts to access a serial device, you'll have to update
their library references:
import gnu.iostatements will have to be replaced by
- More generally, any reference to
gnu.io, e.g. a reference to a class like
gnu.io.SerialPort, statements will have to be replaced by a reference to the corresponding
Known problems with this release
- Some users are reporting the program is incredibly slow to start, even
crashing during startup.
This version has a problem processing a
decoderIndex.xmlfile in the profile directory that can cause this. The work-around is to go to the profile directory and remove that file. JMRI will recreate it if it needs it.
- JMRI now saves the Uhlenbrock connection's "baud" rate as an Internationalized string, and, upon loading a configuration profile, requires an Internationalized "baud" rate in the .XML file. JMRI will fail to properly configure the serial port if the "baud" rate from the configuration profile does not match one of the baud rate strings for the current Internationalization "locale". If you experience problems where JMRI start-up of a Uhlenbrock-based connection does not configure the serial port, it may be necessary to edit the connection's preferences, select the appropriate "baud" rate, and save the connection. This updates the configuration profile .XML file to use one of the "baud" rate strings expected by the Uhlenbrock-specific code in JMRI. It is necessary to re-start JMRI for this change to take effect.
New warnings for this release:
Since JMRI 4.9.2 The build process for JMRI software has changed. (This won't affect you if you're just downloading and running a pre-built installer.) If you're building your own version of the JMRI software, this should continue to just work from the command line or if you're using NetBeans. If you're using Eclipse, you must use the Ant-based process our Eclipse instructions page. Using Eclipse in other modes currently doesn't work.
Older warningsSee the JMRI 4.8 release note for more warnings predating the 4.9 development series. These may be relevant to you if you're updating from an earlier version.
Since JMRI 4.7.5 This version of JMRI (and all later) writes a slightly streamlined version of panel file contents. Older files should still be readable by this version of JMRI, but files written by this version may not be readable by versions before JMRI 4.2 depending on their contents.
Since JMRI 4.7.5 The LocoNetOverTCP server has changes that may break scripts that reference it. Scripts refering to the class jmri.jmrix.loconet.loconetovertcp.Server need to refer instead to jmri.jmrix.loconet.loconetovertcp.LnTcpServer.
Since JMRI 4.7.3 This release will not start cleanly if installed over earlier versions of JMRI (the Windows installer ensures this is not an issue). Remove the JAR files jackson-annotations-2.0.6.jar, jackson-core-2.0.6.jar, and jackson-databind-2.0.6.jar from the lib directory within the previous installation directory to resolve this.
Since JMRI 4.7.1 JMRI no longer supports the portable paths
were deprecated in JMRI 2.13. When loading a panel, an error message will be displayed
if the panel contains a path that starts with
resource: and the panel will
not load until changed using an external editor. Paths starting with
cannot be automatically flagged because JMRI allows file: URLs.
Since JMRI 4.7.1
The LocoNet Server (the LocoNetRMI service; not the LocoNetOverTcp service)
in this version of JMRI doesn't properly interoperate with
JMRI 4.7.1 through JMRI 4.7.4.
It does work fine with JMRI version 4.6 or before.
If you encounter a problem with version compatibility, you'll see an error
message that includes "
local class incompatible".
The workaround is to update both client and server JMRI machines to the same
Since JMRI 4.7.1 JMRI applications will not load a panel file that fails XML validation; an error will be shown that should explains the error, allowing it to be fixed using an editor. (The explanations remain a work in progress.) If you have a problem loading a panel file, please
- Configure your JMRI startup to first run the jython/TurnOffXmlValidation.py script which will suppress the error.
- Write out a new version of the panel file (after saving a backup!)
- Use that new version from now on.
- And drop use of the jython/TurnOffXmlValidation.py script.
Since JMRI 4.5.6 As part of fixing the TMCC throttle issue, the handling of TMCC preferences was changed. If you have a TMCC connection configured, please go to the "Defaults" pane in the Preferences window and make sure that the TMCC connection is selected for the appropriate device types.
Since JMRI 4.5.2 This and future releases of JMRI may not function on OS X if the Java SE 6 provided by Apple is installed. OS X operating system updates routinely remove this version of Java SE 6. Please raise any issues concerning this on the user's group. To remove Java SE 6 from OS X, follow these steps (these steps assume JMRI is installed in the folder /Applications/JMRI, if not, adjust the following paths as needed):
- Open Terminal.app.
El Capitan only: Reboot into Recovery Mode by restarting your Mac and pressing Cmd-R until the Apple logo appears. Once in Recovery Mode, select Terminal from the Utilities menu.
- Run the command
/Applications/JMRI/PanelPro.app/Contents/Resources/uninstall-java6.shIt can take up to a half hour to complete. Wait for the message Removed Apple Java SE6.
El Capitan only: Run the command
bash /Volumes/Macintosh\ HD/Applications/JMRI/PanelPro.app/Contents/Resources/uninstall-java6.sh /Volumes/Macintosh\ HDIt can take up to a half hour to complete. Wait for the message Removed Apple Java SE6.
- El Capitan only: Restart your Mac.
Since JMRI 4.5.2 Support for directly executing AppleScript within JMRI has been removed due to changes in macOS and Java outside our control. If you require the ability to use AppleScript, you may be able to add this capability on your own by visiting JMRI AppleScript Support, but please be aware that this may not work on upcoming releases of macOS or Java.
Since JMRI 4.5.1 Internal turnouts and sensors need to have complete, individual system names. The names "IT" and "IS" (without any suffix) are no longer permitted: "IT12" is fine, but just "IT" is not. Most panel files that contain these should automatically migrate them to new names when saved, but in some cases you might need to manually update them.
Download links:Because of issues with this test release, we recommend that you download and install [JMRI 4.9.3](jmri4.9.3.shtml) or later instead of this one.
Changes since test release 4.9.1:The list of included commits is available from our GitHub code repository.
- Chuck Catania made multiple updates:
- Created NodeConfigManager - Opened from the CMRI menu by selecting the Configure Nodes menu item. Creates a table view of configured nodes for the selected Connection Memo with node UA, node type, input/output card and bit counts displayed. Nodes can be added from this window. Nodes are loaded into an Arraylist for function processing. From the Select column, nodes can be edited and deleted, bit assignments displayed window. A printed listing of nodes can be done. Only NodeConfigManagerBundle.properties created.
- The existing NodeConfig tool will be retained during the development cycle and deprecated at the appropriate later time.
- SerialNode data items added: Text Description, CMRInet Options, Node Options. Node option "Enable Polling at Startup" which is enabled as default, provides for selective node polling control when launching PanelPro.
- Node configuration window format updated with additional data items.
- Multiple CMRI connection memo added to new and updated classes.
- ConnectionConfigXml updated to load and store additional node fields. Backward compatibility is maintained with existing configuration XML files. Checks for new configuration data fields is implemented. Loading an existing connection config profile and not doing a Save from the preferences will not update the connection profile with the new data fields.
- Added support for the MRCS cpNode. A cpNode is defined as node type CPNODE = 3, NDP "C", 8 bit cards, two input cards, two output cards. Input/Output Expander (IOX) card assignment is supported. cpNode initialize(I) message conforms to NMRA LCS 9.10.1. Node type 4 is reserved for a future Open Source Node (OSN) offering.
- Bit Assignment listing function has Comment field added. Assignment listing can be printed.
- Egbert Broerse and Ken Cameron fixed a problem with startup for the Acela system.
- Kevin Dickerson made several improvements to improve the robustness the DCC-4-PC support:
- Reader board discovery is now in its own class so that the message/reply sequence no longer interferes with the polling messages.
- Solicited replies now contain the original message. As the reply contains no information as to its source this removes the requirement for the message sender to try and keep track of what messages it has sent and had or missed replies for. This information can now be retrieved from the reply and, removes any issues of sender getting out of sync with board poll status requests and the replies.
- Work by Paul Bender and Bob Milhaupt on improving how "throttle stealing" is handled.
- Balazs Racz updated the OpenLCB support: Ensures that set of sensor state generates an outgoing bus message, even if the new state is the same as the previous. This is desired by advanced users in order to be able to write scripts that initialize the entire system to a known state.
New / Updated decoder definitions
- Michael Mosher updated BLI decoders
- Ronald Kuhn added support for the RMX992 and RMX993
- Micheal Mosher updated the TCS WOW 4 decoder
- Craig48 fixed a bug in in the startup of Dispatcher: If a user name is ' defined for the transit or starting block or destination block, the validation process fails. The validation code expects either the system name or the user name, but not both. The createActiveTrain method is using a concatenated string of both, causing the validation failure.
- Fixed a problem with validation of layout panel files containing certain kinds of slip definitions.
- George Warner make a number of improvements:
- TrackSegments now support Bezier curves… (flex-track!)
- Added setDefaultButton(okButton) in a lot (but not 100%) of dialogs.
- Disable popup menu items that just show info (no actions).
- Alt-(Option-) scroll wheel zooms in/out (centered on cursor!).
- Added “Zoom to Fit”.
- More normalize[System|User]Names.
- TrackSegment width bug fixed.
- Added secondary grid size.
- Added antialiasing rendering hint for macOS and Windows.
- Convert more (all?) JTextField's to JmriBeanComboBox's.
- Removing orthogonal requirements for adding signal heads!
- Added per-PositionableLabel font support.
- Rotated PositionableLabel's are drawn correctly (and looks NICE!)!
- Alt key inverts Add and Drag "align to grid" behavior
- Added Rotation Menu info and set items.
- Add Signal Head Info to popup menus
- Added (de-)select All checkboxes to Layout Editor Tools
- Selection rect can now go up/left.
- Turnout comboboxes edit field now highlight (background color: exists=green, valid=yellow, invalid=red)
- Turnout comboboxes drop down lists now highlight (green = available, red = assigned to this layout)
- Dave Sand added a tree-based editor for Logix Conditionals:
The new editor uses a tree to represent the conditional structure of a Logix.
The pane is split, with the tree on the left side and an edit pane on the right side.
The contents of the edit pane change depending on the current tree node selection.
The traditional list-based conditional editor is the default editor in the new structure.
Turnouts, Lights and other elements
- Egbert Broerse added tooltips and validation to the field where you supply the hardware address when creating new Sensors, Turnouts and Lights. This should make it much easier for users to figure out what to put there.
- Provides a new getTextArea() method to allow scripts access to the display area in protocol-monitor windows. This follows from a JMRIusers discussion.
- The Siglet class, used by Simple Signal Logic and some user scripts for signal logic, was reimplemented to avoid a (small) change of missing a signal operation.
Simple Signal Logic
- Simple Signal Logic now has a "restricting" option.
USS CTC Logic
- Several updates to make the USS CTC support appear more realistic.
- Help files have been edited to document the following feature additions:
- When created, warrant throttle command scripts record the track speeds of the recording power address, if a speed profile exists for the power. On playback, when possible, they use this track speed and look up the corresponding throttle settings rather than the directly recorded throttle setting. The intention is to have the warrant run at the same speeds regardless of changes in DCC address or size of the train load.
- Warrants compute the track speeds for the DCC address on playback of the warrant when OPath lengths are known and throttle settings are known. These are saved in Session Speed Profiles.
- Session Speed Profiles are kept for all DCC addresses running in warrants during a layout session.
- Session Speed Profiles can be merged into Roster Speed Profiles when layout sessions end.
- Warrant Preferences provides three choices for how to handle speed profile merging at shutdown.
- Speed profiles are viewable when creating or editing warrants or nxwarrants.
- Speed profiles are checked to be monotonic increasing, and when not, an editing facility is provided.
- The NXWarrant GUi is split into two successive windows: selecting the route and setting the run parameters
- Ronald Kuhn improved the German translation
- Sonnys Hansen improved the Danish translation
- Fixed a problem, new in JMRI 4.9.1, that prevented creating new profiles.
- Many improvements to the internal tests and technical documentation.
- A number of internal classes have had their singletons (i.e. 'instance()' methods) put onto the instanceManager. This might have a tiny chance of impacting certain esoteric user scripts.