05/01/23 - v4.1.1.0
- added finer control over state packet transmission timings to support a broader range of actuators
11/02/22 - v4.1.0.1
- added Expanded Opcodes support in API and scripting for newer command stations such as Digitrax DCS52, DCS210, and DCS240
- changed Route conflict logic; previously only statefull tracks (turnouts) shared between routes where checked for conflict;
now all tracks are checked; especially important for unswitched crossing tracks and those that could interfere with each
other due to parallel proximity
- added Route.Intersects(route) method to check if one route shares any tracks with another; usefull for scripting routing systems
03/07/22 - v4.0.8.5
- added support for Lissy infrared sensing system made by Uhlenbrock
- open layout dialog now opens in the folder you last loaded a layout from
- all dialogs moved from Forms to WPF
- fixed the broken "Change Log" menu link
02/07/21 - v4.0.7.0
- moved RRA application to .NET v4.7.2; scripting will benefit from new language features; this framework is not
officially supported by Win Vista, so Vista support is essencially dropped, although users have successfully installed
this framework on Vista
- updated all other dependency libraries
05/05/18 - v4.0.6.1
- added 4 new UK signal types
04/22/18 - v4.0.5
- updated dependency libraries (.NET)
- in operation mode, Label objects with no text will now be hidden
12/29/17 - v4.0.4.1
- updated dependency libraries (compiler, audio, jquery, pointer-events)
- fixed remote throttle to portrait orientation on Android Chrome; iPhone Safari doesn't support this
- updated favicon support for remote client
09/01/17 - v4.0.3.5
- updated dependency libraries (.NET)
- added ability to the API and scripting to generate transponder packets to simulate a physical transponder
03/19/17 - v4.0.2.9
- added better error reporting on failure of RemService.Start() and HTTP listener registration
11/20/16 - v4.0.1.2
- added PkStatesList.Prev to complement the existing PkStatesList.Next for scripting state cycling in reverse order on CTC objects that support states
- updated the PkMultiSense packet to report the new transponder orientation events
- updated API documentation to newer MSDN style
08/29/16 - v4.0.0.20
- got rid of all WCF based remoting
- completely rewrote the remoting server infrastructure to solely use SignalR over HTTP
- created new "touch first" dual remote throttle, compatible with all modern mobile devices (Android, iOS, etc.)
02/20/16 - v3.6.3.6
- added support for decoder functions 9-28:
- full functions support through Engine object scripting
- additional function buttons in Engine throttle panel
- throttle's function 2 button changed to momentary push action to better support horn operation
01/03/16 - v3.6.2.4
- touch manipulation (swipe/pinch) changes:
- new touch button added in upper left corner of each switchboard viewport to allow quick enable/disable touch manipulation per viewport
- the last release broke touch operation (stylus still worked); this now works again when disabling touch manipulation
- shortcuts popup buttons in lower right corner of switchboards and throttles have been removed and info moved to user guide
11/09/15 - v3.6.1.27
- added touch manipulation support to switchboard:
- auto Loconet connection attempt, on startup, is no longer made if "simulation mode" is on
- options property List Max Lines is now free form and its default has been upped to 500
09/20/15 - v3.6.0
- application and all libraries are now compiled against .NET v4.6 framework
- user script uses a new .NET compiler platform ("Roslyn"):
- support for new language features
- when switching to operation mode, script compilation should be slightly faster especially after the initial one
- "Check Script" no longer builds the assembly so it should be about 4 times faster
- type inference on variable declaration is now enabled
- fixed bug where the TxPacket's task whould never complete if the packet failed to be written due to hardware interface problems
07/19/15 - v3.5.11.1
- added Intellibox detection in API
- slot status panel is now supported for Intellibox
10/31/14 - v3.5.10.2
- renamed four address related members of the PkMultiSense class for clarity
- made all address related property names consistent throughout the UI for clarity
- added script templates for extender methods
08/16/14 - v3.5.9
- enhanced the PostCallStack() method used for script debugging to more clearly show the call stack
05/03/14 - v3.5.8
- Added a few application options:
- Enable/Disable, auto broadcast states on operation start
- Enable/Disable, auto query states on operation start
- Enable/Disable, clear CTC events list on operation start
01/26/14 - v3.5.7
- exposed the internal Loconet stopwatch timer to scripting to aide in troubleshooting timing issues
01/26/14 - v3.5.6.8
- added "Force Set State" configuration setting in the options window
- internal handling of CancelToken has been implemented for OnEvent()
- OnCtcStart()/OnCtcStop functions can now be added to any GlobalScript object to execute code upon entering/exiting operation mode
- bindable events added to StepScript objects
- added ability for Sensor objects to observe SW_REP packet types
- more User Guide topics have been written
12/21/13 - v3.5.5.4
- the Block.Occupancy property has been separated into two properties: Occupied and Reserved
- blocks can now be reserved through script: Block.Reserved = True
- colors for "block occupied not reserved" and "track not assigned to block" can now be individually assigned; prior they used the same config. color
- several script changes were made around the PkStatesList class to make script less verbose and more consitent (see Class Library Docs for details)
- fixed error that occured when changing the "List Max Lines" value in the options window
- fixed error that occured when opening the Locobuffer report
- added search feature to the RRA Class Library
- more User Guide topics have been written
10/25/13 - v3.5.4
- fixed application crash when broadcasting LocoIO address
- more User Guide topics have been written
09/26/13 - v3.5.3
- fixed application crash when going from operation mode do edit mode (this bug was specific to Windows 8)
- some User Guide scripting related topics have been written
08/20/13 - v3.5.2.1
- refactored the auto code generation for EventScript objects
- fixed the volume setting for the PlaySound() method; it was mistakenly ignored
- Step Scripts changes:
- added task cancellation support
- added new script template for task cancellation and updated existing ones with syntax changes
- added better exception handling for user script
- fixed a set of edge case concurency bugs
- fixed bug, introduced in last version, where session states would not be saved on application shutdown if throttles were bound
08/12/13 - v3.5.1
- added category icon indicator for the various CTC event message types: CTC generated, user script generated, or errors
- new fields added to the Properties panel for Step Scripts
- fixed problem where Step Scripts would not be reset between edit/operation sessions
- fixed bug where bound Engine objects from a layout would ghost appear into another layout opened subsequently within the same session
- fixed bug where multiple throttles could be incorrectly auto bound to the same slot in some scenarios
- in the class library, the Script class was renamed to EventScript to be consistent with the UI changes
08/03/13 - v3.5.0.2
- added new PlaySound() method to scripting; can play .wav and .mp3 files
- the StepScript class, mentioned in the last release, has been migrated into the interface, now accessed through a new Step Scripts object group
- a new Global Scripts object group has been added to support multiple global scripts
- the former Scripts object group has been renamed to Event Scripts to create a distinction with the other script groups
- all script editing has been moved from the modal floating window to the tabbed document content of the main window
- added ability to detach tabbed documents to support multi monitor setups
- the Script Templates panel is now docked to the main window and can be shown/hidden from the ribbon main menu
- added script templates for Step Scripts
07/09/13 - v3.4.2
- Engine.StartSpeedRamp() has been made awaitable
- application options window is now resizable
- added a new StepScript class, in beta, that allows a script to be selectively stopped and resumed from any defined point
04/21/13 - v3.4.1
- fixed/improved detection of command station type in slot status panel
03/22/13 - v3.4.0.7
- certain categories of CTC event messages can now be supressed from being shown
- a new HTTP remoting service host called SignalR has been added for cross platform clients
- a new User Guide content framework has been built
- fixed a crash that would occur on first launch after an application update
02/20/13 - v3.3.0.1
- eliminated long load times of script editing windows; these controls are now loaded and cached at startup
- updated script template to show how to check and set Loconet track power
- added more color options for button objects
- fixed bug where tracks not associated with blocks would sometimes be shown falsely selected in edit mode
02/02/13 - v3.2.0
- application now tracks layout changes and prompts user to save them before unloading
- for remoting, removed TCP transport security to solve reported credential errors
- LINQ query language support added to scripting
- script name is now shown in script editor window title
01/17/13 - v3.1.0
- scripting events BeforeOperatePress and BeforeOperateRelease have been added to all clickable switchboard objects
- these events can be used to intercept, cancel, and override the default switchboard operation actions of said objects
- the Activated scripting event for Buttons has been replace by BeforeOperateRelease to match the events mentioned above
- event names are now returned to the script context through e.EventName
01/06/13 - v3.0.0.2
- large parts of both the CTC and Loconet APIs have been rewritten to implement the new Async/Await pattern
- some async methods that once required event binding for result inspection can now be awaited for completion
- the entire scripting system has been rebuilt using the Async/Await pattern making scripting less verbose and more intuitive
- a new subset of methods specifically tailored for scripting have been added to the API to simplify adoption significantly
- affected scripting templates have been updated to support the new scripting syntax
- the sequence scripting pattern introduced several versions ago has been removed;
the new async pattern solves the same problems sequence scripting was attempting to solve in a more elegant way
11/27/12 - v2.4.4.1
- changed "Reset States" option to affect the states of Button objects too; this was overlooked when Buttons were added
- fixed bug introduced in last release causing routes to prematurely be marked as locked, leading to loss of state integrity
- internal changes where made to the way operations are dispatched on the CTC thread
- application and all libraries are now compiled against .NET v4.5; because of this, support for Windows XP has been dropped
11/10/12 - v2.4.3
- added option to serialize switch activation for routes; this is for power intensive solenoid motors
- turnout state change cancellation by script now bubbles up to cancel any associated route activation
09/25/12 - v2.4.2
- fixed a null reference exception related to getting/setting a Label's "Static Text" property
- ribbon menu items pertinent to both edit and operation mode have been placed in both
- added ability to export all user script to a text file
09/17/12 - v2.4.1
- selcted ribbon menu tab now auto changes based on the edit/operation mode
- edit/operation mode menu items swapped so "enter edit mode" is on the operation mode tab and vice versa
09/12/12 - v2.4.0.3
- refactored top layer switchboard object selection to hit test on rendered content rather than bounding box; this allows easier selection in stacked object scenarios
- optimized the switchboard renderer a little more
- font size removed in favor of whole object scaling for labels; this provides better proportional sizing
- added keyboard shortcuts for scaling; click on the controls legend (lower right corner of the switchboard) for details
- select track mode now auto changes based on last selected context object
- added a new "Button" switchboard object which can be configured to trigger scripts
- Label objects now support multi-line text through the UI; prior, it was only possible in script
08/25/12 - v2.3.3.1
- got rid of the switchboard edit modes and redesigned editing to be simpler and more intuitive
- most switchboard keyboard shortcuts for editing have been changed to fit the redesign;
click on the controls legend (lower right corner of the switchboard) and view context menus for details
07/28/12 - v2.3.2.4
- added "simulation mode" allowing test operations while disconected from Loconet
07/14/12 - v2.3.1.2
- Switchboard changes:
- Signals can now be custom sized and aligned to the parent cell, similar to Labels
- hot spot method for Signals changed from entire cell to visual hit test, similar to Labels
- multiple Signals can now coexist and be operated in the same cell
- style copy/paste function added to Signals, similar to Labels
- when adding new Signals/Labels, they will now inherit their style from previously copied style
- added alignment offsets for Signals and Labels for percise custom positioning
- selection adorner has been moved to its own visual layer to render top most and no longer participate in hit tests
- optimized the switchboard renderer; its about 4x faster which should be very noticeable on large layout
- added new keyboard shortcuts; click on the controls legend (lower right corner of the switchboard) and view context menus for details
- switched to generic delegates in the API
06/20/12 - v2.3.0.1
- Simplified switchboard mouse click behaviors:
- added support for overlapping object selection and z-order positioning
- left click selection of stacked objects, in edit mode, changed from pick list to object cycling
- left click, in operation mode, repurposed to cycle through the operation states of the top most object;
currently supported are Turnouts and Signals with Buttons to be added later;
all other operations will continue to reside in the right click context menu
- left click object selection options, in operation mode, has been moved to the right click context menu
- added a few more script templates and more in line comments to the existing ones
06/10/12 - v2.2.0.6
- added support for text label objects in the switchboard
- updated script template to demonstrate setting a label dynamically based on a reported transponder address
- fixed problem with switchboard context menu not displaying the current edit mode when certain objects types are selected
- fixed a node sort performance problem related the the object viewer
05/01/12 - v2.1.2.2
- sensor objects can now be bound to incoming security element packets
- several encoding/decoding properties were added to the PkSecurityElem packet
- sensor events now return the Loconet packet that triggered them; on the scripting side, the packet is returned through e.Args
- exposed a few bitwise helper methods, for encoding/decoding packets bytes, through the API
04/02/12 - v2.1.1
- serialized the engine auto bind packet submission to prevent binding corruption
03/25/12 - v2.1.0.8
- Scripting changes:
- added CtcService.BindEvents()/UnbindEvents() for dynamic event binding in script
- overloaded CtcService.SubmitCmd() to simplify scripting with lambdas
- added new sequential execution scripting pattern
- added/updated several script templates
- added two new collection namespace imports to the generated scripting assembly
- removed line dividers in script text editors
- changed compilation target of RRAutoLib.dll to .NET 4.0
02/06/12 - v2.0.36.1
- retargeted the update URL for ClickOnce deployment
- "change log" link in app now points to this page rather than a local file
- changed the throttle and switchboard controls legends from tooltip to popup panel for readability
- changed the throttle's button order to match the remote throttle
- better binding/unbinding engine to slot error reporting
- ICtcObjectListBase interface, in the API, is now enumerable
- optimized load times and UI performance for large layouts; should now be many orders of magnitude faster
- for stateful objects, pending dispositions are no longer saved between sessions; they are reset instead
12/06/11 - v2.0.35.2
- added collapsable ribbon buttons
- added custom serialization to Packet classes
- renamed RaiseEventsSyncContext to SyncContext for consistency throughout the API
- added script template "Action based on transponder"
- changed the BDL16x zone decoding for transponding PkMultiSense packet
- Remoting changes:
- Packet properties (ID, ReqID, IsEchoe, TimeStamp) are now marshalled to remoting clients
- added remote TCP connection viewer/manager in RRAuto
11/21/11 - v2.0.34
- added BDL16x address decoding for MULTI_SENSE packets
- Remoting changes:
- made service shutdown faster by properly closing all the open TCP channels
- client connection closures are now async
- the server now provides visibility of remote client connections (ID, IP, Service Host)
- client connections can now be individualy killed from the server
- fixed several edge case connect/disconnet exceptions
11/16/11 - v2.0.33
- Remoting changes:
- fixed bug with EngineProxy.Disconnected event not synchronizing on the RemClient.SyncContext thread
- added ability for client proxies to gracefully disconnect
- renamed several method and events for clarity
- added a remoting proxy for the LoconetService
11/07/11 - v2.0.32.1
- Remoting changes:
- rebuilt the entire system using the newer WCF library (since this will be supported in future versions of Windows)
- added better error handling for edge case scenarios
- better resource management and disposal
- fixed several packet corruption bugs caused by lingering event bindings
- simplified client API
11/05/11 - v2.0.31.2
- refactored and unified the script event binding system
- added scripting events for Engine objects
- changed Route's scripting syntax for set/lock/unlock
- added more granular scripting events for routes
- restructured the events for the Sensor object
- transponder locomotive addresses are now passed to events and scripting
10/27/11 - v2.0.30
- added ability for sensor object binding to MULTI_SENSE transponder events
10/16/11 - v2.0.29.6
- added client/server infrastructure for remote control through TCP in the RRAuto class library
- the remoting listening service has been added to the Railroad Automation application UI
- the remote client connectoid is available in the RRAuto class library for developers
- fixed a script event binding bug introduced in the last version
- implemented the "Enabled" property for script objects
09/22/11 - v2.0.28
- Scripting changes:
- added "BeforeStateChange" binding event for track turnouts, signals, and accessories in the scripting editor
- added "BeforeSetLock" and "BeforeUnlock" binding event for routes in the scripting editor
- the new "Before*" scripting events may now cancel the callers operation through their event arguments (e.Cancel = True)
- the new "Before*" scripting events now pass the requested change state through their event arguments (e.Args)
- scripting event arguments are now passed by reference and can pass values back to the caller on syncronous calls
- the signature for scripting event handlers has changed to support the above features and allow for future parameter expansion
- scripting templates have been updated to reflect the signature changes made to the event handlers
09/11/11 - v2.0.27
- fixed bug where track connections would fail to render in certain exceptional cases
08/29/11 - v2.0.26
- removed the decimal string byte representation from the "Loconet packets log" panel; the hex format seems to be the prefered type
- added custom icon to represent PkImmediate packets in "Loconet packets log" panel
- revamped the switchboard context menu hierarchy to be more flat
- converted more image icons to vector icons
- got rid of all signed datatypes for bitwise operations to prevent potential problems
- added ability to send PkImmediate DCC decoder control packets through the client UI
- added better index and value range checking for property input
07/27/11 - v2.0.25.1
- Loconet API changes:
- the switch state is now reported by PkLongAck packets with SwitchStateResponse type
- fixed the decoding/encoding of the PkImmediate's DccBytes payload to take into account most significant bit
- all DCC instruction bits are now decoded from PkImmediate packets
- added support for controlling auxilary function 0-28 through PkImmediate
- added new PkLongAck description for PkImmediate responses
05/10/11 - v2.0.24
- made the slot viewer more graphical and easier to read
- chanaged the default docking layout
04/11/11 - v2.0.23
- removed Block.AllowStop property
- added Block.HasCatenary property
- simplified the unlock route switchboard context menu
- Loconet API changes:
- short-circuited the LoconetService transmission thread to not wait for echoes if an error occurs writing to the serial port
- events and callbacks without sync contexts are now executed on the Rx pooled worker threads rather than creating new ones
- Rx notification execution order was changed to delegate callbacks first and events second
- packets supplied with empty CallBack objects no longer error out, they just get ignored
- renamed Packet.CallBackOnRequest to Packet.CallBackOnEcho for clarity
- renamed LoconetService.TxPriorityBufferedSpeed to LoconetService.TxPrioritySpeed; "Buffered" was a misnomer
- renamed PkDccProgram.ReplyCode to PkDccProgram.ProgErrFlags and added the bitwise DccProgErrFlags enumeration to define the returned flags
- refactored all LoconetService members to be thread safe (can be called from any thread any time)
- added ability to transmit Loconet packets synchronously through LoconetService.TxSyncPacket()
- refactored Engine.UnbindSlot(True) to use the new properly implemented TxSyncPacket(); the old implementation failed with deeply stacked packet queues
01/27/11 - v2.0.22
- added switchboard zooming shortcuts {_/-} and {+/=} for computers with no mouse-wheel and no numeric keypad
- added ability to bind scripts to the Route object's StateChanged event
- renamed StatesList to PkStatesList and IStates to IPkStates in the API
- added compatibility message when loading old formatted layouts
01/19/11 - v2.0.21
- switched class library collections to generics
- CTC object lists now have greater type affinity (scripting will require less casting)
- refactored the layout deserialization system for maintaining better compatibility between versions
- fixed undefined signal creation when added through the object browser
01/02/11 - v2.0.20
- CtcService.RaiseMessageEvent() has been renamed to CtcService.PostMessage() for clarity
- assigning invalid states to tracks/signals/accessories now displays a CTC warning message instead of throwing exceptions
- for script brevity:
- simplified the getting/setting of CTC object states
- getting/setting the state of CTC objects can now also be performed by state name
- changes made have broken some compatibility aspects; to fix previously saved layouts:
- states file .rrs is no longer compatible; a new one will be generated after first launch
- for a route's turnout members, positions have been reset to default; re-assign to previous states
- for scripting changes check the class library documentation
12/25/10 - v2.0.19
- decoupled the Signal object's visual look from its operational primitive in the CTC API
- multiple visual looks are now supported for signals through the UI (localized looks will be easier to add in the future)
- better aspect packet retention when a signal's configuration is changed
- added generic signals; prior all signals looked Germanic
- all signal aspect names have been renamed from Germanic to generic
- signals are now organized by aspect count rather than role for clarity
- fundamental changes to the signal object broke compatibility; for previously saved layouts re-assign new types to each of your signal objects
12/15/10 - v2.0.18.7
- the stack trace is now copied to clipboard rather than shown for unpredictable error dialogs
- introduced the Viewport term as it relates to the switchboard tabbed documents for clarification
- application now compiled against the .NET 4.0 framwwork; better clear type
- updated the ribbon control; fixes a mouse tilt-wheel bug for 64bit
- changed PkSwitchInput packet so now it can be sent from the PC for simulations
09/20/10 - v2.0.17.1
- renamed Engine.AquireSlot/ReleaseSlot methods and corresponding events to BindSlot/UnbindSlot to be more consistent with other references
- renamed and consolidated the Engine object's events so that they all get raised on the sync thread; engine events on own thread have been removed
- enhanced the results reported through the Engine.BindSlotResponse event
- option to warn if an Engine's slot is in-use and ability to steal the slot is now supported
- ability to execute Engine.UnbindSlot syncronously has been made public in the API
09/05/10 - v2.0.16
- engines can now be bound to slots without the requirement of an open throttle for better script support
- added property Engine.AutoBindInOpr to indicate if engine should automaticaly bind to a slot in operation mode
- added SlotReleased event to the API; was needed to support new features
- added toolbar button in throttle to manually bind/unbind to a slot
- added context menu option on engine object to manually bind/unbind to a slot
- throttles are now operational in edit mode and operation mode
- editability of engin's address and speed steps are no longer based on mode but on binding state
- engines bound to slots are now purged on layout changes and application close
- fixed bug where engine references not disposed of properly would cause object ghosting after layout changes
08/31/10 - v2.0.15.3
- organized the script templates a little better
- added more inline documentation to the script templates
- added a few more script templates
- fixed issue with engine direction/function state corruption when setting them consecutivelty through script
- when deleating an engine, coresponding throttles are now closed to prevent unwanted lingering references
08/29/10 - v2.0.14
- CtcService.SwitchboardSize has been removed from the class library as this was a limitation of the renderer rather than the API
- made the switchboard size unlimited; although the grid remains limited, objects can now be placed outside the grid
08/09/10 - v2.0.13
- fixed layout deserialization error when loading a layout through the API that was created though the Railroad Automation application
- persisted tags can no longer break serialization; problem existed where altered user created types saved in the tags would break deserialization of the layout
- throttle configuration is now stored with the layout rather than the engine
- fixed "docking to last saved" not sticking to most recent save within a session
08/06/10 - v2.0.12
- for methods LoconetService.Start, CtcService.SaveLayout, and CtcService.LoadLayout, exceptions are now thrown instead or returned
- thrown exceptions from Save/Load layout are now a bit more descriptive
- ribbon's "recent documents" list is now culled on attempts to load layouts that no longer exist
08/05/10 - v2.0.11.2
- added diagonal crossing track as an alternate to the square crossing track
- the curved track brush in the switchboard has been changed so that it can better participate with the "maintain orientation" system during track type changes
- for alternate track configurations (i.e. curves and crossings) the shortcut key can be pressed multiple times to toggle the alternates
- above changes broke layouts built with previous versions; to fix your layouts:
- rotate wrongly oriented curved tracks once to the right
- all other tracks that are shown with incorrect types, or not shown at all, need to have their track types changed one down from the track type list
07/30/10 - v2.0.10
- selected tracks and signals can now be moved in the switchboard with the ArrowKeys
- changed switchboard panning shortcuts to Space-ArrowKeys to prevent conflict with new feature
07/22/10 - v2.0.9.2
- the "check script" toolbar option in the script editor window has been implemented
- compiler error reporting has been enhanced to indicate code type and object location
- compiler error line numbers are now reported relative to the corresponding script rather than the entire assembly
- added line numbers to all script editors to complement the new script error reporting
- created new window for listing script errors to replace the previous message box
07/05/10 - v2.0.8.1
- fixed an exception in the speech grammar builder that would occur on layouts with at least one track but no turnouts
07/01/10 - v2.0.7.6
- allow directly opening a layout by lauching the app from an .rra file (never worked for ClickOnce deployment)
06/17/10 - v2.0.6
- converted more bitmap icons to vector icons
- added generic packet PkSpecialOem for Intellibox control to the Loconet API
- changed LoconetService.ComPort property from enum to byte to support higher COM numbers
05/31/10 - v2.0.5
- removed unused constructors in Tracks/TracksList and Signal/SignalsList objects
- maintain "last orientation used" in switchboard for new tracks
- added missing icons in switchboard context menu
- made it a bit more clear when tracks and signals are placed or replaced in the switchboard context menu
- configuration of turnout and signal states is now maintained whenever possible after a type change
- fixed possible route corruption when changing the track type contained in a route
05/28/10 - v2.0.4.3
- improvements to the sequence system:
- made sequences thread safe so they can now be operated from scripting and UI simultaneously
- added ability to step enter/edit sequence items through the API; in the previous version only live record was possible
- added ability to batch substitute slot numbers of the packets in a sequence
- added icons that dynamically display the status of sequence nodes in the object browser tree view
- added icons in the object browser's context menu for Record, Play, and Stop actions
- added a scripting template for playing a sequence
- added sequence control through speech recognition
- got rid of the SOAP formatter for save/load layouts due to its lack of support for generics; the SerializationFormat will no longer need to be specified; the binary formatter will always be used
- toolbar help button now links to Railroad Automation tutorials channel on youtube.com
05/09/10 - v2.0.3
- implemented the Sequence railroad object; before, this was a placeholder and not operational
- fixed problem with slot status list not being populated in some cases
04/22/10 - v2.0.2
- fixed several UI refresh issues with the LocoIO programmer
- moved project to VS2010
- updated toolbar and docking control
03/27/10 - v2.0.1
- changed the BaudRate enumeration to support more rates; specificaly added 38400 and 115200 which are used by Uhlenbrock
- allow to disable serial port flow control for Uhlenbrock interface
- fixed the LocoIO multi-port property grid editor
02/20/10 - v2.0.0.168
- rewrote the entire front end in WPF; a couple WinForms controls are still hosted
- changed old menu/toolbar to a ribbon style and reorganized command structure
- new vector icons and app logo
- switched the user settings system from my custom one to the one provided by the .NET framework
- user guide was old and obsolete so I got rid of it; may write another one at some point
- got rid of the GDI+ and DirectX switchboard renderers in favor of the WPF renderer
- changed CTC object icons to be dynamicaly generated reflecting their actual configuration and state
- multiple switchboard view ports are now supported through tabbed documents
- script execution added to the voice recognition grammar
- default save/load layout location changed to user's documents folder rather than application root
- got rid of the CCW which allowed API calls from COM; .NET has been around for 8+ years so we can let go of COM
- switched API's layout serialization from SOAP to binary formatter to support generics
- changed API's event sync system from ISynchronizeInvoke to Dispatch pattern to support Win Forms and WPF UI thread synchronization
- added script binding for sensor objects
- changed application target compilation to .NET 3.5
- changed API's target compilation to .NET 3.0
- many of the internals where refactored
- deployment is now offered only through ClickOnce as updates are easier; an offline install package is also available but not updated as often
- libraries are now offered as a separate download for developers
04/08/09 - v1.1.26
- fixed a permission error when saving application setting on Vista 64bit
03/28/09 - v1.1.25
- created an all new switchboard in WPF (zooming, vector based, dynamic state context menus, etc.)
- CTC objects now have two types of tags (transient or persisted)
- sensors can now be manually simulated
01/26/08 - v1.1.24
- changed application target compilation to .NET 3.0
- fixed problem with nag screens
08/23/07 - v1.1.23
- added new "change direction" grammar to speech recognition
- changed the installer to bootstrap the .NET 3.0 redistributable rather than including .NET 3.0 DLLs with the release
- added ability to also set routes without locking them
- route icons now reflect their state
- added ClickOnce deployment
08/03/07 - v1.1.22
- give more helpful error if speech recognition recording device is not found
- updated toolbar and docking control
07/17/07 - v1.1.21
- added Engine.StartSpeedRamp() and Engine.StopSpeedRamp() methods to CTCService for automating throttle speed ramps
- added "ramp speed" and "hold speed" speech commands to start or interrupt speed ramps
- throttle speeds are now set to 0 when CTC service is stoped (leaving operation mode or closing application)
07/15/07 - v1.1.20
- open throttles now reflects speed changes as they are made through speech control
- some speech grammar changes (check speech grammar help)
- slot status panel can now be opened/closed through speech
- setting an engine under speech control now automaticaly aquires a Loconet slot; before coresponding throttle had to be open
- closing throttle no longer purges the slot; this is because engine could also be controlled by speech in parallel
- fixed error handler catching exceptions thrown by executing CTC commands
- fixed speech grammar builder error occuring when having no objects in these CTC categories: Turnouts, Signals, Routes
07/07/07 - v1.1.19
- added ability to control railroad operations through speech recognition (.NET v3.0 SAPI v5.3 Vista only feature)
- added help for speech recognition grammar outlining understandable phrases
06/16/07 - v1.1.18
- refactored the scripting event system again
- switched to the native MenuStrip and ToolStrip (no longer using SandBar trial for those)
04/16/07 - v1.1.17
- fixed the Vista compatibility issues (menu, toolbar, docking)
04/14/07 - v1.1.16
- updated to a new script editor more compatible with .NET 2.0 and better featured
- restructured the scripting system to be more flexible and easier to use
- trigger scripting is gone and replaced by event binding
- save script without trim; triming now done during compiling
01/24/07 - v1.1.15
- the LocoIO port refresh in the UI, that occurs after port configuration, no longer erases the setup
- PkLocoIO.RefreshPorts() helper method has been removed (this logic moved to the UI side)
- PkLocoIO.Request*() helper methods now support callbacks
- PkLocoIO.Setup class aquired the PortRefresh property again
01/17/07 - v1.1.14
- updated support for second generation LocoIO devices; up to v1.471
- PkLocoIO packets are now emitted natively by the packet receive events; before received PkPeerXfer has to be casted to PkLocoIO
09/22/06 - v1.1.13
- fixed a null color translation error in the GDI+ renderer
- added ability to move signals on the switchboard with mouse drag
- changed the signal selection bounding box in the switchboard
- shrunk the switchboard's page flip invalidation area back to its most optimum
- added ability use external decals for signals
09/05/06 - v1.1.12
- added functional signaling to the switchboard area
- refactored the rendering system in the switchboard for easier layering
- started work on the CTC command sequencing (not working yet)
07/17/06 - v1.1.11
- updated toolbar control
- added .Parent property to most Ctc objects
- changed fonts
- object states now are edited through the object tree view
- added ability to apply custom names to object states
- for better backwards compatibility, deserialization of obsolete classes will no longer throw exceptions
- added accessory objects and ability to control them through user defined states
06/10/06 - v1.1.10
- changed PkLonkAck packet description for OpsRead responses
- chanaged save packets log format to be more readable (one line per packet event)
- fixed "out of sequence" packet responses
- echo packets for non UI syncronized events are now raised on the SerialPort's receive threads rather than a new worker thread
- fixed problem where in some instances response packets where not matched to request packets
05/16/06 - v1.1.9
- updated docking control
- added decoder programming to the UI
01/28/06 - v1.1.8.1
- fixed a significant bug that prevented PkDccProgram and PkComStatOps from encoding correctly
01/24/06 - v1.1.8
- the LoconetService has been altered to support multiple instancing
- fixed script helpers that broke from previous version changes
- changed script errors to also show inner exceptions
01/18/06 - v1.1.7
- throttle speed knob indicators now stay synchronized with speed changes from all sources
- renamed handlers for clarity
- added TimeStamp property to packet classes so Tx/Rx times can be reported more accurately
12/28/05 - v1.1.6
- updated docking control and enabled dock window tabbing
- added delegate callback functionality for requests and responses on all Packet classes
- tag property of the Packet class now gets copied from request packet to response packet
- tag property now gets cloned by Packet.Clone(); also the new Packet.CallBack* members get cloned
- LoconetService events are now raised on worker threads rather than communication threads, when no synchronizing object is provided
- implemented CtcService.ResetStates method
- fixed an incorrect packet type cast for PkRdWrSlotData inheritors in the COM wrapper
- fixed an exception in the property grid that occured when switching modes by shortcut
- fixed a bug in the packet's parity byte calculation that would occur when sending same packet instance twice
12/21/05 - v1.1.5
- updated docking control
- divided the members of PkRdWrSlotData into four new derived classes PkLocoSlot, PkFastClock, PkDccProgram, PkComStatOps
- added ability to program DCC decoders on the track with the new PkDccProgram class
12/07/05 - v1.1.4
- added to the CTC documentation
- renamed some CTC methods for clarity
- the states and script editors are now accessible in the UI from several places for convenience
- throttle progressive interval setting is now saved with the engine object
- replaced the CtcService.TimerPool property with the broader CtcService.SubmitCmd method
- switched internal collections to strong typed generics
- added custom serialization to classes inherited from CtcObjectListBase for better backwards compatibility
11/25/05 - v1.1.3
- updated docking control
- property grid fix for bug introduced by .NET 2.0 conversion
- added support for SE8 and DS64 to the PkMultiSense class
- added API documentation back in
- removed classes not implemented in CCW from type library allowing classes to have the same name in COM/.NET
- update VB6 project example to reflect class naming changes
- added enumeration of COM ports so only valid ones are shown in selection list
v1.1.2
- added COM Callable Wrapper support back in
- added a .bat file with the installer for those who want to register the CCW type library
- several code changes to better use .NET 2.0 changes
v1.1.1
- updated docking control
- fixed serial port timeout exception encountered when no Loconet network is connected
v1.1
- converted application to .NET 2.0
- got rid of most of the interop non-managed calls
- Loconet API now uses an event model rather than polling for serial comunication
- some threading changes (priority, handoffs, etc.)
- added Source column to Loconet Packets Log
- dropped COM Callable Wrapper support (may reinstate it at later time)
- dropped API documentation for this release until nDoc documentor is updated for .NET v2.0
10/01/05 - v1.0.7
- fixed a COM Callable Wrapper interface bug for packet types that set engine functions
08/09/05 - v1.0.6
- updated toolbar and docking controls
- the slot window has been added to the saved docking layout
- added line numbering in "Generated Assembly" code window to match with "Check Script" line messages
- preliminary implementation of "Line" objects
- added THROT_STAT op code but not implemented
06/28/05 - v1.0.5
- updated toolbar control
- fixed scripting panels bug where editing would not be allowed unless first saved
- added slot speed step assignment support through the Engine object
- added length property to routes
05/20/05 - v1.0.4
- updated toolbar and docking controls
- fixed context menu positioning triggered by the keyboard in the objects tree
- added OPC_LOCO_F912 packet support
- added OPC_IMM_PACKET packet support
- better support for custom packet classes in Loconet API
- added (Global Scripts/Custom Packet) template in script helper
- added PkLocoIO packet class as replacement for the old LocoIO class
- fixed Address property for PkSecurityElem; was off by 1
03/02/05 - v1.0.3
- updated toolbar and docking controls
- changed to a new code editor control for the script windows
- updated some portions of the User Guide
- added reserved members to SpeedSteps enumeration (Loconet API)
01/24/05 - v1.0.2
- added ThrottleID decoding/encoding to the PkRdWrSlotData class
- updated toolbar control
- converted all context menus to SandBar and got rid of the old ContextMenu.dll
- slots count is now auto detected by interogating the command station
- added command station OPS decoding/encoding to the PkRdWrSlotData class
11/25/04 - v1.0.1
- added function buttons 5-8 to throttle windows
- updated toolbar and docking controls
- replaced MagicLibExt.dll with a smaller library ContextMenu.dll
- fixed a docking layout culture deserialization bug for foreign users
- fixed some short cut conflicts
- Loconet packet classes are now inheritable
- SLOT_STAT1 packets are now dynamically tracked in the slots viewer
- fixed some inaccuracies with consist and speed step reporting
08/19/04 - v1.0
- added Tag property to CtcService where any serializable object can be placed to be saved with the layout
- docking definitions are now stored with each layout
- docking contents now get rebuit when opening a new layout or existing layout in same session
- added more docking options under the Windows menu group
- adopted SandBar menu and toolbar control
- menu and toolbar can now be docked along all edges
- added menu shortcuts
- consolidated controls for smaller foot-print
08/12/04 - v0.9.10
- fixed some buffer flip errors on the DirectX renderer when messages get displayed on app load
- fixed a property grid error for Engine functions; functions array was not initialized
- reordered the resource loading on app start for better intended results
- throttle window now gets title bar refreshed when Engine name is changed
- fixed Slots docking window not initializing when window was saved in a floating state
08/09/04 - v0.9.9
- added higher number COM port options for USB devices
- moved the throttle control functionality from the UI to the Engine object in the API
- throttle knob is now also synchronized to external speed changed
- for open throttles, slot gets released now when throttle is closed or application closes
- for open throttles, mode changes between Operation/Edit now aquire/release slots respectively
- adopted SandDock docking and document control
- now all docking windows save their layouts between sessions
- other miscelenious docking enhancements and fixes
07/19/04 - v0.9.8
- got rid of SubmitCmd method; no longer needed since new public methods call it on your behalf
- simplified the call to manualy execute trigger scripts and made it thread aware
- clear script trigger instance references when exiting operation mode
- changed the trigger bindings to be performed by the library instead of the auto-generated script
- made references to compiled script trigger instances private
- added a new property to the Scripting shared class to check if script is bound
- made the route locking mechanism more robust
- made the TimerPool thread safe
- added a new exception: CalledOnCtcThreadException
- fixed a clean-up problem when terminating the CTC thread
- reimplemented the query sensors function with switch packets rather then power on packet
- removed the pending and delay stage when switching turnouts/signals that are already in the correct position
- added AquireSlot/ReleaseSlot mothods to the Engine object
- Speed/Functions/Direction now can be read/written through the Engine object
06/27/04 - v0.9.7
- reworked the event bubbling system and thread marchaling through the API layers
- sensors now restore their states between sessions
- disabled "Global Script" editing and "Check Script" menu items in operation mode
- fixed some issues regarding opening a new or existing layout while in operation mode
- added CtcService property to check if CTC is currently running
- changed the default docking possition for the CTC Event window
- added context menu with "Clear" and "Save" options for CTC Event window
- open throttle option now apears only in operation mode
- object names in the property grid are now ReadOnly during operation mode
- added exceptions to prevent object configuration changes while the CTC is running
- added exceptions to prevent state changes while the CTC is stopped
- state changes are now thread aware rather than being resynchronised to the CTC thread every time
- simplified some scripting commands; moved more of the work in the API
- changed all the script template helpers to reflect the script changes
- optimized the trigger mechanism initiating the validation of script triggers
- depricated the SubmitCmd method from Scripting; should only be called internally or through the API
- added range validation on some of the object properties
- fixed a sticky state problem on initial layout load
06/12/04 - v0.9.6
- added global scripting
- fixed exception errors occuring when OPC_THROT_STAT messages are encountered
06/04/04 - v0.9.5
- added key shortcuts to frequently used switchboard context menu items
- added new switchboard track element types (sharp curve and crossing)
- fixed garbage collection problem when deleting tracks or sensors
- suppress State param when reading OPS with PkMultiSense
- refined the PkLongAck reporting for OPS programming
05/26/04 - v0.9.4
- added OPS programming for PM4 and BDL16 through PkMultiSense packet type
- added OPC_SE packet support
- added better reporting for the PkLongAck packet type
05/19/04 - v0.9.3
- added OPC_LINK_SLOTS packet support
- added OPC_UNLINK_SLOTS packet support
- added a new script template for sending Loconet messages
- added more error handling with user script
- all command classes now check for null references and report to the CTC Events window
- fixes some reporting problems with PkMultiSense message
05/10/04 - v0.9.2
- added OPC_FIND packet support
- added the user guide
- added more decoding memebers to OPC_SW_REP packets
04/24/04 - v0.9.1
- fixed several bit shifting problems that were causing incorrect packet decoding
- added the decoding of DS54 address and input pair for OPC_SW_REP packets
04/21/04 - v0.9.0
- fixed bug with script editor text box crashing if deleting the last character
- added runtime scripting error handling which gets reported through the CTC events window
- trigger execute code now can be manually executed from object tree
- revamped the trigger window, added template helpers, and object documentation link
- enhanced scripting capabilities (i.e. recursive calls; passing argumens)
- fixed overflow error that occured in PkMultiSense.PmAddress get property
- added partial support for OPS_SW_REP packet type
- fixed PkMultiSense.TrDevAddress reporting addresses 1 less than actual
- added link to this file from About window
04/12/04 - v0.8.34
- removed Events which have been replaced by Triggers and are now implemented
- added scripting capability (Triggers are supported through scripting)
01/12/04 - v0.8.33
- added DirectX 9.0 acceleration to the switchboard panel
12/08/03 - v0.8.32
- added switch time interval for state objects (ie. turnouts, signals)
- fixed exception error occuring while activating routes that send no packets
- added Locobuffer reporting (version, bad frame counter, collision counter)
- the mode when the app is closed is now saved in settings.xml and restored on next app start
- removed slot 0 from slot status windows since it did not belong in this context
- added functions 5-8 in slot status window
11/15/03 - v0.8.31
- modified the serialization proccess to remove redundant states stored in the definition file
- fixed an exception thrown while opening a throttle, introduced with the last release
- added support for DS54 devices and device independent input addressing
- re-did the LocoIO classes; they were to convoluted before
- fixes problem with OPC_INPUT_REP packets not reporting back to open transactions
11/01/03 - v0.8.30
- added MSDN style documentation for the API
- added support for OPC_LOCO_SND packet type
- states are now syncronized with the physical layout when going into operation mode
- launching associated layout files(.rra) now automaticaly load up when the application starts
- switchboard display can now be scrolled with the Ctrl-LeftClick.
- object definitions and states now saved in separate files; the main definition file(.rra) is saved on user request, while the states file(.rrs) is auto saved on every application close; when opening an ".rra" file the ".rrs" file with the same name is also opened and matched
- fixed a null pointer exception bug caused by an unexpected graphics back surface buffer flip
10/13/03 - v0.8.29
- optimised the CPU efficiency and responsiveness of CTC background thread
- sensors can now be assigned to blocks
- tracks can now also be assigned to blocks through the property grid
- added sorting for blocks and sensors drop-downs
- blocks now show occupancy
- redesigned the hierarchical transactional system
- added Sychronize States options in the Actions menu
- added transponding parameter reporting for OPC_MULTI_SENSE packet type
09/13/03 - v0.8.28
- moved occupancy from track to block
- added customized serialization for better backward compatibility of saved files
- added PM4 parameter reporting for OPC_MULTI_SENSE packet type
- added switchboard object selection context menu in operational mode
- added ability to save Loconet traffic log to file
- OPS_BUSY packets can now be sent by PC to support new version reporting feature of Locobuffer v1.5
- added child group sorting to objects tree view
- switch board pannel is now guaranteed to be innermost
09/01/03 - v0.8.27.2
- fixed drawing glitch with connected block tracks
08/30/03 - v0.8.27.1
- fixed problem with not being able to reference RRAutoLib.dll because it was missing from app dir
- removed install of RRAutoLib.dll to GAC; wasn't needed for CCW after all
- removed strong name from RRAutoLib.dll that was neccesary for GAC
- installer now makes registry entries so RRAutoLib.dll is available in the .NET add reference tab
08/30/03 - v0.8.27
- on install RRAutoLib.dll now gets installed in the GAC
- added CCW (COM Callable Wrapper) around the Loconet API portion of RRAutoLib.dll (i.e for VB6 clients)
- changed connector ends look for tracks in switchboard display
- 'reservations' are now called 'blocks'
- tracks that are part of the same block are now shown as connected
- turnouts now have a color indicator for when they are locked by a route or pending a state change
- added new color configurations in the Settings window
- fixed a problem with "SortPropGridConverter" and added sorting to Settings window
- allow only one instance of the app to be launched
08/12/03 - v0.8.26
- routes are fully functional now
- interlocking of turnouts has been implemented
- pending states changes are now flagged
- all states changes now only occur in operation mode
- changed Save/Load errors to have friendlier messages
08/08/03 - v0.8.25
- state delta now built directly into CTC objects and reported through NotifyObjectChange() event
- added route configuration through the UI
- CTC commands now wait for packet send confirmation before being reported as complete
- changed the baud rate to an enumeration
- fixed some issues with the high resolution timer functions in the Loconet API
07/28/03 - v0.8.24
- added "Requery Sensors" menu item
- fixed exception which occured when INPUT_REP packets did not match any existing sensors
- implemented a packet ID scheme to match sent packets with echoes and responses for better packet flow control
- added packet ID to available fields in packet traffic inspector
- removed unsupported LocoIO configurations
- added visual states in status bar
- moved sensor event handling to the CTC operation mode thread to fix synchronization problem
- the Loconet API can now simultaneously raise evens on its native thread as well as on the ISynchronizeInvoke object
- added ISynchronizeInvoke for events to the CTC dispacher API as well
07/24/03 - v0.8.23
- sensor objects are now implemented and respond to INPUT_REP packets
- API users can now specify an object implementing the ISynchronizeInvoke interface so that the API can raise events on that object's thread
- fixed bug where panels saved in an undocked state, on app exit, caused them to lock up, on next app restart
- fixed an Address packet decoding bug in LocoIO programmer for INPUT_REP generating inputs
- changed incorrect descriptions and superfluous fields in LocoIO programmer for inputs
- operational mode context menu added in layout view for turnouts
- context property objects now only get selected from the tree view in operational mode
- changed operational mode double click state changes in layout view to single click
07/18/03 - v0.8.22
- support for button On/Off states for SW_REQ packets in Loconet API
- SW_REQ packets in UI can now be assigned an On/Off key press state
- LocoIO can now be programmed to respond to SW_REQ packets depending on their On/Off key press state
- On/Off key paramter is now shown in Loconet packet inspector for SW_REQ packets
- changed the Loconet packet inspector to allow customized columns
- moved to new type of context menus with icon representations
07/13/03 - v0.8.21
- moved to VS.NET 2003
- optimised bit wise operations
- added LocoIO programming for all 6 types of input configurations
- added class wrappers for sorting properties of packet types
06/20/03 - v0.8.20
- added reading/writing port states in LocoIO programmer window
- added support for LocoIO setup byte programming
- added LocoIO multi-port OPS_PEER_XFER packet type for controling signals and switches
06/15/03 - v0.8.19
- OPS_MULTI_SENSE packet is now recognized
- added reservation editing
- cleaned up some problems with switchboard's context menu
- cycle track orientation in both directions
05/16/03 - v0.8.18
- consolidated tracks and turnouts into the tracks group
- unified the state class for turnouts and signals
- misc. GUI fixes
04/29/03 - v0.8.17
- added manual control of turnouts
- added reporting of "switch state" Loconet packet type
- made decals an embedded resource
- changed all track decals to smaller square look with 8 rotating possitions
- changed track decals to be dynamicaly created and cached
- added all switchboard colors to settings
- config.xml has been removed and consolidated to settings.xml
- settings.xml is no longer copied by the installer; first run creates it with defaults
04/07/03 - v0.8.16
- Added key shortcuts (Home)/(End) for Forward/Reverse
- Changed LocoIO address range to 81-255
- Added broadcast address feature for LocoIO programmer
03/24/03 - v0.8.15
- removed the obsolete "Sections" object
- updated to a new version of the docking control
- cleaned up release of registered events for closed windows
- added "hide all", "show all" in Windows menu
- removed some variable bloat for all dynamic context menus
- fixed bugs with object browser context menu
- implemented progressive throttle increment
- changed install banner
03/18/03 - v0.8.14
- fixed issues with keyboard shortcuts and multiple throttles
- reversed mouse wheel behavior
- turnout configuration has been added
- added context menu for Loconet packets log
02/25/03 - v0.8.13
- added dynamic attribute binding wrapper for propertygrid classes
- added background dispacher thread
- added dispacher message docking window
- signal state changes now runs on dispacher thread
01/18/03 - v0.8.12
- added ability to configure signals
- added manual control of signals
v0.8.0 to v0.8.11
Prior to this change log.