<!--
 Rocrail - Model Railroad Software
 Copyright (c) 2002-2026 Robert Jan Versluis, Rocrail.net
 All rights reserved.
 -->
<Wrappers modulename="rocrail" title="RocRail">

  <Cmdline title="Commandline options:" createwrapper="true" remark="Commands are listed in column --Default--.">
    <const name="workdir" vt="string" val="-w" defval="." range="*" remark="Specifies working directory to use: -w [path]"/>
    <const name="inifile" vt="string" val="-i" defval="rocrail.ini" range="*" remark="Specifies which Inifile to use: -i [file]"/>
    <const name="trcfile" vt="string" val="-t" defval="rocrail" range="*" remark="Specifies trace filename: -t [file] (Use relative only if using http service.)"/>
    <const name="planfile" vt="string" val="-x" defval="" range="*" remark="Specifies plan filename"/>
    <const name="locofile" vt="string" val="-lf" defval="" range="*" remark="Specifies loco list filename"/>
    <const name="libpath" vt="string" val="-l" defval="" range="*" remark="Location of the rocrail libraries: -l [path]"/>
    <const name="licfile" vt="string" val="-lic" defval="" range="*" remark="Specifies lic.dat path"/>
    <const name="imgpath" vt="string" val="-img" defval="" range="*" remark="Location of images: -img [path]"/>
    <const name="debug" vt="string" val="-debug" defval="false" remark="Activates debug tracelevel."/>
    <const name="byte" vt="string" val="-byte" defval="false" remark="Activates byte tracelevel."/>
    <const name="monitor" vt="string" val="-monitor" defval="false" remark="Activates monitor tracelevel."/>
    <const name="parse" vt="string" val="-parse" defval="false" remark="Activates parse tracelevel."/>
    <const name="develop" vt="string" val="-develop" defval="false" remark="Activates develop tracelevel."/>
    <const name="ctc" vt="string" val="-ctc" defval="false" remark="Activates CTC tracelevel."/>
    <const name="mdns" vt="string" val="-mdns" defval="false" remark="Activates mDNS tracelevel."/>
    <const name="router" vt="string" val="-router" defval="false" remark="Activates Router tracelevel."/>
    <const name="nocom" vt="string" val="-nocom" defval="false" remark="Disable communication."/>
    <const name="console" vt="string" val="-console" defval="false" remark="Enable console commands."/>
    <const name="port" vt="string" val="-p" defval="8051" range="*" remark="Rocrail Client Service."/>
    <const name="initfield" vt="string" val="-f" defval="false" range="*" remark="Activate field initialization: flip all switches twice"/>
    <const name="sod" vt="string" val="-sod" defval="false" range="*" remark="Start Of Day"/>
    <const name="help" vt="string" val="--help" defval="" range="*" remark="Shows commandline help."/>
    <const name="version" vt="string" val="-version" defval="false" remark="Shows version info and stops rocrail."/>
    <const name="doc" vt="string" val="-doc" defval="false" remark="Writes HTML documentation and stops rocrail."/>
    <const name="power" vt="string" val="-pwr" defval="false"/>
    <const name="info" vt="string" val="-info" defval="true" remark="Activates info tracelevel."/>
    <const name="http" vt="string" val="-http" defval="true" remark="Activates http tracelevel."/>
    <const name="automatic" vt="string" val="-auto" defval="false" remark="Activates automatic tracelevel."/>
    <const name="permission" vt="string" val="-perm" defval="false" remark="Activates automatic tracelevel."/>
    <const name="stress" vt="string" val="-stress" defval="true" remark="Activates network stress runner."/>
    <const name="modplan" vt="string" val="-modplan" defval="true" remark="Create modplan."/>
    <const name="run" vt="string" val="-run" defval="false" remark="Run all locos."/>
    <const name="resume" vt="string" val="-resume" defval="false" remark="Run all prev. locos."/>
    <const name="automode" vt="string" val="-auto" defval="false" remark="Power and automode on."/>
    <const name="mqtt" vt="string" val="-mqtt" defval="false" remark="Use a MQTT broker if one is found."/>
    <const name="netdev" vt="string" val="-netdev" defval="" range="*" remark="Network device for getting the MAC address: -detdev [devicename]"/>
    <const name="virtual" vt="string" val="-virtual" defval="false" remark="Replace all digint libs with the virtual CS."/>
  </Cmdline>

  <ConCmd title="Console commands:" createwrapper="true" remark="Commands are listed in column --Default--.">
    <const name="quit" vt="char" val="q" remark="Quit rocrail."/>
    <const name="poweron" vt="char" val="p" remark="Turns power on"/>
    <const name="poweroff" vt="char" val="y" remark="Turns power off"/>
    <const name="threads" vt="char" val="t" remark="Lists all active threads."/>
    <const name="memory" vt="char" val="m" remark="Shows memory in use."/>
    <const name="memtrc" vt="char" val="r" remark="Toggle memory tracelevel."/>
    <const name="calctrc" vt="char" val="u" remark="Toggle calc tracelevel."/>
    <const name="findtrc" vt="char" val="f" remark="Toggle find tracelevel."/>
    <const name="debug" vt="char" val="d" remark="Toggle debug tracelevel."/>
    <const name="xmlh" vt="char" val="9" remark="Toggle xmlh tracelevel."/>
    <const name="clntcon" vt="char" val="7" remark="Toggle clntcon tracelevel."/>
    <const name="router" vt="char" val="w" remark="Toggle router tracelevel."/>
    <const name="byte" vt="char" val="b" remark="Toggle byte tracelevel."/>
    <const name="automat" vt="char" val="a" remark="Toggle auto tracelevel."/>
    <const name="http" vt="char" val="h" remark="Toggle http tracelevel."/>
    <const name="monitor" vt="char" val="o" remark="Toggle monitor tracelevel."/>
    <const name="info" vt="char" val="n" remark="Toggle info tracelevel."/>
    <const name="help" vt="char" val="?" remark="Shows console commands."/>
    <const name="initfield" vt="char" val="i" remark="Field initialization: flip all switches twice"/>
    <const name="slots" vt="char" val="x" remark="Read all slots."/>
    <const name="config" vt="char" val="c" remark="Read config slots."/>
    <const name="routing" vt="char" val="z" remark="Routing track plan."/>
    <const name="routingclean" vt="char" val="l" remark="Clean all generated route info."/>
    <const name="stopautomode" vt="char" val="s" remark="Stop automode."/>
    <const name="ebreak" vt="char" val="e" remark="Broadcast emergency break."/>
    <const name="query" vt="char" val="5" remark="Query network."/>
    <const name="sod" vt="char" val="8" remark="Start of Day."/>
    <const name="discover" vt="char" val="#" remark="Discover mobile decoders."/>
    <const name="devtrc" vt="char" val="6" remark="Toggle develop tracelevel."/>
    <const name="scanserial" vt="char" val="0" remark="Scan for serial devices."/>
    <const name="permtrc" vt="char" val="4" remark="Toggle permission tracelevel."/>
    <const name="ctctrc" vt="char" val="C" remark="Toggle CTC tracelevel."/>
    <const name="mdnstrc" vt="char" val="M" remark="Toggle mDNS tracelevel."/>
    <const name="mdns" vt="char" val="D" remark="mDNS discovery"/>
  </ConCmd>

  <Global structname="GC" remark="For internal use only.">
    <const name="productname" vt="string" val="Rocrail"/>
    <const name="releasename" vt="string" val="Iron"/>
    <const name="releasesuffix" vt="string" val="snapshot"/>
    <const name="vmajor" vt="int" val="2"/>
    <const name="vminor" vt="int" val="1"/>
    <const name="patch" vt="int" val="999"/>
    <const name="buildDate" vt="string" val="$__DATE__"/>
    <const name="buildTime" vt="string" val="$__TIME__"/>
  </Global>

  <client wrappername="Client">
    <var name="id" vt="string" defval="" range="*"/>
    <var name="nodeid" vt="int" defval="0" range="*"/>
    <var name="name" vt="string" defval="" range="*"/>
    <var name="prod" vt="string" defval="" range="*"/>
    <var name="remark" vt="string" defval="" range="*"/>
    <var name="peername" vt="string" defval="" range="*"/>
    <var name="type" vt="string" defval="" range="*"/>
    <var name="time" vt="string" defval="" range="*"/>
    <const name="type_with" vt="string" val="wiThrottle"/>
    <const name="type_rcp" vt="string" val="RCP"/>
    <const name="type_wio" vt="string" val="RASCII"/>
    <const name="type_html" vt="string" val="HTML"/>
    <const name="type_srcp" vt="string" val="SRCP"/>
    <var name="state" vt="int" defval="0"/>
    <const name="state_offline" vt="int" val="0"/>
    <const name="state_online" vt="int" val="1"/>
    <const name="state_error" vt="int" val="2"/>
    <var name="ver" vt="string" defval="" range="*"/>
    <var name="rev" vt="int" defval="0" range="0-*"/>
    <var name="os" vt="string" defval="" range="*"/>
    <var name="arch" vt="string" defval="" range="*"/>
    <var name="lcid" vt="string" defval="" range="*"/>
    <var name="lcaddr" vt="int" defval="0" range="*"/>
    <var name="lclist" vt="string" defval="" range="*"/>
    <var name="disablemonitor" vt="bool" defval="false"/>
  </client>


  <info wrappername="Info">
    <var name="level" vt="int" defval="0" range="*"/>
    <var name="popup" vt="bool" defval="false"/>
    <var name="messageid" vt="string" defval="" range="*" remark="Message ID related to rocview messages.xml"/>
    <var name="val1" vt="int" defval="0" range="*"/>
  </info>


  <event wrappername="Event">
    <const name="automatic" vt="string" val="automatic"/>
    <const name="manual" vt="string" val="manual"/>
    <const name="error" vt="string" val="error"/>
    <const name="exception0000" vt="string" val="exception-0000"/>
    <const name="offauto" vt="string" val="off-auto"/>
    <const name="onauto" vt="string" val="on-auto"/>
    <const name="initready" vt="string" val="initready"/>
    <const name="stopevent" vt="string" val="stop-event"/>
    <const name="stopcmd" vt="string" val="stop-cmd"/>
    <const name="goevent" vt="string" val="go-event"/>
    <const name="gocmd" vt="string" val="go-cmd"/>
    <const name="shortoff" vt="string" val="shortoff"/>
    <const name="shorton" vt="string" val="shorton"/>
    <const name="longon" vt="string" val="longon"/>
    <const name="sunset" vt="string" val="sunset"/>
    <const name="noon" vt="string" val="noon"/>
    <const name="sunrise" vt="string" val="sunrise"/>
    <const name="occ" vt="string" val="occ"/>
    <const name="GoTo" vt="string" val="goto" remark="Uppercase name because goto is a C statement"/>
    <const name="atposition" vt="string" val="atposition"/>
    <const name="shunting" vt="string" val="shunting"/>
    <const name="unlock" vt="string" val="unlock"/>
    <const name="lock" vt="string" val="lock"/>
    <const name="go" vt="string" val="go"/>
    <const name="load" vt="string" val="load"/>
    <const name="shortcircuit" vt="string" val="short-circuit"/>
    <const name="trainlen" vt="string" val="trainlen"/>
    <const name="scheduleupdate" vt="string" val="scheduleupdate"/>
    <const name="occupdate" vt="string" val="occupdate"/>
    <const name="codemismatch" vt="string" val="codemismatch"/>
    <const name="acceptcode" vt="string" val="acceptcode"/>
    <const name="acceptident" vt="string" val="acceptident"/>
    <const name="fifoin" vt="string" val="fifoin"/>
    <const name="stop" vt="string" val="stop"/>
    <const name="mode" vt="string" val="mode"/>
    <const name="run" vt="string" val="run"/>
    <const name="stall" vt="string" val="stall"/>
    <const name="energy" vt="string" val="energy"/>
    <const name="dirchange" vt="string" val="dirchange"/>
    <const name="lights" vt="string" val="lights"/>
    <const name="depart" vt="string" val="depart"/>
    <const name="closed" vt="string" val="closed"/>
    <const name="open" vt="string" val="open"/>
    <const name="free" vt="string" val="free"/>
    <const name="locked" vt="string" val="locked"/>
    <const name="exit" vt="string" val="exit"/>
    <const name="enter" vt="string" val="enter"/>
    <const name="in" vt="string" val="in"/>
    <const name="set" vt="string" val="set"/>
    <const name="reset" vt="string" val="reset"/>
    <const name="section" vt="string" val="section"/>
    <const name="ghost" vt="string" val="ghost"/>
    <const name="ghostfree" vt="string" val="ghostfree"/>
    <const name="occupied" vt="string" val="occupied"/>
    <const name="reserved" vt="string" val="reserved"/>
    <const name="tracking" vt="string" val="tracking"/>
    <const name="eventtimeout" vt="string" val="eventtimeout"/>
    <const name="eventtimeoutreset" vt="string" val="eventtimeoutreset"/>
    <const name="timeout" vt="string" val="timeout"/>
    <const name="timeoutreset" vt="string" val="timeoutreset"/>
    <const name="stagetimeout" vt="string" val="stagetimeout"/>
    <const name="stagetimeoutreset" vt="string" val="stagetimeoutreset"/>
    <const name="rearprotection" vt="string" val="rearprotection"/>
    <const name="text" vt="string" val="text"/>
    <const name="on" vt="string" val="on"/>
    <const name="off" vt="string" val="off"/>
    <const name="button1_on" vt="string" val="button1_on"/>
    <const name="button1_off" vt="string" val="button1_off"/>
    <const name="button2_on" vt="string" val="button2_on"/>
    <const name="button2_off" vt="string" val="button2_off"/>
    <const name="blockenterside" vt="string" val="blockenterside"/>
    <const name="ctcclick" vt="string" val="ctcclick"/>
    <const name="manualcommand" vt="string" val="__manualcommand__"/>
    <const name="empty" vt="string" val="empty"/>
  </event>

  <issue wrappername="Issue" remark="Server issue report.">
    <var name="subject" vt="string" defval="" remark="Subject of the issue; 7bit ASCII"/>
    <var name="desc" vt="string" defval="" remark="Description of the issue; UTF-8"/>
    <var name="ini" vt="bool" defval="true" remark="Include rocrail.ini."/>
    <var name="trc" vt="bool" defval="true" remark="Include all traces."/>
    <var name="xml" vt="bool" defval="true" remark="Include all definitions."/>
    <var name="stat" vt="bool" defval="true" remark="Include server statistics."/>
    <var name="currenttrc" vt="bool" defval="false" remark="Current trace only."/>
    <var name="path" vt="string" defval="" remark="Server reply with the absolute path."/>
    <var name="clientversion" vt="string" defval=""/>
    <var name="clientrev" vt="int" defval="0" remark="Client revision number."/>
    <var name="origin" vt="string" defval="" remark="Build origin"/>
  </issue>

  <color wrappername="Color" >
    <var name="id" vt="string" defval="" range="*"/>
    <var name="red" vt="int" defval="0" range="0-255" remark="Red value"/>
		<var name="green" vt="int" defval="0" range="0-255" remark="Green value"/>
		<var name="blue" vt="int" defval="0" range="0-255" remark="Blue value"/>
    <var name="white" vt="int" defval="0" range="0-255" remark="White value"/>
    <var name="white2" vt="int" defval="0" range="0-255" remark="Second white value"/>
    <var name="brightness" vt="int" defval="0" range="0-255"/>
    <var name="saturation" vt="int" defval="254" range="0-254"/>
    <var name="temperature" vt="int" defval="0" range="0-*"/>
    <const name="type_RGB" vt="int" val="0"/>
    <const name="type_GRB" vt="int" val="1"/>
    <var name="rgbType" vt="int" defval="0" range="0-*" remark="0=RGB, 1=GRB"/>
  </color>

  <ctc wrappername="CTC">
    <var name="iid" cat="ctc" vt="string" defval="" range="*"/>
    <var name="mappingID" cat="ctc" vt="string" defval="" range="*" remark="CTC mapping ID."/>
    <var name="accnr" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="nodeidbutton" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="nodeidled" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="modulenr" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="ledoffset" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="swap" vt="bool" defval="False"/>
    <var name="smallblock" vt="bool" defval="False"/>
    <var name="presetcolor" vt="bool" defval="True"/>
    <var name="button1" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="button2" cat="ctc" vt="int" defval="0" range="0-*"/>
    <var name="buttonled1" cat="ctc" vt="int" defval="0" range="0-6"/>
    <var name="buttonled2" cat="ctc" vt="int" defval="0" range="0-6"/>
    <var name="button1flip" vt="bool" defval="False"/>
    <var name="button2flip" vt="bool" defval="False"/>
    <var name="ledAON" cat="ctc" vt="int" defval="0" range="0-6"/>
    <var name="ledF" cat="ctc" vt="int" defval="0" range="0-6"/>
    <var name="led1" cat="ctc" vt="bool" defval="false"/>
    <var name="led2" cat="ctc" vt="bool" defval="false"/>
    <var name="led3" cat="ctc" vt="bool" defval="false"/>
    <var name="led4" cat="ctc" vt="bool" defval="false"/>
    <var name="led5" cat="ctc" vt="bool" defval="false"/>
    <var name="led6" cat="ctc" vt="bool" defval="false"/>
    <var name="led1skip" cat="ctc" vt="bool" defval="false"/>
    <var name="led2skip" cat="ctc" vt="bool" defval="false"/>
    <var name="led3skip" cat="ctc" vt="bool" defval="false"/>
    <var name="led4skip" cat="ctc" vt="bool" defval="false"/>
    <var name="led5skip" cat="ctc" vt="bool" defval="false"/>
    <var name="led6skip" cat="ctc" vt="bool" defval="false"/>
    <var name="colorA" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorB" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorC" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorD" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorE" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorF" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorG" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorH" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorI" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="colorJ" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="blinkA" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkB" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkC" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkD" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkE" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkF" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkG" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkH" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkI" cat="ctc" vt="bool" defval="false"/>
    <var name="blinkJ" cat="ctc" vt="bool" defval="false"/>
    <var name="bri" cat="ctc" vt="int" defval="50" range="0-*"/>
    <var name="delay" cat="ctc" vt="int" defval="1" range="0-*"/>
    <var name="initctc" vt="bool" defval="False"/>
    <var name="initpixel" vt="bool" defval="False"/>
    <var name="event" cat="ctc" vt="string" defval="" range="*"/>
    <var name="eventtype" cat="ctc" vt="string" defval="" range="bk,st"/>
    <var name="eventid" cat="ctc" vt="string" defval="" range="*"/>
    <var name="eventtext" cat="ctc" vt="string" defval="" range="*"/>
    <var name="rgbled1" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="rgbled2" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="rgbled3" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="rgbled4" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="rgbled5" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="rgbled6" cat="ctc" vt="int" defval="0" range="*"/>
    <var name="textps" cat="ctc" vt="int" defval="13" range="*"/>
    <var name="textfixed" cat="ctc" vt="bool" defval="false"/>
  </ctc>

  <ping wrappername="Ping">
    <var name="text" vt="string" defval="" range="*" remark="Free text"/>
  </ping>

  <bidievent wrappername="BidiEvent">
    <var name="stamp" vt="string" defval="" range="*" remark="Time stamp"/>
    <var name="code" vt="int" defval="0" range="*" remark="RFID, RailCom, ..."/>
    <var name="loco" vt="string" defval="" range="*" remark="Loco ID"/>
    <var name="sensor" vt="string" defval="" range="*" remark="Sensor ID"/>
  </bidievent>
  
  <description wrappername="Description">
    <var name="lang" vt="string" defval="" range="*" remark="Language"/>
    <var name="text" vt="string" defval="" range="*" remark="Description"/>
    <var name="url" vt="string" defval="" range="*" remark="Documentation URL"/>
  </description>
  
  <fbstatistic wrappername="FeedbackStatistic">
    <var name="lcid" vt="string" defval="" range="*"/>
    <var name="quality" vt="int" defval="0" range="0-*" remark="Signal quality reported by loco over railcom."/>
  </fbstatistic>
  
  <productlist wrappername="ProductList">
    <product wrappername="Product" cardinality="n">
      <var name="uid" vt="int" defval="0" range="0-*" remark="Unique ID"/>
      <var name="vid" vt="int" defval="0" range="0-*" remark="Vendor ID"/>
      <var name="pid" vt="int" defval="0" range="0-*" remark="Product ID"/>
      <var name="cid" vt="int" defval="0" range="0-*" remark="Class ID"/>
      <var name="sid" vt="int" defval="0" range="0-*" remark="System ID"/>
      <var name="cidext" vt="int" defval="0" range="0-*" remark="Class ID extension"/>
      <var name="artnr" vt="string" defval="" range="*" remark="Number"/>
      <var name="desc" vt="string" defval="" range="*" remark="Description"/>
      <var name="url" vt="string" defval="" range="*" remark="Documentation URL"/>
      <var name="sn" vt="int" defval="0" range="0-*" remark="Serial number"/>
      <var name="channels" vt="int" defval="0" range="0-*" remark="Number of channels"/>
      <var name="bus0" vt="int" defval="1" range="0-*" remark="Bus module count"/>
      <var name="sod0" vt="bool" defval="False"/>
      <var name="bus1" vt="int" defval="0" range="0-*" remark="Bus module count"/>
      <var name="sod1" vt="bool" defval="False"/>
      <var name="bus2" vt="int" defval="0" range="0-*" remark="Bus module count"/>
      <var name="sod2" vt="bool" defval="False"/>
      <var name="bus3" vt="int" defval="0" range="0-*" remark="Bus module count"/>
      <var name="sod3" vt="bool" defval="False"/>
      <var name="channelidx" vt="int" defval="0"/>
      <var name="modules" vt="int" defval="0" range="0-*" remark="Number of connected modules"/>
      <var name="querysid" vt="bool" defval="False"/>
      <var name="query" vt="bool" defval="False"/>
      <var name="querychannels" vt="bool" defval="False"/>
      <var name="load" vt="int" defval="0" remark="Load of CS in mA."/>
      <var name="loadmax" vt="int" defval="0" remark="Load of CS in mA."/>
      <var name="ptload" vt="int" defval="0" remark="Load of PT in mA."/>
      <var name="ptloadmax" vt="int" defval="0" remark="Load of PT in mA."/>
      <var name="temp" vt="int" defval="0" remark="Temp of CS in C."/>
      <var name="tempmax" vt="int" defval="0" remark="Temp of CS in C."/>
      <var name="volt" vt="int" defval="0" remark="Track voltage in mV."/>
      <var name="voltmin" vt="int" defval="0" remark="Track voltage in mV."/>
      <var name="report" vt="bool" defval="False"/>
      <var name="power" vt="bool" defval="False"/>
      <description cardinality="n"/>
      <productchannel wrappername="ProductChannel" cardinality="n">
        <var name="index" vt="int" defval="0" range="0-*"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="type" vt="int" defval="0" range="0-*"/>
        <var name="exp" vt="int" defval="0" range="0-*"/>
        <var name="minval" vt="int" defval="0" range="0-*"/>
        <var name="maxval" vt="int" defval="0" range="0-*"/>
        <var name="minview" vt="float" defval="0" range="0-*"/>
        <var name="maxview" vt="float" defval="0" range="0-*"/>
        <var name="value" vt="int" defval="0" range="0-*"/>
        <var name="desc" vt="string" defval=""/>
        <var name="beginrange" vt="float" defval="0"/>
        <var name="endrange" vt="float" defval="0"/>
        <var name="units" vt="string" defval=""/>
        <var name="view" vt="string" defval=""/>
      </productchannel>
    </product>
  </productlist>
  
  <adip wrappername="DIP">
    <var name="title" vt="string" defval="Dinamic Input Panel" range="*"/>
    <var name="id" vt="string" defval="" range="*"/>
    <dipgroup wrappername="DIPGroup" cardinality="n">
      <const name="grouptype_radiobox" vt="int" val="0"/>
      <const name="grouptype_box" vt="int" val="1"/>
      <var name="type" vt="int" defval="0" range="0-*"/>
      <var name="caption" vt="string" defval="DIP Group" range="*"/>
      <var name="ori" vt="int" defval="0" range="0,1"/>
      <var name="mask" vt="int" defval="255" range="0-255"/>
      <var name="spacing" vt="int" defval="4" range="0-*"/>
      <dipvalue wrappername="DIPValue" cardinality="n">
        <const name="valuetype_value" vt="int" val="0"/>
        <const name="valuetype_cv" vt="int" val="1"/>
        <const name="valuetype_index" vt="int" val="2"/>
        <var name="type" vt="int" defval="0" range="0-*"/>
        <var name="name" vt="string" defval="Value" range="*"/>
        <var name="value" vt="int" defval="0" range="0-*"/>
        <var name="info" vt="string" defval="" range="*"/>
      </dipvalue>
    </dipgroup>
  </adip>

  <cvbyte wrappername="CVByte">
    <var name="nr" vt="int" defval="0" range="0-*" remark="CV-Number"/>
    <var name="index" vt="int" defval="0" range="0-*" remark="CV-Index"/>
    <var name="value" vt="int" defval="0" range="0-*" remark="CV-Value"/>
    <var name="valuestr" vt="string" defval="" range="*" remark="CV value as text"/>
    <var name="kmh" vt="int" defval="0" range="0-*" remark="KMH value"/>
    <var name="calibrate" vt="bool" defval="false" remark="Calibrate this CV."/>
    <var name="desc" vt="string" defval="NULL" range="*" remark="CV-Description"/>
    <var name="descid" vt="string" defval="" range="*" remark="CV-Description translation ID"/>
    <var name="cat" vt="string" defval="general" range="*" remark="Category"/>
    <var name="catid" vt="string" defval="" range="*" remark="Category translation ID"/>
    <var name="info" vt="string" defval="" range="*" remark="Info"/>
    <var name="infoid" vt="string" defval="" range="*" remark="Info translation ID"/>
    <var name="valuerange" vt="string" defval="" range="*" remark="CV value range"/>
    <var name="valueunits" vt="string" defval="" range="*" remark="CV value units"/>
    <var name="readonly" vt="bool" defval="false" remark="Disable write operations."/>
    <var name="word" vt="bool" defval="false" remark="16 bit word value"/>
    <var name="dipid" vt="string" defval="" range="*" remark="Reference to an existing DIP definition."/>
    <var name="url" vt="string" defval="NULL" range="*" remark="CV-URL"/>
    <adip cardinality="1"/>
  </cvbyte>

  <macro wrappername="Macro" remark="Macro definition for accessories.">
    <var name="uid" vt="int" defval="0" remark="The unique ID in case of an export."/>
    <var name="class" vt="int" defval="0" remark="Module class in case of an export."/>
    <var name="nr" vt="int" defval="0" remark="Macro number in case of export."/>
    <var name="slowdown" vt="int" defval="0"/>
    <var name="repeat" vt="int" defval="0"/>
    <var name="minutes" vt="int" defval="0"/>
    <var name="hours" vt="int" defval="0"/>
    <var name="wday" vt="int" defval="0"/>
    <macroline wrappername="MacroLine" cardinality="n">
      <var name="nr" vt="int" defval="0"/>
      <var name="delay" vt="int" defval="0"/>
      <var name="porttype" vt="int" defval="0"/>
      <var name="port" vt="int" defval="0"/>
      <var name="status" vt="int" defval="0"/>
      <var name="blink" vt="bool" defval="false"/>
    </macroline>
  </macro>

  <netreq wrappername="NetReq">
    <var name="localid" vt="string" defval="" remark="Local server name."/>
    <var name="remoteid" vt="string" defval="*" remark="Remote server name."/>
    <const name="req_netroutes" vt="string" val="netroutes"/>
    <const name="req_isfree" vt="string" val="isfree"/>
    <const name="req_reserve" vt="string" val="reserve"/>
    <const name="req_unlock" vt="string" val="unlock"/>
    <const name="req_locoisin" vt="string" val="locoisin"/>
    <const name="req_getblock" vt="string" val="getblock"/>
    <const name="req_clientconn" vt="string" val="clientconn"/>
    <var name="req" vt="string" defval="" remark="Request type."/>
    <var name="localbk" vt="string" defval="NULL" range="*" required="true" remark="Local block ID; rrid::bkid"/>
    <var name="remotebk" vt="string" defval="NULL" range="*" required="true" remark="Remote block ID; rrid::bkid"/>
    <var name="lcid" vt="string" defval="" remark="Loc ID."/>
    <var name="routeid" vt="string" defval="" remark="Route ID."/>
    <var name="type" vt="string" defval="standard" remark="Server type for selecting by multicast."/>
  </netreq>
  <netrsp wrappername="NetRsp">
    <var name="localid" vt="string" defval="" remark="Local server name."/>
    <var name="remoteid" vt="string" defval="*" remark="Remote server name."/>
    <var name="localbk" vt="string" defval="NULL" range="*" required="true" remark="Local block ID; rrid::bkid"/>
    <var name="remotebk" vt="string" defval="NULL" range="*" required="true" remark="Remote block ID; rrid::bkid"/>
    <var name="host" vt="string" defval="" remark="Server client service."/>
    <var name="ip" vt="string" defval="" remark="Server client service."/>
    <var name="port" vt="int" defval="8051" remark="Rocrail Client Service."/>
    <var name="plan" vt="string" defval="" remark="Plan title."/>
    <var name="type" vt="string" defval="standard" remark="Server type for selecting by multicast."/>
    <const name="rsp_occupied" vt="string" val="occupied"/>
    <const name="rsp_reserved" vt="string" val="reserved"/>
    <const name="rsp_block" vt="string" val="block"/>
    <const name="rsp_unlocked" vt="string" val="unlocked"/>
    <const name="rsp_isfree" vt="string" val="isfree"/>
    <const name="rsp_clientconn" vt="string" val="clientconn"/>
    <const name="type_standard" vt="string" val="standard"/>
    <const name="type_smarthome" vt="string" val="smarthome"/>
    <var name="rsp" vt="string" defval="" range="occupied,reserved,block,isfree,unlocked" remark=""/>
  </netrsp>

  <jsevent wrappername="JsEvent">
    <var name="device" vt="int" defval="0" range="*"/>
    <var name="type" vt="int" defval="0" range="*"/>
    <var name="number" vt="int" defval="0" range="*"/>
    <var name="value" vt="int" defval="0" range="*"/>
    <var name="msec" vt="int" defval="0" range="*"/>
  </jsevent>

	<acc wrappername="Accessory">
    <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
    <var name="nodenr" vt="int" defval="0" range="0-*" required="false" remark="Node number"/>
    <var name="devid" vt="int" defval="0" range="0-*" required="true" remark="Device ID"/>
    <var name="val1" vt="int" defval="0" range="0-*" required="true" remark="Value"/>
    <var name="val2" vt="int" defval="0" range="0-*" required="true" remark="Value"/>
    <var name="val3" vt="int" defval="0" range="0-*" required="true" remark="Value"/>
    <var name="val4" vt="int" defval="0" range="0-*" required="true" remark="Value"/>
    <var name="position" vt="int" defval="-1"/>
    <var name="accevent" vt="bool" defval="false" remark="To check in the model if it was an accessory event."/>
    <var name="state" vt="string" defval="" range="*"/>
    <var name="error" vt="bool" defval="false"/>
    <var name="porttype" vt="int" defval="0" remark="Port type"/>
	</acc>
	
  <scheduletable wrappername="ScheduleTable">
    <var name="id" vt="string" defval="" range="*"/>
    <var name="hour" vt="int" defval="0" units="hours" remark="Time"/>
    <var name="minute" vt="int" defval="0" units="minutes" remark="Time"/>
    <scheduletableentry wrappername="ScheduleTableEntry" cardinality="n">
      <var name="scid" vt="string" defval="" range="*"/>
      <var name="inithour" vt="int" defval="0" units="hours" remark="Schedual initial planned start hour: scid+starthour is key."/>
      <var name="bkid" vt="string" defval="" range="*"/>
      <var name="lcid" vt="string" defval="" range="*"/>
      <var name="lcbkid" vt="string" defval="" range="*"/>
      <var name="trainid" vt="string" defval="" range="*"/>
      <var name="train_combination" vt="string" defval="" range="*"/>
      <var name="platform" vt="string" defval="" range="*"/>
      <var name="timeprocessing" vt="int" defval="0" remark="0=real 1=relative 2=hourly"/>
      <var name="starthour" vt="int" defval="0" units="hours" remark="First departure hour"/>
      <var name="startminute" vt="int" defval="0" units="minutes" remark="First departure minute"/>
      <var name="hour" vt="int" defval="0" units="hours" remark="Departure hour"/>
      <var name="fromhour" vt="int" defval="0" units="hours" remark="Timeframe start"/>
      <var name="tohour" vt="int" defval="0" units="hours" remark="Timeframe end"/>
      <var name="minute" vt="int" defval="0" units="minutes" remark="Departure minute"/>
      <var name="minwait" vt="int" defval="0" units="minutes" remark="Minimal time to wait"/>
      <var name="from" vt="string" defval="" range="*"/>
      <var name="destination" vt="string" defval="" range="*"/>
      <var name="via" vt="string" defval="" range="*"/>
      <var name="remark" vt="string" defval="" range="*"/>
      <var name="maxdelay" vt="int" defval="0" units="minutes"/>
      <var name="timeframe" vt="int" defval="0" units="minutes"/>
      <var name="delay" vt="int" defval="0" units="minutes" remark="Schedule delay reported by the train."/>
    </scheduletableentry>
  </scheduletable>
  
	<competitor wrappername="Competitor">
    <var name="id" vt="string" defval="" range="*" required="true"/>
    <var name="code" vt="string" defval="" range="*"/>
    <const name="unknown" vt="string" val="unknown"/>
    <var name="laps" vt="int" defval="0" range="*"/>
    <var name="starttime" vt="long" defval="0" range="*"/>
    <var name="starttime_ms" vt="int" defval="0" range="*"/>
    <var name="lasttime" vt="long" defval="0" range="*"/>
    <var name="lasttime_ms" vt="int" defval="0" range="*"/>
    <var name="lasttime2" vt="long" defval="0" range="*"/>
    <var name="lasttime2_ms" vt="int" defval="0" range="*"/>
    <var name="besttime" vt="long" defval="0" range="*"/>
    <var name="besttime_ms" vt="int" defval="0" range="*"/>
    <var name="kmh" vt="float" defval="0.0" range="*"/>
	</competitor>

  <fbevent wrappername="FeedbackEvent">
     <var name="id" vt="string" defval="" range="*" required="true" remark="feedback ID"/>
     <var name="idtype" vt="string" defval="" range="*"/>
     <var name="action" vt="string" defval="" range="enter,enter2route,enter2pre,enter2free,enter2in,enter2shortin,shortin,in,exit,occupied,V_min,V_mid,V_max,V_cruise"/>
     <const name="ident_event" vt="string" val="ident"/>
     <const name="enter_event" vt="string" val="enter"/>
     <const name="enter2route_event" vt="string" val="enter2route"/>
     <const name="enter2free_event" vt="string" val="enter2free"/>
     <const name="enter2in_event" vt="string" val="enter2in"/>
     <const name="enter2shortin_event" vt="string" val="enter2shortin"/>
     <const name="enter2pre_event" vt="string" val="enter2pre"/>
     <const name="in_event" vt="string" val="in"/>
     <const name="shortin_event" vt="string" val="shortin"/>
     <const name="exit_event" vt="string" val="exit"/>
     <const name="section_event" vt="string" val="section"/>
     <const name="pre2in_event" vt="string" val="pre2in"/>
     <const name="occupied_event" vt="string" val="occupied"/>
     <const name="free_event" vt="string" val="free"/>
     <const name="free_force_event" vt="string" val="free_force"/>
     <const name="V_min_event" vt="string" val="V_min"/>
     <const name="V_mid_event" vt="string" val="V_mid"/>
     <const name="V_max_event" vt="string" val="V_max"/>
     <const name="V_cruise_event" vt="string" val="V_cruise"/>
     <var name="endpuls" vt="bool" defval="false" remark="use the down flank of the puls"/>
     <const name="from_all" vt="string" val="all"/>
     <const name="from_all_reverse" vt="string" val="all-reverse"/>
     <var name="from" vt="string" defval="" range="*" remark="from block id (csv list for more blocks)"/>
     <var name="byroute" vt="string" defval="" range="*" remark="Comming from block x by route y. (optional)"/>
     <var name="use_timer2" vt="bool" defval="false" remark="use reverse direction timer"/>
     <var name="unlockonfree" vt="bool" defval="false" remark="Unlock the route or block on free. (endpuls)"/>
     <var name="unlockonfreeactions" vt="bool" defval="false" remark="Trigger unlock state actions."/>
     <var name="normalspeedonfree" vt="bool" defval="false" remark="Switch to normal train speed on free. (endpuls, reducespeed)"/>
     <var name="reducespeedonocc" vt="bool" defval="false" remark="Switch to reduced train speed on occ."/>
     <var name="lcid" vt="string" defval="" range="*" remark="Optional loco ID for use with competition."/>
     <var name="section" vt="string" defval="" range="*" remark=""/>
     <var name="value" vt="int" defval="0" range="*" remark=""/>
     <var name="freedepartblock" vt="bool" defval="false"/>
     <var name="freeviablock" vt="string" defval=""/>
   </fbevent>

  <mtn wrappername="Maintenance">
    <var name="date" vt="string" defval=""/>
    <var name="time_t" vt="long" defval="0" remark="time(NULL)"/>
    <var name="type" vt="string" defval=""/>
    <var name="remark" vt="string" defval=""/>
    <var name="url" vt="string" defval=""/>
    <var name="catnr" vt="string" defval="" range="*" remark="Catalog number."/>
  </mtn>
	
  <rocrail structname="RRI" wrappername="RocRail">
    <var name="servertype" vt="string" defval="standard"/>
    <var name="lang" vt="string" defval="en"/>
    <var name="fsutf8" vt="bool" defval="true"/>
    <var name="file" vt="string" defval="rocrail.ini" remark="RocRail ini-file."/>
    <var name="planfile" vt="string" defval="plan.xml" remark="RocRail plan-file."/>
    <var name="locs" vt="string" defval="NULL" range="*" remark="File name of locomotive definitions."/>
    <var name="occupancy" vt="string" defval="occ.xml" range="*" remark="File name of block occupancy."/>
    <var name="createmodplan" vt="bool" defval="false" remark="Create a modplan if the planfile does not jet exist."/>
    <var name="backup" vt="bool" defval="true" remark="Activate backup for plan files."/>
    <var name="maxbackup" vt="int" defval="100" remark="Max. number of plan backup files."/>
    <var name="backuppath" vt="string" defval="backup" range="*" remark="Location of the plan file backups."/>
    <var name="keypath" vt="string" defval="lic.dat" range="*" remark="Location of the supportkey file."/>
    <var name="libpath" vt="string" defval="." range="*" remark="Location of the rocrail libraries."/>
    <var name="issuepath" vt="string" defval="issues" range="*" remark="Location of the reported issues."/>
    <var name="imgpath" vt="string" defval="images" range="*" remark="Location of (loco)images."/>
    <var name="iconpath" vt="string" defval="icons" range="*" remark="Location of (function)icons."/>
    <const name="locodb" vt="string" val="LocoDB"/>
    <const name="cardb" vt="string" val="CarDB"/>
    <const name="traindb" vt="string" val="TrainDB"/>
    <var name="dbpath" vt="string" defval="" remark="Central loco DB."/>
    <var name="dbgroup" vt="string" defval="" remark="Group selection central loco DB."/>
    <var name="sounddoublequote" vt="bool" defval="false"/>
    <var name="soundpath" vt="string" defval="sounds" range="*" remark="Location of (loco)sounds."/>
    <var name="soundplayer" vt="string" defval="" range="*" remark="Sound player program."/>
    <var name="soundplayerlocation" vt="bool" defval="false" remark="Add loco location as second parameter."/>
    <var name="xmlscriptpath" vt="string" defval="." range="*" remark="Location of XmlScripts."/>
    <var name="decpath" vt="string" defval="decspecs" remark="reference decoder specifications to this path"/>
    <var name="runasroot" vt="bool" defval="false" remark="Force rocrail to run as root."/>
    <var name="ptenable" vt="bool" defval="true" remark="Enable Programming Track"/>
    <var name="ptiid" vt="string" defval="" range="*" remark="IID to use with programming; using default in case not set."/>
    <var name="lciid" vt="string" defval="" range="*" remark="IID to use for mobile decoders; using default in case not set."/>
    <var name="dpiid" vt="string" defval="" range="*" remark="IID to use for dispathing a loco; using default in case not set."/>
    <var name="sviid" vt="string" defval="" range="*" remark="IID to use with LN SV programming; using default in case not set."/>
    <var name="scsensor" vt="string" defval="" range="0-*" remark="Shortcut sensor ID."/>
    <var name="sciid" vt="string" defval="" range="0-*" remark="Shortcut command station IID"/>
    <var name="poweroffonexit" vt="bool" defval="true" remark="Turn track power off on server exit."/>
    <var name="poweronatinit" vt="bool" defval="false" remark="Turn track power on at server init."/>
    <var name="shutdownonexit" vt="bool" defval="false" remark="Shutdown command station on server exit."/>
    <var name="supportkey" vt="string" defval=""/>
    <var name="supportemail" vt="string" defval=""/>
    <var name="resetspfx" vt="bool" defval="false" remark="Reset all loco functions and speed at startup."/>
    <var name="weatherid" vt="string" defval="default" range="*" remark="Default weather ID."/>
    <var name="aboxhome" vt="string" defval="abox" range="*"/>
    
    <var name="latitude" vt="string" defval=""/>
    <var name="longitude" vt="string" defval=""/>
    <var name="utc" vt="int" defval="0"/>


    <r2rnet wrappername="R2RnetIni" cardinality="1" remark="Setup for the R2RNet.">
      <var name="enable" vt="bool" defval="true" remark="Enable R2Rnet."/>
      <var name="netroutes" vt="bool" defval="false" remark="Try to get the net routes from the master."/>
      <var name="id" vt="string" defval="" remark="R2Rnet ID."/>
      <var name="routes" vt="string" defval="netroutes.xml" remark="R2Rnet routes file."/>
      <const name="mc_addr" vt="string" val="224.0.1.20"/>
      <const name="mc_port" vt="int" val="8051"/>
      <var name="addr" vt="string" defval="224.0.1.20" range="*" remark="multicast address"/>
      <var name="port" vt="int" defval="8051" range="0-*" remark="multicast port"/>
      <var name="localip" vt="string" defval="" remark="Local interface IP."/>
      <var name="wio" vt="bool" defval="false" remark="Enable WIO RASCII over R2Rnet."/>
      <var name="nodeID" vt="int" defval="255" range="0-*" remark="multicast RASCII nodeID"/>
    </r2rnet>

    <presets cardinality="1" remark="Preset values" wrappername="Presets">
      <bbtpresets cardinality="1" remark="BBT preset values" wrappername="BBTPresets">
        <var name="active" vt="bool" defval="false" remark="Activate the BBT presets"/>
        <var name="bbtsteps" cat="bbt" vt="int" defval="10" range="4-16"/>
        <var name="bbtstartinterval" cat="bbt" vt="int" defval="10" range="10-50"/>
        <var name="bbtmaxdiff" cat="bbt" vt="int" defval="250" range="10-500" unit="10ms"/>
        <var name="bbtcorrection" cat="bbt" vt="int" defval="25" range="10-100" unit="%"/>
        <var name="bbtkey" cat="bbt" vt="int" defval="0" remark="0=block, 1=block-fromblock, 2=block-route, 3=block-speed, 4=block-speed+-, 5=placing"/>
      </bbtpresets>
    </presets>

    <ctcpreset cardinality="1" wrappername="CTCpreset">
      <var name="colorFree" cat="ctc" vt="int" defval="13158600" range="*"/>
      <var name="colorReserved" cat="ctc" vt="int" defval="6619135" range="*"/>
      <var name="colorOccupied" cat="ctc" vt="int" defval="6579455" range="*"/>
      <var name="colorEnter" cat="ctc" vt="int" defval="16763080" range="*"/>
      <var name="colorShunting" cat="ctc" vt="int" defval="16711680" range="*"/>
      <var name="colorRed" cat="ctc" vt="int" defval="255" range="*"/>
      <var name="colorYellow" cat="ctc" vt="int" defval="65535" range="*"/>
      <var name="colorGreen" cat="ctc" vt="int" defval="65280" range="*"/>
      <var name="colorWhite" cat="ctc" vt="int" defval="13158600" range="*"/>
      <var name="colorBlank" cat="ctc" vt="int" defval="657930" range="*"/>
      <var name="colorOn" cat="ctc" vt="int" defval="255" range="*" remark="red"/>
      <var name="colorOff" cat="ctc" vt="int" defval="65280" range="*"/>
      <var name="colorButton" cat="ctc" vt="int" defval="16763080" range="*"/>
      <var name="colorBri" cat="ctc" vt="int" defval="25" range="0-255"/>
      <var name="colorDelay" cat="ctc" vt="int" defval="1" range="0-15"/>
    </ctcpreset>

    <jsmap wrappername="JsMap">
      <var name="select" vt="int" defval="9" range="*"/>
      <var name="updown" vt="int" defval="5" range="*" remark="Y"/>
      <var name="leftright" vt="int" defval="4" range="*" remark="X"/>
      <var name="f1" vt="int" defval="0" range="*"/>
      <var name="f2" vt="int" defval="1" range="*"/>
      <var name="f3" vt="int" defval="2" range="*"/>
      <var name="f4" vt="int" defval="3" range="*"/>
      <var name="f5" vt="int" defval="-1" range="*"/>
      <var name="f6" vt="int" defval="-1" range="*"/>
      <var name="f7" vt="int" defval="-1" range="*"/>
      <var name="f8" vt="int" defval="-1" range="*"/>
      <var name="f9" vt="int" defval="-1" range="*"/>
      <var name="f10" vt="int" defval="-1" range="*"/>
      <var name="f11" vt="int" defval="-1" range="*"/>
      <var name="f12" vt="int" defval="-1" range="*"/>
      <var name="f13" vt="int" defval="-1" range="*"/>
      <var name="f14" vt="int" defval="-1" range="*"/>
      <var name="f15" vt="int" defval="-1" range="*"/>
      <var name="f16" vt="int" defval="-1" range="*"/>
      <var name="f17" vt="int" defval="-1" range="*"/>
      <var name="f18" vt="int" defval="-1" range="*"/>
      <var name="f19" vt="int" defval="-1" range="*"/>
      <var name="f20" vt="int" defval="-1" range="*"/>
      <var name="f21" vt="int" defval="-1" range="*"/>
      <var name="f22" vt="int" defval="-1" range="*"/>
      <var name="f23" vt="int" defval="-1" range="*"/>
      <var name="f24" vt="int" defval="-1" range="*"/>
      <var name="f25" vt="int" defval="-1" range="*"/>
      <var name="f26" vt="int" defval="-1" range="*"/>
      <var name="f27" vt="int" defval="-1" range="*"/>
      <var name="f28" vt="int" defval="-1" range="*"/>
      <var name="throttle" vt="int" defval="-1" range="*"/>
      <var name="reverse" vt="int" defval="4" range="*"/>
      <var name="light" vt="int" defval="5" range="*"/>
      <var name="stop" vt="int" defval="6" range="*"/>
      <var name="poweroff" vt="int" defval="7" range="*"/>
      <var name="poweron" vt="int" defval="8" range="*"/>
      <var name="repeat" vt="int" defval="500" range="*" unit="ms" remark="Repeat interval in ms for the updown axis. (value 0 disables the repeat)"/>
      <var name="step" vt="int" defval="1" range="1-9" remark="speed step per click"/>
    </jsmap>
    <clock wrappername="Clock" cardinality="1" remark="clock synchronizer.">
      <var name="time" vt="long" defval="0" range="*" remark="time in seconds"/>
      <var name="divider" vt="int" defval="1" range="0-100" remark="time devider: 1 = realtime"/>
      <var name="update" vt="int" defval="1" range="1-60" remark="update frequency in minutes"/>
      <var name="year" vt="int" defval="0" range="0-*"/>
      <var name="month" vt="int" defval="0" range="0-12"/>
      <var name="mday" vt="int" defval="0" range="0-31"/>
      <var name="wday" vt="int" defval="0" range="0-6"/>
      <var name="hour" vt="int" defval="24" range="0-24" remark="start hour; 24 not used"/>
      <var name="minute" vt="int" defval="60" range="0-60" remark="start minute; 60 not used"/>
      <var name="temp" vt="int" defval="20" range="-127...127" remark="Model temperature."/>
      <var name="bri" vt="int" defval="255" range="0-255" remark="Brightness for displays."/>
      <var name="lux" vt="int" defval="0" remark="Light intensity in lux."/>
      <var name="pressure" vt="int" defval="0" remark="Pressure in hPa."/>
      <var name="humidity" vt="int" defval="0" remark="Humidity in percent."/>
      <var name="temp100" vt="int" defval="0" remark="Hundreds of real temperature."/>
      <var name="stopclockatpoweroff" vt="bool" defval="true"/>
      <var name="semirealtime" vt="bool" defval="false"/>
      <const name="freeze" vt="string" val="freeze"/>
      <const name="go" vt="string" val="go"/>
      <const name="set" vt="string" val="set"/>
      <const name="changetemp" vt="string" val="changetemp"/>
      <const name="sync" vt="string" val="sync"/>
      <const name="get" vt="string" val="get"/>
      <var name="cmd" vt="string" defval="" range="*"/>
      <var name="state" cat="internal" vt="string" defval="go" range="go,freeze" remark="Current state of clock."/>
    </clock>
    <SnmpService cardinality="1">
      <var name="active" vt="bool" defval="false" remark="Activate snmp service."/>
      <var name="community" vt="string" defval="public" range="*"/>
      <var name="version" vt="int" defval="1" range="0-65535" remark="SNMP version."/>
      <var name="port" vt="int" defval="161" range="0-65535" remark="Port number for server socket."/>
      <var name="traphost" vt="string" defval="localhost" range="*" remark="Trap host."/>
      <var name="trapport" vt="int" defval="0" range="0-65535" remark="Trap port number."/>
      <var name="enterprise" vt="int" defval="37707" range="0-*" remark="http://www.iana.org/assignments/enterprise-numbers"/>
      <var name="family" vt="int" defval="1" range="0-65535" remark="Product family; Default Rocrail=1."/>
      <var name="product" vt="int" defval="1" range="0-65535" remark="Product; Default Server=1."/>
      <var name="contact" vt="string" defval="support@rocrail.net" range="*" remark="Contact address."/>
      <var name="location" vt="string" defval="local" range="*" remark="Rocrail physical location."/>
      <var name="description" vt="string" defval="Model Railroad Control System" range="*" remark="Rocrail server description."/>

      <const name="systemList"  vt="string" val="1.3.6.1.2.1.1"/>
      <const name="sysDescr"    vt="string" val="1.3.6.1.2.1.1.1.0"/>
      <const name="sysObjectID" vt="string" val="1.3.6.1.2.1.1.2.0"/>
      <const name="sysUpTime"   vt="string" val="1.3.6.1.2.1.1.3.0"/>
      <const name="sysContact"  vt="string" val="1.3.6.1.2.1.1.4.0"/>
      <const name="sysName"     vt="string" val="1.3.6.1.2.1.1.5.0"/>
      <const name="sysLocation" vt="string" val="1.3.6.1.2.1.1.6.0"/>
      <const name="sysServices" vt="string" val="1.3.6.1.2.1.1.7.0"/>

      <const name="trapColdStart" vt="string" val="1.3.6.1.6.3.1.1.5.1.0"/>
      <const name="trapLinkUp"    vt="string" val="1.3.6.1.6.3.1.1.5.4.0"/>
      <const name="trapLinkDown"  vt="string" val="1.3.6.1.6.3.1.1.5.3.0"/>
    
      <const name="privateList"       vt="string" val="1.3.6.1.4.1.37707.1.1"/>
      <const name="privBuildTime"     vt="string" val="1.3.6.1.4.1.37707.1.1.1.0"/>
      <const name="privThreadCnt"     vt="string" val="1.3.6.1.4.1.37707.1.1.2.0"/>
      <const name="privConnectionCnt" vt="string" val="1.3.6.1.4.1.37707.1.1.3.0"/>
      <const name="privMemStats"      vt="string" val="1.3.6.1.4.1.37707.1.1.4.0"/>
      <const name="privLastExc"       vt="string" val="1.3.6.1.4.1.37707.1.1.5.0"/>
      
      <const name="privTrapException" vt="string" val="1.3.6.1.4.1.37707.1.1.10.1.0"/>
      <const name="privTrapShutDown"  vt="string" val="1.3.6.1.4.1.37707.1.1.10.2.0"/>
    </SnmpService>
    <http wrappername="HttpService" cardinality="1" >
      <var name="port" vt="int" defval="8008" range="0-65535" remark="Port number for server socket. Deactivated when 0."/>
      <var name="path" vt="string" defval="." range="*" remark="Path where to look for external HTML documents."/>
      <var name="enable" vt="bool" defval="true"/>
      <var name="shortids" vt="bool" defval="false"/>
      <webclient wrappername="WebClient" cardinality="1">
        <var name="port" vt="int" defval="0" range="0-65535" remark="Port number server socket for webclients. Deactivated when 0."/>
        <var name="svgpath1" vt="string" defval="svg/themes/SpDrS60" remark="scan this path for svg symbols"/>
        <var name="svgpath2" vt="string" defval="svg/themes/Accessories" remark="scan this path for svg symbols"/>
        <var name="svgpath3" vt="string" defval="svg/themes/Roads" remark="scan this path for svg symbols"/>
        <var name="svgpath4" vt="string" defval="." remark="scan this path for svg symbols"/>
        <var name="svgpath5" vt="string" defval="." remark="scan this path for svg symbols"/>
        <var name="svgpath6" vt="string" defval="." remark="scan this path for svg symbols"/>
        <var name="svguserprops" vt="string" defval=""/>
        <var name="imgpath" vt="string" defval="images" range="*" remark="Location of (loco)images."/>
        <var name="webpath" vt="string" defval="web" range="*" remark="Location of the web files."/>
		    <rocweb cardinality="1" wrappername="Rocweb">
		      <var name="allspeedsteps" vt="bool" defval="false"/>
		      <var name="binstate" vt="bool" defval="false"/>
		      <var name="category" vt="string" defval="engine"/>
		      <var name="color" vt="string" defval="none"/>
		      <var name="debug" vt="bool" defval="false"/>
		      <var name="lang" vt="string" defval="en"/>
		      <var name="locoSelected" vt="string" defval=""/>
		      <var name="locoSelected0" vt="string" defval=""/>
		      <var name="locoSelected1" vt="string" defval=""/>
          <var name="locoSelected2" vt="string" defval=""/>
		      <var name="locoSelected3" vt="string" defval=""/>
          <var name="locosort" vt="string" defval="id"/>
		      <var name="moduleview" vt="bool" defval="true"/>
		      <var name="monitor" vt="bool" defval="false"/>
		      <var name="scale" vt="int" defval="1"/>
		      <var name="secondhand" vt="bool" defval="false"/>
		      <var name="showblockid" vt="bool" defval="false"/>
          <var name="showlocoimage" vt="bool" defval="false"/>
          <var name="showocc" vt="bool" defval="false"/>
          <var name="showroutes" vt="bool" defval="false"/>
          <var name="showtrainid" vt="bool" defval="false"/>
          <var name="simsensors" vt="bool" defval="false"/>
          <var name="slavecode" vt="string" defval=""/>
          <var name="sliderdelta" vt="int" defval="5"/>
          <var name="speedbuttons" vt="bool" defval="false"/>
          <var name="showallschedules" vt="bool" defval="false"/>
          <var name="showroutesonswitches" vt="bool" defval="false"/>
          <var name="analogclock" vt="bool" defval="true"/>
		    </rocweb>
      </webclient>
    </http>
    <service wrappername="Service" cardinality="1" remark="Service for remote Rocrail to negotiate about a loc destination.">
      <var name="sname" vt="string" defval="" range="*" remark="Servicer name to use in NetReq and NetRsp."/>
      <var name="port" vt="int" defval="0" range="0-65535" remark="Port number for server socket."/>
    </service>
    <devices wrappername="Devices" cardinality="1" remark="List of available server devices.">
      <var name="serial" vt="string" defval="" range="*" remark="CSV list of serial devices."/>
    </devices>
    <trace wrappername="Trace">
      <var name="rfile" vt="string" defval="rocrail"/>
      <var name="gfile" vt="string" defval="rocview"/>
      <var name="nfile" vt="string" defval="rocnetnode"/>
      <var name="cfile" vt="string" defval="" remark="changelog"/>
      <var name="automatic" vt="bool" defval="false" remark="Trace level for extra info in automatic mode."/>
      <var name="permission" vt="bool" defval="true"/>
      <var name="byte" vt="bool" defval="false" remark="Activates dump tracelevel."/>
      <var name="monitor" vt="bool" defval="false" remark="Activates monitor tracelevel."/>
      <var name="parse" vt="bool" defval="false" remark="Activates parse tracelevel."/>
      <var name="info" vt="bool" defval="false" range="*" remark="Activates info trace level."/>
      <var name="meminfo" vt="bool" defval="false" range="*" remark="Activates memory info trace level."/>
      <var name="calc" vt="bool" defval="true" range="*" remark="Activates calculation trace level."/>
      <var name="ctc" vt="bool" defval="false" range="*"/>
      <var name="develop" vt="bool" defval="false" range="*"/>
      <var name="find" vt="bool" defval="false" range="*" remark="Activates find trace level."/>
      <var name="routing" vt="bool" defval="false" remark="Activates router tracelevel."/>
      <var name="protpath" vt="string" defval="trace" range="*" remark="Protocol path; Where to write the trace files. (Use relative only if using http service.) Path is relative to pwd!"/>
      <var name="logpath" vt="string" defval="log" range="*"/>
      <var name="unique" vt="bool" defval="false" range="*" remark="Create a unique trace filename at startup."/>
      <var name="size" vt="int" defval="100" range="10-*" unit="kb" remark="Filesize of trace files."/>
      <var name="nr" vt="int" defval="3" range="*" remark="Number of continuous trace files. In case of 0 or 1: All traces are written in one file disregarding filesize."/>
      <var name="logsize" vt="int" defval="100" range="10-*" unit="kb" remark="Filesize of trace files."/>
      <var name="lognr" vt="int" defval="3" range="*" remark="Number of continuous trace files. In case of 0 or 1: All traces are written in one file disregarding filesize."/>
      <var name="exceptionfile" vt="bool" defval="false" range="*" remark="Create extra file for exceptions."/>
      <var name="invoke" vt="string" defval="./xmail.pl" range="*" remark="External program or script to invoke on exception file creation."/>
      <var name="invokeasync" vt="bool" defval="false" range="*" remark="The invokation will take place in a separate thread."/>
      <var name="dumpsize" vt="int" defval="128" range="16-*" unit="byte" remark="Max. byte dump size."/>
    </trace>
    
    <cmdmaplist cardinality="1" wrappername="CmdMapList">
      <cmdmap cardinality="n" wrappername="CmdMap">
        <var name="source_iid" vt="string" defval=""/>
        <var name="source_id" vt="string" defval=""/>
        <var name="source_bus" vt="int" defval="0"/>
        <var name="source_addr" vt="int" defval="0"/>
        <var name="source_port" vt="int" defval="0"/>
        <var name="source_cmd" vt="string" defval=""/>
        <var name="target_iid" vt="string" defval=""/>
        <var name="target_id" vt="string" defval=""/>
        <var name="target_bus" vt="int" defval="0"/>
        <var name="target_addr" vt="int" defval="0"/>
        <var name="target_port" vt="int" defval="0"/>
        <var name="target_cmd" vt="string" defval=""/>
        <var name="target_type" vt="string" defval="" range="sw,sg,co"/>
      </cmdmap>    
    </cmdmaplist>
    
    <digint cardinality="n" wrappername="DigInt" remark="Digital Interface definition.">
      <var name="iid" vt="string" defval="NULL" remark="Interface ID." required="true"/>
      <var name="shortiid" vt="string" defval="" remark="Short Interface ID."/>
      <var name="uid" vt="int" defval="0" remark="Interface UID."/>
      <var name="guid" vt="string" defval="" remark="GUID"/>
      <var name="uuid" vt="string" defval="" remark="UUID"/>
      <var name="desc" vt="string" defval="" remark="Description."/>
      <var name="iid_master" vt="string" defval="NULL" remark="Interface ID (loconet)." required="false"/>
      <var name="iid_slave" vt="string" defval="NULL" remark="Interface ID (ddl)." required="false"/>
      <var name="requestevents" vt="bool" defval="false" remark="Inform digint of field events."/>
      <var name="monitoring" vt="bool" defval="true" remark="Trace with monitor level instead of info."/>
      <var name="onthefly" vt="bool" defval="false" remark="Load the new digint on the fly."/>
      <var name="defaultcs" vt="bool" defval="false" remark="Use this lib as default in case of on the fly."/>
      <var name="critical" vt="bool" defval="false" remark="If set this CS must be online to be able the automatic mode."/>
      
      <var name="watchdog" vt="bool" defval="false" remark="Enable watchdog."/>
      <var name="watchdogInt" vt="int" defval="0" remark="Watchdog interval in ms units."/>
      <var name="watchdogNodeID" vt="int" defval="0"/>
      <var name="watchdogAddr" vt="int" defval="0"/>
      <var name="watchdogPort" vt="int" defval="0"/>
      <var name="watchdogGate" vt="int" defval="0"/>
      <var name="watchdogExclude" vt="string" defval=""/>

      <const name="p50" vt="string" val="p50"/>
      <const name="p50x" vt="string" val="p50x"/>
      <const name="srcp" vt="string" val="srcp"/>
      <const name="hsi88" vt="string" val="hsi88"/>
      <const name="barjut" vt="string" val="barjut"/>
      <const name="rnet" vt="string" val="rnet"/>
      <const name="zimo" vt="string" val="zimo"/>
      <const name="dinamo" vt="string" val="dinamo"/>
      <const name="slx" vt="string" val="slx"/>
      <const name="ecos" vt="string" val="ecos"/>
      <const name="loconet" vt="string" val="loconet"/>
      <const name="om32" vt="string" val="om32"/>
      <const name="opendcc" vt="string" val="opendcc"/>
      <const name="vcs" vt="string" val="virtual"/>
      <const name="rocnet" vt="string" val="rocnet"/>
      <const name="clock" vt="string" val="clock"/>
      <const name="sprog" vt="string" val="sprog"/>
      <const name="dcc232" vt="string" val="dcc232"/>
      <const name="nce" vt="string" val="nce"/>
      <const name="zimobin" vt="string" val="zimobin"/>
      <const name="rfid12" vt="string" val="rfid12"/>
      <const name="rclink" vt="string" val="rclink"/>
      <const name="mttmfcc" vt="string" val="mttmfcc"/>
      <const name="xnet" vt="string" val="xnet"/>
      <const name="rmx" vt="string" val="rmx"/>
      <const name="massoth" vt="string" val="massoth"/>
      <const name="tamsmc" vt="string" val="tamsmc"/>
      <const name="muet" vt="string" val="muet"/>
      <const name="bidib" vt="string" val="bidib"/>
      <const name="zs2" vt="string" val="zs2"/>
      <const name="rcan" vt="string" val="rcan"/>
      <const name="perir" vt="string" val="perir"/>
      <const name="editspro" vt="string" val="editspro"/>
      <const name="infracar" vt="string" val="infracar"/>
      <const name="cti" vt="string" val="cti"/>
      <const name="easydcc" vt="string" val="easydcc"/>
      <const name="z21" vt="string" val="z21"/>
      <const name="rocomp" vt="string" val="rocomp"/>
      <const name="zimocan" vt="string" val="zimocan"/>
      <const name="got" vt="string" val="got"/>
      <const name="esunavi" vt="string" val="esunavi"/>
      <const name="spl" vt="string" val="spl"/>
      <const name="inter10" vt="string" val="inter10"/>
      <const name="hue" vt="string" val="hue"/>
      <const name="dccar" vt="string" val="dccar"/>
      <const name="dmxartnet" vt="string" val="dmxartnet"/>
      <const name="dmx4all" vt="string" val="dmx4all"/>
      <const name="raptor" vt="string" val="raptor"/>
      <const name="dmxeurolite" vt="string" val="dmxeurolite"/>
      <const name="lan" vt="string" val="lan"/>
      <const name="rascii" vt="string" val="rascii"/>
      <const name="rfbooster" vt="string" val="rfbooster"/>
      <const name="dccpp" vt="string" val="dccpp"/>
      <const name="lcm" vt="string" val="lcm"/>
      <const name="dumper" vt="string" val="dumper"/>
      <const name="milight" vt="string" val="milight"/>
      <const name="wmz21" vt="string" val="wmz21"/>
      <const name="rpic" vt="string" val="rpic"/>
      <const name="openhab" vt="string" val="openhab"/>
      <const name="dsd2010" vt="string" val="dsd2010"/>
      <const name="modbus" vt="string" val="modbus"/>
      <const name="mbus" vt="string" val="mbus"/>
      <const name="ahome" vt="string" val="ahome"/>
      <const name="lodi" vt="string" val="lodi"/>
      <const name="uudp" vt="string" val="uudp"/>
      <const name="stc" vt="string" val="stc"/>
      <const name="wio" vt="string" val="wio"/>
      <const name="lsdigital88" vt="string" val="lsdigital88"/>
      <const name="znf" vt="string" val="znf"/>
      <var name="lib" vt="string" defval="virtual"/>

      <var name="libpath" vt="string" defval="."/>

      <!-- -->
      <const name="sublib_serial" vt="string" val="serial"/>
      <const name="sublib_socket" vt="string" val="socket"/>
      <const name="sublib_usb" vt="string" val="usb"/>
      <const name="sublib_udp" vt="string" val="udp"/>
      <const name="sublib_tcp" vt="string" val="tcp"/>
      <const name="sublib_ulni" vt="string" val="ulni"/>
      <const name="sublib_native" vt="string" val="native"/>
      <const name="sublib_default" vt="string" val="default"/>
      <const name="sublib_lenz_elite" vt="string" val="elite"/>
      <const name="sublib_lenz_opendcc" vt="string" val="opendcc"/>
      <const name="sublib_lenz_atlas" vt="string" val="atlas"/>
      <const name="sublib_lenz_xntcp" vt="string" val="xntcp"/>
      <const name="sublib_lenz_cttran" vt="string" val="cttran"/>
      <const name="sublib_lenz_ethernet" vt="string" val="ethernet"/>
      <const name="sublib_digitrax_pr3" vt="string" val="pr3"/>
      <const name="sublib_mqtt" vt="string" val="mqtt"/>
      <const name="sublib_can" vt="string" val="can"/>
      <const name="sublib_dummy" vt="string" val="dummy"/>
      <const name="sublib_ascii" vt="string" val="ascii"/>
      <const name="sublib_netbidib" vt="string" val="netbidib"/>
      <var name="sublib" vt="string" defval="default"/>

      <!-- Serial connection: Fixed for most interfaces and controllers -->
      <!-- p50: 2400,8,2,1,none,cts -->
      <!-- p50x: 2400-19200,8,2,1,none,cts -->
      <!-- slx: 2400-19200,8,2,1,none,no -->
      <!-- hsi88: 9600,8,1,1,none,cts -->
      <var name="device" vt="string" defval=""/>
      <var name="useddevices" vt="string" defval="" remark="Devices used by all digints."/>
      <var name="bps" vt="int" defval="2400" range="1200,2400,4800,9600,19200,38400,57600" unit="bps"/>
      <var name="bits" vt="int" defval="8" range="*"/>
      <var name="stopbits" vt="int" defval="2" range="*"/>
      <const name="none" vt="string" val="none"/>
      <const name="even" vt="string" val="even"/>
      <const name="odd" vt="string" val="odd"/>
      <var name="parity" vt="string" defval="none" range="none,even,odd"/>
      <const name="cts" vt="string" val="cts"/>
      <const name="dsr" vt="string" val="dsr"/>
      <const name="xon" vt="string" val="xon"/>
      <const name="no" vt="string" val="no"/>
      <var name="flow" vt="string" defval="cts" range="cts,dsr,xon,no"/>
      <var name="ctsretry" vt="int" defval="1000" range="*" unit="ms" remark="wait for CTS line to come up."/>
      <var name="timeout" vt="int" defval="1000" range="*" unit="ms"/>
      <var name="rtsdisabled" vt="bool" defval="false" remark="Disables RTS line for USB converters. (Depends on type if this is needed.)"/>
      <var name="dtr" vt="int" defval="0" remark="0=dont touch, 1=true, 2=false"/>
      <var name="rts" vt="int" defval="0" remark="0=dont touch, 1=true, 2=false"/>
      <var name="poweratstartup" vt="bool" defval="false" remark="Power on at startup."/>
      <var name="v0onebreak" vt="bool" defval="false"/>
      <var name="echocommands" vt="bool" defval="false"/>
      <var name="swapgates" vt="bool" defval="false"/>
      <var name="readonly" vt="bool" defval="false" remark="Sniffer mode."/>
      <var name="binary" vt="bool" defval="false"/>

      <var name="sod_atconnected" vt="bool" defval="true"/>
      <var name="sod_locolist" vt="bool" defval="true"/>
      <var name="sod_switchlist" vt="bool" defval="true"/>
      <var name="sod_sensorstate" vt="bool" defval="true"/>
      <var name="sod_querybus" vt="bool" defval="true"/>
      <var name="sod_railcomstate" vt="bool" defval="true"/>
      <var name="sod_querymodules" vt="bool" defval="true"/>
      
      <!-- all -->
      <const name="FADA" vt="int" val="0"/>
      <const name="MADA" vt="int" val="1"/>
      <const name="PADA" vt="int" val="2"/>
      <const name="FADAM" vt="int" val="3"/>
      <const name="A2ID" vt="int" val="4"/>
      <var name="prefix" vt="string" defval=""/>
      <var name="sw2st" vt="bool" defval="false" remark="Use route commands instead of switch. WLANmaus."/>

      <var name="ping" vt="int" defval="0" range="*" remark="Ping interval for a [Dead man's switch]."/>
      
      <var name="absent" vt="bool" defval="false" remark="Set absent flag in case a loco did leave a block."/>
      <var name="fbmod" vt="int" defval="0" range="*" remark="Number of connected feedback modules of 8 inputs."/>
      <var name="fbpollsod" vt="bool" defval="false" remark="Poll sensor events at SoD."/>
      <var name="fbpoll" vt="bool" defval="false" remark="Poll sensor events."/>
      <var name="fbpollreg" vt="bool" defval="false" remark="Poll registers."/>
      <var name="fbreset" vt="bool" defval="false" range="*" remark="Reset sensors automatically to low."/>
      <var name="secureack" vt="bool" defval="false" remark="Enable sensor acknowledge."/>
      <var name="ptsupport" vt="bool" defval="true" remark="Check for PT events."/>
      <var name="systeminfo" vt="bool" defval="true" remark="Activate system info if available."/>
      <var name="stress" vt="bool" defval="false" remark="send every 10ms a loconet packet to stress the network"/>
      <var name="stressinterval" vt="int" defval="10"/>
      <var name="identdelay" vt="int" defval="2500" unit="ms" remark="Delay before sending a low sensor state for ident codes."/>
      <var name="fastclock" vt="bool" defval="false" remark="send fast clock commands to the connected command station"/>
      <var name="ignorebusy" vt="bool" defval="false" remark="ignore the busy message from command station"/>
      <var name="protver" vt="int" defval="0" remark="Protocol version. Default implementation is 0."/>
      <var name="locolist" vt="bool" defval="false" remark="Initial send the digint the list of locos."/>
      <var name="switchlist" vt="bool" defval="false" remark="Initial send the digint the list of switches."/>
      <var name="declist" vt="bool" defval="false" remark="Initial send the digint the list of decoders."/>
      <var name="sensorlist" vt="bool" defval="false" remark="Initial send the digint the list of sensors."/>
      <var name="overrule" vt="bool" defval="true" remark="Overrule throttle commands."/>
      <var name="asciiprotocol" vt="bool" defval="false" remark="Use an ASCII protocol."/>
      <var name="reportstate" vt="bool" defval="true"/>
      <var name="sensorsimulate" vt="bool" defval="true"/>
      <var name="sensoroffdelay" vt="int" defval="0"/>
      <var name="purgetime" vt="int" defval="30" unit="s" range="0-*" remark="CS engine idle timeout."/>
      <var name="purge" vt="bool" defval="false" remark="Activate purging."/>
      <var name="nrslots" vt="int" defval="12" range="0-*" remark="Number of slots."/>
      <var name="sync" vt="bool" defval="false" remark="synchronise CS with Rocrail"/>
      <var name="xnetgbm" vt="bool" defval="false" remark="GMB by Xpressnet."/>
      <var name="boosterevents" vt="bool" defval="false" remark="Activate booster events."/>
      <var name="bri" vt="int" defval="50" range="0-*" remark="Brightness of mobile lights."/>
      <var name="options" vt="int" defval="0" range="0-*" remark="Library specific options bitmap."/>
      <var name="supportkey" vt="bool" defval="false" remark="Valid support key."/>
      
      <!-- HSI88 -->
      <hsi88 remark="HSI88 init" wrappername="HSI88">
        <var name="fbleft" vt="int" defval="0" remark="HSI-88 number of modules of 8 inputs on left port" />
        <var name="fbmiddle" vt="int" defval="0" remark="HSI-88 number of modules of 8 inputs on middle port" />
        <var name="fbright" vt="int" defval="0" remark="HSI-88 number of modules of 8 inputs on right port" />
        <var name="smooth" vt="bool" defval="false" remark="HSI-88 smooth out fb contact noice; fb must be at least 100ms low before sending event." />
        <var name="triggertime" vt="int" defval="100" units="ms" range="100-2000"/>
      </hsi88>

      <dccpp remark="DCCpp" wrappername="DCCpp">
        <var name="join" vt="bool" defval="false"/>
        <var name="acc4byte" vt="bool" defval="false"/>
        <var name="dtr" vt="int" defval="0" remark="0=dont touch, 1=true, 2=false"/>
        <var name="rts" vt="int" defval="0" remark="0=dont touch, 1=true, 2=false"/>
      </dccpp>

      <var name="swtime" vt="int" defval="250" range="*" unit="ms" remark="Switch time."/>
      <var name="swoffset" vt="int" defval="0" remark="Offset for the accessory addresses."/>
      <var name="fboffset" vt="int" defval="0" remark="Offset for the feedback units."/>
      <var name="swinvert" vt="bool" defval="false" remark="Invert all turnouts/switches."/>

      <var name="fielddata" vt="string" defval="" remark="Field data shutdown state."/>
      <var name="dummyio" vt="bool" defval="false" remark="Do not use real I/O."/>
      <var name="readfb" vt="bool" defval="true" remark="Poll the feedback units."/>
      <var name="readbidi" vt="bool" defval="false" remark="Poll the bidi units."/>
      <var name="nonebidiunits" vt="string" defval="" remark="Comma separated list of none BiDi sensor units of 8."/>
      <var name="startpwstate" vt="bool" defval="false" remark="Powerstate at startup."/>
      <var name="pw4acc" vt="bool" defval="true" remark="Power must be on for accessory commands."/>
      <var name="psleep" vt="int" defval="200" unit="ms" remark="Sleep between polling of the feedback units."/>
      <var name="ignorepowercmds" vt="bool" defval="false" remark="Ignore subsequetial power commands."/>
      <var name="ignorepoweroffonghost" vt="bool" defval="false" remark="Ignore power off commands triggered by ghost trains."/>
      
      <!-- tcpip connection -->
      <var name="host" vt="string" defval="" remark="hostname."/>
      <var name="port" vt="int" defval="0" remark="command port."/>
      <var name="userid" vt="string" defval="" remark="user ID"/>
      <var name="password" vt="string" defval=""/>
      <var name="udpportTX" vt="int" defval="0" remark="send port."/>
      <var name="udpportRX" vt="int" defval="0" remark="receive port."/>
      <var name="localip" vt="string" defval="" remark="Local interface IP."/>
      <var name="connectionretry" vt="int" defval="10" remark="Number of retries before give up."/>
      <var name="retrysleep" vt="int" defval="1" remark="Seconds between the retries."/>
      <var name="keepalive" vt="int" defval="10" unit="s" remark="Seconds between the keep alive requests."/>
      
      <modbus remark="Modbus options" wrappername="Modbus">
        <var name="poll_input" vt="bool" defval="false"/>
        <var name="poll_holding" vt="bool" defval="false"/>
        <var name="poll_register" vt="bool" defval="false"/>
        <var name="poll_coil" vt="bool" defval="false"/>
        <var name="coil_input" vt="bool" defval="false" remark="Report coil event as input instead of output."/>
        <var name="clocksubip" vt="int" defval="0" remark="Sub IP address"/>
        <var name="clockregister" vt="int" defval="0"/>
        <modbusdev remark="Modbus device" wrappername="ModbusDev">
          <var name="id" vt="string" defval="" remark="Device ID"/>
          <var name="subip" vt="int" defval="0" remark="Sub IP address"/>
          <var name="unitid" vt="int" defval="0" remark="Slave Unit-ID: 0=master"/>
          <var name="input_begin" vt="int" defval="0"/>
          <var name="input_end" vt="int" defval="0"/>
          <var name="coil_begin" vt="int" defval="0"/>
          <var name="coil_end" vt="int" defval="0"/>
          <var name="holding_begin" vt="int" defval="0"/>
          <var name="holding_end" vt="int" defval="0"/>
          <var name="register_begin" vt="int" defval="0"/>
          <var name="register_end" vt="int" defval="0"/>
        </modbusdev>
      </modbus>

      <hue remark="HUE options" wrappername="HUE">
        <var name="temp" vt="int" defval="0" remark="Temperature sensor address."/>
        <var name="lux" vt="int" defval="0" remark="Light level sensor address."/>
        <var name="saturation" vt="bool" defval="false"/>
        <var name="backup" vt="bool" defval="false"/>
        <var name="backuppath" vt="string" defval="." range="*" remark="File path name"/>
      </hue>

      <spl remark="SPL options" wrappername="SPL">
        <var name="fromaddr" vt="int" defval="0"/>
        <var name="toaddr" vt="int" defval="0"/>
        <var name="nrleds" vt="int" defval="5"/>
      </spl>

      <opendcc remark="OpenDCC options" wrappername="OpenDCC">
        <var name="lib" vt="string" defval="p50x"/>
        <var name="loccnfg" vt="bool" defval="false" remark="send loco config commands"/>
        <var name="fastclock" vt="bool" defval="false" remark="Fast clock flag read from SO 2."/>
        <var name="bidi" vt="bool" defval="true" remark="Activate BiDi support."/>
      </opendcc>

      <upnp remark="UPnP options" wrappername="UPnP">
        <var name="alive" vt="bool" defval="false" remark="Send spontanious alive notifications."/>
        <var name="discoverycount" vt="int" defval="2" remark="Number of discovery broadcasts."/>
        <upnpnode cardinality="n" remark="UPnP device properties" wrappername="UPnPnode">
          <var name="server" vt="string" defval=""/>
          <var name="ip" vt="string" defval=""/>
          <var name="st" vt="string" defval=""/>
          <var name="uuid" vt="string" defval=""/>
          <var name="usn" vt="string" defval=""/>
          <var name="location" vt="string" defval=""/>
          <var name="udn" vt="string" defval=""/>
          <var name="type" vt="string" defval=""/>
          <var name="baseurl" vt="string" defval=""/>
          <var name="friendlyname" vt="string" defval=""/>
          <var name="manu" vt="string" defval=""/>
          <var name="manuurl" vt="string" defval=""/>
          <var name="modeldesc" vt="string" defval=""/>
          <var name="modelname" vt="string" defval=""/>
          <var name="modelnr" vt="string" defval=""/>
          <var name="modelurl" vt="string" defval=""/>
          <var name="sn" vt="string" defval=""/>
          <var name="upc" vt="string" defval=""/>
          <var name="presurl" vt="string" defval=""/>
          <var name="userkey" vt="string" defval=""/>
          <var name="userval" vt="string" defval=""/>
          <upnpservice cardinality="n" remark="UPnP device service" wrappername="UPnPservice">
            <var name="location" vt="string" defval=""/>
            <var name="udn" vt="string" defval=""/>
            <var name="type" vt="string" defval=""/>
            <var name="baseurl" vt="string" defval=""/>
            <var name="serviceid" vt="string" defval=""/>
            <var name="serviceurl" vt="string" defval=""/>
            <var name="controlurl" vt="string" defval=""/>
            <var name="eventurl" vt="string" defval=""/>
          </upnpservice>
        </upnpnode>
      </upnp>
      
      <bidib remark="BiDiB options" wrappername="BiDiB">
        <var name="secAck" vt="bool" defval="false" remark="Enable secure acknowledge."/>
        <var name="secAckInt" vt="int" defval="20" remark="Secure acknowledge interval in 10ms units."/>
        <var name="manual2bidib" vt="bool" defval="false" remark="Map MSG_CS_ACCESSORY_MANUAL messages to BiDiB commands."/>
        <var name="resetmanop" vt="bool" defval="true" remark="Reset a manually operated accessory to its known state."/>
        <var name="queryinputs" vt="bool" defval="false"/>
        <var name="discover" vt="bool" defval="false"/>
        <var name="wizardport" vt="int" defval="62875" remark="Service port for the Wizard."/>
        <bidibnode cardinality="n" remark="BiDiB options" wrappername="BiDiBnode">
          <const name="class_bridge" vt="string" val="bridge"/>
          <const name="class_sensor" vt="string" val="sensor"/>
          <const name="class_ui" vt="string" val="ui"/>
          <const name="class_dcc_main" vt="string" val="dcc_main"/>
          <const name="class_dcc_prog" vt="string" val="dcc_prog"/>
          <const name="class_accessory" vt="string" val="accessory"/>
          <const name="class_booster" vt="string" val="booster"/>
          <const name="class_switch" vt="string" val="switch"/>
          <var name="uid" vt="int" defval="0" remark="Vendor product/serialnumber ID."/>
          <var name="class" vt="string" defval="sensor" remark="Class ID."/>
          <var name="classmnemonic" vt="string" defval="sensor" remark="Class ID mnemonic."/>
          <var name="path" vt="string" defval="0.0.0.0" remark="Local path."/>
          <var name="vendor" vt="int" defval="0" remark="DCC vendor ID."/>
          <var name="version" vt="string" defval="" remark="Software version."/>
          <var name="sensorcnt" vt="int" defval="0" remark="Number of sensors."/>
          <var name="switchcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="lightcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="inputcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="servocnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="soundcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="motorcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="analogcnt" vt="int" defval="0" remark="Number of ports."/>
          <var name="flat" vt="bool" defval="false" remark="Flat port model"/>
          <var name="key" vt="string" defval=""/>
          <var name="parentkey" vt="string" defval=""/>
          <var name="productname" vt="string" defval=""/>
          <var name="username" vt="string" defval=""/>
          <var name="fwup" vt="bool" defval="false" remark="Firmware update flag."/>
        </bidibnode>
      </bidib>

      <srcp remark="SRCP init" wrappername="SRCP">
        <var name="cmdport" vt="int" defval="4303" remark="SRCP command port."/>
        <var name="srcpbus_server" vt="int" defval="0" remark="server bus"/>
        <var name="srcpbusGL_m" vt="int" defval="1" remark="maerklin generic loco bus"/>
        <var name="srcpbusGL_ns" vt="int" defval="2" remark="nmra dcc generic loco with short addr bus"/>
        <var name="srcpbusGL_nl" vt="int" defval="3" remark="nmra dcc generic loco with long addr bus"/>
        <var name="srcpbusGL_ps" vt="int" defval="4" remark="protocol by server generic loco"/>
        <var name="srcpbusGA_m" vt="int" defval="5" remark="marklin generic accessorie bus"/>
        <var name="srcpbusGA_n" vt="int" defval="6" remark="nmra dcc generic accessorie bus"/>
        <var name="srcpbusGA_ps" vt="int" defval="7" remark="protocol by server generic accessorie"/>
        <var name="srcpbusFB_s88" vt="int" defval="8" remark="s88 feedback bus"/>
        <var name="srcpbusFB_m6051" vt="int" defval="9" remark="m6051 feedback bus"/>
        <var name="srcpbusFB_i8255" vt="int" defval="10" remark="i8255 feedback bus"/>
      </srcp>

      <rocnet remark="RocNet options" wrappername="RocNet">
        <var name="net" vt="int" defval="0" range="0-255"/>
        <var name="id" vt="int" defval="1" range="0-65535" remark="RocNet sender ID, 1 is default for Rocrail.(Host)"/>
        <var name="addr" vt="string" defval="224.0.0.1" range="*" remark="multicast address"/>
        <var name="port" vt="int" defval="4321" range="0-*" remark="multicast port"/>
        <var name="brokeraddr" vt="string" defval="NULL" range="*" remark="MQTT IP address"/>
        <var name="brokerport" vt="int" defval="1883" range="0-*" remark="MQTT port"/>
        <var name="crc" vt="bool" defval="false"/>
        <var name="wd" vt="bool" defval="false"/>
        <var name="watchnodes" vt="bool" defval="false"/>
        <var name="sack" vt="bool" defval="false"/>
        <var name="shutdownall" vt="bool" defval="false"/>
        <var name="lcbus" vt="int" defval="0" range="0-*" remark="Default loco bus if greater then zero."/>
        <rocnetnodeoptions wrappername="RocNetNodeOptions" cardinality="1">
          <var name="sack" vt="bool" defval="false"/>
          <var name="rfid" vt="bool" defval="false"/>
          <var name="adcsensor" vt="bool" defval="false"/>
          <var name="mobile" vt="bool" defval="false"/>
          <var name="usepb" vt="bool" defval="false"/>
          <const name="iotype_i2c1" vt="int" val="0"/>
          <const name="iotype_i2c0" vt="int" val="1"/>
          <var name="iotype" vt="int" defval="0"/>
          <const name="hwtype_pi1" vt="int" val="0"/>
          <const name="hwtype_pi2" vt="int" val="1"/>
          <const name="hwtype_other" vt="int" val="2"/>
          <var name="hwtype" vt="int" defval="0"/>
          <var name="soundpath" vt="string" defval="sounds"/>
          <var name="soundplayer" vt="string" defval="mplayer"/>
          <var name="speakcmd" vt="string" defval="espeak"/>
          <var name="nickname" vt="string" defval="New RocNetNode"/>
          <var name="adcthreshold" vt="int" defval="15"/>
          <var name="clockenable" vt="bool" defval="true"/>
          <var name="clockdate" vt="bool" defval="false"/>
          <var name="clocktemp" vt="bool" defval="true"/>
          <var name="clockdots" vt="bool" defval="true"/>
          <var name="clockbri" vt="int" defval="10"/>
        </rocnetnodeoptions>
        <rocnetnode wrappername="RocNetNode" cardinality="n">
	        <var name="id" vt="int" defval="65535" range="0-*" remark="RocNet sender ID."/>
          <var name="location" vt="int" defval="0" range="0-*" remark="RocNet sender ID."/>
          <var name="class" vt="string" defval="" remark="Class ID."/>
          <var name="mnemonic" vt="string" defval="" remark="Class Mnemonic."/>
          <var name="vendor" vt="int" defval="0" remark="NMRA vendor ID."/>
          <var name="revision" vt="int" defval="0" remark="Repository revision."/>
          <var name="version" vt="string" defval="0.0" remark="Software version."/>
          <var name="nrio" vt="int" defval="0" range="0-255" remark="Number of I/Os"/>
          <var name="subip" vt="int" defval="0" remark="Last 16 bits of the IP."/>
          <var name="nickname" vt="string" defval=""/>
          <var name="pingtick" vt="long" defval="0"/>
          <var name="pongtick" vt="long" defval="0"/>
        </rocnetnode>
        <portsetup wrappername="PortSetup" cardinality="n">
          <var name="port" vt="int" defval="1" range="1-*"/>
          <var name="type" vt="int" defval="0" range="0-*" remark="0=output, 1=input"/>
          <var name="delay" vt="int" defval="0" range="0-*" remark="0=directly/continous"/>
          <var name="state" vt="int" defval="0" remark="Saved output state."/>
          <var name="eventid" vt="int" defval="0" remark=""/>
          <var name="eventport" vt="int" defval="0" remark=""/>
        </portsetup>
        <channelsetup wrappername="ChannelSetup" cardinality="n">
          <var name="channel" vt="int" defval="0" range="0-15"/>
          <var name="delay" vt="int" defval="0" range="0-*" remark="0=10ms, 1=20ms, ..."/>
          <var name="onsteps" vt="int" defval="10" range="0-255"/>
          <var name="offsteps" vt="int" defval="10" range="0-255"/>
          <var name="onpos" vt="int" defval="600" range="0-4095"/>
          <var name="offpos" vt="int" defval="150" range="0-4095"/>
          <var name="options" vt="int" defval="0"/>
          <var name="state" vt="int" defval="0" remark="Saved output state."/>
        </channelsetup>
        <macro cardinality="n"/>
        <locosetup wrappername="LocoSetup" cardinality="1">
          <var name="scale" vt="float" defval="29.0" remark="G scale"/>
          <var name="wheeldiameter" vt="float" defval="28.0" units="mm" remark="Diameter of driving wheel."/>
          <var name="nrpulses" vt="int" defval="3" remark="Number of sensor pulses per wheel rotation."/>
          <var name="acceleration" vt="int" defval="10"/>
          <var name="deceleration" vt="int" defval="10"/>
        </locosetup>
      </rocnet>

      <dmx remark="DMX Options" wrappername="DMX">
        <var name="framerate" vt="int" defval="500" range="100-10000"/>
        <var name="mapwhite" vt="bool" defval="false"/>
        <var name="dmxdata" vt="string" defval=""/>
        <var name="restoredata" vt="bool" defval="true"/>
        <var name="broadcastIP" vt="string" defval="2.255.255.255"/>
      </dmx>
      
      
      <mbus remark="MBUS options" wrappername="MBus">
        <var name="cid" vt="int" defval="1" range="0-*" remark="CANID"/>
        <var name="dcc" vt="bool" defval="true"/>
        <var name="mfx" vt="bool" defval="true"/>
        <var name="mm2" vt="bool" defval="true"/>
        <var name="discovery" vt="bool" defval="false"/>
        <var name="bind" vt="bool" defval="false"/>
        <var name="ptbus" vt="int" defval="0" range="0-*"/>
        <var name="ptaddr" vt="int" defval="0" range="0-*"/>
        <var name="statereport" vt="int" defval="1" range="0-*" remark="0=off 1=onchange 2=regular"/>
        <var name="purgetime" vt="int" defval="60" range="0-*" remark="Purge time in seconds."/>
        <var name="master" vt="bool" defval="false"/>
        <var name="msapp" vt="bool" defval="false"/>
        <var name="redirectiid" vt="string" defval=""/>
        <var name="fbdevid" vt="int" defval="1" range="0-*" remark="Sensor device ID"/>
        <var name="autoswitchdelay" vt="bool" defval="true"/>
        <links88 cardinality="n" wrappername="LinkS88">
          <var name="id" vt="int" defval="0" range="0-*" remark="LinkS88 device ID"/>
          <var name="modcnt" vt="int" defval="1" range="1-*" remark="LinkS88 number of connected modules. (At least one: Itself.)"/>
          <var name="desc" vt="string" defval="S88 Link"/>
        </links88>
      </mbus>
      
      
      <rcan remark="RCAN options" wrappername="RCan">
        <var name="cid" vt="int" defval="1" range="0-*" remark="CANID"/>
        <var name="csnodeid" vt="int" defval="0" range="0-*" remark="Use CS node ID in case of bus==0"/>
        <var name="canprot" vt="int" defval="2" remark="0=RCAN+CBUS, 1=RCAN, 2=CBUS"/>
        <var name="sodaddr" vt="int" defval="0" range="0-*" remark="Start of Day input address."/>
        <var name="sodcount" vt="int" defval="1" range="0-*" remark="Start of Day input address count."/>
        <var name="sodsleep" vt="int" defval="500" range="0-*" remark="Start of Day loop sleep."/>
        <var name="shortevents" vt="bool" defval="true"/>
        <var name="fastclock" vt="bool" defval="true"/>
        <var name="commandack" vt="bool" defval="false"/>
        <var name="deccheck" vt="bool" defval="false"/>
        <var name="deccheckinterval" vt="int" defval="10"/>
        <var name="heartbeat" vt="bool" defval="false"/>
        <var name="heartbeatevent" vt="int" defval="4712"/>
        <var name="fonfof" vt="bool" defval="false" remark="Use the new opcodes for controlling functions."/>
        <var name="purgetime" vt="int" defval="10" unit="s" range="0-*" remark="CS engine idle timeout."/>
        <var name="loadertime" vt="int" defval="50" range="10-*" remark="Sleep time between boot loader lines."/>
        <var name="slotserver" vt="bool" defval="false"/>
        <var name="fcnode" vt="int" defval="0" range="0-*" remark="Fast clock node number."/>
        <var name="fcaddr" vt="int" defval="9999" range="0-*" remark="Fast clock event address."/>
        <var name="linefeed" vt="bool" defval="false" remark="Add a linefeed at the end of the ASCII frames."/>
	      <cbnode cardinality="n" wrappername="CBusNode">
          <var name="canid" vt="int" defval="0" range="0-127" remark="CANID"/>
	        <var name="nr" vt="int" defval="0" range="0-65535" remark="NodeNumber"/>
	        <var name="manuid" vt="int" defval="0" range="0-65535" remark="NMRA manufacturer ID."/>
          <var name="version" vt="string" defval="" range="*" remark="Firmware version."/>
          <var name="conf" vt="int" defval="0" range="*" remark="Configuration bits."/>
          <const name="mtyp_canacc4" vt="int" val="1" remark="Solenoid point driver"/>
          <const name="mtyp_canacc5" vt="int" val="2" remark="Motorised point driver"/>
          <const name="mtyp_canacc8" vt="int" val="3" remark="8 digital outputs"/>
          <const name="mtyp_canace3" vt="int" val="4" remark="Control panel switch/button encoder"/>
          <const name="mtyp_canace8c" vt="int" val="5" remark="8 digital inputs"/>
          <const name="mtyp_canled" vt="int" val="6" remark="64 led driver"/>
          <const name="mtyp_canled64" vt="int" val="7" remark="64 led driver (multi leds per event)"/>
          <const name="mtyp_canacc4_2" vt="int" val="8" remark="12v version of CANACC4"/>
          <const name="mtyp_cancab" vt="int" val="9" remark="CANCAB hand throttle"/>
          <const name="mtyp_cancmd" vt="int" val="10" remark="CANCMD command station"/>
          <const name="mtyp_canservo" vt="int" val="11" remark="8 servo driver (on canacc8 or similar hardware)"/>
          <const name="mtyp_canbc" vt="int" val="12" remark="BC1a command station"/>
          <const name="mtyp_canrpi" vt="int" val="13" remark="RPI and RFID interface"/>
          <const name="mtyp_canttca" vt="int" val="14" remark="Turntable controller (turntable end)"/>
          <const name="mtyp_canttcb" vt="int" val="15" remark="Turntable controller (control panel end)"/>
          <var name="mtyp" vt="int" defval="0" range="0-65535" remark="Module type. See cbusdefs.h."/>
          <var name="nrevt" vt="int" defval="0" range="0-65535" remark="Number of events allowed."/>
          <var name="nrevtvar" vt="int" defval="0" range="0-65535" remark="Number of event variable per event."/>
          <var name="nrvar" vt="int" defval="0" range="0-65535" remark="Number of node variables."/>
          <cbnodevar cardinality="n" wrappername="CBusNodeVar">
            <var name="nr" vt="int" defval="1" range="1-255" remark="Node variable index."/>
            <var name="val" vt="int" defval="0" range="0-255" remark="Node variable value."/>
          </cbnodevar>
          <cbnodeevent cardinality="n" wrappername="CBusNodeEvent">
            <var name="nodenr" vt="int" defval="0" range="1-65535" remark="Node number of producer."/>
            <var name="addr" vt="int" defval="0" range="1-65535" remark="Device address of producer."/>
            <var name="evnr" vt="int" defval="0" range="1-255" remark="Event variable index."/>
            <var name="evval" vt="int" defval="0" range="0-255" remark="Event variable value."/>
          </cbnodeevent>
	      </cbnode>
      </rcan>

      <dcc232 remark="DCC232 options" wrappername="DCC232">
        <var name="port" vt="string" defval="com1" range="*"/>
        <var name="purge" vt="bool" defval="true" remark="Activate purging."/>
        <var name="purgetime" vt="int" defval="60" unit="s" range="0-*" remark="Idle time for purg a slot."/>
        <var name="shortcut" vt="bool" defval="true" remark="Use shortcut detection"/>
        <var name="shortcutdelay" vt="int" defval="1000" unit="ms" remark="Shortcut events shorter than this time is ignored"/>
        <var name="inversedsr" vt="bool" defval="true"/>
        <var name="fastcvget" vt="bool" defval="true"/>
        <var name="gpio" vt="int" defval="38" range="0-*" remark="GPIO pin for DCC output; Default GPIO20 in 38."/>
      </dcc232>  
        
      <loconet remark="LocoNet options" wrappername="LocoNet">
        <var name="purgetime" vt="int" defval="200" unit="s" range="0-*" remark="set to zero if the command station does not purge"/>
        <var name="slotping" vt="bool" defval="true" remark="Enable slot ping if purge time is not zero."/>
        <var name="slots" vt="int" defval="22" range="0-*" remark="number of slots for loco's"/>
        <var name="reportaddr" vt="int" defval="1017" range="0-*" remark="global addres on which sensors are reported"/>
        <const name="cs_dcs50" vt="string" val="dcs50"/>
        <const name="cs_dcs100" vt="string" val="dcs100"/>
        <const name="cs_db150" vt="string" val="db150"/>
        <const name="cs_intellibox" vt="string" val="intellibox"/>
        <const name="cs_rocrail" vt="string" val="rocrail"/>
        <const name="cs_ibcom" vt="string" val="ibcom"/>
        <var name="cmdstn" vt="string" defval="dcs100" range="dcs100,db150,dcs50,intellibox,rocrail,ibcom"/>
        <var name="useidle" vt="bool" defval="false" remark="use OPC_IDLE instead of OPC_GPOFF"/>
        <var name="sensorquery" vt="bool" defval="true" remark="do sensor query at OPC_GPON"/>
        <var name="usefc" vt="bool" defval="true" remark="enable fast clock"/>
        <var name="syncfc" vt="bool" defval="false" remark="synchronize fast clock"/>
        <var name="useseq" vt="bool" defval="false" remark="Use sequence counter for lnudp."/>
        <var name="usedouble" vt="bool" defval="false" remark="Use double packets for lnudp."/>
        <var name="swack" vt="bool" defval="false" remark="Check long ack for switch commands."/>
        <var name="swretry" vt="int" defval="10" range="1-*" remark="Number of switch command retries."/>
        <var name="swsleep" vt="int" defval="50" range="10-*" remark="Number of ms sleep between switch command retries."/>
        <var name="resetlissy" vt="bool" defval="false" remark="Reset Lissy events after 1 second."/>
        <var name="GBM16xn" vt="bool" defval="false" remark="8 bit loco addressing and direction bit."/>
        <var name="monitor" vt="bool" defval="false" remark="Verbose monitor LocoNet."/>
        <var name="opcwait" vt="int" defval="16" range="10-*" remark="How many packets to wait before giving up on slot data."/>
        <var name="echotimeout" vt="int" defval="100" range="10-*" remark="How long to wait for ULNI for receiving the echo."/>
        <options wrappername="CSOptions">
          <var name="store" vt="bool" defval="false" remark="set by client to signal to store the options in the command station"/>
          <var name="opsw" vt="string" defval="" range="*" remark="zero based options list 0=open 1=set"/>
        </options>
        <slotserver wrappername="LNSlotServer">
          <var name="active" vt="bool" defval="false" remark="activate slot server support"/>
          <var name="lconly" vt="bool" defval="true" remark="serve loco commands only"/>
          <var name="purge" vt="bool" defval="true" remark="activate slot purging (purgtime from parent node)"/>
          <var name="stopatpurge" vt="bool" defval="false" remark="stop loc after purge"/>
          <var name="iid" vt="string" defval="" range="*" remark="redirect commands to this interface ID"/>
          <var name="format" vt="string" defval="dcc" range="dcc,mm" remark="default decoder digital format"/>
          <var name="speedstep" vt="int" defval="128" range="14,28,128" remark="default decoder speed steps"/>
        </slotserver>
      </loconet>
      
    </digint>

    <tcp remark="Client service port." wrappername="Tcp">
      <var name="port" vt="int" defval="8051" range="1-65535"/>
      <var name="onlyfirstmaster" vt="bool" defval="false" remark="Only the first client is master."/>
      <var name="clienthostname" vt="bool" defval="false" remark="Try to retrieve the cleint hostname."/>
      <var name="controlcode" vt="string" defval="" range="*"/>
      <var name="slavecode" vt="string" defval="" range="*"/>
      <var name="slavecode_power" vt="bool" defval="true"/>
      <var name="slavecode_switches" vt="bool" defval="false"/>
      <var name="slavecode_signals" vt="bool" defval="false"/>
      <var name="slavecode_outputs" vt="bool" defval="false"/>
      <var name="slavecode_routes" vt="bool" defval="false"/>
      <var name="slavecode_locos" vt="bool" defval="false"/>
      <var name="mqtthost" vt="string" defval="" range="*" remark="Broker host name or IP address."/>
      <var name="mqttport" vt="int" defval="1883" range="0-65535" remark="Port number of the Broker socket."/>
      <var name="mqttping" vt="int" defval="10" range="10-100" remark="Keep Alive interval."/>
      <var name="mqttgrouping" vt="bool" defval="false" remark="Use item names in the tree for broadcasting."/>
      <var name="mqttuserid" vt="string" defval="RocrailService" range="*"/>
      <var name="mqttpasswd" vt="string" defval="" range="*"/>
      <var name="wiowd" vt="bool" defval="true"/>
      <var name="wiowdbreak" vt="int" defval="0" remark="0=poweroff, 1=ebreak, 2=autooff, 3=warning, 4=none"/>
      <var name="wiotimeout" vt="int" defval="700" range="100-1000"/>
      <var name="wiowd_exclude" vt="string" defval="" range="*" remark="CSV of WIO IDs which should not trigger a power off."/>
      <var name="mdns" vt="bool" defval="true"/>
      <var name="mdnsID" vt="string" defval="Rocrail"/>
      <var name="with" vt="bool" defval="true" remark="WiThrottle service"/>
      <var name="withport" vt="int" defval="12090"/>
      <var name="withhttpport" vt="int" defval="8008"/>
      <var name="withHB" vt="int" defval="10"/>
    </tcp>
    <mdnslist extern="true"/>
    <srcpcon remark="SRCP client service port." wrappername="SrcpCon">
      <var name="active" vt="bool" defval="false" remark="Activate srcp service."/>
      <var name="port" vt="int" defval="4303" range="1-65535"/>
      <var name="maxcon" vt="int" defval="10" range="1-100" remark="Max. concurrent connected clients."/>
      <var name="device" vt="string" defval="" range="*" remark="Optional serial device."/>
      <srcpbus cardinality="n" wrappername="SrcpBus">
        <var name="iid" vt="string" defval="" range="*"/>
        <var name="bus" vt="int" defval="1" range="*"/>
      </srcpbus>
    </srcpcon>
    
    <finder wrappername="Finder">
      <const name="use_shortest" vt="int" val="0"/>
      <const name="use_longest" vt="int" val="1"/>
      <const name="use_direct" vt="int" val="2"/>
      <const name="use_preferred" vt="int" val="3"/>
      <const name="plus_blockside" vt="int" val="256" remark="0x0100"/>
      <const name="min_blockside" vt="int" val="512" remark="0x0200"/>
      <var name="maxrecursive" vt="int" defval="5"/>
      <var name="usepath" vt="int" defval="0"/>
      <var name="findalt" vt="bool" defval="true" remark="Try to find alternative paths."/>
      <var name="findaltdirect" vt="bool" defval="false" remark="Try to find alternative direct paths."/>
      <var name="maxpaths" vt="int" defval="20" remark="Max. paths."/>
      <var name="regularstops" vt="bool" defval="true" remark="Regular stop in schedule."/>
      <var name="tempschedules" vt="bool" defval="true" remark="Schedule are marked generated."/>
      <var name="checkperm" vt="bool" defval="true" remark="Check route and block permissions."/>
      <var name="checkpermdest" vt="bool" defval="false" remark="Check route and block permissions of the destination."/>
      <var name="avoidoccblocks" vt="bool" defval="true" remark="Skip occupied blocks."/>
      <var name="avoidoccroutes" vt="bool" defval="true" remark="Skip occupied routes."/>
      <var name="uselocations" vt="bool" defval="false" remark="Use locations in the schedule."/>
      <var name="uselocation4destination" vt="bool" defval="true" remark="Use locations in the last schedule entry."/>
      <var name="avoidtermblocks" vt="bool" defval="false" remark="Skip terminal blocks for none commuter trains."/>
      <var name="updateschedules" vt="bool" defval="true" remark="Update existing schedules."/>
      <var name="reservetoblock" vt="bool" defval="false" remark="Reserve the to block."/>
      <var name="dirchange4commuter" vt="bool" defval="false" remark="Allow direction changes for commutertrains."/>
      <var name="startonlywithschedule" vt="bool" defval="false" remark="A go command will skipped if no finder schedule is set."/>
      <var name="setblockexitside" vt="bool" defval="true" remark="Set the block exit side in the schedule entries."/>
      <var name="skipmanualroutes" vt="bool" defval="false" remark="Skip manual routes."/>
    </finder>
        
    <ctrl wrappername="Ctrl">
      <var name="checkelectrified" vt="bool" defval="true" remark="Check electrification of block in case E-Loco."/>
      <var name="locoExcludeLocations" vt="string" defval="" remark="Exclude locations from automatic mode."/>
      <var name="genunregsensor" vt="bool" defval="false" remark="Create a sensor object after model init if not exist."/>
      <var name="maxrunning" vt="int" defval="0"/>
      <var name="eodtimeoutonidle" vt="int" defval="60" unit="sec"/>
      <var name="eodpoweroffdelay" vt="int" defval="0" unit="sec"/>
      <var name="eodsystemshutdown" vt="bool" defval="true"/>
      <var name="traceactions" vt="bool" defval="false" remark="Check actions for trace numbers."/>
      <var name="resetscheduleonstop" vt="bool" defval="true" remark="Reset the schedule on stop automatic mode."/>
      <var name="swapdest" vt="bool" defval="false" remark="Allow swap destination."/>
      <var name="checkdecoders" vt="bool" defval="false" remark="Check if all decoders are online before allowing auto mode."/>
      <var name="checkrestore" vt="bool" defval="false" remark="Check if all locos have restored functions and speed before allowing auto mode."/>
      <var name="usefinder" vt="bool" defval="false" remark="Use the finder for the goto destination."/>
      <var name="virtualtimer" vt="int" defval="2" range="2-*" unit="s" remark="Virtual step time."/>
      <var name="calcvirtualtimer" vt="bool" defval="false" remark="Calculate virtual timer by route length, block length and kmh."/>
      <var name="swtimeout" vt="int" defval="250" range="100-1000" unit="ms" remark="Switch activation time."/>
      <var name="initfieldpause" vt="int" defval="500" range="100-5000" unit="ms" remark="Pause between the switch commands."/>
      <var name="initfieldpower" vt="bool" defval="true" remark="Set global power on before init field."/>
      <var name="allowoverlen" vt="bool" defval="false" remark="Allow long trains to occupy multiple blocks and routes."/>
      <var name="minbklc" vt="int" defval="20" range="10-50" unit="" remark="Minimal blocklen - loclen."/>
      <var name="ignevt" vt="int" defval="5" range="0-*" unit="10ms ticks" remark="Ignore multiple events for the same state if comming within this number of 10ms ticks."/>
      <var name="loccnfg" vt="bool" defval="false" remark="send loco config commands to the CS"/>
      <var name="savepostime" vt="int" defval="10" range="0-100" unit="s" remark="save positio timer"/>
      <var name="secondnextblock" vt="bool" defval="false" remark="Try to reserve a second next block."/>
      <var name="enableswfb" vt="bool" defval="true" remark="Enable switch position feedbacks."/>
      <var name="enablebkpower" vt="bool" defval="true" remark="Enable block power check on lock."/>
      <var name="eventtimeout" vt="int" defval="0" range="0-*" unit="s" remark="Time to wait for a next event. Disabled when set to zero."/>
      <var name="signalreset" vt="int" defval="0" range="0-*" unit="s" remark="Time to wait for resetting the signals of previous block. Disabled when set to zero."/>
      <var name="routeswtime" vt="int" defval="500" range="0-10000" unit="ms" remark="Time between switch commands in routes."/>
      <var name="routetimeout" vt="int" defval="0" range="0-*" unit="s"/>
      <var name="disablerouteVreduce" vt="bool" defval="false" remark="Global disable route speed reducing by thrown switches."/>
      <var name="defaspect" vt="string" defval="red" range="red,green,yellow,white" remark="Default signal aspect."/>
      <var name="greenaspect" vt="bool" defval="false" remark="Use green aspect instead of yellow if next block has red."/>
      <var name="skipsetsw" vt="bool" defval="false" remark="Skip switch commands in routes for switches already in model position."/>
      <var name="skipsetsg" vt="bool" defval="false" remark="Skip signal commands for signals already in model position."/>
      <var name="semaphorewait" vt="int" defval="1" range="0-*" unit="s" remark="Time needed by a semaphore to get in position."/>
      <var name="signalwait" vt="int" defval="0" range="0-*" unit="s" remark="Time needed by a signal to set another aspect."/>
      <var name="usebicom" vt="bool" defval="true" remark="Use bi-directional communication."/>
      <var name="useident" vt="bool" defval="true" remark="Use bi-directional identifier for set in block."/>
      <var name="poweroffonidentmismatch" vt="bool" defval="false" remark="Power off if the ident code does not match."/>
      <var name="poweroffatghost" vt="bool" defval="true" remark="Power off a ghost is detected when no ghost is accepted."/>
      <var name="autooffatghost" vt="bool" defval="false" remark="Automatic mode off at ghost detection."/>
      <var name="ebreakatghost" vt="bool" defval="false" remark="Power off a ghost is detected when no ghost is accepted."/>
      <var name="keepghost" vt="bool" defval="false" remark="Keep ghost state until manual reset."/>
      <var name="locostartgap" vt="int" defval="0" range="0-*" unit="s" remark="Time between signalling loco's to start in auto mode."/>
      <var name="disablesteal" vt="bool" defval="false" remark="Disable throttle to steal loco control."/>
      <var name="blockinitpause" vt="int" defval="0" range="0-5000" unit="ms" remark="Pause between the block init commands."/>
      <var name="poweroffatreset" vt="bool" defval="true" remark="Power off at reset command."/>
      <var name="allowzerothrottleid" vt="bool" defval="true" remark="Allow broadcasting event coming from zero throttle IDs."/>
      <var name="stopnonecommuter" vt="bool" defval="false" remark="Stop auto mode for none commuter trains in terminal stations."/>
      <var name="syncroutes" vt="bool" defval="false" remark="Synchronize routes."/>
      <var name="syncroutetimeout" vt="int" defval="2500" remark="Timeout in ms for synchronizing routes."/>
      <var name="timedsensors" vt="bool" defval="false" remark="Activate timed sensors."/>
      <var name="enablerouter" vt="bool" defval="true"/>
      <var name="ebreakforceunlock" vt="bool" defval="false"/>
      <var name="releaseonidle" vt="bool" defval="false"/>
      <var name="closeonghost" vt="bool" defval="false"/>
      <var name="generatebooster" vt="bool" defval="false"/>
      <var name="sgevents" vt="bool" defval="false" remark="Process field events for signals."/>
      <var name="closenoevents" vt="bool" defval="false" remark="Close block if no event is defined."/>
      <var name="selectshortestblock" vt="bool" defval="false" remark="Select shortest block in case block and train length are set."/>
      <var name="restoreschedule" vt="bool" defval="true"/>
      <var name="actiontimer60" vt="bool" defval="true"/>
      <var name="createguestonbidi" vt="bool" defval="false"/>
      <var name="usebididir" vt="bool" defval="false"/>
      <var name="usebididir4blockenterside" vt="bool" defval="false"/>
      <var name="disablebididiratauto" vt="bool" defval="true"/>
      <var name="disableblockwait4gomanual" vt="bool" defval="false"/>
      <var name="stopatin4gomanual" vt="bool" defval="true"/>
      <var name="v0atpoweron" vt="bool" defval="false"/>
      <var name="useonlyfirstident" vt="bool" defval="true"/>
      <var name="userandomrate" vt="bool" defval="false"/>
      <var name="redirecttomaster" vt="bool" defval="true" remark="Redirect commands send to a slave consist member to the master loco."/>
      <var name="weather" vt="bool" defval="true"/>
      <var name="v0onebreak" vt="bool" defval="false"/>
      <var name="timerevents" vt="bool" defval="false"/>
      <var name="modeevents" vt="bool" defval="true"/>
      <var name="signalevents" vt="bool" defval="false"/>
      <var name="blockwait4schedules" vt="bool" defval="true"/>
      <var name="locationprio" vt="bool" defval="true"/>
      <var name="restorereservations" vt="bool" defval="true"/>
      <var name="ctcevents" vt="bool" defval="false"/>
      <var name="ctcoccprio" vt="bool" defval="false"/>
      <var name="ctcblackfree" vt="bool" defval="false"/>
      <var name="ctcDnD" vt="bool" defval="false"/>
      <var name="linkanalogblocks" vt="bool" defval="true"/>
    </ctrl>
  </rocrail>

  <command remark="Command." wrappername="Command">
    <var name="server" vt="string" defval="" range="*"/>
    <const name="fbmods" vt="string" val="fbmods" remark="comma separated list of connected feedback module addresses"/>
    <const name="getLoco" vt="string" val="getLoco" remark="Get the properties reference of a loco. arg=lcid"/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <var name="id" vt="string" defval="NULL" range="*"/>
    <var name="iid" vt="string" defval="NULL" range="*"/>
    <var name="arg" vt="string" defval="NULL" range="*" remark="command arguments"/>
    <var name="val" vt="int" defval="0" range="0-*" remark="command value"/>
    <var name="idx" vt="int" defval="0" range="0-*"/>
  </command>

  <fbinfo wrappername="FbInfo">
    <var name="decoders" vt="string" defval="" range="*" remark="comma separated list of decoder bus values."/>
    <fbmods cardinality="n" remark="feedback module listing" wrappername="FbMods">
      <var name="bus" vt="int" defval="0" range="0-*" remark="bus number"/>
      <var name="modules" vt="string" defval="" range="*" remark="comma separated list of connected feedback module addresses"/>
    </fbmods>
  </fbinfo>

  <bincmd wrappername="BinCmd" remark="Binary command; the DigInt should send the bytes un-translated to the command station.">
    <var name="iid" vt="string" defval="NULL" range="*"/>
    <var name="out" vt="string" defval="NULL" range="*" remark="one byte represented by 2 ascii chars; StrOp.byteToStr()"/>
    <var name="inlen" vt="int" defval="0" range="0-*" remark="expected response length in bytes"/>
    <var name="outlen" vt="int" defval="0" range="0-*" remark="out length in bytes"/>
    <var name="inendbyte" vt="int" defval="-1" range="0-*" remark="Read response until detecting this byte within the inlen."/>
  </bincmd>

  <datareq remark="Data request" wrappername="DataReq">
    <var name="id" vt="string" defval="NULL" range="*" remark="reference ID"/>
    <var name="function" vt="int" defval="0" range="0-*"/>
    <const name="get" vt="int" val="0"/>
    <const name="gettracedir" vt="int" val="1"/>
    <const name="gettracefile" vt="int" val="2"/>
    <const name="readxmlscript" vt="int" val="3"/>
    <const name="writexmlscript" vt="int" val="4"/>
    <const name="abox_find" vt="int" val="5"/>
    <const name="abox_addlink" vt="int" val="6"/>
    <const name="abox_getcategories" vt="int" val="7"/>
    <const name="abox_deletelink" vt="int" val="8"/>
    <const name="abox_modifylink" vt="int" val="9"/>
    <const name="abox_filedata" vt="int" val="10"/>
    <const name="abox_getdata" vt="int" val="11"/>
    <const name="getdecfile" vt="int" val="12"/>
    <const name="abox_addnote" vt="int" val="13"/>
    <const name="abox_deletecategory" vt="int" val="14"/>
    <const name="upload" vt="int" val="15"/>
    <var name="cmd" vt="int" defval="0" range="0-*"/>
    <const name="image" vt="int" val="0"/>
    <const name="smallimage" vt="int" val="1"/>
    <const name="svg" vt="int" val="2"/>
    <const name="svglist" vt="int" val="3"/>
    <var name="type" vt="int" defval="0" range="0-*"/>
    <var name="themename" vt="string" defval="SLIM-COLOR" range="*"/>
    <var name="filename" vt="string" defval="NULL" range="*"/>
    <var name="data" vt="string" defval="NULL" range="*" remark="one byte represented by 2 ascii chars; StrOp.byteToStr()"/>
    <var name="datapart" vt="int" defval="0"/>
    <var name="dataparts" vt="int" defval="0"/>
    <var name="totalsize" vt="long" defval="0" range="0-*" remark="File size"/>
    <var name="category" vt="string" defval="" range="*"/>
    <var name="text" vt="string" defval="" range="*"/>
    <var name="note" vt="string" defval="" range="*"/>
    <var name="link" vt="bool" defval="true"/>
    <var name="ack" vt="bool" defval="false" remark="Achknowledge of the request."/>
    <var name="rc" vt="int" defval="0"/>
    <var name="readonly" vt="bool" defval="false"/>
    <var name="findintext" vt="bool" defval="true"/>
    <var name="findincategory" vt="bool" defval="true"/>
    <var name="findinfilename" vt="bool" defval="true"/>
    <var name="findindate" vt="bool" defval="true"/>
    <var name="toomanyhits" vt="bool" defval="false"/>
    <var name="fromdate" vt="string" defval="" range="*"/>
    <var name="todate" vt="string" defval="" range="*"/>
    <var name="hitcount" vt="bool" defval="false"/>
    <var name="hits" vt="int" defval="0"/>
    <direntry wrappername="DirEntry" remark="Directory" cardinality="1" >
      <var name="dir" vt="string" defval="" range="*" remark="File name"/>
	    <fileentry wrappername="FileEntry" cardinality="n">
        <var name="path" vt="string" defval="" range="*" remark="File path name"/>
	      <var name="fname" vt="string" defval="" range="*" remark="File name"/>
	      <var name="time" vt="string" defval="" range="*" remark="Time stamp"/>
        <var name="filetime" vt="string" defval="" range="*"/>
        <var name="filedate" vt="string" defval="" range="*"/>
	      <var name="size" vt="long" defval="0" range="0-*" remark="File size"/>
        <var name="category" vt="string" defval="" range="*"/>
        <var name="text" vt="string" defval="" range="*"/>
        <var name="ftime" vt="long" defval="0" range="*"/>
	    </fileentry>
	  </direntry>
  </datareq>

  <program remark="Program." wrappername="Program">
    <var name="iid" vt="string" defval="NULL" range="*"/>
    <const name="get" vt="int" val="0"/>
    <const name="set" vt="int" val="1"/>
    <const name="pton" vt="int" val="2"/>
    <const name="ptoff" vt="int" val="3"/>
    <const name="ptstat" vt="int" val="4"/>
    <const name="save" vt="int" val="5"/>
    <const name="load" vt="int" val="6"/>
    <const name="datarsp" vt="int" val="7" remark="data response from previous get command"/>
    <const name="statusrsp" vt="int" val="8" remark="status response from previous command"/>
    <const name="lncvget" vt="int" val="9"/>
    <const name="lncvset" vt="int" val="10"/>
    <const name="nvget" vt="int" val="9" remark="Node value get."/>
    <const name="nvset" vt="int" val="10" remark="Node value set."/>
    <const name="mprsp" vt="int" val="11" remark="multi port data response from previous get command"/>
    <const name="evset" vt="int" val="12" remark="Event set."/>
    <const name="evget" vt="int" val="13" remark="Event get."/>
    <const name="nnreq" vt="int" val="14" remark="Node number request for new module with 'modid'."/>
    <const name="nnconf" vt="int" val="15" remark="Node number confirmation by module."/>
    <const name="evgetall" vt="int" val="16" remark="Event get all."/>
    <const name="learn" vt="int" val="17" remark="Set module in learn mode."/>
    <const name="unlearn" vt="int" val="18" remark="Set module in operation mode."/>
    <const name="evdelete" vt="int" val="19" remark="Event delete."/>
    <const name="evclrall" vt="int" val="20" remark="Clear all events."/>
    <const name="evgetvar" vt="int" val="21" remark="Get event variable."/>
    <const name="bootmode" vt="int" val="22" remark="Set node in boot mode."/>
    <const name="writehex" vt="int" val="23" remark="Set node in boot mode."/>
    <const name="reset" vt="int" val="24" remark="Reset decoder mode."/>
    <const name="query" vt="int" val="25" remark="Query node numbers."/>
    <const name="type" vt="int" val="26" remark="Query node numbers."/>
    <const name="macro_restore" vt="int" val="30"/>
    <const name="macro_save" vt="int" val="31"/>
    <const name="macro_delete" vt="int" val="32"/>
    <const name="macro_set" vt="int" val="33"/>
    <const name="macro_get" vt="int" val="34"/>
    <const name="macro_setparams" vt="int" val="35"/>
    <const name="macro_getparams" vt="int" val="36"/>
    <const name="acc_setparam" vt="int" val="37"/>
    <const name="acc_getparam" vt="int" val="38"/>
    <const name="fb_setaddr" vt="int" val="39"/>
    <const name="pomack" vt="int" val="40"/>
    <const name="vendorcvset" vt="int" val="41" remark="Vendor CV set. (strval1,strval2)"/>
    <const name="vendorcvget" vt="int" val="42" remark="Vendor CV get.(strval1)"/>
    <const name="vendorcvenable" vt="int" val="43" remark="Vendor CV enable. (value=1/0)"/>
    <const name="identify" vt="int" val="44"/>
    <const name="ping" vt="int" val="45"/>
    <const name="getlasterror" vt="int" val="46"/>
    <const name="getoptions" vt="int" val="47"/>
    <const name="setoptions" vt="int" val="48"/>
    <const name="show" vt="int" val="49"/>
    <const name="update" vt="int" val="50"/>
    <const name="setchannel" vt="int" val="51" remark="val1=channel, val2=value"/>
    <const name="raw" vt="int" val="52" remark="strval1=hexa"/>
    <const name="setstring" vt="int" val="53" remark="strval1=userstring val1=id"/>
    <const name="create" vt="int" val="54"/>
    <const name="remove" vt="int" val="55"/>
    <const name="erase" vt="int" val="56"/>
    <const name="store" vt="int" val="57"/>
    <const name="wio_rici" vt="int" val="58"/>
    <const name="wio_wio" vt="int" val="59"/>
    <const name="reboot" vt="int" val="60"/>
    <const name="wio_get" vt="int" val="61"/>
    <const name="wio_set" vt="int" val="62"/>
    <const name="wio_ota" vt="int" val="63"/>
    <const name="deepsleep" vt="int" val="64"/>
    <const name="cam_start" vt="int" val="65"/>
    <const name="cam_stop" vt="int" val="66"/>
    <const name="iocnf" vt="int" val="67"/>
    <const name="sysupdate" vt="int" val="68"/>
    <const name="wio_getoption" vt="int" val="69"/>
    <const name="wio_setoption" vt="int" val="70"/>
    <const name="wio_IOconf" vt="int" val="71"/>
    <const name="wio_dccon" vt="int" val="73"/>
    <const name="wio_release" vt="int" val="74" remark="Relase the given serial device."/>
    <const name="wio_ssid" vt="int" val="75"/>
    <const name="wio_pwd" vt="int" val="76"/>
    <const name="wio_listdir" vt="int" val="77"/>
    <const name="wio_delfile" vt="int" val="78"/>
    <const name="wio_uploadfile" vt="int" val="79"/>
    <const name="wio_downloadfile" vt="int" val="80"/>
    <const name="mdns_discovery" vt="int" val="81"/>
    <const name="mdns_query" vt="int" val="82"/>
    <const name="wio_setIObank" vt="int" val="83"/>
    <const name="wio_getIObank" vt="int" val="84"/>
    <const name="wio_setIOmap" vt="int" val="85"/>
    <const name="wio_getIOmap" vt="int" val="86"/>
    <const name="wio_resetIOmap" vt="int" val="87"/>
    <const name="wio_getusrcv" vt="int" val="88"/>
    <const name="wio_setusrcv" vt="int" val="89"/>
    <const name="wio_resetusrcv" vt="int" val="90"/>
    <const name="wio_uploadack" vt="int" val="91"/>
    <var name="cmd" vt="int" defval="0" range="0-*"/>
    <const name="lncvstart" vt="int" val="1"/>
    <const name="lncvend" vt="int" val="2"/>
    <var name="lncvcmd" vt="int" defval="0" range="0-*"/>
    <var name="bus" vt="int" defval="0" range="*"/>
    <var name="addr" vt="int" defval="0" range="*" remark="loco address for POM"/>
    <var name="longaddr" vt="bool" defval="false" remark="loco address for POM"/>
    <var name="identifier" vt="string" defval="" remark="Loc identifier"/>
    <var name="cv" vt="int" defval="0" range="0-1023" remark="CV number"/>
    <var name="index" vt="int" defval="0" range="0-65535" remark="CV index"/>
    <var name="value" vt="int" defval="0" range="0-255" remark="CV value"/>
    <var name="val1" vt="int" defval="0" range="0-255"/>
    <var name="val2" vt="int" defval="0" range="0-255"/>
    <var name="val3" vt="int" defval="0" range="0-255"/>
    <var name="val4" vt="int" defval="0" range="0-255"/>
    <var name="val5" vt="int" defval="0" range="0-255"/>
    <var name="val6" vt="int" defval="0" range="0-255"/>
    <var name="val7" vt="int" defval="0" range="0-255"/>
    <var name="val8" vt="int" defval="0" range="0-255"/>
    <var name="val9" vt="int" defval="0" range="0-255"/>
    <var name="val10" vt="int" defval="0" range="0-255"/>
    <var name="val11" vt="int" defval="0" range="0-255"/>
    <var name="val12" vt="int" defval="0" range="0-255"/>
    <var name="val13" vt="int" defval="0" range="0-255"/>
    <var name="val14" vt="int" defval="0" range="0-255"/>
    <var name="val15" vt="int" defval="0" range="0-255"/>
    <var name="val16" vt="int" defval="0" range="0-255"/>
    <var name="val17" vt="int" defval="0" range="0-255"/>
    <var name="val18" vt="int" defval="0" range="0-255"/>
    <var name="val19" vt="int" defval="0" range="0-255"/>
    <var name="val20" vt="int" defval="0" range="0-255"/>
    <var name="val21" vt="int" defval="0" range="0-255"/>
    <var name="val22" vt="int" defval="0" range="0-255"/>
    <var name="val23" vt="int" defval="0" range="0-255"/>
    <var name="val24" vt="int" defval="0" range="0-255"/>
    <var name="val25" vt="int" defval="0" range="0-255"/>
    <var name="val26" vt="int" defval="0" range="0-255"/>
    <var name="val27" vt="int" defval="0" range="0-255"/>
    <var name="val28" vt="int" defval="0" range="0-255"/>
    <var name="val29" vt="int" defval="0" range="0-255"/>
    <var name="val30" vt="int" defval="0" range="0-255"/>
    <var name="val31" vt="int" defval="0" range="0-255"/>
    <var name="val32" vt="int" defval="0" range="0-255"/>
    <var name="val33" vt="int" defval="0" range="0-255"/>
    <var name="val34" vt="int" defval="0" range="0-255"/>
    <var name="val35" vt="int" defval="0" range="0-255"/>
    <var name="val36" vt="int" defval="0" range="0-255"/>
    <var name="val37" vt="int" defval="0" range="0-255"/>
    <var name="val38" vt="int" defval="0" range="0-255"/>
    <var name="val39" vt="int" defval="0" range="0-255"/>
    <var name="val40" vt="int" defval="0" range="0-255"/>
    <var name="val41" vt="int" defval="0" range="0-255"/>
    <var name="val42" vt="int" defval="0" range="0-255"/>
    <var name="val43" vt="int" defval="0" range="0-255"/>
    <var name="val44" vt="int" defval="0" range="0-255"/>
    <var name="val45" vt="int" defval="0" range="0-255"/>
    <var name="val46" vt="int" defval="0" range="0-255"/>
    <var name="val47" vt="int" defval="0" range="0-255"/>
    <var name="val48" vt="int" defval="0" range="0-255"/>
    <var name="val49" vt="int" defval="0" range="0-255"/>
    <var name="val50" vt="int" defval="0" range="0-255"/>
    <var name="pom" vt="bool" defval="false" remark="POM Program On the Main"/>
    <var name="acc" vt="bool" defval="false" remark="POM Program On the Main for accessory decoders"/>
    <var name="accext" vt="bool" defval="false" remark="POM Program On the Main for extended accessory decoders"/>
    <var name="decaddr" vt="int" defval="0" range="*" remark="decoder address in case of POM"/>
    <var name="modid" vt="int" defval="0" range="*" remark="module id for use with lncv"/>
    <var name="version" vt="int" defval="0" range="*" remark="firmware version"/>
    <var name="manu" vt="int" defval="0" range="*" remark="manufacturer ID"/>
    <var name="prod" vt="int" defval="0" range="*" remark="product ID"/>
    <var name="mode" vt="int" defval="0" range="0-*" remark="Programming mode."/>
    <var name="conf" vt="int" defval="0" range="0-*" remark="Configuration bits."/>
    <var name="nodename" vt="string" defval=""/>
    <const name="mode_page" vt="int" val="0"/>
    <const name="mode_direct" vt="int" val="1"/>
    <const name="mode_register" vt="int" val="2"/>
    <const name="lntype_none" vt="int" val="0"/>
    <const name="lntype_cv" vt="int" val="1" remark="Uhlenbrock LocoNet CV's"/>
    <const name="lntype_sv" vt="int" val="2" remark="LocoIO SV's"/>
    <const name="lntype_cs" vt="int" val="3" remark="Command Station Config"/>
    <const name="lntype_mp" vt="int" val="4" remark="LocoIO MP's"/>
    <const name="lntype_opsw" vt="int" val="5" remark="Stationary decoder programming"/>
    <const name="lntype_cbus" vt="int" val="6" remark="CBUS"/>
    <const name="lntype_bidib" vt="int" val="7" remark="BiDiB"/>
    <const name="lntype_rocnet" vt="int" val="8" remark="RocNet"/>
    <const name="lntype_hue" vt="int" val="9" remark="HUE"/>
    <const name="lntype_upnp" vt="int" val="10" remark="HUE"/>
    <const name="lntype_wio" vt="int" val="11" remark="WIO"/>
    <const name="lntype_wiocan" vt="int" val="12" remark="WIO-CAN"/>
    <var name="lntype" vt="int" defval="0" remark="LNCV programming type"/>
    <const name="porttype_switch" vt="int" val="0"/>
    <const name="porttype_light" vt="int" val="1"/>
    <const name="porttype_servo" vt="int" val="2"/>
    <const name="porttype_sound" vt="int" val="3"/>
    <const name="porttype_motor" vt="int" val="4"/>
    <const name="porttype_analog" vt="int" val="5"/>
    <const name="porttype_macro" vt="int" val="6"/>
    <const name="porttype_backlight" vt="int" val="7" remark="BiDiB uses 6 for this type but it will be corrected in the bidib library."/>
    <const name="porttype_led" vt="int" val="8"/>
    <const name="porttype_function" vt="int" val="9"/>
    <const name="porttype_multiplex" vt="int" val="10"/>
    <const name="porttype_aspect" vt="int" val="11" remark="porttype_multiled"/>
    <const name="porttype_decoder" vt="int" val="12"/>
    <const name="porttype_ledscript" vt="int" val="13"/>
    <const name="porttype_hbridge" vt="int" val="14"/>
    <const name="porttype_input" vt="int" val="15"/>
    <const name="porttype_extdcc" vt="int" val="16"/>
    <var name="porttype" vt="int" defval="0" remark="Port type"/>
    <var name="lncv" vt="bool" defval="false"/>
    <var name="filename" vt="string" defval=""/>
    <const name="rc_ok" vt="int" val="0"/>
    <const name="rc_notfwup" vt="int" val="1"/>
    <const name="rc_error" vt="int" val="2" remork="see rs"/>
    <var name="rc" vt="int" defval="0" range="0-*" remark="return code"/>
    <var name="rs" vt="int" defval="0" range="0-*" remark="reason code"/>
    <var name="eeprom" vt="bool" defval="true" remark="Write EEprom."/>
    <var name="strval1" vt="string" defval=""/>
    <var name="strval2" vt="string" defval=""/>
    <var name="strval3" vt="string" defval=""/>
    <var name="strval4" vt="string" defval=""/>
  </program>

  <exception remark="Exception wrapper" wrappername="Exception">
    <var name="text" vt="string" defval="" range="*"/>
    <var name="level" vt="int" defval="0" range="0-*"/>
    <var name="id" vt="int" defval="0" range="0-*"/>
  </exception>

  <state remark="State wrapper" wrappername="State">
    <var name="iid" vt="string" defval="NULL" range="*"/>
    <var name="critical" vt="bool" defval="false"/>
    <var name="power" vt="bool" defval="false"/>
    <var name="light" vt="bool" defval="false"/>
    <var name="weather" vt="bool" defval="false"/>
    <var name="online" vt="bool" defval="false"/>
    <var name="enablecom" vt="bool" defval="true"/>
    <var name="programming" vt="bool" defval="false"/>
    <var name="trackbus" vt="bool" defval="false"/>
    <var name="sensorbus" vt="bool" defval="false"/>
    <var name="accessorybus" vt="bool" defval="false"/>
    <var name="consolemode" vt="bool" defval="false"/>
    <var name="automode" vt="bool" defval="false"/>
    <var name="healthy" vt="bool" defval="false"/>
    <var name="load" vt="int" defval="0" remark="Load of CS in mA."/>
    <var name="loadmax" vt="int" defval="0" remark="Load of CS in mA."/>
    <var name="ptload" vt="int" defval="0" remark="Load of PT in mA."/>
    <var name="temp" vt="int" defval="0" remark="Temp of CS in C."/>
    <var name="volt" vt="int" defval="0" remark="Track voltage in mV."/>
    <var name="tempmax" vt="int" defval="0" remark="Temp of CS in C."/>
    <var name="voltmin" vt="int" defval="0" remark="Track voltage in mV."/>
    <var name="uid" vt="int" defval="0" remark="Unique-ID of reporter."/>
    <var name="subuid" cat="general" vt="int" defval="0" range="0-*"/>
    <var name="bus" vt="int" defval="0"/>
    <var name="error" vt="int" defval="0"/>
    <var name="reason" vt="int" defval="0"/>
    <var name="addr" vt="int" defval="0"/>
    <var name="shortcut" vt="bool" defval="false"/>
    <var name="emergency" vt="bool" defval="false"/>
    <var name="message" vt="string" defval=""/>
    <var name="boosterevent" vt="bool" defval="false"/>
    <var name="weatherid" vt="string" defval=""/>
    <var name="weatherthemeid" vt="string" defval=""/>
    <var name="weatherhour" vt="int" defval="0"/>
    <var name="weatherminutes" vt="int" defval="0"/>
    <var name="lastexception" vt="string" defval=""/>
  </state>

  <response remark="Interface Response." wrappername="Response">
    <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
    <var name="retry" vt="bool" defval="false" remark="controller buffer full; try again."/>
    <var name="error" vt="bool" defval="false"/>
    <var name="rc" vt="int" defval="0"/>
    <var name="sender" vt="string" defval="" range="*"/>
    <var name="msg" vt="string" defval="" range="*"/>
    <var name="state" vt="string" defval="" range="*"/>
    <var name="data" vt="string" defval="" range="*"/>
    <const name="ok" vt="string" val="ok"/>
    <const name="ctserr" vt="string" val="ctserr"/>
    <const name="rcverr" vt="string" val="rcverr"/>
    <const name="snderr" vt="string" val="snderr"/>
  </response>

  <ext remark="External command." wrappername="ExtCmd">
    <var name="cmdline" vt="string" defval="" range="*"/>
    <var name="doublequote" vt="bool" defval="true" remark="Double quote under Windows."/>
    <var name="cmd" vt="string" defval="NULL" range="*" remark="External program or script to be executed"/>
    <var name="param" vt="string" defval="" range="*" remark="Command parameter"/>
    <var name="async" vt="bool" defval="true" remark="Asynchrone external execution"/>
  </ext>

  <powercmd remark="Power Manager command." wrappername="PwrCmd">
    <var name="id" vt="string" defval="NULL" range="*" remark="Booster ID; command for all not set."/>
    <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
    <var name="blockid" vt="string" defval="NULL" range="*" remark="Block ID."/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <const name="on" vt="string" val="on"/>
    <const name="off" vt="string" val="off"/>
  </powercmd>

  <powerevent remark="Power Manager event." wrappername="PwrEvent">
    <var name="id" vt="string" defval="NULL" range="*" remark="Booster ID; command for all not set."/>
    <var name="power" vt="bool" defval="false"/>
    <var name="shortcut" vt="bool" defval="false"/>
  </powerevent>

  <inspector remark="Inspector command/event." wrappername="Inspector">
    <const name="inspect" vt="string" val="inspect"/>
    <const name="generate" vt="string" val="generate"/>
    <const name="removerouteid" vt="string" val="removerouteid"/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <var name="msg" vt="string" defval="" range="*"/>
    <var name="msgtrl" vt="string" defval="" range="*" remark="Translation tag."/>
    <const name="rc_ok" vt="int" val="0"/>
    <const name="rc_nok" vt="int" val="1"/>
    <var name="rc" vt="int" defval="0" range="*"/>
    <var name="id" vt="string" defval="NULL" range="*" remark="ID"/>
    <var name="type" vt="string" defval="" range="*" remark="Object type like: st,lc,..."/>
    <var name="options" vt="int" defval="0" range="0-*"/>
    <var name="valA" vt="int" defval="0" range="*"/>
    <var name="valB" vt="int" defval="0" range="*"/>
    <var name="valC" vt="int" defval="0" range="*"/>
    <var name="strA" vt="string" defval="" range="*"/>
    <var name="strB" vt="string" defval="" range="*"/>
    <var name="strC" vt="string" defval="" range="*"/>
  </inspector>

  <sys remark="System command." wrappername="SysCmd">
    <const name="WIO" vt="string" val="WIO" remark="WIO IID constant."/>
    <const name="stoplocs" vt="string" val="stoplocs" remark="Command to switch of the automatic mode of all locos."/>
    <const name="enablecom" vt="string" val="enablecom" remark="Command to enable CS communication."/>
    <const name="stop" vt="string" val="stop" remark="Command to turn off track power."/>
    <const name="go" vt="string" val="go" remark="Command to turn on track power."/>
    <const name="init" vt="string" val="init"/>
    <const name="test" vt="string" val="test"/>
    <const name="save" vt="string" val="save"/>
    <const name="shutdown" vt="string" val="shutdown"/>
    <const name="shutdownserver" vt="string" val="shutdownserver"/>
    <const name="getini" vt="string" val="getini"/>
    <const name="setini" vt="string" val="setini"/>
    <const name="setsupportkey" vt="string" val="setsupportkey"/>
    <const name="getmodplan" vt="string" val="getmodplan"/>
    <const name="setmodplan" vt="string" val="setmodplan"/>
    <const name="getmodule" vt="string" val="getmodule"/>
    <const name="setmodule" vt="string" val="setmodule"/>
    <const name="routing" vt="string" val="routing"/>
    <const name="analog" vt="string" val="analog"/>
    <const name="dcc" vt="string" val="dcc"/>
    <const name="reset" vt="string" val="reset"/>
    <const name="version" vt="string" val="version"/>
    <const name="info" vt="string" val="info"/>
    <const name="link" vt="string" val="link"/>
    <const name="ulink" vt="string" val="ulink"/>
    <const name="polarise" vt="string" val="polarise"/>
    <const name="grouplink" vt="string" val="grouplink"/>
    <const name="hfi" vt="string" val="hfi" remark="Set HF light level for analog systems"/>
    <const name="slots" vt="string" val="slots"/>
    <const name="config" vt="string" val="config"/>
    <const name="loccnfg" vt="string" val="loccnfg"/>
    <const name="swcnfg" vt="string" val="swcnfg"/>
    <const name="txshortids" vt="string" val="txshortids"/>
    <const name="clearshortids" vt="string" val="clearshortids"/>
    <const name="ebreak" vt="string" val="ebreak"/>
    <const name="hold" vt="string" val="hold"/>
    <const name="sod" vt="string" val="sod" remark="Start of Day"/>
    <const name="eod" vt="string" val="eod" remark="End of Day"/>
    <const name="resetblock" vt="string" val="resetblock" remark="Trackdriver port in valA."/>
    <const name="resetstat" vt="string" val="resetstat"/>
    <const name="shutdownnode" vt="string" val="shutdownnode"/>
    <const name="updateserver" vt="string" val="updateserver"/>
    <const name="resetfx" vt="string" val="resetfx"/>
    <const name="weather" vt="string" val="weather"/>
    <const name="getstate" vt="string" val="getstate"/>
    <const name="activateactions" vt="string" val="activateactions"/>
    <const name="usefinder" vt="string" val="usefinder"/>
    <const name="lookupschedule" vt="string" val="lookupschedule"/>
    <const name="checksetup" vt="string" val="checksetup" remark="Check of all decoders are online. The valStr has a CSV bus list."/>
    <const name="trace" vt="string" val="trace"/>
    <const name="discover" vt="string" val="discover"/>
    <const name="scanserial" vt="string" val="scanserial"/>
    <const name="hallbegin" vt="string" val="hallbegin"/>
    <const name="hallend" vt="string" val="hallend"/>
    <const name="clone" vt="string" val="clone"/>
    <const name="unclone" vt="string" val="unclone"/>
    <const name="resetCS" vt="string" val="resetCS"/>
    <const name="resetoperated" vt="string" val="resetoperated"/>
    <const name="inspect" vt="string" val="inspect"/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <var name="informall" vt="bool" defval="false" remark="send command to all interfaces"/>
    <var name="onghost" vt="bool" defval="false" remark="Command triggered by a ghost train."/>
    <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
    <var name="id" vt="string" defval="NULL" range="*" remark="ID"/>
    <var name="oid" vt="string" defval="NULL" range="*" remark="Object ID"/>
    <var name="bus" vt="int" defval="0" range="0-*" remark="Interface bus"/>
    <var name="subuid" vt="int" defval="0" range="0-*"/>
    <var name="addr" vt="int" defval="0" range="0-*" remark="Interface address"/>
    <var name="port" vt="int" defval="0" range="0-*" remark="Interface port"/>
    <var name="val" vt="int" defval="0" range="*" remark="optional value"/>
    <var name="valStr" vt="string" defval="" range="*" remark="optional value"/>
    <var name="valAA" vt="int" defval="0" range="*" remark="optional value"/>
    <var name="valA" vt="int" defval="0" range="*" remark="optional value"/>
    <var name="valB" vt="int" defval="0" range="*" remark="optional value"/>
    <var name="valBB" vt="int" defval="0" range="*" remark="optional value"/>
    <var name="busA" vt="int" defval="0" range="*"/>
    <var name="busB" vt="int" defval="0" range="*"/>
    <var name="dist" vt="string" defval="debian6" range="*" remark="Distribution name"/>
    <var name="arch" vt="string" defval="i386" range="*" remark="Hardware architecture"/>
    <var name="wio" vt="bool" defval="false" remark="send command to all WIO clients"/>
    <var name="options" vt="int" defval="0" range="0-*"/>
  </sys>

  <model remark="Model command." wrappername="ModelCmd">
    <const name="save" vt="string" val="save"/>
    <const name="dontsaveonexit" vt="string" val="dontsaveonexit"/>
    <const name="initfield" vt="string" val="initfield"/>
    <const name="initctc" vt="string" val="initctc"/>
    <const name="setlockedroutes" vt="string" val="setlockedroutes"/>
    <const name="setsavepos" vt="string" val="setsavepos"/>
    <const name="add" vt="string" val="add"/>
    <const name="merge" vt="string" val="merge"/>
    <const name="addmodule" vt="string" val="addmodule"/>
    <const name="modify" vt="string" val="modify"/>
    <const name="change" vt="string" val="change"/>
    <const name="move" vt="string" val="move"/>
    <const name="remove" vt="string" val="remove"/>
    <const name="removelevel" vt="string" val="removelevel"/>
    <const name="plan" vt="string" val="plan" remark="Request the plan XML"/>
    <const name="lclist" vt="string" val="lclist" remark="Request the loco list"/>
    <const name="lcprops" vt="string" val="lcprops" remark="Request the loco properties"/>
    <const name="swlist" vt="string" val="swlist" remark="Request the switch list"/>
    <const name="swprops" vt="string" val="swprops" remark="Request the switch properties"/>
    <const name="stlist" vt="string" val="stlist" remark="Request the street list"/>
    <const name="sclist" vt="string" val="sclist" remark="Request the schedule list"/>
    <const name="sglist" vt="string" val="sglist" remark="Request the signal list"/>
    <const name="sgprops" vt="string" val="sgprops" remark="Request the signal properties"/>
    <const name="bklist" vt="string" val="bklist" remark="Request the block list"/>
    <const name="bkprops" vt="string" val="bkprops" remark="Request the block properties"/>
    <const name="colist" vt="string" val="colist" remark="Request the output list"/>
    <const name="coprops" vt="string" val="coprops" remark="Request the output properties"/>
    <const name="shortlist" vt="string" val="short" remark="Reduced list"/>
    <const name="plantitle" vt="string" val="plantitle" remark="Set the plan title"/>
    <const name="fstat" vt="string" val="fstat" remark="Request all feedback states"/>
    <const name="themes" vt="string" val="themes" remark="Request the themes to use with the plan."/>
    <const name="reconnect" vt="string" val="reconnect" remark="Reconnect without the plan."/>
    <const name="editmodeon" vt="string" val="editmodeon"/>
    <const name="editmodeoff" vt="string" val="editmodeoff"/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <var name="val" vt="string" defval="" range="*"/>
    <var name="desc" vt="string" defval="" range="*"/>
    <var name="disablemonitor" vt="bool" defval="false" remark="Client do not want to receive monitor messages embedded in exception wrappers.(iRoc)"/>
    <var name="cmdfrom" vt="string" defval="NULL" range="*"/>
    <var name="controlcode" vt="string" defval="" range="*"/>
    <var name="slavecode" vt="string" defval="" range="*"/>
    <var name="clientver" vt="string" defval="" range="*"/>
    <var name="clientrev" vt="int" defval="0" range="0-*"/>
    <var name="clientos" vt="string" defval="" range="*"/>
    <var name="clientarch" vt="string" defval="" range="*"/>
    <var name="clientname" vt="string" defval="" range="*"/>
    <var name="clientprod" vt="string" defval="" range="*"/>
  </model>

  <auto remark="Auto command." wrappername="AutoCmd">
    <const name="on" vt="string" val="on"/>
    <const name="off" vt="string" val="off"/>
    <const name="start" vt="string" val="start"/>
    <const name="gohome" vt="string" val="gohome"/>
    <const name="startvirtual" vt="string" val="startvirtual"/>
    <const name="resume" vt="string" val="resume" remark="Restore auto mode of locomotives from last session."/>
    <const name="stop" vt="string" val="stop"/>
    <const name="reset" vt="string" val="reset"/>
    <const name="softreset" vt="string" val="softreset"/>
    <const name="v0locos" vt="string" val="v0locos"/>
    <const name="vrestorelocos" vt="string" val="vrestorelocos" remark="Restore velocity of locomotives from last session."/>
    <const name="vcurrentlocos" vt="string" val="vcurrentlocos" remark="Restore velocity of locomotives from this session."/>
    <var name="cmd" vt="string" defval="" range="on,off,start,stop,reset"/>
    <var name="era" vt="int" defval="0" range="0-6"/>
    <var name="cargo" cat="details" vt="string" defval="NULL" range="*"/>
    <var name="class" cat="details" vt="string" defval="NULL" range="*"/>
    <var name="roadname" cat="details" vt="string" defval="NULL" range="*"/>
    <var name="owner" cat="details" vt="string" defval="NULL" range="*"/>
    <var name="mainline" vt="bool" defval="false"/>
    <var name="shunting" vt="bool" defval="false"/>
    <var name="reset" vt="bool" defval="false"/>
    <var name="level" vt="bool" defval="false"/>
    <var name="zlevel" vt="int" defval="0" range="0-*"/>
  </auto>

  <binstate remark="Binary state command" wrappername="BinStateCmd">
    <var name="id" vt="string" defval="" range="*"/>
    <var name="bus" vt="int" defval="0" range="0-*" required="false"/>
    <var name="addr" vt="int" defval="0" range="0-*"/>
    <var name="nr" vt="int" defval="0-*" remark="state number"/>
    <var name="data" vt="int" defval="0-1" remark="state data"/>
    <var name="timer" vt="int" defval="0-*" units="ms" remark="timer to reset state"/>
  </binstate>
    
  <tracking remark="Tracking information" wrappername="Tracking">
    <var name="iid" vt="string" defval=""/>
    <const name="rawtelegram" vt="string" val="rawtelegram"/>
    <var name="cmd" vt="string" defval=""/>
    <var name="time" vt="string" defval=""/>
    <var name="id" vt="string" defval="" range="*" remark="Loco ID"/>
    <var name="dir" vt="string" defval="" remark="Direction hints"/>
    <var name="location" vt="string" defval="" range="*" remark="Current location"/>
    <var name="ownlocation" vt="string" defval="" range="*" remark="Own location(namespace)"/>
    <var name="currblock" vt="string" defval="" range="*" remark="Current block"/>
    <var name="nextblock" vt="string" defval="" range="*" remark="Next block or location"/>
    <var name="destination" vt="string" defval="" range="*" remark="Schedule end destination"/>
    <var name="stationid" vt="string" defval=""/>
    <var name="strval1" vt="string" defval=""/>
    <var name="strval2" vt="string" defval=""/>
    <var name="raw" vt="string" defval=""/>
    <var name="ip" vt="string" defval="" range="*" remark="Client IP"/>
    <var name="port" vt="int" defval="0" range="*" remark="Client port"/>
  </tracking>
    
  <fn remark="Function command." wrappername="FunCmd">
    <var name="iid" vt="string" defval="" range="*"/>
    <var name="id" vt="string" defval="" range="*"/>
    <var name="bus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
    <var name="addr" vt="int" defval="0" range="0-*"/>
    <var name="prot" vt="string" defval="D"/>
    <var name="fndesc" vt="string" defval="NULL" remark="actual changed function decription"/>
    <var name="sound" vt="string" defval="" remark="Sound name to play."/>
    <var name="shift" vt="bool" defval="false"/>
    <var name="longclick" vt="bool" defval="false"/>
    <var name="fnaddr" vt="bool" defval="false"/>
    <var name="standalone" vt="bool" defval="false"/>
    <var name="informall" vt="bool" defval="false" remark="send command to all interfaces"/>
    <const name="on" vt="string" val="on"/>
    <const name="off" vt="string" val="off"/>
    <const name="longon" vt="string" val="longon"/>
    <const name="longoff" vt="string" val="longoff"/>
    <const name="flip" vt="string" val="flip"/>
    <var name="fncmd" vt="string" defval="NULL"/>
    <var name="fnchanged" vt="int" defval="-1" remark="actual changed function"/>
    <var name="fnchangedstate" vt="bool" defval="false" remark="actual changed function state"/>
    <var name="fncnt" vt="int" defval="4" range="0-*" remark="number of decoder funktions"/>
    <var name="group" vt="int" defval="0" range="0-*" remark="0=all, 1=f1-f4, 2=f5-f8, 3=f9-f12, 4=f13-f16, 5=f17-f20, 6=f21-f24, 7=f25-f28, 8=f29-f32"/>
    <var name="f0" vt="bool" defval="false"/>
    <var name="f1" vt="bool" defval="false"/>
    <var name="f2" vt="bool" defval="false"/>
    <var name="f3" vt="bool" defval="false"/>
    <var name="f4" vt="bool" defval="false"/>
    <var name="f5" vt="bool" defval="false"/>
    <var name="f6" vt="bool" defval="false"/>
    <var name="f7" vt="bool" defval="false"/>
    <var name="f8" vt="bool" defval="false"/>
    <var name="f9" vt="bool" defval="false"/>
    <var name="f10" vt="bool" defval="false"/>
    <var name="f11" vt="bool" defval="false"/>
    <var name="f12" vt="bool" defval="false"/>
    <var name="f13" vt="bool" d2efval="false"/>
    <var name="f14" vt="bool" defval="false"/>
    <var name="f15" vt="bool" defval="false"/>
    <var name="f16" vt="bool" defval="false"/>
    <var name="f17" vt="bool" defval="false"/>
    <var name="f18" vt="bool" defval="false"/>
    <var name="f19" vt="bool" defval="false"/>
    <var name="f20" vt="bool" defval="false"/>
    <var name="f21" vt="bool" defval="false"/>
    <var name="f22" vt="bool" defval="false"/>
    <var name="f23" vt="bool" defval="false"/>
    <var name="f24" vt="bool" defval="false"/>
    <var name="f25" vt="bool" defval="false"/>
    <var name="f26" vt="bool" defval="false"/>
    <var name="f27" vt="bool" defval="false"/>
    <var name="f28" vt="bool" defval="false"/>
    <var name="f29" vt="bool" defval="false"/>
    <var name="f30" vt="bool" defval="false"/>
    <var name="f31" vt="bool" defval="false"/>
    <var name="f32" vt="bool" defval="false"/>
    <var name="timedfn" vt="int" defval="-1" range="0-*"/>
    <var name="timer" vt="int" defval="0" unit="s" range="0-*" remark="function activation timer"/>
    <var name="event" vt="const char*" defval="none" range="*" remark="function deactivation event"/>
    <var name="eventblock" vt="char*" defval="NULL" range="*" remark="function deactivation block"/>
    <var name="timerf0" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf1" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf2" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf3" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf4" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf5" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf6" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf7" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf8" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf9" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf10" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf11" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf12" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf13" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf14" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf15" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf16" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf17" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf18" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf19" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf20" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf21" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf22" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf23" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf24" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf25" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf26" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf27" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf28" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf29" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf30" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf31" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="timerf32" vt="int" defval="0" unit="s" range="0-*"/>
    <var name="ledaddr" vt="int" defval="0" range="0-*"/>
    <var name="ledcount" vt="int" defval="0" range="0-*"/>
    <var name="ledbrightness" vt="int" defval="100" range="0-*"/>
    <var name="onpos" vt="int" defval="0" range="0-*"/>
    <var name="offpos" vt="int" defval="0" range="0-*"/>
    <color cardinality="1"/>
  </fn>

  <custom remark="Custom Command for interfaces" wrappername="CustomCmd">
   <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
   <var name="cmd" vt="string" defval="" range="*"/>
   <var name="arg1" vt="string" defval="" range="*"/>
   <var name="arg2" vt="string" defval="" range="*"/>
   <var name="arg3" vt="string" defval="" range="*"/>
   <var name="arg4" vt="string" defval="" range="*"/>
   <var name="arg5" vt="string" defval="" range="*"/>
   <var name="arg6" vt="string" defval="" range="*"/>
  </custom>

  <item wrappername="Item" remark="Message to change type, position and orientation of an item.">
    <var name="netid" vt="string" defval="" range="*"/>
    <var name="id" vt="string" defval="" range="*"/>
    <var name="shortid" vt="string" defval="" range="*"/>
    <var name="nr" vt="int" defval="0" range="0-*"/>
    <var name="resid" vt="string" defval="" range="*" remark="Reserved loco/route ID"/>
    <var name="selectable" vt="bool" defval="true" remark="Object can be selected as destination."/>
    <var name="clone" vt="bool" defval="false" remark="This is a clone of another object of the same type referred by origid."/>
    <var name="cloneid" vt="string" defval="" range="*" remark="The ID of the clone of this object."/>
    <var name="origid" vt="string" defval="" range="*" remark="The ID of the original in case this is a clone."/>
    <var name="iid" vt="string" defval="" range="*"/>
    <var name="docu" vt="string" defval="" range="*"/>
    <const name="modid_auto_gen" vt="string" val="auto-generated"/>
    <var name="modid" vt="string" defval="" range="*" remark="module ID for internal use only"/>
    <var name="decid" cat="general" vt="string" defval="" range="*" remark="Decoder ID"/>
    <var name="decstate" cat="general" vt="string" defval="" range="*" remark="Decoder state online/offline/error"/>
    <var name="bus" vt="int" defval="0" range="0-*"/>
    <var name="uidname" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
    <var name="addr" vt="int" defval="0" range="0-*"/>
    <var name="port" vt="int" defval="0" range="0-*"/>
    <var name="gate" vt="int" defval="0" range="0-*"/>
    <var name="baseaddr" vt="int" defval="0" range="0-*"/>
    <var name="offset" vt="string" defval="" range="*" required="false" remark="Variable ID with offset contents."/>
    <var name="len" vt="int" defval="0" range="0-*"/>
    <var name="oid" vt="string" defval="" range="*" required="false" remark="object ID"/>
    <var name="blockid" vt="string" defval="NULL" range="*"/>
    <var name="sensorid" vt="string" defval="NULL" range="*"/>
    <var name="routeids" vt="string" defval="NULL" range="*" remark="comma separated list of route ids used to show a special route representation"/>
    <var name="prev_id" vt="string" defval="" range="*" remark="in case of an id change this should help to find the original in the table"/>
    <var name="desc" vt="string" defval="" range="*" remark="description"/>
    <var name="location" vt="string" defval="" range="*" remark="Physical location of the device."/>
    <var name="remark" vt="string" defval="" range="*"/>
    <var name="userdata" vt="string" defval="" range="*" remark="user data for use in scripting"/>
    <var name="name" vt="string" defval="" range="*"/>
    <var name="x" vt="int" defval="-1" range="0-*"/>
    <var name="y" vt="int" defval="-1" range="0-*"/>
    <var name="prev_x" vt="int" defval="0" range="0-*" remark="x position before rotation"/>
    <var name="prev_y" vt="int" defval="0" range="0-*" remark="y position before rotation"/>
    <var name="flip_x" vt="int" defval="0" range="0-*"/>
    <var name="flip_y" vt="int" defval="0" range="0-*"/>
    <var name="z" vt="int" defval="0" range="0-*"/>
    <var name="cx" vt="int" defval="0" range="0-*" remark="Zero means not set; use default symbol size."/>
    <var name="cy" vt="int" defval="0" range="0-*"/>
    <var name="section" vt="string" defval="0" range="*"/>
    <var name="sectionpos" vt="int" defval="0" range="0-*"/>
    <const name="north" vt="string" val="north"/>
    <const name="south" vt="string" val="south"/>
    <const name="west" vt="string" val="west"/>
    <const name="east" vt="string" val="east"/>
    <var name="ori" vt="string" defval="NULL" range="north,south,west,east"/>
    <var name="prev_ori" vt="string" defval="NULL" range="north,south,west,east"/>
    <var name="flip_ori" vt="string" defval="NULL" range="north,south,west,east"/>
    <var name="type" vt="string" defval="NULL" range="*"/>
    <var name="flip_type" vt="string" defval="NULL" range="*"/>
    <var name="subtype" vt="string" defval="NULL" range="*"/>
    <var name="flip_subtype" vt="string" defval="NULL" range="*"/>
    <var name="show" vt="bool" defval="true"/>
    <var name="showid" vt="bool" defval="true"/>
    <var name="operable" vt="bool" defval="true"/>
    <var name="road" vt="bool" defval="false"/>
    <var name="dir" vt="bool" defval="false" remark="false=left, true=right"/>
    <var name="state" vt="string" defval="-"/>
    <var name="prevstate" vt="string" defval=""/>
    <var name="generated" vt="bool" defval="false" remark="On the fly generated for an unknown address. Triggered by a client."/>
    <var name="autogen" vt="bool" defval="false" remark="On the fly generated for an unknown address. Triggered by a client."/>
    <var name="copy" vt="bool" defval="false" remark="Copy marker for clients."/>
    <var name="owner" vt="string" defval="" range="*"/>
    <var name="identifier" vt="string" defval="" range="*"/>
    <var name="bgred" vt="int" defval="0" range="0-255" remark="Red value"/>
    <var name="bggreen" vt="int" defval="0" range="0-255" remark="Green value"/>
    <var name="bgblue" vt="int" defval="0" range="0-255" remark="Blue value"/>
    <var name="stamp" vt="long" defval="0" range="0-*" remark="Time stamp"/>
    <var name="publish" vt="string" defval="" range="*"/>
    <var name="subscribe" vt="string" defval="" range="*"/>
    <var name="cmd_on" vt="string" defval="" range="*"/>
    <var name="cmd_off" vt="string" defval="" range="*"/>
    <var name="cmd_flip" vt="string" defval="" range="*"/>
    <const name="cmd_subscribe" vt="string" val="subscribe"/>
    <const name="cmd_ctcrgb" vt="string" val="ctcrgb"/>
    <const name="cmd_setremark" vt="string" val="setremark"/>
    <const name="cmd_resetoperated" vt="string" val="resetoperated"/>
    <var name="cmd" vt="string" defval="" range="*"/>
    <const name="actor_user" vt="string" val="user"/>
    <var name="actor" vt="string" defval="" range="*" remark="user,st,ac,..."/>
    <var name="actorid" vt="string" defval="" range="*"/>
    <var name="altsvg" vt="bool" defval="false" remark="Allow alternating between two SVG containers."/>
    <var name="used" vt="bool" defval="false" remark="Temp. flag for show usage in the index description column."/>
    <var name="fieldevent" vt="bool" defval="false"/>
    <var name="accnr" cat="general" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
    <var name="operated" vt="int" defval="0" range="0-*"/>
    <var name="filename" vt="string" defval="" range="*"/>
    <var name="path" vt="string" defval="" range="*"/>
    <ctc cardinality="1"/>
  </item>

  <modplan wrappername="ModPlan" remark="Root node of the module master plan.">
    <var name="title" vt="string" defval="Modular Track Layout" range="*" remark="Title of plan."/>
    <var name="subtitle" vt="string" defval="Modular Track Layout" range="*" remark="Sub title of plan."/>
    <var name="locs" vt="string" defval="lc.xml" range="*" remark="File name of locomotive definitions."/>
    <var name="routes" vt="string" defval="rt.xml" range="*" remark="File name of route and schedule definitions."/>
    <var name="initfield" vt="bool" defval="false"/>
    <var name="modified" vt="bool" defval="false" remark="Flags module as modified by the GUI. (Internal use only)"/>
    <var name="savemodplan" vt="bool" defval="true" remark="Make sure locs and routes are in separate files and not part of a module!"/>
    <var name="savemodules" vt="bool" defval="false" remark="Leave modules un touched if set to false, but all changes are lost."/>
    <var name="modroutes" vt="bool" defval="true" remark="Use internal module routes in conjunction with connections."/>
    <module cardinality="n" remark="Module definition" wrappername="Module">
      <var name="title" vt="string" defval="Rename me!" required="true" range="*" remark="Text to show in the tab."/>
      <var name="filename" vt="string" defval="m1.xml" range="*" remark="File name of module track plan."/>
      <var name="id" vt="string" defval="" range="*" required="true" remark="Module ID."/>
      <var name="nr" vt="int" defval="0" range="0-*" remark="Module number."/>
      <var name="x" vt="int" defval="0" range="0-*" remark="x position on an overview panel"/>
      <var name="y" vt="int" defval="0" range="0-*" remark="y position on an overview panel"/>
      <var name="z" vt="int" defval="0" range="0-*"/>
      <var name="rotation" vt="int" defval="0" range="0,90,180,270" remark="rotation angle in degrees"/>
      <var name="cx" vt="int" defval="0" range="0-*"/>
      <var name="cy" vt="int" defval="0" range="0-*"/>
      <var name="red" vt="int" defval="0"/>
      <var name="green" vt="int" defval="0"/>
      <var name="blue" vt="int" defval="0"/>
      <var name="coordinates" vt="bool" defval="false" remark="Coordinates x,y,cx,cy are set for the rotation area."/>
      <var name="cmd" vt="string" defval="" range="*" remark="module command from rocgui"/>
      <const name="cmd_north" vt="string" val="north"/>
      <const name="cmd_east" vt="string" val="east"/>
      <const name="cmd_south" vt="string" val="south"/>
      <const name="cmd_west" vt="string" val="west"/>
      <const name="cmd_90" vt="string" val="90"/>
      <const name="cmd_180" vt="string" val="180"/>
      <const name="cmd_270" vt="string" val="270"/>
      <const name="cmd_move" vt="string" val="move"/>
      <const name="cmd_connect" vt="string" val="connect"/>
      <const name="cmd_state" vt="string" val="state"/>
      <var name="state" vt="string" defval="" range="*" remark="module state"/>
      <const name="state_normal" vt="string" val="normal"/>
      <const name="state_shortcut" vt="string" val="shortcut"/>
      <connection cardinality="n" remark="Connection specification" wrappername="ModuleConnection">
        <var name="id" vt="string" defval="" range="*" remark="Module ID; for internal use only."/>
        <var name="modid" vt="string" defval="" range="*" remark="Module ID which connects to this module."/>
        <const name="point_n" vt="string" val="point-n"/>
        <const name="point_e" vt="string" val="point-e"/>
        <const name="point_s" vt="string" val="point-s"/>
        <const name="point_w" vt="string" val="point-w"/>
        <var name="side" vt="string" defval="" range="point-n,point-e,point-s,point-w" remark="connection side"/>
      </connection>
    </module>
  </modplan>

  <modocc wrappername="ModOcc" remark="Root node of the block occupancy.">
    <occ cardinality="n" remark="Occupancy entry" wrappername="Occupancy">
      <var name="bkid" vt="string" defval="" range="*" required="true"/>
      <var name="secid" vt="string" defval="" range="*" required="false"/>
      <var name="lcid" vt="string" defval="" range="*" required="true"/>
      <var name="scid" vt="string" defval="" range="*" required="false"/>
      <var name="placing" vt="int" defval="0" remark="Loco placing: 0 = Not set, 1 = True, 2 = False"/>
      <var name="blockenterside" vt="int" defval="0" remark="Block enter side: 0 = Not set, 1 = True, 2 = False"/>
      <var name="closed" vt="bool" defval="false" remark="Signal this block as closed: Out of order."/>
      <var name="auto" vt="bool" defval="false" remark="The occupying loco is in automode."/>
      <var name="arrivetime" vt="long" defval="0" range="*" remark="time in seconds"/>
    </occ>
  </modocc>

  <actionctrl wrappername="ActionCtrl">
    <var name="id" vt="string" defval="" range="*" required="true"/>
    <var name="state" vt="string" defval="" range="*" remark="Activation state, empty is always."/>
    <var name="substate" vt="string" defval="" range="*"/>
    <var name="duration" vt="int" defval="0" range="0-*"/>
    <var name="timer" vt="int" defval="-1" range="0-*"/>
    <var name="auto" vt="bool" defval="true" remark="Activate in auto mode."/>
    <var name="manual" vt="bool" defval="true" remark="Activate in manual mode."/>
    <var name="atcmd" vt="bool" defval="true" remark="Activate at commands."/>
    <var name="atevt" vt="bool" defval="false" remark="Activate at events."/>
    <var name="deact" vt="string" defval="none" range="none,enter,in" remark="Deactivation event."/>
    <var name="callerid" vt="string" defval="" range="*" remark="ID of the caller object."/>
    <var name="callertype" vt="string" defval="" range="*" remark="Type of the caller object."/>
    <var name="callerdesc" vt="string" defval="" range="*" remark="Description of the caller object."/>
    <var name="calleruserdata" vt="string" defval="" range="*" remark="Data of the caller object."/>
    <var name="callerparam" vt="string" defval="" range="*" remark="CSV parameters for XMLScript."/>
    <var name="calleraddr" vt="int" defval="0" range="0-*"/>
    <var name="callerstate" vt="string" defval="" range="*"/>
    <var name="identifier" vt="string" defval="" range="*"/>
    <var name="lcenterside" vt="bool" defval="true"/>
    <var name="lcid" vt="string" defval="" range="*"/>
    <var name="lcaddr" vt="string" defval="" range="*"/>
    <var name="carid" vt="string" defval="" range="*"/>
    <var name="eventlcid" vt="string" defval="" range="*"/>
    <var name="lcclass" vt="string" defval="" range="*"/>
    <var name="bkid" vt="string" defval="" range="*"/>
    <var name="stid" vt="string" defval="" range="*"/>
    <var name="counter" vt="int" defval="0" range="0-*"/>
    <var name="countedcars" vt="int" defval="0" range="0-*"/>
    <var name="carcount" vt="int" defval="0" range="0-*"/>
    <var name="wheelcount" vt="int" defval="0" range="0-*"/>
    <var name="regval" vt="int" defval="0" range="0-*"/>
    <var name="load" vt="int" defval="0" range="0-*"/>
    <var name="volt" vt="int" defval="0" range="0-*"/>
    <var name="boostertemp" vt="int" defval="0" range="0-*"/>
    <var name="temp" vt="int" defval="0" range="0-*"/>
    <var name="reset" vt="bool" defval="true" remark="Reset counter."/>
    <var name="param" vt="string" defval="" range="*"/>
    <var name="desc" vt="string" defval="" range="*"/>
    <var name="mvspeed" vt="float" defval="0.0" range="*"/>
    <var name="mvtrainlen" vt="int" defval="0" range="*"/>
    <var name="allconditions" vt="bool" defval="true" remark="All conditions must be true."/>
    <var name="callertext" vt="string" defval="" range="*"/>
    <var name="mode" vt="string" defval="" range="*"/>
    <var name="aspect" vt="int" defval="0" range="0-*"/>
    <var name="val1" vt="int" defval="0" range="0-*"/>
    <var name="val2" vt="int" defval="0" range="0-*"/>
    <actioncond cardinality="n" remark="Optional condition." wrappername="ActionCond">
      <var name="id" vt="string" defval="" range="*" required="true"/>
      <var name="subid" vt="string" defval="" range="*"/>
      <var name="type" vt="string" defval="" range="co,sw,sg,fb,lc,bk" required="true"/>
      <var name="state" vt="string" defval="" range="*" remark="Activation state, empty is always."/>
      <var name="mustbetrue" vt="bool" defval="false" remark="This condition must be true, also in case allconditions is false."/>
    </actioncond>
  </actionctrl>

  <speedcondition wrappername="SpeedCondition">
    <var name="desc" vt="string" defval="" remark="Condition description"/>
    <var name="type" vt="string" defval="" remark="Train type"/>
    <var name="class" vt="string" defval="" remark="Classes"/>
    <var name="variable" vt="string" defval="" remark="Variable ID"/>
    <var name="varsub" vt="string" defval="" remark="Variable sub ID"/>
    <var name="value" vt="string" defval="=0" remark="Variable value"/>
    <var name="percent" vt="int" defval="0" unit="%" range="0-100" remark="Speed in percent."/>
  </speedcondition>
  
  <color wrappername="Color" >
    <var name="id" vt="string" defval="" range="*"/>
    <var name="red" vt="int" defval="0" range="0-255" remark="Red value"/>
		<var name="green" vt="int" defval="0" range="0-255" remark="Green value"/>
		<var name="blue" vt="int" defval="0" range="0-255" remark="Blue value"/>
    <var name="white" vt="int" defval="0" range="0-255" remark="White value"/>
    <var name="white2" vt="int" defval="0" range="0-255" remark="Second white value"/>
    <var name="brightness" vt="int" defval="0" range="0-255" remark="Brightness"/>
    <var name="saturation" vt="int" defval="254" range="0-254" remark="Brightness"/>
  </color>

  <fundef wrappername="FunDef">
    <var name="fn" vt="int" defval="1" range="1-*" remark="function number"/>
    <var name="code" vt="int" defval="0" range="0-*" remark="Function code."/>
    <var name="timer" vt="int" defval="0" range="0-99" unit="s" remark="function timer"/>
    <var name="text" vt="string" defval="function" range="*" remark="function label"/>
    <var name="sound" vt="string" defval="" range="*" remark="sound file"/>
    <var name="icon" vt="string" defval="" range="*" remark="icon file"/>
    <var name="iconnr" vt="int" defval="0" range="0-99" remark="icon file number"/>
    <var name="pushbutton" vt="bool" defval="false"/>
    <var name="on" vt="bool" defval="false" remark="activation"/>
    <var name="onevent" vt="string" defval="enter_block" range="enter_block,exit_block,in_block,out_block" remark="Activation event."/>
    <var name="onblockid" vt="string" defval="NULL" range="*" remark="BlockID."/>
    <var name="onbkside" vt="int" defval="0" remark="0=both, 1=plus, 2=min"/>
    <var name="offevent" vt="string" defval="in_block" range="enter_block,exit_block,in_block,out_block" remark="Deactivation event."/>
    <var name="offblockid" vt="string" defval="NULL" range="*" remark="BlockID."/>
    <var name="offbkside" vt="int" defval="0" remark="0=both, 1=plus, 2=min"/>
    <var name="addr" vt="int" defval="0" range="0-*" remark="Function decoder address."/>
    <var name="mappedfn" vt="int" defval="0" range="0-*" remark="Mapped function number in case of other address then main decodcer."/>
    <const name="enter_block" vt="string" val="enter_block"/>
    <const name="in_block" vt="string" val="in_block"/>
    <const name="exit_block" vt="string" val="exit_block"/>
    <const name="run" vt="string" val="run"/>
    <const name="stall" vt="string" val="stall"/>
    <var name="ledaddr" vt="int" defval="0" range="0-*"/>
    <var name="ledcount" vt="int" defval="0" range="0-*"/>
    <var name="ledbrightness" vt="int" defval="100" range="0-*"/>
    <var name="ledaddrR" vt="int" defval="0" range="0-*"/>
    <var name="ledcountR" vt="int" defval="0" range="0-*"/>
    <var name="ledbrightnessR" vt="int" defval="100" range="0-*"/>
    <var name="onpos" vt="int" defval="0" range="0-*"/>
    <var name="offpos" vt="int" defval="0" range="0-*"/>
    <var name="rgbFrontFwd" vt="int" defval="0" range="0-*"/>
    <var name="rgbRearFwd" vt="int" defval="0" range="0-*"/>
    <var name="rgbFrontRev" vt="int" defval="0" range="0-*"/>
    <var name="rgbRearRev" vt="int" defval="0" range="0-*"/>
    <var name="rgbType" vt="int" defval="0" range="0-*" remark="0=RGB, 1=GRB"/>
    <var name="hide" vt="bool" defval="false"/>
    <var name="disable" vt="bool" defval="false"/>
    <color cardinality="1"/>
  </fundef>
  
  <plan structname="RRP" wrappername="Plan" remark="Root node of the planfile.">
    <var name="title" vt="string" defval="New Plan" range="*" remark="Title of plan."/>
    <var name="remark" vt="string" defval="" range="*" remark="Notes."/>
    <var name="name" vt="string" defval="plan.xml" range="*" remark="Filename of plan."/>
    <var name="scale" vt="int" defval="87" remark="Scale of the layout."/>
    <var name="scalename" vt="string" defval="" remark="Z, N, TT, H0, 0, 00, 1, G, ..."/>
    <var name="workspace" cat="general" vt="string" defval="" range="*"/>
    <const name="metrics_mm" vt="int" val="0"/>
    <const name="metrics_cm" vt="int" val="1"/>
    <var name="metrics" vt="int" defval="0"/>
    <var name="timestamp" vt="string" defval="" range="*"/>
    <var name="rocviewversion" vt="string" defval="" range="*" remark="Rocgui version at last save of a local plan."/>
    <var name="rocrailversion" vt="string" defval="" range="*" remark="Rocrail version at last save of a plan."/>
    <var name="rocrailpwd" vt="string" defval="" range="*" remark="Rocrail working directory."/>
    <var name="rocrailos" vt="string" defval="" range="*" remark="Rocrail OS."/>
    <var name="rocrailarch" vt="string" defval="" range="*" remark="Rocrail ARCH."/>
    <var name="rocrailip" vt="string" defval="" range="*" remark="Rocrail IP."/>
    <var name="rocrailorigin" vt="string" defval="" range="*" remark="Rocrail build origin."/>
    <var name="modplan" vt="bool" defval="false" remark="Flags the Rocview if it is assembled from a modular layout definition."/>
    <var name="themes" vt="string" defval="" range="*" remark="Preferred themes for redndering this plan by Rocviews."/>
    <var name="supportkey" vt="bool" defval="false" remark="Flags if a valid supportkey is found."/>
    <var name="healthy" vt="bool" defval="true"/>
    <var name="modtitle" vt="string" defval="Module Overview" range="*" remark="Title of plan."/>
    <var name="IIDs" vt="string" defval="" range="*" remark="IIDs for mobile clients."/>
    <digint cardinality="n" wrappername="DigInt" referenceonly="true"/>
    <system cardinality="1" wrappername="SystemActions">
      <actionctrl cardinality="n"/>
    </system>
    
    <accgrouplist cardinality="1" remark="Accessory group table" wrappername="AccGroupList">
      <accgroup cardinality="n" wrappername="AccGroup">
        <var name="id" vt="string" defval="" range="*" required="true" remark="Accessory group name."/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="accs" vt="string" defval="" range="*" required="true" remark="Output and switche IDs as csv."/>
        <var name="state" vt="string" defval="NULL" range="on,off" remark="Current state of accgroup."/>
      </accgroup>
    </accgrouplist>
    
    <lightctrl cardinality="1" wrappername="LightCtrl">
      <const name="go" vt="string" val="go"/>
      <const name="stop" vt="string" val="stop"/>
      <var name="cmd" vt="string" defval="" range="*" remark="Command"/>
      <var name="go" vt="bool" defval="true"/>
      <var name="delay" vt="int" defval="10"/>
      <light cardinality="n" wrappername="Light">
        <var name="id" vt="string" defval="" range="*"/>
        <var name="coid" vt="string" defval="" range="*" remark="Output ID"/>
        <var name="desc" vt="string" defval="" range="*" remark="Light description"/>
        <var name="fromhour" vt="int" defval="0"/>
        <var name="frommin" vt="int" defval="0"/>
        <var name="fromplus" vt="int" defval="0"/>
        <var name="tohour" vt="int" defval="0"/>
        <var name="tomin" vt="int" defval="0"/>
        <var name="toplus" vt="int" defval="0"/>
        <var name="brion" vt="int" defval="0" remark="light on in case brightnes is less or equal"/>
        <var name="brioff" vt="int" defval="0" remark="light off in case brightnes is greater or equal"/>
        <const name="enable" vt="string" val="enable"/>
        <const name="disable" vt="string" val="disable"/>
        <const name="flip" vt="string" val="flip"/>
        <var name="cmd" vt="string" defval="" range="*" remark="Command"/>
        <const name="continuous" vt="int" val="0"/>
        <const name="random" vt="int" val="1"/>
        <const name="blink" vt="int" val="2"/>
        <const name="fadein" vt="int" val="3"/>
        <const name="fadeout" vt="int" val="4"/>
        <var name="type" vt="int" defval="0"/>
        <var name="min" vt="int" defval="1"/>
        <var name="max" vt="int" defval="1"/>
        <var name="min2" vt="int" defval="0"/>
        <var name="max2" vt="int" defval="0"/>
        <var name="rmin" vt="int" defval="0"/>
        <var name="rmax" vt="int" defval="0"/>
        <var name="initrandom" vt="bool" defval="false"/>
        <var name="reloadrandom" vt="bool" defval="false"/>
        <var name="ontimer" vt="int" defval="0"/>
        <var name="offtimer" vt="int" defval="0"/>
        <var name="onoff" vt="bool" defval="false"/>
        <var name="fadeinval" vt="int" defval="0"/>
        <var name="fadeoutval" vt="int" defval="0"/>
        <var name="enable" vt="bool" defval="true"/>
        <var name="deactivate" vt="bool" defval="true"/>
        <var name="weekdays" vt="int" defval="127" range="0-127*" remark="bit 0=sunday, 1=monday, ... default all days 0x7F"/>
        <color cardinality="1"/>
		  </light>  
      <actionctrl cardinality="n"/>
    </lightctrl>
    
    <weatherlist cardinality="n" wrappername="WeatherList">
      <weather cardinality="n" wrappername="Weather">
        <var name="id" vt="string" defval="" range="*"/>
        <var name="outputs" vt="string" defval="" range="*" remark="Comma separated list of outputs from east to west."/>
        <var name="deactivate" vt="string" defval="" range="*" remark="Comma separated list of outputs to deactivate at start."/>
        <var name="maxbri" vt="int" defval="255" range="0-255" remark="Maximal brightness."/>
        <var name="minbri" vt="int" defval="0" range="0-255" remark="Minimal brightness."/>
        <var name="slidingdaylight" vt="bool" defval="false"/>
        <var name="slidingdaylightminbri" vt="int" defval="0" range="0-100" remark="Minimal brightness percentage for all lamps."/>
        <var name="relativetime" vt="bool" defval="false"/>
        <var name="colorsliding" vt="int" defval="30" range="10-120" unit="min" remark="Color sliding time."/>
        <var name="nightsliding" vt="int" defval="30" range="1-120" unit="min" remark="Night sliding time."/>
        <var name="colortable" vt="bool" defval="false"/>
        <var name="usewhite" vt="bool" defval="true"/>
        <var name="usewhite2" vt="bool" defval="false"/>
        <var name="usebri" vt="bool" defval="true"/>
        <var name="usesat" vt="bool" defval="true"/>
        <var name="usetemp" vt="bool" defval="true"/>
        <var name="offatshutdown" vt="bool" defval="true"/>
        <var name="divider" vt="int" defval="1" range="0-100" remark="time devider: 1 = realtime"/>
        <var name="pause" vt="bool" defval="false"/>
        <var name="pauseRed" vt="int" defval="0" range="0-255"/>
        <var name="pauseGreen" vt="int" defval="0" range="0-255"/>
        <var name="pauseBlue" vt="int" defval="0" range="0-255"/>
        <var name="pauseWhite" vt="int" defval="0" range="0-255"/>
        <var name="pauseWhite2" vt="int" defval="0" range="0-255"/>
        <var name="pauseBri" vt="int" defval="255" range="0-255"/>
        <const name="pauseon" vt="string" val="pauseon"/>
        <const name="pauseoff" vt="string" val="pauseoff"/>
        <const name="go" vt="string" val="go"/>
        <const name="stop" vt="string" val="stop"/>
        <var name="cmd" vt="string" defval="" range="*"/>
        <sunrise cardinality="1" remark="Sunrise definition" wrappername="Sunrise">
          <var name="hour" vt="int" defval="6" range="0-23"/>
          <var name="minute" vt="int" defval="0" range="0-59"/>
          <var name="red" vt="int" defval="255" range="0-255"/>
          <var name="green" vt="int" defval="255" range="0-255"/>
          <var name="blue" vt="int" defval="255" range="0-255"/>
          <var name="white" vt="int" defval="0" range="0-255"/>
          <var name="white2" vt="int" defval="0" range="0-255"/>
        </sunrise>
        <noon cardinality="1" remark="Noon definition" wrappername="Noon">
          <var name="hour" vt="int" defval="12" range="0-23"/>
          <var name="minute" vt="int" defval="0" range="0-59"/>
          <var name="red" vt="int" defval="255" range="0-255"/>
          <var name="green" vt="int" defval="255" range="0-255"/>
          <var name="blue" vt="int" defval="255" range="0-255"/>
          <var name="white" vt="int" defval="255" range="0-255"/>
          <var name="white2" vt="int" defval="0" range="0-255"/>
        </noon>
        <sunset cardinality="1" remark="Sunset definition" wrappername="Sunset">
          <var name="hour" vt="int" defval="18" range="0-23"/>
          <var name="minute" vt="int" defval="0" range="0-59"/>
          <var name="red" vt="int" defval="255" range="0-255"/>
          <var name="green" vt="int" defval="255" range="0-255"/>
          <var name="blue" vt="int" defval="255" range="0-255"/>
          <var name="white" vt="int" defval="0" range="0-255"/>
          <var name="white2" vt="int" defval="0" range="0-255"/>
        </sunset>
        <night cardinality="1" remark="Night definition" wrappername="Night">
          <var name="outputs" vt="string" defval="" range="*" remark="Comma separated list of outputs."/>
          <var name="bri" vt="int" defval="5" range="0-255" remark="brightness."/>
          <var name="red" vt="int" defval="0" range="0-255"/>
          <var name="green" vt="int" defval="0" range="0-255"/>
          <var name="blue" vt="int" defval="255" range="0-255"/>
          <var name="white" vt="int" defval="0" range="0-255"/>
          <var name="white2" vt="int" defval="0" range="0-255"/>
        </night>
        <weathercolor cardinality="n" remark="Hourly color definition" wrappername="WeatherColor">
          <var name="hour" vt="int" defval="6" range="0-23"/>
          <var name="minute" vt="int" defval="0" range="0-59"/>
          <var name="temp" vt="int" defval="20" range="*"/>
          <var name="red" vt="int" defval="255" range="0-255"/>
          <var name="green" vt="int" defval="255" range="0-255"/>
          <var name="blue" vt="int" defval="255" range="0-255"/>
          <var name="white" vt="int" defval="0" range="0-255"/>
          <var name="white2" vt="int" defval="0" range="0-255"/>
          <var name="bri" vt="int" defval="255" range="0-255"/>
          <var name="sat" vt="int" defval="200" range="0-255"/>
        </weathercolor>
        <weathertheme cardinality="n" wrappername="WeatherTheme">
          <var name="id" vt="string" defval="" range="*"/>
          <var name="dim" vt="int" defval="0" unit="%" range="0-100"/>
          <var name="outputs" vt="string" defval="" range="*" remark="Comma separated list of outputs from lightning."/>
          <var name="random" vt="bool" defval="false"/>
          <var name="hour" vt="int" defval="0" range="0-23"/>
          <var name="minute" vt="int" defval="0" range="0-59"/>
          <var name="duration" vt="int" defval="20" range="10-1440"/>
          <var name="sound" vt="string" defval="" range="*" remark="Comma separated list of sounds."/>
          <var name="soundoutput" vt="string" defval="" range="*" remark="Sound output"/>
          <var name="soundrandomrate" vt="int" defval="5" range="0-9"/>
        </weathertheme>
        <actionctrl cardinality="n"/>
      </weather>
    </weatherlist>
    <zlevel cardinality="n" remark="Z-Level description" wrappername="ZLevel">
      <var name="title" vt="string" defval="" range="*"/>
      <var name="plantitle" vt="string" defval="" range="*"/>
      <var name="origtitle" vt="string" defval="" range="*"/>
      <var name="planscale" vt="int" defval="87" remark="Scale of the layout."/>
      <var name="planmetrics" vt="int" defval="0"/>
      <var name="z" vt="int" defval="0" range="0-9"/>
      <var name="tabidx" vt="int" defval="-1"/>
      <var name="show" vt="bool" defval="true"/>
      <var name="active" vt="bool" defval="false" remark="active notebook page"/>
      <var name="modid" vt="string" defval="" range="*" remark="module ID"/>
      <var name="modnr" vt="int" defval="0" range="0-*" remark="module number"/>
      <var name="modviewx" vt="int" defval="0" range="0-*" remark="x position on an overview panel"/>
      <var name="modviewy" vt="int" defval="0" range="0-*" remark="y position on an overview panel"/>
      <var name="modviewcx" vt="int" defval="0" range="0-*" remark="x size on an overview panel"/>
      <var name="modviewcy" vt="int" defval="0" range="0-*" remark="y size on an overview panel"/>
      <var name="symbolprefix" vt="string" defval="" range="*"/>
      <var name="rotation" vt="int" defval="0" range="0,90,180,270" remark="Rotation angle."/>
      <var name="scale" vt="float" defval="1.0"/>
      <var name="red" vt="int" defval="0"/>
      <var name="green" vt="int" defval="0"/>
      <var name="blue" vt="int" defval="0"/>
      <const name="backcolor" vt="string" val="backcolor"/>
      <var name="cmd" vt="string" defval="" range="*"/>
    </zlevel>
    <boosterlist cardinality="1" remark="Booster list for power management" wrappername="BoosterList">
      <booster cardinality="n" remark="Booster definition" wrappername="Booster" categories="general,modules,blocks,details,internal">
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="desc" cat="general" vt="string" defval="" range="*"/>
        <var name="iid" cat="general" vt="string" defval="NULL" range="*" remark="Interface ID"/>
        <var name="district" cat="general" vt="string" defval="" range="*" remark="Power district description."/>
        <var name="modids" cat="modules" vt="string" defval="" range="*"/>
        <var name="blockids" cat="blocks" vt="string" defval="" range="*"/>
        <var name="blockpowerevents" cat="details" vt="bool" defval="false" remark="Inform blocks of power events."/>
        <var name="scfb" cat="general" vt="string" defval="" range="*"/>
        <var name="powerfb" cat="general" vt="string" defval="" range="*"/>
        <var name="powersw" cat="general" vt="string" defval="" range="*"/>
        <var name="bus" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="addr" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="uid" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="subuid" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="load" cat="internal" vt="int" defval="0" units="mA" range="0-*"/>
        <var name="volt" cat="internal" vt="int" defval="0" units="mV" range="0-*"/>
        <var name="temp" cat="internal" vt="int" defval="0" units="C" range="0-*"/>
        <var name="loadmax" cat="internal" vt="int" defval="0" units="mA" range="0-*"/>
        <var name="voltmin" cat="internal" vt="int" defval="0" units="mV" range="0-*"/>
        <var name="tempmax" cat="internal" vt="int" defval="0" units="C" range="0-*"/>
        <var name="doesreport" cat="details" vt="bool" defval="false" remark="Booster report status."/>
        <var name="power" cat="details" vt="bool" defval="false" remark="Track power flag."/>
        <var name="shortcut" cat="details" vt="bool" defval="false" remark="Shortcut flag."/>
        <var name="shortcutstamp" cat="details" vt="string" defval="" remark="Short circuit time stamp."/>
        <var name="scopt_poweroffall" cat="details" vt="bool" defval="false" remark="Power off all boosters at shortcut."/>
        <var name="scopt_repoweron" cat="details" vt="bool" defval="false" remark="Repower on incase the shortcut is cleared."/>
        <var name="scopt_manually" cat="details" vt="bool" defval="false" remark="Do not take any actions."/>
        <var name="status" cat="general" vt="string" defval="" range="*"/>
        <actionctrl cardinality="n"/>
        <boosterevent cardinality="n" wrappername="BoosterEvent">
          <var name="timestamp" vt="long" defval="0"/>
	        <var name="load" vt="int" defval="0" units="mA" range="0-*"/>
	        <var name="volt" vt="int" defval="0" units="mV" range="0-*"/>
	        <var name="temp" vt="int" defval="0" units="C" range="0-*"/>
        </boosterevent>
      </booster>
    </boosterlist>
    <mv cardinality="1" remark="Measurement Velocity Track" wrappername="MVTrack">
      <var name="distance" vt="int" defval="0" units="mm" remark="Distance between the two events."/>
      <var name="distanceR" vt="int" defval="0" units="mm" remark="Distance between the two events in reverse direction."/>
      <var name="s1" vt="string" defval="" range="*" required="true" remark="Feedback ID"/>
      <var name="s2" vt="string" defval="" range="*" required="true" remark="Feedback ID"/>
      <var name="mph" vt="bool" defval="false" remark="convert to MPH"/>
      <var name="oneway" vt="bool" defval="true" remark="Only one way measurement: s1...s2"/>
      <const name="calibrate_max" vt="int" val="1"/>
      <const name="calibrate_mid" vt="int" val="2"/>
      <var name="calibrate" vt="int" defval="0" remark="0=none 1=max 2=mid"/>
      <var name="calctrainlen" vt="bool" defval="false" remark="Calculate train length."/>
      <var name="offtime" vt="int" defval="0" units="ms" remark="Debounce off timer."/>
      <var name="lcid" vt="string" defval="" range="*" remark="Calibrating loco"/>
      <var name="record" vt="bool" defval="false" remark="Record the results in a file."/>
      <var name="bkid" vt="string" defval="" range="*" remark="Block for listening to get loco ID"/>
      <var name="speed" vt="int" defval="0" units="kmh" remark="Reported field speed measurement."/>
      <var name="length" vt="int" defval="0" units="mm" remark="Reported field train length measurement."/>
      <const name="reset" vt="string" val="reset"/>
      <const name="set_s1" vt="string" val="sets1"/>
      <const name="set_s2" vt="string" val="sets2"/>
      <const name="set_distance" vt="string" val="setdistance"/>
      <const name="set_distanceR" vt="string" val="setdistanceR"/>
      <const name="set_lcid" vt="string" val="setlcid"/>
      <const name="set_calibrate" vt="string" val="setcalibrate"/>
      <const name="set_calctrainlen" vt="string" val="setcalctrainlen"/>
      <const name="field" vt="string" val="field"/>
      <const name="calibrate_test" vt="string" val="calibratetest"/>
      <var name="cmd" cat="internal" vt="string" defval="" range="*"/>
      <actionctrl cardinality="n"/>
    </mv>
    <swlist cardinality="1" remark="Turnout table" wrappername="SwitchList">
      <sw cardinality="n" wrappername="Switch" remark="Switch definition." categories="general,interface,wiring,ctc,control,frog,td,internal">
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="oid" cat="general" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="blockid" cat="general" vt="string" defval="NULL" range="*"/>
        <var name="desc" cat="general" vt="string" defval="" range="*" remark="description"/>
        <var name="accessory" cat="general" vt="bool" defval="true"/>
        <var name="porttype" cat="general" vt="int" defval="0" range="0-*" required="false" remark=""/>
        <var name="decid" cat="general" vt="string" defval="" range="*" remark="Decoder ID"/>
        <var name="sod" cat="general" vt="bool" defval="true"/>
        <var name="shortid" cat="general" vt="string" defval="" range="*" remark="Short IDs are used for throttle displays."/>
        <var name="useshortid" cat="general" vt="bool" defval="false" remark="Use short ID to send to throttle."/>
        <var name="multilock" vt="bool" defval="false"/>

        <!-- Addressing -->
        <var name="iid" cat="interface" vt="string" defval="NULL" range="*" remark="Interface ID"/>
        <var name="bus" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr1" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port1" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="port of decoder unit."/>
        <var name="gate1" cat="interface" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="addr2" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address in case of type 3way"/>
        <var name="port2" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Only in case of type 3way."/>
        <var name="gate2" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Only in case of type 3way."/>
        <var name="addr1remark" cat="general" vt="string" defval="" range="*"/>
        <var name="addr2remark" cat="general" vt="string" defval="" range="*"/>
        
        <var name="param1" cat="interface" vt="int" defval="0" range="0-*" remark="parameter"/>
        <var name="value1" cat="interface" vt="int" defval="1" range="0-*" remark="value"/>
        <var name="param2" cat="interface" vt="int" defval="0" range="0-*" remark="parameter"/>
        <var name="value2" cat="interface" vt="int" defval="1" range="0-*" remark="value"/>
        <var name="param" cat="interface" vt="int" defval="0" range="0-*"/>
        
        <!-- If the frog polarisation needs to be switched separately.  -->
        <var name="frogiid" cat="frog" vt="string" defval="NULL" range="*" remark="Interface ID"/>
        <var name="frogprot" cat="interface" vt="string" defval="D"/>
        <var name="buspol" cat="frog" vt="int" defval="0" range="0-*" required="false"/>
        <var name="addr0pol1" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="decoder address of the polarisation"/>
        <var name="port0pol1" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="port of decoder unit."/>
        <var name="gate0pol1" cat="frog" vt="int" defval="0" range="0-1" required="false" remark="gate of port."/>
        <var name="addr0pol2" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="decoder address of the polarisation"/>
        <var name="port0pol2" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="port of decoder unit."/>
        <var name="gate0pol2" cat="frog" vt="int" defval="0" range="0-1" required="false" remark="gate of port."/>
        <var name="addr1pol1" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="decoder address of the polarisation"/>
        <var name="port1pol1" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="port of decoder unit."/>
        <var name="gate1pol1" cat="frog" vt="int" defval="0" range="0-1" required="false" remark="gate of port."/>
        <var name="addr1pol2" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="decoder address of the polarisation"/>
        <var name="port1pol2" cat="frog" vt="int" defval="0" range="0-*" required="false" remark="port of decoder unit."/>
        <var name="gate1pol2" cat="frog" vt="int" defval="0" range="0-1" required="false" remark="gate of port."/>
        <var name="frogaccessory" cat="frog" vt="bool" defval="true"/>
        <var name="frogswitch" cat="frog" vt="bool" defval="false"/>
        <var name="froginvert" cat="frog" vt="bool" defval="false"/>
        <var name="frogsinglegate" cat="frog" vt="bool" defval="false"/>
        <var name="frogporttype" cat="frog" vt="int" defval="0" range="0-*" required="false" remark=""/>
        <var name="frogtimer" cat="frog" vt="int" defval="0" range="0-1000" required="false" remark="If set to zero the wiring event is used."/>

        <var name="manual" cat="general" vt="bool" defval="false"/>
        <var name="manualfree" cat="general" vt="bool" defval="false" remark="Only if the switch is not locked."/>
        <var name="outoforder" cat="general" vt="bool" defval="false"/>
        <var name="staticuse" cat="general" vt="bool" defval="false"/>
        <var name="singlegate" cat="interface" vt="bool" defval="false"/>
        <var name="twinaddr" cat="internal" vt="bool" defval="false" remark="Flat system with two addresses for dual coil motor."/>
        <var name="gatevalue" cat="interface" vt="int" defval="2" range="0-2" required="false" remark="0=red 1=green 2=both"/>
        <var name="inv" cat="interface" vt="bool" defval="false" remark="Switch inverted. (Software wiring correction)"/>
        <var name="inv2" cat="interface" vt="bool" defval="false" remark="Switch inverted. (Software wiring correction)"/>
        <var name="exclude" cat="general" vt="bool" defval="false" remark="Exclude from router as command in generated routes."/>

        <var name="pause" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Pause ms before executing command."/>
        <var name="cmd_update" cat="interface" vt="bool" defval="false"/>
        <var name="cmd_extra" cat="interface" vt="int" defval="0"/>
        <var name="cmd_lcid" cat="interface" vt="const char*" defval="NULL"/>
        
        <var name="fromoutput" cat="internal" vt="bool" defval="false" remark="Command is from an oputput object."/>

        <var name="delay" cat="interface" vt="int" defval="500" range="0-*" required="false" remark="overwrites control.swtimeout if greater then 0"/>
        <var name="delaytime" cat="interface" vt="long" defval="0" range="0-*" required="false" remark="Delay timer for internal use only."/>
        <var name="actdelay" cat="interface" vt="bool" defval="true" remark="if false: delay is programmed in central unit or module"/>
        <var name="syncdelay" cat="interface" vt="bool" defval="false" remark="Delay until is ready."/>
        <var name="x" cat="general" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" cat="general" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" cat="general" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="ori" cat="general" vt="string" defval="NULL" range="north,south,west,east" remark="Orientation in the plan."/>
        <var name="show" cat="general" vt="bool" defval="true" remark="Visibility flag."/>
        <const name="tune1range" vt="string" val="tune1range" remark="tune range servo 1"/>
        <const name="tune2range" vt="string" val="tune2range" remark="tune range servo 2"/>
        <const name="tune1on" vt="string" val="tune1on" remark="tune channel"/>
        <const name="tune1off" vt="string" val="tune1off" remark="tune channel"/>
        <const name="tune2on" vt="string" val="tune2on" remark="tune channel"/>
        <const name="tune2off" vt="string" val="tune2off" remark="tune channel"/>
        <const name="none" vt="string" val="none" remark="none savepos"/>
        <const name="open" vt="string" val="open" remark="Open command. (Out of order)"/>
        <const name="close" vt="string" val="close" remark="Close command. (Out of order)"/>
        <const name="turnout" vt="string" val="turnout" remark="Turnout command."/>
        <const name="straight" vt="string" val="straight" remark="Straight command."/>
        <const name="right" vt="string" val="right" remark="3way switch right command or right switch type."/>
        <const name="left" vt="string" val="left" remark="3way switch left command or left switch type."/>
        <const name="undef" vt="string" val="undef" remark="Undefined position."/>
        <const name="inposition" vt="string" val="inposition" remark="Position already set."/>
        <const name="ctrlon" vt="string" val="ctrlon"/>
        <const name="ctrloff" vt="string" val="ctrloff"/>
        <const name="ctrlflip" vt="string" val="ctrlflip"/>
        <var name="state" cat="internal" vt="string" defval="NULL" range="straight,turnout,left,right" remark="Current state of switch."/>
        <var name="wantedstate" cat="internal" vt="string" defval="NULL" range="straight,turnout,red,green,left,right" remark="Wanted state of switch."/>
        <var name="fieldstate" cat="internal" vt="string" defval="NULL" range="straight,turnout,red,green,left,right" remark="Current reported state of switch."/>
        <var name="set" cat="internal" vt="bool" defval="true"/>
        <var name="savepos" cat="internal" vt="string" defval="none" range="none,straight,turnout,left,right" remark="save position of switch"/>
        <var name="swapstraight" cat="interface" vt="bool" defval="false"/>
        <var name="tune" cat="internal" vt="bool" defval="false"/>
        <const name="flip" vt="string" val="flip" remark="Change current state."/>
        <const name="teston" vt="string" val="teston"/>
        <const name="testoff" vt="string" val="testoff"/>
        <const name="lock" vt="string" val="lock" remark="Lock this switch. (Manually)"/>
        <const name="unlock" vt="string" val="unlock" remark="Unlock this switch. (Manually)"/>
        <const name="flipstatic" vt="string" val="flipstatic" remark="Flip switch static state."/>
        <const name="setstatic" vt="string" val="setstatic" remark="Set switch static state."/>
        <const name="resetstatic" vt="string" val="resetstatic" remark="Reset switch static state."/>
        <const name="manualoperated" vt="string" val="manualoperated"/>
        <const name="autooperated" vt="string" val="autooperated"/>
        <const name="shortid" vt="string" val="shortid"/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*"/>
        <var name="initfield" cat="internal" vt="bool" defval="false"/>
        <var name="testing" cat="internal" vt="bool" defval="false"/>
        <var name="manualcmd" cat="internal" vt="bool" defval="false" remark="Manual command issued from a client."/>
        <var name="forcecmd" cat="internal" vt="bool" defval="false" remark="Force command."/>
        <var name="activate" cat="internal" vt="bool" defval="true"/>
        <const name="unlocked" vt="string" val="-unlocked-" remark="Place holder for locid not set."/>
        <var name="locid" cat="internal" vt="string" defval="NULL" range="*" remark="The loc who locked this switch."/>
        <var name="fbusefield" cat="internal" vt="bool" defval="false" remark="Use field events as feedback."/>
        <var name="fbset" cat="wiring" vt="bool" defval="false" remark="Feedback sets the switch unconditional."/>
        <var name="fbR" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for turnout(Red) state."/>
        <var name="fbRinv" cat="wiring" vt="bool" defval="false"/>
        <var name="fbG" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for straigh(Green) state."/>
        <var name="fbGinv" cat="wiring" vt="bool" defval="false"/>
        <var name="fb2R" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for turnout(Red) state."/>
        <var name="fb2Rinv" cat="wiring" vt="bool" defval="false"/>
        <var name="fb2G" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for straigh(Green) state."/>
        <var name="fb2Ginv" cat="wiring" vt="bool" defval="false"/>
        <var name="fbOcc" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for occupancy to block commands."/>
        <var name="fbOcc2" cat="wiring" vt="string" defval="NULL" range="*" remark="Optional feedback for occupancy to block commands."/>
        <const name="accessory" vt="string" val="accessory" remark="Accessory representation, but act like a switch."/>
        <const name="decoupler" vt="string" val="decoupler" remark="Switch type for crossing."/>
        <const name="ccrossing" vt="string" val="ccrossing" remark="Switch type for center crossing."/>
        <const name="crossing" vt="string" val="crossing" remark="Switch type for crossing."/>
        <const name="dcrossing" vt="string" val="dcrossing" remark="Switch type for dubble crossing."/>
        <const name="threeway" vt="string" val="threeway" remark="Switch type for a 3way switch."/>
        <const name="twoway" vt="string" val="twoway" remark="Switch type for a 2way switch."/>
        <var name="type" cat="general" vt="string" defval="right" range="right,left,turnout,crossing,ccrossing,dcrossing,threeway,decoupler"/>
        <var name="accnr" cat="general" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
        <const name="swtype_default" vt="string" val="default"/>
        <const name="swtype_raster" vt="string" val="raster"/>
        <var name="swtype" cat="general" vt="string" defval="default" range="default,raster"/>
        <const name="subleft" vt="string" val="subleft"/>
        <const name="subright" vt="string" val="subright"/>
        <var name="subtype" cat="general" vt="string" defval="default" range="default,subleft,subright"/>
        <var name="dir" cat="general" vt="bool" defval="false" remark="false=left, true=right"/>
        <var name="rectcrossing" cat="general" vt="bool" defval="false" remark="Rectangular crossing."/>
        <var name="prot" cat="interface" vt="string" defval="D" range="M,N,D,mdd,om32,do,vo" remark="Protocol to use for this output."/>
        <const name="prot_DEF" vt="string" val="D" remark="default protocol by command station"/>
        <const name="prot_M" vt="string" val="M" remark="Motorola"/>
        <const name="prot_N" vt="string" val="N" remark="NMRA-DCC"/>
        <const name="prot_MDD" vt="string" val="mdd" remark="Dinamo MDD"/>
        <const name="prot_OM32" vt="string" val="om32" remark="Dinamo OM32"/>
        <const name="prot_OC32" vt="string" val="oc32" remark="Dinamo OC32"/>
        <const name="prot_DO" vt="string" val="do" remark="Dinamo DO"/>
        <const name="prot_VO" vt="string" val="vo" remark="Dinamo VO"/>
        <const name="prot_GCA" vt="string" val="gca" remark="GCA programming"/>
        <const name="prot_CBUS" vt="string" val="cbus" remark="CBUS programming"/>
        <const name="prot_WIO" vt="string" val="wio" remark="WIO"/>

        <!-- CTC Address -->
        <var name="ctciid1" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus1" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr1" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid1" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctccmdon1" cat="ctc" vt="bool" defval="true" remark="Straight command at ON."/>
        <var name="ctcflip1" cat="ctc" vt="bool" defval="true" remark="Straight command at ON."/>
        <var name="ctciid2" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus2" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr2" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid2" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctccmdon2" cat="ctc" vt="bool" defval="true" remark="Straight command at ON."/>
        <var name="ctcflip2" cat="ctc" vt="bool" defval="true" remark="Straight command at ON."/>
        <var name="ctciidled1" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbusled1" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddrled1" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcportled1" cat="ctc" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgateled1" cat="ctc" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitchled1" cat="ctc" vt="bool" defval="false" remark="send a switch command"/>
        <var name="ctciidled2" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbusled2" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddrled2" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcportled2" cat="ctc" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgateled2" cat="ctc" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitchled2" cat="ctc" vt="bool" defval="false" remark="send a switch command"/>

        <!-- CTC Aspect -->
        <var name="ctcOutputStraight" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorStraight" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorStraightOcc" cat="ctc" vt="int" defval="0"/>
        <var name="ctcOutputThrown" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorThrown" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorThrownOcc" cat="ctc" vt="int" defval="0"/>
        <var name="ctcOutputPoint" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorPoint" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorPointLock" cat="ctc" vt="int" defval="0"/>

        <!-- Track Driver support (Dinamo)-->
        <var name="tdiid" cat="td" vt="string" defval="NULL" range="*" remark="TD interface id"/>
        <var name="tdbus" vt="int" defval="0" range="0-*" remark="TD bus"/>
        <var name="tdaddr" cat="td" vt="int" defval="0" range="0-*" remark="TD address"/>
        <var name="tdport" cat="td" vt="int" defval="0" range="0-*" remark="TD output port"/>
        <var name="td" cat="td" vt="bool" defval="false" remark="trackdriver connected to this block"/>

        <ctc cardinality="1"/>
        <actionctrl cardinality="n"/>
        <accessoryctrl wrappername="AccessoryCtrl">
          <var name="active" vt="bool" defval="false" remark="Activate accessory control."/>
          <var name="invert" vt="bool" defval="false" remark="Invert activation."/>
          <var name="automode" vt="bool" defval="false" remark="Only in auto mode."/>
          <var name="interval" vt="int" defval="0" remark="Interval in seconds."/>
          <var name="delay" vt="int" defval="0" remark="Seconds to elaps to go back to the closed position."/>
          <var name="lockroutes" vt="string" defval="" remark="Routes to lock at open, and unlock at close."/>
          <var name="freeblocks" vt="string" defval="" remark="Blocks which must be free at open and close."/>
        </accessoryctrl>
      </sw>
    </swlist>

    <sglist cardinality="1" remark="Signal table" wrappername="SignalList">
      <sg cardinality="n" wrappername="Signal" remark="Signal definition." categories="general,interface,details,internal">
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="shortid" cat="general" vt="string" defval="" range="*" remark="Short IDs are used for throttle displays."/>
        <var name="oid" cat="internal" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="resetid" cat="general" vt="string" defval="NULL" range="*" remark="Sensor to reset the signal to the red aspect."/>
        <var name="blockid" cat="general" vt="string" defval="NULL" range="*"/>
        <var name="lcid" vt="string" defval="" range="*"/>
        <var name="sensorid" vt="string" defval="NULL" range="*"/>
        <var name="freeid" cat="general" vt="string" defval="NULL" range="*" remark="Object must be free to beable to change the signal aspect."/>
        <var name="desc" cat="general" vt="string" defval="" range="*" remark="description"/>
        <var name="manual" cat="general" vt="bool" defval="false" remark="operator controlled signal to influence auto mode"/>
        <var name="manualreset" cat="general" vt="bool" defval="true" remark="operator controlled signal reset automatically to red"/>
        <var name="accessory" cat="general" vt="bool" defval="true"/>
        <var name="oppositeid" cat="internal" vt="bool" defval="false"/>
        <var name="porttype" cat="interface" vt="int" defval="0" range="0-*" required="false" remark=""/>
        <var name="decid" cat="general" vt="string" defval="" range="*" remark="Decoder ID"/>
        <var name="outoforder" cat="details" vt="bool" defval="false"/>
        <var name="blankid" cat="general" vt="string" defval="" range="*" remark="Signal ID"/>
        <var name="blankaspects" cat="general" vt="string" defval="" range="*" remark="CSV aspect numbers for blanking."/>
        <var name="sod" cat="general" vt="bool" defval="true"/>
        
        <!-- Addressing -->
        <var name="iid" cat="interface" vt="string" defval="NULL" range="*" remark="Interface ID"/>
        <var name="bus" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr1" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="addr2" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="addr3" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="addr4" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port1" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="Output port 1."/>
        <var name="port2" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="Output port 2."/>
        <var name="port3" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="Output port 3."/>
        <var name="port4" cat="interface" vt="int" defval="0" range="0-*" required="true" remark="Output port 4, white."/>
        <var name="gate1" cat="interface" vt="int" defval="0" range="0-1" required="true" remark="Output gate of port 1."/>
        <var name="gate2" cat="interface" vt="int" defval="0" range="0-1" required="true" remark="Output gate of port 2."/>
        <var name="gate3" cat="interface" vt="int" defval="0" range="0-1" required="true" remark="Output gate of port 3."/>
        <var name="gate4" cat="interface" vt="int" defval="0" range="0-1" required="true" remark="Output gate of port 4, white."/>
        <var name="inv" cat="interface" vt="bool" defval="false" remark="Signal inverted. (Software wiring correction)"/>
        <var name="pair" cat="interface" vt="bool" defval="false" remark="both gates are used for on-off"/>
        <var name="asswitch" cat="interface" vt="bool" defval="false" remark="send a switch command incase of 2 aspects"/>
        <var name="cmdtime" cat="interface" vt="int" defval="0" range="0-*" remark="Time in ms between commands."/>
        <var name="delay" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="overwrites control.swtimeout if greater then 0"/>
        <var name="actdelay" cat="interface" vt="bool" defval="false" remark="if false: delay is programmed in central unit or module"/>
        <var name="dim" cat="interface" vt="int" defval="10" range="0-50" required="false" remark="Dimming interval for LED type."/>
        <var name="bri" cat="interface" vt="int" defval="100" range="0-255" required="false" remark="Brightness for LED type."/>
        <var name="param" cat="interface" vt="int" defval="0" range="0-65535" required="false"/>
        <var name="blink" cat="interface" vt="bool" defval="false"/>
        
        <var name="x" cat="internal" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" cat="internal" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" cat="internal" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="ori" cat="internal" vt="string" defval="NULL" range="north,south,west,east" remark="Orientation in the plan."/>
        <const name="teston" vt="string" val="teston"/>
        <const name="testoff" vt="string" val="testoff"/>
        <const name="red" vt="string" val="red" remark="Signal Red command."/>
        <const name="yellow" vt="string" val="yellow" remark="Signal yellow command."/>
        <const name="green" vt="string" val="green" remark="Signal green command."/>
        <const name="white" vt="string" val="white" remark="Signal white command."/>
        <const name="blank" vt="string" val="blank" remark="Signal blank command."/>
        <const name="flip" vt="string" val="flip"/>
        <const name="actiononly" vt="string" val="actiononly"/>
        <const name="aspect" vt="string" val="aspect"/>
        <const name="manualoperated" vt="string" val="manualoperated"/>
        <const name="autooperated" vt="string" val="autooperated"/>
        <var name="state" cat="internal" vt="string" defval="NULL" range="*" remark="Current state of signal."/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*"/>
        <var name="pause" cat="interfacel" vt="int" defval="0" range="0-*" required="false" remark="Pause ms before executing command."/>
        <var name="aspect" cat="internal" vt="int" defval="0" range="0-15" remark="Aspect to show."/>
        <var name="aspectval" cat="internal" vt="int" defval="0" range="0-255" remark="Aspect value to show."/>
        <var name="prot" cat="interface" vt="string" defval="D" range="M,N,D,mdd,om32"
             remark="Protocol to use for this output."/>
        <var name="testing" cat="internal" vt="bool" defval="false"/>
        <const name="prot_DEF" vt="string" val="D" remark="default protocol by command station"/>
        <const name="prot_M" vt="string" val="M" remark="Motorola"/>
        <const name="prot_N" vt="string" val="N" remark="NMRA-DCC"/>
        <const name="prot_MDD" vt="string" val="mdd" remark="Dinamo MDD"/>
        <const name="prot_OM32" vt="string" val="om32" remark="Dinamo OM32"/>
        <const name="prot_OC32" vt="string" val="oc32" remark="Dinamo OC32"/>
        <const name="prot_DO" vt="string" val="do" remark="Dinamo DO"/>
        <const name="prot_VO" vt="string" val="vo" remark="Dinamo VO"/>
        <const name="light" vt="string" val="light"/>
        <const name="semaphore" vt="string" val="semaphore"/>
        <var name="type" cat="details" vt="string" defval="light" range="light,semaphore"/>
        <const name="shunting" vt="string" val="shunting"/>
        <const name="distant" vt="string" val="distant"/>
        <const name="blockstate" vt="string" val="blockstate"/>
        <const name="main" vt="string" val="main"/>
        <var name="signal" cat="details" vt="string" defval="main" range="main,distant,shunting,blockstate"/>
        <var name="accnr" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
        <var name="aspects" cat="details" vt="int" defval="3" range="2-255" remark="number of aspects to show"/>
        <var name="dwarf" cat="details" vt="bool" defval="false"/>
        <var name="symbolprefix" cat="details" vt="string" defval="" range="*" remark="Optional symbol name prefix for multiaspect signals."/>
        <var name="usesymbolprefix" cat="details" vt="bool" defval="false" remark="Use symbol prefix for aspects less then 5."/>
        <var name="aspectnames" cat="details" vt="string" defval="" range="*" remark="CSV list of aspect names"/>
        <var name="locid" cat="internal" vt="string" defval="NULL" range="*" remark="The loco who locked this signal."/>
        <var name="waittime" cat="internal" vt="int" defval="0" range="0-*" required="false" remark="Waittime of loco for blockstate type."/>
        
        <!-- patterns -->
        <const name="use_patterns" vt="int" val="1"/>
        <const name="use_aspectnrs" vt="int" val="2"/>
        <const name="use_linear" vt="int" val="3"/>
        <const name="use_binary" vt="int" val="4"/>
        <const name="use_function" vt="int" val="5"/>
        <var name="usepatterns" cat="details" vt="int" defval="0" remark="0=no, 1=patterns, 2=aspectnrs, 3=linear"/>
        <var name="green" cat="details" vt="int" defval="0" range="0-3" remark="pattern for green"/>
        <var name="red" cat="details" vt="int" defval="0" range="0-3" remark="pattern for red"/>
        <var name="yellow" cat="details" vt="int" defval="0" range="0-3" remark="pattern for yellow"/>
        <var name="white" cat="details" vt="int" defval="0" range="0-3" remark="pattern for white"/>
        <var name="blank" cat="details" vt="int" defval="0" range="0-3" remark="pattern for blank"/>
        
        <var name="rednr" cat="details" vt="int" defval="0" range="0-31" remark="number for red"/>
        <var name="greennr" cat="details" vt="int" defval="1" range="0-31" remark="number for green"/>
        <var name="yellownr" cat="details" vt="int" defval="2" range="0-31" remark="number for yellow"/>
        <var name="whitenr" cat="details" vt="int" defval="3" range="0-31" remark="number for white"/>
        <var name="blanknr" cat="details" vt="int" defval="4" range="0-31" remark="number for blank"/>
        <var name="a1nr" cat="details" vt="int" defval="5" range="0-255"/>
        <var name="a2nr" cat="details" vt="int" defval="6" range="0-255"/>
        <var name="a3nr" cat="details" vt="int" defval="7" range="0-255"/>
        <var name="a4nr" cat="details" vt="int" defval="8" range="0-255"/>
        <var name="a5nr" cat="details" vt="int" defval="9" range="0-255"/>
        <var name="a6nr" cat="details" vt="int" defval="10" range="0-255"/>
        <var name="a7nr" cat="details" vt="int" defval="11" range="0-255"/>
        <var name="a8nr" cat="details" vt="int" defval="12" range="0-255"/>
        <var name="a9nr" cat="details" vt="int" defval="13" range="0-255"/>
        <var name="a10nr" cat="details" vt="int" defval="14" range="0-255"/>
        <var name="a11nr" cat="details" vt="int" defval="15" range="0-255"/>
        <var name="a12nr" cat="details" vt="int" defval="16" range="0-255"/>
        <var name="a13nr" cat="details" vt="int" defval="17" range="0-255"/>
        <var name="a14nr" cat="details" vt="int" defval="18" range="0-255"/>
        <var name="a15nr" cat="details" vt="int" defval="19" range="0-255"/>
        <var name="a16nr" cat="details" vt="int" defval="20" range="0-255"/>
        <var name="a17nr" cat="details" vt="int" defval="21" range="0-255"/>
        <var name="a18nr" cat="details" vt="int" defval="22" range="0-255"/>
        <var name="a19nr" cat="details" vt="int" defval="23" range="0-255"/>
        <var name="a20nr" cat="details" vt="int" defval="24" range="0-255"/>
        <var name="a21nr" cat="details" vt="int" defval="25" range="0-255"/>
        <var name="a22nr" cat="details" vt="int" defval="26" range="0-255"/>
        <var name="a23nr" cat="details" vt="int" defval="27" range="0-255"/>
        <var name="a24nr" cat="details" vt="int" defval="28" range="0-255"/>
        <var name="a25nr" cat="details" vt="int" defval="29" range="0-255"/>
        <var name="a26nr" cat="details" vt="int" defval="30" range="0-255"/>
        <var name="a27nr" cat="details" vt="int" defval="31" range="0-255"/>
        
        <var name="greenvalue" cat="details" vt="int" defval="0" range="0-31" remark="value for green"/>
        <var name="redvalue" cat="details" vt="int" defval="0" range="0-31" remark="value for red"/>
        <var name="yellowvalue" cat="details" vt="int" defval="0" range="0-31" remark="value for yellow"/>
        <var name="whitevalue" cat="details" vt="int" defval="0" range="0-31" remark="value for white"/>
        <var name="blankvalue" cat="details" vt="int" defval="0" range="0-31" remark="value for blank"/>
        <var name="a1value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a2value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a3value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a4value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a5value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a6value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a7value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a8value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a9value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a10value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a11value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a12value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a13value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a14value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a15value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a16value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a17value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a18value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a19value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a20value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a21value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a22value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a23value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a24value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a25value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a26value" cat="details" vt="int" defval="0" range="0-255"/>
        <var name="a27value" cat="details" vt="int" defval="0" range="0-255"/>

        <var name="greenname" cat="details" vt="string" defval="" range="*"/>
        <var name="redname" cat="details" vt="string" defval="" range="*"/>
        <var name="yellowname" cat="details" vt="string" defval="" range="*"/>
        <var name="whitename" cat="details" vt="string" defval="" range="*"/>
        <var name="blankname" cat="details" vt="string" defval="" range="*"/>
        <var name="a1name" cat="details" vt="string" defval="" range="*"/>
        <var name="a2name" cat="details" vt="string" defval="" range="*"/>
        <var name="a3name" cat="details" vt="string" defval="" range="*"/>
        <var name="a4name" cat="details" vt="string" defval="" range="*"/>
        <var name="a5name" cat="details" vt="string" defval="" range="*"/>
        <var name="a6name" cat="details" vt="string" defval="" range="*"/>
        <var name="a7name" cat="details" vt="string" defval="" range="*"/>
        <var name="a8name" cat="details" vt="string" defval="" range="*"/>
        <var name="a9name" cat="details" vt="string" defval="" range="*"/>
        <var name="a10name" cat="details" vt="string" defval="" range="*"/>
        <var name="a11name" cat="details" vt="string" defval="" range="*"/>
        <var name="a12name" cat="details" vt="string" defval="" range="*"/>
        <var name="a13name" cat="details" vt="string" defval="" range="*"/>
        <var name="a14name" cat="details" vt="string" defval="" range="*"/>
        <var name="a15name" cat="details" vt="string" defval="" range="*"/>
        <var name="a16name" cat="details" vt="string" defval="" range="*"/>
        <var name="a17name" cat="details" vt="string" defval="" range="*"/>
        <var name="a18name" cat="details" vt="string" defval="" range="*"/>
        <var name="a19name" cat="details" vt="string" defval="" range="*"/>
        <var name="a20name" cat="details" vt="string" defval="" range="*"/>
        <var name="a21name" cat="details" vt="string" defval="" range="*"/>
        <var name="a22name" cat="details" vt="string" defval="" range="*"/>
        <var name="a23name" cat="details" vt="string" defval="" range="*"/>
        <var name="a24name" cat="details" vt="string" defval="" range="*"/>
        <var name="a25name" cat="details" vt="string" defval="" range="*"/>
        <var name="a26name" cat="details" vt="string" defval="" range="*"/>
        <var name="a27name" cat="details" vt="string" defval="" range="*"/>

        <!-- CTC Address -->
        <var name="ctciid1" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus1" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr1" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid1" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctcflip1" cat="ctc" vt="bool" defval="false" remark="Flip command."/>

        <var name="ctciid2" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus2" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr2" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid2" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctcflip2" cat="ctc" vt="bool" defval="false" remark="Flip command."/>

        <var name="ctciid3" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus3" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr3" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid3" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctcflip3" cat="ctc" vt="bool" defval="false" remark="Flip command."/>
        
        <var name="ctciidled1" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbusled1" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddrled1" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcportled1" cat="ctc" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgateled1" cat="ctc" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitchled1" cat="ctc" vt="bool" defval="false" remark="send a switch command"/>

        <var name="ctciidled2" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbusled2" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddrled2" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcportled2" cat="ctc" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgateled2" cat="ctc" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitchled2" cat="ctc" vt="bool" defval="false" remark="send a switch command"/>

        <var name="ctciidled3" cat="ctc" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbusled3" cat="ctc" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddrled3" cat="ctc" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcportled3" cat="ctc" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgateled3" cat="ctc" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitchled3" cat="ctc" vt="bool" defval="false" remark="send a switch command"/>

        <!-- CTC Aspect -->
        <var name="ctcOutput" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorRed" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorYellow" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorGreen" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorWhite" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorBlank" cat="ctc" vt="int" defval="0"/>
        
        <actionctrl cardinality="n"/>
      </sg>
    </sglist>
    
    <colist cardinality="1" remark="Common Output table" wrappername="OutputList">
      <co cardinality="n" wrappername="Output" remark="Common Output definition.">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="shortid" cat="general" vt="string" defval="" range="*" remark="Short IDs are used for throttle displays."/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="grpid" vt="string" defval="" range="*" required="false" remark="Radio button group"/>
        <var name="ononoff" vt="bool" defval="true" remark="In case of radio button on+on=off"/>
        <var name="oid" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="blockid" vt="string" defval="NULL" range="*"/>
        <var name="accessory" vt="bool" defval="true"/>
        <var name="porttype" vt="int" defval="0" range="0-*" required="false" remark=""/>
        <var name="decid" vt="string" defval="" range="*" remark="Decoder ID"/>
        <var name="native" vt="bool" defval="false"/>

        <!-- Addressing -->
        <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID"/>
        <var name="bus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="gate" vt="int" defval="0" range="0-2" required="true" remark="gate of port."/>
        <var name="param" vt="int" defval="0" range="0-*" remark="output parameter"/>
        <var name="paramoff" vt="int" defval="0" range="0-*" remark="output parameter"/>
        <var name="value" vt="int" defval="1" range="0-*" remark="output value"/>
        <var name="valueoff" vt="int" defval="0" range="0-*" remark="output value"/>
        <var name="offset" vt="int" defval="0" range="0-*"/>
        <var name="type" vt="string" defval="output" range="output,switch,button"/>
        <var name="inv" vt="bool" defval="false" remark="Output as switch inverted. (Software wiring correction)"/>
        <var name="blink" vt="bool" defval="false" remark="Blink output."/>
        <var name="asswitch" vt="bool" defval="false" remark="send a switch command"/>
        <var name="singlegate" cat="interface" vt="bool" defval="false"/>

        <var name="redChannel" vt="int" defval="0" range="0-*" remark="Red channel address"/>
        <var name="greenChannel" vt="int" defval="0" range="0-*" remark="Green channel address"/>
        <var name="blueChannel" vt="int" defval="0" range="0-*" remark="Blue channel address"/>
        <var name="whiteChannel" vt="int" defval="0" range="0-*" remark="White channel address"/>
        <var name="white2Channel" vt="int" defval="0" range="0-*" remark="Second white channel address"/>
        <var name="brightnessChannel" vt="int" defval="0" range="0-*" remark="Brightnes channel address"/>
        
        <var name="delay" vt="int" defval="0" range="0-*" required="false" remark="Turn off after x seconds if greater then 0"/>
        
        <var name="showbri" vt="bool" defval="false" remark="Show renderred brightness for color type."/>
        <var name="colortype" vt="bool" defval="false" remark="The output supports RGB color settings."/>
        <var name="plancolor" vt="bool" defval="false" remark="Use color as plan panel background."/>
        <var name="tristate" vt="bool" defval="false" remark="Tri-state flag."/>
        <var name="toggleswitch" vt="bool" defval="true" remark="Toggle switch or push button."/>
        <var name="squarewave" vt="bool" defval="false" remark="Square wave generator."/>
        <var name="squarewavewidth" vt="int" defval="500"/>
        <var name="pause" vt="int" defval="0" range="0-*" required="false" remark="Pause ms before executing command."/>
        <const name="sod" vt="string" val="sod"/>
        <const name="on" vt="string" val="on"/>
        <const name="active" vt="string" val="active"/>
        <const name="off" vt="string" val="off"/>
        <const name="undef" vt="string" val="undef" remark="Undefined state"/>
        <const name="flip" vt="string" val="flip"/>
        <const name="longclick" vt="string" val="longclick"/>
        <const name="value" vt="string" val="value"/>
        <const name="param" vt="string" val="param"/>
        <const name="gate" vt="string" val="gate"/>
        <const name="lock" vt="string" val="lock" remark="Lock this output. (Manually)"/>
        <const name="unlock" vt="string" val="unlock" remark="Unlock this output. (Manually)"/>
        <const name="waveon" vt="string" val="waveon"/>
        <const name="waveoff" vt="string" val="waveoff"/>
        <const name="waveflip" vt="string" val="waveflip"/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <var name="forcecmd" cat="internal" vt="bool" defval="false" remark="Force command."/>
        <var name="locid" vt="string" defval="NULL" range="*"/>
        <var name="prot" vt="string" defval="D" range="M,N,D,mdd,om32,do,vo"
             remark="Protocol to use for this output."/>
        <const name="prot_DEF" vt="string" val="D" remark="default protocol by command station"/>
        <const name="prot_M" vt="string" val="M" remark="Motorola"/>
        <const name="prot_N" vt="string" val="N" remark="NMRA-DCC"/>
        <const name="prot_MDD" vt="string" val="mdd" remark="Dinamo MDD"/>
        <const name="prot_OM32" vt="string" val="om32" remark="Dinamo OM32"/>
        <const name="prot_OC32" vt="string" val="oc32" remark="Dinamo OC32"/>
        <const name="prot_DO" vt="string" val="do" remark="Dinamo DO"/>
        <const name="prot_VO" vt="string" val="vo" remark="Dinamo VO"/>
        <const name="prot_MQTT" vt="string" val="mqtt"/>
        <const name="prot_EXTDCC" vt="string" val="extdcc" remark="Extended DCC"/>
        <var name="state" vt="string" defval="NULL" range="on,off" remark="Current state of output."/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east" remark="Orientation in the plan."/>
        <var name="x" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="show" vt="bool" defval="true" remark="Visibility flag."/>
        <var name="svgtype" vt="int" defval="0" range="0-*" remark="Defines which SVG symbol should be used in case of show."/>
        <var name="svgacctype" vt="bool" defval="false"/>
        <var name="accnr" cat="general" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
        <actionctrl cardinality="n"/>
        <color cardinality="1"/>
      </co>
    </colist>
    <fblist cardinality="1" remark="Sensor table" wrappername="FeedbackList">
      <fb cardinality="n" wrappername="Feedback">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="oid" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="decid" vt="string" defval="" range="*" remark="Decoder ID"/>

        <!-- Addressing -->
        <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="bus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="cutoutbus" vt="int" defval="0" range="0-*" remark=""/>
        <var name="cutoutaddr" vt="int" defval="0" range="0-*" remark=""/>

        <var name="reg0" vt="int" defval="0" range="0-*" remark="Register bit0 address"/>
        <var name="reg1" vt="int" defval="0" range="0-*" remark="Register bit1 address"/>
        <var name="reg2" vt="int" defval="0" range="0-*" remark="Register bit2 address"/>
        <var name="reg3" vt="int" defval="0" range="0-*" remark="Register bit3 address"/>
        <var name="reg4" vt="int" defval="0" range="0-*" remark="Register bit4 address"/>
        <var name="reg5" vt="int" defval="0" range="0-*" remark="Register bit5 address"/>
        <var name="reg6" vt="int" defval="0" range="0-*" remark="Register bit6 address"/>
        <var name="reg7" vt="int" defval="0" range="0-*" remark="Register bit7 address"/>

        <var name="activelow" vt="bool" defval="false" remark=""/>
        <var name="timer" vt="int" defval="0" range="0-100" remark="Delayed off timer in 100ms units."/>
        <var name="ignoresamestate" vt="bool" defval="false" remark="Ignore events with the same state."/>
        <var name="zerocodedelay" vt="int" defval="0" range="0-500" remark="Delay zero code."/>

        <var name="boosterid" vt="string" defval="" range="*" remark="Booster ID for checking power"/>

        <var name="outoforder" cat="general" vt="bool" defval="false"/>
        
        <var name="ctciid" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcport" vt="int" defval="0" range="0-4" required="true" remark="port of decoder module: 0 = not used."/>
        <var name="ctcgate" vt="int" defval="0" range="0-1" required="true" remark="gate of port."/>
        <var name="ctcasswitch" vt="bool" defval="false" remark="send a switch command"/>

        <var name="ctcOutput" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorOn" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorOff" cat="ctc" vt="int" defval="0"/>

        <var name="x" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east" remark="Orientation in the plan."/>
        <var name="val" vt="int" defval="0" remark="multiple port value"/>
        <var name="accnr" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
        <var name="absent" vt="bool" defval="false" remark=""/>
        <var name="rfid" vt="int" defval="0" remark="32 bit RFID number."/>
        <var name="identifier" vt="string" defval="" remark="Loc identifier 1"/>
        <var name="identifier2" vt="string" defval="" remark="Loc identifier 2"/>
        <var name="identifier3" vt="string" defval="" remark="Loc identifier 3"/>
        <var name="identifier4" vt="string" defval="" remark="Loc identifier 4"/>
        <var name="category" vt="int" defval="0" remark="Train category."/>
        <var name="counter" vt="int" defval="0" remark="occupied counter"/>
        <var name="carcount" vt="int" defval="0" remark="car counter (only for client info)"/>
        <var name="countedcars" vt="int" defval="0" remark="number of cars to count before firing the event. (only for client info)"/>
        <var name="zone" vt="string" defval="" remark="transponder zone"/>
        <var name="wheelcount" vt="int" defval="0" remark="counted wheels; sofar"/>
        <var name="load" vt="int" defval="0" units="mA" remark="current"/>
        <const name="regunits_int" vt="int" val="0" remark="Default sensor register value."/>
        <const name="regunits_temp" vt="int" val="1" remark="Hundreds of temp. degrees."/>
        <const name="regunits_light" vt="int" val="2" remark="Light lux value."/>
        <const name="regunits_button" vt="int" val="3" remark="Button event value."/>
        <const name="regunits_humidity" vt="int" val="4" remark="Humidity."/>
        <const name="regunits_pressure" vt="int" val="5" remark="Pressure."/>
        <var name="regval" vt="int" defval="0" remark="register value."/>
        <var name="regunits" vt="int" defval="0" remark="register units."/>
        <var name="regtrigger" vt="int" defval="0" remark="trigger selection which register units to use."/>
        <var name="threshold" vt="int" defval="1" remark="register threshold value"/>
        <var name="signal" vt="int" defval="0" remark="signal quality: 0=OK"/>
        <var name="maxload" vt="int" defval="0"/>
        <const name="reset" vt="string" val="reset"/>
        <const name="resetstatus" vt="string" val="resetstatus"/>
        <const name="setcounterval" vt="string" val="setcounterval"/>
        <const name="setwheelcounterval" vt="string" val="setwheelcounterval"/>
        <const name="signalquality" vt="string" val="signalquality"/>
        <const name="open" vt="string" val="open" remark="Open command. (Out of order)"/>
        <const name="close" vt="string" val="close" remark="Close command. (Out of order)"/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <const name="fbtype_sensor" vt="int" val="0" remark="default sensor type"/>
        <const name="fbtype_lissy" vt="int" val="1" remark="lissy"/>
        <const name="fbtype_transponder" vt="int" val="2" remark="transponder"/>
        <const name="fbtype_barcode" vt="int" val="3" remark="barcode"/>
        <const name="fbtype_railcom" vt="int" val="4" remark="railcom"/>
        <const name="fbtype_rfid" vt="int" val="5" remark="RFID"/>
        <const name="fbtype_wheelcounter" vt="int" val="6" remark="wheel counter"/>
        <const name="fbtype_gps" vt="int" val="7" remark="GamesOnTrack"/>
        <const name="fbtype_register" vt="int" val="8" remark="Register of 8bits or more"/>
        <const name="fbtype_analog" vt="int" val="9" remark="ADC"/>
        <var name="fbtype" vt="int" defval="0" remark="feedback type reported by the device"/>
        <var name="info" vt="string" defval="" remark="extra information"/>
        <var name="bididir" vt="int" defval="0" remark="Loco direction: 0=none 1=fwd 2=rev"/>
        <var name="state" vt="bool" defval="false" remark="Current feedback state."/>
        <var name="show" vt="bool" defval="true" remark="Visibility flag."/>
        <var name="curve" vt="bool" defval="false" remark="Curved feedback track."/>
        <var name="shortcut" vt="bool" defval="false" remark="Shortcut reported by the cutout sensor; Red background in Rocview."/>
        <var name="error" vt="bool" defval="false" remark="Error detected. For example an invalid RFID tag."/>
        <var name="blockid" vt="string" defval="NULL" range="*"/>
        <var name="locoid" vt="string" defval="NULL" range="*"/>
        <var name="resetwc" vt="bool" defval="false" remark="Send a reset commando in case of a wheel counter type."/>
        <var name="newevent" vt="bool" defval="false"/>
        <var name="gpsx" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="gpsy" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="gpsz" vt="int" defval="0" range="0-*" remark="Z-Position in the plan."/>
        <var name="gpstolx" vt="int" defval="0" range="0-*" remark="Tolerance."/>
        <var name="gpstoly" vt="int" defval="0" range="0-*" remark="Tolerance."/>
        <var name="gpstolz" vt="int" defval="0" range="0-*" remark="Tolerance."/>
        <var name="gpstime" vt="int" defval="0" range="0-*" remark="Time in ms."/>
        <var name="gpssid" vt="int" defval="0" range="0-*" remark="SendID."/>
        <actionctrl cardinality="n"/>
        <fbstatistic cardinality="n"/>
      </fb>
    </fblist>

    <locationlist cardinality="1" remark="Location table" wrappername="LocationList">
      <location cardinality="n" wrappername="Location">
        <var name="id" vt="string" defval="" range="*" required="true" remark="location ID"/>
        <var name="partner" vt="string" defval="" range="*" required="true" remark="Partner location ID"/>
        <var name="blocks" vt="string" defval="" range="*" required="true" remark="location related blocks as csv"/>
        <var name="subblocks" vt="string" defval="" range="*" required="false" remark="location related sub-blocks as csv"/>
        <var name="fifo" vt="bool" defval="true" remark="First in, First out"/>
        <var name="fiforecycle" vt="bool" defval="false" remark="Move the top to the bottom in case the top loco did not found a new destination."/>
        <var name="trainonly" vt="bool" defval="false" remark="Locos are only allowed in case it has a train/operator assigned."/>
        <var name="minocc" vt="int" defval="0" range="0-*" required="false" remark="minimal tracks to be occupied before leaving the location"/>
        <var name="maxoccmin" vt="int" defval="0" range="0-*" required="false"/>
        <var name="maxoccplus" vt="int" defval="0" range="0-*" required="false"/>
        <var name="maxocc_commuter" vt="int" defval="0" range="0-*" required="false"/>
        <var name="maxocc_other" vt="int" defval="0" range="0-*" required="false"/>
        <var name="selectshortestblock" vt="bool" defval="false"/>
        <var name="enableshortestblock" vt="bool" defval="false"/>
        <var name="initrandom" vt="bool" defval="false"/>

        <var name="minoccautolocos" vt="int" defval="0" range="0-*" required="false" remark="Minimal active automatic locos before the minocc will be activated."/>

        <var name="maxocc_lightgoods" vt="int" val="0"/>
        <var name="maxocc_light" vt="int" val="0"/>
        <var name="maxocc_regional" vt="int" val="0"/>
        <var name="maxocc_local" vt="int" val="0"/>
        <var name="maxocc_goods" vt="int" val="0"/>
        <var name="maxocc_mixed" vt="int" val="0"/>
        <var name="maxocc_ice" vt="int" val="0"/>
        <var name="maxocc_post" vt="int" val="0"/>
        <var name="maxocc_shunting" vt="int" val="0"/>

        <const name="cmd_minocc" vt="string" val="minocc"/>
        <const name="cmd_fifo" vt="string" val="fifo"/>
        <const name="cmd_fiforecycle" vt="string" val="fiforecycle"/>
        <const name="cmd_schedule" vt="string" val="schedule"/>
        <const name="cmd_go" vt="string" val="go"/>
        <const name="cmd_info" vt="string" val="info"/>
        <const name="cmd_scheduletable" vt="string" val="scheduletable"/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <var name="value" vt="int" defval="0" range="0-*"/>
        <var name="svalue" vt="string" defval="" range="*"/>
        <var name="scheduletable" vt="bool" defval="false" remark="Create and maintain a schedule table."/>
        <var name="scheduletablepublish" vt="bool" defval="true" remark="Publish the schedule table."/>
        <var name="scheduletablehtml" vt="bool" defval="false" remark="Format the schedule table in html for actions."/>
        <var name="section" vt="string" defval="" range="*"/>
        <var name="sectionpos" vt="int" defval="0" range="0-*"/>
        <actionctrl cardinality="n"/>
      </location>
    </locationlist>

    <sclist cardinality="1" remark="Schedule table" wrappername="ScheduleList">
      <sc cardinality="n" wrappername="Schedule">
        <var name="id" vt="string" defval="" range="*" required="true" remark="schedule name"/>
        <var name="trainid" vt="string" defval="" range="*" remark="Train number."/>
        <var name="group" vt="string" defval="" range="*" remark="Schedule group ID for filtering."/>
        <var name="class" vt="string" defval="" range="*" remark="Class for selecting."/>
        <var name="traintype" vt="string" defval="" remark="Train type"/>
        <const name="type_cycle" vt="string" val="cycle"/>
        <const name="type_commuter" vt="string" val="commuter"/>
        <var name="type" vt="string" defval="cycle" range="cycle,commuter" required="true" remark="how the schedule should be used"/>
        <var name="cycles" vt="int" defval="0" range="0-*" remark="number of runs in case of cycle type: 0 is just one run"/>
        <const name="time_real" vt="int" val="0"/>
        <const name="time_relative" vt="int" val="1"/>
        <const name="time_hourly" vt="int" val="2"/>
        <var name="timeprocessing" vt="int" defval="1" remark="0=real 1=relative 2=hourly"/>
        <var name="timeframe" vt="int" defval="1" range="0-*" units="min" remark="time frame for accepting a delay"/>
        <var name="fromhour" vt="int" defval="0" range="0-23*" units="hours"/>
        <var name="tohour" vt="int" defval="0" range="0-23*" units="hours"/>
        <var name="weekdays" vt="int" defval="127" range="0-127*" remark="bit 0=sunday, 1=monday, ... default all days 0x7F"/>
        <var name="maxdelay" vt="int" defval="60" range="0-*" units="min" remark="Depart only if the time is not delayed more than this number of minutes."/>
        <var name="blockexitside" vt="int" defval="0" remark="Block enter side: 0 = Not set, 1 = True, 2 = False"/>
        <var name="red" vt="int" defval="0"/>
        <var name="green" vt="int" defval="0"/>
        <var name="blue" vt="int" defval="255"/>
        <scentry cardinality="n" wrappername="ScheduleEntry">
          <var name="scid" vt="string" defval="" range="*" required="false" remark="Parent schedule ID."/>
          <var name="location" vt="string" defval="NULL" range="*" required="false" remark="Location from the locationlist"/>
          <var name="block" vt="string" defval="NULL" range="*" required="false" remark="Block from the blocklist"/>
          <var name="blockenterside" vt="int" defval="0" remark="Block enter side: 0 = Both, 1 = True(+), 2 = False(-)"/>
          <var name="blockexitside" vt="int" defval="0" remark="Block exit side: 0 = Both, 1 = True(+), 2 = False(-)"/>
          <var name="departspeed" vt="int" defval="0" remark="0=default 1=min 2=mid 3=cruise 4=max 5=percent"/>
          <var name="departspeedpercent" vt="int" defval="0"/>
          <var name="departspeedmaxkmh" vt="int" defval="0"/>
          <var name="hour" vt="int" defval="0" units="hours" remark="Departure hour"/>
          <var name="minute" vt="int" defval="0" units="minutes" remark="Departure minute"/>
          <var name="minwait" vt="int" defval="0" units="minutes" remark="Minimal time to wait"/>
          <var name="ahour" vt="int" defval="0" units="hours" remark="Arrive hour"/>
          <var name="aminute" vt="int" defval="0" units="minutes" remark="Arrive minute"/>
          <var name="regularstop" vt="bool" defval="true" remark="If not set the depart time will be ignored."/>
          <var name="text" vt="string" defval="" range="*" required="false" remark="Free text for use with actions."/>
          <var name="remark" vt="string" defval="" range="*" required="false" remark="Free text for use with timetables."/>
          <actionctrl cardinality="n"/>
          <var name="free2go" vt="bool" defval="false" remark="Block or location must be free before the schedule can start."/>
          <var name="swap" vt="bool" defval="false" remark="swap the loc placing before traveling to this destination"/>
          <var name="indelay" vt="int" defval="0" remark="in event delay timer"/>
          <var name="ignorepermission" vt="bool" defval="false" remark="Ignore the permissions of this destination"/>
          <var name="actionsatin" vt="bool" defval="false"/>
        </scentry>
        <var name="scaction" vt="string" defval="NULL" range="*" remark="schedule action id"/>
        <var name="followuponenter" vt="bool" defval="false" remark="Activate the followup schedule on enter to prevent a wait."/>
        <var name="recordtime" vt="bool" defval="false" remark="Record depart time."/>
        <actionctrl cardinality="n"/>
      </sc>
    </sclist>
    
    <pathlist wrappername="PathList">
      <var name="lcid" vt="string" defval="" range="*"/>
      <var name="from" vt="string" defval="" range="*"/>
      <var name="to" vt="string" defval="" range="*"/>
      <sc cardinality="n"/>
    </pathlist>
    
    <tourlist cardinality="1" remark="Tour table" wrappername="TourList">
      <tour cardinality="n" wrappername="Tour">
        <var name="id" vt="string" defval="" range="*" required="true" remark="tour name"/>
        <var name="group" vt="string" defval="" range="*" remark="Tour group ID for filtering."/>
        <var name="recycle" vt="bool" defval="false" remark="Recycle this tour."/>
        <var name="absolute" vt="bool" defval="false" remark="Use absolute time for starting schedules."/>
        <tourentry cardinality="n" wrappername="TourEntry">
          <var name="id" vt="string" defval="" range="*" required="true" remark="schedule ID reference"/>
          <var name="hour" vt="int" defval="0" remark="Departure hour"/>
          <var name="minute" vt="int" defval="0" remark="Departure minute"/>
        </tourentry>
      </tour>
    </tourlist>

    <bklist cardinality="1" remark="Block table" wrappername="BlockList">
      <bk cardinality="n" wrappername="Block" categories="general,interface,details,internal,config,routes,signals">
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="trackingIID" cat="general" vt="string" defval="" range="*" required="false"/>
        <var name="trackingID" cat="general" vt="string" defval="" range="*" required="false"/>
        <var name="trackingLocoID" cat="general" vt="string" defval="%lcshortid%" range="*" required="false"/>
        <var name="transferID" cat="general" vt="string" defval="" range="*" required="false"/>
        <var name="transferTxID" cat="general" vt="string" defval="" range="*" required="false"/>
        <var name="transferEnterSide" cat="general" vt="bool" defval="true"/>
        <var name="transferReserveOnAccept" cat="general" vt="bool" defval="false"/>
        <var name="transferExcludeOcc" cat="general" vt="bool" defval="true"/>
        <var name="managerid" cat="general" vt="string" defval="" range="*" required="false" remark="ID of the manager object like FY or TT."/>
        <var name="masterid" cat="general" vt="string" defval="" range="*" required="false" remark="ID of the master block."/>
        <var name="desc" cat="general" vt="string" defval="" range="*" remark="Description of block."/>
        <var name="text" cat="ctc" vt="string" defval="" range="*" remark="CTC text"/>
        <var name="textps" cat="ctc" vt="int" defval="0" range="0-*" remark="Text font pointsize."/>
        <var name="platform" cat="general" vt="string" defval="" range="*" remark="Platform ID."/>
        <var name="showlocoimage" cat="config" vt="bool" defval="true"/>
        <var name="x" cat="general" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" cat="general" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" cat="general" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="len" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Block length to check with train length."/>
        <var name="lenenter2in" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Distance between enter and in event for virtual timing."/>
        <var name="radius" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="minlen" vt="int" defval="0" range="0-*" remark="Minimal train length allowed for this block."/>
        <var name="offsetplus" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Platform offset."/>
        <var name="offsetminus" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Platform offset."/>
        <var name="centertrain" cat="config" vt="bool" defval="false" remark="Center train to platform."/>
        <var name="polarisation" cat="config" vt="bool" defval="true" remark="Default polarisation for bidi placing."/>
        <var name="gomanual" cat="config" vt="bool" defval="true" remark="allow half-automatic mode"/>
        <var name="evttimer" cat="routes" vt="int" defval="0" range="0-*" unit="ms" remark="event timer; loc should wait this time before processing the event"/>
        <var name="evttimer2" cat="routes" vt="int" defval="0" range="0-*" unit="ms" remark="event timer reverse direction; loc should wait this time before processing the event"/>
        <var name="forceblocktimer" cat="routes" vt="bool" defval="false" remark="Force the block event timer to overrule the optional loco event timer."/>
        <var name="departdelay" cat="general" vt="int" defval="0" range="0-*" unit="s" remark="delay time to wait before loco starts when depart is raised"/>
        <var name="acceptghost" cat="config" vt="bool" defval="false" remark="accept a ghosttrain and signal the block occupied."/>
        <var name="sleeponclosed" cat="config" vt="bool" defval="false" remark="Ignore events in case of closed."/>
        <var name="terminalstation" cat="config" vt="bool" defval="false" remark="swap placing of an incomming loc to get another default direction.(terminal station)"/>
        <var name="allowchgdir" cat="config" vt="bool" defval="true" remark="Allow using a route in the opposite running direction."/>
        <var name="smallsymbol" cat="config" vt="bool" defval="false" remark="Show this block with the small representation."/>
        <var name="accnr" vt="int" defval="0" range="0-*" required="false" remark="Accessory number."/>
        <var name="remote" cat="internal" vt="bool" defval="false" remark="This flag is set by the R2Rnet object."/>
        <var name="rrid" cat="internal" vt="const char*" defval="" remark="This id is set by the R2Rnet object."/>
        <var name="selectshortestblock" cat="routes" vt="bool" defval="false" remark="Select shortest next block in case block and train length are set."/>
        <var name="freeblockonenter" cat="config" vt="bool" defval="false" remark="Use the enter event to free previous block."/> 
        <var name="freeblockonenterplus" cat="config" vt="bool" defval="true"/> 
        <var name="freeblockonentermin" cat="config" vt="bool" defval="true"/> 
        <var name="freeblockonenterroute" cat="config" vt="bool" defval="true"/> 
        <var name="freeblockonentermaxlen" cat="config" vt="int" defval="0"/> 
        <var name="virtual" cat="general" vt="bool" defval="false" remark="Virtual block."/> 
        <var name="slaveblocks" cat="general" vt="string" defval="" remark="Virtual slave blocks."/> 
        <var name="allowaccessoncars" cat="config" vt="bool" defval="true" remark="Allow access in case cars are present in the block and the type is not shunting."/>
        <var name="secondnextblock4wait" cat="config" vt="bool" defval="false" remark="Try to reserve a second next block also in case of wait."/>
        <var name="rearprotection" cat="config" vt="bool" defval="false" remark="Report the loco in the block of unexpected enter events."/>
        <var name="carevent" cat="internal" vt="bool" defval="false"/>
        <var name="locoevent" cat="internal" vt="bool" defval="false"/>
        <var name="shunting" cat="internal" vt="bool" defval="false" remark="Is this block used for shunting?"/>
        <var name="check2in" cat="details" vt="bool" defval="true" remark="Check for a free new destination between the enter and in event."/>
        <var name="timerevents" cat="internal" vt="bool" defval="false"/>
        <var name="allowsecondnext" cat="config" vt="bool" defval="true" remark="Allow reserving as second next block."/>
        <var name="allowsearchsecondnext" cat="config" vt="bool" defval="true" remark="Allow searching a second next block from without this block."/>
        <var name="analoggate" cat="internal" vt="bool" defval="false"/>

        <var name="embeddedstate" cat="internal" vt="bool" defval="false"/>
        <var name="embeddedstateside" cat="internal" vt="bool" defval="false" remark="true=plus, false=min"/>
        <var name="blockstateaspect" cat="internal" vt="int" defval="0"/>
        <var name="blockstateblink" cat="internal" vt="bool" defval="false"/>
        <var name="blockstatewaittime" cat="internal" vt="int" defval="0"/>

        <var name="embeddedfb" cat="internal" vt="bool" defval="false"/>
        <var name="embeddedfbplus" cat="internal" vt="bool" defval="false"/>
        <var name="embeddedfbmin" cat="internal" vt="bool" defval="false"/>
        <var name="fbplusid" cat="internal" vt="string" defval="NULL"/>
        <var name="fbminid" cat="internal" vt="string" defval="NULL"/>
        
        <!-- FiFo support (Automobiles)-->
        <var name="fifosize" cat="general" vt="int" defval="0" range="0-*" remark="FiFo size; Must be greater then 0 to be active."/>
        <var name="fifogap" cat="general" vt="int" defval="0" range="0-*" remark="FiFo gap; Room between the cars and trucks."/>
        
        <var name="randomrate" cat="general" vt="int" defval="10" range="0-*" remark="Rate of randomness. 0=Not used"/>
        
        <!-- Track Driver support (Dinamo)-->
        <var name="iid" cat="interface" vt="string" defval="NULL" range="*" remark="TD interface id"/>
        <var name="bus" cat="interface" vt="int" defval="0" range="0-*" required="false"/>
        <var name="addr" cat="interface" vt="int" defval="0" range="0-*" remark="TD address"/>
        <var name="port" cat="interface" vt="int" defval="0" range="0-*" remark="TD output port"/>
        <var name="td" cat="interface" vt="bool" defval="false" remark="trackdriver connected to this block"/>
        <var name="tdV0" cat="interface" vt="bool" defval="false" remark="Reset V to zero after an unlink command."/>
        <var name="tdlinkblocks" cat="interface" vt="bool" defval="true" remark="Use the link mechanism for destination blocks."/>
        
        <var name="mvdistance" cat="details" vt="int" defval="0" units="mm" remark="Distance between the enter and in event."/>
        <var name="mvmph" cat="details" vt="bool" defval="false" remark="convert to MPH"/>
        <var name="mvrecord" cat="details" vt="bool" defval="false" remark="Record mesurement"/>
        
        <var name="extstop" cat="config" vt="bool" defval="false" remark="An external stop module will take over the throttle. Use only with enter2in! (Lenz ABC.)"/>
        <var name="allowbbt" cat="config" vt="bool" defval="false"/>
        <var name="bbtfix" cat="config" vt="int" defval="0"/>
        <var name="mainline" cat="config" vt="bool" defval="false"/>
        <var name="autoassigntrain" cat="config" vt="bool" defval="false"/>
        
        <var name="updateenterside" cat="internal" vt="bool" defval="false" remark="For internal use only: Event for updating the loco block enter side only."/>
        <const name="shortcut" vt="string" val="shortcut" remark="State short circuit."/>
        <const name="shortcutcleared" vt="string" val="shortcutcleared" remark="State short circuit cleared."/>
        <const name="ghost" vt="string" val="ghost" remark="State ghost."/>
        <const name="open" vt="string" val="open" remark="State open."/>
        <const name="closed" vt="string" val="closed" remark="In this state the block is not chooseable for locs."/>
        <var name="state" cat="internal" vt="string" defval="open" range="open,closed"/>
        <var name="prevstate" cat="internal" vt="string" defval="open" range="open,closed"/>
        <var name="locid" cat="internal" vt="string" defval="NULL" range="*" remark="The loc which is actualy in the block or is comming or going."/>
        <var name="fifoids" cat="internal" vt="string" defval="NULL" range="*" remark="CSV list of all FiFo IDs."/>
        <var name="manual" cat="config" vt="bool" defval="false" remark="Block not chooseable for locs in auto-mode if set to true."/>
        <var name="reserved" cat="internal" vt="bool" defval="false" remark=""/>
        <var name="entering" cat="internal" vt="bool" defval="false" remark=""/>
        <var name="overlen" cat="internal" vt="bool" defval="false" remark=""/>
        <var name="acceptident" cat="config" vt="bool" defval="false" remark=""/>
        <var name="wait" cat="config" vt="bool" defval="true" remark="Should the loc wait in this block?"/>
        <var name="waitif" cat="details" vt="int" defval="0" range="0-100" remark="Wait if the random number is less or equal to this value. Zero=deactivated"/>
        <var name="waitside" cat="details" vt="int" defval="0" range="0-2" remark="Wait side: 0=both 1=plus 2=min"/>
        <const name="wait_random" vt="string" val="random" remark="Generate a random wait time."/>
        <const name="wait_fixed" vt="string" val="fixed" remark="Wait a fixed period of time."/>
        <const name="wait_loc" vt="string" val="loc" remark="Takes the loc wait time as defined in lc."/>
        <const name="wait_none" vt="string" val="none"/>
        <const name="wait_stop" vt="string" val="stop" remark="Stop the loco in automaticmode."/>
        <var name="waitmode" cat="details" vt="string" defval="none" range="random,fixed,loc,none"/>
        <var name="waittime" cat="details" vt="int" defval="10" unit="s" range="0-*" remark="Wait time in case of wait_fixed."/>
        <var name="minwaittime" cat="details" vt="int" defval="1" unit="s" range="0-*" remark="Min. wait time in case of wait_random."/>
        <var name="maxwaittime" cat="details" vt="int" defval="30" unit="s" range="0-*" remark="Max. wait time in case of wait_random."/>
        <var name="reservedevents" cat="internal" vt="bool" defval="false" remark="Only process events in case the block is reserved."/>
        <const name="min" vt="string" val="min" remark="Blockspeed is minimal."/>
        <const name="mid" vt="string" val="mid" remark="Blockspeed is middle."/>
        <const name="max" vt="string" val="max" remark="Blockspeed is maximal."/>
        <const name="cruise" vt="string" val="cruise" remark="Blockspeed is cruise."/>
        <const name="percent" vt="string" val="percent" remark="Blockspeed is set by percent."/>
        <const name="classset" vt="string" val="classset"/>
        <const name="classadd" vt="string" val="classadd"/>
        <const name="classdel" vt="string" val="classdel"/>
        <const name="startassembletrain" vt="string" val="startassembletrain"/>
        <const name="stopassembletrain" vt="string" val="stopassembletrain"/>
        <const name="startdisassembletrain" vt="string" val="startdisassembletrain"/>
        <const name="stopdisassembletrain" vt="string" val="stopdisassembletrain"/>
        <const name="assigntrain" vt="string" val="assigntrain"/>
        <const name="startacceptghost" vt="string" val="startacceptghost"/>
        <const name="stopacceptghost" vt="string" val="stopacceptghost"/>
        <const name="waiton" vt="string" val="waiton"/>
        <const name="waitoff" vt="string" val="waitoff"/>
        <const name="randomrateset" vt="string" val="setrandomrate"/>
        <const name="simfbplus" vt="string" val="simfbplus"/>
        <const name="simfbmin" vt="string" val="simfbmin"/>
        <const name="embedfb" vt="string" val="embedfb"/>
        <const name="setfbplus" vt="string" val="setfbplus"/>
        <const name="setfbmin" vt="string" val="setfbmin"/>
        <const name="generateinatenter" vt="string" val="generateinatenter"/>
        <var name="speed" cat="details" vt="string" defval="cruise" range="*" remark="Block speed on arrive."/>
        <var name="speedpercent" cat="details" vt="int" defval="80" unit="%" range="0-100" remark="Blockspeed in percent."/>
        <var name="exitspeedpercent" cat="details" vt="int" defval="80" unit="%" range="0-100" remark="Block depart speed in percent."/>
        <var name="stopspeedpercent" cat="details" vt="int" defval="80" unit="%" range="0-100" remark="Block stop speed in percent."/>
        <var name="stopspeed" cat="details" vt="string" defval="mid" range="mid,min,percent" remark="Block speed on arrive and stop."/>
        <var name="exitspeed" cat="details" vt="string" defval="cruise" range="*" remark="Block speed on departure."/>
        <var name="noreduceonexit" cat="details" vt="bool" defval="false" remark="Use block speed on departure only if it does not reduce the current loco speed."/>
        <var name="maxkmh" cat="details" vt="int" defval="0" range="0-*" remark="Block max. speed in km/h or mph."/>
        <var name="signal" cat="signals" vt="string" defval="NULL" range="*" remark="Home Signal ID. (sw)"/>
        <var name="wsignal" cat="signals" vt="string" defval="NULL" range="*" remark="Warning Signal ID. (sw)"/>
        <var name="openblocksignal" cat="signals" vt="bool" defval="false" remark=""/>
        <var name="openblockid" cat="signals" vt="string" defval="NULL" range="*"/>
        <var name="signalR" cat="signals" vt="string" defval="NULL" range="*" remark="Home Signal ID for reverse direction. (sw)"/>
        <var name="wsignalR" cat="signals" vt="string" defval="NULL" range="*" remark="Warning Signal ID for reverse direction. (sw)"/>
        <var name="openblocksignalR" cat="signals" vt="bool" defval="false" remark=""/>
        <var name="openblockidR" cat="signals" vt="string" defval="NULL" range="*"/>
        <var name="statesignal" cat="signals" vt="string" defval="NULL" range="*" remark="State Signal ID for loco info."/>
        <var name="resetsignalonexit" cat="signals" vt="bool" defval="false"/>
        <var name="electrified" cat="config" vt="bool" defval="false" remark="Block is open for electric locs."/>
        <const name="type_turntable" vt="string" val="turntable"/>
        <const name="type_lightgoods" vt="string" val="lightgoods"/>
        <const name="type_light" vt="string" val="light"/>
        <const name="type_local" vt="string" val="local"/>
        <const name="type_regional" vt="string" val="regional"/>
        <const name="type_ice" vt="string" val="ice"/>
        <const name="type_shunting" vt="string" val="shunting"/>
        <const name="type_goods" vt="string" val="goods"/>
        <const name="type_none" vt="string" val="none"/>
        <const name="type_post" vt="string" val="post"/>
        <const name="type_special" vt="string" val="special"/>
        <var name="type" cat="details" vt="string" defval="none" range="none,local,ice,shunting,goods"/>
        <var name="engine" cat="details" vt="string" defval="" remark="See locomotive engine types. If empty, not set, all engine types are allowed."/>
        <var name="nonewaittype" cat="details" vt="string" defval=""/>
        <const name="incline_up" vt="int" val="1"/>
        <const name="incline_none" vt="int" val="0"/>
        <const name="incline_down" vt="int" val="-1"/>
        <var name="incline" cat="details" vt="int" defval="0" range="1,0,-1"/>
        <const name="commuter_no" vt="string" val="no"/>
        <const name="commuter_yes" vt="string" val="yes"/>
        <const name="commuter_only" vt="string" val="only"/>
        <var name="commuter" cat="details" vt="string" defval="yes" range="no,yes,only" remark="Are commuter trains allowed?"/>
        <const name="train_no" vt="string" val="no"/>
        <const name="train_yes" vt="string" val="yes"/>
        <const name="train_only" vt="string" val="only"/>
        <var name="train" cat="details" vt="string" defval="yes" range="no,yes,only" remark="Are trains allowed?"/>
        <var name="multitraction" cat="details" vt="bool" defval="true" remark=""/>
        <const name="loc" vt="string" val="loc"/>
        <const name="reserve" vt="string" val="reserve"/>
        <const name="revert_reserve" vt="string" val="revert_reserve"/>
        <const name="resetwc" vt="string" val="resetwc" remark="Reset wheel counter."/>
        <const name="resetfifo" vt="string" val="resetfifo" remark="Reset FiFo list."/>
        <const name="nop" vt="string" val="nop" remark="No operation."/>
        <const name="bsp" vt="string" val="bsp" remark="Block site plus."/>
        <const name="bsm" vt="string" val="bsm" remark="Block site min."/>
        <const name="poweroff" vt="string" val="poweroff"/>
        <const name="stop" vt="string" val="stop"/>
        <const name="poweron" vt="string" val="poweron"/>
        <const name="speed1" vt="string" val="speed1"/>
        <const name="speed2" vt="string" val="speed2"/>
        <const name="resetghost" vt="string" val="resetghost"/>
        <const name="throttleopen" vt="string" val="throttleopen"/>
        <const name="throttleclose" vt="string" val="throttleclose"/>
        <const name="tracking_offer" vt="string" val="offer"/>
        <const name="tracking_offervia" vt="string" val="offervia"/>
        <const name="tracking_accept" vt="string" val="accept"/>
        <const name="tracking_reject" vt="string" val="reject"/>
        <const name="tracking_cancel" vt="string" val="cancel"/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*"/>
        <var name="mastercmd" cat="internal" vt="bool" defval="false"/>
        <var name="offerid" cat="internal" vt="string" defval="" range="*"/>
        <var name="offervia" cat="internal" vt="string" defval="" range="*"/>
        <var name="offerblock" cat="internal" vt="string" defval="" range="*"/>
        <var name="offerlocation" cat="internal" vt="string" defval="" range="*"/>
        <var name="ttid" cat="general" vt="string" defval="NULL" range="*" remark="Turntable ID."/>
        <var name="class" cat="details" vt="string" defval="" range="*" remark="Comma separated list of permitted classes."/>
        <var name="era" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="codesen" vt="string" defval="NULL" range="*" remark="ID of the code sensor"/>
        <var name="cleanstamp" cat="details" vt="long" defval="0" range="0-*" remark="timestamp of the last cleaning."/>
        <incl cardinality="n" wrappername="PermInclude">
          <var name="id" vt="string" defval="" range="*" required="true" remark="Loc ID."/>
          <var name="randomrate" vt="int" defval="0" range="0-*" remark="Rate of randomness. 0=Not used"/>
        </incl>
        <excl cardinality="n" wrappername="PermExclude">
          <var name="id" vt="string" defval="" range="*" required="true" remark="Loc ID."/>
        </excl>
        <var name="typeperm" vt="string" defval="" range="*" remark="Only allow this type of trains."/>

        <!-- CTC Aspect -->
        <var name="ctcOutput" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorFree" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorReserved" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorEnter" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorOccupied" cat="ctc" vt="int" defval="0"/>

        <var name="ctcDisplayIID" vt="string" defval="" range="*" required="false"/>
        <var name="ctcDisplayBus" vt="int" defval="0" range="0-*"/>
        <var name="ctcDisplayNr" vt="int" defval="0" range="0-*"/>
        <var name="ctcDisplayText" vt="string" defval="" range="0-*"/>

        <!-- New feedback handling: -->
        <fbevent cardinality="n"/>
        <actionctrl cardinality="n"/>
        <speedcondition cardinality="n"/>
        <fbstatistic cardinality="n"/>
      </bk>
    </bklist>

    <sblist cardinality="1" remark="Staging Yard Table" wrappername="StageList">
      <sb cardinality="n" wrappername="Stage">
        <var name="id" vt="string" defval="?" range="*" required="true"/>
        <var name="desc" vt="string" defval="" range="*" remark="Description of stage block."/>
        <var name="x" vt="int" defval="0" range="0-*" remark="X-Position in the plan."/>
        <var name="y" vt="int" defval="0" range="0-*" remark="Y-Position in the plan."/>
        <var name="z" vt="int" defval="0" range="0-9" remark="Z-Position in the plan. (level)"/>
        <var name="totallength" vt="int" defval="0" range="0-*" remark="Temporary calculated stageblock length for viewing usage only. (Dialog)"/>
        <var name="totalsections" vt="int" defval="0" range="0-*" remark="Temporary calculated number of sections for viewing usage only. (Dialog)"/>
        <var name="slen" vt="int" defval="30" range="0-*" unit="" remark="Section length."/>
        <var name="gap" vt="int" defval="5" range="0-*" unit="" remark="Train gap."/>
        <var name="remote" vt="bool" defval="false" remark="This flag is set by the R2Rnet object."/>
        <var name="rrid" vt="const char*" defval="" remark="This id is set by the R2Rnet object."/>
        <var name="state" vt="string" defval="open" range="open,closed"/>
        <var name="exitstate" vt="string" defval="open" range="open,closed"/>
        <var name="reverseexitstate" vt="string" defval="open" range="open,closed"/>
        <var name="entrystate" vt="string" defval="open" range="open,closed"/>
        <var name="locid" vt="string" defval="NULL" range="*" remark="The loc which is actualy in the block or is comming or going."/>
        <var name="reverseexit" vt="bool" defval="false" remark="Dead end stage: LiFo"/>
        <var name="reverserouting" vt="bool" defval="false"/>
        <var name="autoreverseloco" vt="bool" defval="false"/>
        <var name="reserved" vt="bool" defval="false" remark=""/>
        <var name="entering" vt="bool" defval="false" remark=""/>
        <var name="fbenterid" vt="string" defval="" range="*" required="true" remark="feedback ID"/>
        <var name="entersignal" vt="string" defval="NULL" range="*"/>
        <var name="exitsignal" vt="string" defval="NULL" range="*"/>
        <var name="reverseexitsignal" vt="string" defval="NULL" range="*"/>
        <var name="statesignal" cat="signals" vt="string" defval="NULL" range="*" remark="State Signal ID for loco info."/>
        <var name="timerevents" cat="internal" vt="bool" defval="false"/>
        <var name="departdelay" vt="int" defval="0" range="0-*" unit="s" remark="delay time to wait before loco starts when depart is raised"/>
        <var name="waitmode" vt="string" defval="random" range="random,fixed,loc,none"/>
        <var name="waittime" vt="int" defval="1" unit="s" range="0-*" remark="Wait time in case of wait_fixed."/>
        <var name="minwaittime" vt="int" defval="1" unit="s" range="0-*" remark="Min. wait time in case of wait_random."/>
        <var name="maxwaittime" vt="int" defval="30" unit="s" range="0-*" remark="Max. wait time in case of wait_random."/>
        <var name="speedpercent" vt="int" defval="10" unit="%" range="0-100" remark="Block arrive speed in percent."/>
        <var name="exitspeedpercent" vt="int" defval="80" unit="%" range="0-100" remark="Block depart speed in percent."/>
        <var name="stopspeed" vt="string" defval="min" range="min,percent" remark="Block speed on arrive and stop."/>
        <var name="stopspeedtolastsection" vt="bool" defval="false" remark="Use the stop speed also for running to the last section"/>
        <var name="exitspeed" vt="string" defval="cruise" range="*" remark="Block speed on departure."/>
        <var name="suitswell" vt="bool" defval="false" remark=""/>
        <var name="inatlen" vt="bool" defval="false" remark="In event if train length fits in the current sections."/>
        <var name="usewd" vt="bool" defval="true" remark="Use a watchdog for compressing when needed."/>
        <var name="wdsleep" vt="int" defval="1" range="1-*" remark="Watchdog sleep."/>
        <var name="minocc" vt="int" defval="0" range="0-*" remark="Minimal occupation before exit block."/>
        <var name="minoccsec" vt="int" defval="0" range="0-*" remark="Minimal section occupation before exit block."/>
        <const name="compress" vt="string" val="compress"/>
        <const name="open" vt="string" val="open" remark="In this state the block is chooseable for locs to enter."/>
        <const name="closed" vt="string" val="closed" remark="In this state the block is not chooseable for locs to enter."/>
        <const name="exitopen" vt="string" val="exitopen" remark="In this state the block is chooseable for locs to depart."/>
        <const name="exitclosed" vt="string" val="exitclosed" remark="In this state the block is not chooseable for locs to depart."/>
        <const name="reverseexitopen" vt="string" val="reverseexitopen"/>
        <const name="reverseexitclosed" vt="string" val="reverseexitclosed"/>
        <const name="startwd" vt="string" val="startwd"/>
        <const name="stopwd" vt="string" val="stopwd"/>
        <const name="setloco" vt="string" val="setloco"/>
        <const name="resetloco" vt="string" val="resetloco"/>
        <const name="reverseloco" vt="string" val="reverseloco"/>
        <const name="entryopen" vt="string" val="entryopen"/>
        <const name="entryclosed" vt="string" val="entryclosed"/>
        <const name="reverseexiton" vt="string" val="reverseexiton"/>
        <const name="reverseexitoff" vt="string" val="reverseexitoff"/>
        <const name="autoreverselocoon" vt="string" val="autoreverselocoon"/>
        <const name="autoreverselocooff" vt="string" val="autoreverselocooff"/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <var name="secid" vt="string" defval="NULL" range="*"/>
        <var name="randomrate" vt="int" defval="10" range="0-*" remark="Rate of randomness. 0=Not used"/>
        <var name="movetimeout" vt="int" defval="0" range="0-*" unit="sec." remark="Pending move timeout on compress command."/>
        <var name="electrified" vt="bool" defval="false" remark="Stage is open for electric locs."/>
        <section cardinality="n" wrappername="StageSection">
          <var name="id" vt="string" defval="?" range="*" required="true"/>
          <var name="lcid" vt="string" defval="NULL" range="*" remark=""/>
          <var name="fbid" vt="string" defval="" range="*" required="true" remark="feedback ID"/>
          <var name="fbidocc" vt="string" defval="" range="*" required="true" remark="feedback ID of section body."/>
          <var name="action" vt="string" defval=""/>
          <var name="nr" vt="int" defval="0"/>
          <var name="idx" vt="int" defval="0"/>
          <var name="len" vt="int" defval="0" range="0-*" unit="" remark="Section length."/>
        </section>
        <var name="maxlen" vt="int" defval="0" range="0-*" remark="Maximal train length allowed."/>
        <var name="minlen" vt="int" defval="0" range="0-*" remark="Minimal train length allowed."/>
        <var name="class" vt="string" defval="" range="*" remark="Comma separated list of permitted classes."/>
        <var name="era" vt="int" defval="0" range="0-*"/>
        <var name="typeperm" vt="string" defval="" range="*" remark="Only allow this type of trains."/>
        <var name="engine" cat="details" vt="string" defval="" remark="See locomotive engine types. If empty, not set, all engine types are allowed."/>
        <var name="smallsymbol" cat="config" vt="bool" defval="false" remark="Show this stage with the small representation."/>
        <var name="vmintofirstsection" cat="config" vt="bool" defval="false" remark="Use always Vmin if the target section is the first."/>
        <var name="freeblockonenter" cat="config" vt="bool" defval="false" remark="Use the enter event to free previous block."/> 
        <var name="freeblockonenterroute" cat="config" vt="bool" defval="true"/> 
        <var name="freeblockonentermaxlen" cat="config" vt="int" defval="0"/> 
        <actionctrl cardinality="n"/>
      </sb>
    </sblist>

    <linklist cardinality="1" remark="Block Link table" wrappername="LinkList">
      <link cardinality="n" wrappername="Link" remark="in case of critsect the src is ignored and all blocks listed in dst are group members">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <const name="usage_manual" vt="int" val="0"/>
        <const name="usage_critsect" vt="int" val="1" remark="group is used as a critical section"/>
        <var name="usage" vt="int" defval="1" range="*" remark="group usage"/>
        <var name="allowfollowup" vt="bool" defval="false" remark="Allow follow up in critsec for the same direction."/>
        <var name="maxfollowup" vt="int" defval="0" remark="Max. trains to follow up."/>
        <var name="active" vt="bool" defval="false" remark="Activates links: all blocks are set to manual mode."/>
        <var name="clear" vt="bool" defval="false" remark="Clear unlinked blocks."/>
        <var name="src" vt="string" defval="" range="*" required="true" remark="source block"/>
        <var name="dst" vt="string" defval="" range="*" required="true" remark="destination blocks; id's in CSV format"/>
        <var name="firstblock" vt="string" defval="" range="*" remark="First entry block of last session."/>
        <var name="firstloco" vt="string" defval="" range="*" remark="First loco of last session."/>
        <linkcond cardinality="n" wrappername="LinkCond">
          <var name="first" vt="string" defval="" range="*" remark="First lock block."/>
          <var name="firstenterside" vt="int" defval="0" remark="0=both,1=plus,2=min"/>
          <var name="free" vt="string" defval="" range="*" remark="One of this blocks must be free. (csv)"/>
          <var name="reserve" vt="bool" defval="false" remark="Reserve one of the free blocks."/>
          <var name="schedule" vt="bool" defval="false" remark="One of the free blocks must be in the active loco schedule."/>
        </linkcond>
      </link>
    </linklist>
    
    <stlist cardinality="1" remark="Route table" wrappername="RouteList">
      <st cardinality="n" wrappername="Route" remark="A street defines a destination fromone block to another including switch positions.">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="shortid" cat="general" vt="string" defval="" range="*" remark="Short IDs are used for throttle displays."/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-*" remark="level for internal use only"/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east"/>
        <var name="show" vt="bool" defval="false" remark="Visibility flag."/>
        <var name="len" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Total length of route to calculate the virtual event timer."/>
        <var name="radius" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="incline" cat="internal" vt="int" defval="0" range="0-*"/>
        <var name="autogen" vt="bool" defval="false" remark="Auto generated by the router."/>
        <var name="skipfinder" vt="bool" defval="false" remark="Skip this route for the Finder."/>
        <const name="routelock" vt="string" val="--routelock--" remark="id to signal FY and TT a route lock/unlock"/>
        <const name="point_nw" vt="string" val="point-nw"/>
        <const name="point_ne" vt="string" val="point-ne"/>
        <const name="point_wn" vt="string" val="point-wn"/>
        <const name="point_ws" vt="string" val="point-ws"/>
        <const name="point_sw" vt="string" val="point-sw"/>
        <const name="point_se" vt="string" val="point-se"/>
        <const name="point_en" vt="string" val="point-en"/>
        <const name="point_es" vt="string" val="point-es"/>
        <const name="point_nww" vt="string" val="point-nww"/>
        <const name="point_nee" vt="string" val="point-nee"/>
        <const name="point_wnn" vt="string" val="point-wnn"/>
        <const name="point_wss" vt="string" val="point-wss"/>
        <const name="point_sww" vt="string" val="point-sww"/>
        <const name="point_see" vt="string" val="point-see"/>
        <const name="point_enn" vt="string" val="point-enn"/>
        <const name="point_ess" vt="string" val="point-ess"/>
        <const name="point_n" vt="string" val="point-n" remark="for single track modules"/>
        <const name="point_w" vt="string" val="point-w" remark="for single track modules"/>
        <const name="point_s" vt="string" val="point-s" remark="for single track modules"/>
        <const name="point_e" vt="string" val="point-e" remark="for single track modules"/>
        <var name="bka" vt="string" defval="NULL" range="*" required="true" remark="From block ID: $ prefix is a NetRocrail ID."/>
        <var name="bkaside" vt="bool" defval="false" remark="Block side connection; true=+, false=-"/>
        <var name="bkb" vt="string" defval="NULL" range="*" required="true" remark="To block ID: $ prefix is a NetRocrail ID."/>
        <var name="bkbside" vt="bool" defval="true" remark="Block side connection; true=+, false=-"/>
        <var name="sga" vt="int" defval="0" remark="signal pair block a"/>
        <var name="sgb" vt="int" defval="0" remark="signal pair block b"/>
        <var name="bkc" vt="string" defval="NULL" range="*" required="false"
          remark="Crossing block: optional incase a block overlaps turnouts used by this route. This is a csv list of blocks."/>
        <var name="shunting" cat="internal" vt="bool" defval="false" remark="Is this route used for shunting?"/>
        <var name="linking" cat="internal" vt="bool" defval="false" remark="Link trackdrivers."/>
        <var name="overlen" cat="internal" vt="bool" defval="false" remark=""/>
        
        <var name="usestack" vt="bool" defval="true" remark="Use this route on the loco stack for calculation preferred."/>
        <var name="preferred" vt="int" defval="0" remark="Preferred route."/>
        <var name="routespeedatenter" cat="details" vt="bool" defval="false" remark="Use route speed at enter."/>
        <var name="swappost" vt="bool" defval="false" remark="swap loco placing at terminating this route"/>
        <var name="reduceV" vt="bool" defval="true" remark="reduce speed by thrown switches"/>
        <var name="whiteaspect" vt="bool" defval="false" remark="set white aspect"/>
        <var name="reduceaspect" vt="string" defval="white" remark="Aspect to be used in case white aspect."/>
        <var name="thrownswitches" vt="bool" defval="false" remark="overrules looking for thrown switches in the command list"/>
        <var name="crossingblocksignals" vt="bool" defval="false" remark="Set the signals in the crossing blocks according to the from block."/>
        <var name="manual" vt="bool" defval="false" remark="manual controlled route"/>
        <var name="locid" vt="string" defval="NULL" range="*" remark="The loco which has locked this route."/>
        <var name="status" vt="int" defval="0" remark="route status"/>
        <var name="settimeout" vt="int" defval="0" range="0-*" unit="s"/>
        <const name="status_free" vt="int" val="0"/>
        <const name="status_locked" vt="int" val="1"/>
        <const name="status_selected" vt="int" val="2"/>
        <const name="status_deselected" vt="int" val="3"/>
        <const name="status_closed" vt="int" val="4"/>
        <var name="syncsgcmd" vt="bool" defval="false" remark="Synchronise signal commands."/>
        <var name="check4redsignals" vt="bool" defval="false"/>
        <swcmd cardinality="n" wrappername="SwitchCmd">
          <var name="id" vt="string" defval="" range="*" required="true" remark="Switch ID."/>
          <var name="type" vt="string" defval="" range="*" remark="Object type"/>
          <var name="cmd" vt="string" defval="straight" range="straight,turnout,left,right,green,red,yellow,white,blank,track,on,off"/>
          <var name="track" vt="int" defval="0" range="0-*" remark="turntable track"/>
          <const name="cmd_track" vt="string" val="track" remark="track of turntable or selectiontable: avoid using same id's for both types!"/>
          <var name="lock" vt="bool" defval="true" remark="lock the switch for exclusive use"/>
          <var name="protect" vt="bool" defval="false" remark="flank protection"/>
          <var name="check" vt="bool" defval="false" remark="Check if the switch is in the wanted position."/>
          <var name="reduceV" vt="bool" defval="true" remark="reduce speed by thrown status"/>
          <var name="atfree" vt="bool" defval="false" remark="command should be fired at a free event"/>
          <var name="invert" vt="bool" defval="false" remark="Invert polarisation in case of trackdriver systems."/>
          <const name="mode_all" vt="int" val="0"/>
          <const name="mode_automatic" vt="int" val="1"/>
          <const name="mode_manual" vt="int" val="2"/>
          <var name="mode" vt="int" defval="0" range="0,1,2" remark="Only use this command for the selected mode: 0=all, 1=automatic, 2=manual"/>
          <var name="freesensor" vt="string" defval="" remark="Free switch on sensor ON event."/>
          <var name="section" vt="string" defval="" remark="Route section."/>
        </swcmd>
        <itemres cardinality="n" wrappername="ItemRes">
          <var name="id" vt="string" defval="" range="*" required="true" remark="Item ID"/>
          <var name="type" vt="string" defval="" range="*" remark="Object type: tk,sg,fb,..."/>
          <var name="section" vt="string" defval="" remark="Route section."/>
        </itemres>
        <const name="go" vt="string" val="go" remark="Switch all switches for this street."/>
        <const name="lock" vt="string" val="lock" remark="Lock this route."/>
        <const name="free" vt="string" val="free" remark="Free this route."/>
        <const name="force" vt="string" val="force" remark="Switch all switches for this street. (Manually)"/>
        <const name="test" vt="string" val="test" remark="Switch all switches for this street without sending the clients updates."/>
        <const name="classset" vt="string" val="classset"/>
        <const name="classadd" vt="string" val="classadd"/>
        <const name="classdel" vt="string" val="classdel"/>
        <const name="updateids" vt="string" val="updateids"/>
        <const name="manualoperated" vt="string" val="manualoperated"/>
        <const name="autooperated" vt="string" val="autooperated"/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <const name="V_none" vt="string" val="none" remark="No V_hint defined."/>
        <var name="speed" vt="string" defval="none" range="none,min,cruise,max" remark="Route speed on departure; overwrites block departure speed if set."/>
        <var name="speedpercent" vt="int" defval="80" unit="%" range="0-100" remark="Route speed in percent."/>
        <var name="maxkmh" vt="int" defval="0" range="0-*" remark="Route max. speed in km/h or mph."/>
        <var name="speedWait" vt="string" defval="none" range="none,min,cruise,max" remark="Route speed on departure; overwrites block departure speed if set."/>
        <var name="speedpercentWait" vt="int" defval="80" unit="%" range="0-100" remark="Route speed in percent."/>
        <var name="maxkmhWait" vt="int" defval="0" range="0-*" remark="Route max. speed in km/h or mph."/>
        <var name="speedShunt" vt="string" defval="none" range="none,min,cruise,max" remark="Route speed on departure; overwrites block departure speed if set."/>
        <var name="speedpercentShunt" vt="int" defval="80" unit="%" range="0-100" remark="Route speed in percent."/>
        <var name="maxkmhShunt" vt="int" defval="0" range="0-*" remark="Route max. speed in km/h or mph."/>
        <var name="shuntingpermission" vt="int" defval="0" remark="0=yes, 1=only, 2=no"/>
        <var name="allowsecondnext" cat="config" vt="bool" defval="true" remark="Allow reserving as second next route."/>
        <fbevent cardinality="n"/>
        <actionctrl cardinality="n"/>
        <item cardinality="n"/>
        <incl cardinality="n" />
        <excl cardinality="n" />
        <var name="class" vt="string" defval="" range="*" remark="Comma separated list of permitted classes."/>
        <var name="typeperm" vt="string" defval="" range="*" remark="Only allow this type of trains."/>
        <var name="engine" vt="string" defval="" range="*" remark="Only allow this type of engines."/>
        <var name="era" vt="int" defval="0" range="0-*"/>
        <var name="maxlen" vt="int" defval="0" range="0-*" remark="Maximal train length allowed for this route."/>
        <var name="minlen" vt="int" defval="0" range="0-*" remark="Minimal train length allowed for this route."/>
        <var name="placing" vt="int" defval="0" remark="0=both, 1=default 2=swapped"/>
        <const name="automatic_both" vt="int" val="0"/>
        <const name="automatic_schedule" vt="int" val="1"/>
        <const name="automatic_random" vt="int" val="2"/>
        <const name="automatic_no" vt="int" val="3"/>
        <var name="automatic" vt="int" defval="0" remark="0=both, 1=schedule 2=random 3=no"/>
        <var name="commuter" vt="bool" defval="false" remark="Only allow commuter trains."/>
        <var name="nocommuter" vt="bool" defval="false" remark="Disallow commuter trains."/>
        <var name="countcars" vt="string" defval="no" range="no,forwards,reverse" remark="Count number of cars before firing events."/>
        <var name="polarizationA" vt="int" defval="0" remark="From block polarisation: 0=none 1=false 2=true"/>
        <var name="polarizationB" vt="int" defval="0" remark="To Block or turntable bridge polarisation: 0=none 1=false 2=true"/>
        <const name="no" vt="string" val="no"/>
        <const name="forwards" vt="string" val="forwards"/>
        <const name="reverse" vt="string" val="reverse"/>
        <!-- CTC Address -->
        <var name="ctcoutput1" vt="string" defval="NULL" range="*" remark="CTC Output1"/>
        <var name="ctcoutput2" vt="string" defval="NULL" range="*" remark="CTC Output2"/>
        <var name="ctcoutput3" vt="string" defval="NULL" range="*" remark="CTC Output3"/>
        <var name="ctciid1" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus1" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr1" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid1" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctciid2" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus2" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr2" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid2" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>
        <var name="ctciid3" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="ctcbus3" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="ctcaddr3" vt="int" defval="0" range="0-*" required="true" remark="address"/>
        <var name="ctcuid3" vt="string" defval="" range="*" required="false" remark="Alternative to the UID.(Bus)"/>

        <!-- CTC Aspect -->
        <var name="ctcOutput" cat="ctc" vt="string" defval="" range="*"/>
        <var name="ctcColorFree" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorReserved" cat="ctc" vt="int" defval="0"/>
        <var name="ctcColorShunting" cat="ctc" vt="int" defval="0"/>

        <var name="includeconditions" vt="bool" defval="true" remark="The conditions are to include locos. If one of the conditions is true? Include or Exclude"/>
        <stcondition cardinality="n" wrappername="RouteCondition">
          <var name="prevbkid" vt="string" defval="" remark="Previous block ID."/>
          <var name="class" vt="string" defval="" remark="Train class."/>
          <var name="chdir" vt="bool" defval="false" remark="Must change direction."/>
          <var name="commuter" vt="bool" defval="false" remark="Commuter train."/>
          <var name="type" vt="string" defval="" remark="Train type"/>
          <var name="allowschedules" vt="bool" defval="true" remark="Allow schedules to use this route."/>
        </stcondition>
        <speedcondition cardinality="n"/>
      </st>
    </stlist>
    <tklist cardinality="1" remark="Track table" wrappername="TrackList">
      <tk cardinality="n" wrappername="Track" remark="None active piece of plan.">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="blockid" vt="string" defval="NULL" range="*"/>
        <var name="sensorid" vt="string" defval="NULL" range="*"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-9"/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east"/>
        <const name="straight" vt="string" val="straight"/>
        <const name="buffer" vt="string" val="buffer"/>
        <const name="curve" vt="string" val="curve"/>
        <const name="dir" vt="string" val="dir"/>
        <const name="tracknr" vt="string" val="tracknr"/>
        <const name="curvenr" vt="string" val="curvenr"/>
        <const name="connector" vt="string" val="connector"/>
        <const name="concurveright" vt="string" val="concurveright"/>
        <const name="concurveleft" vt="string" val="concurveleft"/>
        <const name="accessory" vt="string" val="accessory"/>
        <var name="type" vt="string" defval="straight" range="straight,curve,dir,buffer,connector,concurveright,concurveleft"/>
        <var name="tknr" vt="int" defval="1" range="0-*" required="false" remark="Track number."/>
        <var name="counterpartid" vt="string" defval="NULL" range="*"/>
        <var name="direxception" vt="string" defval="" range="*" remark="Blick ID csv list."/>
        <var name="accessory" cat="general" vt="bool" defval="true"/>
      </tk>
    </tklist>

    <ttlist cardinality="1" remark="Turntable" wrappername="TurntableList">
      <tt cardinality="n" wrappername="Turntable" remark="Turntable definition.">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="oid" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="bus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr" vt="int" defval="0" range="0-*" required="true" remark="Turntable address."/>
        <var name="diraddr" vt="int" defval="0" range="0-*" required="true" remark="Direction address."/>
        <var name="poladdr" vt="int" defval="0" range="0-*" required="false" remark="Polarization relay address 1."/>
        <var name="poladdr2" vt="int" defval="0" range="0-*" required="false" remark="Polarization relay address 2."/>
        <var name="poloutput1" vt="string" defval="" range="*" remark="Polarization relay output 1."/>
        <var name="poloutput2" vt="string" defval="" range="*" remark="Polarization relay output 2."/>
        <var name="motoroffdelay" vt="int" defval="1000" range="0-*" required="false" remark="shut off delay for locdec motor"/>
        <var name="inv" vt="bool" defval="false" remark="invert the commands"/>
        <var name="move4opp" vt="bool" defval="true" remark="Move bridge if the target track is opposite of the current position."/>
        <var name="randomrate" vt="int" defval="10" range="0-*" remark="Rate of randomness. 0=Not used"/>
        <var name="decid" vt="string" defval="" range="*" remark="Decoder ID"/>
        <var name="addressing" vt="int" defval="0" remark="0=default, 1=FADA, 2=PADA"/>
        <var name="skipifset" vt="bool" defval="false" remark="Skip command if the bridge is already in the wanted position."/>
        <var name="optpos" vt="bool" defval="false" remark="Calculate a shorter bridge position independent of the plus side."/>
        
        <var name="porttype" vt="int" defval="0" range="0-*" required="false" remark=""/>
        <var name="homeoffset" vt="int" defval="0" range="0-*" required="false" remark="zero position offset in degrees"/>
        
        <!-- Track Driver support (Dinamo)-->
        <var name="tdiid" vt="string" defval="NULL" range="*" remark="TD interface id"/>
        <var name="tdbus" vt="int" defval="0" range="0-*" remark="TD bus"/>
        <var name="tdaddr" vt="int" defval="0" range="0-*" remark="TD address"/>
        <var name="tdport" vt="int" defval="0" range="0-*" remark="TD output port"/>
        <var name="td" vt="bool" defval="false" remark="trackdriver connected to this block"/>
        
        <var name="addr0" vt="int" defval="0" range="0-*" required="true" remark="bit 0 of track"/>
        <var name="port0" vt="int" defval="0" range="0-4" required="true" remark="bit 0 of track"/>
        <var name="addr1" vt="int" defval="0" range="0-*" required="true" remark="bit 1 of track"/>
        <var name="port1" vt="int" defval="0" range="0-4" required="true" remark="bit 1 of track"/>
        <var name="addr2" vt="int" defval="0" range="0-*" required="true" remark="bit 2 of track"/>
        <var name="port2" vt="int" defval="0" range="0-4" required="true" remark="bit 2 of track"/>
        <var name="addr3" vt="int" defval="0" range="0-*" required="true" remark="bit 3 of track"/>
        <var name="port3" vt="int" defval="0" range="0-4" required="true" remark="bit 3 of track"/>
        <var name="addr4" vt="int" defval="0" range="0-*" required="true" remark="bit 4 of track"/>
        <var name="port4" vt="int" defval="0" range="0-4" required="true" remark="bit 4 of track"/>
        <var name="addr5" vt="int" defval="0" range="0-*" required="true" remark="new position set flag address"/>
        <var name="port5" vt="int" defval="0" range="0-4" required="true" remark="new position set flag port"/>
        <var name="addr6" vt="int" defval="0" range="0-*" required="true" remark="bit 5 of track"/>
        <var name="port6" vt="int" defval="0" range="0-4" required="true" remark="bit 5 of track"/>
        <var name="resetaddr" vt="int" defval="0" range="0-*" required="true" remark="Reset bit address"/>
        <var name="resetport" vt="int" defval="0" range="0-4" required="true" remark="Reset bit port"/>

        <var name="resetbitcmd" vt="int" defval="0" range="0,1"/>
        <var name="bit0cmd" vt="int" defval="0" range="0,1"/>
        <var name="bit1cmd" vt="int" defval="0" range="0,1"/>
        <var name="bit2cmd" vt="int" defval="0" range="0,1"/>
        <var name="bit3cmd" vt="int" defval="0" range="0,1"/>
        <var name="bit4cmd" vt="int" defval="0" range="0,1"/>
        <var name="bit5cmd" vt="int" defval="0" range="0,1"/>

        <var name="psen" vt="string" defval="NULL" range="*" remark="ID of the position ready sensor"/>
        <var name="b0sen" vt="string" defval="NULL" range="*" remark="ID bit 0 of position"/>
        <var name="b1sen" vt="string" defval="NULL" range="*" remark="ID bit 1 of position"/>
        <var name="b2sen" vt="string" defval="NULL" range="*" remark="ID bit 2 of position"/>
        <var name="b3sen" vt="string" defval="NULL" range="*" remark="ID bit 3 of position"/>

        <var name="invpos" vt="bool" defval="false" remark="invert position commands"/>
        <var name="invnew" vt="bool" defval="false" remark="invert position set flag command"/>
        <var name="manager" vt="bool" defval="false" remark="Manager mode: Act like a block and manage all sub blocks.(Tracks)"/>
        <var name="embeddedblock" vt="bool" defval="false" remark="TT is block."/>
        <var name="speed" cat="details" vt="string" defval="min" range="*" remark="Bridge speed."/>
        <var name="speedpercent" cat="details" vt="int" defval="10" unit="%" range="5-100" remark="Bridge in percent."/>
        <var name="stepdelay" cat="details" vt="int" defval="10" unit="ms" range="0-10"/>
        <var name="reserved" vt="bool" defval="false"/>
        <var name="entering" vt="bool" defval="false"/>
        <var name="state" vt="string" defval="open" range="open,closed"/>
        <var name="traverser" vt="bool" defval="false"/>
        <var name="singlegatepos" vt="bool" defval="false"/>
        <var name="singlegatenew" vt="bool" defval="false"/>
        <var name="correction" cat="details" vt="int" defval="0" remark="Direction change correction."/>
        
        <var name="symbolsize" vt="int" defval="5" range="2-5"/>
				
        <var name="prot" vt="string" defval="D" range="D,M,N" remark="Protocol to use."/>
        <const name="prot_DEF" vt="string" val="D" remark="default protocol by command station"/>
        <const name="prot_M" vt="string" val="M" remark="Motorola"/>
        <const name="prot_N" vt="string" val="N" remark="NMRA-DCC"/>
        <const name="prot_MP" vt="string" val="MP" remark="Multi Port"/>
        <var name="swcmd" vt="bool" defval="false" remark="use switch instead of output commands"/>
        <var name="V" vt="int" defval="75" range="10-100" required="true" remark="Rotation speed in percent."/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-9"/>
        <const name="next" vt="string" val="next" remark="Go to next track."/>
        <const name="prev" vt="string" val="prev" remark="Go to previous track."/>
        <const name="turn180" vt="string" val="180" remark="Go to previous track."/>
        <const name="lighton" vt="string" val="lighton" remark="Turn lights on."/>
        <const name="lightoff" vt="string" val="lightoff" remark="Turn lights off."/>
        <const name="fon" vt="string" val="on" remark="Turn function on."/>
        <const name="foff" vt="string" val="off" remark="Turn function off."/>
        <const name="calibrate" vt="string" val="calibrate" remark="Calibrate the turntable."/>
        <const name="soundon" vt="string" val="soundon" remark="Turn sound on."/>
        <const name="soundoff" vt="string" val="soundoff" remark="Turn sound off."/>
        <const name="posselstart" vt="string" val="posselstart" remark="Start position selecting"/>
        <const name="step" vt="string" val="step" remark="Step for fine tuning"/>
        <const name="stop" vt="string" val="stop" remark="Stop movement."/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <var name="dir" vt="bool" defval="true"/>
        <var name="cmdbyroute" vt="bool" defval="false"/>
        <var name="fun" vt="int" defval="0" range="0-*"/>
        <const name="locdec" vt="string" val="locdec" remark="Modified analog turntable."/>
        <const name="accdec" vt="string" val="accdec" remark="Controlling a modified turntable with switch commands."/>
        <const name="digitalbahn" vt="string" val="digitalbahn" remark="www.digital-bahn.de turntable decoder"/>
        <const name="multiport" vt="string" val="multiport" remark="Multiport step motor turntable."/>
        <const name="f6915" vt="string" val="f6915" remark="Fleischmann turn controller."/>
        <const name="muet" vt="string" val="muet" remark="Muet controller with stepper motor."/>
        <const name="slx815" vt="string" val="slx815" remark="Rautenhaus controller."/>
        <const name="ttdec" vt="string" val="ttdec" remark="LDT TT-DEC"/>
        <const name="d15" vt="string" val="d15" remark="Draai15"/>
        <const name="dsm" vt="string" val="dsm" remark="Staerz DSM"/>
        <const name="onestep" vt="string" val="onestep" remark="BiDiB OneStep."/>
        <const name="dsd2010" vt="string" val="dsd2010"/>
        <const name="WIO" vt="string" val="wio"/>
        <const name="WIOservo" vt="string" val="wioservo"/>
        <const name="generic" vt="string" val="generic"/>
        <var name="type" vt="string" defval="locdec" range="*"/>
        <var name="decsteps" vt="int" defval="0" range="*" required="false" remark="Max. decoder steps"/>
        <var name="lightsfn" vt="int" defval="1" range="0-28"/>
        <var name="actfn" vt="int" defval="0" range="0-28" required="false" remark="Activation function for locdec type turntable drives."/>
        <var name="polfn" vt="int" defval="0" range="0-*" required="false" remark="Polarization relay function."/>
        <var name="bridgepos" vt="int" defval="0" range="0-47" required="false"/>
        <var name="reportedpos" vt="int" defval="0" range="0-47" required="false"/>
        <var name="swaprotation" vt="bool" defval="false" remark="swap bridge rotation direction"/>
        <var name="s1" vt="string" defval="" range="*" required="true" remark="Feedback ID for detection occupancy on the bridge."/>
        <var name="s2" vt="string" defval="" range="*" required="true" remark="Feedback ID for detection occupancy on the bridge."/>
        <var name="sMid" vt="string" defval="" range="*" required="true" remark="Feedback ID for detection occupancy on the bridge."/>
        <var name="sMid2" vt="string" defval="" range="*" required="true" remark="Feedback ID for detection occupancy on the bridge."/>
        <var name="state1" vt="bool" defval="false" remark="Feedback state bridge sensor1."/>
        <var name="state2" vt="bool" defval="false" remark="Feedback state bridge sensor2."/>
        <var name="stateMid" vt="bool" defval="false" remark="Feedback state bridge sensor3."/>
        <var name="stateMid2" vt="bool" defval="false" remark="Feedback state bridge sensor4."/>
        <const name="unlocked" vt="string" val="-unlocked-" remark="Place holder for locid not set."/>
        <var name="locid" vt="string" defval="NULL" range="*" remark="The loc who locked this turntable."/>
        <var name="startdelay" vt="int" defval="0" range="0-*" unit="ms" required="false"/>
        <var name="delay" vt="int" defval="0" range="0-*" unit="s" required="false"/>
        <var name="pause" vt="int" defval="0" range="0-*" unit="s" required="false" remark="pause between direction and position command"/>
        <var name="notfrom" vt="int" defval="-1"/>
        <var name="notto" vt="int" defval="-1"/>
        <var name="gridcon" vt="bool" defval="false" remark="Use track grid connections."/>
        <var name="showborder" vt="bool" defval="true" remark="Show dashed symbol border."/>
        <track cardinality="n" wrappername="TTTrack" remark="Turntable track.">
          <var name="posfb" vt="string" defval="" range="*" required="true" remark="Feedback ID for positioning the TT."/>
          <var name="nr" vt="int" defval="0" range="0-48*" required="true" remark="Track number."/>
          <var name="decnr" vt="int" defval="-1" range="*" required="false" remark="Decoder track number."/>
          <var name="bkid" vt="string" defval="NULL" range="*" remark="block id"/>
          <var name="oppositetrack" vt="int" defval="-1" range="*" required="false" remark="Opposite track to do a 180 degree turn."/>
          <var name="state" vt="bool" defval="false" remark="pos feedback state."/>
          <var name="desc" vt="string" defval="" range="*" remark="description"/>
          <var name="polarization" vt="bool" defval="false" remark="Flip bridge polarization when entering this track."/>
          <var name="show" vt="bool" defval="true" remark="Visibility flag."/>
          <var name="gridconx" vt="int" defval="-1" range="*" remark="Grid X connection in units of 0.5 grid size."/>
          <var name="gridcony" vt="int" defval="-1" range="*" remark="Grid Y connection in units of 0.5 grid size."/>
          <var name="addr" vt="int" defval="0" range="*" remark="decoder type generic"/>
          <var name="port" vt="int" defval="0" range="*" remark="decoder type generic"/>
          <var name="gate" vt="int" defval="0" range="*" remark="decoder type generic"/>
          <var name="turn180" vt="bool" defval="false"/>
          <var name="swapenter" vt="bool" defval="false"/>
          <var name="departdir" vt="int" defval="0" range="*" required="false" remark="0=default 1=fwd 2=rev"/>
        </track>
        <actionctrl cardinality="n"/>
      </tt>
    </ttlist>
    <declist cardinality="1" remark="Decoder table" wrappername="DecList">
      <dec cardinality="n" wrappername="Dec" remark="DCC Decoder definition.">
        <var name="iid" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="nodename" vt="string" defval="" range="*"/>
        <var name="prev_id" vt="string" defval="" range="*" remark="in case of an id change this should help to find the original in the loc table"/>
        <var name="docu" vt="string" defval="" range="*"/>
        <var name="identifier" vt="string" defval="" range="*"/>
        <var name="resetreason" vt="int" defval="0" range="0-*"/>
        <var name="bus" vt="int" defval="0" range="0-*" required="false"/>
        <var name="addr" vt="int" defval="0" range="0-255" required="true"/>
        <var name="subaddr" vt="string" defval="" range="*"/>
        <var name="prot" vt="string" defval="P" range="*"/>
        <var name="protver" vt="int" defval="1" range="*" remark="Protocol version"/>
        <var name="desc" vt="string" defval="" range="*" remark="Description of loc."/>
        <var name="manu" vt="string" defval="" range="*" remark="Manufacturer."/>
        <var name="manuid" vt="int" defval="0" range="*" remark="Manufacturer ID"/>
        <var name="prodid" vt="int" defval="0" range="*" remark="Product ID"/>
        <var name="type" vt="string" defval="" range="*" remark="Decoder type."/>
        <var name="porttype" vt="int" defval="0"/>
        <var name="fnames" vt="string" defval="" range="*" remark="Function names format: #:name,#:name,..."/>
        <var name="fx" vt="int" defval="0" remark="Function status bits for display only."/>
        <var name="accnr" vt="int" defval="0" range="0-*"/>
        <var name="catnr" vt="string" defval="" range="*" remark="Catalog number."/>
        <var name="image" vt="string" defval="NULL" range="*" remark="decoder image file"/>
        <var name="decfile" vt="string" defval="nmra-rp922-acc.xml" range="*" remark="Decoder definition file."/>
        <var name="place" vt="string" defval="" range="*" remark="place on the layout."/>
        <const name="init" vt="string" val="init"/>
        <const name="shutdown" vt="string" val="shutdown"/>
        <const name="showled" vt="string" val="showled"/>
        <const name="publish" vt="string" val="publish"/>
        <var name="cmd" vt="string" defval="NULL" range="*" remark="Decoder command."/>
        <const name="state_online" vt="string" val="online"/>
        <const name="state_offline" vt="string" val="offline"/>
        <const name="state_error" vt="string" val="error"/>
        <const name="state_message" vt="string" val="message"/>
        <var name="state" vt="string" defval="offline" range="*" remark="Decoder state."/>
        <var name="battery" vt="int" defval="0" range="0-100"/>
        <var name="RSSI" vt="int" defval="0"/>
        <var name="temp" vt="int" defval="0"/>
        <var name="pressure" vt="int" defval="0"/>
        <var name="humidity" vt="int" defval="0"/>
        <var name="iodef" vt="string" defval="" range="*"/>
        <var name="show" vt="bool" defval="false" remark="Visibility flag."/>
        <var name="critical" vt="bool" defval="false" remark="If set this decoder must be online."/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-*" remark="level for internal use only"/>
        <var name="cvnrs" cat="interface" vt="string" defval="" range="*" remark="predefined CV's for read,write and copy all"/>
        <cvbyte cardinality="n"/>
        <actionctrl cardinality="n"/>
      </dec>
    </declist>
    <lclist cardinality="1" remark="Loc table" wrappername="LocList">
      <lc cardinality="n" wrappername="Loc" remark="Loc definition." categories="general,interface,details,multiunits,bbt,sbt,calibrate,internal">
        <var name="screcord" cat="general" vt="bool" defval="false" remark="Record all in blocks as schedule."/>
        <var name="show" cat="general" vt="bool" defval="true" remark="Show in loco table."/>
        <var name="widget" cat="general" vt="bool" defval="true" remark="Show loco as widget."/>
        <var name="decoupler" cat="general" vt="bool" defval="false" remark="If the loco has a decoupler function."/>
        <var name="image" cat="general" vt="string" defval="NULL" range="*" remark="Image file with side 1 to the right."/>
        <var name="image2" cat="general" vt="string" defval="NULL" range="*" remark="Image file with side 2 to the right."/>
        <var name="imagesel" cat="internal" vt="int" defval="0" range="*"/>
        <var name="blockimage" cat="general" vt="string" defval="" range="*" remark="Optional Image file for blocks."/>
        <var name="decimage" cat="general" vt="string" defval="NULL" range="*" remark="decoder image file"/>
        <var name="imagenr" cat="general" vt="int" defval="0" range="*" remark="throttle image number"/>
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="uid" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="sid" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="shortid" cat="general" vt="string" defval="" range="*" remark="Short IDs are used for throttle displays."/>
        <var name="usefinder" cat="internal" vt="bool" defval="true" remark="Use the Finder in case of a gotoblock command."/>
        <var name="useshortid" cat="general" vt="bool" defval="false" remark="Use short ID to send to throttle."/>
        <var name="lookupschedule" cat="details" vt="bool" defval="false" remark="Look up a schedule which fits location, class and time."/>
        <var name="lookupschedulevirtual" cat="details" vt="bool" defval="false" remark="Go virtual for this session."/>
        <var name="reducespeedatenter" cat="details" vt="bool" defval="false" remark="Reduce speed at enter if the next route has thrown switches."/>
        <var name="routespeedatenter" cat="details" vt="bool" defval="false" remark="Use route speed at enter."/>
        <var name="check2in" cat="details" vt="bool" defval="false" remark="Check for a free new destination between the enter and in event."/>
        <var name="roadname" cat="general" vt="string" defval="" range="*"/>
        <var name="scale" cat="general" vt="string" defval="" range="*" remark="Z, N, TT, H0, 0, 00, 1, G, ..."/>
        <var name="workspace" cat="general" vt="string" defval="" range="*"/>
        <var name="group" vt="string" defval="" remark="Group selection central loco DB."/>
        <var name="number" cat="general" vt="string" defval="" range="*"/>
        <var name="camhost" cat="general" vt="string" defval="" range="*" remark="Video streaming host."/>
        <var name="camport" cat="general" vt="int" defval="8081" range="*" remark="Video streaming port."/>
        <var name="camtype" cat="general" vt="int" defval="0" range="*" remark="Video streaming type: 0=http, 1=udp"/>
        <var name="camskip" cat="general" vt="int" defval="0" range="*" remark="Skip number of frames to reduce CPU."/>
        <var name="camfile" cat="general" vt="string" defval="stream.mjpg" range="*" remark="Video streaming file name."/>
        <var name="camoption" cat="general" vt="int" defval="0" range="*" remark="Special CAM options"/>
        <var name="docu" cat="general" vt="string" defval="" range="*"/>
        <var name="home" cat="general" vt="string" defval="" range="*" remark="Home location or block."/>
        <var name="homeside" cat="general" vt="int" defval="0" range="*" remark="0=none 1=plus 2=min"/>
        <var name="servicelocation" cat="general" vt="string" defval="" range="*" remark="Service location or block."/>
        <var name="servicegoto" cat="details" vt="bool" defval="false" remark="Goto service location automatically if needed."/>
        <var name="oid" cat="general" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="signalaspect" vt="char*" defval="" range="*" remark="Signal aspect of current block."/>
        <var name="throttleid" vt="char*" defval="NULL" range="*" remark="Throttle ID to which this loco is dispatched."/>
        <var name="throttlenr" vt="int" defval="0" range="0-255" remark="Throttle number for receiving the short id."/>
        <var name="identifier" cat="general" vt="string" defval="" remark="Loc identifier incase of RFID, Lissy, Barcode..."/>
        <var name="prev_id" vt="string" defval="" range="*" remark="in case of an id change this should help to find the original in the loc table"/>
        <var name="iid" cat="interface" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="bus" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="addr" cat="interface" vt="int" defval="0" range="0-255" required="true" remark="Digital address. (0 == analog)"/>
        <var name="secaddr" cat="interface" vt="int" defval="0" range="0-255" required="false" remark="Secondary address for coupler systems."/>
        <var name="usesecaddr" cat="interface" vt="bool" defval="false" remark="Use secondary address for speed commands."/>
        <var name="port" vt="int" defval="0" range="0-*" required="false" remark="Block number in the Dinamo system. (Block property)"/>
        <var name="len" cat="general" vt="int" defval="0" range="0-*" unit="" remark="Total length of loc with wagons to check with block length.."/>
        <var name="radius" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="wheeldiameter" vt="float" defval="13.0" units="mm" remark="Diameter of Hall sensor wheel."/>
        <var name="wheelbase" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="weight" cat="general" vt="int" defval="0" range="0-*" unit=""/>
        <var name="nraxis" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="nrcars" vt="int" defval="0" range="0-*" remark="Number of cars. Needed for counting in sensors."/>
        <var name="secondnextblock" cat="details" vt="bool" defval="false" remark="Try to reserve a second next block."/>
        <var name="secondnextblock4wait" vt="bool" defval="false" remark="Try to reserve a second next block also in case of wait."/>
        <var name="resumeauto" cat="details" vt="bool" defval="false" remark="Resume auto mode from previous session."/>
        <var name="shortin" cat="details" vt="bool" defval="false" remark="Use shortin event to stop in blocks."/>
        <var name="inatpre2in" cat="details" vt="bool" defval="false" remark="Use pre2in event to stop in blocks."/>
        <var name="usedepartdelay" cat="details" vt="bool" defval="true" remark="Use the depart delay defined in the current block."/>
        <var name="departdelay" cat="details" vt="int" defval="0" range="0-*" unit="s" remark="Overrules the block departdelay."/>
        <var name="freeblockonenter" cat="details" vt="bool" defval="false" remark="Use the enter event to free previous block."/> 
        <var name="era" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="owner" cat="details" vt="string" defval="" range="*"/>
        <var name="color" cat="details" vt="string" defval="" range="*"/>
        <var name="gotoblockid" cat="internal" vt="string" defval="NULL" range="*"/>
        <var name="arrivetime" vt="long" defval="0" range="*" remark="time in seconds"/>
        <var name="routestack" cat="details" vt="bool" defval="false" remark="Use route stack for route random preffered value."/>
        <var name="stoponfailgoto" vt="bool" defval="false"/>
        <var name="directgoto" vt="bool" defval="false"/>
        <var name="allowoverlen" vt="bool" defval="false" remark="Allow long trains to occupy multiple blocks and routes."/>
        
        <const name="pass" vt="string" val="pass" remark="No speed change."/>
        <const name="V0" vt="string" val="V0"/>
        <const name="min" vt="string" val="min" remark="Set speed to minimal."/>
        <const name="mid" vt="string" val="mid" remark="Set speed to middle."/>
        <const name="max" vt="string" val="max" remark="Set speed to maximal."/>
        <const name="cruise" vt="string" val="cruise" remark="Set speed to 80% of maximal."/>
        <const name="climb" vt="string" val="climb" remark="Set speed to 90% of maximal."/>
        <var name="polarisation" cat="config" vt="bool" defval="true" remark="Default polarisation for bidi placing."/>

        <!-- running steps in percents for maerklin decoders in case of V_mode="percent":
           7% = 1    57% = 8
          14% = 2    64% = 9
          21% = 3    71% = 10
          28% = 4    78% = 11
          35% = 5    85% = 12
          42% = 6    92% = 13
          50% = 7   100% = 14
        -->
        <!-- V speed attributes -->
        <const name="V_mode_kmh" vt="string" val="kmh"/>
        <const name="V_mode_step" vt="string" val="step"/>
        <const name="V_mode_percent" vt="string" val="percent"
               remark="use 30 incase of mins=4, 70 incase of maxs=10... (Replaces attr controlled)"/>
        <var name="V_mode" cat="interface" vt="string" defval="percent" range="kmh,percent"
             remark="How the V values should be interpreted by the digint: percent is used for decoders without max speed tuning.(Delta...)"/>
        <var name="V_max" cat="interface" vt="int" defval="100" range="*" remark="Maximal speed."/>
        <var name="V_maxsec" cat="interface" vt="int" defval="14" range="*" remark="Maximal speed for secondary address."/>
        <var name="V_cru" cat="interface" vt="int" defval="0" range="*" remark="Cruise speed.(not used when 0)"/>
        <var name="V_mid" cat="interface" vt="int" defval="50" range="*" remark="Middle speed."/>
        <var name="V_min" cat="interface" vt="int" defval="10" range="*" remark="Minimal speed."/>
        
        <var name="KMH_max" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_max percent."/>
        <var name="KMH_cru" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_cru percent."/>
        <var name="KMH_mid" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_mid percent."/>
        <var name="KMH_min" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_min percent."/>

        <var name="KMH_Rmax" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_max percent."/>
        <var name="KMH_Rcru" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_cru percent."/>
        <var name="KMH_Rmid" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_mid percent."/>
        <var name="KMH_Rmin" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_min percent."/>

        <var name="KMH_Smax" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_max percent."/>
        <var name="KMH_Scru" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_cru percent."/>
        <var name="KMH_Smid" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_mid percent."/>
        <var name="KMH_Smin" cat="interface" vt="int" defval="0" range="*" remark="KMH for V_min percent."/>

        <var name="V_Smax" cat="interface" vt="int" defval="0" range="*" remark="Maximal shunting speed.(not used when 0)"/>
        <var name="V_Scru" cat="interface" vt="int" defval="0" range="*" remark="Cruise shunting speed.(not used when 0)"/>
        <var name="V_Smid" cat="interface" vt="int" defval="0" range="*" remark="Middle shunting speed.(not used when 0)"/>
        <var name="V_Smin" cat="interface" vt="int" defval="0" range="*" remark="Minimal shunting speed.(not used when 0)"/>
        
        <var name="V_Rmax" cat="interface" vt="int" defval="0" range="*" remark="Maximal reverse speed.(not used when 0)"/>
        <var name="V_Rcru" cat="interface" vt="int" defval="0" range="*" remark="Cruise reverse speed.(not used when 0)"/>
        <var name="V_Rmid" cat="interface" vt="int" defval="0" range="*" remark="Middle reverse speed.(not used when 0)"/>
        <var name="V_Rmin" cat="interface" vt="int" defval="0" range="*" remark="Minimal reverse speed.(not used when 0)"/>
        <var name="V" cat="interface" vt="int" defval="-1" range="*" unit="kmh" remark="Loc speed in kmh."/>
        <var name="V_raw" cat="interface" vt="int" defval="-1" range="*" remark="Loc speed in CS speed steps."/>
        <var name="V_rawMax" cat="interface" vt="int" defval="-1" range="*" remark="Max loc speed in CS speed steps."/>
        <var name="V_step" cat="interface" vt="int" defval="0" range="0-9" unit="tenth of sec."
             remark="Time between next decoder speed.(used only incase of V_mode_percent)"/>
        <var name="V_hint" cat="interface" vt="string" defval="NULL" range="min,mid,max,cruise,climb"
             remark="Loc speed in word hints."/>
        <var name="V_maxkmh" cat="interface" vt="int" defval="0" range="0-*" unit="kmh" remark="Maximal block speed in kmh"/>
        <var name="V_realkmh" cat="interface" vt="int" defval="0" range="0-*" unit="kmh" remark="Reported speed in kmh."/>
        <var name="qos" cat="interface" vt="int" defval="0" range="0-*" remark="Reported QoS."/>

        <var name="angle" vt="int" defval="0" range="0-*" remark="Steer angle."/>
        <var name="push" vt="int" defval="0" range="0-*" remark="Steer push."/>
        
        <!-- Calibrate  -->
        <var name="Vmaxkmh" cat="calibrate" vt="int" defval="0" range="0-999" remark="Maximal speed in kmh."/>
        <var name="Vmidkmh" cat="calibrate" vt="int" defval="0" range="0-999" remark="Maximal speed in kmh."/>
        <var name="Vmaxmax" cat="calibrate" vt="int" defval="255" range="0-255" remark="Maximal Vmax value in case of a calibrate command."/>
        <var name="Vmaxmin" cat="calibrate" vt="int" defval="20" range="0-255" remark="Minimal Vmax value in case of a calibrate command."/>
        <var name="Vmidpercent" cat="calibrate" vt="int" defval="30" range="0-100" remark="Percentage of Vmax in case of a calibrate command."/>
        <var name="Vmidset" cat="calibrate" vt="bool" defval="true" remark="Set Vmid."/>
        <var name="Vadjust" cat="calibrate" vt="int" defval="75" range="50-100" remark="Adjust factor in percent."/>
        
        <var name="mass" cat="interface" vt="int" defval="0" range="0-255" remark="Mass index for use with accelerate and decelerate."/>
        <var name="volume" cat="interface" vt="int" defval="200" range="0-255" remark="Sound volume."/>
        <var name="dir" cat="interface" vt="bool" defval="true" remark="Direction; true is forwards."/>
        <var name="invdir" cat="interface" vt="bool" defval="false" remark="Flip direction instead of programming the decoder cv29."/>
        <var name="placing" vt="bool" defval="true" remark="Logical forward placing."/>
        <var name="v0onswap" cat="interface" vt="bool" defval="false" remark="Command V0 on swap to inform the decoder."/>
        <var name="roaming" cat="internal" vt="bool" defval="true" remark="The roaming flag allows a loc traveling to other systems."/>
        <var name="swapondir" cat="interface" vt="bool" defval="false" remark="Swap in case of direction change in manual or half automatic mode."/>
        
        <var name="dirpause" cat="interface" vt="int" defval="0" range="0-999" unit="ms" remark="pause after sending last turnout command and before sending the direction to the loc decoder"/>
        <var name="priority" cat="details" vt="int" defval="10" range="1-100" remark="train priority used for multiplying the wait time if no destination is found"/>
        <var name="forcepriority" cat="details" vt="bool" defval="false" remark="Forcer train priority independent of train type."/>

        <var name="desc" cat="general" vt="string" defval="" range="*" remark="Description of loc."/>
        <var name="remark" cat="general" vt="string" defval="" range="*" remark="optional remark"/>
        <var name="manuid" cat="general" vt="string" defval="" range="*"/>
        <var name="catnr" cat="general" vt="string" defval="" range="*" remark="Catalog number."/>
        <var name="sernr" cat="general" vt="string" defval="" range="*" remark="Serialnumber."/>
        <var name="coupler" cat="general" vt="string" defval="" range="*" remark="Coupler type"/>
        <var name="value" cat="general" vt="string" defval="" range="*" remark="Financial value of loco."/>
        <var name="dectype" cat="interface" vt="string" defval="" range="*" remark="Decoder type. (CV8)"/>
        <var name="prot" cat="interface" vt="string" defval="P" range="P,M,N,A,C"
             remark="P = protocol by server, M = Marklin, N = NMRA-DCC, L = NMRA-DCC long addresses, A = Analog, C= Car Decoder"/>
        <const name="prot_P" vt="string" val="P" remark="Protocol by server"/>
        <const name="prot_M" vt="string" val="M" remark="Marklin"/>
        <const name="prot_N" vt="string" val="N" remark="DCC short addresses"/>
        <const name="prot_L" vt="string" val="L" remark="DCC long addresses"/>
        <const name="prot_A" vt="string" val="A" remark="analog"/>
        <const name="prot_C" vt="string" val="C" remark="Car Decoder"/>
        <const name="prot_S" vt="string" val="S" remark="SX1"/>
        <const name="prot_X" vt="string" val="X" remark="SX2"/>
        <const name="prot_F" vt="string" val="F" remark="MFX"/>
        <const name="prot_W" vt="string" val="W" remark="WIO-Drive"/>
        <var name="protver" cat="interface" vt="int" defval="1" range="*" remark="Protocol version"/>
        <var name="spcnt" cat="interface" vt="int" defval="28" range="*" remark="Speed steps count"/>
        <var name="secspcnt" cat="interface" vt="int" defval="28" range="*" remark="Secondary speed steps count"/>
        <var name="minstep" cat="interface" vt="int" defval="0" range="*" remark="Minimal speed step (CV2)"/>
        <var name="maxstep" cat="interface" vt="int" defval="0" range="*" remark="Maximal speed step (CV5)"/>
        <var name="pwmkickstart" cat="interface" vt="int" defval="0" range="*" remark="PWM dutycycle kick at start"/>
        <var name="pwm" cat="interface" vt="int" defval="0" range="*" remark="PWM adjustment"/>
        <var name="pwmcorrdiv" cat="interface" vt="int" defval="10" range="*" remark="PWM LiPo voltage correction divider"/>
        <var name="regulated" cat="interface" vt="bool" defval="true" remark="Decoder regulates the motor."/>
        <var name="fn" cat="internal" vt="bool" defval="false" remark="Function switch. (Lights)"/>
        <var name="ignorefn" cat="interface" vt="bool" defval="false" remark="Ignore lights."/>
        <var name="fx" cat="interface" vt="int" defval="0" remark="Function status bits for display only."/>
        <var name="restorefx" cat="general" vt="bool" defval="false" remark="Restore functions from previouse session."/>
        <var name="restorefxalways" cat="general" vt="bool" defval="false" remark="Restore functions from previouse session at each power on command."/>
        <var name="active" cat="general" vt="bool" defval="true" remark="Active for running in auto mode."/>
        <var name="restorespeed" cat="general" vt="bool" defval="false" remark="Restore speed from previouse session."/>
        <var name="manually" cat="general" vt="bool" defval="false" remark="Manually started; Ignore start all locos."/>
        <var name="shuntingdiv" cat="internal" vt="int" defval="1" range="1-4" remark="Shunting divider"/>
        <var name="resetplacing" cat="internal" vt="bool" defval="false" remark="Reset placing and direction at server startup."/>
        <var name="informall" vt="bool" defval="false" remark="send command to all interfaces"/>
        
        <var name="fncnt" cat="interface" vt="int" defval="4" range="0-*" remark="number of decoder funktions"/>
        <fundef cardinality="n"/>

        <const name="cargo_all" vt="string" val="all"/>
        <const name="cargo_lightgoods" vt="string" val="lightgoods"/>
        <const name="cargo_light" vt="string" val="light"/>
        <const name="cargo_regional" vt="string" val="regional"/>
        <const name="cargo_local" vt="string" val="local"/>
        <const name="cargo_goods" vt="string" val="goods"/>
        <const name="cargo_mixed" vt="string" val="mixed"/>
        <const name="cargo_none" vt="string" val="none"/>
        <const name="cargo_ice" vt="string" val="ice"/>
        <const name="cargo_post" vt="string" val="post"/>
        <const name="cargo_shunting" vt="string" val="shunting"/>
        <const name="cargo_cleaning" vt="string" val="cleaning" remark="should not wait in blocks"/>
        <const name="cargo_service" vt="string" val="service"/>
        <const name="cargo_special" vt="string" val="special"/>
        <var name="cargo" cat="details" vt="string" defval="" range="*"/>
        <var name="class" cat="details" vt="string" defval="" range="*"/>
        <var name="commuter" cat="details" vt="bool" defval="false" remark="Commuter train?"/>
        <var name="commuterblocks" cat="details" vt="string" defval="" remark="Commuter include blocks."/>
        <var name="commuterlevel" cat="details" vt="string" defval="" remark="Commuter include level."/>
        <const name="engine_diesel" vt="string" val="diesel"/>
        <const name="engine_electric" vt="string" val="electric"/>
        <const name="engine_steam" vt="string" val="steam"/>
        <const name="engine_automobile" vt="string" val="automobile"/>
        <const name="engine_battery" vt="string" val="battery"/>
        <const name="engine_hydrogen" vt="string" val="hydrogen"/>
        <const name="engine_handcar" vt="string" val="handcar"/>
        <var name="engine" cat="details" vt="string" defval="diesel" range="diesel,electric,steam,automobile,battery"/>
        <var name="engineFxType" cat="details" vt="string" defval="" remark="Engine type in case Fx is active."/>
        <var name="engineFxNr" cat="details" vt="int" defval="0" remark="Zero is not used."/>
        <var name="sw" cat="interface" vt="bool" deprecated="true" defval="false" remark="Change direction in P50 protocol.(Use dir=true/false)"/>
        <const name="go" vt="string" val="go" remark="Start loc in automatic mode."/>
        <const name="gomanual" vt="string" val="gomanual" remark="Start loc in half-automatic mode."/>
        <const name="setmanualmode" vt="string" val="setmanualmode" remark="Keep loco in half-automatic mode."/>
        <const name="resetmanualmode" vt="string" val="resetmanualmode" remark="Release loco from half-automatic mode."/>
        <const name="govirtual" vt="string" val="govirtual" remark="Start loc in virtual-automatic mode."/>
        <const name="stop" vt="string" val="stop" remark="Stop loc in next or current block."/>
        <const name="stopfollowup" vt="string" val="stopfollowup" remark="Stop loco at the end of schedule or tour with followup."/>
        <const name="stopgo" vt="string" val="stopgo" remark="Stop loc, reset and go."/>
        <const name="brake" vt="string" val="brake" remark="Stop immidiately"/>
        <const name="deactivate" vt="string" val="deactivate" remark="Prevent loco from being started in auto mode."/>
        <const name="activate" vt="string" val="activate" remark="Allow loco being started in auto mode."/>
        <const name="block" vt="string" val="block" remark="Set loc in the supplied block."/>
        <const name="gotoblock" vt="string" val="gotoblock" remark="Set wanted block."/>
        <const name="gobyblock" vt="string" val="gobyblock" remark="Set wanted block to pass through."/>
        <const name="gotoblockselect" vt="string" val="gotoblockselect" remark="Use Finder to show all avaiable paths."/>
        <const name="addblock2trip" vt="string" val="addblock2trip" remark="Add a block to the trip."/>
        <const name="startblocktrip" vt="string" val="startblocktrip" remark="Start of a block trip."/>
        <const name="useschedule" vt="string" val="useschedule" remark="Set schedule to use."/>
        <const name="usetour" vt="string" val="usetour" remark="Set tour to use."/>
        <const name="dispatch" vt="string" val="dispatch" remark="Dispatch loco for throttle."/>
        <const name="release" vt="string" val="release" remark="Release loco from throttle: The releasing throttle must provide the throttleid."/>
        <const name="reset" vt="string" val="reset" remark="Stop immidiately and go to idle mode."/>
        <const name="regularreset" vt="string" val="regularreset" remark="Stop immidiately, go to idle mode, save current block and remove the assigned schedule."/>
        <const name="softreset" vt="string" val="softreset" remark="Stop immidiately and go to idle mode, save current block."/>
        <const name="swap" vt="string" val="swap" remark="Swap placing."/>
        <const name="blockside" vt="string" val="blockside" remark="Swap block enter side."/>
        <const name="velocity" vt="string" val="velocity" remark="Set direct velocity."/>
        <const name="direction" vt="string" val="direction" remark="Set direct direction."/>
        <const name="dirfun" vt="string" val="dirfun" remark="Set direct direction and function."/>
        <const name="function" vt="string" val="function" remark="Set direct function."/>
        <const name="shortid" vt="string" val="shortid" remark="Send the short ID to the command station."/>
        <const name="info" vt="string" val="info" remark="Ask the command station for loco info."/>
        <const name="consist" vt="string" val="consist" remark="Consist member update."/>
        <const name="assigntrain" vt="string" val="assigntrain" remark="Assign train"/>
        <const name="releasetrain" vt="string" val="releasetrain" remark="Release train"/>
        <const name="linktrain" vt="string" val="linktrain" remark="Link another train"/>
        <const name="unlinktrain" vt="string" val="unlinktrain" remark="Unlink a linked train"/>
        <const name="bidikmh" vt="string" val="bidikmh" remark="Reported speed by bidi decoder."/>
        <const name="bidiqos" vt="string" val="bidiqos" remark="Reported QoS by bidi decoder."/>
        <const name="fieldcmd" vt="string" val="fieldcmd" remark="Command from field; RocMouse."/>
        <const name="discover" vt="string" val="discover"/>
        <const name="sync" vt="string" val="sync"/>
        <const name="shuntingon" vt="string" val="shuntingon"/>
        <const name="shuntingoff" vt="string" val="shuntingoff"/>
        <const name="manualon" vt="string" val="manualon"/>
        <const name="manualoff" vt="string" val="manualoff"/>
        <const name="pomwrite" vt="string" val="pomwrite"/>
        <const name="pomread" vt="string" val="pomread"/>
        <const name="classset" vt="string" val="classset"/>
        <const name="classadd" vt="string" val="classadd"/>
        <const name="classdel" vt="string" val="classdel"/>
        <const name="Vvar" vt="string" val="Vvar"/>
        <const name="ping" vt="string" val="ping"/>
        <const name="dynstate" vt="string" val="dynstate"/>
        <const name="lookupscheduleon" vt="string" val="lookupscheduleon"/>
        <const name="lookupscheduleoff" vt="string" val="lookupscheduleoff"/>
        <const name="pause" vt="string" val="pause"/>
        <const name="standalone" vt="string" val="standalone"/>
        <const name="state" vt="string" val="state"/>
        <const name="recordschedule" vt="string" val="recordschedule"/>
        <const name="bind" vt="string" val="bind"/>
        <const name="replace" vt="string" val="replace"/>
        <const name="steer" vt="string" val="steer"/>
        <const name="calibrate" vt="string" val="calibrate"/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*" remark="Loc command."/>
        <var name="cmdDelay" cat="internal" vt="int" defval="0" range="*" remark="Loc command delay."/>
        <var name="cmdFixed" cat="internal" vt="bool" defval="False"/>
        <var name="replaceID" cat="internal" vt="string" defval="" range="*"/>
        <var name="pause" cat="internal" vt="bool" defval="False"/>
        <var name="standalone" cat="internal" vt="bool" defval="False"/>
        <var name="temperature" cat="internal" vt="int" defval="0" range="*" remark="DynState number 2"/>
        <var name="energypercentage" cat="internal" vt="int" defval="0" range="*" remark="DynState number 3"/>
        <var name="minenergypercentage" cat="internal" vt="int" defval="0" range="*" remark="Minimal energy percentage. If its get below: go home"/>
        <var name="dynnum" cat="internal" vt="int" defval="0" range="*" remark="DynState index."/>
        <var name="dynval" cat="internal" vt="int" defval="0" range="*" remark="DynValue"/>
        <var name="dynval1" cat="internal" vt="int" defval="0" range="*" remark="DynValue 1"/>
        <var name="dynval2" cat="internal" vt="int" defval="0" range="*" remark="DynValue 2"/>
        <var name="tourid" cat="internal" vt="string" defval="NULL" range="*" remark="Current tour ID."/>
        <var name="scheduleid" cat="internal" vt="string" defval="NULL" range="*" remark="Current schedule ID."/>
        <var name="scheduleinithour" cat="internal" vt="int" defval="0"/>
        <var name="startupscid" cat="details" vt="string" defval="NULL" range="*" remark="Startup schedule ID."/>
        <var name="startuptourid" cat="details" vt="string" defval="NULL" range="*" remark="Startup tour ID."/>
        <var name="usescheduletime" cat="details" vt="bool" defval="False" remark="Use departure time in schedules."/>
        <var name="usemanualroutes" cat="details" vt="bool" defval="False" remark="Use manual set routes only."/>
        <var name="manual" cat="details" vt="bool" defval="false" remark="Half auto mode flag."/>
        <var name="shunting" cat="details" vt="bool" defval="false" remark="Shunting mode flag."/>
        <var name="scidx" cat="internal" vt="int" defval="-1" range="*" remark="Schedule index"/>
        <var name="blockid" cat="internal" vt="string" defval="NULL" range="*" remark="Current block ID."/>
        <var name="blockenterid" cat="internal" vt="string" defval="" range="*" remark="Block ID which has been entered. The blockid should be used if not set."/>
        <var name="blockenterside" cat="internal" vt="bool" defval="true" remark="Block enter side."/>
        <var name="destblockid" cat="internal" vt="string" defval="NULL" range="*" remark="Destination block ID. (info only)"/>
        <var name="blockwaittime" cat="internal" vt="int" defval="10" unit="s" range="1-*" remark="Own wait time."/>
        <var name="useownwaittime" cat="details" vt="bool" defval="false" remark="Overwrites block wait settings."/>
        <var name="waitallblocks" cat="details" vt="bool" defval="false" remark="Wait in all blocks to lean BBT."/>
        <var name="waitallblocksalt" cat="details" vt="bool" defval="false" remark="Wait alternately in all blocks to lean BBT."/>
        <var name="maxwaittime" cat="internal" vt="int" defval="0" unit="s" range="0-*" remark="Max. wait time in block by priority."/>
        <var name="waittime" cat="details" vt="int" defval="0" unit="s" range="0-*" remark="Wait time from the automode."/>
        <var name="lclib" cat="internal" vt="string" defval="./lcdriver" remark="LocDriver library"/>
        <var name="ttlib" cat="internal" vt="string" defval="./ttdriver" remark="TurntableDriver library"/>
        <var name="purchased" cat="general" vt="string" defval="" remark="Date of purchase"/>
        <var name="runtime" cat="general" vt="long" defval="0" remark="Auto runtime in seconds"/>
        <var name="mtime" cat="general" vt="long" defval="0" remark="last maintenance in seconds"/>
        <var name="mdate" cat="general" vt="long" defval="0" remark="last maintenance date"/>
        <var name="mint" cat="general" vt="int" defval="0" remark="maintenance interval in hours"/>
        <var name="rdate" cat="general" vt="long" defval="0" remark="Date of the last run."/>
        <var name="evttimer" cat="details" vt="int" defval="0" range="0-*" unit="ms" remark="event timer; loc should wait this time before processing the event"/>
        <var name="ent2incorr" cat="details" vt="int" defval="100" range="1-*" unit="%" remark="Correction percentage for enter2in block timer"/>
        <var name="swaptimer" cat="details" vt="int" defval="0" range="0-*" unit="ms" remark="Swap placing timer; Loco should wait this time before processing the swap."/>
        <var name="info4throttle" cat="details" vt="bool" defval="False" remark="Get loco info if it is stalled and not in automode."/>
        <var name="fifotop" cat="internal" vt="bool" defval="False" remark="Loco is on top of a location FiFo."/>
        <var name="reservetrip" cat="internal" vt="bool" defval="False" remark="Reserve the block trip."/>
        <var name="reserveside" cat="internal" vt="int" defval="0" remark="Reserve side of the block trip."/>
        <var name="reservesignal" cat="internal" vt="string" defval="" remark="Reserving signal."/>

        <const name="dynnum_hall" vt="int" val="100"/>

        <const name="mode_stop" vt="string" val="stop"/>
        <const name="mode_idle" vt="string" val="idle"/>
        <const name="mode_wait" vt="string" val="wait"/>
        <const name="mode_halfauto" vt="string" val="halfauto"/>
        <const name="mode_auto" vt="string" val="auto"/>
        <const name="mode_timeout" vt="string" val="timeout"/>
        <var name="mode" cat="internal" vt="string" defval="" range="*" remark="Loco auto mode."/>
        <var name="modeevent" cat="internal" vt="bool" defval="False" remark="Flag for filter out at broadcast."/>

        <const name="modereason_nodest" vt="string" val="nodest"/>
        <const name="modereason_initdest" vt="string" val="initdest"/>
        <const name="modereason_destfound" vt="string" val="destfound"/>
        <const name="modereason_unexpectedexit" vt="string" val="unexpectedexit"/>
        <const name="modereason_unexpectedin" vt="string" val="unexpectedin"/>
        <const name="modereason_unexpectedenter" vt="string" val="unexpectedenter"/>
        <const name="modereason_waitforevent" vt="string" val="waitforevent"/>
        <const name="modereason_checkroute" vt="string" val="checkroute"/>
        <var name="modereason" cat="internal" vt="string" defval="" range="*" remark="Loco mode reason."/>
        <var name="modeblock" cat="internal" vt="string" defval="" range="*" remark="Loco mode block, NULL in case of current block."/>
        
        <var name="decfile" cat="interface" vt="string" defval="nmra-rp922.xml" range="*" remark="Decoder definition file."/>
        <var name="decsubtype" cat="interface" vt="int" defval="0" range="*" remark="Decoder subtype."/>
        <var name="cvnrs" cat="interface" vt="string" defval="1,2,3,4,5,6,17,18,29" range="*" remark="predefined CV's for read,write and copy all"/>
        <cvbyte cardinality="n"/>

        <var name="consist_lightsoff" cat="multiunits" vt="bool" defval="False" remark="Keep lights turned off for all slave locos."/>
        <var name="consist_synclights" cat="multiunits" vt="bool" defval="False" remark="Synchronise lights for all slave locos."/>
        <var name="consist_syncfun" cat="multiunits" vt="bool" defval="False" remark="Synchronise functions for all slave locos."/>
        <var name="consist_syncfunmap" cat="multiunits" vt="int" defval="0" remark="Function map."/>
        <var name="consist" cat="multiunits" vt="string" defval="" range="*" remark="Slave locomotives and or trains"/>
        <var name="consistcmd" cat="internal" vt="bool" defval="false" remark="Consist context command; Flag for preventing loops."/>
        <var name="consistplacing" cat="internal" vt="bool" defval="true" remark="Consist placing at link time."/>

        <var name="train" cat="general" vt="string" defval="" range="*" remark="Operator consist ID"/>
        <var name="trainlen" cat="internal" vt="int" defval="0" range="0-*" remark="Total train length"/>
        <var name="trainweight" cat="internal" vt="int" defval="0" range="0-*" unit="ton" remark="Total train weight"/>
        <var name="maxload" cat="internal" vt="int" defval="0" range="0-*" unit="ton" remark="Maximal loco load"/>
        <var name="maxincline" cat="internal" vt="int" defval="0" range="0-*"/>
        <var name="adjustaccel" cat="interface" vt="bool" defval="False" remark="Adjust CV3 acceleration."/>
        <var name="accelmin" cat="interface" vt="int" defval="0" range="0-255" remark="Minimal acceleration CV3 value."/>
        <var name="accelmax" cat="interface" vt="int" defval="0" range="0-255" remark="Maximal acceleration CV3 value."/>
        <var name="accelcv" cat="interface" vt="int" defval="3"/>
        <var name="accelcvindex" cat="interface" vt="int" defval="0"/>
        <var name="brakecv" cat="interface" vt="int" defval="4"/>
        <var name="brakecvindex" cat="interface" vt="int" defval="0"/>
        <var name="vmaxcv" cat="interface" vt="int" defval="5"/>
        <var name="vmaxcvindex" cat="interface" vt="int" defval="0"/>
        <var name="vmidcv" cat="interface" vt="int" defval="6"/>
        <var name="vmidcvindex" cat="interface" vt="int" defval="0"/>

        <var name="pomcv" cat="interface" vt="int" defval="0" range="1-1024" remark="POM write cv"/>
        <var name="pomcvindex" cat="interface" vt="int" defval="0" range="0-63" remark="POM write index"/>
        <var name="pomval" cat="interface" vt="int" defval="0" range="0-255" remark="POM write value"/>

        <actionctrl cardinality="n"/>

        <var name="usebbt" cat="details" vt="bool" defval="False" remark="Use block brake time."/>
        <var name="bbtevent" cat="internal" vt="bool" defval="False" remark="Flag for filter out at broadcast."/>
        <var name="bbtsteps" cat="bbt" vt="int" defval="10" range="4-16"/>
        <var name="bbtstartinterval" cat="bbt" vt="int" defval="10" range="10-50"/>
        <var name="bbtmaxdiff" cat="bbt" vt="int" defval="250" range="10-500" unit="10ms"/>
        <var name="bbtcorrection" cat="bbt" vt="int" defval="25" range="10-100" unit="%"/>
        <var name="bbtkey" cat="bbt" vt="int" defval="0" remark="0=block, 1=block-fromblock, 2=block-route, 3=block-speed, 4=block-speed+-, 5=placing, 6=block-route+-"/>
        <bbt cardinality="n" wrappername="BBT">
          <var name="bk" vt="string" defval="" range="*" remark="Block ID."/>
          <var name="frombk" vt="string" defval="" range="*" remark="From block ID."/>
          <var name="route" vt="string" defval="" range="*" remark="Route ID."/>
          <var name="interval" vt="int" defval="1" range="1-*" unit="10ms" remark="Brake interval."/>
          <var name="speed" vt="int" defval="0" range="0-*"/>
          <var name="steps" vt="int" defval="0" range="0-*"/>
          <var name="fixed" vt="bool" defval="False" remark="Fixed block brake timer."/>
          <var name="generatein" vt="bool" defval="False" remark="Generate an IN event at the last BBT step."/>
          <var name="count" vt="int" defval="0" remark="Counter for dynamically adjust the correction factor."/>
          <var name="delay" vt="int" defval="0" unit="10ms" range="0-*"/>
          <var name="centertrain" vt="int" defval="0" remark="Center train in block. 0=no 1=center 2=front 3=rear"/>
          <var name="blockenterside" vt="int" defval="0" remark="Block enter side: 0 = Not set, 1 = True, 2 = False"/>
          <var name="placing" vt="bool" defval="true" remark="Logical forward placing."/>
        </bbt>
        <var name="sbt_interval" vt="int" defval="0" range="0-*" remark="Default SBT interval."/>
        <var name="sbt_decelerate" vt="int" defval="0" range="0-*" remark="Default SBT accelerate."/>
        <sbt cardinality="n" wrappername="SBT">
          <var name="bk" vt="string" defval="" range="*" remark="Block ID."/>
          <var name="train" vt="string" defval="" range="*" remark="Train ID."/>
          <var name="interval" vt="int" defval="1" range="1-*" unit="100ms" remark="Brake interval."/>
          <var name="decelerate" vt="int" defval="0" range="0-*"/>
        </sbt>
        <var name="bat_interval" vt="int" defval="0" range="0-*" remark="Default BAT interval."/>
        <var name="bat_accelerate" vt="int" defval="0" range="0-*" remark="Default BAT accelerate."/>
        <bat cardinality="n" wrappername="BAT">
          <var name="bk" vt="string" defval="" range="*" remark="Block ID."/>
          <var name="train" vt="string" defval="" range="*" remark="Train ID."/>
          <var name="interval" vt="int" defval="1" range="1-*" unit="100ms" remark="Accelerate interval."/>
          <var name="accelerate" vt="int" defval="0" range="0-*"/>
        </bat>
        <mtn cardinality="n"/>
      </lc>
    </lclist>

    <operatorlist cardinality="1" remark="Operator table" wrappername="OperatorList">
      <operator cardinality="n" wrappername="Operator" remark="Operator consist definition.">
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="lcid" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="carids" cat="general" vt="string" defval="" range="*" remark="Comma separated car IDs"/>
        <const name="addcar" vt="string" val="addcar"/>
        <const name="removecar" vt="string" val="removecar"/>
        <const name="emptycar" vt="string" val="emptycar"/>
        <const name="loadcar" vt="string" val="loadcar"/>
        <const name="shiftloco" vt="string" val="shiftloco"/>
        <var name="cmd" vt="string" defval="NULL" range="*" remark="Operator command."/>
        <var name="cargo" cat="details" vt="string" defval="none"/>
        <var name="roadname" cat="general" vt="string" defval="" range="*"/>
        <var name="class" cat="details" vt="string" defval="" range="*"/>
        <var name="V_max" cat="details" vt="int" defval="0" range="*" remark="Maximal train speed."/>
        <var name="length" cat="details" vt="int" defval="0" range="*" remark="The length to be used if no cars are added to the train."/>
        <var name="radius" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="maxincline" cat="internal" vt="int" defval="0" range="0-*"/>
        <var name="location" cat="details" vt="string" defval="" range="*"/>
        <var name="home" cat="general" vt="string" defval="" range="*" remark="Home location or block."/>
        <var name="homeside" cat="general" vt="int" defval="0" range="*" remark="0=none 1=plus 2=min"/>
        <var name="scale" cat="general" vt="string" defval="" range="*" remark="Z, N, TT, H0, 0, 00, 1, G, ..."/>
        <var name="workspace" cat="general" vt="string" defval="" range="*"/>
        <var name="group" vt="string" defval="" remark="Group selection central loco DB."/>
        <var name="fx" cat="details" vt="int" defval="0" remark="Function status bits for display only."/>
        <var name="shiftonly" cat="details" vt="bool" defval="false"/>
        <var name="fdesconly" cat="details" vt="bool" defval="false" remark="shiftonly and fdesconly are mutual exclusive"/>
        <var name="swaptrainimage" cat="details" vt="bool" defval="false"/>
        <var name="swaplocoimage" cat="details" vt="bool" defval="false"/>
        <var name="centertrain" cat="details" vt="int" defval="0" remark="Center train in block. 0=no 1=center 2=front 3=rear 4=loco"/>
        <var name="centertrainonly" cat="details" vt="bool" defval="false"/>
        <var name="commuter" cat="details" vt="bool" defval="false" remark="Commuter train?"/>
        <var name="runaround" cat="details" vt="bool" defval="false"/>
        <var name="shortin" cat="details" vt="bool" defval="false" remark="Use shortin event to stop in blocks."/>
        <var name="inatpre2in" cat="details" vt="bool" defval="false" remark="Use pre2in event to stop in blocks."/>
        <var name="secondnextblock" cat="details" vt="bool" defval="false" remark="Try to reserve a second next block."/>
        <var name="secondnextblock4wait" cat="details" vt="bool" defval="false" remark="Try to reserve a second next block also in case of wait."/>
        <var name="freeblockonenter" cat="details" vt="bool" defval="false" remark="Use the enter event to free previous block."/> 
        <var name="usedepartdelay" cat="details" vt="bool" defval="true" remark="Use the depart delay defined in the current block."/>
        <var name="departdelay" cat="details" vt="int" defval="0" range="0-*" unit="s" remark="Overrules the block departdelay."/>
        <var name="usescheduletime" cat="details" vt="bool" defval="False" remark="Use departure time in schedules."/>
        <const name="train_singlecarriage" vt="string" val="singlecarriage"/>
        <const name="train_block" vt="string" val="block"/>
        <var name="finderoptions" cat="details" vt="int" defval="0" remark="0=none 1=shortest 2=longest 3=direct 4=preferred"/>
        <var name="stoponfailgoto" vt="bool" defval="false"/>
        <var name="directgoto" vt="bool" defval="false"/>
        <var name="remark" cat="general" vt="string" defval="" range="*" remark="optional remark"/>
        <var name="fncnt" cat="interface" vt="int" defval="4" range="0-*" remark="number of decoder funktions"/>
        <fundef cardinality="n"/>
        <bkopt cardinality="n" wrappername="BlockOpt">
          <var name="bk" vt="string" defval="" range="*" remark="Block ID."/>
          <var name="centertrain" cat="details" vt="int" defval="0" remark="Center train in block. 0=no 1=center 2=front 3=rear 4=loco"/>
          <var name="centertrainonly" cat="details" vt="bool" defval="false"/>
        </bkopt>
      </operator>
    </operatorlist>

    <carlist cardinality="1" remark="Car table" wrappername="CarList">
      <car cardinality="n" wrappername="Car" remark="Car definition." categories="general,interface,details,internal">
        <var name="show" cat="general" vt="bool" defval="true" remark="Show in loco table."/>
        <var name="id" cat="general" vt="string" defval="" range="*" required="true"/>
        <var name="identifier" cat="general" vt="string" defval="" range="*"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="remark" cat="general" vt="string" defval="" range="*"/>
        <var name="image" cat="general" vt="string" defval="NULL" range="*" remark="image file to show in dialogs"/>
        <var name="image2" cat="general" vt="string" defval="NULL" range="*" remark="image file to show in dialogs"/>
        <var name="imagenr" cat="general" vt="int" defval="0" range="*" remark="throttle image number"/>
        <var name="imagesel" cat="internal" vt="int" defval="0" range="*"/>
        <var name="decfile" cat="interface" vt="string" defval="nmra-rp922.xml" range="*" remark="Decoder definition file."/>
        <var name="fx" cat="general" vt="int" defval="0" range="*"/>
        <var name="cvnrs" cat="interface" vt="string" defval="1,2,3,4,5,6,17,18,29" range="*" remark="predefined CV's for read,write and copy all"/>
        <cvbyte cardinality="n"/>
        <var name="number" cat="general" vt="string" defval="" range="*"/>
        <var name="manuid" cat="general" vt="string" defval="" range="*"/>
        <var name="docu" cat="general" vt="string" defval="" range="*"/>
        <var name="catnr" cat="general" vt="string" defval="" range="*" remark="Catalog number."/>
        <var name="value" cat="general" vt="string" defval="" range="*" remark="Financial value of car."/>
        <var name="purchased" cat="general" vt="string" defval="" remark="Date of purchase"/>
        <var name="runtime" cat="general" vt="long" defval="0" remark="Auto runtime in seconds"/>
        <var name="mtime" cat="general" vt="long" defval="0" remark="last maintenance in seconds"/>
        <var name="mdate" cat="general" vt="long" defval="0" remark="last maintenance date"/>
        <var name="mint" cat="general" vt="int" defval="0" remark="maintenance interval in hours"/>
        <var name="rdate" cat="general" vt="long" defval="0" remark="Date of the last run."/>
        <var name="dectype" cat="interface" vt="string" defval="" range="*" remark="Decoder type. (CV8)"/>
        <var name="era" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="roadname" cat="details" vt="string" defval="" range="*"/>
        <var name="scale" cat="general" vt="string" defval="" range="*" remark="Z, N, TT, H0, 0, 00, 1, G, ..."/>
        <var name="workspace" cat="general" vt="string" defval="" range="*"/>
        <var name="group" vt="string" defval="" remark="Group selection central loco DB."/>
        <var name="owner" cat="details" vt="string" defval="" range="*"/>
        <var name="color" cat="details" vt="string" defval="" range="*"/>
        <var name="home" cat="general" vt="string" defval="" range="*" remark="Home location or block."/>
        <var name="location" cat="details" vt="string" defval="" range="*"/>
        <var name="prevlocation1" cat="internal" vt="string" defval="" range="*"/>
        <var name="prevlocation2" cat="internal" vt="string" defval="" range="*"/>
        <var name="prevlocation3" cat="internal" vt="string" defval="" range="*"/>
        <const name="cartype_freight" vt="string" val="goods"/>
        <const name="cartype_passenger" vt="string" val="passenger"/>
        <var name="type" cat="details" vt="string" defval="freight" range="freight,passenger" remark="Car main type."/>
        <const name="freight_boxcar" vt="string" val="boxcar"/>
        <const name="freight_gondola" vt="string" val="gondola"/>
        <const name="freight_flatcar" vt="string" val="flatcar"/>
        <const name="freight_reefer" vt="string" val="reefer"/>
        <const name="freight_stockcar" vt="string" val="stockcar"/>
        <const name="freight_tankcar" vt="string" val="tankcar"/>
        <const name="freight_wellcar" vt="string" val="wellcar"/>
        <const name="freight_hopper" vt="string" val="hopper"/>
        <const name="freight_caboose" vt="string" val="caboose"/>
        <const name="freight_autorack" vt="string" val="autorack"/>
        <const name="freight_autocarrier" vt="string" val="autocarrier"/>
        <const name="freight_logdumpcar" vt="string" val="logdumpcar"/>
        <const name="freight_coilcar" vt="string" val="coilcar"/>
        <const name="passenger_coach" vt="string" val="coach"/>
        <const name="passenger_lounge" vt="string" val="lounge"/>
        <const name="passenger_dome" vt="string" val="dome"/>
        <const name="passenger_express" vt="string" val="express"/>
        <const name="passenger_dinner" vt="string" val="dinner"/>
        <const name="passenger_sleeper" vt="string" val="sleeper"/>
        <const name="passenger_baggage" vt="string" val="baggage"/>
        <const name="passenger_postoffice" vt="string" val="postoffice"/>
        <const name="passenger_cabcar" vt="string" val="cabcar"/>
        <var name="subtype" cat="details" vt="string" defval="" range="*" remark="Car sub type like Boxcar or gondola."/>
        <var name="UIC" cat="details" vt="string" defval="" range="*" remark="UIC classification of goods wagons."/>
        <var name="sernr" cat="details" vt="string" defval="" range="*"/>
        <var name="coupler" cat="details" vt="string" defval="" range="*"/>
        <var name="len" cat="details" vt="int" defval="0" range="0-*" unit="" remark="Car lenght."/>
        <var name="radius" cat="general" vt="int" defval="0" range="0-*"/>
        <var name="wheeldiameter" vt="float" defval="11.0" units="mm" remark="Diameter of Hall sensor wheel."/>
        <var name="maxloadweight" cat="details" vt="int" defval="0" range="0-*" unit="ton" remark="Max. cargo weight."/>
        <var name="weight_empty" cat="details" vt="int" defval="0" range="0-*" unit="ton" remark="Car weight empty."/>
        <var name="weight_loaded" cat="details" vt="int" defval="0" range="0-*" unit="ton" remark="Car weight loaded."/>
        <var name="nraxis" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="wheelbase" cat="details" vt="int" defval="0" range="0-*"/>
        <var name="waybill" cat="details" vt="string" defval="" range="*" remark="Option for freight cars; where to go and what to load."/>
        <const name="status_empty" vt="string" val="empty"/>
        <const name="status_loaded" vt="string" val="loaded"/>
        <const name="status_maintenance" vt="string" val="maintenance"/>
        <var name="status" cat="details" vt="string" defval="" range="*" remark="Car status."/>
        <var name="iid" cat="interface" vt="string" defval="NULL" range="*" remark="Interface ID."/>
        <var name="bus" cat="interface" vt="int" defval="0" range="0-*" required="false"/>
        <var name="addr" cat="interface" vt="int" defval="0" range="0-*" required="false" remark="Digital address."/>
        <var name="prot" cat="interface" vt="string" defval="P" range="P,M,N,A,C"/>
        <var name="protver" cat="interface" vt="int" defval="1" range="*" remark="Protocol version"/>
        <var name="usedir" cat="interface" vt="bool" defval="false" remark="Decoder can process direction command."/>
        <var name="invdir" cat="interface" vt="bool" defval="false" remark="Invert direction command."/>
        <var name="dir" cat="interface" vt="bool" defval="true" remark="Direction"/>
        <var name="uselights" cat="interface" vt="bool" defval="false" remark="Decoder can process direction command."/>
        <var name="useV" cat="interface" vt="bool" defval="false" remark="Decoder can process speed command."/>
        <var name="f0vcmd" cat="interface" vt="bool" defval="False" remark="Use a speed command for F0."/>
        <var name="fnlights" cat="interface" vt="int" defval="0" range="0-*" remark="Lights function number."/>
        <var name="fncnt" cat="interface" vt="int" defval="4" range="0-*" remark="number of decoder funktions"/>
        <var name="spcnt" cat="interface" vt="int" defval="28" range="*" remark="Speed steps count"/>
        <var name="camhost" cat="general" vt="string" defval="" range="*" remark="Video streaming host."/>
        <var name="camport" cat="general" vt="int" defval="8081" range="*" remark="Video streaming port."/>
        <var name="camtype" cat="general" vt="int" defval="0" range="*" remark="Video streaming type: 0=http, 1=udp"/>
        <var name="camskip" cat="general" vt="int" defval="0" range="*" remark="Skip number of frames to reduce CPU."/>
        <var name="camfile" cat="general" vt="string" defval="stream.mjpg" range="*" remark="Video streaming file name."/>
        <var name="camoption" cat="general" vt="int" defval="0" range="*" remark="Special CAM options"/>
        <const name="assignwaybill" vt="string" val="assignwaybill"/>
        <const name="resetwaybill" vt="string" val="resetwaybill"/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*" remark="Car command."/>
        <var name="placing" cat="interface" vt="bool" defval="True"/>
        <var name="commuter" cat="details" vt="bool" defval="false" remark="Commuter train?"/>
        <var name="V_max" cat="interface" vt="int" defval="0" range="*" remark="Maximal car speed."/>
        <var name="V_max_loaded" cat="interface" vt="int" defval="0" range="*" remark="Maximal car speed."/>
        <var name="V_max_hint" cat="interface" vt="int" defval="100" range="*" remark="Maximal speed."/>
        <var name="V_cru_hint" cat="interface" vt="int" defval="80" range="*" remark="Cruise speed."/>
        <var name="V_mid_hint" cat="interface" vt="int" defval="50" range="*" remark="Middle speed."/>
        <var name="V_min_hint" cat="interface" vt="int" defval="10" range="*" remark="Minimal speed."/>
        <fundef cardinality="n"/>
        <actionctrl cardinality="n"/>
      </car>
    </carlist>

    <waybilllist cardinality="1" remark="Waybill table" wrappername="WaybillList">
      <waybill cardinality="n" wrappername="Waybill" remark="Waybill definition.">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="shipper" vt="string" defval="" range="*" required="true"/>
        <var name="origin" vt="string" defval="" range="*" required="true" remark="Shipper (local) block."/>
        <var name="consignee" vt="string" defval="" range="*" required="true"/>
        <var name="destination" vt="string" defval="" range="*" required="true" remark="Consignee (local) block."/>
        <var name="routing" vt="string" defval="" range="*" required="true"/>
        <var name="commodity" vt="string" defval="" range="*"/>
        <var name="cartype" vt="string" defval="" range="*"/>
        <const name="status_unassigned" vt="string" val="unassigned"/>
        <const name="status_waiting" vt="string" val="waiting"/>
        <const name="status_shipping" vt="string" val="shipping"/>
        <const name="status_delivered" vt="string" val="delivered"/>
        <var name="status" vt="string" defval="unassigned" range="*" remark="Waybill status."/>
        <var name="cmd" cat="internal" vt="string" defval="NULL" range="*" remark="Waybill command."/>
        <var name="weight" cat="details" vt="int" defval="0" range="0-*" unit="ton" remark="Cargo weight."/>
      </waybill>
    </waybilllist>

    <txlist cardinality="1" remark="text symbols table" wrappername="TextList">
      <tx cardinality="n" wrappername="Text" remark="">
        <var name="id" vt="string" defval="" range="*" required="true"/>
        <var name="oid" vt="string" defval="" range="*" required="false" remark="object ID"/>
        <var name="text" vt="string" defval="" range="*" required="true" remark="Text or Image (if ending on .png) to be displayed."/>
        <var name="rawtext" vt="string" defval="" range="*" required="false"/>
        <var name="textKey" vt="string" defval="" range="*" required="false"/>
        <var name="prev_id" vt="string" defval="" range="*" remark="in case of an id change this should help to find the original in the table"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="block" vt="string" defval="" range="*" remark="Block ID from update event."/>
        <var name="location" vt="string" defval="" range="*" remark="Location from update event."/>
        <var name="refresh" vt="int" defval="0" range="0-*" units="ms"/>
        <var name="webcam" vt="bool" defval="False"/>
        <var name="trainimg" vt="bool" defval="False"/>
        <var name="mirror" vt="bool" defval="False"/>
        <var name="slider" vt="bool" defval="False"/>
        <var name="sliderdir" vt="bool" defval="True"/>
        <var name="slidermin" vt="int" defval="0"/>
        <var name="slidermax" vt="int" defval="255"/>
        <var name="sliderval" vt="int" defval="0"/>
        <var name="porttype" vt="int" defval="0"/>
        <var name="tagcolor" vt="bool" defval="False"/>
        <var name="red" vt="int" defval="0" range="0-255"/>
        <var name="green" vt="int" defval="0" range="0-255"/>
        <var name="blue" vt="int" defval="0" range="0-255"/>
        <var name="onred" vt="int" defval="200" range="0-255"/>
        <var name="ongreen" vt="int" defval="50" range="0-255"/>
        <var name="onblue" vt="int" defval="50" range="0-255"/>
        <var name="borderred" vt="int" defval="0" range="0-255"/>
        <var name="bordergreen" vt="int" defval="0" range="0-255"/>
        <var name="borderblue" vt="int" defval="0" range="0-255"/>
        <var name="bold" vt="bool" defval="False"/>
        <var name="blink" vt="bool" defval="False"/>
        <var name="center" vt="bool" defval="False"/>
        <var name="fixed" vt="bool" defval="False"/>
        <var name="rotate" vt="bool" defval="True"/>
        <var name="html" vt="bool" defval="False"/>
        <var name="underlined" vt="bool" defval="False"/>
        <var name="border" vt="bool" defval="False"/>
        <var name="italic" vt="bool" defval="False"/>
        <var name="manualinput" vt="bool" defval="False"/>
        <var name="manualinputnum" vt="bool" defval="False"/>
        <var name="inputlistsort" vt="bool" defval="True"/>
        <var name="inputlist" vt="string" defval="" range="*"/>
        <var name="inputcsv" vt="string" defval="" range="*"/>
        <var name="toggle" vt="bool" defval="False"/>
        <var name="reset" vt="bool" defval="False"/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-9"/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east"/>
        <var name="cx" vt="int" defval="3" range="1-*"/>
        <var name="cy" vt="int" defval="1" range="1-*"/>
        <var name="pointsize" vt="int" defval="0" range="0-*" remark=""/>
        <const name="showon" vt="string" val="showon"/>
        <const name="showoff" vt="string" val="showoff"/>
        <const name="regval" vt="string" val="regval"/>
        <const name="regdir" vt="string" val="regdir"/>
        <const name="webcam" vt="string" val="webcam"/>
        <const name="click" vt="string" val="click"/>
        <const name="on" vt="string" val="on"/>
        <const name="off" vt="string" val="off"/>
        <const name="textinput" vt="string" val="textinput"/>
        <const name="blink" vt="string" val="blink"/>
        <const name="reset" vt="string" val="reset"/>
        <var name="cmd" vt="string" defval="NULL" range="*" remark="update"/>
        <var name="state" vt="bool" defval="false"/>
        <var name="format" vt="string" defval="NULL" range="*" remark="Format string."/>
        <var name="reflcenterside" vt="bool" defval="true"/>
        <var name="refcallerid" vt="string" defval="" range="*" remark="Reference ID."/>
        <var name="refcalleraddr" vt="string" defval="" range="*" remark="Reference address."/>
        <var name="refcallertype" vt="string" defval="" range="*" remark="Reference type."/>
        <var name="refcallerdesc" vt="string" defval="" range="*" remark="Reference Description."/>
        <var name="refcalleruserdata" vt="string" defval="" range="*" remark="Reference data."/>
        <var name="reflcid" vt="string" defval="" range="*" remark="Reference ID."/>
        <var name="reflcshortid" vt="string" defval="" range="*" remark="Reference Short ID."/>
        <var name="refeventlcid" vt="string" defval="" range="*" remark="Reference ID."/>
        <var name="refbkid" vt="string" defval="" range="*" remark="Reference ID."/>
        <var name="counter" vt="int" defval="0" range="0-*"/>
        <var name="countedcars" vt="int" defval="0" range="0-*"/>
        <var name="carcount" vt="int" defval="0" range="0-*"/>
        <var name="wheelcount" vt="int" defval="0" range="0-*"/>
        <var name="regval" vt="int" defval="0" range="0-*"/>
        <var name="mvspeed" vt="float" defval="0.0" range="*"/>
        <var name="mvtrainlen" vt="int" defval="0" range="*"/>
        <var name="load" vt="int" defval="0" range="0-*"/>
        <var name="volt" vt="int" defval="0" range="0-*"/>
        <var name="boostertemp" vt="int" defval="0" range="0-*"/>
        <var name="temp" vt="int" defval="0" range="0-*"/>
        <var name="callertext" vt="string" defval="" range="*"/>
        <var name="callerstate" vt="string" defval="" range="*"/>
        <var name="iid" vt="string" defval="" range="*" required="false"/>
        <var name="bus" vt="int" defval="0" range="0-*"/>
        <var name="addr" vt="int" defval="0" range="0-*"/>
        <var name="display" vt="int" defval="0" range="0-*"/>
        <var name="speak" vt="bool" defval="False"/>
        <actionctrl cardinality="n"/>
      </tx>
    </txlist>
    
    <aclist cardinality="1" remark="timed action table" wrappername="ActionList">
      <ac cardinality="n" wrappername="Action" remark="">
        <const name="output_on" vt="string" val="on"/>
        <const name="output_off" vt="string" val="off"/>
        <const name="output_active" vt="string" val="active"/>
        <const name="switch_straight" vt="string" val="straight"/>
        <const name="switch_turnout" vt="string" val="turnout"/>
        <const name="switch_left" vt="string" val="left"/>
        <const name="switch_right" vt="string" val="right"/>
        <const name="switch_flip" vt="string" val="flip"/>
        <const name="system_stoplocs" vt="string" val="stoplocs"/>
        <const name="system_stop" vt="string" val="stop"/>
        <const name="system_go" vt="string" val="go"/>
        <const name="system_shutdown" vt="string" val="shutdown"/>
        <const name="signal_red" vt="string" val="red"/>
        <const name="signal_yellow" vt="string" val="yellow"/>
        <const name="signal_green" vt="string" val="green"/>
        <const name="signal_white" vt="string" val="white"/>
        <const name="block_unlock" vt="string" val="unlock"/>
        <const name="block_reserve" vt="string" val="reserve"/>
        <const name="block_setloc" vt="string" val="setloco"/>
        <const name="block_schedule" vt="string" val="schedule"/>
        <const name="block_schedule_manual" vt="string" val="schedule_manual"/>
        <const name="block_event" vt="string" val="event"/>
        <const name="block_acceptident" vt="string" val="acceptident"/>
        <const name="block_class" vt="string" val="class"/>
        <const name="loco_go" vt="string" val="go"/>
        <const name="loco_x_go" vt="string" val="x-go"/>
        <const name="loco_stop" vt="string" val="stop"/>
        <const name="loco_velocity" vt="string" val="velocity"/>
        <const name="loco_velocity2" vt="string" val="velocity2"/>
        <const name="loco_dispatch" vt="string" val="dispatch"/>
        <const name="loco_swap" vt="string" val="swap"/>
        <const name="loco_carcount" vt="string" val="carcount"/>
        <const name="loco_percent" vt="string" val="percent"/>
        <const name="loco_class" vt="string" val="class"/>
        <const name="fun_on" vt="string" val="on"/>
        <const name="fun_off" vt="string" val="off"/>
        <const name="tt_goto" vt="string" val="goto"/>
        <const name="tt_turn180" vt="string" val="180"/>
        <const name="route_set" vt="string" val="set"/>
        <const name="route_lock" vt="string" val="lock"/>
        <const name="route_lockset" vt="string" val="lockset"/>
        <const name="route_unlock" vt="string" val="unlock"/>
        <const name="text_update" vt="string" val="update"/>
        <const name="text_value" vt="string" val="value"/>
        <const name="sound_play" vt="string" val="play"/>
        <const name="loco_binstate_on" vt="string" val="binstate_on"/>
        <const name="loco_binstate_off" vt="string" val="binstate_off"/>
        <const name="weather_set" vt="string" val="setweather"/>
        <const name="weather_theme" vt="string" val="weathertheme"/>
        <var name="id" vt="string" defval="NULL" range="*" remark="action id"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="group" vt="string" defval="" range="*"/>
        <var name="remark" vt="string" defval="" range="*" remark="optional remark"/>
        <const name="type_sound" vt="string" val="sound"/>
        <var name="type" vt="string" defval="co" range="co,sw,st,sys,ext,sg,bk,lc,fn,tt,seltab,tx,sound" required="true" remark="type [ext] is an external program or script to be executed"/>
        <var name="activate" vt="bool" defval="true" remark="action activation at state ON or OFF: default is ON(true)"/>
        <var name="doublequote" vt="bool" defval="true" remark="Double quote under Windows."/>
        <var name="hour" vt="int" defval="0" range="0-23" remark="action hour"/>
        <var name="min" vt="int" defval="0" range="0-59" remark="action minute"/>
        <var name="sec" vt="int" defval="0" range="0-59" remark="action second"/>
        <var name="activated" vt="bool" defval="false" remark="Pre defined activation."/>
        <var name="random" vt="bool" defval="false" remark="Use time for random activation."/>
        <var name="timed" vt="bool" defval="false" remark="Use time for activation."/>
        <var name="every" vt="bool" defval="false" remark="Activate every hour:min."/>
        <var name="async" vt="bool" defval="true" remark="Asynchrone external execution"/>
        <var name="timer" vt="int" defval="0" remark="Timer in ms before activation this action."/>
        <const name="timertype_default" vt="int" val="0"/>
        <const name="timertype_hours" vt="int" val="1"/>
        <const name="timertype_quarters" vt="int" val="2"/>
        <var name="timertype" vt="int" defval="0" remark="0=timed, 1=hours, 2=quarters"/>
        <var name="oid" vt="string" defval="NULL" range="*" remark="output id"/>
        <var name="suboid" vt="string" defval="NULL" range="*" remark="action id"/>
        <const name="test" vt="string" val="test" remark="Test this action unconditional."/>
        <var name="cmd" vt="string" defval="NULL" range="*" remark="on, off or an external program or script to be executed"/>
        <var name="param" vt="string" defval="" range="*" remark="command parameter like schedule id for lc"/>
        <var name="xmlscriptparam" vt="string" defval="" range="*"/>
        <var name="refid" vt="string" defval="" range="*" remark="Reference ID for getting more information for this action."/>
        <var name="actiontime" vt="int" defval="0" unit="s" remark="function activation time"/>
        <var name="iid" vt="string" defval="" range="*" required="false"/>
        <var name="bus" vt="int" defval="0" range="0-*"/>
        <var name="addr" vt="int" defval="0" range="0-*"/>
        <var name="port" vt="int" defval="0" range="0-*"/>
        <var name="sndfile" vt="string" defval="" range="*" required="true"/>
        <var name="sndvolume" vt="int" defval="10" range="0-*"/>
      </ac>
    </aclist>

    <seltablist cardinality="1" remark="selection table list" wrappername="SelTabList">
      <seltab cardinality="n" wrappername="SelTab" remark="Selection Table">
        <var name="id" vt="string" defval="NULL" range="*" remark="object id"/>
        <var name="nr" vt="int" defval="0" range="0-*"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="x" vt="int" defval="0" range="0-*"/>
        <var name="y" vt="int" defval="0" range="0-*"/>
        <var name="z" vt="int" defval="0" range="0-9"/>
        <var name="ori" vt="string" defval="NULL" range="north,south,west,east"/>
        <var name="iid" vt="string" defval="NULL" range="*" remark="interfaced id"/>
        <var name="locid" vt="string" defval="NULL" range="*" remark="loc id"/>
        <var name="bus" vt="int" defval="0" range="0-*" required="false" remark="Some systems support more than one bus: SLX"/>
        <var name="randomrate" vt="int" defval="10" range="0-*" remark="Rate of randomness. 0=Not used"/>
        <var name="decid" vt="string" defval="" range="*" remark="Decoder ID"/>
        
        <var name="porttype" vt="int" defval="0" range="0-*" required="false" remark=""/>
        
        <var name="singlegate" vt="bool" defval="false"/>
        <var name="accessory" cat="general" vt="bool" defval="true"/>
        <var name="addr0" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port0" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr1" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port1" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr2" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port2" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr3" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port3" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr4" vt="int" defval="0" range="0-*" required="true" remark="decoder address to signal new position"/>
        <var name="port4" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit to signal new position."/>
        <var name="addr5" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port5" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr6" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port6" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>
        <var name="addr7" vt="int" defval="0" range="0-*" required="true" remark="decoder address"/>
        <var name="port7" vt="int" defval="0" range="0-4" required="true" remark="port of decoder unit."/>

        <var name="nrtracks" vt="int" defval="12" range="4-128" required="true"/>
        <var name="decsteps" vt="int" defval="0" range="*" required="false" remark="Max. decoder steps"/>
        <var name="delay" vt="int" defval="0" range="*" required="false" remark="Stepper delay"/>

        <var name="sharedfb" vt="bool" defval="false" remark="Use one set of sensors for all blocks."/>
        <var name="manager" vt="bool" defval="false" remark="Manager mode: Act like a block and manage all sub blocks.(Tracks)"/>
        <var name="fifo" vt="bool" defval="true" remark="Firts in, First out"/>
        <var name="minocc" vt="int" defval="0" range="0-*" required="false" remark="minimal tracks to be occupied before leaving the fiddle yard"/>
        <var name="movedelay" vt="int" defval="0" range="0-*" required="false" units="s" remark="delay in seconds after an IN event before processing a new move"/>
        <var name="state" vt="string" defval="open" range="open,closed"/>
        <var name="offpos" vt="int" defval="0" range="0-*" required="false" remark="Goto position at power off."/>
        <var name="enableoffpos" vt="bool" defval="false"/>
        <var name="allowbbt" cat="config" vt="bool" defval="true"/>
        <var name="bbtfix" cat="config" vt="int" defval="0"/>
        <var name="shortestway" cat="config" vt="bool" defval="false"/>

        <var name="homeoffset" vt="int" defval="0" range="0-*" required="false" remark="calibration correction in steps"/>

        <const name="type_WIO" vt="string" val="wio"/>
        <const name="type_MP" vt="string" val="multiport"/>
        <const name="type_LIN" vt="string" val="linear"/>
        <const name="type_Generic" vt="string" val="generic"/>
        <var name="type" vt="string" defval="" range="*"/>
        
        <var name="prot" vt="string" defval="D" range="D,M,N" remark="protocol to use for this seltab"/>
        <const name="prot_DEF" vt="string" val="D" remark="default protocol by command station"/>
        <const name="prot_M" vt="string" val="M" remark="Motorola"/>
        <const name="prot_N" vt="string" val="N" remark="NMRA-DCC"/>
        <const name="prot_MP" vt="string" val="MP" remark="Multi Port"/>
        <var name="inv" vt="bool" defval="false" remark="invert the switch commands 0 to 3"/>
        <var name="invnew" vt="bool" defval="false" remark="invert the switch command 4"/>
        <var name="psen" vt="string" defval="NULL" range="*" remark="ID of the position ready sensor"/>
        <var name="b0sen" vt="string" defval="NULL" range="*" remark="ID bit 0 of position"/>
        <var name="b1sen" vt="string" defval="NULL" range="*" remark="ID bit 1 of position"/>
        <var name="b2sen" vt="string" defval="NULL" range="*" remark="ID bit 2 of position"/>
        <var name="b3sen" vt="string" defval="NULL" range="*" remark="ID bit 3 of position"/>
        <var name="b4sen" vt="string" defval="NULL" range="*" remark="ID bit 4 of position"/>
        <var name="b5sen" vt="string" defval="NULL" range="*" remark="ID bit 5 of position"/>
        <var name="b6sen" vt="string" defval="NULL" range="*" remark="ID bit 6 of position"/>
        <var name="pos" vt="int" defval="-1" range="*" remark="position of table"/>
        <const name="next" vt="string" val="next" remark="Go to next track."/>
        <const name="prev" vt="string" val="prev" remark="Go to previous track."/>
        <const name="gotopos" vt="string" val="gotopos" remark="Go to track."/>
        <var name="cmd" vt="string" defval="NULL" range="*"/>
        <var name="pending" vt="bool" defval="false" range="*"/>
        <seltabpos cardinality="n" wrappername="SelTabPos" remark="Selection Table Position">
          <var name="nr" vt="int" defval="0" range="*" remark="track number"/>
          <var name="decnr" vt="int" defval="-1" range="*" required="false" remark="Decoder track number."/>
          <var name="desc" vt="string" defval="" range="*" remark="description"/>
          <var name="bkid" vt="string" defval="NULL" range="*" remark="block id"/>
          <var name="s1id" vt="string" defval="NULL" range="*" remark="sensor 1 id for optical feedback of the selected position"/>
          <var name="s2id" vt="string" defval="NULL" range="*" remark="sensor 2 id for optical feedback of the selected position"/>
          <var name="addr" vt="int" defval="0" range="*" remark="decoder type generic"/>
          <var name="port" vt="int" defval="0" range="*" remark="decoder type generic"/>
          <var name="gate" vt="int" defval="0" range="*" remark="decoder type generic"/>
        </seltabpos>
        <fbevent cardinality="n"/>
        <actionctrl cardinality="n"/>
      </seltab>
    </seltablist>

    <vrlist cardinality="1" remark="variable list" wrappername="VariableList">
      <vr cardinality="n" wrappername="Variable">
        <var name="id" vt="string" defval="NULL" range="*" remark="object id"/>
        <var name="desc" vt="string" defval="" range="*" remark="description"/>
        <var name="group" vt="string" defval="" range="*"/>
        <var name="format" vt="string" defval="NULL" range="*"/>
        <var name="text" vt="string" defval="" range="*"/>
        <var name="tokeniser" vt="string" defval=" " range="*"/>
        <var name="valstr" vt="string" defval="" range="*"/>
        <var name="value" vt="int" defval="0" range="*"/>
        <const name="type_default" vt="int" val="0"/>
        <const name="type_timer" vt="int" val="1"/>
        <const name="type_text" vt="int" val="2"/>
        <const name="type_int" vt="int" val="3"/>
        <var name="type" vt="int" defval="0" range="0-*"/>
        <var name="timer" vt="bool" defval="false"/>
        <var name="min" vt="int" defval="0" range="0-*"/>
        <var name="max" vt="int" defval="0" range="0-*"/>
        <const name="op_text" vt="string" val="text"/>
        <const name="op_value" vt="string" val="value"/>
        <const name="op_add" vt="string" val="add"/>
        <const name="op_subtract" vt="string" val="subtract"/>
        <const name="op_random" vt="string" val="random"/>
        <const name="op_min" vt="string" val="min"/>
        <const name="op_max" vt="string" val="max"/>
        <const name="op_start" vt="string" val="start"/>
        <const name="op_stop" vt="string" val="stop"/>
        <actionctrl cardinality="n"/>
      </vr>
    </vrlist>

    <competition cardinality="1" wrappername="Competition">
      <var name="len" vt="int" defval="10" range="*"/>
      <var name="mph" vt="bool" defval="false" remark="convert to MPH"/>
      <var name="scale" vt="int" defval="87" remark="Scale of the vehicels"/>
      <var name="nrlaps" vt="int" defval="1"/>
      <const name="event" vt="string" val="event"/>
      <const name="start" vt="string" val="start"/>
      <const name="stop" vt="string" val="stop"/>
      <const name="reset" vt="string" val="reset"/>
      <var name="cmd" vt="string" defval="" range="*"/>
      <fbevent cardinality="n"/>
    </competition>

  </plan>



</Wrappers>
