Change Log
xx/xx/18 - v4.0.7.0
  • moved RRA application to .NET v4.6.1 for msix/appx deployment capability; .NET v4.6.1 is not officially supported in Win Vista so theoretically Vista support is dropped although users have successfully installed .NET v4.6.1 on Vista
  • updated dependency libraries (.NET)
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:
    • swipe panning
    • pinch zoom
  • 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.