GEMS Dash Design

Digital Dash Display Module Configuration Software

Dash Design is used for configuring GEMS digital dash display modules.

Introducing Dash Design

Design Tab Design Tab

Subsections of GEMS Dash Design

Subsections of Introduction

Notation

Some common notation is used throughout this documentation:

Menu commands are signified in bold type with a pipe symbol | between each level of the menu.

For example, Edit | Undo Ctrl + Z indicates that you should click on the Undo item in the Edit menu, or alternatively to use the associated keyboard shortcut, Ctrl + Z.

Text Entry

This Font is used to indicate text that should be typed in by the user.

Getting Started

Working on tractive systems (which includes but is not limited to engine(s), motor(s), inverter(s), high voltage battery packs and high voltage cables) requires special experience and training.

Incorrect installation or use of GEMS Electronic Control units (ECUs) or software may lead to electrical / mechanical damage, injury or even death. As such, installation must only be performed by users with experience with electronic control systems and a competence of Windows based computer software.

All accompanying documentation must be read thoroughly before installation is attempted.

If you are in any doubts regarding the fitting and use of this product, please contact your reseller or GEMS directly at tech.support@gems.co.uk

General Engine Management Systems (GEMS) Ltd shall not be held responsible for any mechanical or electrical damage or personal injury occurring whilst using this product. Neither shall GEMS be held responsible for damage, injury or death caused by the misuse, misunderstanding or miscalibration of this product.

Installing Dash Design

Download and run the installer from https://gems.co.uk/downloads/software/. For more details, see Installing GEMS Dash Design .

Opening a Setup File

File | Open Setup...

Channels

Channels may be configured to convert data acquired from CAN or A2D inputs into physical units.

Logic channels can be used to generate logic outputs based upon comparisons of other channels.

Channels may be chained together and have filtering applied.

More complex channel processing can be specified using Math channels.

Gauges

Gauges generally are used to display the value(s) of input channel(s).

Gauges are configured on the design tab.

Verifying the Setup

The Setup Check feature indicates warnings and errors in the setup file. It is best to resolve any warnings / errors before simulating or programming the display.

Simulating the Display

The setup can be tested on a simulated display via the Simulator tab.

Programming the Display

The setup can be programmed into the display using the menu command File | Upload To Display F7.

Installing GEMS Dash Design

Downloads

  • Visit https://gems.co.uk/downloads/software/
  • Locate the Download for the Dash Design product
  • When prompted by your internet browser, save the installer file to a easy to find location
  • When downloading is complete, locate the downloaded file and run the installer. Follow the prompts given by the installer
Note

The installer does not include drivers for USB products or the GEMS dongle. These files and must be downloaded separately if required from https://gems.co.uk/downloads/drivers/.

Checking for Updates

Dash Design will check for updates when started. If a new version is available, a notification will be displayed with a link to download and install the update from within Dash Design itself.

Updates can be checked for manually from Help | Check for Update.

Note

Some anti-virus / security products will block connections to the internet from Dash Design. You will need to ensure that Dash Design is allowed through your firewall.

Warning

If using Windows 7, checking for updates may fail with WinHTTP error code 12175. If this occurs, you’ll need to enable TLS 1.2 support. See the Easy Fix section at microsoft.com.

Beta Channel

If you would like to use the beta version of Dash Design, you can select the Help | Update: Use Beta Channel option. Beta versions of software are released much more frequently but may not be stable. Using the beta version helps us to detect unexpected problems with the software before making it a public release.

GEMS Dash Design Revision History


================================================================================
Version 2.3.14 - 04 September 2025
================================================================================

T#5988: CAN Tx: Display 'Special Value' name in message layout view if not a regular channel.
T#1044: Added DBC Export for CAN Rx / Tx.
CAN DBC files are now interpreted in Latin1 encoding rather than UTF-8.  For example, fixes display of exported degrees symbol in other applications.
Delayload vxlapi.dll / vxlapi64.dll.

T#6023: Added 'tolerance' column for logic channel conditions.  Applies to = and <> comparators.
    Tolerance values are currently always emulated by refactoring/inserting logic channels during export.  
    Future display firmware versions may add native support for logic tolerance values.

T#6025: Supplemental: To provide more natural logic expressions with operator precedence and grouping of terms with parentheses,
    maths channels have been extended to add logic related functionality:
    Added emulated maths functions for sgn, near, not_near, clamp.
    Added emulated relational operators, <, <=, >, >=, ==, !=, logical operators &&, ||, !.
    These functions/operators are emulated using floating point arithmetic / min / max / abs on existing firmware.
    Future firmware versions may include support for these functions natively.

T#5898: Add additional Conditions for rule based LED setup.
T#6146: Add tolerance for Rule based LED setup conditions.
T#5618: Increased max number of segments for bar based gauges to 5000.

================================================================================
Version 2.3.13 - 23 June 2025
================================================================================

Updated PCU510 simulator to version 03x31.
B#5871: Updated PCU700 simulator to version 01x21.
Fixed MD5 Mode for auto-save locked setup feature.
B#5972: Fixed calculation of 'Increment' value on limiter gauge when setting 'End' property.
Fixed rendering of bar tacho with smooth edges + separators on Design tab.
T#5974: Add smooth (interpolated) position to Bar Tacho gauge (PCU-510)
T#5975: Add 'Hide above value' property to limiter gauge.  PCU510 03x31 or later firmware is required for this feature.

================================================================================
Version 2.3.12 - 17 June 2025
================================================================================

Updated PCU510 simulator to version 03x30.
Updated PCU700 simulator to version 01x20.
Added additional label to default NO CAN Rx screen to remind users about monitored channels.
T#5899: Added "End" property to limiter gauge and moved 'light count' into the 'data' category, alongside the range values.
T#5839: Smooth position on Round Tacho, VTBar and HTBar gauges for CD5x.
B#5840: Fixed always filled appearance of square bar gauges when anti-aliased.
B#5928: User should not be able to edit predefined logic channel.
B#5929: Fixed crash if predefined logic channel selected in logic page.
B#5930: Fixed update logic for predefined logic channels (e.g. marshalling LED logic) which would break input channel.
B#5601: PCU8 Conversion to PCU-700 - Import channel with colour map used on warning gauge fails if directly using CAN source.
B#5959: XML Import/Export was missing Colour Map user-defined shared presets.
T#5927: Preference to auto-save locked setup name to MD5 named file (the default for Display Utility).
    Display Utility: Changed default 'auto save locked setup' preference to "When Programming" as was the case with Display Utility v1.
B#5894: Fixed issue using shift + arrow keys to select multiple items in grids such as CAN receive signals list.
    Grids that use 'edit on typing' mode would open grid editor when the shift key was pressed.
Added home/end key handling to grids.
T#5647: Implemented drag & drop for moving a screen pages to a new position in the list.
    + added Screen menu command for moving a single screen page to a new position in the list.
    Screen pages tab now supports multi-select (can also be used for multiple clear / enable).

================================================================================
Version 2.3.11 - 16 April 2025
================================================================================

Updated compiler version / internal libraries.
T#5771: Update scaling of 3V8 in PCU510 setups.
    Predefined scaled analogues will now always be updated if they do not match when loading.
    Display info in setup check if scaling changed.
T#5796: Added predefined logic channels for marshalling LED statuses (PCU700 / PCU510).
    These are in addition to the existing mask channels, the difference is 
    that they resolve to a more intuitive logic output (0 or 1) that on PCU510 
    can also be used in event processing.
T#5738: Setup check: delete VID_LIMITER_START on value gauges with RID_SECONDARY_SOURCE.
    It appears to be possible for some setups to define both LIMIT and LOGIC colour modes on value gauges, which does not operate correctly on the display.
Added support for Vector XL CAN driver.

Updated release process to now put build artifacts into sharepoint document libraries.
B#5895: Obscured channel names in shared scaling list.

================================================================================
Version 2.3.10 - 10 February 2025
================================================================================

B#5591: "Save As" via OS file dialog does not work correctly if the file does not exist.
B#5589: Fix applied: report of application crashing when saving setup to network share.  
   Setup files and Locked Setup files are now written locally and then moved to the network using system functions.
B#5561: Fixed Rule-based LED setup compilation for the display when 2 conditions are combined with a logical operator.
Installer: fixed icon being placed on desktop twice.
B#5455: Reverted regression of latch option for logic channels for many display types excluding some older displays or those with CD4x core.
B#5409: Fixed failure to reprogram ethernet displays twice in a row in Dash Programmer app.

================================================================================
Version 2.3.9 - 20 January 2025
================================================================================

Updated to handle CAN-FD messages *from* simulator.
#5416: Include 'Monitored Channels' section to Setup for PCU700 now that No CAN 
   screen is based upon receiving monitored CAN channels.
Fixed backwards compatibility issue relating to export of setups with Needle Gauge in legacy versions of the application.
Removed restricted 'Notifications' (Error Text) channel types from PCU700 UI.
Monitored channels setup: Added multi-select to the picker dialog + to the list of monitored channels.

================================================================================
Version 2.3.8 - 03 December 2024
================================================================================

B#5319: Fixed Unicode issue with about box title / details in branded DashProg app.
T#5323: Images being exported to displays with 16bpp density (or cd3x based) are now dithered by default.
     This can be switched off in the settings for individual graphics.
B#5320: Fixed crash if saving a new PCU700 setup due to attempting to write validation log to CWD, which is in Program Files for installed application.
      Added additional defenses around save/upload actions that could perform FIA rules validation to show an error instead in case of exceptions.
T#5365: Branded build: Display type changes.
T#5366: PCU700 - Remove non-functional graph gauge.
Installer: added firewall exception for appropriate builds that support ethernet displays.
T#5381: Added configuration of marshalling LED brightness for PCU700 (requires firmware 01x11 or later).
Added PC700 simulator version 01x11.
Added Shell for PCU510 simulator (to show LEDs).
T#5302: Added mechanism for sharing sensors (channel conversions) between multiple channels.
B#5383: Error messages/crash when importing PCU700 CAN with channels that conflict with predefined CAN channels for LED control.
    Channel conflicts are checked and errors added to import message log instead of pop-up dialogs.
    Fixed possible undefined behaviour in XML reader when escaping empty strings.
    Crash was due to B#5320.
T#5382: PCU700: Predefined CAN message for LED brightness control.
Pulse progress bar when waiting for device for all tasks.  Fixes Firmware programming task where the progress bar would not pulse when waiting for firmware to be flased by the display.
B#5375: Reduced GIF gauge live preview rate as it was otherwise preventing the UI from updating correctly in some cases.
    Disable live preview on animation gauge by default.

================================================================================
Version 2.3.7 - 31 October 2024
================================================================================

B#5218: Updated platform.iss to use latest VC Runtime DLLs (prevents crash since updating compiler).
T#5232: Corrected RAM size properties for CD6-43, PCU-700 and PCU-510, to avoid size warnings when programming setups.
    Fixed required RAM size calculation during setup programming.
    Optimize setup before building font table.
T#5231: USB: Wait for display to complete flash erase/write before saying that a programming operation is complete.
B#5234: Fixed multiple colour presets not working on the display due to bug in modifier chain optimizer not including sensor child nodes in comparisons.
T#5237: Colour Gradient Presets: Added checkbox option to use range from the preset rather than a local per-gauge override.
B#5238: Fixed missing "Events" tab for some display types.
B#5129: PCU-700: Fixed default new channel type (was previously unsupported function table type).

================================================================================
Version 2.3.6 - 18 October 2024
================================================================================

B#5104: Fixed sorted lists in numerous places due to bug in VS2022 compiler for 32-bit release builds affecting std::sort on std::deque.

T#5063: Options to set CAN ID for PCU700 status message on CAN.
T#5200: "Show Predefined" checkbox in CAN Rx signals table.
T#5149: Shared presets for colour map used on warning gauge / text gauges.  This feature is not backwards compatible with older application versions.
T#5156: Moved SDB (DBC signal database) library to package manager.

Added methods to automation interface for binding PC CAN adaptors (PCAN or Kvaser) to the simulator.

================================================================================
Version 2.3.5 - 20 September 2024
================================================================================

Fixed issue with LED IDs in LED rules editor that would have affected PCU510.
R#5106: New LED handling for PCU700.
Update PCU700 Simulator to 01x09.

B#5142: Fixed A2D Channels Internal SD 3v3 and Internal SOM 3V3 were assigned to the wrong A2Ds
   These have been reassigned + renamed to ensure automatic fixup for any existing setups.
   Channel names are now "Internal 3V3 (SD)" and "Internal 3V3 (SOM)".

T#5072: Added 'Audit' feature to all builds.  This generates 'mermaid' routing 
    diagram and displays it in web browser.
T#5109: Updated to emerald_id/1.2.53.

================================================================================
Version 2.3.4 - 27 August 2024
================================================================================

Fixed programming of setups and firmware over TCP connection (PCU510) - programming process would report failure and abort early.
B#5100: Fixed: PCU510: Channel 'Internal CD 3v3' should be 'Internal SD 3v3'.

================================================================================
Version 2.3.3 - 26 July 2024
================================================================================

T#4872: Auto-configure PCU510 built in [psuedo] A2D channels.
Update to PCU700 01x07 simulator.
Enable ethernet comms for PCU510.
Fixed invalid setup check warning about Group gauge.
Added feature to simulator channels list so that items may be checked and only those items will be shown in the simulator channel list.
T#5075: Added custom colour maps.  Requires firmware update to support (e.g. PCU700 01x08).
    Added conversion of function tables used as colour maps to custom colour maps for displays that do not allow function tables.
Refactored display setup export to avoid changes requiring emerald library updates.
T#4877: PCU510 Simulator.

================================================================================
Version 2.3.2 - 18 June 2024
================================================================================

For displays that use FIA checksum verification, output the firmware checksum when programming the display.
Tentative fix for possible issue when initializing USB connection to display.
Fixed issue with LED Rules builder where LEDs set to OFF could override other LEDs.
Branded display programming tool: Fixed installer system configuration settings for GEMS license system.
T4982: PCU700 Feature Restrictions.
Added PCU700 validator with validation report.
PCU700 Internal Temperature scaling changed to avoid use of function table type channels: Display firmware version 01x06 or later is required otherwise internal temperature readings will be incorrect.
B#4960: Fixed push buttons on GLW-43 simulator not visually updating when pressed.
Use notification popup system for fullscreen mode popup instead of legacy toaster popup.
Updated PCU700 simulator to 01x06. 
Removed PCU700 simulator versions prior to 01x06 due to incompatible changes to internal temperature scaling.
Warn about unsupported gauge types.
Added properties form to CAN RX setup page to enable modifying multiple signals at once (e.g. setting CAN ID to be the same for a set of signals).

Updated to C++20 standard.
Updated to cryptopp 8.9.0.

================================================================================
Version 2.3.1 - 29 May 2024
================================================================================

Fixed bug when exporting setup leading to incorrect display unit conversions.  Since the recent change to clone the setup prior to export, it was possible for additional unit conversion channels to be inserted.
Modified Ethernet Display Module discovery service to bind to network interfaces individually to avoid packet loss on some systems.
Fixed possible crash during application shutdown relating to the Ethernet Display Module discovery service.
T#4935: Added support for Network special format for value gauges.
T#2730: Moved PCAN dependency to package manager.
Add PCU510 type.
T#4871: PCU510 LCD properties.
T#4873: PCU510 LEDs.
T#4874: PCU510 Ethernet.
B#4946: Fixed crash when un-checking database node in DBC import dialog.
T#4876: Camera Gauge.
T#3941: Add support for Arc gauge.
Fixed issue with updating layout of gauge palette on design page when changing display type.
Added auto-size option to Needle & Arc gauges.
Added additional features to Unique Fonts dialog to list all items using a given font and additionally to delete.
Added additional text direction modes for flipped / rotated text when using vector fonts.
Fixed Menu Gauge: MENU CONTROL channel was not being added to the setup nor attached to Menu Gauges.
Added properties to menu gauge for configuring control events.
Fixed condition name for Bit Pattern LED rules.
Removed Text History gauge from all display types as no longer supported by any current firmware.
Added Animation (GIF) gauge to CD6x displays.
Fixed property editor for animation gauge file path.
B#4953: Fixed crash in setup browser when cancelling edit of sub-directory.
B#4944: Fixed incorrect fixup of downloaded track database file from Display Module.
T#4934: Dash Programming tool: Added additional commissioning features for users with appropriate licenses.
B#4943: Fixed binary format of track database for display (insert header padding).
Upload firmware: If restoring last selected firmware filename, set the directory of the picker to the parent of the restored filename.
T#4950: Added feature for auto-saving locked setup files when either saving the setup or programming the display.
Moved export raw setup menu options to a sub-menu in gems build and removed from other build variants where the locked setup feature should be used.
Fixed crash if setting speed input or odometer input to a circular reference.

================================================================================
Version 2.3.0 - 26 April 2024
================================================================================

Breaking change - XML setup export of led_rules no longer includes property categories.

B#4084: Fixed crash when adding a vector font.
Fixed update of aliases in CAN Rx signals grid following replacing the currently open setup.
Store/restore layout of CAN Rx signals grid when setup changed as column widths for consistency in help generation when switching CAN-FD enabled setups.
Fix issue with closing Setup Check view via automation interface.
Renamed columns in Case channel editor.
Added 'copy names' context menu command to channel lists.
Fixed minimum size of Filter picker on Channels tab when shown for some channel types.
ETA channels no longer have input/output units since they output time values.
Fixed connect to GDA function in simulator.
Fixed erroneous CANTXWAKEUP setup check warning.
Fixed crash if setup closed while unit preferences dialog is open.
Various modifications for help generator.
Improved sizing of tooltips.
Fixed @units special format for value gauges.
Branded build: Include Events tab.
PCU700: Fixed missing pre-defined channel Analogue 24.
Fixed undo scope setting name of LED rule.
T#4824: Updated wording in upgrade required dialog.
B#4820: Marshalling LED status - Marshall Blue R channel missing source channel.
T#4724: Make marshalling LEDs monochrome in rule-based LED setup.
T#4723: Added bit pattern mode for rule based LED setup.
B#4742: Fixed validation of floating point numbers with scientific notation.  Fixes issue with linear scalar channels with e.g. scalar of 9.1555e-5 not updating editor and showing value from prior selected channel.
B#4676: Fixed apparent change in datatype when changing signal type to FD for channels imported from DD v1 that do not have the data type set.
B#4916: Disallow predefined or duplicate channel names for CAN Tx messages (which are actually channels under the hood).
B#4833: Fixed crash adding menu item to menu gauge.
B#4826: ECU Text channel type may only be used for channels with a direct raw CAN source.  Added setup check for this + disable ECU Text option for inapplicable channels.
B#4823: Fixed file appearing to be modified following programming into display if the setup uses rule-based LED setup.
Added context menu to CAN Rx signals to show the channels tab for the selected signal and conversely from Channels tab to show the CAN Rx signals tab.
T#4817: Added 'Conversion' column to CAN Rx signals table.  It is now clear if signal have a text conversion and the conversion can be edited from the table.
Fixed undo scoping issue when changing LED group name via the LED group editor dialog.
Added drag & drop to LED Rules tree.
LED Rules: added 'Duplicate' context menu command.
Fixed bug in Gauge tree drag & drop when validating ancestry.
Fixed crash in gauge tree when merging properties for some selections involving groups and their children.
COM interface screenshot function now uses a chroma key to remove the matte from the drop shadow for help generator.
Close any LED rule editor dialogs when closing the setup.
Fixed import XML message box text suggesting that it was an export.
Fixed serialization of CAN Response channels to XML.
Fixed issue with XML import of CAN Tx messages where the shared CAN tx sensor was being erased.
Implemented goto location for CAN Tx messages from setup checker.
T#4106, T#4592: Added HTML help system.
T#2872: Ethernet display comms support + display discovery protocol.
Disable export XML menu item for locked setups.
T#2869: Added features to Locked Setups:
    Embed checksums / hashes for verification, some ECUs may include internal checksumming for scrutineering purposes.
    Include Setup Name and Source Setup filename.
    Option to embed password protected original setup (AES encrypted).
When adding a 'Special Type' signal to a CAN Tx message, an input channel is also selected - even though it is not used it is required for the signal to be generated by the display firmware.
T#4926: Add support for OEM serial numbers.
Support trackdb for 15x?? GLW-43.

================================================================================
Version 2.2.62 - 21 March 2024
================================================================================

T#998: Use multiple lines for gauge palette 'toolbar' on Design page if there are too many gauges to fit in a single row.
B#4546: PCU700 corrected Analogue channel for CPU Temperature.
T#4747: Add IMU channels to PCU700.
T#4748: Add PCU700 Marshalling LED status.
For displays that have firmware update checking enabled, fixed a regression that resulted in the firmware version being checked against the bootloader version.
Crash Report: Tentative fix for crash when merging properties for multi-selection of gauges on the design page.
Updated to emerald 5.5.7.
Adjusted COM automation interface to assist help system generation.
Added missing HelpIDs integration for Events tab.
Add any missing screens to existing setups when display properties have changed since the setup was created (e.g. No CAN RX screen).
Adjusted layout of channels tab to allow a smaller minimum size.
Added menu item / action to show the setup check view (makes this automatable).
Increased minimum column size for setup check view so that Severity column is not clipped on first view.
Simulator channel values can now be set via the COM automation interface.

CAN TX: Add Signal: Offer selection of 'special type' (e.g. Setup Name / Serial Number) instead of a channel to make it clearer how to add a special type signals.
CAN TX: fixed display of 'Setup Version' data type in type selection list.

Fixed: Do not display left/right LED columns in Logic channels list for non-applicable display types.
Fixed give unit selectors a minimum width, fixes performance timer config having unreadable units.

================================================================================
Version 2.2.61 - 05 February 2024
================================================================================

B4722: Prevent unhandled exception in Dash Programmer app if firmware file is missing.
B4657: Fixed issue with editing CAN Signal Bit Length in CAN setup editor after switching on CAN FD mode on the message.
Fixed crash when selecting setup file in Dash Programmer app.

================================================================================
Version 2.2.60 - 15 December 2023
================================================================================

Reworked project structure to improve release build duration & support building additional apps.
Added Dash Programmer app.

================================================================================
Version 2.2.59 - 12 December 2023
================================================================================

Fixed programming of locked setups to the display.

================================================================================
Version 2.2.58 - 12 December 2023
================================================================================

T4324: Branded Display: Added additional predefined channels + removed LSDs + Lap Timing setup.
T4649: CanTX: Grey out BRS if FD not enabled.
T4649: CanTX: Display setup check warning + highlight signal if it exceeds the message DLC.
T4668: Changed list of predefined CAN-FD Data Bit Rates.
If CAN-FD Data Bit Rate is not enabled then do not show CAN-FD columns in RX signals / TX messages grids.
T4667: Display error if CAN FD Data bit rate < CAN Bit rate (if not set to disabled).
Changed labels for CAN rates for consistency (Bit Rate + Data Bit Rate).
T4573: Locked Setup: Option to lock setup to a specific serial number on applicable display types.
Fixed UploadSetup via COM interface.  Additionally added ways to program raw setup files that way.
Fixed progress bar when programming setups.

================================================================================
Version 2.2.57 - 01 December 2023
================================================================================

T4575: Add support for CAN-FD setups for CD6x generation displays.
Updated CAN message view to support CAN FD.  Now includes a vertical zoom bar and some visual changes.
T4576: Add support for CAN-FD dbc import.
Updated DBC import to use v2 of sdb library (needed for CAN-FD).
T4597: Added menu options for exporting raw setups (packaged / unpackaged) and logger setup.
Updated to emerald_id 1.2.36.
Updated to C++17 standard.

================================================================================
Version 2.2.56 - 06 November 2023
================================================================================

T4513: Add support for error text filter channel (Error Text).
B4556: When exporting display setup binary, topologically order outputs so that 
    dependent outputs are calculated after their dependencies when the display
    does an output channel processing pass.

================================================================================
Version 2.2.55 - 31 October 2023
================================================================================

T4478: Add support for 0-100% LED brightness control on applicable display types.
T4507: Added NO CAN Rx screen to branded display type that supports it.
Hide LED brightness control entirely on displays that do not support it.
When exporting setup binaries for displays, always convert images to PNG format.
New graphics are now inserted in setups in PNG format without storing dithered 16bpp versions.
Always clear halt on USB endpoint following a failed bulk write.
Fixed crash in LED setup page for displays that do not support rule based LED setups.
Reworked box sizers so that hiding items will also remove layout spacing.
B4471: Fixed flickering of tooltips.
T4442: Added option to rescale gauge layout / fonts / graphics when converting setups.
T4524: Remove CAN termination option from displays that do not support it.
T4525: Remove CAN Request tab from displays that do not support it.
B4485: Completed & tested implementation of XML setup import/export feature.
Changed behaviour when dealing with output channels that are using the same raw CAN 
   source to insert an intermediate channel instead of duplicating the source.
Optimized handling of unit IDs to drastically reduce copying and parsing.
SetupCheck: auto-rename Log Mem Total to Log Mem Free to add (kB) suffix as per v1 software.
Fixed range clamping in BoundedIntProperty.
Default shape corner radius to 0 instead of 10 to avoid modifying legacy setups that did not define it.
Modified auto sensor / channel naming for better consistency between rename operations vs creation.
Fixed error in parsing unit IDs that have a quantity but not a unit (e.g. "unitless:").
Fixed "Audio Volume Text" source.
Control screen: changed monitor channels to use channel name rather than 'CDG' to disambiguate during file comparison in unit tests.
Fixed handling of graphics with BMP format in some cases.
T4550: Added support for latchable logic channels (requires updated display firmware).

Update to Emerald 5.5.4.
Update to emerald_id 1.2.34.

================================================================================
Version 2.2.54 - 27 September 2023
================================================================================

Adjusted display type support.

================================================================================
Version 2.2.53 - 26 September 2023
================================================================================

Adjusted display type support.
Write libusb read/write errors to application log.
Increased timeouts for libusb read/write operations.
Fixed issue with interpolated LED patterns where if some LEDs were initially set to a colour and then turned off, they would be considered for interpolation.

================================================================================
Version 2.2.52 - 22 September 2023
================================================================================

Branded Build: Added rule-based LED setup for new product.
Added tooltips for LEDs on LED Mask and LED Colours row header in rule-based LED setup.
Improved behaviour of LED Mask selector strip when drag-selecting.
Updated SimHost to version 1.06.  Tentative fix for access denied error when starting simulator seen by some users.
B4429: Fixed inverted button logic for R3 and R4 in GLW-43 simulator (fixed for version 15x24+).
Fixed sorting by priority in LED Rules tree.
Fixed update of priority column in LED Rules tree if edited in LED Rule dialog or updated by undo/redo.

================================================================================
Version 2.2.51 - 15 September 2023
================================================================================

Fixed invalid licensing error for newly added display types.

================================================================================
Version 2.2.50 - 14 September 2023
================================================================================

Fixed crash showing setup page for displays that do not support rule-based LED setup.

================================================================================
Version 2.2.49 - 13 September 2023
================================================================================

T4062: New Rules based setup for GLW-43 LED control.
T4318: Add support for CD6-43 + Branded build display.
Fixed buttons in GLW-43 simulator.  Requires updated firmware plugin version.
Fixed bug in font selection dialog where vector font Y offset would not be populated correctly.
Fixed performance issue rendering icons with alpha channel on toolbars.
Fixed bug where general preferences would be blank of preferences dialog opened for a second time.

================================================================================
Version 2.2.48 - 29 August 2023
================================================================================

Fixed bounding rectangle for embedded vector fonts.
Fixed issue with font sizes for fonts that do not use legacy font mapping.
New tooltips will now automatically dismiss after a timeout and if mouse is moved away from the control.
Added preferences menu item + preferences to control tooltip behaviour.

================================================================================
Version 2.2.47 - 22 August 2023
================================================================================

T4093: Import/Export of setups as XML.
T0518: Added Track Database feature.
T3959: Add analogues to GLW-43 setups.
T3960: Add buttons to GLW-43 setups.
T3970: Add low side drivers to GLW-43 setups + setup page to configure them.
T4223: Add rotary switches to GLW-43 setups.
T4242: Updated property system infrastructure.
T4237: Support 8 analogues on LDS4 instead of 4.
T4251: Force specific DIP scaling on screen render + add workaround for automatic DPI scaling of fonts introduced by wxWidgets 3.2.2.1 update.
T2868: Rebrand application.
T4095: Branded Build: Display driver support flags.
T4104: Added Countdown timer adjustment delta configuration.
T4102: Enable configuration of events for predefined timers on the timers page for some display types.
T4100: Dynamic Channel type & Filter type restriction for some display types.
T4096: Branded Build: Resolve ambiguous display type in setups from prior application versions.
T4102: Added configuration of Fuel / Distance Trip outputs.  Odomoeter/Speed page also offers configuration of these outputs.
T4098: Branded Build: Validation of setup with regulatory restrictions.
Adjusted splash screen layout / fixed tiny text size on HighDPI.
Fix icon sizes on some HighDPI settings.
Setup converter: copy VIDs for predefined outputs.
Use a slightly different colour for predefined channels in channel lists.
Fixed regression that prevented logic/notification/graphic selector channels being added.
Include event configuration link on Toggle channel type editor.
Fixed auto-naming of cross-hair gauge.

================================================================================
Version 2.2.46 - 08 June 2023
================================================================================

B#4195: Fixed screen thumbnails not showing up on 'screens' page any longer.
    Updated to wxWidgets 3.2.2.1 from 3.1.4 to workaround compiler bug in wxImage resize algorithm when compiled for x64/release with MSVC2022 17.5.4, could have significant knock-on changes.
    Updated MSVC2022 to 17.6.2.

Added setupcheck to ensure that audio volume control outputs are added to the monitor gauge.
B#4181: Fixed handling of rotary switch states for GLW-43.
    Always init rotary switches to the first position when starting simulator.
    Updated GLW-43 simulator shell to reverse A2D values for the rotary switches.
    Updated simulator host to deal with reversed A2D values for rotary switches.
Custom tooltips: improved minimum width.
Fix for very rare crash during shutdown.
Added missing 'convert' icon.
T4148: Added regression testing for DisplayType setups.

================================================================================
Version 2.2.45 - 10 May 2023
================================================================================

Added explicit file flush following file write for displays that use mass storage devices for setup programming.
Updated to Visual Studio 2022
Updated to zlib 1.2.13
Updated to boost 1.81.0

================================================================================
Version 2.2.44 - 18 April 2023
================================================================================

Fixed installation of GEMS display drivers on Win7 x64.
Added GLW-43 15x21 Simulator.
B4058: Fixed issue where changing CAN TX message name would stop it being 
    transmitted.
    Added setup check to ensure that CAN TX messages have a monitor gauge added
    for them in case they were unknowingly broken in prior versions.
T1040: Added locked setup file type.   
    Locked setups are not editable but they fo include low-resolution 
    thumbnails of the screens in the setup, notes and screen tags.
    Locked setups can be loaded into the editor but only the 'Screens' page 
    is available.
B3947: GEMS build: Fixed Export Screen feature.
    + changed screen package file extension to gddscreen.
Enabled screen packages to be dropped onto the application when either the 
    Screens or Design pages are shown to import the screen.
T515: (179) Move CAN channel timeout setting to the CAN tab.
    Added Filter picker to the Channels tab for setting filter chain on 
    non-filtered channels (.e.g CAN).
Setup Checker: Added check for CAN channels that share the same underlying 
    source.  If such channels are identified then the source is now duplicated 
    to prevent editing of one channel affecting the other.
T317: (188) Create a new Value Gauge special format for a selected 
    channels display units.
T267: (DD-130) CAN Request: disable editing of bytes that exceed the DLC.
T2503: (DD-308) Re-implemented Windows tooltips so that they do not obscure text
    edit controls etc.  This also opens up the possibility of html content in 
    future.
    Tooltips prefixed with  are interpreted as inline html.
T2666: Show warning if uploading a setup to a display of a different type.
T318: (224) - Add "Replace" Function to Import CAN.

================================================================================
Version 2.2.43 - 31 March 2023
================================================================================

T3193: LED setup for wheel display.
T3914/T3915: Simulator: Support rotary buttons + rework to make button / analogs 
    configuration more straightforward & flexible.
Simulator: Fixed position of button hover areas when scrolled.
Fixed potential crash if display driver information is updated before UI is 
    fully loaded.
B3818: Alpha-sort "New Setup" display type list.
T4040: Add support for 'setup name' display feature.
Updated to emerald_id/1.2.28.

================================================================================
Version 2.2.42 - 14 February 2023 
================================================================================

Fixed display not licensed error for new Wheel display.
Added wheel drivers to installer.
Avoid popup message if application is started in automated mode and the last 
    setup cannot be found to avoid issues with automated release.

================================================================================
Version 2.2.41 - 13 February 2023
================================================================================

T3875: Add support for Wheel type displays.

================================================================================
Version 2.2.40 - 07 February 2023
================================================================================

B3896: Added missing column 'Wait for All' to CAN Transmit setup.
Various updates to internal libraries (bug fixes / performance).
Updated CAN Bus / Message icons.

================================================================================
Version 2.2.39 - 16 January 2023
================================================================================

Fixed regression on layout locked icon background colour.
B3852: Remove unreferenced modifier channels that were missed with bugfix B2241.
B3851: Fixed issue with some screen events (e.g. revert screen) being removed
    under some circumstances (e.g. when creating a stopwatch timer).
B3850: Monitored channels list has an empty item that can be deleted multiple 
    times before disappearing.
    Fixed add monitored channel button.

================================================================================
Version 2.2.38 - 14 December 2022
================================================================================

SDU2 - Direct colour mode option for value text gauge.
#3719: Add LDS4_DisplayLogger drivers to GEMS installer.

================================================================================
Version 2.2.37 - 07 December 2022
================================================================================

Include file size in raw setup export for raw setup uploader tool.
Include raw setup export for additional display types sdu1, smdu1.
Updated to emerald 5.5.2.

================================================================================
Version 2.2.36 - 03 November 2022
================================================================================

B3704: Fixed simulator frequently raising a CreateFile failure (timing related).
B3703: CD32 Displays not detected by DashDesign.
UT: New Setup: display screen resolution in tooltip.

================================================================================
Version 2.2.35 - 31 October 2022
================================================================================

T3523: GEMS version: remove help file menu item until the help system has been 
    completed.

================================================================================
Version 2.2.34 - 01 September 2022
================================================================================

T3327: Simulator for LDS35 Landscape (LDS35_L 15x18).  
    LDS35 Landscape is now called LDS35_L, in line with the firmware name.  
    The file extension has changed from lds35-ls to LDS35_L - any existing 
    setups will need to be manually changed in Windows file explorer.

================================================================================
Version 2.2.33 - 30 August 2022
================================================================================

B3328: Show brightness input setup for LDS4 setups.
UT   : Added additional info to setup export about which gauges invalid output 
         references are removed from.
UT   : Remove event gauges with dangling output references via setup check.
           Avoids messages during setup export and unnecessary setup bloat.
B3330: Setup Check: Remove invalid user events from screens to avoid them 
           appearing to have active events on the events editor tab without 
           having any items in the 'Action' column.

================================================================================
Version 2.2.32 - 22 August 2022
================================================================================

B3288: Fixed title of upload firmware dialog box.
Include custom / predefined screen name in event effects, e.g. "Open Screen 10".
Fixed bug relating to naming of some event effects.
Events tab: select 'All Screens' by default / fix actions grid appearing to 
    correspond to All Screens when in fact there was no screen selection, 
    leading to the event effects list being empty.
Updated to Emerald 5.4.6 (improves performance).
Include screen number in caption for screens with a custom name.

================================================================================
Version 2.2.31 - 01 August 2022
================================================================================

T3280: Add LDS35 landscape display type.

================================================================================
Version 2.2.30 - 19 July 2022
================================================================================

T3151: Add support for flash mode to Warning bar.
T3127: Add rounded rectangle option for square bar gauges.
UT: CAN Receive: Added cut,copy,delete,select all, select none handling.  
    Paste not supported yet.  Copy converts to tab separated format for paste 
    into MS Excel etc.
UT: CAN Receive: Highlight ID/start bit/size cells if signal is aliased and 
    provide tooltip indicating the aliased channels to help identify signals
    that are unintentionally aliased.
UT: Corrected CD32 display size to 800x480.
UT: CAN Receive / Transmit grids: Show display units in units column.
Updated CD5x plugin to 03x06.

================================================================================
Version 2.2.28 - 15 June 2022
================================================================================

T3133: Export Raw Setup Package feature (for applicable display types).
Update simulator plugin 03x04

================================================================================
Version 2.2.27 - 13 June 2022
================================================================================

B3120: Stop simulator when setup file closed.
UT: Fixed issue with restoring self-test delay value on graphic selectors.
UT: Fixed disabled state for toolbar icons (use grey colour).
UT: (internal) Build speed optimizations (unity builds for some code libraries).

================================================================================
Version 2.2.26 - 09 June 2022
================================================================================

T3077: CD5x Simulator.  Updated simulator host application and plugins.
T3071: Text destined for displays using vector fonts is now in utf-8 format
    so that all unicode characters can be rendered.  Latin-1 codepage for 
    vector fonts is no longer used.  This will require the display firmware to 
    be updated for correct text rendering.
B3069: Render vector fonts using FreeType in the DashDesign UI.  There are 
    inconsistencies in text placement when rendering using FreeType compared to 
    Windows GDI.  Existing setups may require some positional adjustments of 
    text to account for this difference.  This is easier now that the editor 
    is now more representative of how the setup will look on the physical 
    display / simulator.
T3073: Multi-face vector fonts are now supported by the display & simulator.
UT: Setup export: Fail if embedded font references are invalid rather than 
    exporting a potentially non-functional setup.
UT: Fixed page select source not showing up in editor even though present 
    in the setup for some display types.
UT: Modified decision on if display supports embedded fonts during setup 
    programming.
B0084: Fixed copy/paste of colour map and other input modifiers on gauges.
    Fix also applied for copying of screens.  Fixed source reference IDs 
    when copying input chains on screens.
UT: Fixed loading of colour map on Value gauges.
T2667: Added missing self test delay feature for Image Selectors.

================================================================================
Version 2.2.25 - 01 June 2022
================================================================================

T1021: Added setup conversion feature.
T3064: Add support for embedded fonts (resolved issues in development version).
T3072: Modified codepage behaviour.  Prefer latin-1 codepage for bitmap fonts
     as this is more compatible with vector fonts on displays that do not 
     support utf-8.
     Added setup check for charset issues where text outputs are routed to a 
       mixture if bitmap/vector font gauges.
     Setup export will now convert text depending upon the codepage used by 
       output gauges.


================================================================================
Version 2.2.24 - 17 May 2022
================================================================================

*** Development Release ***

T3064: Add support for embedded fonts.
T3061: Include background colour option for dynamic text gauge.
Fixed serialization of 'justify' property on dynamic text gauge.
Added options to offset / crop fonts to workaround issues where font bounding 
     boxes are oversized for the range of characters being used.
Added additional options for controlling font rendering.
Added display rendering emulation to font dialog.
Added Unique Fonts dialog to identify fonts that have separate font data within 
     the setup.  Includes find feature.
Added display of font table to font dialog preview with zoom / scroll.
Show memory usage of fonts in the font dialog.

================================================================================
Version 2.2.23 - 24 May 2022
================================================================================

B3050: Fixed positioning of marching ants / resize handles on screen editor when
    zoomed in + scrolled.
B2935: Fixed PDU Tab issues when switching CAN ports.
T2940: Branded build: Hide some functions from math editor.
T2938: Added min/max functions to math editor.
UT   : Ensure that newly added Lap Timing outputs are marked predefined.
UT   : Fixed issue with save setup dialog not adding file extension.
UT   : Fixed serialization of corner radius on shape / warning gauges.
UT   : Added corner radius option to bit gauge.
UT   : Fixed keyboard handling on math script editor so that keyboard shortcuts
          do not override keys used for editing (e.g. DEL).
UT   : Improved responsiveness of math editor.

================================================================================
Version 2.2.22 - 20 May 2022
================================================================================

T3019: Added support for round bit gauge.
T3021: Added support for rounded rectangles on shape gauges and warning gauges.
B3029: Font mapping: Some fonts do not get correct sizes due to the way that 
     font mapping works to retain compatibility with existing DDv1 setups.
     Some hardcoded exclusions have been added.  Further exclusions can be added
     by listing them in C:/ProgramData/GEMS/DashDesign/logfontbypass.txt.
B3028: Bit Gauge: ensure that item bitmasks are correctly populated.
B2947: Fixed: Dash Math Channels do not show up correctly in log analysis s/w.
B2928: Fixed some GPS signal names not showing up when added on CAN transmit tab
    This issue also affected CAN transmit signals that have scaling / units.
T2855: Fixed window focus handling when changing between tabs - means that
     Select All option is available when switching to the design tab.
UT   : Fixed selection of latest simulator plugin when plugin list is filtered.
UT   : Fixed: Clear on CAN transmit was removing read-only channels 
     (e.g. PDU control channels).
Updated to emerald 5.4.4 / emerald_id 1.2.4 (now via package manager).
Updated gems libraries.

================================================================================
Version 2.2.21 - 16 March 2022
================================================================================

UT   : Use a different value ID for enable of PDU channels to avoid disabled 
       channels being removed during setup export.
       Added unit tests.

================================================================================
Version 2.2.20 - 15 March 2022
================================================================================

UT   : Fixed issues with PDU Control channel sources and singleton sensor.

================================================================================
Version 2.2.19 - 15 March 2022
================================================================================

R0101: (DD-278) - Add support for PDU-8 Configuraton (AEM only).
T2783: GEMS: Install libusb drivers for LDS4 (v1,v2,v3), CD32 and LDS35.
UT   : GEMS: Include graphics files / LDS4 firmware / demo setup as in v1 editor.
B2782: Fixed enumeration of drive based displays if LibUsb driver not installed
       or malfunctioning.  Displays a warning in the device selection dialog.
T2668: Raise setup check error if setup uses a graphic that is larger than the 
       screen size.
T2691: (DD-275) Reworked behaviour of rate selection / selection movement on
       Logger channel list.
B2839: (DD-313) Fixed: "Clear" Button on CAN Receive Tab was also deleting 
       CAN Transmit.
T2867: Create tabs on-demand to improve startup time.
UT   : Fixed erase of CAN channels could leave some CAN source channels in the 
       setup.
UT   : Fixed bug in update of dependent outputs list for channels if referers 
       had been erased.
UT   : Fixed drag-value on floating point spin boxes dropping fractional value.
UT   : Fixed crash on Images page if importing an image that can't be loaded.
UT   : Performance enhancements.
UT   : Close DBC / OBDII import dialogs if new setup created / loaded.

================================================================================
Version 2.2.18 - 04 March 2022
================================================================================

B2693: (DD-312) CAN Transmit Tab: changing signal source channels could result 
       in original channel being erased from the setup.
B2847(1): Fixed handling of legacy can setups that do not use DBC style bit 
       offsets where multi-byte big-endian values would have incorrect offsets.
B2847(2): Legacy setups with no outputs from a single CAN source
       would result in a confused CAN setup in DDv2.  Setup check at startup 
       will fix these channels by adding an output to the setup.
UT   : Remove legacy '_string' channels that are not strings and also are not 
       used by any other outputs or gauges.
UT   : Do not raise error about missing GPSi speed input on some display types.
UT   : Odometer input issue a warning instead of an error if the standard 
         Speed Input does not itself have an input, rather than an error about 
         speed units.

================================================================================
Version 2.2.17 - 05 January 2022
================================================================================

T2691: (DD-275) Changed how rates are selected for channels in the Logger setup.
       Streamlines keyboard & mouse editing of logging rates.
       Clicking the rate column will now pop up a rate selection menu instead 
       of using a grid editor.  The keyboard will pop up this menu if the 
       return / enter key is pressed.

B2665: Fixed update of lists of 'used' screens when screens are modified to 
       become 'used'.
B2690: Fixed display of 'Insert Function' button in Maths editor.
(T2487/DD307): 'No Warning Text Channels' => 'No Notification Channels'
DD-110: Added additional metrics: on change, alarm triggers + obdii pids.

================================================================================
Version 2.2.16 - 22 December 2021
================================================================================

B2685: GDD Maths editor - fixed issue where input controls were not cleaned up 
       correctly leading to 'corruption' of the UI.
B2688: Fixed: PI constant was not working in simulator for maths channels.  
       Constants are now added as literal values to display math equations.
UT: Fixed colour of text on file address bar drop down menus.
UT: Fixed scrolling of file address bar drop down menus.
UT: Added channels drop down menu in math channel editor.
UT: Added constants drop down menu in math channel editor.
UT: Fixed problem when converting channel types to 'toggle', 'if', 'on change' or 'case'.
UT: App update dialog - relayout window when showing 'install' button as 
     when hidden its position is not otherwise updated if the window is resized.
UT: Support dropping of files with .gdd extension in GEMS version.

================================================================================
Version 2.2.15 - 21 December 2021
================================================================================

T2624: Enable GIF support for SMDU4 (except in the simulator) + add VID_COUNT 
      option (SMDU4 only at present).
B2603: Fixed crash rendering GIF gauges.
B2652: (DD-280) Maths Channels: Add parenthesis around exponent of ** operator 
       when converting from text form to display setup format.  Fixes incorrect 
       operation on the display.
B2638: Fixed display of simulator (regression since 2.2.14).
UT   : Fixed positioning of FPS counter on simulator screen when scrolled.
T2511: Add support for CAN Initial Value in CAN setup editor.
T2510: Update multiplex + CAN message diagram when selecting a signal.
       UT: Also update diagram if CAN signal is modified as this was not 
       always happening correctly (e.g. changing CAN ID).
B2669: Fixed crash ungrouping tacho + label group.
T0988: Maths Channels: Syntax highlighting.
T0990: Maths: Added function call tips (mouse hover).
T2496: Math Channels: Add buttons for inserting operators.
T0989: Math Channels: Added drop-down menu of functions for insertion.
T0991: Maths Channels: Allow channel names to be referenced in maths scripts 
       directly instead of only variable placeholders.
UT   : Fixed size of units mode combobox to avoid clipping of text.

================================================================================
Version 2.2.14 - 26 November 2021
================================================================================

B2618: Fixed scrollbars on some views when not using Dark theme.

================================================================================
Version 2.2.13 - 24 November 2021
================================================================================

T2586: Added VIDEO_PLAYBACK_PLAYING display info output.
T2587: Added Video Seek Offset input to file_explorer_gauge.
B2497: Activating an expired license will now report an error instead of 
       succeeding (but silently failing).
T2585: Warn user if license expiring.
T2515: Refactoring: Use common UnitSystem implementation.
T2487: Rename Alarm Channels to Logic Channels and Warning Text to Notifications.
UT   : Licensing: store original machine key with license activations.  When 
       deactivating licenses, use the original machine key, where possible.
UT   : Display expired licenses in License Manager view.
UT   : Fixed some typos in COM interface documentation.
UT   : Fixed COM interface InvokeAction which would always return an error when 
       invoking a non-toggle action.
UT   : Fixed possible crash when using Javascipt property bags via COM interface.
UT   : Extended COM interface in preparation for automated help system generator.
DD-250 related: Resolved flicker issue on grid scrollbars.
DD-269: Re-enable math channels.

================================================================================
Version 2.2.12 - 20 October 2021
================================================================================

UT   : Fixed connection to Simulator - Updated Simulator host to use boost 
       1.77.1 due to IPC incompatibility.
DD-250: Defer header position update following column resize.

================================================================================
Version 2.2.11 - 19 October 2021
================================================================================

B2241: (DD-305) Fixed: Deleted CAN channels still show up in setup check.  
      These will now be removed and an info message will be shown in setup check.
      For some of these that have a physical gauge, the correct gauge will be 
      identified instead of any hidden monitor gauges.
T0321: (DD-110) AEM: Anonymous user feedback usage metrics.
T0305: (DD-274) Set Log rate on multiple channels simultaneously via context menu.
B0103: (DD-288) Import Screen Dialog not working:
       Reset cache database if for some reason the file was readonly.
       Added button to clear the cache to the import dialog.
UT   : For cdscreen files, use the file name as the screen name in the 
       'Import Screen' dialog, unless a user-defined name for the screen was 
       given.
UT   : Fixed typo in default tooltip for Square Mode property.
B1989: (DD-302) Fixed: Square Mode for bar graphs was not being loaded from 
       saved setup correctly.
B2240: (DD-304) Fixed crash clearing OnChange page.
T0505: (DD-275) Logging Setup: Tab / Shift+Tab now moves rate editor down/up.
B0106: (DD-283 + DD-290) Convert Predefined 'Status' channels to 'Flags' type.  
       Some legacy setups used bit-string style outputs and would show up in 
       the editor as 'Error in Input'.
B0104: (DD-301) Fixed crash when exporting screens with alarm that has no input.
B0109: (DD-219) Constrain Limiter gauge count/height to avoid control being 
       larger than the screen.
UT   : Updated to boost 1.77.0.

================================================================================
Version 2.2.10 - 13 October 2021
================================================================================

T2408: Added display info output for multimedia display for compatible display 
       types.

================================================================================
Version 2.2.9 - 08 October 2021
================================================================================

UT   : FileExplorerGauge: fixed typo in video seek interval property name.
UT   : FileExplorerGauge: Adjust line height per-item based upon font size.

================================================================================
Version 2.2.8 - 08 October 2021
================================================================================

T2381: FileExplorerGauge: Add Video Seek Interval.
B2383: FileExplorerGauge: Fixed some issues with handling of gauge properties,
       changed default title to "File Explorer".
UT   : FileExplorerGauge: changed default unsupported text colour to named 
       colour 'Dim Gray'.

================================================================================
Version 2.2.7 - 05 October 2021
================================================================================

T0321: Branded Build: app metrics can now use SSL.
UT   : Display last setup file name in startup setup selection dialog.
T2261: Added SMDU4 15X13 simulator to simulate Audio Control output.
T0321: (DD-110) Resolved some HTTP issues in branded build data collector.

UT   : Include full 24bit colours in setup export.
T2371: Add FileExplorer Gauge.
T2370: SMDU4: Add new DisplayInfoOutput outputs.
UT   : Developer Mode: Added option to edit file structure in EFM tool.
UT   : Developer Mode: Added option to view setup node graph in vscode 
       (requires graphviz).
T0079: GEMS: Allow predefined ScreenSel sensor to be edited.  Note that loading 
       modified setups into prior versions of DashDesign will overwrite any 
       edits.
T2181: GEMS: Added option to check for updates via beta channel.

================================================================================
Version 2.2.6 - 17 September 2021
================================================================================

B2188: Fixed: Channels: Switching to a Maths channel could modify some of 
        the inputs to those in a previously selected maths channel.
B2239: (DD-303) Fixed default configuration not being added to the first CAN 
        Transmit signal in a message.  
        Added a setup check that runs at startup to fix setups that have this 
        problem.
T0047: Added Audio Control channel type for displays that support them.
        Note: audio control channels will not work in the simulator yet.
T2259: If DashDesign did not shut down properly, user should be offered more 
       options for subsequent behaviour.
       Added option to always select what to do at startup instead of loading 
       last setup.
UT   : Clean up default setup of Lap Timing inputs.  Split Time / Num should 
        now be added as predefined channels on LDS4.

================================================================================
Version 2.2.5 - 20 August 2021
================================================================================

B0080: Fixed 'Save' always behaving like 'Save As' for some display types.
B0089: Do not display LEDs sub-page in Setup tab if display does not support 
        LEDs and that page was previously selected.
T0035: Added internal temperature on new display type.
T0040: Added Status outputs for USB and SD card on applicable displays.
UT   : Reworked handling of default Analogue channels.  For new setups it was 
        possible that the internal temperature / battery voltage would fail to 
        be created properly if on an input channel < 10.

================================================================================
Version 2.2.4 - 29 June 2021
================================================================================

Fixed issue preventing connection to LDS35.
Added LDS35 15x12 simulator.
Added CD35 15x12 simulator.
AEM / Emtron: Added version 15x12 simulator.
#4699: Restrict list of simulator options based upon setup display type.

================================================================================
Version 2.2.3 - 22 June 2021
================================================================================

#4861: (DD-297) Fixed issue with enable/disable screen menu item when showing 
       Design tab and the editor window is focused.
#4885: (DD-298) Fixed export of screens when a screen is disabled (fixes alarm page 
    being shown when cycling pages).
#4894: (DD-299) Fixed bug where changing the filter type on a channel could modify the 
    wrong channel.
#4860: GEMS media based displays: only add display drivers if the display info 
    file is valid.
#4660: GEMS DD: Add support for LDS35.

================================================================================
Version 2.2.2 - 11 June 2021
================================================================================

Updated compiler to VS2019 16.10, fixes code generation bug seen in other apps.
#4808: (DD-293): Open Setup: Fixed 'file not found' when using OS file dialog.
#4856: (DD-296): Fixed crash when selecting "Page Select" channel.
#4651: (DD-268): Emtron: configured application update checking URL.
#4854: (DD-295): Screen "Enabled" property changed to "Screen Enabled" and 
       hidden for screens that do not allow being hidden.
#4855: (DD-294): Fixed triggers for On-Change and Alarm screens (since 2.1.20).
#4753: (DD-290): Auto-fix broken 'Log Status' channel from old display setup.
#4801: (DD-292): Added setup check error for invalid use of time channels on 
      bar gauges.  Use of time channels on value gauges that do not have a 
      time format is now an error rather than a warning.
      Lap timing channels & ETA are now identified as being 'time' channels so 
      that setup check can identify configuration issues.

Browse setup: altered styling of 'notes' control (dark theme).

================================================================================
Version 2.2.1 - 25 May 2021
================================================================================

#4761: (DD-291) Fixed setup upgrade to fix "x1 scalar" vs "x1 Scalar" problem.
#4819: GDD: Add provisional support for displays that use removable disks or 
       present as mass storage devices.

================================================================================
Version 2.2.0 - 11 May 2021
================================================================================

Branded Build: Release candidate.

================================================================================
Version 2.1.24 - 07 May 2021
================================================================================

Added additional information to application log.
#4403: Asynchronously launch update & close application following acceptance of
    software update dialog.  Tentative fix for crash report.

================================================================================
Version 2.1.23 - 06 May 2021
================================================================================

#4544: (DD-277) Simulator: Fixed Motec M800 channels on CAN2.
#4698: Fixed Page Select input on some display types.
#3196: (DD-217): Adjusted default CAN configuration for GPSi CAN Tx.
#4703: Improved initial column widths for various grid editors.
#4482: Menu option to toggle hexadecimal display of CAN IDs globally.

================================================================================
Version 2.1.22 - 30 April 2021
================================================================================

#4270: (DD-212) Added CAN transmit tab to CAN setup section.
    CAN transmit channels can be individually enabled.
    Added scaling & unit conversion feature for CAN transmit feature via 
    hidden proxy channels.
#3196: (DD-217) Add iGPS CAN output for displays that have internal GPS.  
    Added button the CAN transmit page to add the appropriate messages which
    may be individually enabled and edited.
#4661: (DD-285) Occasional error opening setup from file dialog due to 
     concurrent file hasher opening the setup file with exclusive access.
Tentative fix for crash report for access violation during setup unloading.
Windows API errors - if text could not be formatted then print the error code.

================================================================================
Version 2.1.21 - 23 April 2021
================================================================================

#4641: (282) Fixed issue with channel logging rates in logger setup leading to
      incorrect logs.  The logging table builder has changed and there is now 
      also better time-coherence between samples that are logged at the same 
      rate.
#4403: (DD-268) Alert users if there is a software update. 
#4544: (DD-277) Fixed Motec M800 channels in simulator - added CAN stream 
      simulators for data set formats & compute value range for motec raw 
      sources.
#3483: (DD-247) Lap Time Input Preview Value is now interpreted in 
      (floating point) seconds.  Also corrected formatter.
Added additional application logging.
Updated to Emerald 5.0.5 which gives different error if file in use cause of 
    open failure.

================================================================================
Version 2.1.20 - 09 April 2021
================================================================================

#4422: (DD-273) - Setup check false positive for alarm always active if its 
     source is another alarm with an input with a lower limit greater than zero.
#4390: (DD-272) - Fixed hang - setup check shouldn't set Reset Button Hold 
     as the reset source for the Reset Button Hold channel.
#4328: (DD-271) - Changing CAN signal names where an override unit is specified 
     should rename its source channel.
#4394: GDD: Configure system for licensing in installer.
#3014: GDD: Add Freeze Channel.
#4629: Increase maximum gauge font size to 999.
#3215: (DD-228) - Allow Specific Pages in Setup to be Hidden.
#4586: Fixed: Updating Math equation should update inputs list.
#4591: BB: new simulator version 15x09 and 15x10.
Added additional error information if opening of setup file fails.
Alarm always active setup check message missing word 'will'.
BB: Remove maths channels for now until finessed.
SMDU4: show brightness input page.
Fixed signing process for installer.

================================================================================
Version 2.1.19 - 16 March 2021
================================================================================

Added some additional application logging.
Flush log when event loop idles.

================================================================================
Version 2.1.18 - 13 March 2021
================================================================================

Updated to wxWidgets 3.1.4 from 3.0.4.
#4394: License dialog: always display machine key in case there was a problem 
       that could lead to activation failure.
#4546: Fixed addition of 'Open Screen' event to an alarm input on an individual 
       screen.
#4398: Events Tab: highlight screens + actions that have effects in some way.
#4533: (DD-276) Fixed floating point text input validator regression.
#3486: (DD-249) Fixed scroll bar mouse drag on grid based combo box popups.
#3018: Added "On Change" channel type.
Internal feature: CAN port simulator binding now supports pcan and kvaser.

================================================================================
Version 2.1.17 - 29 January 2021
================================================================================

#3016: Add "If" channel type. 
#3011: Add "Case" channel type.
#3020: Add "Toggle" channel type.
#3017: Add "Integrator" channel type.
#3019: Enhancements to timer event configuration to reflect additional 
    flexibility in GEMS displays.
Fixed layout of "Math" channel type selection button in branded build.
Adjust layout of timer channel editor slightly (added a small gap before the 
    timer type selector).
Restrict available key actions based upon display type (most displays do not have 'long hold').
#4510: Fixed: Event Tab: assignment of alarms to allocated keypad IDs.
#4272: (263) Not require inputting "0" before decimal values <1.
#3945: (261) Do not delete channels when pressing backspace key on simulator page.
#4509: Developer feature: export setup binary.
#4498: "Create LED Config" should not show up in undo history.

================================================================================
Version 2.1.16 - 20 January 2021
================================================================================

Milestone GDD-S3
#3007: Added Bitmask channels.
#2999: Added Bit Gauge.
#3009: Added Differential channels.
#3003: Hide items on CAN tab depending upon application level support.
#2187: GDD: Upgrade DDv1 setups on first opening a save as DDv2.  File now 
       stores a compatibility version.
#2926: GDD: Setups append the .gdd file extension to differentiate DDv2 
       setups from DDv1.
#2668: GDD: Convert strings to UTF-8 in emerald setup files where appropriate.
#2730: (DD-94) Implement gradient fill feature for Shape Gauge.
#2869: Can now cycle through gauges in the screen editor with the keyboard 
       with Alt-left/Alt-right.  Additionally the Enter key focuses the 
       properties grid, with ESC moving focus back to the screen editor.
#2870: Fixed issue with tab traversal stopping at colour picker controls on 
       properties form.
Channels tab: prevent position of sensor type selection moving when changing 
       sensor type.
GDD: Option to hide default pages in screens selector.
Fixed: use "ETA_SSR" instead of "ETA SSR" as per DDv1.
#4342: [Shift Lights Setup].
Fixed some property attributes (stored/editable/default).
#3000: Added support for short version label format strings.
    Added support for boot version format strings.
    Added support for setup version format strings.
GDD: Added gems licence management.
GDD: Rework of setup file extension handling.  File filter lists are modified 
   depending upon installed licenses.
#4338: Serial locked license check.
#4340: Removed display type dropdown from toolbar.  The attached display 
   is now indicated in the status bar.  If the hardware does not support logging
   then it will display a warning on the logging tab.
   Implicity resolves #3203 (DD-223).
#3006: Added reset triggering mode for min/max/avg filters.
#4314: SDU2 support.
#3200: (DD-220) - increased simulator input channel frequency to 10Hz to fix 
   problem with limit flash rate on Bar tachometer gauge.
#2993: Added 'Square Mode' for H/V bar gauges.
#2986: Made grid column header clearer with a thick dividing line between the 
   header and the grid.
(DD-269): Enable maths channels in branded build.
#3201: (DD-221) - More accurately render cross-hair gauge in editor.
#3207: (DD-226) File dialog: Fixed drag/drop over empty row would remove file.
#3015: Added ETA channel type.
#3140: Animated GIF gauge for 4th Gen displays.
#3338: (DD-239) - Format string of "0." would result in application crash due to
     division by zero.
#2554: Alarm / Warning Text pages: hide editor if no channel selected + added  
    text in grid background if list is empty.
#3008: Added ECU Text channel type.
#2952: Persist zoom state & snap state in screen editor.  For manual zoom, 
    scaling is stored individually depending upon screen dimensions.
Auto-scale zoom setting now makes the view slightly smaller than the available 
    area to improve appearance.
#2847: CD4X: support colour map option for Direct colour drive secondary input
    on text style gauges.
#4361: Load setup: Avoid setting a null setup if loading fails to avoid 
    leaving application in a dangerous state.
#3023: Add Setup for CAN Page select and CAN button source.
#4396: Events Tab: Add 'output' actions.
#4397: Events Tab: Effects model for selected action.
#4399: Events Tab: Dialog to add new effects to an action.
#4400: Events Tab: Remove effect items.
#4487: Events Tab: take into account item priority.
#4488: Events Tab: Up/Down buttons.

================================================================================
Version 2.1.15 - 30 September 2020
================================================================================

#4181, #4203: Fixed application of protected mode DBC setup to logger setup.
#3776: Fixed deletion of Warning messages from the middle of the list.
#3775: Fixed error running simulator / exporting setup with many warning 
   messages.
#4245: When removing a CAN channel the underlying source is also removed to 
   avoid having a hidden CAN source that causes various problems later on.
#3388: Setup check does not remove dangling source references in some cases now
   to facilitate re-association.  Instead it issues warnings that such issues 
   have been detected.
Fixed memory leak.
Tentative fix for crash report when saving setup - possibly due to windows 
   shell folder enumeration request succeeding but returning a null enumerator.

================================================================================
Version 2.1.14 - 23 April 2020
================================================================================

#3798: (258) Fixed  MoTeC M800 dataset CAN IDs - IDs were being stored 
    incorrectly in setup files.  Existing setups that were created with DDv2 
    will require having their CAN ID reset (0x5F0 for set 1 and 0x0E8 for set 3).
#3736: (254) Logged channels referencing the sensor library would not display 
    correctly in data analysis software.
#3811: (259) Made reset button for min/max/avg channel filters configurable.
    Also added setup check to ensure that a reset button is set for some types 
    of display (otherwise warn that one has not been set).
#3882: (260) Fixed simulator when using protected CAN setups.
#3627: Fixed issue with hot-tracking on config page strip/sidebar.
#3628: Fixed highlight state not getting cleared on dark mode combobox in some 
     cases.
Increased speed of sidebar flyout animation.
Fixed a currenly benign build configuration issue, which could have lead to 
    future build problems (translation system).
Do not issue display type units mismatch setup check warning for channels that 
    do not have display units (e.g. performance timers).
Added simulator firmware version selector.
Fixed strange behaviour of dial editors for GPSi channels (e.g. speed) where 
    trying to set a negative value would set the value to maximum.

================================================================================
Version 2.1.13 - 11 February 2020
================================================================================

#3386: Upgrade to VS2019 toolchain.
Updates to internal libraries, includes some theming tweaks.
#3594: Update to emerald 5.01.04.  Fixes crash following undo of graphic 
    selector removal, seen in crash reports from 2.1.11.
Changed update transaction scoping to avoid incorrect setup check errors in 
    some cases.
#3565: (253) - Customer setup file opens in DD1, crashes in DD2 due to invalid 
    alarm/sensor configuration.
Performance timers should not show any units in channel selectors.
Vectorized gems logo.
Display 'non-dbc' CAN in CAN Receive tab - removed the distinction between 
    dbc/legacy can channels, internally.
Save setup: generate filter based upon display type in setup file.
GEMS DD: Added LDS4v3 simulator.
Don't depend upon case of dropped setup file extensions.

================================================================================
Version 2.1.12 - 26 October 2019
================================================================================

Fixed possible crash relating to cache database.
Updated to Emerald 5.01.03 - tentative fix for crash seen in crash report.
Updates to gems libraries - includes some visual enhancements to dark mode 
    (e.g. sub-menu disclosure icon).
Use alternative toolbar implementation to avoid white box when opening 
   application.
Use loading page to avoid white boxes when opening application.

================================================================================
Version 2.1.11 - 25 October 2019
================================================================================

#3464: (245) Fix DBC import when bitstring channels are overwritten leading 
    to invalid setup structure.
	+ Improved error message if setup is corrupted in this way.
#3305: (232) Can ID editor - retain shared editor on CAN RX/TX grids so that 
    switching standard/extended works as expected.

SpinBox: don't focus individual buttons on tab key.
Grid editors: when tracking base selection, do not close editor if it can be 
    moved instead.
Grid editors: If open and the position is moved due to e.g. sorting, alter the
    scroll position so that the editor remains in the same place on the screen 
	if possible.

================================================================================
Version 2.1.10 - 24 October 2019
================================================================================

#3464: (245) Fixed duplicate name resolution in DBC import which could cause
    the application to crash.
#3202: (222) Added setup check warnings when delay == retrigger time on alarms.
#3305: (232) S/E switch on Can ID editor in grid should retain extended value.
	Fixed setting ID with value 0 to extended mode.
	If pasting ID values that are higher than the max standard ID value then
	   set the ID to extended format.	   
	If pasting ID values with the extended bit set (0x20000000) then set the
	   ID to extended format.
Do not include button status channels in logging list (they can't be logged 
   by the display).
Setup Check: If any channels are not loggable but are configured for logging,
   reset their logging rate.
Update gems lib.
Fixed some code analysis warnings.

================================================================================
Version 2.1.9 - 4 October 2019
================================================================================

#3410/#3411: Fixed crash loading setup with invalid multilexor setup 
    (multiplexor channel missing).
#2838: Automatically remove orphaned CAN sources.

Avoid debug assert if setup contains an invalid image file.
Do not add CAN1_1 or CAN2_1 sources to new setups that are never connected to 
    outputs.
Avoid modified state on new setup files.
Channel lists: if view is sorted, do not track unsorted selection when removing 
    items.

================================================================================
Version 2.1.8 - 4 October 2019
================================================================================

#3408: Fix applied for crash when building screen library.
#3409: Fixed: Display Setup can fail to load if there is a modifier channel 
    that precedes any of its associated channels.
#3410: (not fixed): abort if setup change notification depth gets too high to 
    result in more useful crash report.

================================================================================
Version 2.1.7 - 2 October 2019
================================================================================

#3387: Fixed conflict between simulator analogues and AEM buttons, prevents long 
   press etc from working.
   Also button state channels will now update in simulator channel list when 
   buttons are pressed.
#3383: (240) Fixed regression wrt. dark theme toggle.
#3335: (237) - Add support for Toggle event to countdown timer.
Updated to boost 1.71.

================================================================================
Version 2.1.6 - 25 September 2019
================================================================================

#3214: Allow OBDII scan on displays running legacy bootloader.
#3372: DBC import: correctly apply multiplex data to imported channels.
Added setup check to detect & fix CAN channels with a broken multiplex setup.

================================================================================
Version 2.1.5 - 13 September 2019
================================================================================

#3298: (231) Update size hints of tags editor so that selected tags are not 
     hidden.
Tags picker - show all auto-complete options when input match is empty.
Fixed disabled state images on toolbar for icons that have a mask instead of 
   an alpha channel (they would otherwise appear to be a grey square).  Would
   only occur on some systems.
#3313: Fixed missing Initial Value for countdown timer (regression since 
    Performance timer implementation).
#3314: Performance Timer option should not be enabled for predefined timers.
#3317: (235) Fixed branded splash screen text.
#3319: (233) Optionally display text for config page sidebar (with flyout).
#3316: (234) Adjust dark theme for Emtron.
#2711: AEM DD: usage statistics upload to server + opt-out (preview).
Default to dark theme.

================================================================================
Version 2.1.4 - 26 August 2019
================================================================================

#3162: (215) - Fixed invalid application of output units to performance timer 
     outputs.
No longer displaying timer channels on the Channels tab.
#3164: (216) - Honour minimum height of property form editors.  Fixes 
     un-editable alarm page triggers box.
#2888: Added test to confirm that setup update events are not generated if 
    logging throughput is re-calculated but there were no changes to the 
	logging setup.
#2950: Setup check warnings/errors/info are now shown in a status bar area 
    instead of popping up the setup check window.  Double clicking this area 
	will then show the setup checker frame.
	Implemented auto-reset mode for most setup check items so that
    once the warning/error has been resolved, the item will automatically 
	disappear.	
#2787: MoTeC M800: Default ID to 0x5F0 for Set 1 and 0x0E8 for Set 3.
Hide MoTeC ID field if a data set is not in use.
Fixed update of MoTeC data set UI etc following undo/redo (and possibly some 
     other items).
#2787: Default Address Mask value to 0x1FFFF800 when masking is enabled.
#2787: Grey out the CAN Layout Multiplexor dropdown if the message displayed 
    is not a multiplexed message.
ComboBox/Dark Theme: use gray text when disabled.
CAN ID Editor: Standard/Extended state is now identified by S / E label instead
   pf difficult to see highlight.
CAN ID Editor: Follow light/dark theme for extended toggle.
CAN ID Editor: Retain extended value so when toggling it will restore 
    extended bits unless otherwise changed.
CAN ID Editor: Moved extended toggle to right hand side so that ID text does 
    not move when used as a grid editor.
#2787: Grey out the Transmit Delay [ms] input box if there are no CAN requests 
    triggered on startup conditions.
Fixed undo transaction scoping of CAN request item value changes.
Added setup check warning for value gauges that have a timer input but do not 
    have a time format string.
CAN RX/TX setup grids: Retain scroll position following value change.
CAN RX/TX setup grids: Improved performance of model updates in come cases.
#3142: (214) DD1 Function table not being seen in DD2 for CAN channels 
    (stop-gap solution).
#3202: Setup check warning if alarm cannot trigger due to having a retrigger 
    time that is less than the delay before trigger value (unless zero).
#3214: Avoid GET_LOGGER_INFO command on displays that do not support it.
	If OBDII scan is not possible then suggest that it is possible to upgrade 
	the bootloader by sending the display to the vendor.
Fixed possible crash when drag-adjusting property values.
#3198: (218) Fixed Warning Bar preview when a gradient is selected.
#3100: Remove alpha channel from bitmaps so they will look more like they will 
    on the display / in the simulator.
#2916: Autocomplete in GaugeFontSelector control.
Modified font grid renderer to display face name in both a consistent font and 
    in the font face for the given item.
Double click font in font selection dialog now accepts the dialog.
#2649: Simulator: option to only show 'used' channels in the channel list.
Display busy cursor when loading/setup files.
Changing units of a channel that is an alarm input will now update the alarm 
    limits instead of potentially leaving the alarm input incorrectly connected.
Alarm units are now tracked so changes in units will automatically adjust the 
    limit.
Setup check will now raise warnings if alarm conditions cannot be met or 
    will always be active (where possible).
Simulator channel list will no longer jump scroll position when changing 
   filtering settings.
Fixed tooltips on themed spinboxes.
#2812: Fixed tooltips on some controls.
#2812: Tooltips for filter types in filter selection dialog.
Changed Value Limit and Rate Limit filter types => Value Reject and Rate Reject
   to make it clearer what they do from looking at the name alone 
   (Changes also applied to help ID database).
#2812: Added tooltips for grid header columns.
external lib: Fixed regression in file listing routine.
Fixed data folder name for Emtron build => DisplayEditor.
Emtron build: Fixed drag/drop of ed5cf files.
#3265: Fixed issue with grid editor size (header column sizing) in final column
    of grids when there is a scrollbar.  Could cause clipping of the editor.
	Regression since v2.1.0 fix for scrollbar flicker when grid height 
	marginally bigger then the window height.
#3272 (230) Fixed stack overflow when loading some DBC files due to undo 
    transaction post processing.
Optimized insertion of channels into channel model.
Optimized updates to channel models following state changes in setup.
Optimized lookup of channels from their underlying setup nodes.
Optimized DBC + OBDII import (faster duplicates checking).
Optimization: Avoid notifications following undo transactions that did not 
    make any setup changes.
Added unit test for import of large DBC file.
Changed target windows version in build defines to avoid build warning.
Support drag/drop of *.dbc, *.aemcan, *.obdiiscan.
#3253: Add support for CAN multiplex indexes greater than 15.
    Changed UI for CAN Multiplex selection in signals grid.
	Can Frame view multiplex drop-down is now restricted to only show possible
	index values.
#2902: (168) Add 'Export Graphic(s)...' button to allow export of selected image(s).

================================================================================
Version 2.1.3 - 08 August 2019
================================================================================

#3181: Emtron rebrand.
#2647: (64) Fixed filtering in screen library if either 'hide duplicates' or
   'hide full setups' are not enabled.
Fixed All/Any selector for tags filter which should be mutually exclusive.
#2901: (167) Fixed regression regarding Odometer channel setup for new setup 
    files due to missing sensor.
Use invisible undo scope for logger setup validation (avoids getting an item in
 the undo history for new setups).
Fixed AemPageButton ID value.
Don't add 'resource not found' warnings to log for 'missing' dark icon overrides.
Fixed undo scoping issue when adding a rescaled bitmap to an image gauge.

================================================================================
Version 2.1.2 - 20 June 2019
================================================================================

#2722: (80) New file type (*.cdscreen) that contains a single screen for sharing 
    purposes & library import.
	Option to hide full setup files in screen import list.
	Default to recursive mode (loses old preference value).
#3115: (206) Added Performance Timer type to display firmware.
	Enables timers for distance and value ranges (e.g. 0-60mph).
	Added quick setup 'wizards' for configuring such types of timer.
#2719,#2646,#2901: 
    Predefined ODOMETER channel needs to follow global units selection.
	Added Unit preference for distance.
	Allow Display Units to be configured on predefined channels e.g. Odometer).
	Reworked channel update strategy to update when implicit units change.
	Channel dependency graph improves update performance.
	Added Input Units option.	
	Added 'Match Output' units mode.
	Some channels now have implicit input/output units - the units track the 
	    primary source if the channel is a unit scalar or is a sensor type that 
		does not change scaling.
	Automatic upgrade of setup to use unit aware Odometer + Distance Trip.
	Added Speed Input predefined channel to use as common input to channels 
	    requiring a speed input.
	Added configuration of Speed Input channel to "Speed / Odometer" setup page.
	Default Lap Timing speed input to 'Speed Input' if not already configure.
	Speed Input defaults to GPSi_Speed.
#2991: Reduced CPU usage when gauge selected (drawing of Marching Ants no 
     longer blits entire view).
#3112: (203) - Configurable Count Down timers now available for value gauges.
    Note: countdown timers created with v2.1.1 are not fixed up so will remain 
	invisible unless the type is changed.
#3113: (204) Removed countdown timer setup page now that it can be configured 
    under the timers tab.
#3119,#3128: (210) Alarm limit values not displayed correctly on timers tab.
#3117: (208) Timers: When changing timer type, remove any inapplicable events.
#3118: (209) Changed icon used for Static Text (label) Gauge.
#3116: (207) Allow built-in keypad buttons to be used as Timer triggers.
#2524: (75) Option to hide visually identical pages in screen library view.
#2647: (64) Added predefined tags & globally defined user tags files
    (see tags.xml in ProgramData/User AppData).
	Changed the tags editor in the properties form from a list to a set of
	tags that can be individually removed.
	Fixed issue where empty tags could get added and lock up the application.
#2813: (137) Don't reset preview value on some gauges (e.g. Needle) when 
    updating from the setup model.
#2243: (74) Added gauge preview values to H/V S/T Bars.
#3111: Fixed rendering of square bar gauges where separators drew over the 
    border unlike the actual display.
#3105: (199) Enable shift light limits to be entered individually.
#2959: (181) Streamline filter selection.
#2896: (165) Added button to copy input units from primary source.
     If input units are set and there are no output units set then 
	 the output units now implicitly match the input units.
#2557: Added ability to click-place gauges.
#UT: Fixed erroneous thumbnail generation in screen library due to bug in 
     wxWidgets handling of alpha channels.
#UT: Added disk cache version number and invalidate entire cache if not 
     compatible (screen library).  This will clear the cache generated with
	 DDv2 versions before 2.1.2.
#UT: Changed icon for Shape Gauge.
#3106: (200) Adjust min size of property form editors to avoid sidebar 
     changing width when properties change.
#UT: Reduced overly wide layout of setup tab pages.
#UT: Channels: Fixed enable state of Primary Input selector (it was enabled for
     predefined channels in some cases).
#UT: Extend input range of function table graph so that the effect of 
     out of range input values is clearly visible.
#UT: Calculate function added to linear scalar setup page to calculate scalar 
     from 2 I/O values.
#UT: Linear scalar chart range now works when no primary input selected.
#UT: Chart view: Display [X,Y] values in status bar for mouse X position.
#UT: Channel picker - only hide units if text editor subcontrol has focus.
#UT: Avoid creation of no-op undo commands during log throughput calc.
#UT: Hidden modifier channels: Do not wrap with UnifiedChannel - they are 
     conceptually part of another channel.
#UT: Dark mode: Fixed text colour in filter config dialog when displaying 
    'No properties'.
#UT: Optimization: Cached fetch of unified channel display units.
#UT: Optimization: Cached lookup of channel sensor references.
#UT: Moved Brightness setup next to Night Mode.
#UT: AEM: hide increase/decrease trigger options for countdown timers.
#UT: Fixed issue with icon for 'all screens' tab.
#UT: Added Miles/Second speed unit.
#UT: Position locked layout warning at top left of screen editor view where
     the gauge palette would normally be as this is a more obvious location.
	 This is now also no longer a floating frame so changing layout lock
	 does not affect the layout of the screen editor view.
	 The lock icon remains when unlocked and can be used to re-lock the layout.
	 Removed layout lock from the toolbar as it is now surplus to requirements.
#UT: Fixed channel selectors that allow both sources AND outputs (e.g. 
    monitor setup).
#UT: Increased buffer size for simulator file transfers to improve startup time.
#UT: Added 'None' option to unit selector dialog to clear the units selection.
     In some cases this allows units inheritance.
	 Changed 'None' units name to 'Unitless'.
#UT: Display warning triangle for display units if 'Match Preferences' mode is
    selected but auto units application is not selected in unit preferences.
#UT: Optimization applied to updates of sorted models.
#UT: All Screens View: Added clear/duplicate/import screen menu items.
#UT: All Screens View: Update tags when setup changes.
#UT: All Screens View: Do not draw overlays on gauges (e.g. selected needle 
    gauge) for preview.
#UT: Tags Selector: changed All/Any selector to new selector strip control 
   (looks better in dark mode).
#UT: Changed allowed character in tag names (removed space)
#UT: Screen import - do not copy in graphic items if an item with the same 
   original path already exists in the setup.
#UT: Screen Import - copy gauge input filter chains.
#UT: Screen Library dialog - use arrow-wait cursor instead of wait cursor 
    when background tasks busy.
#UT: Channels tab could show the linear sensor editor when no channel was 
    initially selected - this should now be hidden.
#UT: Adjusted copy/paste/cut/undo/redo icons.
#UT: Increased scroll rate on screen editor / simulator / graphic views.
#UT: Added Ctrl-Wheel behaviour to zoom screen editor view.
#UT: Improve spin box appearance in dark mode.

================================================================================
Version 2.1.1 - 29 May 2019
================================================================================

#2942: Performance Timer Channels
#2879: Add support for Mode22 ODBII PIDs, added parsing of attributes to sdbapi.
Sharpened up a few icons at 16x16 resolution.
#UT: Streamlining: Auto add a blank entry to new alarms and warning messages.
#UT: Fixed window flag for paged controls which could result in application hang 
    in Windows code when a modal dialog is displayed during window deactivation.
#UT: Use modelsss dialog for channel picker popup.
#UT: Added ability to create new alarms/warning messages from channel selection 
    dialog when target must be an alarm (e.g. performance timers).
#3109: (201) Show contents of desktop folder in file browser.
#2556: Change the default gauge colours.
#UT: Fixed missing undo scope selecting needle gauge background.

================================================================================
Version 2.1.0 - 22 May 2019
================================================================================

Dark Theme.
New UI layout design.
Redesigned some action icons.
Fixed undo scoping when setting CAN address mask.
Fixed possible crash ungrouping gauges.
Show name in tooltips on gauge stucture tree.
Fix layout of controls in bottom right of screen editor view (vertical stretch).
Fixed mousewheel in file addressbar dropdown items.
Fixed scrollbar visibility issue for grids in some cases.
File browser is now using a new implementation for the file list/tree so that 
    the dark theme could be applied - possible behavioural changes.
Improved layout of about box.
Added button to about box to browse OSS licenses.
#2562: Removed close button from layout locked window.
Got rid of status bar flicker.

================================================================================
Version 2.0.35 - 17 May 2019
================================================================================

Store OBDII scans in /OBDII
Do not persist last OBDII import folder; always default to /OBDII.
#3102: (197) Change AEM icon.
#3103: (198) Items from sensor library dont seem to work in the simulator.
#UT: Display channel units in alarm/warning setup.
#3094: (195) Fix alarms with malformed input references.
#3094: (195) Fixed alarm condition removal algorithm.  Added unit test.
#3101: (196) Increased resolution of min/max values on crosshair gauge.

================================================================================
Version 2.0.34 - 09 May 2019
================================================================================

#3092: Fixed alarm page & on change page triggering.
#3072: Now handling negative center offset values on Needle Gauge correctly when 
     calculating/drawing bounds.
#2670: Add mouse handler for property labels to enable dragging of values 
    up/down.  Makes adjusting values less cumbersome (esp. preview values).
#UT: Ensure event manager is created when opening setups (otherwise display can
     fail).
#UT: Possible corruption when saving setup files has been reported.  The save 
    operation will now save to a temporary file and verify the file before 
	overwriting existing files.
#UT: Fixed error in lap timing setup which would always result in 'automatic
    fixes applied' to appear in undo history and set the file to the modified 
	state.
#UT: Reduce changes to setup when updating logging runtime.
#UT: Modified event processing deadline for simulator to avoid response lag.

================================================================================
Version 2.0.33 - 08 May 2019
================================================================================

#2941: (177) Added configuration of Count Down Timer to setup page.
#2906: (170) Added Loop Logging option.
#2915: (174) Display units in simulator channels list.
#2948: Default to ascending sort mode in channel selection dialog.
#2727: Option to sort sensor library list, defaults to ascending order.
#UT: Fixed missing header text on channels tab channel list.

================================================================================
Version 2.0.32 - 08 May 2019
================================================================================

#2796: Colour Picker: Single-clicking a swatch now selects colour in the list.
#2932: Improve error message if connection to data analysis telemetry fails.
    GDA 4.01.89+ in admin mode will now allow connections from non-elevated 
	processes.
#2642: Simulator: Use momentary button for beacon input.
#2803: Firmware Upload: Filter file selector on *.bin.
#2645: Screen import confirmation: fixed handling of user choice.
#2780: (119) Screen Editor: Added Cut/Copy/Paste/Delete to context menu.
#2960: (182) Add filter channels to the monitor page.  These will be hidden from
    the monitor setup UI.
#2895: Value display off the screen area crashes the simulator.
#3073: (191) Lap timing setup: Default to GPSi channels.
#3071: (189) Tentative fix for buttons hidden on CAN tab.
#2884: (160) Simulator: Fixed setting A2D channels that are actually GPIO pins.
#3072: (190) Fixed bounds calculation for needle gauge to avoid setup check 
    error.  Needle gauge now draws the bounds when selected and the path/limits
	of the pointer.
#2643: (61) Paste of gauge when a group is selected now inserts after the group
    instead of inside it.
#2914: (173) Value gauges now base their display value in the editor on their
    format text unless a preview value is given.
#UT: Updated AEM codriver setup validation as it was based upon old 
     version of DDv1 and was not triggering timer start/reset from long 
	 press/hold events.
#UT: Updated simulator shell image.
#UT: Fixed column sizes in alarms list.

================================================================================
Version 2.0.31 - 25 April 2019
================================================================================

#2985: Reorder channel types and names + default to Function type.
#3005: Corrected input timeout fallback filter - both parameters were called 
	   fallback whereas one should be called timeout value.
#3069: Fixed crash setting lat/lon channels in lap timing setup in some cases.
Fixed more general issue relating to #3069 regarding filtered channel lists 
    which could result in setup validation errors and incorrect automatic 
	adjustments to the setup.
#3070: Fixed bug when normalizing alarm page trigger input reference indices - 
    which was leading to an unwarranted setup check error.
Setup export: fixed issue where incorrect bitmap selector image could be 
    displayed for selectors that do not have an input assigned.
Setup check: Added checking that graphic selectors are assigned an input.
Updated sensor library.
#3048: Allow program to run if unsupported help ids are specified.
Do not fail setup upload if get logger info request fails due to old bootloader.

================================================================================
Version 2.0.30 - 03/04/2019
================================================================================

#UT : Correctly demangle Simulator protected CAN IDs - previously extended 
	  protected IDs did not work in the simulator.

================================================================================
Version 2.0.29 - 01/04/2019
================================================================================

#UT : Run simulator plugin with highest version number.

================================================================================
Version 2.0.28 - 01/04/2019
================================================================================

#UT  : Prevented Long variable string types from being exported to raw file. 
	   This maintains backwards compatibility with older firmware.
#2969: Fixed bug in simulator where protected CAN IDs were incorrectly mangled
	   which prevented setups imported from aemcan files from working in the 
	   simulator.

================================================================================
Version 2.0.27 - 20/03/2019
================================================================================

#2779: Paste Gauge: Offset pasted position if it looks like it is a duplicate.
#2822: (141) Change default names of z-order operations.
Added icons for z-order operations.
Setup Check: Fixed formatting of invalid math channel inputs error.
Setup Check: Check Alarm Page Trigger & fix problems to avoid Display/Sim crash.
Alarm Page Trigger: Could not set any items if no items already checked.
Fixed crash relating to cleanup of alarm trigger model.
Fixed undo/redo of alarm trigger model - if undo removed all items then 
    redo would not update the trigger list.

================================================================================
Version 2.0.26 - 13/03/2019
================================================================================

Rework of UI to move gauge palette underneath gauge structure tree.  The 
    screen preview tab has now been removed and the screen picker now displays
	an overlay panel for the purposes of selecting the screen to edit.  Also 
	accessible via ctrl-tab.  The mouse wheel works on the button also.

#2933: (176) Disable bold/italic buttons in font selector if int {Multiple} mode 
    to avoid setting invalid fonts on gauges and resulting in failure.
Internal: SCM Index debug symbols + add to symbol store.
Changed save/discard dialog to a task dialog.
Fixed issue with scrollbar not showing on property form in some cases.
Fixed some issues setting up channel/gauge filters resulting in loss of items 
    from the filter list.
Support input filters on all gauges.
Changed input filter property to pop-up a dialog in order to take up less 
   property form real-estate.
Moved refresh button on setup check view.
Click-outside of autohide popup window will now immediately dismiss it - 
   setup check view in auto-hide mode would otherwise get in the way of the UI.

================================================================================
Version 2.0.25 - 08/03/2019
================================================================================

#2173: Screens Tab: Add data filters at point of use in the gauge.
Implemented filter chain optimizer to share identical filter chains when 
    exporting the setup for the display.
#2908: Channels Tab: Fixed update of sensor view when changing selection if 
    sensor type did not change.
Fixed missing undo scopes when modifying channel linear scaling options.
Fixed issue where setup checker would remove sensor template if channel 
   switched to a library sensor.
#2860: Setup Validator: Validate that Needle gauge can't result in out of 
   bounds rendering.
#1022: Add support for bold + italic fonts.
#2913: Added setup check algorithm to fix button events on screens.
#1035: Include more detailed error messages for invalid format strings.  Added
    checking of format strings to setup checker.
#2918: Right click on screen view should focus it to ensure the correct menu 
    items are enabled.
#2919: Fixed Paste Sensor feature.
#2912: Releaser: deal with multiple architectures better (x86+x64).

================================================================================
Version 2.0.24 - 04/03/2019
================================================================================

#2903: (169) Display base units for CAN channels in CAN Receive grid.  Renamed 
   column to "Base Units" to make the intent clearer.
#2898: Fixed (166) Predefined GPS channels are not available for selection on 
   the GPS Setup tab.
#2907: Fixed crash loading some setup files that contain invalid references.
Modified help file path.
Use a docked window for the setup checker.
Load/save workspace config (now also remembers undo history docking config).

================================================================================
Version 2.0.23 - 22/02/2019
================================================================================

#2716: For all gauge properties sidebars, moved input channel/preview below 
    the gauge name.
#2671: Make it clearer if inputs to gauges are not hooked up.
#2889: Improved cleanup of invalid references.  Affects lap timing setup, 
    on change triggers, alarms.
	Invalid alarms result in errors being reported by the setup checker.
#2882: Enable lap timing mode when loading setup.
#2880: Validate text gauge alarm colour - insert if missing.
#2871: Tentative fix for unresponsive UI in upload setup dialog.
#2874: Fixed handling of alarm leds which could have resulted in them not 
    functioning on the display. Added unit tests.
#2868: Graphic Selector setup: fixed count adjustment which would add 2 items.
#2872: Fixed crash setting colour map property.
#2883: Fixed crash entering duplicate name in CAN grid.
#2890: Fixed max font size in font picker.
#2881: Setup check - remove unused font tables.  These are always re-generated 
    when uploading to the display and do not need to be saved to disk.
#2214: Setup validation - largely complete, retargeted to 2.0.x.
#2723: Change order of gauges in gauge picker grid.
Fixed selection tracking when toggling predefined channels in channels tab.
Setup Check: remove unreferenced auto-defined sensors.
If removing Left/Right LED alarm, also remove its associated sensor.
Added option to associate *.aemcd7 files in the installer.
Enabled extended selection in CAN grids.
Added more stringent checks on undo scope use.
Fixed crash if item selected in logging list and a new setup is loaded.
Fixed crash in bitstring editor if redo causes item deletion whilst grid 
    editor has focus.
Fixed a number of issues in bitstring editor when tabbing through the grid to 
    edit/add items (editor would be destroyed).
Rewrite of bitstring data model.
Fixed incorrect event type for idle/updateui events.
Use default warning colour when setting Alarm colour mode on text gauges.
Only show colour mode properties that are applicable to the selected mode.
Validate warning colour for value gauges in limit mode.
Indicate if automatic fixes were applied in the undo history.
Categorise Auto_Shift_Light_* channels as predefined.
If input is removed from a gauge, do not rename it - it is handy to be able 
   to see what used to be hooked up to the gauge.
Improve defaults for filter parameters.
Update text of filter picker if changed.
Added refresh button to setup checker.

================================================================================
Version 2.0.22 - 20/02/2019
================================================================================

#2236: Filter selector.
#2237: Add data filters to outputs.
#2875: Remove Legacy DD1 Graphic Selectors from main channels list.
#2873: Remove alarm page trigger mux when it is empty to avoid problems.
Setup Checker: If empty event mux channels are detected at startup, remove 
    them and post a warning.
Refactored code dealing with event triggers (Alarm Page Trigger + On Change Page 
    Trigger).
Show tooltips in undo history view where text is often too long to fit.
Fixed bug in unique name generator + added additional unit test case.

================================================================================
Version 2.0.21 - 19/02/2019
================================================================================

#2724: Changed icons for bar gauges and needle.
#2849: Add unit preferences button to toolbar & menu.
#2861: CAN tab - changing channel units should change the base units instead 
    of setting an override.
#2848: Unit preferences: make global override optional.  Existing setups 
    default to OFF, new setups default to ON.
#1063: Added check/fix when opening setup to prevent circular references in 
    outputs and dangling input references.
#2214: Setup Validation - main UI for listing errors with double-click 
   / return key to goto location.
#2845: Prevent removal of predefined channels with error message if attempted.
#2807: Implmented "Download From Display" feature.
#2809: Enable text-based channel calibration for CAN channels (+ copy & paste).
#2789: If internal left/right LED alarms are blank, remove them to avoid the 
    physical LEDs on the display being forced to ON.
#2854: Fixed units name for volume:cm3/min.
#2831: The properties in the Needle item lacks boundary checking.
In general changed the way some integer based properties are dealt with to 
   also limit to the maximum range of the underlying storage.  This
   means that such properties now display as a spin box.
Draw needle gauge centre.
Only create one instance of the shift light setup manager - avoids the 
    possibility of its validation step appearing in undo history.
If loading an old setup that defines special LED alarm names then rename the 
    extant outputs rather than modifying them.
Prevent user setting invalid channel names - either because they are predefined,
    empty or would result in a duplicate.  Displays an error in such cases and 
	reverts the change.
Added back missing 'Limit' option for value gauge colour mode.
When preparing setup for the display, delete maths outputs with dangling sources
    which are capable of crashing the display firmware.
Refactoring of setup preparation process.
Added help id: AppMainFrame/displayTypeSelector.
Reduce flicker when switching between channels on channels page.
Fixed 'advanced' mode for text channel editor (check box would be immediately 
   cleared when trying to set it).
Update unit preferences editor upon undo/redo.
Added option to select SI/US presets to unit preferences dialog.
Removed general preferences menu item for time being as there is nothing 
    to configure yet.
Changed unit preferences icon.
Removed extraneous separator from Configure menu.
Added confirmation dialog when enabling auto-units.
Improve colour consistency of gauge icons.

================================================================================
Version 2.0.20 - 13 February 2019
================================================================================

#2821: Fixed bug when copy/pasting groups which could lead to it looking like 
    screen import was broken.
#2842: Fixed strange characters appearing in Gauge tree.  Also fixes a similar
    issue in CAN DBC import.  A related class of errors also found + fixed.
#2804: Closed: Removed 'Direct' option from text gauge colour mode as this 
   is only supported on CD4X cores.
#2846: Fixed broken grouped gauge inputs wheen running on display.
Fixed crash dealing with input modifier chain when no input is selected.
SetupChannel: fixed some possible issues in paste sensor function 
   (prevent merging, avoid modifying caller value).
Fixed bug when adding some types of channel with unicode names.
Resolved a number of issues with implicit string codepage conversions, will also
    fix some as-yet unseen issues with filepaths.
Refactored code dealing with format strings.

================================================================================
Version 2.0.19 - 12 February 2019
================================================================================

#2725: Help IDs: Support 
and ignore other formatting. #2802: Simulator: handle GPIO pullups. #2820: Only offer 'output' channels in input selectors. #2733: Fixed size properties for limiter & round tacho gauges. #2729: Fixed validation of bar tacho segment size + default label frequency. #2786: Remove graphic selectors & warning text items from the Channels list. #2734: Fixed typo in default splash screen text. #2830: Install & pick up OBDII definitions in ProgramData instead of %AppData%. #2810: Shift light legend column could have zero width. #2832: Invisible Global Unit Preference Descriptions column. #2804: Changed name of 'Direct' property in Warning gauge. #2801: Channels tab: Exclude selected channel from primary input selector. #2806: Fixed crash editing a graphics selector name. #2811: Fixed issue assigning channels to Graph gauge lines. #2715: Added editing of CAN channel display units from channels tab. #2804: Colour Map setting on alarm bar (Warning Gauge). TODO: apply to other applicable gauges. Channel base units are now displayed below the display units where applicable and have been removed from individual sensor editing forms. Changed priority of unified channel collapsing to favour units override channel over sensor output channel. Display units in channel selectors & elide when editing text. Prevent Ctrl-A accelerator key from overriding default text edit select all. Fixed some issues relating to undo & Graph gauge state. Apply minimum column size to grids and prevent dragging of grid headers from setting column widths to zero. Refactoring & simplification of Channel classification & filtering mechanisms. Only show outputs in Channel:Primary Input. Added internal flag to identify 'ordinary' channels. Implemented much faster algorithm for generating unique names that only does a single pass over the setup. Modified filtering rules for outputs and sources. Improved debug visualization of channel flags. Title bar colour for undo history window. Fixed button icons/appearance on undo history window. Handle DPI in title bar of undo history window better. Fixed crash when drag-docking undo history window. New docking HUD icons / layout that works better on high DPI screens. Do not include background property for value gauges. Changed column resize mode for warning text setup grid. Check for circular references when setting the primary source on a channel to avoid later stack overflow. Show tooltips on property form checkboxes and editors that do not already have a tooltip. ================================================================================ Version 2.0.18 - 07 February 2019 ================================================================================ #2726,#2736,#2737,#2738,#2752: Mitigate resizing bug as a result of KB2664641. #2788: Removed duplicate 'Signed' checkbox from non-linear channel scaling setup. #2728: Width property for Warning gauge. #2733: Changes to width/height gauge properties were not being applied. #2735: Do not display hidden / event gauges. #2731: Changing name of channel should propagate to gauge names where applicable. #2747: Validate position of graphic gauge when the image is changed to avoid it being placed off-screen. #2790: Allow alarm inputs to be selected for value gauges, Allow Warning Text inputs to be selected for text gauges. Added option for loading of JPEG images. When opening images that are larger than the screen, offer resize. Show busy cursor when generating preview in graphic resize dialog. Changed column title for Warning Text Channel list. Installer - fix start menu / desktop links. ================================================================================ Version 2.0.17 - 06 February 2019 ================================================================================ #2800, #2732: Fixed delayed crash when modifying line count on graph gauge. Splitter views: Fixed broken minimum panel size since v2.0.16. Adjusted the way page container panels are sized - based upon client size rather than window size due to possible alternate path through UI framework deferred resize handling. Page container: avoid initial internal page sizing until a resize event has occurred on the parent container. Changed column resizing mode on CAN grids and Logger grid. #2703: Installer: Visual studio runtime issues: Installer now limited to Win7 SP1. quiet + norestart options applied to installs. Improved checks for whether or not runtime should be installed. Updated CRT installer version. ================================================================================ Version 2.0.16 - 02 February 2019 ================================================================================ #2718: Screen Import: Confirm overwrite of screen if not empty / default. Reduce compute cost of loading setup when purely for screen preview purposes. Views with many screen previews could lock up the UI. Updates are now throttled back in a way that reduces load on the UI. Screen preview lists: track the originally selected items when the list is asynchronously updated. Modified the way splitter windows size their panes to avoid negative sizes. Added additional debug instrumentation to splitter class. Build: run autover to insert correct build date etc in application resources. Fixed some possible issues identified through static analysis. ================================================================================ Version 2.0.15 - 01 February 2019 ================================================================================ Fixed bug copying function tables to clipboard (all sites would have the same value). Fixed bug pasting function tables from clipboard (paste sensor) where existing function table elements were not removed first. Include help ID for "hexadecimal ids" checkbox. Fix help IDs on the CanPortPanel. Installer: fixed source path for user app data files. Fixed crash during OBDII import. Pipe wx log messages to application log file. Fixed seemingly benign error regarding bitmap handle during splash frame creation. Fixed winapi warning in PropertyForm constructor. Added verbose logging to investigate resize issue. ================================================================================ Version 2.0.14 - 16 January 2019 ================================================================================ #1050: Bitmap thumbnails when selecting bitmaps via properties. #2201: Graphics Tab - Graphics Library (completed merge function). #2203: Graphics Tab - Graphic Selector Setup. #2549: CAN message view - tool-tips when hovering over signal. #2548: CAN message view - deal with overlapping labels. #2186: Add Display type selector. #2394: Improve consistency of property editor appearance - now using windows edit border theme in some places which now also changes colour if focused. Internal: Modified the way grids update column header sizes. Added ability to vertically center text in single-line text edit controls. Rework of the way channels are selected via channel picker and represented in properties. Fixed issue relating to undo of creating text-based channels or graphic selectors. ================================================================================ Version 2.0.13 - 20 December 2018 ================================================================================ Handle unicode better when exporting to the display. Export will attempt to use an existing codepage if possible otherwise it will create a custom codepage for the font table. Emoji now supported ;) Run help-ids through translator so any defaults get translated. #2653: Translate strings in enum based property editors. #2636: Reworked the way channels are selected for gauge inputs. It was possible for source channels with the same name as outputs to be selected. This would not run correctly in the display following setup export. e.g. Battery Volts (Internal). #2226: Simulator: Input stimulus: completed. Implemented UBLOX GPS simulation (Enables GPSi channels to work in simulator). Filter out channels that cannot be simulated/displayed. Multiplexed CAN outputs now work in simulator. Text lookup channels now working in simulator. There was an issue in the editor which would add multiple types of bitmask and would prevent the display functioning correctly. Fixed issue regarding import of OBDII standard can IDs from pidscan file. Implemented single frame OBDII outputs in simulator. Rounding of can dbc + analogue simulator values. #2296: Fixed preview colour of warning gauge in direct mode. Store editor version in setup. #2644: Screen Editor: Fixed arrow keys when snap enabled. Ctrl-arrows now also moves gauges by single pixels even when snap enabled. #2650: AEM: do not auto add some sms/codriver associated outputs normally associated with other display types. Display error message when property errors occur. Bar 'fill from center' property no longer in 'preview' category. Fixed incorrect scaling of gauge border drag when zoomed in on screen editor. #2641: Made rendering of bar tacho more like actual display. #2655: Added properties to bars/tachos for smooth edges / separator bars as appropriate. Implemented preview value for bar tacho gauge. #2638: Fixed exception adding key events (could happen importing screens). #2639: Open setup dialog now displays file notes. Implemented get/set of notes on setup files. Added screen preview to open setup dialog. Separated settings for open/save setup dialogs. #2196: Setup Tab - Lap timing setup. #2198: Setup Tab - page select source. #2199: Setup Tab - Night mode. #2200: Setup Tab - Monitor page setup. #2197: Setup Tab - Odometer setup. #2651: Fixed typo 'Unroup' => 'Ungroup'. #2640: Fixed backspace key in setup file browser dialog. Generally affects all menus which may have had a name that could be translated to an accelerator. #2648: Add ability to hide predefined channels on simulator. Added hover images for start/stop buttons in simulator. Fixed issue in word-based translator with unicode characters. #2240: Program Clock feature. Added Tools>Firmware Upload. #2239: Scan Vehicle OBDII procedure. #2547: Fixed tabbing through grids with checkbox cells. #2678: Escape key should close grid editors. #2637: Import Screen: default value form Tag Filter should be None Modified tag filter setup to include 'enable' checkbox. Persistence of tag filters now works correctly. Changed the way tag filter item count is displayed to avoid horizontal scrollbar in tag filter list. Added alternative syntax for sensor library attribute values (will make embedded html more pleasant to write by hand). #2654: Sensor library: support basic html formatting. #2478: Added Interpolated + Signed options to function tables + setup export. #2201: Graphics tab - graphics library. (incomplete - merge function requires choosing which image to merge). ================================================================================ Version 2.0.12 - 03 December 2018 ================================================================================ Simulator: Send all valid CAN data after starting firmware and every 500ms. (Changed values are sent ASAP). Modified layout of simulator tab to work better on smaller screens. Implemented zoom/auto fit. ================================================================================ Version 2.0.11 - 29 November 2018 ================================================================================ Simulator fixed abort when changing pages on some setups. Implemented non-linear (function table) forward/inverse for simulator channel values. Fixed FunctionTable::rawFromReal (inverse lookup). Editing/display of text based channels in simulator channels list. Avoid duplicate names for auto-generated channels (e.g. hidden raw value outputs). Fixed some issues relating to Text based channels not being unified with their auto-generated raw channel correctly. Reworked the way unified channel cross references are stored in setup files to prevent circular output references being generated in DDv1 setup export. Fixed some issues relating to replacement of channel references in gauges when changing output sensor types / overriding units. Update all rows of simulator channel list upon receiving telemetry. Display warning text in simulator channel values list. Fixed simulator handling of standard CAN IDs. Simulator button presses can now handle long-press. Note - very short button presses MAY get missed by the display. ================================================================================ Version 2.0.10 - 28 November 2018 ================================================================================ Fixed a number of possible crashes relating to channel references. When adding channels to channel list, create it with a linear scalar by default which allows the channel type to be changed. When tracking selection on sorted grids, ensure the selection remains visible if already visible. Stop the simulator if the setup is modified. Fixed: Manually added CAN channels should not be editable on the channels tab. Connect to data analysis cursor / log playback. Requires version 4.1.73+. ================================================================================ Version 2.0.9 - 27 November 2018 ================================================================================ #2225: Simulator Tab. #2230: Simulator: Ignition Switch => Start/Stop buttons. #2220: Simulator: display presentation. #2215: Simulator: build / install / load / release simulator components. #2221: Simulator: buttons. #2219: Simulator: programming of setup direct to NAND. #2224: Simulator: Outputs list [partial implementation] #2232: Simulator outputs: Display calculated alarm state. #2223: Simulator: Alarm/shift lights. #2185: Logger Tab. #2194: Setup Tab - Shift lights including Auto setup. #2195: Setup Tab - Brightness control. #2351: Code simplifications. #2558: Fixed slow scroll speed on the screen preview list. #2575: Round tacho size is incorrect after loading setup. Upgraded to Visual Studio 2017 Upgraded to wxWidgets 3.0.4 Upgraded to boost 1.68 ================================================================================ Version 2.0.8 - 26 October 2018 ================================================================================ #2188: CAN Tab - CAN Receive channels. #2190: CAN Tab - Request message tab. #2181: Alarms Tab - Initial creation. #2182: Alarms Tab - Alarm setup inc warning light selection. #2183: Alarms Tab - Warning Message Setup. #2316: Imported outputs from DBCs should store comments and use them for tooltips. #2523: All/Any option for tags filter in screen library. #2041: Implemented config file handling for fonts that require cleartype. #2508: Add additional screen validation items. #1023: Implement snap to grid. #1079: Add ability to set grid size for snap to grid. UT: 64bit version of application. UT: Fixed stale images appearing from prior loaded setup in screen preview list. UT: Fixed issue with gauge position properties not updating when moved. UT: Fixed issue drag-resize of top-left corner of gauges. ================================================================================ Version 2.0.7 - 12 September 2018 ================================================================================ #2158: Screen Library (Import Screen). #2486: Move over to Emerald v5. #2170: Added splash screen duration property. #2171: Screens Tab - Alarm page customisation in right hand side bar. #2167: Duplicate Screen feature. #UT: option for minimum decimal places in property editor. #UT: Fixed update of screen page properties after undo/redo. #UT: Default name for Alarm / On Change screens. #2235: Channel List Selector. #2172: Screens Tab - On Change Page Config in Side bar. #UT: Added unit km/s. #UT: Persist size/layout of setup file browser window. Fixed undo/redo when consecutively inserting same value ID into two different setup nodes during an undo scope. Fixed issue with selection state update following undo/redo. Fixed issue with selection state following group/ungroup and undo/redo. Fixed crash with property form update following gauge deletion in some cases. Fixed issue with center justified text gauges following undo of delete. Fixed crash during stack unwinding if exception is thrown opening a setup. Fixed issue with creation of units channel incorrectly setting up references for the sensor channel, leading to multiple ':Sensor' extensions on names appearing in the unified channel list. Fixed crash if channel with a linear scalar editor is selected followed by opening another setup and selecting a channel of the same style. Fixed formatting issue of some messages in application log. ================================================================================ Version 2.0.6 - 20 July 2018 ================================================================================ #UT: Fixed a couple of issues in the installer. #UT: Display pixel position of mouse cursor in status bar. #UT: Fixed issue with position of static text labels when justified. #UT: Don't store width/height in setup for text gauges. ================================================================================ Version 2.0.5 - 20 July 2018 ================================================================================ #2080: Channels Tab. #2174: Channels Tab - Basic Properties. #2175: Channels Tab - Channel type selector. #2176: Channels Tab - Add Linear channel configuration. #2177: Channels Tab - Add 2D lookup channel configuration. #2179: Channels Tab - Channel Based Text setup. #2178: Channels Tab - Add Sensor Library. #2161: Overridden per channel units & hidden automatic scaling chain. #2159: Unit preferences. #2247: Added COM automation interface. #2142: Automated Release: Integration tests as precondition to actual release. Added some integration tests, including testing that setup file opens. #2392: Gauge groups should be re-namable. #2393: Fixed regression in colour properties. #2376: Screens should be renamable. #2377: Grouping a large number of gauges should avoid updating UI until complete. #1011: Add cut and paste support for function tables in editor. #2442: Optimized slow startup time due to new changes - much faster lookup all references to a particular setup item, amongst other optimizations. #UT: Add justify property to text gauge. #UT: Display {None} for NULL item in channel picker popup. Added custom sorting policy so the null item is always at the head of the list. #UT: Fixed bug in handling of cached location path following undo/redo of item insertion/deletion. #UT: text value gauge should have justify instead of direction property. #UT: justify property was not being loaded correctly for some gauges. #UT: Improved feedback when dragging gauges. #UT: Added copy/paste of sensor values (precursor to #2178 sensor library). #UT: Fixed some issues with property editors - in particular following redefinition of properties was not working correctly. #UT: Fixed enable state / disabled bitmaps on toolbar. #UT: Fixed issue with update of resize handle geometry in some cases. #UT: Fixed movement of gauges with arrow keys. #UT: Fixed issue with positioning of selection handles when zoomed in on screen. #UT: Major rework of setup model structure & change notifications. ================================================================================ Version 2.0.4 - 15 June 2018 ================================================================================ Milestone: Dash Design Development Build 2 #2162: New help / string resource system generated from inline code comments. #2082: Program display with setup. Firmware upgrade checks + firmware upload, RAM size warning, Original setup upload, Logger setup upload, Device Selection UI Upload UI, Async driver back-end. #2065: Gauge Groups: display properties from sub-objects where appropriate. Edit properties for multiple gauge selections. #2322: Gauge Toolbox: Use icons instead of renderings of actual gauges. #2321: Gauge Toolbox: if text does not fit then reduce column count. #2320: Horizontal resize of PropertyForm does not resize the contained controls. #2242: Lock Layout function (menu + toolbutton). Also added warning overlay to screen editor. #2314: Update gauge names for all screens following load of setup to avoid later updates appearing in the undo stack. #2166: Clear Screen (added as menu & context menu option). #2068: Drag/Drop of groups in GaugeTree should not collapse the group. ================================================================================ Version 2.0.3 - 08 May 2018 ================================================================================ Milestone: Dash Design Development Build 1 #2035: Implement missing gauges. #2076: Auto-generate Gauge names from main value + type. #2077: Gauge inputs should use a picker control instead of text edit. #2234: Channel Selector Property. #2072: Fix high-dpi issues & icons in file dialog. #2302: Fixed issue with gauge size reducing by 1 when starting a drag resize. #2042: Escape key should cancel drag/resize. #2093: Fixed scrollbars on dash editor window. #2312: Handle bitmap gauges that use a bitmap selector output correctly. Added preview value to bitmap selector. Fixed issue with 'corrupted' repaint during scrolling of dash editor. #2078: Fixed scrollbar on property form - sometimes it was not being set up when adding/changing view to one with many properties. Scrollbar set to always visible to avoid controls changing width (avoids issues editing spinbox values that could change the number of properies displayed). #2310: File filter for browse setup dialog not defined. Also does not set extension of save file if not specified. Fixed: Reversed logic for save action operating as save-as without existing filename. Fixed: Expire gauge properties when gauges are destroyed in case of retained shared references. Use null padding in alignment offset for font tables in display binary export. #2039: Graphic::convertTo16bpp(). ================================================================================ Version 2.0.2 - 16 March 2018 ================================================================================ #2090: Raise/Lower functions for Gauge z-order management. #2100: Add an 'UnknownGauge' type for gauges that DashDesign doesn't know how to deal with. Fixed issues when undoing a gauge deletion due to a bug in Emerald4.dll. Reworked internal notifications of structural/value changes arising from undo/redo. Implemented selection change undo. Stability & performance fixes. Bootstrap/build/release automation. ================================================================================ Version 2.0.1 - 21 February 2018 ================================================================================ #2074: Undo (incomplete). #2089: Cut/Copy/Paste Gauges and Groups. #2066: Fix resize behaviour following addition of a gauge (e.g. HS Bar Tacho). #2067: Fixed resizing of multi-level gauge groups. #2075: Fixed problem selecting gauges when zoomed and translated. #2070: Moving gauges and groups in the GaugeTree should update their ordering in the emerald file. #2069: Groups are now placed in the correct place fllowing load of setup. The way groups are implemented has changed slightly & empty groups are now potentially allowed. Unit testing / fuzzing of GaugeModel + optimizations. FontMetrics: added caching of metrics implementation to improve performance (including unit test performance). Gauge: removed name generator as this will not be required an was causing performance issues in unit tests. ================================================================================ Version 0.0.0 - 09 February 2018 ================================================================================ Initial Early Alpha Preview. ================================================================================ End of File ================================================================================

Creating and Editing Display Setups

Overview

The display setup file contains all the information needed to configure a colour display including connection definition, channel calibration and screen layout.

The Display Module can be connected to other ECUs via CAN bus.

Display Modules also have a range of analogue and speed inputs for interfacing directly to sensors.

File Names

Dash Design supports multiple display types and setup files have file names of the form .<display_type>.gdd. Depending upon your Windows® configuration, the last part of the file extension may not be visible in File Explorer.

Subsections of Creating and Editing Display Setups

Creating a New Display Setup

Overview

To create a new display setup, select File | New Setup... from the File Menu and then select a display type from the list.

Workflow Tips

Data Model

When creating a new setup it is generally best to start with the data model.

Most display setups will require acquiring data from the outside world via physical inputs such as Analogue Inputs or via CAN messages. Once data acquisition is configured then it will naturally drive the screen design process.

It can be useful to create some test screens while configuring inputs to check that data is being acquired as expected by the display.

Analogue Inputs

Analogue Inputs (Analogue to Digital Converters, ADCs) are predefined Channels and will generally be scaled in Volts. Check your display pin-out to identify the analogue channels that are connected to sensors.

Create new Channels on the Channels Tab that use these Analogue Input channels as their Primary Input and apply any required scaling based upon the data-sheets for your sensors. There may be existing preconfigured sensors in the Sensor Library Channel that match.

CAN Inputs

Configure the CAN bus to ensure that it is running at the correct bit rate: CAN Bus Configuration .

Define CAN channels on the CAN Receive . This process can be simplified if a Signal Database (DBC) files are available (or can be created) for the modules you are connecting to - see CAN Signal Database (DBC) Import .

For an overview of CAN in general, see CAN Message Overview .

Page Select

So that you can switch screens / pages on the display, decide how page switching will work; Is this from an analogue input (e.g. a rotary switch) or from a CAN message? Some displays may have predefined inputs like rotary switches. Configure the page select input here: Page Select .

Logic Channels / Notifications

It may make sense at this point to define any logic channels or notifications for things like warnings for out of range conditions.

Display Setup

Speed Input / Odometer

If vehicle speed related functions are required, set up the predefined Speed Input. Setting up the Speed Input will also enable the non-resettable Odometer function. See Speed / Odometer / Trip

Lap Timing / Beacon Input

You may also want to configure the beacon input at this stage to enable lap/stage timing. See Lap Timing / GPS . Before configuring Lap Timing, configure the Speed Input (Speed / Odometer / Trip ).

Logging

If the Display Module supports on-board logging, logging can be configured on the Logger Tab . This may be useful whilst configuring the data model; data logs may be analysed to check that inputs are behaving as expected and have correct scaling.

Image Assets

If using a heavily image based setup, you may want to import image assets for use in screen designs at this point. See the Images Tab .

Some images may be configured to switch between various visual states based upon the value of a channel (e.g. for a battery warning light). See Image Selectors Tab for information on how to configure this.

Screen Design

Once input channels and image assets are prepared, screens can be designed to display data with gauges on the Design Tab .

Simulation

If a simulator is available for your display, then it may be simulated on the Simulator Tab so that screen layouts can be tested before the more time-consuming process of testing on the real Display Module.

Display Setup Concepts

Setup Components

A Dash Design setup primarily consists of Channels and Gauges.

Channels are comprised of Sources, Outputs and Sensors, though much of this structure is not separated in the user interface. A CAN signal for example will have a raw ‘source’ that is used for acquiring the channel data and an ‘output’ which is associated with a sensor for scaling the raw data. Logically, the ’type’ of a channel is the associated ‘sensor’ type and the raw source is an implicit input to the ‘output’.

Sources

Non-visual objects that define how data is obtained from an external source such as CAN bus, a digital input or an A/D converter. Sources can be internal to to the display such as CPU temperature.

Channels (Outputs)

Non-visual objects that obtain information from one or more sources or other outputs. An output manipulates the obtained data according to the sensor associated with the output. The result can then be used in a Gauge or another Channel.

Sensors

Non-visual objects that define how the data is manipulated by an output. Examples of sensors are linear scalars, function tables or text tables. Sensors are selected and configured by changing the ’type’ of a Channel.

Gauges

Visual objects that are placed on a screen page. There are two types of gauge; static and dynamic.

Static Gauges

Static Gauges do not change their appearance on the screen and include gauges such as Label Gauge , Shape Gauge or Image Gauge .

Dynamic Gauges

Dynamic (Variable) Gauges change their appearance to reflect data obtained from channels. Examples of variable gauges are Bar Gauges , Tacho Gauges and Value Gauge .

The following diagram shows the relationship between sources, outputs, sensors and gauges:

ECU Scaled RPMOutput RPM- Oil Pressure - Raw RPMSource Oil PressureSource Alarm Sensor Scalar Sensor Oil Pressure AlarmOutput Scaled Oil pressureOutput Scalar Sensor Bar TachoGauge Bar Gauge Warning Gauge Source Sensor Output Gauge

In this example, the raw RPM value is passed to the scaled RPM output which uses a scalar sensor to provide its’ output. This is passed to both a bar tacho gauge (which displays the RPM) and the oil pressure alarm output. The oil pressure is obtained in a similar manner and passes its’ output to a bar gauge (which displays the oil pressure) and the oil pressure alarm output. The oil pressure alarm output uses the alarm sensor and its’ two inputs to generate an output used by the warning gauge to signal low oil pressure, eg Oil Pressure is less than 2 and engine RPM is greater than 500.

Opening and Saving Setups

Opening a Setup

To Open an existing colour display setup:

  • Select File | Open Setup.... The file open dialog is shown.
  • Select the required display setup file and click Open.

Recently opened or saved files can be accessed from the sub-menu File | Recent Files.

If the editor is in Locked Layout mode, only certain gauge properties can be edited and the gauge positions are fixed to prevent accidental editing.

Layout Locked mode can be toggled by selecting File | Lock Layout or by clicking the Edit Layout Edit Layout icon at the top left of the screen design area.

Saving a Setup

To save a setup under a new filename, select File | Save Setup As... Ctrl + Shift + S, enter a file name in the file save dialog and click the Save button.

To save a setup with the current name, select File | Save Setup Ctrl + S.

If a setup or Dash Design is closed and the setup has changed since the last save, a prompt will appear asking if the changes to the setup are to be saved. Select Save As to save the changes (possibly with a new file name), Discard to abandon the changes or Cancel to return to editing the current setup.

Uploading a Setup to a Display

Overview

Uploading a setup programs the current setup into the Display Module.

Tip

View the Setup Checker to ensure there are no setup errors or warnings prior to programming the setup.

See Setup Checker

Display Module Selection

Ensure that the Display Module is attached to the PC. Ethernet based Display Modules may be attached directly to the PC with an ethernet cable or to a Local Area Network (LAN).

Display Modules that connect using USB should show a special screen once attached to the PC.

Select File | Upload To Display F7. A dialog will be shown to allow selection of the Display Module that should be programmed:

Upload Setup Dialog Upload Setup Dialog

Upload Setup Dialog

Select the Display Module to be programmed from the list. Typically there will only be one so the first item is selected by default.

Upload Original Setup

Depending upon the type of Display Module, there may be the option Upload Original Setup. When programming displays, the setup file is compiled into a more compact format that is understood by the display. If Upload Original Setup is checked, then the original setup file will also be programmed into the display to allow later recovery of the original setup used to program the display from the Display Module itself using the command File | Download From Display.

Starting the Programming Procedure

Click the Upload Setup Upload Setup button to begin programming the setup into the display.

Programming Progress

The progress of the procedure will be shown, along with a log of messages:

Upload Setup Progress Upload Setup Progress

Upload Setup Progress

If the process fails, refer to the message log as it may identify the cause.

Once the programming is complete, the Display Module may be disconnected from the PC. For USB connections, detaching the USB cable should cause the setup to run on the display.

Firmware Updates

Overview

Over time, updates to the Display Module firmware may become available that resolve bugs and add new features.

Dash Design may be used to re-flash the Display Module with new firmware.

Firmware Update Procedure

Ensure that the Display Module is attached to the PC. Ethernet based Display Modules may be attached directly to the PC with an ethernet cable or to a Local Area Network (LAN).

Display Modules that connect using USB should show a special screen once attached to the PC.

Select Tools | Upload Firmware.... A dialog will be shown to allow selection of the Display Module that should be programmed.

Select the Display Module to be programmed from the list. Typically there will only be one so the first item is selected by default.

Select a firmware file using the Firmware Filename picker. File paths can be pasted here or browsed using the … button.

Click the Upload Upload button to begin programming the firmware into the display.

Programming Progress

The progress of the procedure will be shown, along with a log of messages.

Do not switch off the Display Module during the programming procedure as this may corrupt the firmware.

If the process fails, refer to the message log as it may identify the cause.

Once the programming is complete, the Display Module may be disconnected from the PC to reboot it.

Removing Unused Image Assets

Overview

During the course of editing a setup, graphic images may be added to the setup and as images are replaced or no longer required, the unused image files may be left stored in the setup, increasing both the size of the setup and the uploaded setup.

To remove unused images from the setup, see Images Tab (Delete All Unused).

Removing unused images does not remove them from their original location on disk.

Exporting Image Assets

Overview

When an image (e.g. a bmp, png or jpeg file) is added to the setup, a copy of the original file is embedded in the setup together with the path to the original file location. This allows for the original bitmap to be updated and the bitmap in the setup to be updated by clicking the reload button.

When setups are shared with other users, the original bitmaps may not be present on the new users computer. The export function allows images to be exported to the new users computer. In addition, the path can be updated to point to the new location.

To export images, see Images Tab .

Locked Setups

Overview

Setups may be saved to files that are locked from editing and may only be programmed to displays. Locked setups include thumbnails of screens for preview purposes.

Exporting Locked Setups

To export a locked setup, use the File | Export Compiled / Locked Setup... command.

Locked setups may be loaded into Dash Design and programmed with File | Upload To Display F7.

Locked setups have the file extension .gddp.

Some Display Modules support serial number locked setups. If supported by the display, check the Lock to Serial Number? box and enter in the display serial number.

Locked setups may have the original source setup file name included in the file. If desired, check the Embed Setup File Name box. The file name may be edited to remove any user information or it could be changed to a URL.

The original setup file may also be embedded in the locked setup file. If desired, check the Embed Source Setup File box. A password must be specified. The original setup will be LZMA compressed and AES encrypted with a key cryptographically derived from the password and a ‘salt’ value.

If the original setup file is embedded in a locked setup. The original setup file may be extracted from the locked setup file using the File Info tab which is available when the locked setup file is loaded into Dash Design.

File Info Tab

The File Info tab provides information about the locked setup file. The File Info tab is only available when a locked setup file is loaded into Dash Design.

The File Info tab provides the following information:

Field Description
Setup Binary Checksum Checksum of the setup binary data, this should match the checksum calculated by the display module when the setup is loaded.
Setup Binary SHA-1 SHA-1 hash of the setup binary data.
Source Setup Name The setup name set on the Setup Name
Source Setup File Name The file name of the source setup (if any) embedded in the locked setup.
Source Setup File MD5 MD5 sum of the setup file that the locked setup was generated from.
Source Setup File SHA-1 SHA-1 hash of the setup file that the locked setup was generated from.

Setup Binary Checksum may be used for scrutineering purposes to ensure that the setup file loaded into the display module has not been tampered with.

Raw Setups

Overview

Setups may be saved to ‘raw’ setup files for programming with external tools. Raw setups can’t be opened or programmed from Dash Design.

Tip

If you want to make a non-editable setup that can be programmed with Dash Design, see Locked Setups .

Exporting Raw Setups

To export a raw setup, use either the File | Export Raw | Export Raw Setup (Packaged)... or File | Export Raw | Export Raw Setup (Unpackaged)... command.

Use File | Export Raw | Export Raw Setup (Packaged)... for tools that expect packaged raw setups (e.g. commissioning / programming tools). Packaged setup files include some additional information about the setup (e.g. Display Module type) that the tool can use for file validation.

Packaged raw setups have the file extension .rawsetup.

Use File | Export Raw | Export Raw Setup (Unpackaged)... for tools that do not expect any setup packaging (e.g. an Display Module external simulator).

XML Setup Import / Export

Overview

For external editing of setup files in a text editor or comparison using a merge tool, setups can be converted to an XML based format.

Use the File | Export Setup to XML... and File | Import Setup from XML... menu actions to export / import XML based setups.

XML Format

The best way to get a feel for the XML format is to export a setup and look at the generated XML in a text editor such as VS Code.

Tip

Use a tool such as WinMerge to compare the XML files to see what has changed between versions of the file.

  • display_setup - the root node defines the display type and screen size.
    • notes - Includes any notes from the setup file entered in the ‘save setup’ dialog.
    • can_ports - groups can_port nodes.
      • can_port - describes a single CAN Port.
        • index - The CAN port number, starting at 0.
        • bitrate - The CAN port speed setting.
        • termination_resistor - Enable / Disable software selectable CAN bus termination resistor.
        • can_channels - groups can_channel nodes.
          • can_channel - describes a single CAN channel.
            • name - The name of the CAN channel.
            • id - The CAN ID.
            • bit - The bit position of the data in the CAN message.
            • length - The length of the data in bits.
            • dbc_type - The data type of the data.
            • endian - The byte order of the data.
            • canmask - The mask to apply to the CAN ID.
            • comcodex - The COM codex to use.
            • output - describes the output of the CAN channel.
              • name - The name of the output.
              • sensor - describes the sensor used by the output.
                • shared - The name of the shared sensor, if not supplying sensor values in-line. See shared_sensors node.
                • type - The type of the sensor.
                • name - The name of the sensor.
                • factor - The factor to apply to the sensor value.
                • offset - The offset to apply to the sensor value.
    • channels - groups channel nodes.
      • channel - describes a single channel.
        • type - The type of the channel.
        • output_type - The output type of the channel.
        • predefined - Indicates if the channel is predefined.
        • name - The name of the channel.
        • inputs - groups input nodes.
          • input - describes a single input.
            • id - The ID of the input.
        • sensor - describes the sensor used by the channel. The properties vary depending on the sensor type.
          • shared - The name of the shared sensor, if not supplying sensor values in-line. See shared_sensors node.
          • type - The type of the sensor.
          • name - The name of the sensor.
          • factor - The factor to apply to the sensor value.
          • offset - The offset to apply to the sensor value.
          • pre_delay - The pre-delay to apply to the sensor value.
          • retrigger_time - The retrigger time to apply to the sensor value.
          • conditions - groups condition nodes.
            • condition - describes a single condition.
              • comparator - The comparator to use.
              • limit - The limit to compare against.
              • logic - The logic to apply to the condition.
        • items - groups item nodes.
          • item - describes a single item.
            • value - The value of the item.
            • on_time - The on time of the item.
            • off_time - The off time of the item.
            • max_duration - The max duration of the item.
            • graphic - The graphic to use for the item.
    • pages - groups page nodes.
      • page - describes a single page.
        • properties - properties of the page.
          • screenId - The screen ID of the page.
          • name - The name of the page.
          • colour - The colour of the page.
          • tags - groups item nodes.
            • item - describes a single item.
          • favourite - The favourite setting of the page.
          • defaultBgColour - The default background colour of the page.
          • defaultLineColour - The default line colour of the page.
          • defaultFillColour - The default fill colour of the page.
          • defaultTextColour - The default text colour of the page.
          • defaultWarningColour - The default warning colour of the page.
          • defaultFont - groups name and size nodes.
            • name - The name of the font.
            • size - The size of the font.
        • keypad_events - groups keypad_event nodes.
          • keypad_event - describes a single keypad event.
            • key_id - The ID of the key.
            • event_type - The type of the event.
            • key_type - The type of the key.
            • priority - The priority of the event.
            • output - The output of the event.
        • events - groups event nodes.
          • event - describes a single event.
        • gauges - groups gauge nodes.
          • gauge - describes a single gauge.
            • type - The type of the gauge.
            • properties - groups properties nodes.
              • name - The name of the gauge.
              • input - The input of the gauge.
              • left - The left position of the gauge.
              • top - The top position of the gauge.
              • width - The width of the gauge.
              • height - The height of the gauge.
              • lineColour - The line colour of the gauge.
              • backgroundColour - The background colour of the gauge.
              • fillColour - The fill colour of the gauge.
              • startValue - The start value of the gauge.
              • endValue - The end value of the gauge.
              • segmentSize - The segment size of the gauge.
              • labelColour - The label colour of the gauge.
              • labelFont - groups name and size nodes.
                • name - The name of the font.
                • size - The size of the font.
              • barTachoRectangular - The bar tacho rectangular setting of the gauge.
              • separatorsBetweenBars - The separators between bars setting of the gauge.
              • smoothEdges - The smooth edges setting of the gauge.
              • formatString - The format string of the gauge.
              • labelFrequency - The label frequency of the gauge.
              • labelDivisor - The label divisor of the gauge.
              • lowerLimitEnabled - The lower limit enabled setting of the gauge.
              • lowerLimitEnd - The lower limit end of the gauge.
              • lowerLimitColour - The lower limit colour of the gauge.
              • upperLimitEnabled - The upper limit enabled setting of the gauge.
              • upperLimitStart - The upper limit start of the gauge.
              • upperLimitColour - The upper limit colour of the gauge.
              • lowerLimitFlash - The lower limit flash setting of the gauge.
              • upperLimitFlash - The upper limit flash setting of the gauge.
              • flashAllEnabled - The flash all enabled setting of the gauge.
              • flashAllStart - The flash all start of the gauge.
              • flashRate - The flash rate of the gauge.
              • caption - The caption of the gauge.
              • textColour - The text colour of the gauge.
              • font - groups name and size nodes.
                • name - The name of the font.
                • size - The size of the font.
              • textJustify - The text justify setting of the gauge.
              • backgroundColour - The background colour of the gauge.
              • formatString - The format string of the gauge.
              • specialFormat - The special format of the gauge.
              • colourMode - The colour mode of the gauge.
              • graphicInput - The graphic input of the gauge.
              • graphic - The graphic of the gauge.
    • shared_sensors - groups sensor nodes. Shared sensors are referenced by channels.
      • sensor - describes a single sensor. The properties vary depending on the sensor type.
        • name - The name of the sensor.
        • type - The type of the sensor.
        • factor - The factor to apply to the sensor value.
        • offset - The offset to apply to the sensor value.
        • pre_delay - The pre-delay to apply to the sensor value.
        • retrigger_time - The retrigger time to apply to the sensor value.
        • conditions - groups condition nodes.
          • condition - describes a single condition.
            • comparator - The comparator to use.
            • limit - The limit to compare against.
            • logic - The logic to apply to the condition.
    • graphics - groups graphic nodes.
      • graphic - describes a single graphic.
        • filename - The file name of the graphic, used by references in the setup.
        • width - The width of the graphic.
        • height - The height of the graphic.
        • size_bytes - The total number of bytes in the image data.
        • data - The data of the graphic, base-64 encoded.
    • led_rules - For display with rule-based LED setup, defines the LED configuration.
      • group - LED group definition.
        • name - The name of the LED group.
        • leds - groups led nodes. The “All Screens” group is special and should not be moved/removed.
          • led - describes a single LED.
            • name - The name of the LED.
            • pages - JSON object containing array of page IDs that the LED group is active on.
            • rule - Set of conditions and LED patterns.
              • conditions - JSON object containing array of conditions.
                • condition - JSON object containing condition details.
                  • channel_a - The first channel to use for the condition.
                  • comparator_a - Comparison operator to use for the first channel.
                  • value_a - The value to compare against for the first channel.
                  • channel_b - The second channel to use for the condition.
                  • comparator_b - Comparison operator to use for the second channel.
                  • value_b - The value to compare against for the second channel.
                  • leds - groups led nodes.
                    • led - describes a single LED.
                      • id - The ID of the LED.
                      • colour - Colour to use (or OFF)
                      • flash_colour - Flash colour to use (or OFF)
                      • flash_rate - The flash rate of the LED.
                  • pattern_mode - The pattern mode setting (None / Interpolate / Bit Pattern)
                  • right_to_left - The right to left pattern setting.
                  • interpolation_channel - The interpolation channel setting.
                  • from - Interpolate from this value.
                  • to - Interpolate to this value.

Channel Types

Type Name Description
EventManager Event Manager Special channel type used by the display event system. Should not be used by any user-defined channels.
Scalar Linear A simple numeric value with linear scaling of the form Y = mX + b.
FunctionTable Function A table of values used to map input values to output values.
Bitmask Bitmask A channel that extracts a bitfield from a numeric value.
Logic Logic A channel that performs logical operations on input values to produce a boolean result. See Logic Channels Tab .
BitString Text A channel that maps input values to strings based on bitmasks and priorities. See Text Channel .
Text Text A channel that formats input values as text. Similar to BitString but matches exact values instead of prioritized bitmasks.
ComString ECU Text A channel that reads text from external input (e.g. CAN message). See ECU Text Channel .
Notification Notification Formats input value(s) as text. See Notifications Tab .
BitmapSelector Bitmap Selector A channel that selects a bitmap based on input values. See Image Selectors Tab .
ColourGradient Colour Gradient A channel that maps input values to colours, used as a filter for some gauge types that use a colour map.
Minimum Minimum Since Reset A filter that outputs the minimum value of the input since it was reset by an external event. See Filter Channel
Maximum Maximum Since Reset A filter that outputs the maximum value of the input since it was reset by an external event. See Filter Channel
Limit Value Reject A filter that rejects out-of limits values. See Filter Channel
RateFilter Rate Reject A filter that rejects values that change too quickly. See Filter Channel
TimeFilter Rolling Minimum / Maximum / Average A filter that calculates a statistic over a rolling time period. See Filter Channel
Average Average Since Reset A filter that outputs the average of its input values since the last reset event. See Filter Channel
ETA Estimated Time of Arrival Channel that calculates the time remaining to reach destination. See ETA Channel
Freeze Freeze A filter that holds the last value when in the frozen state (controlled by events). See Freeze Channel
Timeout Input Timeout Fallback A filter that provides a fallback value when its input times-out. See Filter Channel
ErrorText Error Text A filter that outputs a text message when its input is out of range. See Filter Channel
CalibrationFactor Calibration Factor A channel that applies a factor to its input value. See Calibration Factor Channel
DistanceCountdown Distance Countdown A channel that counts down from a distance value. See Distance Countdown Channel
Distance Distance Trip A channel that accumulates distance travelled. See Distance Trip Channel
Time Time of Day A channel that outputs the current time of day.
Fuel Fuel Level A channel that outputs the current fuel level. See Fuel Channel
Integrator Integrator A channel that integrates its input value over time. See Integrator Channel
Differentiator Differentiator A channel that differentiates its input value over time. See Differentiator Channel
Maths Maths A channel that performs mathematical operations on its input values. See Maths Channel
CDTimer Countdown Timer A channel that counts down from a time value. See Timers Tab
Stopwatch Stopwatch A channel that counts up from a time value. See Timers Tab
PerformanceTimer Performance Timer A channel that measures the time between two events. See Timers Tab
CanOutput CAN Output A channel that outputs its input value to a CAN message. See CAN Transmit
AudioControl Audio Control A channel that controls audio output. See
LapTime Lap Time A channel that outputs a lap timing related quantity. See Lap Timing Channels
Toggle Toggle A channel that toggles between two states, based upon an event. See
Case Case A channel that outputs a value depending on which input value is ’true’. See Case Channel
If If A channel that outputs a value depending on the value of its input. See If Channel
OnChange On Change A channel that outputs a value when its input changes. See On Change Channel

Example XML Structure

This example covers most of the node types that can be exported. The structure differs considerably from version 1 of Dash Design.

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<display_setup type="CD6-43" OriginalFilename="{path}/CD6-43 Setup.cd6-43.gdd" XMLFilename="{path}/CD6-43 Setup.xml" screen_width="800" screen_height="480">
    <notes>Added air temperature sensing.</notes>
    <can_ports>
        <can_port>
            <index>0</index>
            <bitrate>1M</bitrate>
            <termination_resistor>0</termination_resistor>
            <can_channels>
                <can_channel>
                    <name>RPM CAN</name>
                    <id>#4A9</id>
                    <bit>8</bit>
                    <length>16</length>
                    <dbc_type>unsigned</dbc_type>
                    <endian>msb_first</endian>
                    <canmask>3</canmask>
                    <comcodex>0</comcodex>
                    <output type="Scalar" output_type="1">
                        <name>RPM</name>
                        <sensor shared="x1 scalar" type="Scalar"/>
                    </output>
                </can_channel>
                <can_channel>
                    <name>AIR TEMP CAN</name>
                    <id>#4A9</id>
                    <bit>24</bit>
                    <length>8</length>
                    <dbc_type>unsigned</dbc_type>
                    <canmask>8</canmask>
                    <output type="Scalar" output_type="1">
                        <name>AIR TEMP CAN</name>
                        <sensor type="Scalar" name="AIR TEMP CAN_scalar">
                            <factor>1.0</factor>
                            <offset>0.0</offset>
                        </sensor>
                    </output>
                </can_channel>
            </can_channels>
        </can_port>
        <can_port>
            <index>1</index>
            <bitrate>1M</bitrate>
            <termination_resistor>0</termination_resistor>
            <can_channels/>
        </can_port>
    </can_ports>
    <channels>
        <channel type="EventManager" output_type="1" predefined="1">
            <name>EVENT MGR</name>
            <inputs>
                <input id="1">Page Select</input>
                <input id="3">Brightness</input>
                <input id="4">Page Select</input>
            </inputs>
            <sensor shared="EVENT MGR" type="EventManager"/>
        </channel>
        <channel type="Scalar" output_type="1" predefined="1">
            <name>A00 Raw</name>
            <inputs>
                <input id="1">A00 A/D</input>
            </inputs>
        </channel>
        <channel type="Scalar" output_type="1">
            <name>Internal status</name>
            <sensor type="Scalar" name="Internal status:Value_scalar">
                <factor>1.0</factor>
                <offset>0.0</offset>
            </sensor>
        </channel>
        
        <channel type="Logic" output_type="1">
            <name>FuelAlarm</name>
            <inputs>
                <input id="1">Fuel</input>
            </inputs>
            <sensor type="Logic" name="FuelAlarm_Alarm_">
                <pre_delay>0</pre_delay>
                <retrigger_time>0</retrigger_time>
                <conditions>
                    <condition>
                        <comparator>Less</comparator>
                        <limit>0.25</limit>
                        <logic>None</logic>
                    </condition>
                </conditions>
            </sensor>
        </channel>

        <channel type="BitmapSelector" output_type="2">
            <name>FuelBitmaps</name>
            <inputs>
                <input id="1">FuelAlarm</input>
            </inputs>
            <items>
                <item>
                    <value>0.0</value>
                    <on_time>0.0</on_time>
                    <off_time>0.0</off_time>
                    <max_duration>0.0</max_duration>
                    <graphic>C:/Graphics/FuelIconGrey.bmp</graphic>
                </item>
                <item>
                    <value>1.0</value>
                    <on_time>0.0</on_time>
                    <off_time>0.0</off_time>
                    <max_duration>0.0</max_duration>
                    <graphic>C:/Graphics/FuelIconRed.bmp</graphic>
                </item>
            </items>
            <sensor shared="Bitmap Sel" type="BitmapSelector"/>
        </channel>


        <channel type="Notification" output_type="2">
            <name>Warning Message</name>
            <items>
                <item>
                    <message>Low Battery @</message>
                    <format>##.#</format>
                    <input>Bat Alarm</input>
                    <label_input>Batt Volts</label_input>
                </item>
                <item>
                    <message>Coolant High @</message>
                    <format>###</format>
                    <input>Coolant Alarm</input>
                    <label_input>Coolant T</label_input>
                </item>
            </items>
            <sensor shared="Warning Message" type="Notification"/>
        </channel>

        
    <pages>
        <page id="0">
            <properties>
                <screenId value="All Screens"/>
                <name value=""/>
                <colour>#000000</colour>
                <tags/>
                <favourite value="0"/>
                <defaultBgColour>#161D1F</defaultBgColour>
                <defaultLineColour>#C0C0C0</defaultLineColour>
                <defaultFillColour>#FDB813</defaultFillColour>
                <defaultTextColour>#C0C0C0</defaultTextColour>
                <defaultWarningColour>#FF0000</defaultWarningColour>
                <defaultFont>
                    <name></name>
                    <size>18</size>
                </defaultFont>
            </properties>
            <keypad_events>
                <keypad_event>
                    <key_id>1</key_id>
                    <event_type>2</event_type>
                    <key_type>0</key_type>
                    <priority>1</priority>
                    <output>Distance Trip</output>
                </keypad_event>
                <keypad_event>
                    <key_id>1</key_id>
                    <event_type>2</event_type>
                    <key_type>1</key_type>
                    <priority>1</priority>
                    <output>Distance Trip</output>
                </keypad_event>
                <keypad_event>
                    <key_id>1</key_id>
                    <event_type>2</event_type>
                    <key_type>2</key_type>
                    <priority>1</priority>
                    <output>Distance Trip</output>
                </keypad_event>
            </keypad_events>
            <events/>
            <gauges/>
        </page>
        <page id="1">
            <properties>
                <screenId value="1"/>
                <name value=""/>
                <colour>#000000</colour>
                <enabled value="1"/>
                <tags/>
                <favourite value="0"/>
                <defaultBgColour>#008001</defaultBgColour>
                <defaultLineColour>#000001</defaultLineColour>
                <defaultFillColour>#00FF01</defaultFillColour>
                <defaultTextColour>#00FF01</defaultTextColour>
                <defaultWarningColour>#FF0001</defaultWarningColour>
                <defaultFont>
                    <name>Arial</name>
                    <size>18</size>
                </defaultFont>
            </properties>
            <events/>
            <gauges>
                <gauge type="TEXT_INPUT">
                    <properties>
                        <name value="Value Text: Gear Posn"/>
                        <input value="Gear Posn"/>
                        <left value="337"/>
                        <top value="180"/>
                        <textColour>#00FFFF</textColour>
                        <backgroundColour>#000001</backgroundColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>300</size>
                        </font>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="BAR_TACHO">
                    <properties>
                        <name value="Bar Tacho: RPM"/>
                        <input value="RPM"/>
                        <left value="6"/>
                        <top value="3"/>
                        <width value="785"/>
                        <height value="289"/>
                        <lineColour>#1A1A1A</lineColour>
                        <backgroundColour>#252525</backgroundColour>
                        <fillColour>#FFA500</fillColour>
                        <startValue value="0"/>
                        <endValue value="9000"/>
                        <segmentSize value="500"/>
                        <labelColour>#A9A9A9</labelColour>
                        <labelFont>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </labelFont>
                        <barTachoRectangular value="0"/>
                        <separatorsBetweenBars value="1"/>
                        <smoothEdges value="0"/>
                        <formatString value="#"/>
                        <labelFrequency value="2"/>
                        <labelDivisor value="1000"/>
                        <lowerLimitEnabled value="0"/>
                        <lowerLimitEnd value="0"/>
                        <lowerLimitColour>#008000</lowerLimitColour>
                        <upperLimitEnabled value="1"/>
                        <upperLimitStart value="8500"/>
                        <upperLimitColour>#FF0000</upperLimitColour>
                        <lowerLimitFlash value="0"/>
                        <upperLimitFlash value="1"/>
                        <flashAllEnabled value="1"/>
                        <flashAllStart value="8500"/>
                        <flashRate value="100"/>
                    </properties>
                </gauge>
                <gauge type="VALUE">
                    <properties>
                        <name value="Value: Road Speed"/>
                        <input value="Road Speed"/>
                        <left value="163"/>
                        <top value="0"/>
                        <textColour>#FFA500</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>100</size>
                        </font>
                        <textJustify value="Right"/>
                        <backgroundColour>#008001</backgroundColour>
                        <formatString value="#"/>
                        <specialFormat value="None"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="TEXT">
                    <properties>
                        <name value="Text: KPH"/>
                        <caption value="KPH"/>
                        <left value="171"/>
                        <top value="19"/>
                        <textColour>#6E6E6E</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </font>
                        <textDirection value="Right"/>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="VALUE">
                    <properties>
                        <name value="Value: Fastest Lap Time Delta"/>
                        <input value=""/>
                        <left value="600"/>
                        <top value="240"/>
                        <textColour>#FF1493</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>56</size>
                        </font>
                        <textJustify value="Left"/>
                        <backgroundColour>#008001</backgroundColour>
                        <formatString value="msff"/>
                        <specialFormat value=""/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="TEXT">
                    <properties>
                        <name value="Text: Δ"/>
                        <caption value="Δ"/>
                        <left value="520"/>
                        <top value="260"/>
                        <textColour>#FF1493</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </font>
                        <textDirection value="Right"/>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="VALUE">
                    <properties>
                        <name value="Value: Last Lap Time"/>
                        <input value=""/>
                        <left value="600"/>
                        <top value="360"/>
                        <textColour>#C0C0C0</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>56</size>
                        </font>
                        <textJustify value="Left"/>
                        <backgroundColour>#008001</backgroundColour>
                        <formatString value="msff"/>
                        <specialFormat value=""/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="TEXT">
                    <properties>
                        <name value="Text: Last"/>
                        <caption value="Last"/>
                        <left value="520"/>
                        <top value="380"/>
                        <textColour>#C0C0C0</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </font>
                        <textDirection value="Right"/>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="VALUE">
                    <properties>
                        <name value="Value: Fastest Lap Time"/>
                        <input value=""/>
                        <left value="600"/>
                        <top value="420"/>
                        <textColour>#00FF00</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>56</size>
                        </font>
                        <textJustify value="Left"/>
                        <backgroundColour>#008001</backgroundColour>
                        <formatString value="msff"/>
                        <specialFormat value=""/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="TEXT">
                    <properties>
                        <name value="Text: Best"/>
                        <caption value="Best"/>
                        <left value="520"/>
                        <top value="440"/>
                        <textColour>#00FF00</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </font>
                        <textDirection value="Right"/>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="HS_BAR">
                    <properties>
                        <name value="HS Bar: Fuel"/>
                        <input value="Fuel"/>
                        <left value="10"/>
                        <top value="315"/>
                        <width value="250"/>
                        <height value="49"/>
                        <lineColour>#121212</lineColour>
                        <backgroundColour>#1F1F1F</backgroundColour>
                        <fillColour>#FF8C00</fillColour>
                        <startValue value="0"/>
                        <endValue value="1"/>
                        <segmentSize value="0.1"/>
                        <fillBarFromCenterHorizontal value="0"/>
                        <singleLineMode value="0"/>
                        <separatorsBetweenBars value="1"/>
                        <squareMode value="0"/>
                        <cornerRadius value="0"/>
                    </properties>
                </gauge>
                <gauge type="HS_BAR">
                    <properties>
                        <name value="HS Bar: Coolant T"/>
                        <input value="Coolant T"/>
                        <left value="10"/>
                        <top value="370"/>
                        <width value="250"/>
                        <height value="49"/>
                        <lineColour>#121212</lineColour>
                        <backgroundColour>#1F1F1F</backgroundColour>
                        <fillColour>#FF8C00</fillColour>
                        <startValue value="0"/>
                        <endValue value="150"/>
                        <segmentSize value="15"/>
                        <fillBarFromCenterHorizontal value="0"/>
                        <singleLineMode value="0"/>
                        <separatorsBetweenBars value="1"/>
                        <squareMode value="0"/>
                        <cornerRadius value="0"/>
                    </properties>
                </gauge>
                <gauge type="HS_BAR">
                    <properties>
                        <name value="HS Bar: Batt Volts"/>
                        <input value="Batt Volts"/>
                        <left value="10"/>
                        <top value="425"/>
                        <width value="250"/>
                        <height value="49"/>
                        <lineColour>#121212</lineColour>
                        <backgroundColour>#1F1F1F</backgroundColour>
                        <fillColour>#FF8C00</fillColour>
                        <startValue value="0"/>
                        <endValue value="15"/>
                        <segmentSize value="1.5"/>
                        <fillBarFromCenterHorizontal value="0"/>
                        <singleLineMode value="0"/>
                        <separatorsBetweenBars value="1"/>
                        <squareMode value="0"/>
                        <cornerRadius value="0"/>
                    </properties>
                </gauge>
                <gauge type="BITMAP">
                    <properties>
                        <name value="Image: charging_malf.bmp"/>
                        <graphicInput value="{path}/charging_malf.bmp"/>
                        <left value="265"/>
                        <top value="428"/>
                    </properties>
                </gauge>
                <gauge type="VALUE">
                    <properties>
                        <name value="Value: Current Lap Time"/>
                        <input value=""/>
                        <left value="600"/>
                        <top value="300"/>
                        <textColour>#FFFFFF</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>56</size>
                        </font>
                        <textJustify value="Left"/>
                        <backgroundColour>#008001</backgroundColour>
                        <formatString value="msff"/>
                        <specialFormat value=""/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="TEXT">
                    <properties>
                        <name value="Text: Lap"/>
                        <caption value="Lap"/>
                        <left value="520"/>
                        <top value="320"/>
                        <textColour>#FFFFFF</textColour>
                        <font>
                            <name>Open 24 Display St</name>
                            <size>30</size>
                        </font>
                        <textDirection value="Right"/>
                        <textJustify value="Left"/>
                        <colourMode value="Normal"/>
                    </properties>
                </gauge>
                <gauge type="BITMAP">
                    <properties>
                        <name value="Image: fuel_level.bmp"/>
                        <graphicInput value="{path}/fuel_level.bmp"/>
                        <left value="265"/>
                        <top value="318"/>
                    </properties>
                </gauge>
                <gauge type="BITMAP">
                    <properties>
                        <name value="Image: oil_pressure.bmp"/>
                        <graphicInput value="{path}/oil_pressure.bmp"/>
                        <left value="265"/>
                        <top value="373"/>
                    </properties>
                </gauge>
                <gauge type="HS_BAR">
                    <properties>
                        <name value="HS Bar: FakeLatG"/>
                        <input value="FakeLatG"/>
                        <left value="518"/>
                        <top value="191"/>
                        <width value="280"/>
                        <height value="49"/>
                        <lineColour>#282828</lineColour>
                        <backgroundColour>#000000</backgroundColour>
                        <fillColour>#FF0000</fillColour>
                        <startValue value="-1"/>
                        <endValue value="1"/>
                        <segmentSize value="0.1"/>
                        <fillBarFromCenterHorizontal value="1"/>
                        <singleLineMode value="0"/>
                        <separatorsBetweenBars value="1"/>
                        <squareMode value="0"/>
                        <cornerRadius value="0"/>
                    </properties>
                </gauge>
            </gauges>
        </page>
        <page id="2">
            <properties>
                <screenId value="2"/>
                <name value=""/>
                <colour>#000001</colour>
                <enabled value="1"/>
                <tags length="1">
                    <item>tacho</item>
                </tags>
                <favourite value="0"/>
                <defaultBgColour>#008001</defaultBgColour>
                <defaultLineColour>#000001</defaultLineColour>
                <defaultFillColour>#00FF01</defaultFillColour>
                <defaultTextColour>#00FF01</defaultTextColour>
                <defaultWarningColour>#FF0001</defaultWarningColour>
                <defaultFont>
                    <name>Arial</name>
                    <size>18</size>
                </defaultFont>
            </properties>
            <events/>
            <gauges>
                <gauge type="RTACHO_BMP">
                    <properties>
                        <name value="Needle: Road Speed"/>
                        <input value="Road Speed"/>
                        <left value="175"/>
                        <top value="29"/>
                        <width value="451"/>
                        <height value="451"/>
                        <lineColour>#1E90FF</lineColour>
                        <backgroundImage value="{path}/speed-tacho-270.png"/>
                        <transparentColour>#000000</transparentColour>
                        <transparent value="0"/>
                        <Needle_centreX value="225"/>
                        <Needle_centreY value="225"/>
                        <Needle_centreOffset value="56"/>
                        <Needle_needleLength value="183"/>
                        <Needle_startAngle value="30"/>
                        <Needle_endAngle value="330"/>
                        <Needle_baseWidth value="3"/>
                        <Needle_drawCentre value="0"/>
                        <startValue value="0"/>
                        <endValue value="200"/>
                    </properties>
                </gauge>
            </gauges>
        </page>
    </pages>
    <shared_sensors>
        <sensor type="Scalar" name="x1 scalar">
            <factor>1.0</factor>
            <signed>0</signed>
        </sensor>
        <sensor type="BitString" name="Gear String">
            <bitstrings match_on_value="0" mask="0">
                <items length="9">
                    <item priority="1" mask="8" string="7"/>
                    <item priority="2" mask="7" string="6"/>
                    <item priority="3" mask="6" string="5"/>
                    <item priority="4" mask="5" string="4"/>
                    <item priority="5" mask="4" string="3"/>
                    <item priority="6" mask="3" string="2"/>
                    <item priority="7" mask="2" string="1"/>
                    <item priority="8" mask="1" string="N"/>
                    <item priority="9" mask="0" string="R"/>
                </items>
            </bitstrings>
        </sensor>
        <sensor type="Logic" name="Warning Trigger">
            <conditions>
                <condition>
                    <comparator>Greater</comparator>
                    <limit>0.0</limit>
                    <logic>Or</logic>
                </condition>
                <condition>
                    <comparator>Greater</comparator>
                    <limit>0.0</limit>
                    <logic>None</logic>
                </condition>
            </conditions>
        </sensor>
        <sensor type="Notification" name="Warning Message"/>
        <sensor type="BitmapSelector" name="Bitmap Sel"/>
        <sensor type="FunctionTable" name="Contrast">
            <table lowreal_t="2" lowreal="0" highreal_t="2" highreal="2500" lowraw_t="72" lowraw="0.0" highraw_t="72" highraw="63.0" interpolate="1" signed="0">
                <map raw_t="2" raw="0" real_t="72" real="0.0"/>
                <map raw_t="2" raw="300" real_t="72" real="10.0"/>
                <map raw_t="2" raw="2500" real_t="72" real="63.0"/>
            </table>
        </sensor>
    </shared_sensors>
    <graphics>
        <graphic>
            <filename>{path}/Small Warning Black.bmp</filename>
            <width>83</width>
            <height>73</height>
            <size_bytes>113</size_bytes>
            <data>{base-64 data}</data>
        </graphic>
        <graphic>
            <filename>{path}/Small Warning Triangle.bmp</filename>
            <width>83</width>
            <height>73</height>
            <size_bytes>4416</size_bytes>
            <data>{base-64 data}</data>
        </graphic>
    </graphics>
    <led_rules>
        <group name="All Screens" predefined="1">
            <pages>{pages:[0]}</pages>
            <rule name="marshal" priority="1" bitmask="229376">
                <conditions>
                    <condition>
                        <channel_a value="A08 Raw"/>
                        <comparator_a value="="/>
                        <value_a value="1"/>
                        <channel_b value=""/>
                        <value_b value="0"/>
                        <leds>
                            <led id="15">
                                <colour value="ON"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                        </leds>
                        <right_to_left value="0"/>
                        <interpolation_channel value=""/>
                        <from value="0"/>
                        <to value="0"/>
                    </condition>
                    <condition>
                        <channel_a value="A08 Raw"/>
                        <comparator_a value="="/>
                        <value_a value="2"/>
                        <channel_b value=""/>
                        <value_b value="0"/>
                        <leds>
                            <led id="15">
                                <colour value="OFF"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="16">
                                <colour value="ON"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                        </leds>
                        <right_to_left value="0"/>
                        <interpolation_channel value=""/>
                        <from value="0"/>
                        <to value="0"/>
                    </condition>
                    <condition>
                        <channel_a value="A08 Raw"/>
                        <comparator_a value="="/>
                        <value_a value="3"/>
                        <channel_b value=""/>
                        <value_b value="0"/>
                        <leds>
                            <led id="15">
                                <colour value="OFF"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="16">
                                <colour value="OFF"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="17">
                                <colour value="ON"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                        </leds>
                        <right_to_left value="0"/>
                        <interpolation_channel value=""/>
                        <from value="0"/>
                        <to value="0"/>
                    </condition>
                </conditions>
            </rule>
        </group>
        <group name="Driver">
            <pages>{pages: [1,2,3,4,5,7]}</pages>
            <rule name="Shift Lights" priority="0" bitmask="32767">
                <conditions>
                    <condition>
                        <channel_a value=""/>
                        <comparator_a value="&lt;&gt;"/>
                        <value_a value="0"/>
                        <channel_b value=""/>
                        <value_b value="0"/>
                        <leds>
                            <led id="0">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="1">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="2">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="3">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="4">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="5">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="6">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="7">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="8">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="9">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="10">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="11">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="12">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="13">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                            <led id="14">
                                <colour value="Green"/>
                                <channel value=""/>
                                <flash_colour value="OFF"/>
                                <flash_rate value="0"/>
                            </led>
                        </leds>
                        <pattern_mode value="Interpolate"/>
                        <right_to_left value="0"/>
                        <interpolation_channel value="RPM"/>
                        <from value="0"/>
                        <to value="10000"/>
                    </condition>
                </conditions>
            </rule>
        </group>
    </led_rules>
</display_setup>

Commands

Overview

Commands can be invoked from menus or by shortcut keys.

Shortcut Customization

Shortcut keys may be customized in the software using Configure | Keyboard Shortcuts....

Keyboard Shortcuts Keyboard Shortcuts

Assigning a shortcut

Select a category on the left side of the dialog to see the available actions.

Select the action from the Action list.

Click on the Setup… button to assign a new shortcut. The button will pop up a dialog to capture the new shortcut key combination; while the dialog is shown, press the desired key combination on the keyboard.

Removing a shortcut

Select the action from the list and click on the Clear button.

Schemes

The software supports multiple schemes for shortcuts. The scheme can be selected from the dropdown at the top of the dialog.

To add or remove a scheme, click the Configure Schemes… button.

Subsections of Commands

Shortcut Keys

Shortcut Action
Alt + Ctrl + S Save New Version
Alt + F7 Preferences…
Alt + Left Select Previous
Alt + Right Select Next
Ctrl + A Select All
Ctrl + C Copy
Ctrl + G Group
Ctrl + H History
Ctrl + S Save Setup
Ctrl + Shift + G Ungroup
Ctrl + Shift + S Save Setup As…
Ctrl + Tab Select Screen
Ctrl + V Paste
Ctrl + X Cut
Ctrl + Y Redo
Ctrl + Z Undo
Delete Delete
Esc Select None
F1 Help…
F11 Toggle Fullscreen Mode
F7 Upload To Display
Shift + F1 About…

File Menu

Edit Menu

Screen Menu

View Menu

Tools Menu

Configure Menu

Help Menu

Subsections of Tools

Font Editor

Overview

The font editor is used to select fonts for gauges from either gauge properties Standard Gauge Properties or the Unique Fonts Dialog.

Font Editor Font Editor

Font Editor

Options

Font Type

If the display supports vector fonts then the font type will be available. See Font Types .

Bitmap

If selected, the font will be converted to a monochrome bitmap (rasterized) for use by the display.

Vector

If selected, the font file (outlines) will be sent to the display without rasterization. This allows the display to render different sizes from the same font data and antialias (smooth) the outlines.

Bitmap Font

Available fonts are listed. Select an item from the list to change the font face and adjust the size.

Use the Italic Italic and Bold buttons to change the font style.

Offset / Crop

For bitmap fonts, the character cropping rectangle may be adjusted using the cropping options. It can be useful to display the font table when adjusting the cropping options.

Cropping the font can be useful to reduce the memory usage for bitmap fonts and also when fonts do not report accurate bounding rectangles.

Optimize

Click the optimize button to optimize the cropping rectangle based upon used pixels used by all characters in the font table.

Warning

The set of characters included in the font can change if text within the setup is changed, which could result in unintended clipping of some characters.

Rendering

Monochrome Threshold

Threshold at which anti-aliased pixels are converted to monochrome (1...255). If 0, then the default value is used (170).

Use Legacy Font Mapping

Use same font-mapping scheme as in version 1 software.

Use Clear Type

Use ClearType rendering prior to conversion to monochrome.

Bitmap Font Preview

Emulate Display

Emulate display rendering in the preview.

Show Font Table

Preview the generated font table with cropping cell outlines.

This can be useful for checking that all characters will be fully rendered, particularly if adjusting cropping:

Font Table Font Table

Font Table

Vector Font

Vector fonts may be added to the setup by adding TTF (TrueType) files to the setup. The TTF files are stored directly in the setup file.

Select an item from the list to apply that font to the gauge.

Vector Font Dialog Vector Font Dialog

Vector Font Dialog

Adding Vector Fonts

Use the Add Add button to select a TTF file from disk.

Adding fonts will not change the set of fonts installed on your PC for use by other applications.

Warning

Different fonts have different licensing restrictions. You must confirm the license for each font added to the setup and ensure that you are complying with the license by using the font in your setup.

Removing Vector Fonts

Use the Add Delete button to remove any fonts that are no longer required.

Vector Font Size

Adjust Size to select a font size for the gauge. With vector fonts, multiple sizes can be used at once for the same font data on different gauges.

Vector Font Offset

Adjust Offset to offset the rendering position of the font. This is rarely required but can be useful in cases where the rendering origin for the font is not in the correct position.

Font Types

Overview

Depending upon the display type, there may be the option to use either Bitmap fonts or Vector fonts.

Bitmap Fonts

All display module types support bitmap fonts. When the setup is programmed into the display, fonts are converted to monochrome bitmap images with a sub-image for each character.

If multiple sizes of the same font are used then each size will require a separate bitmap generated for it. It is therefore worth limiting the set of font sizes used, where possible to reduce memory usage.

By default, the Windows-1252 code page will be used for mapping characters, sometimes referred to as a charset. Some display setups may use characters that are not representable by the default code page. In these instances Dash Design will generate a custom code page so that these characters may be rendered by the display.

Tip

Use the Unique Fonts tool to combine similar bitmap fonts to reduce resource usage.

Vector Fonts

Some display types support ‘vector’ fonts (e.g. TTF).

Vector fonts have the following advantages:

  • Anti-aliased rendering.
  • The same font data can be used to render different font sizes.
  • Unicode support.

Since vector fonts allow the display to support unicode, gauges like Label Gauge or Text Input Gauge that are using vector fonts will be encoded with a unicode representation (UTF-8).

When using unicode characters in Notifications (see Notifications Tab ), it is best to ensure that gauges that use them are either exclusively vector fonts or bitmap fonts to avoid potential rendering issues since different charsets are expected.

Preferences

Overview

Some application settings are available via the Configure | Preferences... Alt + F7 command.

 Preferences Dialog  Preferences Dialog

Preferences Dialog

Adjust the relevant preferences using the property grid, descriptions for the properties are shown at the bottom of the dialog.

Setup Checker

Overview

The setup checker identifies and in some cases automatically fixes common setup errors and warnings.

Setup Checker Setup Checker

Setup Checker

Showing the Setup Checker

The setup checker may be shown by using the View | Setup Check menu action or by double clicking on the setup check status indicator on the application status bar at the right-hand side:

Status Bar Status Bar

Status Bar

Setup Checker Messages

Messages are listed with a severity:

Severity Description
Error Error Indicates a major issue in the setup that must be resolved prior to programming.
Warning Warning Indicates a minor issue that ought to be addressed otherwise the display may not behave as expected.
Info Info Typically indicates something minor that has been fixed automatically.

Goto Location

Messages may be associated with an item in the setup. Double clicking on messages will attempt to locate the item in Dash Design and show it. For example, if the message relates to a Channel then Dash Design will display the Channels Tab and select the Channel.

Refresh

Some setup check messages are ‘sticky’ and will remain in the list until acknowledged (typically these are automatic fix notifications). Other messages are removed automatically when the offending condition has been resolved.

Click the Refresh Refresh button to clear all Setup check messages and re-run the setup check; this will clear any ‘sticky’ messages.

Checked Items

  • CAN RX: ID range validity.
  • CAN-FD data bit rate equals or exceeds port bit rate.
  • CAN TX: Data Specification completeness.
  • CAN TX: Do any signals exceed message DLC?
  • CAN TX: Are any signals missing an input channel.
  • Invalid keypad event trigger removal.
  • Gauge charset conflicts (only applicable for display that support vector fonts).
  • Refactoring of CAN sources from prior software versions for 1:1 link to outputs.
  • Remove non-loggable channels from logging configuration on applicable display types.
  • Logic channels: Validate that logic channel can reach both the on/off state. Misconfiguration of initial/retrigger delays or the logic itself may result in logic channels that will never ‘fire’. This includes issues where floating point rounding errors can result in non-functional logic channels.
  • Monitored channels - Add monitoring on channels that require it for correct functioning and remove any dangling references from prior software versions.
  • Remove any broken channel definitions that are not accessible in the software, typically from issues in prior software versions.
  • Fix any predefined channels that were named/scaled differently in prior software versions.
  • Validate that the Odometer channel is correctly configured with appropriate input units.
  • Validate distance trip configuration.
  • Validate and fix internal channel/gauge references.
  • Check that maths channels have valid inputs.
  • Check that ECU Text channels are directly derived from a Raw CAN source channel (otherwise they do not work in the display).
  • Validate that unit conversions can be applied e.g. from channel Output Units => Display Units.
  • Check that the Speed Input channel has units of speed specified.
  • Check and remove invalid alarm page triggers.
  • Check compatibility of bar gauge input data type - warn if time inputs are used directly.
  • Check for valid Format property on gauges.
  • Check that gauges have valid input channels and warn if missing.
  • Validate that image gauges have a valid image (e.g. the image was not removed from the setup).
  • Check for out-of-bounds rendering (e.g. on Needle gauge).

Track Database

Overview

Some Display Module types support a programmable track database. The track database allows the display to automatically select a nearby GPS start/finish line based upon the GPS position.

Track Database Track Database

Track Database

Track Database

A track database can be maintained on the PC. It is a folder containing kml or kmz files called “Tracks” under the Dash Design documents folder.

Click the Explore Explore button on the Track Database dialog to open the folder in Windows® file explorer.

Programming the Display

Select the tracks that you want to program by checking them in the list then click the Program Program Display button.

Warning

Avoid programming the display with multiple versions of the same track since the Display may not choose the correct version of the track.

Reading from the Display

Use the Read Display Read Display button to read the tracks that are currently loaded in the display and update the checked tracks in the track database dialog.

Any tracks that exist in the display that do not exist on disk shall be added to the list (but not added to the Tracks folder).

Defining Tracks

Tracks can be defined either by editing KML files (an XML type format) by hand, or by using an editor such as Google Earth. A zipped KML format is also supported (KMZ).

The KML file should contain a folder with the name of the track. Within this should be a line string with the name “Start/Finish” and may also contain numbered split lines (e.g. Split1 or Split2). At present, only the Start/Finish line is programmed into the display.

The “Start/Finish” and any “Split” lines must have 2 points only. These lines should cross the track perpendicular to the line that the car would take. The direction of the line is 90° clockwise from the first point. So, given a track that is oval and the car is running clockwise around the track, the line would start inside the oval and end outside. If the car was running anti-clockwise then the line would start outside the oval and end inside it.

The track definition may also contain a line string for the track itself called “Track”. This is rendered in the Track Database dialog as a thumbnail and is currently purely for visualization purposes.

For example:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    <name>Silverstone.kmz</name>
    <Folder>
        <name>Silverstone</name>
        <Placemark>
            <name>Start/Finish</name>
            <LineString>
                <tessellate>1</tessellate>
                <coordinates>
                    -1.023222302590363,52.06815679907218,0 -1.023762259441994,52.06840339462266,0 
                </coordinates>
            </LineString>
        </Placemark>
        <Placemark>
            <name>Track</name>
            <LineString>
                <tessellate>1</tessellate>
                <coordinates>
                    -1.023457440705252,52.06826330469951,0 -1.022211981150893,52.06926392138978,0 -1.020120716246536,52.07094945894832,0 -1.019798435446819,52.07119895390668,0 -1.019601119519132,52.07126226540072,0 -1.01937873321533,52.07130387583826,0 -1.019151596800913,52.07132015409328,0 -1.018864704792763,52.07132699524943,0 -1.018571326775504,52.07130765223916,0 -1.018287746835613,52.07128456546694,0 -1.017245837241402,52.07119202674222,0 -1.016972301678272,52.07118239377338,0 -1.016710355235815,52.07119694839953,0 -1.016431744521955,52.07122766516974,0 -1.016139377047914,52.07129194838007,0 -1.015890779969542,52.07137482110704,0 -1.015660378114936,52.07146988771898,0 -1.015329365246891,52.07163540796481,0 -1.014912384781105,52.07184482607399,0 -1.014278792857228,52.07215527769836,0 -1.013875376200518,52.07235236448024,0 -1.013618131981842,52.07247620811879,0 -1.013447409552678,52.07251877034994,0 -1.013319975021001,52.07252522993891,0 -1.013184409430378,52.07250628693589,0 -1.01310077472047,52.07246933328934,0 -1.013033850291631,52.07241324861703,0 -1.012978908879991,52.07235209663881,0 -1.012860470987238,52.07212659337567,0 -1.012577418468494,52.07155200071375,0 -1.012521435811164,52.0714882955801,0 -1.01241641133345,52.07143118406936,0 -1.012296608528234,52.07139858475865,0 -1.012165632134893,52.0713992211664,0 -1.012040161907365,52.07143360936539,0 -1.011947625906483,52.07150255189591,0 -1.011843568280048,52.07161602819282,0 -1.011690025087647,52.07186487421092,0 -1.011546321340735,52.0721562329888,0 -1.011430985337407,52.07252893286008,0 -1.011401929202499,52.07290108966808,0 -1.011419609454781,52.07302600696883,0 -1.011458558599511,52.07307834034388,0 -1.011508853351684,52.07311677085882,0 -1.011745977479267,52.07324596402563,0 -1.012380629940351,52.0736254031531,0 -1.013196080280964,52.07408080117892,0 -1.01447343285189,52.07480129681431,0 -1.015659863767252,52.07545649600331,0 -1.018450323972536,52.07699568325367,0 -1.018628666371085,52.07707198799071,0 -1.018852364896329,52.0771302583529,0 -1.019139998237194,52.07715507260878,0 -1.019425637860738,52.07713550285217,0 -1.019717685896793,52.07707442375945,0 -1.019717838927831,52.07707159871079,0 -1.019875432474793,52.07700612118002,0 -1.019974638263597,52.0768873138033,0 -1.020021797462273,52.0767578285128,0 -1.020048264359766,52.07651102214933,0 -1.020115356756105,52.07616091012261,0 -1.020218197163085,52.07602511655598,0 -1.02037330652471,52.07591751384516,0 -1.020577851231113,52.07584315361245,0 -1.020827875515469,52.07580418109799,0 -1.021072945038164,52.07581683210579,0 -1.021301749328888,52.07587772966747,0 -1.021505454046772,52.07598109362632,0 -1.02161258467528,52.07610917315833,0 -1.021652404108211,52.07627270721889,0 -1.021590593993534,52.07647689871101,0 -1.021286511375399,52.07685291248266,0 -1.020652373384661,52.0776370848383,0 -1.02041866101886,52.07781871987165,0 -1.020092038113648,52.07803677596841,0 -1.019717807773661,52.07824558471947,0 -1.019305157925989,52.07842379851116,0 -1.018942220901495,52.07852426096748,0 -1.018474214581038,52.07859650614207,0 -1.018218625788347,52.07861972841747,0 -1.016822932764364,52.07871116772316,0 -1.015215962508181,52.07880785609512,0 -1.012305414454012,52.07894242003761,0 -1.012069324934228,52.07892135838949,0 -1.011812287263301,52.07886274393292,0 -1.011544712985256,52.07876463011411,0 -1.011325781872238,52.07862751294066,0 -1.011189887559795,52.07849677966099,0 -1.011072443810749,52.07833352502246,0 -1.010878355938465,52.0779797545011,0 -1.010579382179875,52.07732122547742,0 -1.010420235949071,52.07681709510778,0 -1.01035845420526,52.07654002030849,0 -1.010306317114715,52.07626143166188,0 -1.010247579099783,52.07547762183768,0 -1.010200584898043,52.07487666001721,0 -1.010162668030518,52.07448340195425,0 -1.010126731347698,52.07432607886552,0 -1.010033011909288,52.07414893753801,0 -1.009922028249696,52.07398318913559,0 -1.009795759633373,52.07383671627831,0 -1.009619975065831,52.07367883801017,0 -1.009530466507066,52.07356252451558,0 -1.009493134815458,52.07345076484788,0 -1.009497819412188,52.07331725306135,0 -1.009600570681212,52.07308949360063,0 -1.009956518897663,52.07250080776188,0 -1.010017906032059,52.07234566981564,0 -1.01005532854137,52.07215915683623,0 -1.010046873519478,52.07202014893785,0 -1.009999523437812,52.07188024257708,0 -1.009907535127204,52.07176183639039,0 -1.009761495978749,52.07162751386204,0 -1.009358756794367,52.07128628849334,0 -1.00927500235878,52.07114744259604,0 -1.009246400994753,52.0709824561481,0 -1.009275912175003,52.07082781736657,0 -1.009352308809192,52.07069700058285,0 -1.009499838955851,52.07057072481957,0 -1.009668846635452,52.07047544926077,0 -1.009968824890688,52.07034941323089,0 -1.010703847512975,52.07007364808247,0 -1.010954790396897,52.06995193270534,0 -1.011134893382093,52.06982333480508,0 -1.0112802301664,52.06968308883275,0 -1.011487348312824,52.06945911629902,0 -1.011875581776741,52.06903082544272,0 -1.012435485276765,52.06839581531909,0 -1.013189644512745,52.06750948640506,0 -1.013190034239836,52.06750682049438,0 -1.013924670314729,52.06665196188685,0 -1.01518018343172,52.0652240028476,0 -1.015697144843778,52.06470434768345,0 -1.016297065716387,52.06416946728359,0 -1.016714998499388,52.0638115998371,0 -1.016916639133029,52.06369105032819,0 -1.01714504851143,52.06360779571828,0 -1.017463999886501,52.06354588523977,0 -1.017741099362506,52.06352117067455,0 -1.018047136012797,52.06354825699662,0 -1.018357949625235,52.06362366830372,0 -1.018585977361718,52.06372282489181,0 -1.018757838580764,52.06383139030437,0 -1.018919530710179,52.06401319695608,0 -1.019193793181883,52.06437476749688,0 -1.019342576765286,52.06454665058445,0 -1.019560414927535,52.0647570737635,0 -1.019851113106613,52.06500979059036,0 -1.020118485426937,52.06522933960495,0 -1.020319327321483,52.06536183072669,0 -1.021904687305164,52.06646707823193,0 -1.022006167024642,52.06652923634018,0 -1.022116718992182,52.06655390448029,0 -1.022226148969702,52.0665544164719,0 -1.022344063359594,52.06651762944266,0 -1.022467285354731,52.0664455046743,0 -1.022688100572002,52.06631291707106,0 -1.02282674096245,52.06625648403141,0 -1.022978555415159,52.06622992489552,0 -1.023122296152442,52.06623924680579,0 -1.023275486178706,52.06628604660686,0 -1.023422360881027,52.06636991413968,0 -1.023712831963494,52.06657146267329,0 -1.023954639926107,52.0667937231116,0 -1.024130329955542,52.06704852450726,0 -1.024270181387696,52.06738531174683,0 -1.024289040661949,52.06750594128725,0 -1.024261330339462,52.06759304219368,0 -1.024189871725516,52.067666168009,0 -1.024025725032678,52.06779026751038,0 -1.023457440705252,52.06826330469951,0 
                </coordinates>
            </LineString>
        </Placemark>
    </Folder>
</Document>
</kml>

Undo / Redo

Overview

Dash Design provides undo/redo functionality for reverting / re-applying changes to the setup.

If an unintentional/unwanted change is made then Edit | Undo Ctrl + Z will revert the change.

To re-apply the un-done changes, use Edit | Redo Ctrl + Y.

If the setup is edited following an undo operation then this will clear any of the items available for ‘redo’.

Undo History

A history of changes made to the setup during the current session is available using Edit | History Ctrl + H

Selecting items in the history list will revert the setup to that point in time.

Unique Fonts

Overview

Tools | Unique Fonts... provides a way to view a list of all fonts used by gauges in the setup.

Unique Fonts Dialog Unique Fonts Dialog

Unique Fonts Dialog

Font List

The Unique Fonts dialog presents a list of fonts that are used by gauges in the current setup. There may be more than one gauge using the same font.

Selecting a font in the list will enable the edit / copy / paste / find functions.

The font list indicates the size and style of the font.

Additionally the list will identify fonts that are ‘vector’ fonts - see Font Types .

Copy / Paste

Fonts may be Copy copied and Paste pasted into another ‘font’. Pasting a font will replace all instances of the font being ‘pasted into’, resulting in the list of gauges for each font being combined to use the same font.

Finding Gauges

The Find Find button will search through screens for gauges that use the selected font and select the first usage in the Design Tab .

A list of all gauges / screens that use the selected font may be displayed by selecting “List associated gauges” from the context menu (right-click). Double clicking on an item in the subsequent list will select the gauge in the Design Tab .

Deleting Associated Gauges

The gauges associated with the selected font may be deleted by selecting “Delete associated gauges” from the context menu (right-click). This action may be un-done using Edit | Undo Ctrl + Z.

Editing a Font

Select a font and click the Edit Edit button.

The Font Editor will be displayed. If accepted then all gauges using the selected font shall be updated.

Unit Preferences

Overview

The physical units of some Channels can be changed globally via Configure | Unit Preferences...

Unit Preferences Dialog Unit Preferences Dialog

Unit Preferences Dialog

Changing a Unit Preference

Select an item in the Unit column and click on the … button. This will pop up a dialog for selecting the units for that quantity:

Unit Preference Selection Unit Preference Selection

Unit Preference Selection

Select an item from the list and click OK.

If the ‘Auto Apply to Channels’ checkbox is checked in the Unit Preferences dialog then any channels that produce physical values in that quantity shall be updated to display values in the selected unit.

Dash Design will insert hidden channels to re-scale values for presentation in gauges.

Presets

Clicking the Presets button will allow selection from some preset unit preferences for SI units or US units:

Unit Preferences Presets Unit Preferences Presets

Unit Preferences Presets

Screens Tab

Overview

The Screens Tab shows an overview of all the screens in the display setup.

Double click on a screen to enter Design Tab for that screen.

Screens Tab Screens Tab

Options

Sorting

Screens can be sorted by page number (the default) or alphabetically by name.

Screens may be given a name by setting the ‘Name’ property on the Design Tab .

Tag Filter

If screens have been assigned tags, then they may be filtered based upon tag.

Screens may be assigned tags via th ‘Tags’ property on the Design Tab .

Hide Default Pages

If checked, ‘Hide default pages’ will hide any screens that have not been configured yet.

Context Menu

Screen Import / Export

The context menu (Right-Click) for each screen offers the option to import / export the screen from / to a file.

This facilitates building a library of screens for sharing between display setups.

Screen library files have the file extension .gddscreen.

Duplicate Screen

Screens may be duplicated onto another screen to facilitate designing similar screens.

Clear Screen

Resets the screen back to a blank page.

Disable / Enable Screen

Screens may be disabled so that they do not show when running on the Display Module. Disabled screens are shown with a grey effect.

Design Tab

Overview

The Design Tab is used to configure a Screen (commonly referred to as a Page).

Design Tab Design Tab

Gauge Structure Tree

Displays a tree that describes the layout of the screen.

Gauges may be grouped together and appear as an item in the gauge structure list with child gauges within the next level of the tree. Grouped gauges may be collectively positioned and their properties may be collectively edited.

Items may be selected by clicking. Hold the Shift key to select a range of items and the Ctrl key to add/remove single items from the selection.

The Gauge Structure Tree indicates the Z-order, with items at the top of the list being rendered ‘below’ items further down the list.

The Z-order may be modified by dragging items in the Gauge Structure Tree to the desired position.

Design Area

In the center of the Design Tab is the Design Area. This shows an interactive visual representation of the screen layout.

Gauge Palette

At the top of the design area is the Gauge Palette from which new gauges may be added to the screen design.

Properties

To the right of the Design Area are the Properties. The list of properties changes in depending upon the selection in the Design Area.

The properties may be edited to adjust the visual appearance, input channel(s) and behaviour of screens and gauges.

If no gauges are selected then the properties of the screen itself are displayed.

Multiple gauges may be selected by click & drag in the Design Area or by selecting items in the Gauge Structure tree.

When multiple gauges are selected, their Properties are merged and can be collectively edited to apply the same changes to all gauges in the selection.

View Controls

At the bottom of the Design Area are several controls:

Screen Selector

Click the Screen button to pop up a list of screens similar to the Screens Tab to allow quick switching between screens. On the left and right are arrow buttons to move to the next/prior screen.

Snap To Grid

The Snap To Grid Snap toggle button enables grid snapping so that gauges can be more easily positioned on a regularly spaced grid. To the right of the Snap button, the grid spacing may be selected.

Display Scaling

To the right of the View Controls is a zoom slider which can be used to zoom-in on the screen for more precise positioning of gauges.

The zoom level is displayed as a percentage and may be entered in as a number using the keyboard.

The Fit Screen To Window Fit button may be checked to automatically set the zoom level so that the screen fills the Design Area.

Subsections of Design Tab

Standard Gauge Properties

Overview

Most gauges share a standard set of gauge properties described below. In addition to these standard properties, many gauges have additional properties that are described in their relevant section.

Standard Properties

The standard gauge properties are as follows:

Property Description
Name The name is used to identify the gauge. Dash Design assigns a name to a new gauge automatically. The gauge is also automatically renamed when changing the gauge text for Text Label gauges or changing the Input for all other gauges. This makes it easy to identify the purpose of a gauge in any lists or editors.
Input The output used by the gauge.
Minimum The value at which a gauge starts, for example the start value of a bar gauge.
Maximum The value at which a gauge finishes, for example the end value of a bar gauge.
Resolution The resolution of the bar or tacho gauge. This is the value change that will move the bar or tacho to the next segment.
Label Frequency Labels are drawn at every Label Frequency multiplied by the resolution.
Font The font used by the gauge. See Font Editor . The Font property also allows changing the size and style of the font in-place.
Format Determines how numbers are formatted in the gauge. See the Value Formatting section for more information.
Special Format Displays internal system values. See the Value Formatting section for more information.
Left The left most (x) position of the gauge.
Top The top most (y) position of the gauge.
Width The width of the gauge. Some gauges are sized implicitly on their contents in which case the Width property will not be available.
Height The height of the gauge. Some gauges are sized implicitly on their contents in which case the Height property will not be available.
Background Colour of the gauge background.
Line Colour of the graticules and/or outline of the gauge.
Fill Colour in which to draw a filled part of the gauge, for example the part of a bar graph that has data.
Text Colour of all text in the gauge.

Value Formatting

Format Gauge Property

Many gauges can use a Format property in order to control how values are displayed.

The following table shows the standard formatting characters that can be used:

Character Description Notes
X or x Display in hexadecimal Must be first character in format
B or b Display in binary Must be first character in format
- Force leading sign character e.g. +5.3 is displayed instead of 5.3
# Indicates an optional digit e.g. ### gives 93
9 Indicates a required digit e.g. 999 gives 093
5 Indicates rounding to the nearest 5 e.g. ##5# gives 2450 instead of 2448
0 Indicates rounding to the nearest 10 e.g. ##0# gives 2400 instead of 2448
. Indicates position of decimal place

Time Formats

Gauges using time outputs use a different set of format strings:

Character Description
H Displays the hours in 24 hour format.
h Displays the hours in 12 hour format.
m Displays the minutes.
M Displays the total minutes (including hours) if there is no preceding h or H in the format string.
s Displays the seconds.
S Displays the total seconds (including hours and minutes) if there is no preceding m or M in the format string.
f Displays tenths of seconds.
ff Displays hundredths of seconds.
fff Displays thousandths of seconds (only works for lap time via CAN).
y Displays the date in dd-mm-yy format
z Displays the date with text for the month, eg 01 Jan 09

Example Time Formats

Format Output Example
Hms 24:00:00
hmsf 12:00:00.0
hmsff 12:00:00.00
y 01-01-09
hmsz 12:00:00 01 Jan 09

For an example of the total minutes or total seconds formatting (typically used with stopwatches or lap times) consider a stopwatch at 1h02m03s.45. The following results can be obtained:

Format Output Example
hmsf 01:02:03.45
msf 02:03.45
Msf 62:03.45
sf 03.45
Sf 3723.45

Special Formats / System Information

System information can be shown by adding a value gauge to the screen and setting the Format property as follows:

Special Format Format Description
Serial Number vs Shows the serial number of the display.
Version Number vv Shows the version of the colour display firmware.
Setup Name vz Shows the setup name, if set. See Setup Name .
Log Support vl Shows the logger status (see below).
Usage Hours vu Shows the usage (on time) of the display in hours.
Reset Count vr Shows the reset counter - the number of power on events since the last setup upload.
File Name vc Shows the filename of the setup file used to program the display (up to 24 characters).
Frame Rate va Shows the number of times the screen is being refreshed per second (frames per second), in the form “fps:xx”.
Processor Speed vp Shows the CPU clock speed / Memory Bus Speed. Not available on all displays."
FRAM Size vf Shows the size of the Ferromagnetic RAM as “FRAM xxxKb”.
PCB Serial vg Shows the serial number of the PCB, which may differ from Serial Number. Not supported by all display types.
Network Status vn For ethernet enabled displays, shows the network status. IP address (e.g. NET 192.168.0.99), if connected.

Other possible values:
  • NET Initialising
  • NET ERROR
  • NET Link Down
  • NET {ip address}
  • NET UNKNOWN
Client Network Status vnc For ethernet enabled displays, indicates if a client is connected over the network. e.g. NET NO CLIENT when no client connection, NET CLIENT 192.168.0.30 when there is an active client TCP connection.
Channel Name @channel Shows the name of the selected input channel. When used on a Value Gauge , Dash Design will replace the gauge with a static label. This can be useful in gauge groups where a label should show the channel name used by a value.
Channel Units @units Shows the units of the selected input channel. When used on a Value Gauge , Dash Design will replace the gauge with a static label. This can be useful in gauge groups where a label should show the channel units used by a value.

Log Support (Logger Status)

Logging Status Description
Logging not Supported This firmware does not support logging.
Logging Stopped The device is not currently logging.
Logging Running The device is currently logging.
Log Looped The log has looped.
Log Memory Space Low There is less than 5 % of the memory remaining.
Log Memory Full The logging memory is full and logging has stopped.
Log Initializing The logger is currently processing the setup.
Log Setup Error There is a problem with the logger setup.
Log Overrun Reduce the # of channels or the screen complexity.
Log Memory Worn Flash worn, Log will continue at reduced capacity.

Gauge Z-Order

Overview

The gauges on a screen are drawn (rendered) in a specific order. If gauges overlap then the gauge that was drawn first will be overdrawn by the next one. This ordering is referred to as the Z-order.

If the horizontal position of gauges is considered to be the X-axis and the vertical position the Y-axis, then the Z-axis is the depth (i.e. drawing order).

Changing the Z-Order

The Z order can be changed using menu commands and by using the Gauge Structure Tree.

Using menu commands

Command Description
Edit | Bring Forward Moves the selected gauge(s) forward (drawn later) by 1 step
Edit | Send Back Moves the selected gauge(s) backward (drawn earlier) by 1 step
Edit | Bring to Front Moves the selected gauge(s) forward as far as possible (drawn last)
Edit | Send to Back Moves the selected gauge(s) backward as far as possible (drawn first)
Tip

If frequently using these commands, custom keyboard shortcuts may be assigned to them.

Using the Gauge Structure Tree

The Gauge Structure Tree indicates the Z-order, with items at the top of the list being rendered ‘below’ items further down the list.

The Z-order may be modified by dragging items in the Gauge Structure Tree to the desired position.

Gauge Groups

Overview

Gauge Icon Gauges may be grouped together so that they are collectively edited as a group.

Creating Gauge Groups

Select gauges in the Design Area or in the Gauge Structure Tree, either use the right-click context menu or the command Edit | Group Ctrl + G.

Groups may be ungrouped using the command Edit | Ungroup Ctrl + Shift + G.

Properties

The properties of groups are merged from the gauges within the group and edited collectively.

Tip

Use Value Gauge with special formats to display the input Channel Name / Channel Units specified on the group.

Gauges

Overview

Gauges are the visual elements of a screen page. The various different gauge types available in Dash Design are described in this section.

Gauge Types

Gauge Support Matrix

GaugeCD34LDS4CD32LDS35LDS35_LCD6-43GLW-43
Tacho Gauges Yes Yes Yes Yes Yes Yes Yes
Value Gauge Yes Yes Yes Yes Yes Yes Yes
Label Gauge Yes Yes Yes Yes Yes Yes Yes
Needle Gauge Yes Yes Yes Yes Yes Yes Yes
Image Gauge Yes Yes Yes Yes Yes Yes Yes
Animation Gauge Yes No Yes No No Yes No
Warning Gauge Yes Yes Yes Yes Yes Yes Yes
Text Input Gauge Yes Yes Yes Yes Yes Yes Yes
Bar Gauges Yes Yes Yes Yes Yes Yes Yes
Shape Gauge Yes Yes Yes Yes Yes Yes Yes
Limiter Gauge Yes Yes Yes Yes Yes Yes Yes
Cross-Hair Gauge Yes Yes Yes Yes Yes Yes Yes
Graph Gauge Yes Yes Yes Yes Yes Yes Yes
Gauge Groups Yes Yes Yes Yes Yes Yes Yes
Bit Gauge Yes Yes Yes Yes Yes Yes Yes
Menu Gauge Yes Yes Yes Yes Yes Yes Yes
Text Message Gauge Yes Yes Yes No No Yes Yes
Arc Gauge No Yes No No No Yes Yes
Camera Gauge No No Yes No No No No

Subsections of Gauges

Animation Gauge

Overview

Gauge Icon Animation Gauges may be configured to display an animated gif image.

Animation gauges might be used to display a short animated splash screen when the display is switched on.

Display Support

DisplaySupported?
CD34 Yes
LDS4 No
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 No

Arc Gauge

Overview

Gauge Icon The Arc Gauge renders an swept arc (annulus). As with Needle Gauge , the arc gauge can specify a background image.

Note

The arc gauge may require a firmware update to be supported on your display.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Type The type of gauge to be drawn, may be switched between Needle Gauge or Arc Gauge .
Background bitmap The background gauge image. Clicking the Clear button clears the background bitmap.
Auto Size Automatically calculate the radii and centre of the arc from the gauge width / height.
X Centre, Y Centre The centre of the gauge from which the logical centre of the pointer will be drawn.
Outer Radius Outer radius of the arc.
Inner Radius Inner radius of the arc.
Thickness Thickness of the arc (Outer Radius - Innter Radius).
Start Degrees The number of degrees from 6 o’clock (the zero degree position) that the starting value of the gauge should be drawn.
End Degrees The number of degrees from 6 o’clock (the zero degree position) that the end value of the gauge should be drawn.
Transparent box If checked, then any colour in the background bitmap that matches the colour specified in Transparent Colour will not be drawn. This is useful when overlaying a round tacho bitmap gauge over another bitmap.

Display Support

DisplaySupported?
CD34 No
LDS4 Yes
CD32 No
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Bar Gauges

Overview

There are 4 types of bar gauge - rectangle and triangle shaped bars in either horizontal or vertical orientation:

  • Gauge Icon Vertical Triangular
  • Gauge Icon Horizontal Triangular
  • Gauge Icon Vertical Rectangular
  • Gauge Icon Horizontal Rectangular

Segments

A bar contains a number of segments that divide the bar up between the minimum and maximum limits.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Separators Between Bars If checked, a separator line is drawn between each bar in the line colour. Otherwise, the bars run contiguously.
Fill Bar From Centre (Rectangular Bars) If checked, the bar is drawn from the centre. For example, consider a bar gauge with the minimum set to -2 and the maximum set to +2, with Fill From Centre checked. If the value of the input is -2, the bar will be filled from the midpoint (0) to the left hand side. If the input is 0, the bar will be unfilled. If the input is 2, the bar will be filled from the midpoint to the right hand side.
Display Value As Single Line (Rectangular Bars) If checked, then the bar will not be filled. instead a single line will move across the bar indicating the current value.
Square Mode (Rectangular Bars) If checked, then the bar will not have a chamfer at one end.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Bit Gauge

Overview

Gauge Icon The Bit Gauge displays the value of individual bits in the integer representation of the input channel value.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
On The colour of bit elements for bits that are set in the input value.
Off The colour of bit elements for bits that are not set in the input value.
Spacing Spacing, in pixels, between bit elements in the gauge.
Box Width Width, in pixels, of bit elements in the gauge.
Box Height Height, in pixels, of bit elements in the gauge.
Corner Radius If non-zero, draws bit elements as rounded rectangles with the given corner radius, in pixels
Circle Style Render bit elements as circles.
Direction Controls the direction in which bit elements are drawn.
Bit Count The number of bit elements to render.
Items Lists the bit elements and allows arbitrary bits from the input value to be assigned to specific bit elements.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Camera Gauge

Overview

Gauge Icon Camera Gauges are used to show the video feed from an attached camera on the display.

If no camera is connected, a standard colour bar test card is shown.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Mirror Image from Camera If checked, the feed from the camera will be reversed as if seen in a mirror. This is useful when a non-mirrored camera is used as a rear view camera.
Display Mode Sets the display mode of the image. This can be one of three modes:
  • Preserve Aspect Ratio - The width and height of the gauge will be adjusted such that the aspect ratio (width / height) of the original camera source is preserved.
  • Crop - Allows any gauge size to be set. Because the aspect ratio of the camera is fixed, depending on the size of the gauge, some of the vertical or horizontal image will be cropped from the camera.
  • Scale - Allows any gauge size to be set. The image from the camera will be scaled in both width and height to fit the gauge size without cropping. The image may be distorted as a result.
Left Crop Number of pixels to crop from left.
Top Crop Number of pixels to crop from top.
Right Crop Number of pixels to crop from right.
Bottom Crop Number of pixels to crop from bottom.

Display Support

DisplaySupported?
CD34 No
LDS4 No
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 No
GLW-43 No

Cross-Hair Gauge

Overview

Gauge Icon The Cross Hair Gauge uses two inputs to move a cross hair around a box.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
XInput, YInput Specify the inputs for the X and Y axes of the gauge.
X Minimum, Y Minimum Specify the starting values for the X and Y axes.
X Maximum, Y Maximum Specify the end values for the X and Y axes.
Cursor Size Is the size of the cross hair cursor.
Cursor Shape Different shapes may be selected for the cursor.
Cursor Thickness Controls the thickness of lines used to draw the cursor.
Background Bitmap Can be used to specify a bitmap that will be shown behind the cross hairs. This can be used to clarify the meaning of a particular position for the cross hair. Clicking the Clear button clears the background bitmap.
Transparent box If checked, then any colour in the background bitmap that matches the colour specified in Transparent Colour will not be drawn. This is useful when overlaying a cross hair gauge with a bitmap over another bitmap.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

File Explorer Gauge

Overview

Gauge Icon The File Explorer Gauge provides access to files on the Display Module if supported. Some display types allow video playback and display of images from files via the file explorer.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Title Tip
Up Button Input for Up button (scrolls file explorer selection).
Down Button Input for Down button (scrolls file explorer selection).
OK Button Input for OK button (accept selection).
Context Button Input for Context ‘menu’ / file management button.
Video Seek Offset Input for video seek offset.
Repeat Interval [ms] Auto-repeat interval for button inputs, set to zero for no auto-repeat.
Video Seek Interval [s] Jump length when seeking during video playback
Caption Title of the file explorer.
Line Spacing Spacing between lines in the menu.
Selected Fill Background colour of selected items
Font Font for normal items in the file explorer.
Text Colour Colour of normal items in the file explorer.
Selected Font Font for selected items in the file explorer.
Selected Text Colour Text colour of selected items in the file explorer.
Unsupported Text Colour Text colour of unsupported items in the file explorer.

Display Support

DisplaySupported?
CD34 No
LDS4 No
CD32 No
LDS35 No
LDS35_L No
CD6-43 No
GLW-43 No

Graph Gauge

Overview

Gauge Icon The Graph Gauge plots values from its input channel(s) with respect to time.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Time Base This is the width of the x axis in seconds. When a page with a historical graph gauge is first selected, the data is drawn from the left hand side of the graph (t=0). As the time progresses, the lines progress towards the right hand side of the graph. Once t = time base, the graph scrolls to the left to make more space available for drawing the lines.
Input Count The number of lines (outputs) drawn in this graph. Changing the input count will add multiple sets of properties for each line.
Input The output for which the line is drawn.
Colour The colour of the line.
Minimum Specifies the lower range of the y axis of the graph for this line. If the value of the output for this line falls below this value, the line will be drawn at the minimum value.
Maximum Specifies the upper range of the y axis of the graph for this line. If the value of the output for this line exceeds this value, the line will be drawn at the maximum value.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Image Gauge

Overview

Gauge Icon Image Gauges are used to show an image from a file or the output of a image selector output (See Image Selectors Tab ).

Properties

The Graphic/Input property allows a file to be selected from disk using the Open button.

Use the … button to select from all Image and Image Selector assets in the setup.

Use the Reload Reload button to update / reload the selected image asset from disk.

Use the Reload Clear button to un-set the selected image. This will not remove the associated image asset from the setup. To remove image assets, see Images Tab

When loading an image, if it is too large to fit on the screen, the option to resize it will be offered.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Label Gauge

Overview

Gauge Icon The Label Gauge is a static gauge (it has no input and does not change) that is normally used to label other gauges or provide fixed information.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Text Sets the text shown by the label gauge.
Direction Specifies the direction in which the text is drawn in.
  • Right - Left-to-right
  • Left - Right-to-left
  • Up - Render characters bottom-to-top
  • Down - Render characters top-to-bottom
  • Flip X - Mirror horizontally (vector fonts only)
  • Flip Y - Mirror vertically (vector fonts only)
  • Rotate CW - Rotate 90° clockwise (vector fonts only)
  • Rotate CCW - Rotate 90° counter-clockwise (vector fonts only)
  • Rotate 180 - Rotate 180° (vector fonts only)
Justification Specifies whether the text is aligned to the left, right or centre of the bounding rectangle.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Limiter Gauge

Overview

Gauge Icon The Limiter Gauge is typically used to signal an approaching rev limit by means of several boxes that change colour as the rev limit approaches.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Box Count The number of boxes in the gauge.
Box Size The width and height of the box in pixels.
Limiter Start The value at which the first box will change colour from Background Colour to Fill Colour.
Limiter Offset The value added to the Limiter Start to determine when the next box changes colour.
Draw Circular Limit Lights If checked, round LED style boxes will be drawn instead of boxes.

For example, if Box Count is 3, Limiter Start is 8000 and Limiter Offset is 200, the first box will change colour at 8000, the second at 8200 and the third at 8400.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Menu Gauge

Overview

Gauge Icon The Menu Gauge allows a simple text menu to be drawn on the screen which allows navigation to various pages in the setup.

This is useful for seldom used configuration options such as Setting the time, setting the calibration factor or displaying the screen properties.

The menu events Menu Up and Menu Down are used to navigate up and down the menu and Menu Select jumps to the page associated with the current menu item.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Flat Mode If selected, the menu will render in an arc. If not selected, the menu will render in the number of columns specified by the column property.
Columns The number of columns to use in flat mode.
Selected Colour The colour of the currently selected menu item. Only active in Flat mode.
Deselected Colour The colour of all non-selected menu items. Only active in Flat mode.
Activation Input If specified, the menu will be visible and respond to events if the specified output value matches the Activation value. Otherwise it will be hidden.
Activation Value The value to make this menu visible if an Activation Input is specified.
Initial Position The initial item selected when the menu is shown.
Revert Timeout/s If non-zero, the menu will revert to the Revert Screen when the timeout has passed with no menu events being triggered.
Menu Items A list of the menu items. The following columns are available: Menu Item, Page, Output to Set, Selectable, Value, Format.
Set Immediately If this is checked, then, if an item is selectable, when it is scrolled to, the Output to Set value will be actioned immediately. In addition, the last menu item will not be rendered; this is a place holder for the click action when in set immediate mode. This could be, for example, another Output to Set function to change the currently active menu or it could be a page jump. If neither of these functions are to be used, a dummy last menu item should still be added.
Property Description
Menu Item Contains the text shown for the menu item. This can be formatted in a similar manner to Notifications (See Notifications Tab ).
Page Column contains the page jumped to when the Menu Select event is triggered. If this value is negative and an output to set has been specified, then the unsigned version of this number will be set in the output. Eg if the value is -1, the output specified will be set to 1 when the menu item is selected.
Output to Set If an output is specified here, then the absolute value specified in the Page/Value column will be set in this output when the menu item is selected (the value must be listed as negative). Currently, only calibration outputs support this feature.
Selectable If set to yes, then selecting this item will put a tick next to it. Any other item in the menu that currently has a tick will have the tick cleared.
Value Menu items can display a value if the @ symbol is present in the menu name. The source for the value is specified in this column.
Format The format string used to format the value specified in the value column.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Needle Gauge

Overview

Gauge Icon The Needle Gauge allows a scaled pointer or needle to be drawn over a graphic image. This allows much more eye catching graphics to be used for round gauges than could otherwise be drawn dynamically by the display hardware.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Type The type of gauge to be drawn, may be switched between Needle Gauge or Arc Gauge .
Background bitmap The background gauge image. Clicking the Clear button clears the background bitmap.
Auto Size Automatically calculate the length and centre of the needle from the gauge width / height.
X Centre, Y Centre The centre of the gauge from which the logical centre of the pointer will be drawn.
Centre Offset The number of pixels from the logical pointer centre at which the pointer will be drawn.
Draw Centre If checked, a solid circle is drawn at the needle centre.
Length The length of the pointer.
Start Degrees The number of degrees from 6 o’clock (the zero degree position) that the starting value of the gauge should be drawn.
End Degrees The number of degrees from 6 o’clock (the zero degree position) that the end value of the gauge should be drawn.
Transparent box If checked, then any colour in the background bitmap that matches the colour specified in Transparent Colour will not be drawn. This is useful when overlaying a round tacho bitmap gauge over another bitmap.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Shape Gauge

Overview

Gauge Icon The Shape Gauge is a static gauge (i.e. has no input and does not change) that is used to draw shapes on the screen.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Shape Specifies the basic shape as either a Rectangle or an Ellipse.
Thickness Specifies the thickness of the border drawn around the shape.

When the shape type is set to Rectangle, a gradient fill can be set instead of a solid fill colour:

Property Description
Enabled Check to enable the gradient fill.
Direction Horizontal draws the gradient from left to right, Vertical draws the gradient from top to bottom.
Gradient Start Colour The colour on the left or top.
Gradient End Colour The colour on the right or bottom.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Tacho Gauges

Overview

Gauge Icon Bar Tacho and Gauge Icon Round Tacho gauges are typically used with engine speed or road speed and are available as either a curved bar gauge or a round gauge. They use minimum, maximum and resolution in the same manner as bars but also have labeled segments, the frequency of which is specified by the label frequency property. The label values are divided by the label divisor property and then formatted.

See also Needle Gauge which can be used to draw a pointer over an image background.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Square Tacho If checked, the tacho will be rectangular instead of having an arc.
Smooth Instead of the tacho being drawn with blocks, it is instead drawn with a smooth arc.
Separators Between Bars If checked, a separator line is drawn between each bar in the line colour. Otherwise, the bars run contiguously.
Enable Lower Tacho Limit Turns on the lower tacho limit. When enabled, the first part of the tacho (up to Limit End) is drawn in Limit Colour as it is filled. If Enable Flash Below Limit is checked, the lower part of the tacho will flash if the input value is below Limit End.
Enable Upper Tacho Limit Turns on the upper tacho limit. When enabled, the last part of the tacho (after to Limit Start) is drawn in Limit Colour as it is filled. If Enable Flash Above Limit is checked, the upper part of the tacho will flash if the input value is above Limit Start.
Flash Entire Tacho When Flash Mode Active If the upper limit is flashing because Enable Flash Above Limit is checked, all the filled tacho blocks will flash if this option is checked.
Flash Rate The rate at which to flash the tacho when in any of the flash modes.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Text History Gauge

Overview

Gauge Icon The Text History Gauge displays a list or recent text input values.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Justify Specifies whether the text is aligned to the left, right or centre of the bounding rectangle.
Line Count Specifies the number of items to display in the list.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Text Input Gauge

Overview

Gauge Icon The Text Input Gauge is used to display text from a channel that produces a text output such as a Text channel.

The Justification property specifies whether the text is aligned to the left, right or centre of the bounding rectangle.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Justification Specifies whether the text is aligned to the left, right or centre of the bounding rectangle.
Warning

Note: It is important to select the background colour of the value gauge to be the same as the colour of the background the gauge is over. Failure to do so may result in corruption of the value displayed.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Text Message Gauge

Overview

Gauge Icon The Text Message Gauge is used to display messages received from a GEMS radio messaging system or GEMS SMS1 text messaging system.

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Show Urgent Messages Only In this mode, the gauge is normally hidden but will display over all other gauges when an urgent message is received. The gauge will be hidden again in response to a TEXT HIDE URGENT PANEL event.
Show Newest Message On Top If checked, new messages will be shown at the top of the list and the list will scroll down as necessary. If not checked, then new messages will be added to the bottom of the list and the list will scroll up as necessary.
Show Newest Message in Large Font If Checked, the newest message will be shown in the large font and all older messages will be shown in the small font. Font size selected in GEMS RMS will be ignored. If not checked, then the messages will be shown in the size specified by GEMS RMS.
Small Font / Large Font Set the font used to display small and large text messages. Note that the SMS1 only transmits small messages - in this case, the Large Font properties are irrelevant.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Value Gauge

Overview

Gauge Icon The Value Gauge shows the value of the output specified in the Input property according to the format specified in the Format property. The Justification property specifies whether the text is aligned to the left, right or centre of the bounding rectangle.

Warning

It is important to select the background colour of the value gauge to be the same as the colour of the background the gauge is over. Failure to do so may result in corruption of the value displayed.

The value gauge has an optional warning mode that changes the colour of the gauge when a warning limit for the input is exceeded or if a secondary channel is logically ’true'.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Colour Mode Enables changing the colour of the gauge based upon the value of a channel.
Alarm Limit In Limit Mode, specifies an upper limit for the input value, above which the Alarm Colour shall be used.
Alarm Colour Colour to use when in the alarm state.
Alarm Flash The gauge will alternate between the warning colour and the background colour whilst the warning is active.
Colour Input In Logic Mode, Allows selection of a channel, which when non-zero places the gauge in the alarm state

Special Formats

The Special Format property can be used to display internal system values. See Value Formatting .

The Channel Name and Channel Units Special Format values will cause Dash Design to replace the value gauge with a Text Input Gauge when programming the display containing the input channel name or units. This can be useful if creating Gauge Groups where the channel name, value and units should be shown; setting the Input channel property on the group will assign the value and also update the channel name and units.

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Warning Gauge

Overview

Gauge Icon The Warning Gauge, aka Alarm Bar is a block that changes colour depending on its input. Typically this is used to indicate out-of-range parameters.

For example, an Warning Gauge may be placed next to a gauge showing coolant temperature. The input to the Warning Gauge is configured to give an error signal if the coolant temperature rises above a pre-determined level. The bar colour changes from the specified background colour to the Fill Colour to give an easily seen warning indication.

Tip

It is possible to display a Warning Gauge underneath a value or text input gauge. For this to work correctly, the Warning Gauge must be bigger than the maximum likely size of the value gauge. When setting this up in the editor, it is easier to add the Warning Gauge to the page first then the value gauge; this ensures that the value gauge is visible and makes sizing the Warning Gauge correctly easier.

Properties

In addition to Standard Gauge Properties , the following properties may be configured:

Property Description
Borderless The display will automatically set the line colour to the current fill colour such that a rectangle of uniform colour with no border will be drawn.
Colour from input value If checked, the input channel is a colour value (see below).
Colour Map Allows a gradient to be specified to look up a colour based upon the magnitude of the input value given a start and end value.
Flash The gauge will alternate between the warning colour and the background colour whilst the warning is active.

Colour Input Values

Most Display Modules expect the colour value to be a 24 bit RGB value. The hexadecimal (and decimal) values of some common colours are shown below:

Colour Hexadecimal Decimal
Black 0x000000 0
White 0xFFFFFF 16777215
Red 0xFF0000 16711680
Green 0x00FF00 65280
Blue 0x0000FF 255

Some older firmware versions only support 16 bit RGB565 values as follows:

The 16 RGB colour value treats the top 5 bits as red intensity, the next 6 bits as green intensity and the lower 5 bits as blue intensity. Thus, it is possible to display any one of 65535 colours. The hexadecimal (and decimal) values of some common colours are shown below:

Colour Hexadecimal Decimal
Black 0x0000 0
White 0xFFFF 65535
Red 0xF800 63488
Green 0x07E0 2016
Blue 0x001F 31
Cyan 0x07FF 2047
Yellow 0xFFE0 65504

Typically, a function table would be used to map a given value to a specific colour. To avoid interpolation between the colour values, the function table should be set up such that a range of values defines one colour. For example, the following function table would map brake temperatures of 0 to 250 to blue, 251 to 500 to green, 501 to 700 to yellow and 701 to 1000 to red:

Input Output
0 31
250 31
251 2016
500 2016
501 65504
700 65504
701 63488
1000 63488

Display Support

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Simulator Tab

Overview

The Simulator Tab is used to test the setup being edited on a simulated dash.

Simulator Tab Simulator Tab

Running the Simulator

Info

The simulator can only run if there is suitable simulator firmware for running the current setup.

A simulator firmware version may be selected from the drop-down box below the Play Icon Play Icon.

If there are no options in the firmware list, it will display “No Firmware” and it will not be possible to start the simulator.

Clicking the Play Icon Play Icon will start the simulated display using the current setup.

Changes to the setup will cause the simulator to stop.

Display simulators are built from the same code as used by the real display. There may be some differences in behaviour due to differences in the running platform (i.e. the desktop operating system as opposed to an embedded environment).

Beacon Input

Clicking the Play Icon Beacon Icon will simulate a beacon input event, which can be useful for testing lap timing.

Channels

Values in the Channels list may be modified to simulate their value changing in the display. For CAN channels, this will simulate the sending of CAN frames to the display firmware.

Show Predefined Channels

Filter out any predefined channels from the channels list.

Show Used Channels Only

Shows channels that are used by the current screen only.

Connect to GDA

GDA must be running before checking the “Connect to GDA” checkbox.

A data log file may be loaded in GDA and then played back, which channel values being sent to the simulator.

The channel list should update in response.

The data log must have channels that exactly match the names of channels in the display setup.

Other Applications

Other applications could integrate with the simulator to send their own values to it.

The application must implement a named pipe server, with the pipe name “GemsDAChannelDataServer”.

Data is sent over the pipe using JSON documents, separated by NULL characters, of the form:

{
    "cd":[
        { "n": "Channel1", "v": 0.2 },
        { "n": "Channel2", "v": 3.14159 }
    ]
}

Channels Tab

Overview

The Channels Tab provides configuration of channels in the display.

The Channels Tab lists a subset of all channels.

Channels typically convert values coming from sources into scaled values and can be routed to other channels, gauges, and in some cases externally (e.g. using CAN Transmit).

Some channel types have dedicated tabs such as CAN Channels , Logic Channels or Timer Channels .

Channels Tab Channels Tab

Channel Types

The channel type may be changed and each type has a different editor.

Editing Channels

Select a channel from the list on the left hand side to view / edit the channel configuration.

Common Fields

Channel Name

The channel may be renamed in the Channel Name field. If a channel is renamed, any references to it (e.g. from Gauges) shall be updated. Channel names must be unique; if the rename would result in a duplicate name then an error will be posted and the Channel Name field will revert to the original name.

Predefined channels can’t be renamed.

Primary Input

Most channels have a single input. This may be a ‘Source’ or another channel.

CAN channels are created using the CAN Receive tab. These have an implicitly created ‘Source’ that can’t be changed.

Filter

An ‘in-place’ filter chain may be specified on most channel types. Filter chains insert hidden channels in the setup that modify the channel value in various ways, such as averaging (box filtering) or presenting error text when the input has timed out.

Alternatively, a filter channel may be created to provide an alternative filtered version of the channel with a different name.

See Filter Channel for more details.

Input Units

If not set, the input units will be implicitly set to the output units of the Primary Input channel.

Otherwise, the Input Units specify the expected units of physical values coming into this channel. If the primary input produces values with a different physical unit then values will be pre-converted to the expected input units, if possible.

To the right of the Input Units selector is a copy Copy button to clone the input units from the Primary Input.

Output Units

Indicates the physical units of values following any scaling specified by the channel configuration. For example the channel may be a Function (Lookup Table) Channel that has input units of Volts and converts this to a temperature in Celsius. The input and output units make this conversion clear.

Display Units

These are the physical units that the channel should be displayed in. The channel configuration may produce a specific set of units but the user preferentially would prefer another unit. For example, a Function (Lookup Table) Channel may output celsius but it is preferred to display temperatures in Fahrenheit.

Next to the Display Units selector is a dropdown box to select the Display Units policy. By default, this will be set to ‘Match Preferences’:

Match Preferences

Automatically set the display units for this channel when the global unit preferences are changed. For example, if the Output Units are a temperature unit and the unit preferences selects ‘Fahrenheit’ for temperature units then the display units shall automatically be changed to ‘Fahrenheit’ and the physical value of the channel shall be rescaled from the selected Output Units.

If there is not a global unit preference for the Output Units type then this is equivalent to the ‘Match Output’ policy.

When ‘Match Preferences’ is selected a Unit Preferences Unit Preferences button is show to the right of the drop-down box to open the Unit Preferences. The preferences are also available from the menu action Configure | Unit Preferences..., see Unit Preferences for more details.

Warning

Match Preferences will not automatically track Unit Preferences if ‘Auto Apply to Channels’ is not checked in the Unit Preferences dialog. Legacy display setups will default this setting to ‘Off’ to avoid a change in behaviour when coming from a legacy version of the software.

Match Output

Track the selected Output Units for the display units - if the Output Units are changed then the Display Units shall be automatically updated to match.

Override

Always convert the output units to the selected Display Unit, if a conversion exists.

Adding / Removing Channels

Towards the bottom right of the Channels List, use the Add button to add a new channel, and the Delete button to remove the selected channel(s).

Removing CAN channels from this list shall also remove the channel from the signals table on the CAN Receive Tab.

Predefined Channels

Depending upon the display type, there will be some pre-defined channels in the setup. New setups will have these channels added automatically.

When loading existing setups, if any predefined channels are missing, they shall be automatically added when the setup is loaded.

Check the “Show Predefined” checkbox to the lower left of the Channels List to include predefined channels in the Channels list. Predefined channels are shown in a different colour and usually can’t be edited or removed from the setup.

CAN Channels

Using the context menu (right click) on the channel list provides an option to show the channel in the CAN Receive .

Channel Type Support Matrix

ChannelCD34LDS4CD32LDS35LDS35_LCD6-43GLW-43
Linear (Y=mX+b) Yes Yes Yes Yes Yes Yes Yes
Function Yes Yes Yes Yes Yes Yes Yes
Filter Yes Yes Yes Yes Yes Yes Yes
Text Yes Yes Yes Yes Yes Yes Yes
ECU Text Yes Yes Yes Yes Yes Yes Yes
Bitmask Yes Yes Yes Yes Yes Yes Yes
Maths Yes Yes Yes Yes Yes Yes Yes
Fuel Yes Yes Yes No No Yes Yes
Distance Countdown Yes Yes Yes No No Yes Yes
Calibration Factor Yes Yes Yes No No Yes Yes
Distance Trip Yes Yes Yes No No Yes Yes
Freeze Yes Yes Yes No No Yes Yes
Differentiator Yes Yes Yes Yes Yes Yes Yes
Integrator Yes Yes Yes Yes Yes Yes Yes
If Yes Yes Yes Yes Yes Yes Yes
History String Yes Yes Yes Yes Yes Yes Yes
Case Yes Yes Yes Yes Yes Yes Yes
ETA Yes Yes Yes Yes Yes Yes Yes
Toggle Yes Yes Yes Yes Yes Yes Yes
Countdown Timer Yes Yes Yes Yes Yes Yes Yes
On Change Yes Yes Yes Yes Yes Yes Yes

Subsections of Channels Tab

Predefined Channels

Overview

There are a number of channels that are automatically added to the display setup. These cannot be deleted as they can be critical to the display operation.

By default, the pre-defined outputs are hidden from view in the Channels Tab and are only visible as appropriate inputs when configuring other channels or gauges. They can be made visible in the Channels Tab by checking the Show Predefined Outputs box.

Subsections of Predefined Channels

Analogue Channels

Overview

Most Display Module types have multiple analogue inputs named A1 Raw, A2 Raw etc.

Analogue inputs typically have 12 bit resolution with a range of 0 to 4095.

CAN Status Channels

Overview

CAN status channels such as CAN 1 Status channel can be used to display the state of the current CAN port by setting it as the input to a Text Input Gauge gauge.

More than one status channel may be available if the Display Module supports multiple CAN ports.

CAN Status Messages

Status Description
CAN 1 OK The CAN bus is working correctly.
CAN 1 DISABLED The CAN bus has not been setup or is not present.
CAN 1 BUS OFF A serious error has occurred on the CAN bus - this may be due to the wrong baud rate being set or the CAN wires shorted together.
CAN 1 Disconnected No messages have been received by the display in the last three seconds.
CAN 1 Warning Errors are present on the bus; this may be due to incorrect baud rate or noise.
CAN 1 Tx not acknowledged A message sent by the Display Module has not been acknowledged by any nodes on the network.
CAN 1 TOO MANY MESSAGES The total number of messages that the display is being asked to receive and transmit exceeds the capability of the CAN hardware. This can be overcome by using CAN message masks.
CAN 1 Rx Timeout Traffic is present on the bus but none of the channels that the Display Module has been set up to monitor on the current screen (and monitor screen) are present.

Lap Timing Channels

Overview

The Display Module can perform lap timing when connected to a suitable beacon. To configure lap timing see Lap Timing / GPS .

Data Types

Most lap timing channels are ’time’ types; Gauges should use time based formatting to display them (see Value Formatting ).

If lap timing channels are used as inputs to other channels, they are first converted to milliseconds and sent as a floating point number instead of as a time value.

Tip

To display lap time deltas on Bar Gauges , create a Linear (Scalar) Channel with the pre-defined delta channel as an input. This will convert the time to a floating point number, making it possible to use it in a bar type gauge.

Lap Timing Channels

Channel Name Description
Current Lap Num The current lap number. This is zero until the first beacon has been passed then increments by 1 each time a beacon is passed.
Current Lap Time The elapsed time of the current lap. When a beacon is passed, the lap time will freeze for 3 seconds to show the time of the lap just completed before resuming to show the new current lap time.
Last Lap Num The number of the last lap just completed.
Last Lap Time The lap time of the lap just completed.
Fastest Lap Num The number of the fastest lap in the current session.
Fastest Lap Time The time of the fastest lap.
Fastest Lap Delta The time difference between the last completed lap and the previous fastest lap.
Last Lap Delta The time difference between the last completed lap and the previously completed lap.
Fastest Lap Average Speed The average speed of the fastest lap.
Last Lap Average Speed The average speed of the last lap.
Predicted Lap Time The predicted lap time of the current lap based on the fastest lap.
Predicted Fastest Delta The predicted difference between the current lap and the fastest lap.
Predicted Last Delta The predicted difference between the current lap and the last lap.

Screen Selector

Overview

The Screen Selector channel is derived from an analogue input (depending on the type of module).

It uses a lookup table that is pre-calibrated for a 12 position switch using 1k resistors.

If you have used a different page select switch, the lookup table may need to be recalibrated.

CAN Page Select

If page select is being done via CAN or a button press, the page select input can be used as an analogue input (shown as A00 Raw).

To prevent the input also changing pages, edit the Screen Selector lookup table; set the first row to have an input of 0 and an output of 0 and the seconds row to have an input of 4096 and an output of 0.

Speed Channels

Overview

Most Display Module types have multiple speed inputs and these are shown in the setup as channels called Speed 1 Raw, Speed 2 Raw etc.

The raw speed outputs are scaled in Hz.

Bitmask Channel

Overview

Bitmask Channels are used to mask off bits from a raw (32 bit) input.

This is useful when data is received from the ECU that contains information for two different outputs.

For example, the lower 4 bits of a value may be used to determine gear position while the upper 4 bits determine diff mode.

Bitmask Channel Editor Bitmask Channel Editor

Options

Mask (hex)

The mask, in hexadecimal format.

Any bits in the input value that are also set in the mask are allowed through, otherwise the bits shall be set to zero.

If used as a derived output, internal values in the display are represented as double precision floating point numbers. Floating point numbers are converted to integer prior to masking.

Hexadecimal format is used here since it lines up nicely with bits. A single hexadecimal character represents 4 bits:

Hex Binary
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Calibration Factor Channel

Overview

Calibration Factor channels allow a programmable value to be created that can be linked into the events system to allow end users to set a new value on the display itself.

This can be used as a calibration factor or for storing initial fuel values for example.

Calibration Factor Channel Editor Calibration Factor Channel Editor

Settings

Initial Value

The display will use this value whenever a new setup has been programmed.

If the output has not been added to the monitor page, then the output will be reset to this value whenever it is not shown.

Always use initial value at startup

If “Always use initial value at startup” is checked then the calibration factor will not be saved in non-volatile memory during power-off of the display.

If the value should be persistent when the display is switched off, then the output MUST be added to the Monitored Channels .

Resolution

This is the amount the value is changed by in response to the Increase and Decrease events.

Apply Limits

If ticked then the display prevents the value from exceeding the Min Value or Max Value limits.

Wraparound

If limits are specified then the Wraparound option is available. Check Wraparound to make the calibration value go back to Min Value after increasing the value beyond Max Value (and also in the opposite direction).

Events

See also: Events Tab

Increase

Configures the event for increasing the calibration factor by the Resolution value.

Decrease

Configures the event for decreasing the calibration factor by the Resolution value.

Reset

Configures the event for resetting the calibration factor value to Initial Value.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Case Channel

Overview

Checks through a list of input channels until a non-zero (true) input is found and outputs a value corresponding to that input.

Case Channel Editor Case Channel Editor

Conditions

The condition list is in priority order - highest priority first; the case channel checks each Condition in list order in turn until a true condition (i.e. the value of the output is greater than 0) is found. This then results in the corresponding Output Value from the channel.

The case sensor is useful for making an output for use as the selector input in a bitmap selector.

Use the Add and Delete buttons to the bottom right of the list to add or remove rows from the list.

The priority of items may be adjusted with the Up and Down buttons.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Differentiator Channel

Overview

Differentiator channels are used to create an output that is the differential of an input with respect to time; i.e. the gradient or rate of change of the input value.

Differentiation is the inverse of integration (see Integrator Channel ). Given an input like Distance Travelled, the rate of change may be computed to give an approximation of the Speed.

Differentiator Channel Editor Differentiator Channel Editor

Options

Window[s]

Computing differentials using the first difference alone can result in a very noisy looking signal.

The average slope over the last Window seconds is therefore computed.

Acceptable values are between 0.1 and 2.0 seconds.

Higher numbers will produce a smoother, more filtered output but with a slower response time.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Distance Countdown Channel

Overview

Distance Countdown Factor channels allow a programmable distance count-down value to be created that can be linked into the events system to allow end users to set a new value on the display itself and reset the countdown value with an event.

Distance Countdown Channel Editor Distance Countdown Channel Editor

Settings

Initial Value

When a Reset event is received, the output shall be reset to Initial Value.

Reset Value

If Reset Value is checked then the display will use this value whenever a new setup has been programmed.

If the output has not been added to the monitor page, then the output will be reset to this value whenever it is not shown.

Resolution

This is the amount the value is changed by in response to the Increase and Decrease events.

Events

See also: Events Tab

Increase

Configures the event for increasing the Initial Value by the Resolution value.

Decrease

Configures the event for decreasing the Initial Value by the Resolution value.

Reset

Configures the event for resetting the output value to Initial Value.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Distance Trip Channel

Overview

Distance Countdown Factor channels allow a programmable distance count-down value to be created that can be linked into the events system to allow end users to set a new value on the display itself and reset the countdown value with an event.

Distance Trip Channel Editor Distance Trip Channel Editor

Settings

Reset Value

If Reset Value is checked then the display will use this value whenever a new setup has been programmed.

Resolution

This is the amount the value is changed by in response to the Increase and Decrease events.

Events

See also: Events Tab

Increase

Configures the event for increasing the Output Value by the Resolution value.

Decrease

Configures the event for decreasing the Output Value by the Resolution value.

Reset

Configures the event for resetting the output value to zero.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

ECU Text Channel

Overview

ECU Text channels are used to obtain a text string (such as a calibration name) from a connected ECU.

Info

The ECU Text channel type may only be selected on channels that come directly from a raw CAN source.

ECU Text Channel Editor ECU Text Channel Editor

Options

Length

The length of the string to read. Characters are read one-by-one from input value updates, typically this would be a single byte in a CAN message.

Typically strings would come from an ECU in response to a CAN Request .

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

ETA Channel

Overview

ETA channels are used to compute an estimated time of arrival.

ETA channels output a time value and any gauges must have an appropriate time format specified.

ETA Channel Editor ETA Channel Editor

Options

Distance

Select a channel with the distance remaining to the destination. The channel should have appropriate units, see Conversion below.

Speed

Select a channel with the vehicle speed. The channel should have appropriate units, see Conversion below.

Conversion

The ETA channel computes the time, in seconds using the equation:

('Distance' * 3600) / 'Speed'

This is then converted to a time value.

Since there are 3600 seconds in an hour, it is expected that the speed is in distance/hour.

So the following options are viable for the input units of the Distance and Speed channels:

  • Distance [km], Speed [kph]
  • Distance [mi], Speed [mph]

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Filter Channel

Overview

Filter channels can be configured to apply a chain of filters to the Primary Input channel.

Filter Channel Editor Filter Channel Editor

Adding / Removing Filters

Use the Add and Delete buttons to the bottom right of the Filter/Modifier list to add or remove filters from the list. The first item is the Filter Channel itself and can’t be removed.

Chained Filters

When there are multiple filters in a chain, Dash Design will insert hidden ‘modifier’ channels into the setup.

If the channel is used as the input to another output or a gauge then references shall be updated so that value at the end of the filter chain is routed to the output or gauge.

Filters

Minimum Since Reset

Outputs the minimum value of valid input values since the display was started / the filter was reset.

See Reset Triggers for details on the Reset Trigger and Reset Source options.

Maximum Since Reset

Outputs the maximum value of valid input values since the display was started / the filter was reset.

See Reset Triggers for details on the Reset Trigger and Reset Source options.

Average Since Reset

Outputs the average value of valid input values since the display was started / the filter was reset.

See Reset Triggers for details on the Reset Trigger and Reset Source options.

Value Reject

Rejects any input values that are below Minimum or above Maximum.

If out of range inputs are received then the value is not passed on to derived outputs or gauges.

Rate Reject

A filter that limits the rate of change of the input channel.

Data that changes faster than the rate limit is discarded. Called ‘Rate Filter’ in prior versions.

Rolling Minimum / Rolling Maximum / Rolling Average

Outputs the minimum/maximum/average value of the input value over a time window.

Update Period [ms]

Frequency at which the filter is calculated and will produce a value.

Increasing the update period will reduce memory requirements since the display must store less samples in the given time window.

Rolling Period [ms]

Range over which the rolling function is calculated (the window size).

Avoid excessively large windows with short update periods as these will require large amounts of memory in the display.

If the memory required for the window exceeds available resources, then the display setup may not function correctly.

Sample And Hold (Resample)

A filter that takes a single channel value sample and outputs that value for a predetermined time, before another sample is taken and output.

S&H Update Period [ms]

Frequency at which the input value is resampled.

Input Timeout Fallback

A filter that watches to see if an input channel is still being updated and if not, then a default value is sent in it’s place.

Typically used to define a replacement channel value when a CAN channel ceases to arrive as expected rather than just showing the last CAN value received.

Fallback Value

Value to output if the input times-out.

Timeout Value

Timeout, in milliseconds. If no value received after this period, the fallback value will be shown.

Error Text

Checks if a value is out of range to produce error text when in the out of range condition.

Comparison Value

Value for logic comparison with the input value (NOT Error Input).

Comparator

Logical comparison operator for comparing input value with the input value, as in:

'input value' <comparator> <comparison value>

e.g.

'input value' < 5

Error Text Option

Text that should be output to gauges if the error condition is active.

Error Input

Input channel that if non-zero, shall be used to put the channel into the error condition.

If an Error Input and a condition are specified then the result is the logical OR of the two conditions.

Reset Triggers

Many filters offer a Reset Trigger. This is specified in conjunction with a Reset Source.

Reset Source

Input Channel to reset the filter. The Reset Trigger option specifies how the Reset Source value is interpreted.

Reset Trigger

Select the condition under which the Reset Source should trigger a reset of the filter.

Any Edge

Any change in value of Reset Source shall reset the filer.

Falling Edge

Reset the filter when Reset Source reduces in value.

Rising Edge

Reset the filter when Reset Source increases in value.

Level: OFF

Reset the filter when Reset Source is zero.

Level: ON

Reset the filter when Reset Source is not zero.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Freeze Channel

Overview

Outputs the Primary Input value as-is. In response to start/stop events, the output is be held at the input value when the freeze state was entered.

This is useful for example when freezing values at stage end in rallying.

Freeze Channel Editor Freeze Channel Editor

Events

Start

Click the link to select an event that should put the channel into the freeze state.

Stop

Click the link to select an event that should take the channel out of the freeze state.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Fuel Channel

Overview

Fuel used trip meter - outputs the amount of a resource (e.g. fuel) used / remaining.

The Primary Input value is an absolute value of the used resource.

Effectively the Fuel Channel outputs the change in value since the first value is received or since a reset event.

Fuel Channel Editor Fuel Channel Editor

Options

Fuel Level

Count down from the initial value to zero.

Fuel Used

Count up from the initial value.

Reset Value

If not checked then the reset value will be the initial input value.

Triggers

Reset

Configurable event to reset to the initial value or, if specified, the reset value.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 No
LDS35_L No
CD6-43 Yes
GLW-43 Yes

Function (Lookup Table) Channel

Overview

Function tables are used for non-linear scaling; they ’look up’ the value of the ‘Primary Input’ in the table and result in the corresponding output value.

Function Channel Editor Function Channel Editor

Settings

Interpolate

If the input falls between two values, linear interpolation is used to derive the output value.

Otherwise, the output will be stepped. This can be useful for resistive ladder type switches for e.g. page selector inputs.

Signed

If ‘signed’ is checked then raw input values are treated as twos-complement numbers.

Table Values

Editing

Enter values into the table by typing. There is an empty row at the end of the table for adding new values.

Rows may be inserted between other rows by selecting ‘Insert’ from the context menu (right-click on the grid).

The Add and Delete buttons to the bottom right of the table may be used to add or remove rows.

Tip

Use the TAB key and Shift-TAB to navigate between the table editor cells using the keyboard.

Clipboard

Table values may be copied to / pasted from the clipboard in a spreadsheet compatible format. Right-click on the grid to show the context menu and select copy/paste.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

If Channel

Overview

The If Channel uses two inputs. It passes the specified input through to the output if the conditional input is true non-zero.

If Channel Editor If Channel Editor

Options

Value

The Primary Input, the value to pass through if the Condition input is non-zero.

Condition

An input channel that if non-zero allows the primary input value to be passed on to any derived outputs or gauges.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Integrator Channel

Overview

Integrator channels perform integration of the Primary Input, with respect to time (in seconds) to produce an output.

For example, it can be used to produce a distance output from a speed input.

Integration is effectively the area under a graph of the Primary Input on the y-axis plotted against time, in seconds, on the x-axis.

Integrator Channel Editor Integrator Channel Editor

Primary Input Requirements

Integrator Channels require the Primary Input to be a rate per second (e.g. [m/s] or [m/s/s]).

Input units may be specified on the channel to ensure that an appropriate units conversion is made if the Primary Input is not with respect to seconds.

For example, if Primary Input is in units of [rpm], the input units could be set to [rps] to convert to revolutions per second for correct integration, producing a value of ‘revolutions’.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Linear (Scalar) Channel

Overview

This is one of the most commonly used channel types. The channel is scaled using a linear scaling equation y = mx + c - i.e a multiplier and offset.

Linear (Scalar) Channel Editor Linear (Scalar) Channel Editor

Settings

Scalar

The multiplier value (m in y = mx + c).

Offset

Added to the value after applying the multiplier (c in y = mx + c).

Signed

If ‘signed’ is checked then raw input values are treated as twos-complement numbers.

Reciprocal

If ‘reciprocal’ is checked then the scaling equation takes the form y = (1 / x) * scalar + offset. If the input value is zero then the result will be the special floating point value NaN (Not a Number).

Graph

The graph shows the scaling relationship.

Minimum

Sets the minimum value to show on the X-axis of the graph. This has no effect on the setup when running on the display.

Maximum

Sets the maximum value to show on the X-axis of the graph. This has no effect on the setup when running on the display.

Calculation from Reference Values

If a pair of reference values for input vs output are available (e.g. from a sensor data-sheet), click the Calculate button (Calculate) and enter in the values. Clicking OK will compute the scalar and offset required to fit the pair of points.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Maths Channel

Overview

Maths channels can be used to calculate values from one or more inputs using arithmetic and functions.

The equation entered for a maths channel is referred to as a ‘script’.

Maths Channel Editor Maths Channel Editor

Script Entry

Type in the Maths Function area to enter in your script.

Tip

Press Ctrl-Space in the script editor to show function / constant autocomplete.

Below the script entry area, any errors in the script will be shown.

Above the script area are buttons for inserting channels, functions, operators and constants.

Whilst it is generally quicker to type scripts in by hand, the buttons offer a reminder of what’s available.

Input Variables

Input variables may be specified in maths scripts in the form $N where N is a number, e.g. $1 or $5. Up to 64 input variables may be specified.

If input variables are used then the inputs may be selected underneath the script entry area.

For example, to multiply two input variables together, you could write:

$1 * $2

Inline Channels

As an alternative to Input variables, channels can be specified directly in maths scripts using the channel name in single quotation marks.

e.g.

'Analog 01'

When typing a single quote character in the script editor, a list of channels will be shown for auto-completion.

Comments

Comments can be inserted in scripts and start with a # character. They continue to the end of the line. Scripts may span over multiple lines.

# This is a comment

Operators

Operator Precedence Description
() 1 Parenthesis for grouping expressions, e.g. ('x' + 'y') * 4
** 2 Exponentiation (x ** y => xy)
* 3 Multiplication
/ 3 Division
% 3 Modulo (remainder of integer division)
+ 4 Addition
- 4 Subtraction

As with normal algebra, multiplication of terms takes precedence over addition and will be applied first. If the precedence is not clear, it is recommended to group expressions using parenthesis.

e.g. in the expression:

1 + 2 * 3 # Multiplication takes precedence over addition so 2 is multiplied by 3 before adding 1.

Operators at the same level of precedence are evaluated left-to-right.

Constants

Function Description
E Eulers number e, 2.718281…
PI Pi (Ď€), 3.141592…
PHI Golden Ratio, Phi (φ), 1.618033…
true Boolean 1.
false Boolean 0.

Functions

Function Description
abs(x) Returns the absolute value of ‘x’,
exp(x) Returns the natural exponential of ‘x’, ex.
log10(x) Returns the base 10 logarithm of ‘x’.
ln(x) Returns the natural (base e) logarithm of ‘x’.
min(x1, x2 …xN) Returns the minimum value of x1…xN.
max(x1, x2 …xN) Returns the maximum value of x1…xN.
pow(x, y) Returns x raised to the power of y; xy.
sgn(x) Returns the 1 if ‘x’ is positive, -1 if ‘x’ is negative and 0 if ‘x’ is zero.
sqr(x) Returns the square of ‘x’.
sqrt(x) Returns the square root of ‘x’.

Trigonometric Functions

Function Description
acos(x) Returns the arc-cosine (inverse cosine) of ‘x’, in radians.
asin(x) Returns the arc-sine (inverse sine) of ‘x’, in radians.
atan(x) Returns the arc-tangent (inverse tangent) of ‘x’, in radians.
cos(x) Returns the cosine of ‘x’ (in radians).
sin(x) Returns the sine of ‘x’ (in radians).
tan(x) Returns the tangent of ‘x’ (in radians).

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

On Change Channel

Overview

On Change Channels are used to monitor multiple input channels for changes.

If any of the input channels change, the value of the On Change output changes from 0 to 1.

This is useful for example, for monitoring mode switches; when one of the modes changes, the On Change output can be used as an event to trigger a jump to a page showing more information about the changing mode.

On Change Channel Editor On Change Channel Editor

Options

Revert if no change after [s]

Once triggered, the On Change Revert shall be triggered after the Revert timeout has elapsed.

Initial delay after power on [s]

Following a power-up or system reset, the Initial Delay prevents the On Change channel from producing a value.

Remarks

When an On Change output is created, a hidden On Change Revert channel is created using the name of the On Change output with a _Revert suffix. This output is a logical not of the On Change channel and can be used to revert back to the original screen once the output has stopped changing.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Sensor Library Channel

Overview

Sensor Library Channels provide a library of sensor types that may be selected from.

Info

The sensor library channel will only be available if a sensors.library file is installed in the application’s program files directory.

Sensor Library Channel Editor Sensor Library Channel Editor

Sensor Selection

Select a category from the drop-down box and the list of sensors will be filtered according to type (e.g. Pressure or RPM).

Select a sensor in the Sensor List to apply the scaling.

To the right of the sensor list, a description of the sensor will be shown, if available in the library.

Sensor Library File

The sensors.library file can be provided in XML format:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<sensor_library>
    <scalar category="Pressure" name="Type 1" multipler="3.5" offset="-1" input_units="voltage:V" units="pressure:psi">
        <notes><v:long_varstr>
            <!-- HTML description -->
        </v:long_varstr></notes>
    </scalar>
    <scalar category="Pressure" name="Type 2" multipler="2.5" offset="-0.5" input_units="voltage:V" units="pressure:psi">
        <notes><v:long_varstr>
            <!-- HTML description -->
        </v:long_varstr></notes>
    </scalar>

    <function category="AFR" name="AFR Gauge Type 1" input_units="voltage:V" units="afr:LA"> 
    <notes><v:long_varstr>
        <!-- HTML description -->
    </v:long_varstr></notes>
    <ft_iopair fti_double="0.00" fto_double="0.6"/>
    <ft_iopair fti_double="2.00" fto_double="1.0"/>
    <ft_iopair fti_double="3.00" fto_double="1.1"/>
    <ft_iopair fti_double="4.00" fto_double="1.2"/>
    <ft_iopair fti_double="5.00" fto_double="1.4"/>
  </function>
</sensor_library>

Text Channel

Overview

Text Channels look-up a textual representation for a given input value.

If the input has distinct values for each possible text value (i.e. an enumeration) then a list of value => text may be specified.

If the input has multiple bits to indicate active states then a set of masks with priority may be specified (Advanced Mode).

Text Channel Editor Text Channel Editor

Adding / Removing Items

Use the Add and Delete buttons to the bottom right of the list to add or remove rows.

There is also a blank row at the end of the list - entering values in the blank row will append a new entry.

The order of items may be adjusted with the Up and Down buttons.

Advanced Mode

Text Channel Editor Text Channel Editor

In advanced mode, the list has 3 columns:

Bitmask

Value to mask (logical AND) with the input and if all the bits are set then the item is active.

Priority

If any items are active then the one with the ‘highest’ priority shall be shown. Lower numbers have a higher priority (e.g. Priority 0 overrides Priority 1).

Text

The text to display if the item is active.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Toggle Channel

Overview

Toggle Channels switch between 0 and 1 when a toggle event is received.

For example, it can be used to toggle the display between operating in MPH and KPH in response to a button push.

Toggle Channel Editor Toggle Channel Editor

Options

Initial State

The initial output value of the channel before any toggle events have been received.

Triggers

Toggle

Click on the link to select an event that should cause the Toggle Channel to change state.

Supported By Displays

DisplaySupported?
CD34 Yes
LDS4 Yes
CD32 Yes
LDS35 Yes
LDS35_L Yes
CD6-43 Yes
GLW-43 Yes

Logic Channels Tab

Overview

The Logic Channels Tab provides configuration of logic (conditional) channels in the display.

The output from a Logic Channel is either zero or one.

Logic Channels may be used to implement alarms. An output of one indicates that the alarm has been triggered (the condition is true), zero indicates no alarm has been triggered (the condition is false).

Logic Channels Tab Logic Channels Tab

Conditions

Each row of the grid defines a logical operation that will return true (1) or false (0). When evaluating the alarm output, the display combines the result of the current line and carries it forward to the next line. Lines can be added or removed with the Add or Delete buttons.

In the above example, the logic channel will output 1 if “Bat Alarm > 0” OR ‘Coolant Alarm > 0’.

The channel can be renamed using the Channel Name box.

Delay Before Trigger

The Delay Before Trigger value adds a delay after display power on before the alarm is processed. This is useful when using logic channels for triggering page changes as it can be used to prevent erroneous page triggers when ECUs broadcast default values whilst initialising.

Retrigger After

The Retrigger After value specifies a timeout in seconds after which the alarm (if still triggered) will toggle to un-triggered and back to triggered. This is useful for when an logic channel has been used to trigger a page change, usually showing a warning to the driver, for example, low oil pressure. The driver can select the standard page again to cancel the alarm. If the oil pressure is still low after the specified period, then the warning page will be shown again.

If the Retrigger value is set to zero, then the alarm will only retrigger if the input conditions change to false and back to true again.

Notifications Tab

Overview

The Notifications Tab provides configuration of text-based notifications in response to conditions such as alarms.

Notifications Tab Notifications Tab

Channel Name

The Notification Channel name can be changed in the Channel Name box.

Messages

The Messages table lists the individual messages that make up this Notification Channel. There must be at least one entry. To add or delete entries, use the Add/Delete buttons.

The table has the following columns:

Column Name Description
Warning Input Specifies the input used to trigger this warning. If the value of the output is non-zero, the associated warning message will be displayed. Typically it is an output defined with an alarm sensor.
Warning Label Is the text to display when the warning is active. When an ‘@’ symbol is inserted into the warning label a formatted input value from the Label Input replaces it in the display.
Label Input Specifies the output to be used for the value in the ‘@’ position if required.
Label Input Format Specifies the format of the value from the Label Input if required. For full details on value formatting, see Value Formatting in the gauge reference section.

If all the inputs are zero, the output text is empty. If only one input is non-zero, the appropriate warning is displayed. If multiple inputs are non-zero, the active messages are displayed in turn, with each one being displayed for around a second.

The On Time, Off Time and Min On Time can be used to affect how the warning is displayed when only one warning is active and are scaled in milliseconds. For example, to have a single message flash at 2Hz, set the On Time to 1.0 and the Off Time to 1.0. Setting the Off Time to 0 disables flashing.

The Min On Time can be used to ensure a warning is visible even if it is only briefly triggered.

For example, a low oil pressure alarm triggered during cornering may only occur for a fraction of a second but by setting the Min On Time to 2.0 ensures that the message is displayed for 2 seconds and so is more likely to be seen.

Timers Tab

Overview

The Timers Tab provides configuration of various types of timers.

Timers Tab Timers Tab

Timer Types

Performance Timer

Performance Timers provide a convenient way to configure timers that measure the time elapsed over a range, typically distances or speeds. For example, time over 1km or 0…60mph or 60…100mph etc.

Use the Quick Setup Quick Setup button to easily configure distance or speed range timers.

Distance based Performance Timers will typically use a speed input and numerically integrate the speed to give distance for the stop condition limit. Integration is performed with respect to time; speed channels should have units of d/s, where d is a distance unit (e.g. km/s or mi/s) - integration will then result in a value with units d.

Integration uses the trapezoidal rule and the stop time is interpolated between the samples between which the stop condition became true.

Performance Timer Events

Event Description
Reset Resets the performance timer to 0, any integrated values will also be reset to 0.

Stopwatch

A timer that may be started / stopped / reset by the event system. Stopwatch timers are reset to 0 and count up from there.

Stopwatch Events

Event Description
Start Starts the stopwatch timer. The timer shall continue counting from its current internal value.
Stop Stops the stopwatch timer. The value shall be held until reset.
Reset Resets the stopwatch to 0
Stop Until Reset Stops the stopwatch. If this event is received then the stopwatch must receive a Reset event before it may be restarted.
Toggle Starts the timer if currently stopped, otherwise stops the timer. Can be useful for manual start/stop buttons.

Count Down

Count Down timers start at a editable starting time, Initial Value, and count down from there until 0 is reached.

As with Stopwatch timers, Count Down timers are controlled by the events system.

The starting time may be adjusted by increase / decrease events. This can be useful for implementing a count down timer configuration page on the display. If hardware buttons are available then when on the timer configuration page, the buttons can be routed to the timer using the events system. See also Events Tab .

Count Down Timer Events

Event Description
Start Starts the stopwatch timer. The timer shall continue counting from its current internal value.
Stop Stops the stopwatch timer. The value shall be held until reset.
Reset Resets the stopwatch to 0
Toggle Starts the timer if currently stopped, otherwise stops the timer. Can be useful for manual start/stop buttons.
Increase Increases the Initial Value by Adjust Delta [s]
Decrease Decreases the Initial Value by Adjust Delta [s]

CAN Tab

Overview

The CAN Tab provides configuration of CAN channels and, if supported by the display, CAN message transmission (CAN Tx).

There are further sub-tabs within the CAN Tab:

CAN Tab CAN Tab

Subsections of CAN Tab

CAN Signal Database (DBC) Import

Overview

Many ECUs and modules are provided with a Signal Database (DBC) file which defines the CAN IDs and scaling factors that are output by nodes (e.g. ECUs) on the CAN network.

Tip

GEMS GWv4 software can generate a dbc file for the CAN telemetry output for any GEMS CAN enabled ECU.

Dash Design supports importing DBC files and this greatly simplifies the initial setup of the display. As well as importing the CAN ID, start bit, length etc for each channel, it also imports scaling factors and creates the outputs required for use by any of the display gauges.

DBC Import Process

To import a DBC file into the current setup, click the Import… button in the CAN Receive editor.

Import Button Import Button
Import Button Import Button

Select “Import CAN/DBC…” to add to the current list of signals.

Select the DBC file to open from the file dialog. The DBC Import dialog will then be shown:

DBC Import Dialog DBC Import Dialog

The dialog shows a tree view with the network name as the parent.

Below this is a list of nodes on the network - in the above example, there is only one node, “GDI80”.

Below this is a list of messages with their IDs (eg “CTele1_M1 (0x4A9)”). If the message list is expanded, a list of the signals or channels on this message is shown (eg “Engine_Speed”, “Coolant” etc).

Any item with a tick next to it will be imported.

By default, everything is selected to be imported. If there are some signals, messages or nodes that are not needed, unchecking these items will prevent them from being imported.

DBC Import Conflicts

Clicking the Import button imports the data. If there are any conflicts (i.e. duplicates between the DBC file and the current setup), the DBC conflict window will be shown:

Resolve Duplicates Resolution Dialog Resolve Duplicates Resolution Dialog

This shows the data for which there is a conflict and presents options to Replace, Keep (Rename), Skip or Cancel. By ticking the “Apply to all” box, any further duplicates will be treated in the same way without additional user interaction.

One the import has completed, the setup will include the new CAN channels with the signal name from the DBC file.

If the signal defines a text table for the various values of the signal, the signal table will display ‘Text’ in the Conversion column.

If the signal has a comment in the DBC file then this will be imported and the signal will have an information icon. Hovering over the signal will reveal the comment in a tool-tip.

To avoid conflict resolution when re-importing a DBC file, select “Replace CAN/DBC…” to replace signals by default.

CAN Bus Configuration

Overview

The CAN (Controller Area Network) bus is a bus standard designed to allow devices to communicate with each other on a vehicle network. ECUs typically send data on specific CAN messages. Each CAN message has an ID (either 11 bits long or 29 bits long for extended identifiers) and consists of up to 8 bytes (64 bits) of data. By monitoring the CAN bus for specific message IDs, the display can receive and display data from the other ECUs.

For displays that support it, CAN-FD offers higher data rates and larger message sizes.

CAN Port Configuration

Configure the CAN port on the CAN Receive Tab , CAN Request Tab or CAN Transmit Tab .

The CAN port configuration options can vary depending upon whether the display supports CAN-FD.

CAN Port Configuration CAN Port Configuration

CAN Port Configuration

CAN-FD Port Configuration CAN-FD Port Configuration

CAN-FD Port Configuration

When CAN-FD is enabled, the data bitrate may also be specified.

Bit Rate (Bus Speed)

A CAN network can run at various bit rates; however, all ECUs on a network must run at the same bit rate.

The display CAN bus speed must match that of the connected device for the CAN to work. To set the bus speed, select the required speed from the drop down list on the CAN Receive Tab , CAN Request Tab or CAN Transmit Tab .

CAN-FD Data Bit Rate

For CAN-FD, an additional data bitrate may be specified. If set to ‘Disable CAN-FD’ then sending or receiving CAN-FD frames is disabled on the CAN Transceiver.

CAN-FD frames typically send the data payload with a higher bitrate to achieve higher bandwidth. While in theory this could be set as high as 8 Mbit/s, in practice this is rarely achievable and a lower speed such as 4 Mbit/s is recommended.

Termination Resistor

The CAN bus network must be terminated with 120 ohm load resistors at each end of the network. It is common for Engine Management Systems to have a load resistor fitted internally. Most displays have a software selectable load resistor that can be enabled in the setup if required; check the ‘Termination Resistor’ checkbox to enable it.

CAN Message Overview

Notation

There are many forms of notation for defining the position of data in a message.

Dash Design considers each data byte in a message to have the most significant bit on the left and the least significant bit on the right.

The bit layout of a CAN frame is as follows:

CAN Message Bit Numbering CAN Message Bit Numbering

CAN Message Bit Numbering

The CAN Message Layout view shows a visual representation of the layout of signals within a CAN message, which greatly simplifies the process of positioning signals.

Signals are extracted into data channels from CAN messages by specifying the start bit and bit-length of the data. The Start bit is specified as the least significant bit (lsb) of the least significant byte (LSB). For example, Byte 0 has a start bit of 0 and a length of 8. Byte 1 has a start bit of 8 and a length of 8 and so on. The least significant bit of a signal becomes the least significant bit in the extracted data channel.

Signal bit offsets need not be aligned to byte boundaries and can consist of less than 8 bits.

Byte Order (Endian) and Multi-byte data

When dealing with multi-byte data, there are two common ways of representing numbers:

  1. Little Endian (Intel) Format - The least significant byte occurs first.
  2. Big Endian (Motorola) Format - The most significant byte occurs first.

Because the start bit is specified as the least significant bit of the least significant byte, the byte order (endian) of the data affects the start bit. Consider a 16 bit number occupying the first two bytes of a message. In both cases, the length is 16 bits.

In Little Endian mode, the start bit is 0:

Little Endian Signal Layout Little Endian Signal Layout

Little Endian Signal Layout

In Big Endian mode, the start bit is 8:

Big Endian Signal Layout Big Endian Signal Layout

Big Endian Signal Layout

Note that lsb signifies Least Significant Bit and msb signifies Most Significant Bit. The arrow shows the direction from least significant data to most significant data.

Multiplexed CAN Data

Some ECUs send data in a multiplexed format. In this format, part of the message (often the first byte) is defined as the multiplexor. The other bytes in the message have different meanings depending on the value of the multiplexor.

For example, if the multiplexor is 0, Byte 1 could contain the current state of output 0 on a power management unit. If the multiplexor is 1, Byte 1 could contain the current state of output 1 and so on. In this way, ECUs that require transferring many parameters at a slow rate can do so with fewer message IDs, making it easier to manage the message IDs in the system as a whole.

Example Start Bits and Lengths for Common Data Types

The following table lists the start bit and length values for many common, byte aligned, data types and can be used a quick reference to simplify creating CAN setups.

The number following the value type indicates the position of the data within the 8 byte payload aligned to the size of the value type. For example, Byte 0 is on byte 0, Byte 1 on byte 1, Int16 0 is on bytes 0 & 1, Int16 1 is on bytes 2 & 3 etc.

The Byte order specifies LE for little endian and BE for big endian for multi-byte types.

Value Type Byte Order Start Bit Length Description
Byte 0 - 0 8 Byte 1
Byte 1 - 8 8 Byte 2
Byte 2 - 16 8 Byte 3
Byte 3 - 24 8 Byte 4
Byte 4 - 32 8 Byte 5
Byte 5 - 40 8 Byte 6
Byte 6 - 48 8 Byte 7
Byte 7 - 56 8 Byte 8
Int16 0 BE 8 16 Word 1 Big Endian
Int16 1 BE 24 16 Word 2 Big Endian
Int16 2 BE 40 16 Word 3 Big Endian
Int16 3 BE 56 16 Word 4 Big Endian
Int16 0 LE 0 16 Word 1 Little Endian
Int16 1 LE 16 16 Word 2 Little Endian
Int16 2 LE 32 16 Word 3 Little Endian
Int16 3 LE 48 16 Word 4 Little Endian
Int32 0 BE 24 32 Int 32, Byte 1 Big Endian
Int32 1 BE 56 32 Int 32, Byte 5 Big Endian
Int32 0 LE 0 32 Int 32, Byte 1 Little Endian
Int32 1 LE 32 32 Int 32, Byte 5 Little Endian
Int64 BE 56 64 Int 64 Big Endian
Int64 LE 0 64 Int 64 Little Endian
Float 0 BE 24 32 Float, Byte 1 Big Endian
Float 1 BE 56 32 Float, Byte 5 Big Endian
Float 0 LE 0 32 Float, Byte 1 Little Endian
Float 1 LE 32 32 Float, Byte 5 Little Endian
Double BE 56 64 Double Big Endian
Double LE 0 64 Double Little Endian

CAN Receive

Overview

The CAN Receive Tab provides configuration of channels received via CAN messages.

At the bottom of the tab are the CAN frames and signals, represented as a unified list.

To the right of the tab is a CAN message layout view.

CAN Tab CAN Tab

CAN Port

For displays with multiple CAN ports, the port may be selected via a drop-down box at the top-left of the tab. The signals table will only show signals configured for the selected port.

Differences to prior versions

CAN Receive setup differs from prior versions of the software and will automatically add a scaled ‘output’ channel for the CAN source, effectively combining the signal decoder and the scaling.

CAN channels will also be viible on the Channels Tab .

Signal Database (DBC) Import

Channels may be imported from Signal Database (.dbc) files using the Import… button. See CAN Signal Database (DBC) Import for further details on the import process.

It is not recommended to modify scaling after importing from a DBC file here - additional derived channels with different units / scaling may be added on the Channels Tab .

Adding or Removing Signals

Towards the bottom right of the Signals Table, use the Add button to add a new signal, and the Delete button to remove the selected signal(s).

New signals will copy some fields from the currently selected signal, such as the CAN ID.

Removing All Signals

Press the ‘Clear’ button to remove all CAN signals / messages from the selected CAN port.

Signals Table

The signals table lists all the CAN signals configured to be received on the selected CAN port.

The context menu (right click) provides a command to show the selected signal in the Channels Tab .

Signal

The name of the CAN source. Clicking on the header at the top of this column will sort the table by name.

If the signal was imported from a DBC file and a comment was specified then signal will have an information icon. Hovering over the signal will reveal the comment in a tool-tip.

Editing Multiple Signals

Multiple signals may be selected by holding down the Ctrl or Shift key while clicking on the signals.

Multiple selection allows editing of the selected signals collectively using the signals properties form to the right hand side of the view.

Some properties are not be available for editing in the properties form, for example channel scaling and filtering.

ID

The CAN ID. This is specified as the right most 11 bits of a 16 bit value or the right most 29 bits of a 32 bit value for extended IDs.

If the Show CAN IDs as Hexadecimal box is checked, the IDs are shown and entered as hexadecimal numbers with an 0x prefix. Otherwise, they are shown and edited as a decimal number.

Clicking on the header at the top of this column will sort the table by CAN ID.

If the number has 3 hexadecimal digits then it is a standard ID, if it has 8 hexadecimal digits then it is an extended ID.

When entering CAN IDs into this column, use the ‘S’/‘E’ button to switch between standard or extended.

Note that an extended ID with the same value as a standard ID is NOT the same message and will not receive messages of the other ID type.

FD

Makes this a CAN-FD message. In FD mode, higher start bit values are possible. CAN-FD enabled CAN ports only.

Start Bit

The start bit of the data. This is defined as the least significant bit of the least significant byte of the data. See CAN Message Overview for more information.

Length

The length of the data in bits.

Value Type

The type of the data. This can be one of the following values:

  • Signed Integer
  • Unsigned Integer
  • IEEE Float
  • IEEE Double

Byte Order

The byte order for multi-byte data. This can be either BE/Motorola (Big Endian) or LE/Intel (Little Endian). See CAN Message Overview for more information.

Multiplex

For non multiplexed data, this should be set to Off. Otherwise it can be set to Multiplexor if this value controls the multiplexing or a number (m=0, m=1, m=2 etc) which is the value of the Multiplexor at which this value is valid. See CAN Message Overview for more information.

Conversion

The conversion (scaling) type from the raw CAN data to a value or textual representation. Click the ‘…’ button to open a scaling editor.

Warning

If the signal was imported from a DBC file, and you want to change the scaling to a different unit then it is best to set the input units of the signal and a display unit or create a derived channel to rescale from the imported DBC values.

Scalar

Multiplier to convert from a raw signal value to a physical value.
Phys = (Raw * Scalar) + Offset.

Offset

Offset to convert from a raw signal value to a physical value (added to the value after multiplying). Phys = (Raw * Scalar) + Offset.

Reciprocal

Not commonly used but changes the scaling equation to Phys = (Raw / Scalar) + Offset.

Base Units

Units of the scaled physical value of this signal. To convert to other units, add a channel on the Channels Tab and select a unit conversion after setting the input to this CAN channel.

Initial Value

Sets the initial value of the CAN output. This is the raw value. For example, for a CAN output of RPM_Raw used in an output to create RPM with a x2 scalar, the raw value for 2000 RPM would be 1000. To clear the initial value, set this to ‘-’. When importing from a dbc file, the “GenSigStartValue” attribute will be used to set the initial value.

Filter / Timeout

Filters may be applied to the CAN channel here such as controlling the behaviour when messages stop being received or providing an ‘Error Text’ value.

Aliased Signals

Signals that share the same bits and are not multiplexed will show a different background colour in the ID, Start Bit and Length fields. This is allowed but normally a configuration error; the colouring is intended to assist in spotting such errors easily. See the Gear Posn signal in the above screenshot for an example.

CAN message layout view

Selecting a signal in the signals table will display all signals in the same CAN frame (signals with the same CAN ID) in this view.

The Multiplexor drop-down box will be enabled if it is a multiplexed frame and will allow selection of one of the configured multiplexor values. When selected, this will only display signals in the view that are present when the multiplexor signal has this value.

For CAN-FD frames, the zoom-bar to the right of the CAN message layout view allows zooming and scrolling of the message view.

CAN Request

Overview

The CAN Request Tab provides a way to send out fixed CAN messages at regular intervals or in response to another CAN message.

CAN Tab CAN Tab

Adding or Removing Messages

Towards the bottom right of the Messages Table, use the Add button to add a new message, and the Delete button to remove the selected messages(s).

CAN Transmit

Overview

The CAN Transmit Tab provides a way to send out CAN messages that contain values from channels or special values such as firmware version or setup name.

CAN Tab CAN Tab

Messages

Adding or Removing Messages

Towards the bottom right of the Messages Table, use the Add button to add a new message, and the Delete button to remove the selected messages(s).

Messages Table

Tx

Enables the message. IF unchecked then the message will not be sent by the display.

Message

Name of the message.

Rate

Rate at which the message is repeatedly sent.

ID

The CAN ID. This is specified as the right most 11 bits of a 16 bit value or the right most 29 bits of a 32 bit value for extended IDs.

If the Show CAN IDs as Hexadecimal box is checked, the IDs are shown and entered as hexadecimal numbers with an 0x prefix. Otherwise, they are shown and edited as a decimal number.

Clicking on the header at the top of this column will sort the table by CAN ID.

If the number has 3 hexadecimal digits then it is a standard ID, if it has 8 hexadecimal digits then it is an extended ID.

When entering CAN IDs into this column, use the ‘S’/‘E’ button to switch between standard or extended.

Note that an extended ID with the same value as a standard ID is NOT the same message and will not receive messages of the other ID type.

FD

Makes this a CAN-FD message. In FD mode, higher start bit values are possible. CAN-FD enabled CAN ports only.

BRS

For CAN-FD messages, sets the Bit Rate Select flag. CAN-FD enabled CAN ports only.

DLC

Specifies the Data Length Code of the channel, i.e. the size of the data packet of this ID in bytes. This can be anywhere between 0 and 8 bytes; by default it is set to the maximum size of 8 bytes. For CAN-FD messages this can go up to 64 bytes.

Wait For All

If the Wait For All column is ticked, then the CAN message will only be transmitted once all the inputs to the message (see below) are valid. Inputs such as analogue channels are valid immediately but for data coming via CAN or serial, the outputs are not valid until they have been received at least once.

If the Wait For All column is not ticked, then the message will be transmitted immediately; any sections of the message where the inputs are not valid will be zero.

Signals

Adding or Removing Signals

Towards the bottom right of the Signals Table, use the Add button to add a new signal, and the Delete button to remove the selected signal(s).

A message must be selected in the Messages Table to be able to add signals.

Signals Table

Channel

Channel that will be packed into the CAN signal.

Type

Data type and byte order for the raw signal value. The data type affects the size of the signal.

Some data types are special and do not require a channel (e.g. Display Serial Number).

Warning

When using a special data type such as Serial Number, some display firmware versions still require a Channel to be selected or the transmitted signal value will be zero.

Position

Byte position of the first byte in the CAN frame that the signal occupies

Scalar

Scalar used to convert the Physical Channel value to a raw value. This is specified as if converting from raw => physical.

Phys = (Raw * Scalar) + Offset

i.e. Raw = (Phys - Offset) / Scalar

Offset

Offset used to convert the Physical Channel value to a raw value. This is specified as if converting from raw => physical.

Units

Units of the Physical value. If the input channel uses different units then Dash Design will insert additional scaling to convert from the Channel units to the Physical units prior to applying the Scalar and Offset.

Tip

By specifying the expected physical units here, if the source channel units are subsequently changed then the scaling change will automatically be accounted for, so the transmitted data should still be of the correct magnitude.

Logger Tab

Overview

The Logger Tab provides configuration of internal data logging (if supported by the display).

Logger Tab Logger Tab

Start / Stop Conditions

The logging can be started or stopped dependent on channel conditions. Every time a new log is started, a new Log Run is created in the logger. Log runs can be downloaded individually with GEMS Data Analysis, which reduces the time taken to download the data.

The log can be started in one of three ways:

  • Single input start/stop - When the specified input is non zero, the log will be started. When zero, the log will be stopped.
  • Twin start/stop triggers - When the Start trigger is non zero, the log will be started. When the Stop trigger is non zero, the log will be stopped.
  • Log Always - The logging starts logging immediately on power on and will log until switched off or until the log is full.

Special Logger Channels

If the Display Module supports logging, the following special channels are available:

  • Log Mem Total - The total logging memory in kilobytes
  • Log Mem Free - The amount of logging memory remaining in kilobytes
  • Log Mem Percent Free - The percentage of logging memory free.
  • Log Status - A string representing the current logging status:

The Log Status has the following meaning:

Log Status Description
Logging not Supported This firmware does not support logging.
Logging stopped The device is not currently logging.
Logging running The device is currently logging.
Log looped The log has looped.
Log memory space low There is less than 5% of the log memory remaining.
Log memory full The logging memory is full and logging has stopped.
Log initialising The logger is currently processing the setup.
LOG SETUP ERROR There is a problem with the logger setup.
LOG OVERRUN The logger has been unable to write the log data to the memory. Either reduce the number of logged channels or reduce the complexity of the display screen.
Log memory worn There are a significant number of bad blocks in the flash memory. Logging will continue to work but capacity will be reduced.

Log Markers

The Display Module inserts markers in the data to indicate various states and these are displayed in downloaded log files.

The following markers may be inserted:

Marker Description
Lap This is inserted when the beacon input is triggered and is typically used for lap timing.
Power This is inserted when the display is configured to start logging immediately on power up.
Log Start This is inserted when the log start condition is met after power up
Overrun The display has been unable to write the log data to the memory in the time available. Either reduce the number of logged channels or reduce the complexity of the display screen.

Images Tab

Overview

The Images Tab provides management of image assets used by page designs (see Design Tab ).

Timers Tab Timers Tab

Image Properties

Selecting an image in the list on the left hand side will show the image full-size on the right, along with some additional information:

  • Filename: The original path of the image
  • Resolution: The size, in pixels of the image (Width x Height)
  • Size: The size of the image. This can be useful if optimizing the size of display setups.
  • Where Used: Shows which screens/pages are using the image.

Image Functions

  • Delete: Delete the selected image
  • Replace: Re-load an image in-place of the selected image. This will update any references to the image on any screens/pages it is used by.
  • Merge: If multiple images are selected then all references can be updated to use just one of them. From the popup, select which image should be kept.
  • Import Graphic: Add a new image to the list of image assets. This is also possible via in-place gauge editing on the Design Tab .
  • Export Graphic: Save the image to a separate file on disk.
  • Delete All Unused: Deletes any images that are not referenced. This will reduce setup file size and lead to faster programming and improved performance on the display.

Image Selectors Tab

Overview

The Image Selectors Tab provides configuration of images that can change in response to an input value channel.

Image Selectors Tab Image Selectors Tab

Input Channel

The Input Channel is used to select images from the table; its value is looked up against the Channel Value column in the table.

Self Test Duration

When the display starts, the Self Test Icon will be displayed for the specified duration, in seconds, unless set to zero.

Number of Graphics

The Number of Graphics selection count is the number of images used in the image selector and is at least two. The first image is shown by default. Subsequent images are shown according to the settings in the table.

Table Columns

Index

The number of the selection bitmap for which the following settings are made. For example, if the selection count is set to 3, 1 will specify the first selectable bitmap and 2 will specify the second selectable bitmap.

Value

When the Input Channel is equal to this value, this image is shown instead of the default image.

If checked, this image will blink according to the On Time and Off Time in seconds. The image swaps between the indexed image and the default image.

Enable Max Duration

If checked, the image is only be shown for the specified duration no matter how long the input is equal to the value.

Subsections of Setup Tab

Setup Name

Overview

The Setup Name allows a name for the setup file to be defined.

This name may be displayed in Gauges using the Setup Name special format, vz.

Additionally the setup name may be transmitted over CAN. See CAN Transmit .

Setup Tab Setup Tab

LEDs

Overview

LED setup varies between display types. Some displays only support rule-based configuration: LEDs (Rule Based) .

Other displays support a simpler channel-per-LED configuration.

Setup Tab Setup Tab

Options

Use Rule Based Setup

If available for the current display type, checking the Use Rule Based Setup allows complex LED patterns and rules to be specified.

See LEDs (Rule Based) for more details.

LED List

The LED List displays a fixed list of the LEDs available on the display.

Channels may be used to drive the LED, optionally with a limit and a colour.

For some displays, a flash channel may also be specified per LED (on/off). If activated, the LED will flash at the rate configured for the gauge as a whole.

Colour Channel

Channels may be used to select the colour of an LED. The colour selected by the channel value depends on the display type, but for current displays the following table is used:

Value Colour
0 Off
1 Red
2 Green
3 Blue
4 Orange
5 Magenta
6 Yellow
7 Cyan
8 White
9 Channel (Direct Drive)
10 Channel RGB111 (Direct Drive)

The RGB111 colour space is a 3-bit colour space with 1 bit per colour channel (Red, Green, Blue), meaning that input channels have a different colour mapping and should be in the range 0-7.

Shift Lights

Depending upon the display type, a shift light pattern may be generated.

To generate a typical shift light pattern, set a Channel, a Start value and an Increment value and then click the Calculate button to generate the pattern.

LEDs (Rule Based)

Overview

Rule based LED setups enable different LED configurations on different pages and complex LED patterns based upon a collection of rules.

Groups of rules may be defined that are active on a selection of pages.

Rules consist of an arbitrary list of conditions that each produce a pattern.

If multiple rules are active at the same time then they can be prioritised.

Active rules at the same priority level can be cycled through at an adjustable rate.

Setup Tab Setup Tab

Main View

The main view shows a tree of groups and conditions; groups and rules are added and removed here.

Use the Add Group Add Group to add a group.

Use the Add Rule Add Rule to add a rule to the selected Group.

Use the Delete Delete button to remove selected groups / rules. The All Screens Group may not be deleted.

Use the Edit Edit button to edit the selected group or rule.

Rules and groups may be moved using drag & drop.

Use the context menu (right-click) to duplicate existing rules.

Priority Group Cycle Time

The Priority Group Cycle Time sets the time period at which multiple active rules of the same priority level are switched between.

Active rules at a lower priority level than another active rule may still have some effect if the active rule has not masked LEDs used in the lower priority rule. See LED Mask.

Groups

Rules within a group are only processed when the screen(s) it is assigned to are shown.

There is a default pre-defined group ‘All Screens’ which is active on every screen.

Named groups may be added and assigned to a selection of screens.
For example, you may add ‘Driver’ and ‘Diagnostic’ groups and only activate these on screens used by drivers or mechanics, respectively.

Use the Edit Edit button to edit the selected group:

LED Group Editor LED Group Editor

LED Group Editor

Group Options

Name

Sets the name of the group to express its intent or the set of screens it is associated with (e.g. “Driver” or “Diagnostic”).

Screens List

A list of screens is presented for which the group will be enabled.

Screens may be selected using the Edit Edit button on the LED Group Editor.

Rules

Rules may be added to Groups and can be given names to express their intent (e.g. Shift Lights / Critical Fault).

Use the Edit Edit button to edit the selected rule:

LED Rule Editor LED Rule Editor

LED Rule Editor

Rule Options

LED Mask

Rules have an LED Mask. When a rule is active, the LED mask prevents any lower-priority rules from modifying the state of the LEDs that are set in the mask. In general it is best to set the mask to cover all the LEDs used by the various patterns in the rule. The mask may also cover unused LEDs that should not be lit by lower priority rules.

Priority

Higher priority numbers indicate a higher processing priority and are processed first by the display.

If multiple rules are active at a given priority level then the display will cycle through those rules at the rate specified by the Priority Group Cycle Time setting on the Main View.

Conditions List

Rules may contain multiple logical conditions that can each activate a different LED pattern (LED states). The conditions are processed in order, with subsequent conditions (if active) overwriting any LED states from the prior condition.

If any conditions are active within a rule, then the rule is considered ‘active’.

To the right of the conditions list are the condition properties.

Condition Properties

If multiple conditions are selected then the properties will act upon all of them.

Conditions may specify up to 2 channel comparisons, linked by a logical operator. If no comparators are selected then the condition is always active.

If a logical operator is not specified then only ‘Comparator A’ (if any) is evaluated.

Pattern

Defines an LED pattern to display when a condition is active.

Click the … button on the LED Pattern Picker to open the pattern editor:

LED Pattern Picker LED Pattern Picker

LED Pattern Picker

LED Pattern Editor LED Pattern Editor

LED Pattern Editor

The LED Pattern Editor lists all LEDs available for configuration.

A fixed colour may be selected for each LED. Alternatively if a ‘Colour Channel’ is selected then the colour may be controlled by the channel value.

If a flash rate is configured then the LED will alternate between ‘Colour’ (or Channel based colour) and ‘Flash Colour’ at the given rate.

Selecting multiple LEDs allows their properties to be set collectively.

Interpolated Patterns

If the Pattern Mode property is set to Interpolate for a LED condition, then a channel may be selected to interpolate the state of LEDs in the selected pattern. This can be used to create shift light patterns without manually entering multiple conditions, which would otherwise be a time consuming process for a common use-case.

Interpolation only occurs over LEDs that are not configured in the pattern (i.e. have their colour set to ‘OFF’ and do not have a Colour Channel).

‘Right to Left’ will cause interpolated patterns to start from the right hand side as the starting point.

‘From’ and ‘To’ define the input channel value that signifies the beginning and ending of the interpolation range for the input channel. When the input channel is equal to the lower limit then no LEDs in the pattern will be shown. When the input channel reaches the ‘To’ value then all LEDs will be shown in the pattern.

‘From’ and ‘To’ may be reversed where To > From, in which case more LEDs will be shown as the input value decreases.

Interpolation may be used in conjunction with conditions.

Bit Patterns

If the Pattern Mode property is set to Bit Pattern for a LED condition, then a channel may be selected who’s individual bits correspond to LEDs.

Each bit in the input channel will correspond to LEDs that have been assigned a colour in the LEDs property. The first LED with a colour (i.e. not set to OFF) will be bit 0 and the next enabled LED will be bit 1 etc.

‘Right to Left’ will cause bit patterns to start from the right hand side; thr right-most LED that has a colour defined will correspond to (bit 0) in the input channel.

Dash Design will create hidden Bitmask Channel s to drive each LED individually.

The input channel will be converted to an integer representation prior to masking; the display uses 64bit floating point for channel values internally, giving exact conversions for up to 52 bits.

Colour Channel

Channels may be used to select the colour of an LED. The colour selected by the channel value depends on the display type, but for current displays the following table is used:

Value Colour
0 Off
1 Red
2 Green
3 Blue
4 Orange
5 Magenta
6 Yellow
7 Cyan
8 White
9 Channel (Direct Drive)
10 Channel RGB111 (Direct Drive)

The RGB111 colour space is a 3-bit colour space with 1 bit per colour channel (Red, Green, Blue), meaning that input channels have a different colour mapping and should be in the range 0-7.

Speed / Odometer / Trip

Overview

The Speed / Odometer Tab provides configuration of a common Speed Input channel and the built-in Odometer function, along with trip setup features.

Speed / Odometer Setup Speed / Odometer Setup

Speed Setup

Select an input for the Speed Input channel. The Speed Input channel will output the same units of its input channel.

The vehicle speed is typically used in a number of places in display setups and Speed Input offers a single place to define the speed channel.

The channel being input to Speed Input is required to specify a speed unit so that correct physical unit conversions can be applied where needed.

If there is a misconfiguration here then the Setup Checker will issue a warning.

e.g.

Error Error: Speed Input source ‘Road Speed’ does not have units of speed.

Odometer Setup

The Odometer is an internal counter backed up to non-volatile memory that cannot be reset. It is set to zero when the unit is built.

Select an output that is road speed and has units of speed. Typically the predefined “Speed Input” channel will be used here and will be set by default.

The software will arrange to convert units to [km/s] for correct functioning of the odometer.

An predefined Odometer channel will be available which is scaled in km and can be displayed on the screen.

Trip Setup

Predefined trip related settings may be configured here.

Fuel Input

Fuel Input defines the input used to calculate total fuel, trip fuel and fuel used. The fuel input can either be a Fuel Level input (which decrements as fuel is used) or a Fuel Used input (which increments as the fuel is used).

Distance Input

Distance Input defines the input used to calculate trip distance and countdown distance. This should be in either km or miles.

Trip Options

Select a trip counter to configure from the drop-down box. The trip counters are all configured to use the common Fuel Input and Distance Input channels, where appropriate.

Distance Calibration Factor

Distance Calibration Factor defines the initial value of the distance calibration factor. All ‘co-driver’ distances are multiplied by the calibration before being displayed.

See also Calibration Factor Channel .

Countdown Distance

Countdown Distance Trip defines the initial and reset values of the countdown trip. See also Distance Countdown Channel .

Interval Distance / Total Distance Trip

Resolution defines the display resolution of these trip meters. See also Distance Trip Channel .

Fuel Total / Fuel Interval

Configure the fuel trip meters as-per Fuel Channel

Countdown Timer

Specify the initial (and reset) values for the countdown timer.

Also specify the amount the timer is incremented and decremented by during increment/ decrement events by setting the Delta value in seconds.

The events for controlling the Countdown Timer may be specified here.

See also Timers Tab .

Lap Timing / GPS

Overview

The Lap Timing / GPS Tab provides configuration of lap timing.

Lap Timing / GPS Setup Lap Timing / GPS Setup

Lap Timing Mode

Several pre-defined channels are automatically created if the Display Module supports lap timing. See Lap Timing Channels .

Beacon

In this mode, the beacon input is connected to a lap timing beacon receiver.

Standard

The lap timing outputs are updated as appropriate every time the beacon input is driven low.

AIM

If using an AIM beacon receiver, select AIM under Beacon Type.

AIM beacons have a slightly different output to other beacons; 3 pulses within 10ms must be received by the Display Module to register a beacon event.

Average Speed Setup

Input for average lap speed and predictive lap

Select a vehicle speed here. This will be set to the predefined Speed Input channel by default. Speed Input offers a single place to identify the speed channel and may be configured on the Speed / Odometer / Trip Setup page.

Use Speed Input here and set a common speed channel on the Speed / Odometer / Trip Setup page.

GPS Mode Setup

In this mode, a button (to ground) is connected to the beacon input.

Pressing the button (i.e. grounding the beacon input) for at least 500ms sets the location of the GPS Start/Finish line at the point the button was initially pressed, provided valid GPS data is being received by the display.

When the finish line is crossed again with the GPS Course within 90 degrees of the start finish line, a new lap is triggered.

For GPS mode to work, the outputs for GPS Longitude, GPS Latitude and GPS Course (all in degrees) must be specified together with the width of the track in metres. This should normally be a couple of metres wider than the actual track.

If using the serial input for GPS, these entries will be automatically populated.

The GPS Start/Finish position is stored between sessions and only changed when setting a new start/finish line.

Uploading a setup or uploading new firmware will reset the start/finish line.

If a speed input is specified, the average lap speed and predictive lap timing outputs will function.

Page Select

Overview

The Page Select Tab allows a channel to be selected to change the current screen (page).

Pages are numbered starting at 1 for the first page.

Page Select Setup Page Select Setup

Brightness

Overview

The Brightness Tab allows selection of a channel for controlling the screen brightness.

Brightness Setup Brightness Setup

Brightness Input Value

The display brightness can either be set coarsely or finely.

In either mode, the channel could be connected to one of the analogue inputs for example to use a rotary pot to control the brightness or it could be controlled from an ECU via the CAN bus.

Coarse Control (0…7)

The coarse control has eight brightness levels which can be selected by configuring a channel to produce a value in the range 0…7, with 7 being brightest. This mode is adequate for single seater/ steering wheel use where the display will be used in daylight conditions.

Note

Brightness levels 6 and 7 of the coarse mode brightness are over-driven for extra brightness but this results in a loss of image contrast.

Fine Control (129…191)

The fine control has 63 brightness levels which can be selected by configuring a channel to produce a value in the range 129…191 with 129 being the darkest, 191 the brightest and 160 the default brightness value.

Fixed Brightness

If a fixed brightness is required, create a maths output whose equation is the brightness number required and use this as the brightness output.

Monitored Channels

Overview

The Monitored Channels lists channels that should be processed even when not being used by any gauges on the current page.

Some special channels such as Calibration Factor Channel can be added to the monitor channels list to ensure that it is persisted during power-off of the display.

Normally a given output is only monitored if used by a gauge on the currently displayed screen. In certain circumstances however, it is necessary to monitor some outputs irrespective of whether or not they are used by the currently displayed screen page.

For example, if the maximum coolant temperature is used only by gauges (or derived outputs), switching screens deletes the output as the screen changes and recreates it if necessary. The maximum output is then be reset and its’ information is lost. By adding this output to the Monitored Channels it is created when the display module is switched on. Changing screens has no effect on the output and the data is not reset unless a reset signal is received.

Furthermore, outputs added to the Monitored Channels are automatically stored in non-volatile memory. The values of a min, max or average output added to the Monitored Channels are preserved even when the screen is powered off. Consequently, it is important to make sure a reset method is set for such channels added to the Monitored Channels.

Setup Tab Setup Tab

Adding / Removing channels

Use the Add and Delete buttons to the bottom right of the channel list to add or remove. Predefined channels may not be removed.

Low Side Drivers

Overview

The Low Side Drivers Tab allows configuration of electrical outputs from the display module.

Low side drivers (switched to ground) can be used to drive relays or other items that are connected to a positive supply.

Select an output to drive each low side driver available on the display - when the output is greater than zero, the output will be on.

Low Side Drivers Setup Low Side Drivers Setup

Events Tab

Overview

The Events Tab provides a single place to view and configure internal events.

Many events are configurable elsewhere at point of use, such as timer start/stop/reset events.

Events can be used to trigger an effect such as a screen change or trip reset.

Events Tab Events Tab

The Events Tab is divided into 3 columns:

Screen

Each screen may have a different set of events defined.

At the top of the list is the All Screens item for events that should be active on all screens.

If a screen has any events defined then it will display a lightning bolt Lightning Bolt icon.

At the bottom of the Screen List, the Show Unused Screens checkbox may be used to show / filter out any screens that are not configured with any Gauges.

Action

The Action column lists available on the selected screen.

Action Types

The following types of event actions are available:

  • Buttons - The button inputs on the display can generate the following actions:
    • Click - Triggered when the button is pressed.
    • Long Click - Triggered when the button is pressed for 2 seconds.
    • Hold - Triggered when the button is pressed for more than 1 second. Once in hold mode, the button generates 20 hold events per second. This is useful for rapidly increasing or decreasing numbers.
  • Logic / Alarms - Any logic channels created in the main setup are available to trigger an event. The event is triggered when the channel changes from 0 to 1.
  • On Change - Any on change outputs created in the main setup are available to trigger an event. Two actions are created for each on change output:
    • The On Change action occurs when values monitored by the on change output start changing.
    • The On Change Revert action occurs when values monitored by the on change output stop changing.
  • Stopwatch Trigger

Effect

The Effect column lists any effects that should happen in response to an event.

On the right of the Effect list, use the Add button to add a new effect, and the Delete button to remove the selected effect(s).

Adding an Effect

If the Add button is clicked, a list of available effects may be selected from to add to the list of effects for the selected action on the selected screen.

Automation

Overview

Dash Design may be externally automated.

A COM (ActiveX) automation interface is available, documentation on request.

Open Source Licenses

Dash Design has been created using some excellent Open Source libraries - many thanks to their developers for creating and maintaining them.

The open source library licenses are included here and also in the installation folder for the application, accessible from Help | About | View Licenses.

Subsections of Open Source Licenses

boost

LICENSE_1_0.txt

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

bzip2

LICENSE


--------------------------------------------------------------------------

This program, "bzip2", the associated library "libbzip2", and all
documentation, are copyright (C) 1996-2019 Julian R Seward.  All
rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.

2. The origin of this software must not be misrepresented; you must 
   not claim that you wrote the original software.  If you use this 
   software in a product, an acknowledgment in the product 
   documentation would be appreciated but is not required.

3. Altered source versions must be plainly marked as such, and must
   not be misrepresented as being the original software.

4. The name of the author may not be used to endorse or promote 
   products derived from this software without specific prior written 
   permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Julian Seward, jseward@acm.org
bzip2/libbzip2 version 1.0.8 of 13 July 2019

--------------------------------------------------------------------------

CrashRpt

LICENSE

Copyright (c) 2003, Michael Carruth
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, 
are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this 
      list of conditions and the following disclaimer.

    * Redistributions in binary form must reproduce the above copyright notice, 
      this list of conditions and the following disclaimer in the documentation 
      and/or other materials provided with the distribution.

    * Neither the name of the author nor the names of its contributors 
      may be used to endorse or promote products derived from this software without 
      specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

cryptopp

License.txt

Compilation Copyright (c) 1995-2019 by Wei Dai.  All rights reserved.
This copyright applies only to this software distribution package
as a compilation, and does not imply a copyright on any particular
file in the package.

All individual files in this compilation are placed in the public domain by
Wei Dai and other contributors.

I would like to thank the following authors for placing their works into
the public domain:

Joan Daemen - 3way.cpp
Leonard Janke - cast.cpp, seal.cpp
Steve Reid - cast.cpp
Phil Karn - des.cpp
Andrew M. Kuchling - md2.cpp, md4.cpp
Colin Plumb - md5.cpp
Seal Woods - rc6.cpp
Chris Morgan - rijndael.cpp
Paulo Baretto - rijndael.cpp, skipjack.cpp, square.cpp
Richard De Moliner - safer.cpp
Matthew Skala - twofish.cpp
Kevin Springle - camellia.cpp, shacal2.cpp, ttmac.cpp, whrlpool.cpp, ripemd.cpp
Ronny Van Keer - sha3.cpp
Aumasson, Neves, Wilcox-O'Hearn and Winnerlein - blake2.cpp, blake2b_simd.cpp, blake2s_simd.cpp
Aaram Yun - aria.cpp, aria_simd.cpp
Han Lulu, Markku-Juhani O. Saarinen - sm4.cpp sm4_simd.cpp
Daniel J. Bernstein, Jack Lloyd - chacha.cpp, chacha_simd.cpp, chacha_avx.cpp
Andrew Moon - ed25519, x25519, donna_32.cpp, donna_64.cpp, donna_sse.cpp

The Crypto++ Library uses portions of Andy Polyakov's CRYPTOGAMS for Poly1305
scalar multiplication and aes_armv4.S. CRYPTOGAMS is dual licensed with a
permissive BSD-style license. The CRYPTOGAMS license is reproduced below.

The Crypto++ Library uses portions of Jack Lloyd's Botan for ChaCha SSE2 and
AVX. Botan placed the code in public domain for Crypto++ to use.

The Crypto++ Library (as a compilation) is currently licensed under the Boost
Software License 1.0 (http://www.boost.org/users/license.html).

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

CRYPTOGAMS License

Copyright (c) 2006-2017, CRYPTOGAMS by 
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

* Redistributions of source code must retain copyright notices,
  this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
  copyright notice, this list of conditions and the following
  disclaimer in the documentation and/or other materials
  provided with the distribution.
* Neither the name of the CRYPTOGAMS nor the names of its copyright
  holder and contributors may be used to endorse or promote products
  derived from this software without specific prior written permission.

FontNameLibrary

LICENSE

Font Name Library 1.0.0

Copyright (c) 2009 Wong Shao Voon

The Code Project Open License (CPOL)
http://www.codeproject.com/info/cpol10.aspx

Preamble
This License governs Your use of the Work. This License is intended to allow developers to use the Source Code and Executable Files provided as part of the Work in any application in any form.

The main points subject to the terms of the License are:

Source Code and Executable Files can be used in commercial applications;
Source Code and Executable Files can be redistributed; and
Source Code can be modified to create derivative works.
No claim of suitability, guarantee, or any warranty whatsoever is provided. The software is provided "as-is".
The Article(s) accompanying the Work may not be distributed or republished without the Author's consent
This License is entered between You, the individual or other entity reading or otherwise making use of the Work licensed pursuant to this License and the individual or other entity which offers the Work under the terms of this License ("Author").

License
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.

BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK.

Definitions.
"Articles" means, collectively, all articles written by Author which describes how the Source Code and Executable Files for the Work may be used by a user.
"Author" means the individual or entity that offers the Work under the terms of this License.
"Derivative Work" means a work based upon the Work or upon the Work and other pre-existing works.
"Executable Files" refer to the executables, binary files, configuration and any required data files included in the Work.
"Publisher" means the provider of the website, magazine, CD-ROM, DVD or other medium from or by which the Work is obtained by You.
"Source Code" refers to the collection of source code and configuration files used to create the Executable Files.
"Standard Version" refers to such a Work if it has not been modified, or has been modified in accordance with the consent of the Author, such consent being in the full discretion of the Author.
"Work" refers to the collection of files distributed by the Publisher, including the Source Code, Executable Files, binaries, data files, documentation, whitepapers and the Articles.
"You" is you, an individual or entity wishing to use the Work and exercise your rights under this License.
Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, limit, or restrict any rights arising from fair use, fair dealing, first sale or other limitations on the exclusive rights of the copyright owner under copyright law or other applicable laws.
License Grant. Subject to the terms and conditions of this License, the Author hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
You may use the standard version of the Source Code or Executable Files in Your own applications.
You may apply bug fixes, portability fixes and other modifications obtained from the Public Domain or from the Author. A Work modified in such a way shall still be considered the standard version and will be subject to this License.
You may otherwise modify Your copy of this Work (excluding the Articles) in any way to create a Derivative Work, provided that You insert a prominent notice in each changed file stating how, when and where You changed that file.
You may distribute the standard version of the Executable Files and Source Code or Derivative Work in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution.
The Articles discussing the Work published in any form by the author may not be distributed or republished without the Author's consent. The author retains copyright to any such Articles. You may use the Executable Files and Source Code pursuant to this License but you may not repost or republish or otherwise distribute or make available the Articles, without the prior written consent of the Author.
Any subroutines or modules supplied by You and linked into the Source Code or Executable Files of this Work shall not be considered part of this Work and will not be subject to the terms of this License.
Patent License. Subject to the terms and conditions of this License, each Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, import, and otherwise transfer the Work.
Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
You agree not to remove any of the original copyright, patent, trademark, and attribution notices and associated disclaimers that may appear in the Source Code or Executable Files.
You agree not to advertise or in any way imply that this Work is a product of Your own.
The name of the Author may not be used to endorse or promote products derived from the Work without the prior written consent of the Author.
You agree not to sell, lease, or rent any part of the Work. This does not restrict you from including the Work or any part of the Work inside a larger software distribution that itself is being sold. The Work by itself, though, cannot be sold, leased or rented.
You may distribute the Executable Files and Source Code only under the terms of this License, and You must include a copy of, or the Uniform Resource Identifier for, this License with every copy of the Executable Files or Source Code You distribute and ensure that anyone receiving such Executable Files and Source Code agrees that the terms of this License apply to such Executable Files and/or Source Code. You may not offer or impose any terms on the Work that alter or restrict the terms of this License or the recipients' exercise of the rights granted hereunder. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties. You may not distribute the Executable Files or Source Code with any technological measures that control access or use of the Work in a manner inconsistent with the terms of this License.
You agree not to use the Work for illegal, immoral or improper purposes, or on pages containing illegal, immoral or improper material. The Work is subject to applicable export laws. You agree to comply with all such laws and regulations that may apply to the Work after Your receipt of the Work.
Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", "WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK (OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE WORKS.
Indemnity. You agree to defend, indemnify and hold harmless the Author and the Publisher from and against any claims, suits, losses, damages, liabilities, costs, and expenses (including reasonable legal or attorneys’ fees) resulting from or relating to any use of the Work by You.
Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
Termination.
This License and the rights granted hereunder will terminate automatically upon any breach by You of any term of this License. Individuals or entities who have received Derivative Works from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of this License.
If You bring a copyright, trademark, patent or any other infringement claim against any contributor over infringements You claim are made by the Work, your License from such contributor to the Work ends automatically.
Subject to the above terms and conditions, this License is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, the Author reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
Publisher. The parties hereby confirm that the Publisher shall not, under any circumstances, be responsible for and shall not have any liability in respect of the subject matter of this License. The Publisher makes no warranty whatsoever in connection with the Work and shall not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. The Publisher reserves the right to cease making the Work available to You at any time without notice
Miscellaneous
This License shall be governed by the laws of the location of the head office of the Author or if the Author is an individual, the laws of location of the principal place of residence of the Author.
If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this License, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
This License constitutes the entire agreement between the parties with respect to the Work licensed herein. There are no understandings, agreements or representations with respect to the Work not specified herein. The Author shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Author and You.

freetype

FTL.TXT

                    The FreeType Project LICENSE
                    ----------------------------

                            2006-Jan-27

                    Copyright 1996-2002, 2006 by
          David Turner, Robert Wilhelm, and Werner Lemberg



Introduction
============

  The FreeType  Project is distributed in  several archive packages;
  some of them may contain, in addition to the FreeType font engine,
  various tools and  contributions which rely on, or  relate to, the
  FreeType Project.

  This  license applies  to all  files found  in such  packages, and
  which do not  fall under their own explicit  license.  The license
  affects  thus  the  FreeType   font  engine,  the  test  programs,
  documentation and makefiles, at the very least.

  This  license   was  inspired  by  the  BSD,   Artistic,  and  IJG
  (Independent JPEG  Group) licenses, which  all encourage inclusion
  and  use of  free  software in  commercial  and freeware  products
  alike.  As a consequence, its main points are that:

    o We don't promise that this software works. However, we will be
      interested in any kind of bug reports. (`as is' distribution)

    o You can  use this software for whatever you  want, in parts or
      full form, without having to pay us. (`royalty-free' usage)

    o You may not pretend that  you wrote this software.  If you use
      it, or  only parts of it,  in a program,  you must acknowledge
      somewhere  in  your  documentation  that  you  have  used  the
      FreeType code. (`credits')

  We  specifically  permit  and  encourage  the  inclusion  of  this
  software, with  or without modifications,  in commercial products.
  We  disclaim  all warranties  covering  The  FreeType Project  and
  assume no liability related to The FreeType Project.


  Finally,  many  people  asked  us  for  a  preferred  form  for  a
  credit/disclaimer to use in compliance with this license.  We thus
  encourage you to use the following text:

   """
    Portions of this software are copyright ©  The FreeType
    Project (www.freetype.org).  All rights reserved.
   """

  Please replace  with the value from the FreeType version you
  actually use.


Legal Terms
===========

0. Definitions
--------------

  Throughout this license,  the terms `package', `FreeType Project',
  and  `FreeType  archive' refer  to  the  set  of files  originally
  distributed  by the  authors  (David Turner,  Robert Wilhelm,  and
  Werner Lemberg) as the `FreeType Project', be they named as alpha,
  beta or final release.

  `You' refers to  the licensee, or person using  the project, where
  `using' is a generic term including compiling the project's source
  code as  well as linking it  to form a  `program' or `executable'.
  This  program is  referred to  as  `a program  using the  FreeType
  engine'.

  This  license applies  to all  files distributed  in  the original
  FreeType  Project,   including  all  source   code,  binaries  and
  documentation,  unless  otherwise  stated   in  the  file  in  its
  original, unmodified form as  distributed in the original archive.
  If you are  unsure whether or not a particular  file is covered by
  this license, you must contact us to verify this.

  The FreeType  Project is copyright (C) 1996-2000  by David Turner,
  Robert Wilhelm, and Werner Lemberg.  All rights reserved except as
  specified below.

1. No Warranty
--------------

  THE FREETYPE PROJECT  IS PROVIDED `AS IS' WITHOUT  WARRANTY OF ANY
  KIND, EITHER  EXPRESS OR IMPLIED,  INCLUDING, BUT NOT  LIMITED TO,
  WARRANTIES  OF  MERCHANTABILITY   AND  FITNESS  FOR  A  PARTICULAR
  PURPOSE.  IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
  BE LIABLE  FOR ANY DAMAGES CAUSED  BY THE USE OR  THE INABILITY TO
  USE, OF THE FREETYPE PROJECT.

2. Redistribution
-----------------

  This  license  grants  a  worldwide, royalty-free,  perpetual  and
  irrevocable right  and license to use,  execute, perform, compile,
  display,  copy,   create  derivative  works   of,  distribute  and
  sublicense the  FreeType Project (in  both source and  object code
  forms)  and  derivative works  thereof  for  any  purpose; and  to
  authorize others  to exercise  some or all  of the  rights granted
  herein, subject to the following conditions:

    o Redistribution of  source code  must retain this  license file
      (`FTL.TXT') unaltered; any  additions, deletions or changes to
      the original  files must be clearly  indicated in accompanying
      documentation.   The  copyright   notices  of  the  unaltered,
      original  files must  be  preserved in  all  copies of  source
      files.

    o Redistribution in binary form must provide a  disclaimer  that
      states  that  the software is based in part of the work of the
      FreeType Team,  in  the  distribution  documentation.  We also
      encourage you to put an URL to the FreeType web page  in  your
      documentation, though this isn't mandatory.

  These conditions  apply to any  software derived from or  based on
  the FreeType Project,  not just the unmodified files.   If you use
  our work, you  must acknowledge us.  However, no  fee need be paid
  to us.

3. Advertising
--------------

  Neither the  FreeType authors and  contributors nor you  shall use
  the name of the  other for commercial, advertising, or promotional
  purposes without specific prior written permission.

  We suggest,  but do not require, that  you use one or  more of the
  following phrases to refer  to this software in your documentation
  or advertising  materials: `FreeType Project',  `FreeType Engine',
  `FreeType library', or `FreeType Distribution'.

  As  you have  not signed  this license,  you are  not  required to
  accept  it.   However,  as  the FreeType  Project  is  copyrighted
  material, only  this license, or  another one contracted  with the
  authors, grants you  the right to use, distribute,  and modify it.
  Therefore,  by  using,  distributing,  or modifying  the  FreeType
  Project, you indicate that you understand and accept all the terms
  of this license.

4. Contacts
-----------

  There are two mailing lists related to FreeType:

    o freetype@nongnu.org

      Discusses general use and applications of FreeType, as well as
      future and  wanted additions to the  library and distribution.
      If  you are looking  for support,  start in  this list  if you
      haven't found anything to help you in the documentation.

    o freetype-devel@nongnu.org

      Discusses bugs,  as well  as engine internals,  design issues,
      specific licenses, porting, etc.

  Our home page can be found at

    https://www.freetype.org


--- end of FTL.TXT ---

google-diff-match-patch

CHANGES

Using STL port of diff-match-patch:
https://github.com/leutloff/diff-match-patch-cpp-stl

STL Port was done by Sergey Nozhenko (snhere@gmail.com) and posted on https://code.google.com/p/google-diff-match-patch/issues/detail?id=25

COPYING


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

google-test

LICENSE

Copyright 2008, Google Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
    * Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

hugo

LICENSE.txt

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2022 The Hugo Authors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

kissfft

COPYING

Copyright (c) 2003-2006 Mark Borgerding

All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

libusb-win32

AUTHORS.txt


Library, Test Programs:

Stephan Meyer, 
Johannes Erdfelt, 
Thomas Sailer, 

Drivers, Installer:

Stephan Meyer, 
Travis Robinson, 

Testing, Technical support:

Xiaofan Chen, 

COPYING_LGPL.txt

                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. 
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

libusb-win32-changelog-1.2.6.0.txt

LibUsb-Win32 Change Log
V1.2.6.0 (01/17/2012)
==============================================
* Official release.

* Removed ISO maximum transfer size restrictions/transfer spltting.

* Fixed inf-wizard device notification issue.

V1.2.5.0 (07/23/2011)
==============================================
* Official release.

V1.2.4.9 (07/13/2011) - SNAPSHOT RELEASE
==============================================
* Updated GCC lib file 'libusb.a'

V1.2.4.8 (07/12/2011) - SNAPSHOT RELEASE
==============================================
* Added new public api function 'usb_reset_ex'. This is an extended 
  device reset function which allows developers to specify a port reset, a 
  port cycle, or both. 

* Added new public defines 'USB_RESET_TYPE_XXX' for 'usb_reset_ex' 
  function. 

V1.2.4.7 (07/02/2011) - SNAPSHOT RELEASE
==============================================
* Sync transfers which specify a zero (0) timeout are now considered to be 
  INFINITE. 

V1.2.4.6 (05/12/2011) - SNAPSHOT RELEASE
==============================================
* Added device interface registration. This provides identical 
  functionality to the "DeviceInterfaceGUIDs" supported by WinUSB and 
  libusbK. A device interface guid can be specified in the .inf file. They 
  can be used to quickly locate a usb device or set of USB devices using 
  the setup api as well as device notification registration. 

* New IOCTL codes added to for native libusbK/WinUSB compatibility.
  NOTE: These IOCTLs are currently used only by libusbK.dll.
  o LIBUSB_IOCTL_QUERY_DEVICE_INFORMATION
  o LIBUSB_IOCTL_SET_PIPE_POLICY
  o LIBUSB_IOCTL_GET_PIPE_POLICY
  o LIBUSB_IOCTL_SET_POWER_POLICY
  o LIBUSB_IOCTL_GET_POWER_POLICY
  o LIBUSB_IOCTL_CONTROL_WRITE
  o LIBUSB_IOCTL_CONTROL_READ
  o LIBUSB_IOCTL_FLUSH_PIPE
  o LIBUSBK_IOCTL_CLAIM_INTERFACE
  o LIBUSBK_IOCTL_RELEASE_INTERFACE
  o LIBUSBK_IOCTL_RELEASE_ALL_INTERFACES
  o LIBUSBK_IOCTL_SET_INTERFACE
  o LIBUSBK_IOCTL_GET_INTERFACE

* Renamed main header file (usb.h) to lusb0_usb.h. This eliminates 
  conflicts with the main WDK usb include as well as making the 
  libusb-win32 header more distinguishable from other usb library header 
  files. 

* Added device descriptor caching and active/first config descriptor 
  caching. Descriptor caching prevents unnecessary control requests from 
  interrupting devices that could potentially be in-use. It also makes 
  libusb0.sys more compliant with usb libraries targeting platform where 
  descriptor caching is done automatically. (linux/mac)
  
* Upgraded to libwdi v1.1.1
  o Zadig UI improvements
  o wdi-simple now handles certificate related operations
  o New NSIS (Nullsoft Scriptable Install System) script sample
  o improved INNO Setup script sample
  o libusbK support
  o autogeneration and self-signing of a .cat file, to prevent further security
    prompts during driver installation on Vista and later.
    for more information, see http://libwdi-cps.akeo.ie
  o disable restore point creation during installation
  o Visual Studio 2010 support and overall MS file cleanup
  o use of the Kerberos/e2fsprogs parser in Zadig instead of libconfig

V1.2.4.0 (04/11/2011)
=======================
* Removed get configuration request from the core driver 
  set_configuration function.  This caused problems with
  some non-compliant usb devices.

* Added device descriptor dump to test applications.

V1.2.3.0 (03/16/2011)
=======================
* Fixed bug-id 3117686 reported by Tim Schuerewegen.

* Added LIBUSB_IOCTL_GET_OBJECT_NAME.  This new IOCTL code retrieves object
  from the driver.  The only valid object name index is 0.  Index 0 is
  returns the devices plug and play registry key pathname.

* Removed maximum timeout restriction for vendor class requests.

V1.2.2.0 (10/02/2010)
=======================
* Added install-filter-win.exe.  A gui installer for device filters.

* Added new libusb0.dll function usb_install_np_rundll().  This function
  is designed for rundll32.exe and takes the same parameters as
  install-filter.exe.

* Updated install-filter.exe.  This application has several new features.
  Type "install-filter --help" for more details.

* Updated libusb-win32-devel-filter package.  This package is once again
  available for download as a setup.exe.

* Updated libusb-win32 "bin" package format.  inf-wizard.exe has been moved
  up one directory.

* Updated driver_installer_template.iss example. This is an Inno Setup
  Script showing how to create your own setup.exe for installing your
  application and driver.

* Fixed missing byte order marker in inf-wizard.exe .inf files. (libwdi)

* Fixed auto-configuration issue when there is more than one driver in the
  stack.

* Fixed BSOD when using the filter driver with devices that are auto
  suspended by other drivers in the stack.
  
* Fixed BSOD for devices with endpoints that have '0' for wMaxPacketSize.

* Fixed BSOD when cancelling large transfers on high speed devices.

  
V1.2.1.0 (07/28/2010)
=======================
* Updated bulk.c to include async i/o example code.

* Fixed usb_install_driver_np() issue with inf-wizard generated infs.

* Fixed inf2cat.exe issue with inf-wizard generated infs.
  
* Added 'Install Now' feature to inf-wizard. (libwdi)

* Added embedded libusb-win32 binaries to inf-wizard. (libwdi)

* Added libwdi (http://www.libusb.org/wiki/libwdi) to inf-wizard. 

* Added get cached configuration request to usb_open(). This is a new
  control code that involves no device i/o and allows 
  usb_set_configuration() to be omitted if the driver has already
  configured it.

* Fixed set_configuration() failure for devices that do not properly
  support get_configuration().

V1.2.0.0 (07/07/2010)
=======================
* First signed driver release! The libusb-win32 kernel driver (libusb0.sys)
  can now be used on x64 Windows machines that require signed drivers. 

* Fixed 2128187 reported by Tim Green. usb_get_descriptor() can fail
  because the given buffer of 8 bytes is too small.

* Fixed 2928293 reported by Tim Green. Sometimes the call to 
  usb_fetch_and_parse_descriptors() in usb_find_devices() can fail. This 
  patch moves the LIST_ADD to after a successful read of the device's 
  configuration descriptors.

* Fixed issue causing libusb-win32 to not act as power policy owner
  when it should.

* Fixed issue in which on rare occasion, a libusb-win32 filter device could
  run as a "normal" device.
  
* Fixed filter driver issue for device using wudfr.sys.

* Added large transfer splitting to driver (bulk, int, iso). NOTE:
  The dll continues to break transfers in the same manner it always has.


V1.1.14.3 (06/12/2010)
=======================
* Remove get_configuration() request from usb_open().  This caused claim
  interface to fail when used as a filter driver.
  
V1.1.14.0 (06/01/2010)
=======================
* Updated logging functions and standardized log message display format.

* Updated inf-wizard to use the new directory format for the libusb-win32
  binaries.

* Updated package directories to reflect the winddk BUILDARCH env variable.
  (i64 := ia64, x64 := amd64)
  
* Added request to get the current configuration in usb_open().

* Fixed 2960644 (reported by farthen) crash on shutdown with x64 based
  systems while using inf files for each libusb device.

* Added additional log message only included in debug/chk builds.
  
* Updated default log levels to highest verbose level for debug builds.

* Added test signing support to the libusb-win32 make.cmd. This allows
  libusb0.sys and libusb0.dll to be signed with a digital signature.
  (see make.cmd for mmore details)

* Added MSVC 2008 project files

* Moved version defines to an include file (libusb_version.h)
  This file is generated from libusb_version_h.in with "make.cmd makever"

* Removed all "dist" commands from cyg/mingw makefile.  Instead use "make.cmd"
  in the "ddk_make" directory.

* Fixed filter setup not running in 64bit mode

* Fixed 64bit inf-wizard, testlibusb-win builds

* Added set initial config value #1 when the driver is not a filter.
  optionally, the initial configuration value can be specified in the inf
  file: HKR,,"InitialConfigValue",0x00010001,

* Added support for querying device registry keys 
 (LIBUSB_IOCTL_GET_CUSTOM_REG_PROPERTY)

* Added support for querying device properties 
 (LIBUSB_IOCTL_GET_DEVICE_PROPERTY)

* Fixed possible race condition in kernel add_device()

* Updated default ddk build version number to 1.1.14.0 to facilitate
  Microsoft WHQL submission.

* Added DDK build distribution system.  Official libusb-win32 releases 
 (after 0.1.12.2) are built using Microsoft's WinDDK.  (see make.cmd)

* Fixed 2658937 (reported by Tim Roberts) The libusb-win32 driver always
  acts as a power policy owner.

README.txt


This is libusb-win32 (http://libusb-win32.sourceforge.net) version 1.2.6.0. 
Libusb-win32 is a library that allows userspace application to access USB 
devices on Windows operation systems (Win2k, WinXP, Vista, Win7). 
It is derived from and fully API compatible to libusb available at 
http://libusb.sourceforge.net.

For more information visit the project's web site at:

http://libusb-win32.sourceforge.net
http://sourceforge.net/projects/libusb-win32

libvpx

LICENSE

Copyright (c) 2010, Google Inc. All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

Neither the name of Google nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

libwebm

LICENSE

Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the WebM Project.

Google hereby grants to you a perpetual, worldwide, non-exclusive,
no-charge, royalty-free, irrevocable (except as stated in this section)
patent license to make, have made, use, offer to sell, sell, import,
transfer, and otherwise run, modify and propagate the contents of this
implementation of VP8, where such license applies only to those patent
claims, both currently owned by Google and acquired in the future,
licensable by Google that are necessarily infringed by this
implementation of VP8. This grant does not include claims that would be
infringed only as a consequence of further modification of this
implementation. If you or your agent or exclusive licensee institute or
order or agree to the institution of patent litigation against any
entity (including a cross-claim or counterclaim in a lawsuit) alleging
that this implementation of VP8 or any code incorporated within this
implementation of VP8 constitutes direct or contributory patent
infringement, or inducement of patent infringement, then any patent
rights granted to you under this License for this implementation of VP8
shall terminate as of the date such litigation is filed.

libyuv

LICENSE

LICENSE

Copyright 2011 The LibYuv Project Authors. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

  * Redistributions of source code must retain the above copyright
    notice, this list of conditions and the following disclaimer.

  * Redistributions in binary form must reproduce the above copyright
    notice, this list of conditions and the following disclaimer in
    the documentation and/or other materials provided with the
    distribution.

  * Neither the name of Google nor the names of its contributors may
    be used to endorse or promote products derived from this software
    without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


PATENTS
Additional IP Rights Grant (Patents)

"This implementation" means the copyrightable works distributed by
Google as part of the LibYuv code package.

Google hereby grants to you a perpetual, worldwide, non-exclusive,
no-charge, irrevocable (except as stated in this section) patent
license to make, have made, use, offer to sell, sell, import,
transfer, and otherwise run, modify and propagate the contents of this
implementation of the LibYuv code package, where such license applies
only to those patent claims, both currently owned by Google and
acquired in the future, licensable by Google that are necessarily
infringed by this implementation of the LibYuv code package. This
grant does not include claims that would be infringed only as a
consequence of further modification of this implementation. If you or
your agent or exclusive licensee institute or order or agree to the
institution of patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that this
implementation of the LibYuv code package or any code incorporated
within this implementation of the LibYuv code package constitutes
direct or contributory patent infringement, or inducement of patent
infringement, then any patent rights granted to you under this License
for this implementation of the LibYuv code package shall terminate as
of the date such litigation is filed.

lzma

LICENSE.md

MIT License

Copyright (c) 2017 SSE4

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

MaterialIcons

LICENSE-2.0.txt


                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

material.io.txt

Many icons are from:
https://material.io/tools/icons/?style=baseline
Under the Apache license 2.0.

portaudio

LICENSE.txt

Portable header file to contain:
>>>>>
/*
 * PortAudio Portable Real-Time Audio Library
 * PortAudio API Header File
 * Latest version available at: http://www.portaudio.com
 *
 * Copyright (c) 1999-2006 Ross Bencina and Phil Burk
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files
 * (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software,
 * and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * The text above constitutes the entire PortAudio license; however, 
 * the PortAudio community also makes the following non-binding requests:
 *
 * Any person wishing to distribute modifications to the Software is
 * requested to send the modifications to the original developer so that
 * they can be incorporated into the canonical version. It is also 
 * requested that these non-binding requests be included along with the 
 * license above.
 */
<<<<<
 

Implementation files to contain:
>>>>>
/*
 * PortAudio Portable Real-Time Audio Library
 * Latest version at: http://www.portaudio.com
 *  Implementation
 * Copyright (c) 1999-2000 
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files
 * (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software,
 * and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * The text above constitutes the entire PortAudio license; however, 
 * the PortAudio community also makes the following non-binding requests:
 *
 * Any person wishing to distribute modifications to the Software is
 * requested to send the modifications to the original developer so that
 * they can be incorporated into the canonical version. It is also 
 * requested that these non-binding requests be included along with the 
 * license above.
 */
<<<<<

portmidi

license.txt

/*
 * PortMidi Portable Real-Time MIDI Library
 *
 * license.txt -- a copy of the PortMidi copyright notice and license information
 *
 * Latest version available at: http://sourceforge.net/projects/portmedia
 *
 * Copyright (c) 1999-2000 Ross Bencina and Phil Burk
 * Copyright (c) 2001-2009 Roger B. Dannenberg
 *
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files
 * (the "Software"), to deal in the Software without restriction,
 * including without limitation the rights to use, copy, modify, merge,
 * publish, distribute, sublicense, and/or sell copies of the Software,
 * and to permit persons to whom the Software is furnished to do so,
 * subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * The text above constitutes the entire PortMidi license; however, 
 * the PortMusic community also makes the following non-binding requests:
 *
 * Any person wishing to distribute modifications to the Software is
 * requested to send the modifications to the original developer so that
 * they can be incorporated into the canonical version. It is also
 * requested that these non-binding requests be included along with the 
 * license above.
 */

Relearn-Theme

LICENSE

The MIT License (MIT)

Copyright (c) 2021 Sören Weber
Copyright (c) 2017 Valere JEANTET
Copyright (c) 2016 MATHIEU CORNIC
Copyright (c) 2014 Grav

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

v8

LICENSE

This license applies to all parts of V8 that are not externally
maintained libraries.  The externally maintained libraries used by V8
are:

  - PCRE test suite, located in
    test/mjsunit/third_party/regexp-pcre/regexp-pcre.js.  This is based on the
    test suite from PCRE-7.3, which is copyrighted by the University
    of Cambridge and Google, Inc.  The copyright notice and license
    are embedded in regexp-pcre.js.

  - Layout tests, located in test/mjsunit/third_party/object-keys.  These are
    based on layout tests from webkit.org which are copyrighted by
    Apple Computer, Inc. and released under a 3-clause BSD license.

  - Strongtalk assembler, the basis of the files assembler-arm-inl.h,
    assembler-arm.cc, assembler-arm.h, assembler-ia32-inl.h,
    assembler-ia32.cc, assembler-ia32.h, assembler-x64-inl.h,
    assembler-x64.cc, assembler-x64.h, assembler-mips-inl.h,
    assembler-mips.cc, assembler-mips.h, assembler.cc and assembler.h.
    This code is copyrighted by Sun Microsystems Inc. and released
    under a 3-clause BSD license.

  - Valgrind client API header, located at src/third_party/valgrind/valgrind.h
    This is released under the BSD license.

  - The Wasm C/C++ API headers, located at third_party/wasm-api/wasm.{h,hh}
    This is released under the Apache license. The API's upstream prototype
    implementation also formed the basis of V8's implementation in
    src/wasm/c-api.cc.

These libraries have their own licenses; we recommend you read them,
as their terms may differ from the terms below.

Further license information can be found in LICENSE files located in 
sub-directories.

Copyright 2014, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

LICENSE.fdlibm

Copyright (C) 1993-2004 by Sun Microsystems, Inc. All rights reserved.

Developed at SunSoft, a Sun Microsystems, Inc. business.
Permission to use, copy, modify, and distribute this
software is freely granted, provided that this notice
is preserved.

LICENSE.strongtalk

Copyright (c) 1994-2006 Sun Microsystems Inc.
All Rights Reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.

- Redistribution in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.

- Neither the name of Sun Microsystems or the names of contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

LICENSE.v8

Copyright 2006-2011, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
    * Neither the name of Google Inc. nor the names of its
      contributors may be used to endorse or promote products derived
      from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

wxWidgets

LICENSE

                wxWindows Library Licence, Version 3.1
                ======================================

  Copyright (c) 1998-2005 Julian Smart, Robert Roebling et al

  Everyone is permitted to copy and distribute verbatim copies
  of this licence document, but changing it is not allowed.

                       WXWINDOWS LIBRARY LICENCE
     TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  
  This library is free software; you can redistribute it and/or modify it
  under the terms of the GNU Library General Public Licence as published by
  the Free Software Foundation; either version 2 of the Licence, or (at
  your option) any later version.
  
  This library is distributed in the hope that it will be useful, but
  WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
  General Public Licence for more details.

  You should have received a copy of the GNU Library General Public Licence
  along with this software, usually in a file named COPYING.LIB.  If not,
  write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  Boston, MA 02111-1307 USA.

  EXCEPTION NOTICE

  1. As a special exception, the copyright holders of this library give
  permission for additional uses of the text contained in this release of
  the library as licenced under the wxWindows Library Licence, applying
  either version 3.1 of the Licence, or (at your option) any later version of
  the Licence as published by the copyright holders of version
  3.1 of the Licence document.

  2. The exception is that you may use, copy, link, modify and distribute
  under your own terms, binary object code versions of works based
  on the Library.

  3. If you copy code from files distributed under the terms of the GNU
  General Public Licence or the GNU Library General Public Licence into a
  copy of this library, as this licence permits, the exception does not
  apply to the code that you add in this way.  To avoid misleading anyone as
  to the status of such modified files, you must delete this exception
  notice from such code and/or adjust the licensing conditions notice
  accordingly.

  4. If you write modifications of your own for this library, it is your
  choice whether to permit this exception to apply to your modifications. 
  If you do not wish that, you must delete the exception notice from such
  code and/or adjust the licensing conditions notice accordingly.


xxhash

LICENSE

xxHash - Fast Hash algorithm
Copyright (C) 2012-2016, Yann Collet

BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

You can contact the author at :
- xxHash homepage: http://www.xxhash.com
- xxHash source repository : https://github.com/Cyan4973/xxHash

zlib

LICENSE

/* zlib.h -- interface of the 'zlib' general purpose compression library
  version 1.2.11, January 15th, 2017

  Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler

  This software is provided 'as-is', without any express or implied
  warranty.  In no event will the authors be held liable for any damages
  arising from the use of this software.

  Permission is granted to anyone to use this software for any purpose,
  including commercial applications, and to alter it and redistribute it
  freely, subject to the following restrictions:

  1. The origin of this software must not be misrepresented; you must not
     claim that you wrote the original software. If you use this software
     in a product, an acknowledgment in the product documentation would be
     appreciated but is not required.
  2. Altered source versions must be plainly marked as such, and must not be
     misrepresented as being the original software.
  3. This notice may not be removed or altered from any source distribution.

  Jean-loup Gailly        Mark Adler
  jloup@gzip.org          madler@alumni.caltech.edu

*/