<?xml version="1.0" encoding="UTF-8"?>

<RegisterDescription xmlns="http://www.genicam.org/GenApi/Version_1_0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://www.genicam.org/GenApi/Version_1_0 GenApiSchema_Version_1_0.xsd"
   ModelName="GenieHM"
   VendorName="DALSA"
   MajorVersion="1"
   MinorVersion="70"
   SubMinorVersion="182"
   ProductGuid="688526DD-A8C2-4E22-8F08-E0371A7EFE4A"
   VersionGuid="572B5BC9-512B-467C-A51E-548E43EBF985"
   StandardNameSpace="GEV"
   SchemaMajorVersion="1"
   SchemaMinorVersion="0"
   SchemaSubMinorVersion="0"
   ToolTip="Genie HM">

  <Category Name="Root" NameSpace="Standard">
    <ToolTip>DALSA Genie HM XML Device Description File</ToolTip>
    <pFeature>DeviceControl</pFeature>
    <pFeature>ImageFormatControl</pFeature>
    <pFeature>AcquisitionControl</pFeature>
    <pFeature>CameraIO</pFeature>
    <pFeature>CounterAndTimerControl</pFeature>
    <pFeature>EventControl</pFeature>
    <pFeature>AnalogControl</pFeature>
    <pFeature>LUTControl</pFeature>
    <pFeature>ShadingCorrection</pFeature>
    <pFeature>TransportLayerControl</pFeature>
    <pFeature>UserSetControl</pFeature>
    <pFeature>EventsData</pFeature>
    <pFeature>Persistence</pFeature>
    <pFeature>GenICamAccess</pFeature>
  </Category>

  <!-- ================  DeviceControl  ================ -->
  <Group Comment="DeviceControl">
    <Category Name="DeviceControl" NameSpace="Standard">
      <ToolTip>Description of the camera and its sensor</ToolTip>
      <DisplayName>Device Information</DisplayName>
      <pFeature>DeviceVendorName</pFeature>
      <pFeature>DeviceModelName</pFeature>
      <pFeature>DeviceVersion</pFeature>
      <pFeature>DeviceFirmwareVersion</pFeature>
      <pFeature>DeviceID</pFeature>
      <pFeature>DeviceUserID</pFeature>
      <pFeature>DeviceScanType</pFeature>
      <pFeature>DeviceMaxThroughput</pFeature>
      <pFeature>DeviceRegistersStreamingStart</pFeature>
      <pFeature>DeviceRegistersStreamingEnd</pFeature>
      <pFeature>DeviceRegistersCheck</pFeature>
      <pFeature>DeviceRegistersValid</pFeature>
    </Category>

    <StringReg Name="DeviceVendorName" NameSpace="Standard">
      <ToolTip>Name of camera vendor</ToolTip>
      <Description>For the Genie series, this is always DALSA.</Description>
      <DisplayName>Device Vendor Name</DisplayName>
      <Address>0x0048</Address>
      <Length>32</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="DeviceModelName" NameSpace="Standard">
      <ToolTip>Name of the camera model</ToolTip>
      <Description>Displays the device model name.</Description>
      <DisplayName>Device Model Name</DisplayName>
      <Address>0x0068</Address>
      <Length>32</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="DeviceVersion" NameSpace="Standard">
      <ToolTip>Version of the device</ToolTip>
      <Description>Displays the device version which includes the firmware release and build.</Description>
      <DisplayName>Device Version</DisplayName>
      <Address>0x0088</Address>
      <Length>32</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="DeviceFirmwareVersion" NameSpace="Standard">
      <ToolTip>Version of camera firmware</ToolTip>
      <Description>Displays the currently loaded firmware version manufacturer's code.</Description>
      <DisplayName>Device Firmware Version</DisplayName>
      <Address>0x10000074</Address>
      <Length>20</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="DeviceID" NameSpace="Standard">
      <ToolTip>Serial number of the camera</ToolTip>
      <Description>Displays the factory set camera serial number.</Description>
      <DisplayName>Device ID</DisplayName>
      <Visibility>Expert</Visibility>
      <Address>0x00D8</Address>
      <Length>16</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="DeviceUserID" NameSpace="Standard">
      <ToolTip>User-defined name the camera</ToolTip>
      <Description>A user set ID of up to 15 characters. By default this field is set to the serial number of the camera.</Description>
      <DisplayName>Device User ID</DisplayName>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x00E8</Address>
      <Length>16</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <Enumeration Name="DeviceScanType" NameSpace="Standard">
      <ToolTip>Scan type of camera is areascan</ToolTip>
      <Description>Genie cameras are areascan.</Description>
      <DisplayName>Device Scan Type</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Areascan">
        <Value>0</Value>
      </EnumEntry>
      <pValue>pDeviceScanTypeReg</pValue>
    </Enumeration>
    <IntReg Name="pDeviceScanTypeReg">
      <ToolTip>Device Scan Type register</ToolTip>
      <Address>0x10000010</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="DeviceMaxThroughput" NameSpace="Standard">
      <ToolTip>Maximum number of bytes per second the device supports</ToolTip>
      <Description>States the maximum image streaming throughput of the device.</Description>
      <DisplayName>Device Maximum Throughput</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pMaxThroughputReg</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pMaxThroughputReg">
      <ToolTip>Max Throughput register</ToolTip>
      <Address>0x10000018</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="DeviceRegistersStreamingStart" NameSpace="Standard">
      <ToolTip>Start of registers streaming</ToolTip>
      <Description>Announces the start of registers streaming without immediate checking for consistency.</Description>
      <DisplayName>Device Registers Streaming Start</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pBeginRegisterStreamingtReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pBeginRegisterStreamingtReg">
      <ToolTip>Begin Streaming register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000058</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="DeviceRegistersStreamingEnd" NameSpace="Standard">
      <ToolTip>End of registers streaming</ToolTip>
      <Description>Announces end of registers streaming and performs validation for registers consistency before activating them.</Description>
      <DisplayName>Device Registers Streaming End</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pEndRegisterStreamingReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pEndRegisterStreamingReg">
      <ToolTip>End Streaming register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x1000005C</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="DeviceRegistersCheck" NameSpace="Standard">
      <ToolTip>Perform register set validation</ToolTip>
      <Description>Performs an explicit register set validation for consistency.</Description>
      <DisplayName>Device Register Check</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pDeviceRegisterCheckReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <Integer Name="pDeviceRegisterCheckReg">
      <ToolTip>Device check register</ToolTip>
      <ImposedAccessMode>WO</ImposedAccessMode>
      <Value>0</Value>
    </Integer>
    <Boolean Name="DeviceRegistersValid" NameSpace="Standard">
      <ToolTip>Status of current register set</ToolTip>
      <Description>States if the current register set is valid and consistent.</Description>
      <DisplayName>Device Registers Valid</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pIsFeatureSetConsistentReg</pValue>
    </Boolean>
    <IntReg Name="pIsFeatureSetConsistentReg">
      <ToolTip>Is Feature Set Consistent register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000060</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <pInvalidator>pDeviceRegisterCheckReg</pInvalidator>
      <pInvalidator>pEndRegisterStreamingReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  ImageFormatControl  ================ -->
  <Group Comment="ImageFormatControl">
    <Category Name="ImageFormatControl" NameSpace="Standard">
      <ToolTip>Features controlling the size of the transmitted image</ToolTip>
      <DisplayName>Image Format Controls</DisplayName>
      <pFeature>SensorWidth</pFeature>
      <pFeature>SensorHeight</pFeature>
      <pFeature>WidthMax</pFeature>
      <pFeature>HeightMax</pFeature>
      <pFeature>Width</pFeature>
      <pFeature>Height</pFeature>
      <pFeature>OffsetX</pFeature>
      <pFeature>OffsetY</pFeature>
      <pFeature>LinePitch</pFeature>
      <pFeature>BinningHorizontal</pFeature>
      <pFeature>BinningVertical</pFeature>
      <pFeature>ReverseX</pFeature>
      <pFeature>PixelColorFilter</pFeature>
      <pFeature>PixelCoding</pFeature>
      <pFeature>PixelSize</pFeature>
      <pFeature>PixelFormat</pFeature>
      <pFeature>PixelDynamicRangeMin</pFeature>
      <pFeature>PixelDynamicRangeMax</pFeature>
      <pFeature>TestImageSelector</pFeature>
    </Category>

    <IntSwissKnife Name="SensorSize"  NameSpace="Custom">
      <Visibility>Invisible</Visibility>
      <pVariable Name="WIDTH">SensorWidth</pVariable>
      <pVariable Name="HEIGHT">SensorHeight</pVariable>
      <Formula> HEIGHT * WIDTH</Formula>
    </IntSwissKnife>

    <Integer Name="SensorWidth" NameSpace="Standard">
      <ToolTip>Width of sensor (effective pixels)</ToolTip>
      <Description>The sensor width in effective image pixels (off image pixels are not stated)</Description>
      <DisplayName>Sensor Width</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pPhysicalWidthReg</pValue>
    </Integer>
    <IntReg Name="pPhysicalWidthReg">
      <ToolTip>Physical Width register</ToolTip>
      <Address>0x10000008</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="SensorHeight" NameSpace="Standard">
      <ToolTip>Height of sensor (effective pixels)</ToolTip>
      <Description>The sensor height in effective image pixels (off image pixels are not stated)</Description>
      <DisplayName>Sensor Height</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pPhysicalHeightReg</pValue>
    </Integer>
    <IntReg Name="pPhysicalHeightReg">
      <ToolTip>Physical Height register</ToolTip>
      <Address>0x1000000C</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="WIDTHMAX">
      <pVariable Name="WIDTH">pPhysicalWidthReg</pVariable>
      <pVariable Name="BINNING">pHorizontalBinningReg</pVariable>
      <Formula>WIDTH / BINNING</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="MAXWIDTH_REG">
      <pVariable Name="WIDTH">WIDTHMAX</pVariable>
      <pVariable Name="OFFSETX">OffsetX</pVariable>
      <Formula>WIDTH - OFFSETX</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="HEIGHTMAX">
      <pVariable Name="HEIGHT">pPhysicalHeightReg</pVariable>
      <pVariable Name="BINNING">pVerticalBinningReg</pVariable>
      <Formula>HEIGHT / BINNING</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="MAXHEIGHT_REG">
      <pVariable Name="HEIGHT">HEIGHTMAX</pVariable>
      <pVariable Name="OFFSETY">OffsetY</pVariable>
      <Formula>(HEIGHT)-OFFSETY</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="OFFSETXMAX">
      <pVariable Name="WIDTH_MAX">WIDTHMAX</pVariable>
      <pVariable Name="WIDTH">pAoiWidthReg</pVariable>
      <Formula>WIDTH_MAX - WIDTH</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="OFFSETYMAX">
      <pVariable Name="HEIGHT_MAX">HEIGHTMAX</pVariable>
      <pVariable Name="HEIGHT">pAoiHeightReg</pVariable>
      <Formula>HEIGHT_MAX -HEIGHT</Formula>
    </IntSwissKnife>
    <Integer Name="WidthMax" NameSpace="Standard">
      <ToolTip>Current maximum image width</ToolTip>
      <Description>The current maximum image width dependent on binning and ROI settings.</Description>
      <DisplayName>Maximum Width</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <pValue>WIDTHMAX</pValue>
    </Integer>
    <Integer Name="HeightMax" NameSpace="Standard">
      <ToolTip>Current maximum image height</ToolTip>
      <Description>The current maximum image height dependent on binning and ROI settings.</Description>
      <DisplayName>Maximum Height</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <pValue>HEIGHTMAX</pValue>
    </Integer>
    <IntSwissKnife Name="IncrementX">
      <pVariable Name="HBINNING">pHorizontalBinningReg</pVariable>
      <Formula>4 / HBINNING</Formula>
    </IntSwissKnife>
    <Integer Name="Width" NameSpace="Standard">
      <ToolTip>ROI Width</ToolTip>
      <Description>Width of the image region of interest (must be an even value)</Description>
      <DisplayName>Width</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pAoiWidthReg</pValue>
      <pMin>IncrementX</pMin>
      <pMax>MAXWIDTH_REG</pMax>
      <pInc>IncrementX</pInc>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pAoiWidthReg">
      <ToolTip>AOI Width register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x1000002C</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pAoiLeftReg</pInvalidator>
      <pInvalidator>pHorizontalBinningReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="Height" NameSpace="Standard">
      <ToolTip>ROI Height</ToolTip>
      <Description>Height of the image region of interest</Description>
      <DisplayName>Height</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pAoiHeightReg</pValue>
      <Min>1</Min>
      <pMax>MAXHEIGHT_REG</pMax>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pAoiHeightReg">
      <ToolTip>AOI Height register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x10000030</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pAoiTopReg</pInvalidator>
      <pInvalidator>pVerticalBinningReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="OffsetX" NameSpace="Standard">
      <ToolTip>Left coordinate of region of interest</ToolTip>
      <Description>Horizontal offset of the leftmost pixel relative to the active sensor area (must be an even value).</Description>
      <DisplayName>Offset X</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pAoiLeftReg</pValue>
      <Min>0</Min>
      <pMax>OFFSETXMAX</pMax>
      <pInc>IncrementX</pInc>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pAoiLeftReg">
      <ToolTip>AOI Left register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x10000024</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pHorizontalBinningReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="OffsetY" NameSpace="Standard">
      <ToolTip>Top coordinate of region of interest</ToolTip>
      <Description>Vertical offset in lines of the uppermost pixel relative to the active sensor area.</Description>
      <DisplayName>Offset Y</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pAoiTopReg</pValue>
      <Min>0</Min>
      <pMax>OFFSETYMAX</pMax>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pAoiTopReg">
      <ToolTip>AOI Top register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x10000028</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pVerticalBinningReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="pLinePitch_value">
      <Visibility>Invisible</Visibility>
      <pVariable Name="WIDTH">pAoiWidthReg</pVariable>
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <Formula>(PIXEL_FORMAT = 0x1100003 )?(WIDTH * 2) : WIDTH</Formula>
    </IntSwissKnife>
    <Integer Name="LinePitch" NameSpace="Standard">
      <ToolTip>Distance between consecutive lines in bytes</ToolTip>
      <Description>Feature to facilitate alignment of image data. It indicates the total number of bytes between 2 successive lines.</Description>
      <DisplayName>Line Pitch</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <pValue>pLinePitch_value</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <Integer Name="BinningHorizontal" NameSpace="Standard">
      <ToolTip>Number of horizontally binned pixels (1=no binning)</ToolTip>
      <Description>Number of horizontally binned pixels (1-no binning, 2-binning of 2 pixels)</Description>
      <DisplayName>Binning Horizontal</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pHorizontalBinningReg</pValue>
      <Min>1</Min>
      <Max>2</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pHorizontalBinningReg">
      <ToolTip>Horizontal binning register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x300010AC</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="BinningVertical" NameSpace="Standard">
      <ToolTip>Number of vertically binned lines (1=no binning)</ToolTip>
      <Description>Number of vertically binned pixels (1-no binning, 2-binning of 2 lines)</Description>
      <DisplayName>Binning Vertical</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pVerticalBinningReg</pValue>
      <Min>1</Min>
      <Max>2</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pVerticalBinningReg">
      <ToolTip>Vertical binning register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x300010B0</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Boolean Name="ReverseX" NameSpace="Standard">
      <ToolTip>Flips the image horizontally</ToolTip>
      <Description>Horizontal Image Flip function (disabled = 0, horizontal flip enabled = 1)</Description>
      <DisplayName>Horizontal Flip</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>ReverseX_Reg</pValue>
    </Boolean>
    <IntReg Name="ReverseX_Reg">
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x300000A0</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="PixelColorFilter" NameSpace="Standard">
      <ToolTip>Color filter convention of the image</ToolTip>
      <Description>Indicates the type of color filter applied to the image (None, BayerRG, BayerGB, BayerGR or BayerBG).</Description>
      <DisplayName>Pixel Color Filter</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <EnumEntry Name="None" NameSpace="Standard">
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
    </Enumeration>
    <Enumeration Name="PixelCoding" NameSpace="Standard">
      <ToolTip>Coding of the pixels in the image</ToolTip>
      <Description>Indicates the coding of the image pixels. Raw data is the native format of the sensor.</Description>
      <DisplayName>Pixel Coding</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <EnumEntry Name="Raw" NameSpace="Standard">
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
    </Enumeration>
    <Enumeration Name="PixelSize" NameSpace="Standard">
      <ToolTip>Number of bits per pixel</ToolTip>
      <Description>Number of bits per pixel (typically 8 or 10-bits per pixel)</Description>
      <DisplayName>Pixel Size</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <EnumEntry Name="Bpp8" NameSpace="Standard">
        <DisplayName>8-bit</DisplayName>
        <Value>0x1080001</Value>
      </EnumEntry>
      <EnumEntry Name="Bpp10" NameSpace="Standard">
        <DisplayName>10-bit</DisplayName>
        <Value>0x1100003</Value>
      </EnumEntry>
      <pValue>pPixelFormatReg</pValue>
    </Enumeration>
    <MaskedIntReg Name="IsMono10_Implemented">
      <Visibility>Invisible</Visibility>
      <Address>0x300010BC</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>31</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Enumeration Name="PixelFormat" NameSpace="Standard">
      <ToolTip>Format of the image pixels</ToolTip>
      <Description>Supported pixel formats are camera dependent. SFNC defines a number of formats, from the basic Mono8 to others for color cameras.</Description>
      <DisplayName>Pixel Format</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Mono8">
        <Value>0x1080001</Value>
      </EnumEntry>
      <EnumEntry Name="Mono10">
        <pIsImplemented>IsMono10_Implemented</pIsImplemented>
        <Value>0x1100003</Value>
      </EnumEntry>
      <pValue>pPixelFormatReg</pValue>
    </Enumeration>
    <IntReg Name="pPixelFormatReg">
      <ToolTip>Pixel Format register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000034</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="PixelDynamicRangeMin" NameSpace="Standard">
      <ToolTip>Minimum pixel value sent by camera</ToolTip>
      <Description>Minimum pixel value sent by camera.</Description>
      <DisplayName>Pixel Dynamic Range Min</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0</Value>
      <Representation>Linear</Representation>
    </Integer>
    <IntSwissKnife Name="PixelDynamicRangeMax_value">
      <Visibility>Invisible</Visibility>
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <Formula>(PIXEL_FORMAT = 0x1100003 )?0x3FF:0xFF</Formula>
    </IntSwissKnife>
    <Integer Name="PixelDynamicRangeMax" NameSpace="Standard">
      <ToolTip>Maximum pixel value sent by camera</ToolTip>
      <Description>Maximum pixel value sent by camera.</Description>
      <DisplayName>Pixel Dynamic Range Max</DisplayName>
      <Visibility>Expert</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <pValue>PixelDynamicRangeMax_value</pValue>
    </Integer>
    <Enumeration Name="TestImageSelector" NameSpace="Standard">
      <ToolTip>Test image to output</ToolTip>
      <Description>Select an internal generated pattern simulating an acquisition.</Description>
      <DisplayName>Test Image Selector</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Off" NameSpace="Standard">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="HorizontalWedge">
        <DisplayName>Horizontal Wedge</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="VerticalWedge">
        <DisplayName>Vertical Wedge</DisplayName>
        <Value>2</Value>
      </EnumEntry>
      <EnumEntry Name="DiagonalMovingWedge">
        <DisplayName>Diagonal Moving Wedge</DisplayName>
        <Value>3</Value>
      </EnumEntry>
      <EnumEntry Name="Purity">
        <DisplayName>Purity</DisplayName>
        <Value>4</Value>
      </EnumEntry>
      <pValue>pTestImageSelectorReg</pValue>
    </Enumeration>
    <IntReg Name="pTestImageSelectorReg">
      <ToolTip>Test image selector register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000048</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  AcquisitionControl  ================ -->
  <Group Comment="AcquisitionControl">
    <Category Name="AcquisitionControl" NameSpace="Standard">
      <ToolTip>Features relating to acutal image acquisition, including triggering mode</ToolTip>
      <DisplayName>Acquisition and Trigger Controls</DisplayName>
      <pFeature>AcquisitionMode</pFeature>
      <pFeature>AcquisitionStart</pFeature>
      <pFeature>AcquisitionStop</pFeature>
      <pFeature>AcquisitionAbort</pFeature>
      <pFeature>AcquisitionArm</pFeature>
      <pFeature>AcquisitionFrameCount</pFeature>
      <pFeature>AcquisitionFrameRateAbs</pFeature>
      <pFeature>AcquisitionFrameRateRaw</pFeature>
      <pFeature>TriggerSelector</pFeature>
      <pFeature>TriggerMode</pFeature>
      <pFeature>TriggerSoftware</pFeature>
      <pFeature>TriggerSource</pFeature>
      <pFeature>TriggerActivation</pFeature>
      <pFeature>TriggerDelayAbs</pFeature>
      <pFeature>TriggerDelayRaw</pFeature>
      <pFeature>ExposureMode</pFeature>
      <pFeature>ExposureAlignment</pFeature>
      <pFeature>ExposureDelay</pFeature>
      <pFeature>ExposureTimeAbs</pFeature>
      <pFeature>ExposureTimeRaw</pFeature>
    </Category>

    <Enumeration Name="AcquisitionMode" NameSpace="Standard">
      <ToolTip>Type of acquisition</ToolTip>
      <Description>Number of frames captured in the acquisition (i.e. SingleFrame, MultiFrame, Continuous).</Description>
      <DisplayName>Acquisition Mode</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="SingleFrame" NameSpace="Standard">
        <DisplayName>Single Frame</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="MultiFrame" NameSpace="Standard">
        <DisplayName>Multiple Frame</DisplayName>
        <Value>2</Value>
      </EnumEntry>
      <EnumEntry Name="Continuous" NameSpace="Standard">
        <Value>0</Value>
      </EnumEntry>
      <pValue>pAcquisitionModeReg</pValue>
    </Enumeration>
    <IntReg Name="pAcquisitionModeReg">
      <ToolTip>Acquisition mode register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000040</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="AcquisitionStart" NameSpace="Standard">
      <ToolTip>Start image capture</ToolTip>
      <Description>Start image capture using currently selected acquistion mode.</Description>
      <DisplayName>Acquisition Start</DisplayName>
      <pIsLocked>NOT_TLParamsLocked</pIsLocked>
      <pValue>pAcquisitionStartReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pAcquisitionStartReg">
      <ToolTip>Start image acquisition register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x100000A8</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="AcquisitionStop" NameSpace="Standard">
      <ToolTip>Stop image capture</ToolTip>
      <Description>Stop the acquisition at the end of the current exposure.</Description>
      <DisplayName>Acquisition Stop</DisplayName>
      <pIsLocked>NOT_TLParamsLocked</pIsLocked>
      <pValue>pAcquisitionStopReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pAcquisitionStopReg">
      <ToolTip>Stop image acquisition register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x100000AC</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="AcquisitionAbort" NameSpace="Standard">
      <ToolTip>Abort image capture</ToolTip>
      <Description>Abort an acquisition immediately without completing the current frame.</Description>
      <DisplayName>Acquisition Abort</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>NOT_TLParamsLocked</pIsLocked>
      <pValue>pAcquisitionAbortReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pAcquisitionAbortReg">
      <ToolTip>Abort image acquisition register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x100000B0</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="AcquisitionArm" NameSpace="Standard">
      <ToolTip>Prepares for AcquistionStart</ToolTip>
      <Description>Verify all parameters relevant for image capture and prepares for AcquistionStart.</Description>
      <DisplayName>Acquisition Arm</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pAcquisitionArmReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pAcquisitionArmReg">
      <ToolTip>Acquisition arm register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x300010A8</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="AcquisitionFrameCount_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="ACQ_MODE">pAcquisitionModeReg</pVariable>
      <Formula>(ACQ_MODE=2)?1:0</Formula>
    </IntSwissKnife>
    <Integer Name="AcquisitionFrameCount" NameSpace="Standard">
      <ToolTip>Acquire N frames</ToolTip>
      <Description>Number of frames to be acquired in MultiFrame acquisition mode.</Description>
      <DisplayName>Acquisition Frame Count</DisplayName>
      <pIsAvailable>AcquisitionFrameCount_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pNumFramesReg</pValue>
      <Min>0</Min>
      <Max>32767</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pNumFramesReg">
      <ToolTip>Number of frames register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000044</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="AcquisitionFrameRate_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="TIRGGER">pTriggerModeReg</pVariable>
      <Formula>(TIRGGER=0)?1:0</Formula>
    </IntSwissKnife>
    <IntReg Name="pFrameRateRegMax">
      <ToolTip>Maximum frame rate register</ToolTip>
      <Address>0x30001020</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pPixelFormatReg</pInvalidator>
      <pInvalidator>pVerticalBinningReg</pInvalidator>
      <pInvalidator>pAoiLeftReg</pInvalidator>
      <pInvalidator>pAoiHeightReg</pInvalidator>
      <pInvalidator>pHorizontalBinningReg</pInvalidator>
      <pInvalidator>pAoiTopReg</pInvalidator>
      <pInvalidator>pAoiWidthReg</pInvalidator>
      <pInvalidator>ShadingCorrectionEnable_Reg</pInvalidator>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntReg Name="pFrameRateRegMin">
      <ToolTip>Minimum Frame rate register</ToolTip>
      <Address>0x3000104c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <pInvalidator>ShadingCorrectionEnable_Reg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="AcquisitionFrameRateRaw" NameSpace="Standard">
      <ToolTip>Frame rate in mHz (0.001 Hz)</ToolTip>
      <Description>Controls the desired frame rate of the camera in mHz (0.001 Hz). Only available when the frame trigger is disabled.</Description>
      <DisplayName>Acquisition Frame Rate (Raw)</DisplayName>
      <pIsAvailable>AcquisitionFrameRate_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pFrameRateReg</pValue>
      <pMin>pFrameRateRegMin</pMin>
      <pMax>pFrameRateRegMax</pMax>
      <Representation>Linear</Representation>
    </Integer>
    <Converter Name="FrameRate_Converter">
      <FormulaTo>FROM * 1000</FormulaTo>
      <FormulaFrom>TO / 1000</FormulaFrom>
      <pValue>pFrameRateReg</pValue>
      <Slope>Increasing</Slope>
    </Converter>
    <SwissKnife Name="FrameRateMaxReg_Val">
      <pVariable Name="MAX">pFrameRateRegMax</pVariable>
      <Formula>MAX / 1000</Formula>
    </SwissKnife>
    <SwissKnife Name="FrameRateMinReg_Val">
      <pVariable Name="MAX">pFrameRateRegMin</pVariable>
      <Formula>MAX / 1000</Formula>
    </SwissKnife>
    <Float Name="AcquisitionFrameRateAbs" NameSpace="Standard">
      <ToolTip>Frame rate in Hz</ToolTip>
      <Description>Controls the desired frame rate of the camera in Hz. Only available when the frame trigger is disabled.</Description>
      <DisplayName>Acquisition Frame Rate</DisplayName>
      <pIsAvailable>AcquisitionFrameRate_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pAlias>AcquisitionFrameRateRaw</pAlias>
      <pValue>FrameRate_Converter</pValue>
      <pMin>FrameRateMinReg_Val</pMin>
      <pMax>FrameRateMaxReg_Val</pMax>
      <Unit>Hz</Unit>
      <Representation>Linear</Representation>
    </Float>
    <IntReg Name="pFrameRateReg">
      <ToolTip>Frame rate register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000008</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="TriggerSelector" NameSpace="Standard">
      <ToolTip>Trigger selection for the acquisition</ToolTip>
      <Description>Select the type of trigger to control. FrameStart currently supported.</Description>
      <DisplayName>Trigger Selector</DisplayName>
      <EnumEntry Name="FrameStart" NameSpace="Standard">
        <DisplayName>Start of Frame</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
      <pSelected>TriggerMode</pSelected>
      <pSelected>TriggerSoftware</pSelected>
      <pSelected>TriggerSource</pSelected>
      <pSelected>TriggerActivation</pSelected>
      <pSelected>TriggerDelayRaw</pSelected>
      <pSelected>TriggerDelayAbs</pSelected>
    </Enumeration>
    <Enumeration Name="TriggerMode" NameSpace="Standard">
      <ToolTip>Acquisition Trigger Mode On or Off</ToolTip>
      <Description>Acquisition Trigger Mode On or Off</Description>
      <DisplayName>Trigger Mode</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Off">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="On">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pTriggerModeReg</pValue>
    </Enumeration>
    <IntReg Name="pTriggerModeReg">
      <ToolTip>Trigger mode register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000038</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="SoftwareTrigger_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="MODE_SELECTOR">pTriggerModeReg</pVariable>
      <Formula>(MODE_SELECTOR = 1)?1:0</Formula>
    </IntSwissKnife>
    <Command Name="TriggerSoftware" NameSpace="Standard">
      <ToolTip>Software acquisition trigger command</ToolTip>
      <Description>Generates a software trigger to start the acquisition in any trigger mode.</Description>
      <DisplayName>Trigger Software</DisplayName>
      <pIsAvailable>SoftwareTrigger_IsAvailable</pIsAvailable>
      <pValue>pSoftwareTriggerReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pSoftwareTriggerReg">
      <ToolTip>Software trigger register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x3000000C</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="TriggerSource_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="SELECTOR">pTriggerModeReg</pVariable>
      <Formula>(SELECTOR=1)?1:0</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="TriggerSource_IsNotAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="SELECTOR">pTriggerModeReg</pVariable>
      <Formula>(SELECTOR=1)?0:1</Formula>
    </IntSwissKnife>
    <Enumeration Name="TriggerSource" NameSpace="Standard">
      <ToolTip>Select acqusition trigger source.</ToolTip>
      <Description>Select the external input or software signal for use as trigger source.</Description>
      <DisplayName>Trigger Source</DisplayName>
      <pIsAvailable>TriggerSource_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Line1">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Line2">
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="Software">
        <Value>2</Value>
      </EnumEntry>
      <pValue>pTriggerSourceReg</pValue>
    </Enumeration>
    <IntReg Name="pTriggerSourceReg">
      <ToolTip>Trigger source register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x3000003C</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="HardwareTrigger_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="MODE_SELECTOR">pTriggerModeReg</pVariable>
      <pVariable Name="TRIGGER_SELECTOR">pTriggerSourceReg</pVariable>
      <Formula>((TRIGGER_SELECTOR &lt;&gt; 2) &amp;&amp; (MODE_SELECTOR = 1))?1:0</Formula>
    </IntSwissKnife>
    <Enumeration Name="TriggerActivation" NameSpace="Standard">
      <ToolTip>Type of signal change activating the trigger</ToolTip>
      <Description>RisingEdge, FallingEdge, AnyEdge, LevelHigh, LevelLow, …}</Description>
      <DisplayName>Trigger Activation</DisplayName>
      <pIsAvailable>HardwareTrigger_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="FallingEdge">
        <DisplayName>Falling Edge</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="RisingEdge">
        <DisplayName>Rising Edge</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <pValue>pGPI1PolarityReg</pValue>
    </Enumeration>
    <IntSwissKnife Name="pGPI1PolarityReg_Addr">
      <pVariable Name="OFFSET">pTriggerSourceReg</pVariable>
      <Formula>OFFSET*4</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPI1PolarityReg">
      <ToolTip>GPI0 polarity register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000040</Address>
      <pAddress>pGPI1PolarityReg_Addr</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pGPIxPolarity</pInvalidator>
      <pInvalidator>PersistenceInput_first</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="TriggerDelayRaw_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="MODE_SELECTOR">pTriggerModeReg</pVariable>
      <pVariable Name="TRIGGER_SELECTOR">pTriggerSourceReg</pVariable>
      <Formula>((TRIGGER_SELECTOR &lt;&gt; 2) &amp;&amp; (MODE_SELECTOR = 1))?1:0</Formula>
    </IntSwissKnife>
    <Integer Name="TriggerDelayRaw" NameSpace="Standard">
      <ToolTip>Delay after trigger in µs</ToolTip>
      <Description>Absolute delay to apply in µs after reception of the trigger signal before starting exposure.</Description>
      <DisplayName>Trigger Delay (Raw)</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>TriggerDelayRaw_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pTriggerDelayReg</pValue>
      <Min>100</Min>
      <Max>4000000</Max>
      <Representation>Linear</Representation>
    </Integer>
    <Converter Name="TriggerDelayAbs" NameSpace="Standard">
      <ToolTip>Delay after trigger in µs</ToolTip>
      <Description>Absolute delay to apply in µs after reception of the trigger signal before starting exposure.</Description>
      <DisplayName>Trigger Delay</DisplayName>
      <Visibility>Expert</Visibility>
      <pAlias>TriggerDelayRaw</pAlias>
      <FormulaTo>FROM</FormulaTo>
      <FormulaFrom>TO</FormulaFrom>
      <pValue>TriggerDelayRaw</pValue>
      <Unit>µs</Unit>
      <Representation>Linear</Representation>
      <Slope>Increasing</Slope>
    </Converter>
    <IntReg Name="pTriggerDelayReg">
      <ToolTip>Trigger delay register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000034</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="ExposureMode" NameSpace="Standard">
      <ToolTip>Exposure Mode control</ToolTip>
      <Description>Mode of operation for the exposure control {Off, Timed, TriggerWidth, TriggerControlled, …}</Description>
      <DisplayName>Exposure Mode</DisplayName>
      <pIsAvailable>HardwareTrigger_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Timed">
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="TriggerWidth">
        <DisplayName>Trigger Width</DisplayName>
        <Value>2</Value>
      </EnumEntry>
      <pValue>pShutterModeReg</pValue>
    </Enumeration>
    <IntReg Name="pShutterModeReg">
      <ToolTip>Shutter mode register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000020</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="ExposureAlignment_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="HARDWARE_TRIGGER">HardwareTrigger_IsAvailable</pVariable>
      <pVariable Name="EXPOSUREMODE">pShutterModeReg</pVariable>
      <Formula>((HARDWARE_TRIGGER) &amp;&amp; (EXPOSUREMODE = 1))?1:0</Formula>
    </IntSwissKnife>
    <Enumeration Name="ExposureAlignment">
      <ToolTip>Exposure control {Synchronous = 0, Reset = 1}</ToolTip>
      <Description>Exposure control {Synchronous = 0, Reset = 1}</Description>
      <DisplayName>Exposure Alignment</DisplayName>
      <pIsAvailable>ExposureAlignment_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Synchronous">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Reset">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pExposureAlignmentReg</pValue>
    </Enumeration>
    <IntReg Name="pExposureAlignmentReg">
      <ToolTip>Exposure Alignment register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000030</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="ExposureDelay">
      <ToolTip>Delay from active trigger to start of exposure</ToolTip>
      <Description>The delay from active trigger edge to start of exposure.</Description>
      <DisplayName>Exposure Delay</DisplayName>
      <Visibility>Invisible</Visibility>
      <pValue>TriggerDelayRaw</pValue>
    </Integer>
    <IntSwissKnife Name="ExposureTimeRaw_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="TIRGGER">pTriggerModeReg</pVariable>
      <pVariable Name="SELECTOR">pShutterModeReg</pVariable>
      <Formula>(TIRGGER = 0)?1:((SELECTOR =2)?0:1)</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="ExposureTimeRaw_Max">
      <Visibility>Invisible</Visibility>
      <pVariable Name="TIRGGER">pTriggerModeReg</pVariable>
      <pVariable Name="MAX_EXPOSURE">pExposureTimeMaxReg</pVariable>
      <Formula>(TIRGGER=1)?4000000:MAX_EXPOSURE</Formula>
    </IntSwissKnife>
    <IntReg Name="pExposureTimeMaxReg">
      <ToolTip>Maximum Exposure Time</ToolTip>
      <Address>0x30001024</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pFrameRateReg</pInvalidator>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <pInvalidator>pTriggerModeReg</pInvalidator>
      <pInvalidator>pFrameRateRegMax</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntReg Name="pExposureTimeMinReg">
      <ToolTip>Minimum Exposure Time</ToolTip>
      <Address>0x30001040</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <pInvalidator>pExposureAlignmentReg</pInvalidator>
      <pInvalidator>pFrameRateRegMin</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="ExposureTimeRaw" NameSpace="Standard">
      <ToolTip>Exposure duration in µs</ToolTip>
      <Description>Controls the Raw exposure time in device-specific units.</Description>
      <DisplayName>Exposure Time</DisplayName>
      <pIsAvailable>ExposureTimeRaw_IsAvailable</pIsAvailable>
      <pValue>pShutterReg</pValue>
      <pMin>pExposureTimeMinReg</pMin>
      <pMax>ExposureTimeRaw_Max</pMax>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pShutterReg">
      <ToolTip>Shutter register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000024</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Converter Name="ShutterReg_Converter">
      <FormulaTo>FROM</FormulaTo>
      <FormulaFrom>TO</FormulaFrom>
      <pValue>pShutterReg</pValue>
      <Slope>Increasing</Slope>
    </Converter>
    <SwissKnife Name="ShutterMaxReg_Val">
      <pVariable Name="MAX">ExposureTimeRaw_Max</pVariable>
      <Formula>MAX</Formula>
    </SwissKnife>
    <SwissKnife Name="ShutterMinReg_Val">
      <pVariable Name="MIM">pExposureTimeMinReg</pVariable>
      <Formula>MIM</Formula>
    </SwissKnife>
    <Float Name="ExposureTimeAbs" NameSpace="Standard">
      <ToolTip>Exposure duration in µs</ToolTip>
      <Description>Controls the Absolute exposure time in microseconds (µs).</Description>
      <DisplayName>Exposure Time (abs)</DisplayName>
      <pIsAvailable>ExposureTimeRaw_IsAvailable</pIsAvailable>
      <pAlias>ExposureTimeRaw</pAlias>
      <pValue>ShutterReg_Converter</pValue>
      <pMin>ShutterMinReg_Val</pMin>
      <pMax>ShutterMaxReg_Val</pMax>
      <Unit>us</Unit>
      <Representation>Linear</Representation>
    </Float>
  </Group>

  <!-- ================  CameraIO  ================ -->
  <Group Comment="CameraIO">
    <Category Name="CameraIO" NameSpace="Custom">
      <ToolTip>Features relating to camera input and output pins</ToolTip>
      <DisplayName>Camera IO</DisplayName>
      <pFeature>LineSelector</pFeature>
      <pFeature>LineMode</pFeature>
      <pFeature>InputLinePolarity</pFeature>
      <pFeature>InputLineDebouncingPeriod</pFeature>
      <pFeature>LineStatus</pFeature>
      <pFeature>OutputLineMode</pFeature>
      <pFeature>OutputLineEventSource</pFeature>
      <pFeature>OutputLinePulsePolarity</pFeature>
      <pFeature>OutputLinePulseDelay</pFeature>
      <pFeature>OutputLinePulseDuration</pFeature>
      <pFeature>OutputLineValue</pFeature>
    </Category>

    <Enumeration Name="LineSelector" NameSpace="Standard">
      <ToolTip>Selector for Input/Output signal</ToolTip>
      <Description>Selector for the physical line (or pin) for the Input/Output signal</Description>
      <DisplayName>Line Selector</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Line1">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Line2">
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="Line3">
        <Value>2</Value>
      </EnumEntry>
      <EnumEntry Name="Line4">
        <Value>3</Value>
      </EnumEntry>
      <pValue>pLineSelector</pValue>
      <pSelected>LineMode</pSelected>
      <pSelected>InputLinePolarity</pSelected>
      <pSelected>InputLineDebouncingPeriod</pSelected>
      <pSelected>LineStatus</pSelected>
      <pSelected>OutputLineMode</pSelected>
    </Enumeration>
    <Integer Name="pLineSelector">
      <Value>0</Value>
    </Integer>
    <Enumeration Name="LineMode" NameSpace="Standard">
      <ToolTip>Indicate line direction</ToolTip>
      <Description>Indicate if the line is an input or an output.</Description>
      <DisplayName>Line Mode</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Input">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Output">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pLineMode</pValue>
    </Enumeration>
    <IntSwissKnife Name="pLineMode">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>( LINE &gt; 1)?1:0</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="IsLineInput">
      <pVariable Name="OFFSET">pLineSelector</pVariable>
      <Formula>(OFFSET &lt; 2)? 1 : 0</Formula>
    </IntSwissKnife>
    <Enumeration Name="InputLinePolarity" NameSpace="Custom">
      <ToolTip>Active level for selected input line</ToolTip>
      <Description>Select the active state for the selected input line {Active High = 0, Active Low = 1}.</Description>
      <DisplayName>Input Line Polarity</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>IsLineInput</pIsAvailable>
      <EnumEntry Name="ActiveLow">
        <DisplayName>Active Low</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="ActiveHigh">
        <DisplayName>Active High</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <pValue>pGPIxPolarity</pValue>
    </Enumeration>
    <IntSwissKnife Name="LINEPOLARITYADDR">
      <pVariable Name="OFFSET">pLineSelector</pVariable>
      <Formula>OFFSET * 4</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPIxPolarity">
      <ToolTip>Pin Polarity register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000040</Address>
      <pAddress>LINEPOLARITYADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pGPI1PolarityReg</pInvalidator>
      <pInvalidator>PersistenceInput_first</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="InputLineDebouncingPeriod">
      <ToolTip>Input Debounce period</ToolTip>
      <Description>Input debounce period in µs (from 1 to 255 µs)</Description>
      <DisplayName>Input Line Debouncing Period</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>IsLineInput</pIsAvailable>
      <pValue>pGPIxDebounce</pValue>
      <Min>0</Min>
      <Max>255</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntSwissKnife Name="INPUTLINEDEBOUNCINGPERIODADDR">
      <pVariable Name="OFFSET">pLineSelector</pVariable>
      <Formula>OFFSET*4</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPIxDebounce">
      <ToolTip>Input pin Debouncing register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000050</Address>
      <pAddress>INPUTLINEDEBOUNCINGPERIODADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceInput_second</pInvalidator>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Boolean Name="LineStatus">
      <ToolTip>Current logical state of signal</ToolTip>
      <Description>Current logical state of signal at time of polling {FALSE, TRUE}</Description>
      <DisplayName>Line Status</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>IsLineInput</pIsAvailable>
      <pValue>pGPIxValue</pValue>
    </Boolean>
    <IntSwissKnife Name="INPUTLINEVALUEADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>LINE*4</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPIxValue">
      <ToolTip>Input pin Value register</ToolTip>
      <Address>0x30000058</Address>
      <pAddress>INPUTLINEVALUEADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="IsLineOutput">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>(LINE &lt; 2)? 0 : 1</Formula>
    </IntSwissKnife>
    <Enumeration Name="OutputLineMode" NameSpace="Custom">
      <ToolTip>Control source for output line</ToolTip>
      <Description>Select the Output Line control source {SoftwareDriven = 0, EventDriven = 1}.</Description>
      <DisplayName>Output Line Mode</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>IsLineOutput</pIsAvailable>
      <EnumEntry Name="SoftwareDriven">
        <DisplayName>Software Driven</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="EventDriven">
        <DisplayName>Event Driven</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <pValue>pGPOxMode</pValue>
      <pSelected>OutputLineEventSource</pSelected>
      <pSelected>OutputLinePulsePolarity</pSelected>
      <pSelected>OutputLinePulseDelay</pSelected>
      <pSelected>OutputLinePulseDuration</pSelected>
      <pSelected>OutputLineValue</pSelected>
    </Enumeration>
    <IntSwissKnife Name="OUTPUTLINEMODEADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>( LINE - 2)*0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxMode">
      <ToolTip>Output Pin Mode register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x3000006C</Address>
      <pAddress>OUTPUTLINEMODEADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="OutputLineEventSource_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="LINE">pLineSelector</pVariable>
      <pVariable Name="MODE">pGPOxMode</pVariable>
      <Formula>((MODE = 0) ? 0 : 1) &amp;&amp; (LINE &gt; 1)</Formula>
    </IntSwissKnife>
    <Enumeration Name="OutputLineEventSource" NameSpace="Custom">
      <ToolTip>Event source for output line pulse</ToolTip>
      <Description>Event generating output line pulse {StartOfTrigger=0, StartOfExposure=1, StartOfReadout=3, EndOfReadout=4, EndOfAcquisition=5, EventOnInputLine1=6, EventOnInputLine2=7, OverTrigger=8,}</Description>
      <DisplayName>Output Line Event Source</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>OutputLineEventSource_IsAvailable</pIsAvailable>
      <EnumEntry Name="StartOfTrigger">
        <DisplayName>Start of Trigger</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="StartOfExposure">
        <DisplayName>Start of Exposure</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="StartOfReadout">
        <DisplayName>Start of Readout</DisplayName>
        <Value>3</Value>
      </EnumEntry>
      <EnumEntry Name="EndOfReadout">
        <DisplayName>End of Readout</DisplayName>
        <Value>4</Value>
      </EnumEntry>
      <EnumEntry Name="EndOfAcquisition">
        <DisplayName>End of Acquisition</DisplayName>
        <Value>5</Value>
      </EnumEntry>
      <EnumEntry Name="EventOnInputLine1">
        <DisplayName>Event on Input Line1</DisplayName>
        <Value>6</Value>
      </EnumEntry>
      <EnumEntry Name="EventOnInputLine2">
        <DisplayName>Event on Input Line2</DisplayName>
        <Value>7</Value>
      </EnumEntry>
      <EnumEntry Name="OverTrigger">
        <DisplayName>Over Trigger</DisplayName>
        <Value>8</Value>
      </EnumEntry>
      <pValue>pGPOxEvent</pValue>
    </Enumeration>
    <IntSwissKnife Name="OUTPUTLINEEVENTSOURCEADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>(LINE -2)*0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxEvent">
      <ToolTip>Output Pin Event register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000070</Address>
      <pAddress>OUTPUTLINEEVENTSOURCEADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="OutputLinePulsePolarity" NameSpace="Custom">
      <ToolTip>Active mode of output line</ToolTip>
      <Description>State of output opto-coupler {Active Close = 0, Active Open = 1}.</Description>
      <DisplayName>Output Line Pulse Polarity</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>OutputLineEventSource_IsAvailable</pIsAvailable>
      <EnumEntry Name="ActiveClose">
        <DisplayName>Active Close</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="ActiveOpen">
        <DisplayName>Active Open</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <pValue>pGPOxPolarity</pValue>
    </Enumeration>
    <IntSwissKnife Name="OUTPUTLINEPULSEPOLARITYADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>( LINE - 2 ) * 0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxPolarity">
      <ToolTip>Output Pin Polarity register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000074</Address>
      <pAddress>OUTPUTLINEPULSEPOLARITYADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="OutputLinePulseDelay">
      <ToolTip>Delay in µs between event detection and pulse generation</ToolTip>
      <Description>Delay in µs to assert pulse output (range 0 to 9.99 sec.).</Description>
      <DisplayName>Output Line Pulse Delay</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>OutputLineEventSource_IsAvailable</pIsAvailable>
      <pValue>pGPOxEventDelay</pValue>
      <Min>0</Min>
      <Max>65535</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntSwissKnife Name="OUTPUTLINEPULSEDELAYADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>( LINE - 2) * 0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxEventDelay">
      <ToolTip>Output pin Event Delay register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000078</Address>
      <pAddress>OUTPUTLINEPULSEDELAYADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="OutputLinePulseDuration">
      <ToolTip>Duration in µs of pulse emitted on selected output line</ToolTip>
      <Description>Pulse duration in µs (range 100 to 9.99 sec)</Description>
      <DisplayName>Output Line Pulse Duration</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>OutputLineEventSource_IsAvailable</pIsAvailable>
      <pValue>pGPOxEventDuration</pValue>
      <Min>100</Min>
      <Max>16777251</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntSwissKnife Name="OUTPUTLINEPULSEDURATIONADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>(LINE -2)*0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxEventDuration">
      <ToolTip>Output pin Event Duration register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x3000007C</Address>
      <pAddress>OUTPUTLINEPULSEDURATIONADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="OutputLineValue_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="LINE">pLineSelector</pVariable>
      <pVariable Name="MODE">pGPOxMode</pVariable>
      <Formula>((MODE = 0) ? 1 : 0) &amp;&amp; (LINE &gt; 1)</Formula>
    </IntSwissKnife>
    <Enumeration Name="OutputLineValue">
      <ToolTip>Software driven value for selected output line</ToolTip>
      <Description>Static output state {Open = 0, Close = 1}</Description>
      <DisplayName>Output Line Value</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>OutputLineValue_IsAvailable</pIsAvailable>
      <EnumEntry Name="Open">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Close">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pGPOxSwValue</pValue>
    </Enumeration>
    <IntSwissKnife Name="OUTPUTLINEVALUEADDR">
      <pVariable Name="LINE">pLineSelector</pVariable>
      <Formula>(LINE - 2)*0x18</Formula>
    </IntSwissKnife>
    <IntReg Name="pGPOxSwValue">
      <ToolTip>Output pin software driven value register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30000068</Address>
      <pAddress>OUTPUTLINEVALUEADDR</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceOutput</pInvalidator>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  CounterAndTimerControl  ================ -->
  <Group Comment="CounterAndTimerControl">
    <Category Name="CounterAndTimerControl" NameSpace="Standard">
      <ToolTip>features required to control the usage of programmable counters and timers.</ToolTip>
      <DisplayName>Counters and Timers</DisplayName>
      <pFeature>CounterSelector</pFeature>
      <pFeature>CounterEventSource</pFeature>
      <pFeature>CounterLineSource</pFeature>
      <pFeature>CounterResetMode</pFeature>
      <pFeature>CounterResetLine</pFeature>
      <pFeature>CounterReset</pFeature>
    </Category>

    <Enumeration Name="CounterSelector" NameSpace="Standard">
      <ToolTip>Select Counter to configure</ToolTip>
      <Description>Select Counter to configure. Currently only Timestamp is supported.</Description>
      <DisplayName>Counter Selector</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="GevTimestamp">
        <DisplayName>GigE Vision Timestamp</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
      <pSelected>CounterEventSource</pSelected>
      <pSelected>CounterLineSource</pSelected>
      <pSelected>CounterReset</pSelected>
    </Enumeration>
    <Enumeration Name="CounterEventSource">
      <ToolTip>Event source for the counter</ToolTip>
      <Description>Select Counter source as {Internal Clock = 0, Input 1 = 1, Input 2 = 2, End of Readout = 3}.</Description>
      <DisplayName>Counter Event Source</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Clock">
        <DisplayName>Internal Clock (1us)</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Line">
        <DisplayName>Internal Line</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="EndOfReadout">
        <DisplayName>End of Readout</DisplayName>
        <Value>2</Value>
      </EnumEntry>
      <pValue>pCounterEventSourceReg</pValue>
    </Enumeration>
    <IntReg Name="pCounterEventSourceReg">
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30001090</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceGevConterSource</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="IsCounterLineSourceAvailable">
      <pVariable Name="SRC">pCounterEventSourceReg</pVariable>
      <Formula>(SRC = 1) </Formula>
    </IntSwissKnife>
    <Enumeration Name="CounterLineSource">
      <ToolTip>Source for the line to count</ToolTip>
      <Description>Source for the line to count</Description>
      <DisplayName>Counter Line Source</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>IsCounterLineSourceAvailable</pIsAvailable>
      <EnumEntry Name="Line1">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Line2">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pCounterLineSourceReg</pValue>
    </Enumeration>
    <IntReg Name="pCounterLineSourceReg">
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x30001094</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceGevConterSource</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="CounterReset" NameSpace="Standard">
      <ToolTip>Reset selected Counter</ToolTip>
      <Description>Resets the selected Counter.</Description>
      <DisplayName>Counter Reset</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_GevTimestampControl</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="CounterResetModeReg" NameSpace="Custom">
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x30001098</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="CounterResetMode" NameSpace="Custom">
      <ToolTip>Select the mode for the timestamp reset</ToolTip>
      <DisplayName>Counter Reset Mode</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Software">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Hardware">
        <Value>1</Value>
      </EnumEntry>
      <pValue>CounterResetModeReg</pValue>
    </Enumeration>
    <IntReg Name="CounterResetLineReg" NameSpace="Custom">
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x3000109C</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="CounterResetLine" NameSpace="Custom">
      <ToolTip>Select the line for the timestamp reset</ToolTip>
      <DisplayName>Counter Reset Line</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>CounterResetModeReg</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Line1" NameSpace="Custom">
        <DisplayName>Line 1</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Line2" NameSpace="Custom">
        <DisplayName>Line 2</DisplayName>
        <Value>1</Value>
      </EnumEntry>
      <pValue>CounterResetLineReg</pValue>
    </Enumeration>
  </Group>

  <!-- ================  EventControl  ================ -->
  <Group Comment="EventControl">
    <Category Name="EventControl" NameSpace="Standard">
      <ToolTip>Features required to control the generation of event notifications sent to host application</ToolTip>
      <DisplayName>Event Generation</DisplayName>
      <pFeature>EventSelector</pFeature>
      <pFeature>EventNotification</pFeature>
      <pFeature>EventFrameTriggerData</pFeature>
      <pFeature>EventExposureStartData</pFeature>
      <pFeature>EventExposureEndData</pFeature>
      <pFeature>EventReadoutStartData</pFeature>
      <pFeature>EventReadoutEndData</pFeature>
      <pFeature>EventAcquisitionEndData</pFeature>
      <pFeature>EventLine1EventData</pFeature>
      <pFeature>EventLine2EventData</pFeature>
      <pFeature>EventLine3EventData</pFeature>
      <pFeature>EventLine4EventData</pFeature>
      <pFeature>EventInvalidFrameTriggerData</pFeature>
      <pFeature>EventFrameSkippedData</pFeature>
    </Category>

    <Enumeration Name="EventSelector" NameSpace="Standard">
      <ToolTip>Select the Event to control</ToolTip>
      <Description>Select the Event to control.</Description>
      <DisplayName>Event Selector</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="FrameTrigger">
        <DisplayName>Frame Trigger</DisplayName>
        <Value>2</Value>
      </EnumEntry>
      <EnumEntry Name="ExposureStart">
        <DisplayName>Start of Exposure</DisplayName>
        <Value>3</Value>
      </EnumEntry>
      <EnumEntry Name="ExposureEnd">
        <DisplayName>End of Exposure</DisplayName>
        <Value>4</Value>
      </EnumEntry>
      <EnumEntry Name="ReadoutStart">
        <DisplayName>Start of Readout</DisplayName>
        <Value>0x9001</Value>
      </EnumEntry>
      <EnumEntry Name="ReadoutEnd">
        <DisplayName>End of Readout</DisplayName>
        <Value>0x9002</Value>
      </EnumEntry>
      <EnumEntry Name="AcquisitionEnd">
        <DisplayName>End of Acquisition</DisplayName>
        <Value>0x9003</Value>
      </EnumEntry>
      <EnumEntry Name="Line1Event">
        <DisplayName>Line 1 Event</DisplayName>
        <Value>0x9004</Value>
      </EnumEntry>
      <EnumEntry Name="Line2Event">
        <DisplayName>Line 2 Event</DisplayName>
        <Value>0x9005</Value>
      </EnumEntry>
      <EnumEntry Name="Line3Event">
        <DisplayName>Line 3 Event</DisplayName>
        <Value>0x9006</Value>
      </EnumEntry>
      <EnumEntry Name="Line4Event">
        <DisplayName>Line 4 Event</DisplayName>
        <Value>0x9007</Value>
      </EnumEntry>
      <EnumEntry Name="InvalidFrameTrigger">
        <DisplayName>Invalid Frame Trigger</DisplayName>
        <Value>0x9008</Value>
      </EnumEntry>
      <EnumEntry Name="FrameSkipped">
        <DisplayName>Frame Skipped</DisplayName>
        <Value>0x9009</Value>
      </EnumEntry>
      <pValue>pEventSelectorReg</pValue>
      <pSelected>EventNotification</pSelected>
    </Enumeration>

    <IntReg Name="pEventSelectorReg">
      <ToolTip>Event selector register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x100000A0</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="EventNotification_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="SELECTOR">pEventSelectorReg</pVariable>
      <Formula>(SELECTOR=0)?0:1</Formula>
    </IntSwissKnife>
    <Enumeration Name="EventNotification" NameSpace="Standard">
      <ToolTip>Enable notification on eventEnable notification on event</ToolTip>
      <Description>Notification type to issue when selected event occurs {Off = 0, GigEVisionEvent = 1}</Description>
      <DisplayName>Event Notification</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsAvailable>EventNotification_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Off">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="GigEVisionEvent">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pEventNotificationReg</pValue>
    </Enumeration>
    <IntReg Name="pEventNotificationReg">
      <ToolTip>Event notification register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x100000A4</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pEventSelectorReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventFrameTriggerData" NameSpace="Standard">
      <ToolTip>Data of the frame trigger event</ToolTip>
      <Description>Data of the frame trigger event</Description>
      <DisplayName>Frame Trigger Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventFrameTrigger</pFeature>
      <pFeature>EventFrameTriggerTimestamp</pFeature>
    </Category>
    <Integer Name="EventFrameTrigger" NameSpace="Standard">
      <ToolTip>Event on a frame trigger</ToolTip>
      <Description>Generate an event on a frame trigger.</Description>
      <DisplayName>FrameTrigger Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>0002</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>2</Value>
    </Integer>
    <Integer Name="EventFrameTriggerTimestamp" NameSpace="Standard">
      <ToolTip>Frame trigger event Timestamp</ToolTip>
      <Description>Timestamp of the frame trigger event</Description>
      <DisplayName>FrameTrigger Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>FrameTrigger_TimeStamp_Reg</pValue>
    </Integer>
    <Category Name="EventExposureStartData" NameSpace="Standard">
      <ToolTip>Data of the exposure start event</ToolTip>
      <Description>Data of the exposure start event</Description>
      <DisplayName>Exposure Start Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventExposureStart</pFeature>
      <pFeature>EventExposureStartTimestamp</pFeature>
    </Category>
    <Integer Name="EventExposureStart" NameSpace="Standard">
      <ToolTip>Event on exposure start</ToolTip>
      <Description>Generate an event on exposure start.</Description>
      <DisplayName>ExposureStart Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>0003</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>3</Value>
    </Integer>
    <Integer Name="EventExposureStartTimestamp" NameSpace="Standard">
      <ToolTip>Exposure start Timestamp</ToolTip>
      <Description>Timestamp of the exposure start event.</Description>
      <DisplayName>ExposureStart Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ExposureStart_TimeStamp_Reg</pValue>
    </Integer>
    <Category Name="EventExposureEndData" NameSpace="Standard">
      <ToolTip>Data of the exposure end event</ToolTip>
      <Description>Data of the exposure end event</Description>
      <DisplayName>Exposure End Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventExposureEnd</pFeature>
      <pFeature>EventExposureEndTimestamp</pFeature>
    </Category>
    <Integer Name="EventExposureEnd" NameSpace="Standard">
      <ToolTip>Event on exposure end</ToolTip>
      <Description>Generate an event on exposure end.</Description>
      <DisplayName>ExposureEnd Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>0004</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>4</Value>
    </Integer>
    <Integer Name="EventExposureEndTimestamp" NameSpace="Standard">
      <ToolTip>Exposure end Timestamp</ToolTip>
      <Description>Timestamp of the exposure end event.</Description>
      <DisplayName>ExposureEnd Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ExposureEnd_TimeStamp_Reg</pValue>
    </Integer>
    <Category Name="EventReadoutStartData" NameSpace="Standard">
      <ToolTip>Data of the readout start event</ToolTip>
      <Description>Data of the readout start event</Description>
      <DisplayName>Readout Start Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventReadoutStart</pFeature>
      <pFeature>EventReadoutStartTimestamp</pFeature>
    </Category>
    <Integer Name="EventReadoutStart" NameSpace="Standard">
      <ToolTip>Event on readout start</ToolTip>
      <Description>Generate an event when the readout starts.</Description>
      <DisplayName>ReadoutStart Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9001</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9001</Value>
    </Integer>
    <Integer Name="EventReadoutStartTimestamp" NameSpace="Standard">
      <ToolTip>Readout start Timestamp</ToolTip>
      <Description>Timestamp of the readout start event.</Description>
      <DisplayName>ReadoutStart Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ReadoutStart_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="ReadoutStart_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventReadoutStartPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventReadoutEndData" NameSpace="Standard">
      <ToolTip>Data of the readout end event</ToolTip>
      <Description>Data of the readout end event</Description>
      <DisplayName>Readout End Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventReadoutEnd</pFeature>
      <pFeature>EventReadoutEndTimestamp</pFeature>
    </Category>
    <Integer Name="EventReadoutEnd" NameSpace="Standard">
      <ToolTip>Event on readout end</ToolTip>
      <Description>Generate an event when the readout ends.</Description>
      <DisplayName>ReadoutEnd Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9002</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9002</Value>
    </Integer>
    <Integer Name="EventReadoutEndTimestamp" NameSpace="Standard">
      <ToolTip>Readout end Timestamp</ToolTip>
      <Description>Timestamp of the readout end event.</Description>
      <DisplayName>ReadoutEnd Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ReadoutEnd_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="ReadoutEnd_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventReadoutEndPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventAcquisitionEndData" NameSpace="Standard">
      <ToolTip>Data of the acquisition end event</ToolTip>
      <Description>Data of the acquisition end event</Description>
      <DisplayName>Acquisition End Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventAcquisitionEnd</pFeature>
      <pFeature>EventAcquisitionEndTimestamp</pFeature>
      <pFeature>EventAcquisitionEndFrameID</pFeature>
    </Category>
    <Integer Name="EventAcquisitionEnd" NameSpace="Standard">
      <ToolTip>Event on acquisition end</ToolTip>
      <Description>Generate an event when the acquisition ends.</Description>
      <DisplayName>AcquisitionEnd Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9003</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9003</Value>
    </Integer>
    <Integer Name="EventAcquisitionEndTimestamp" NameSpace="Standard">
      <ToolTip>Acquisition end Timestamp</ToolTip>
      <Description>Timestamp of the acquisition end event.</Description>
      <DisplayName>AcquisitionEnd Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>AcquisitionEnd_TimeStamp_Reg</pValue>
    </Integer>
    <Integer Name="EventAcquisitionEndFrameID" NameSpace="Standard">
      <ToolTip>Frame ID at which the Acquisition ended</ToolTip>
      <Description>Frame ID at which the Acquisition ended.</Description>
      <DisplayName>AcquisitionEnd Event FrameID</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>AcquisitionEnd_BlockId_Reg</pValue>
    </Integer>
    <IntReg Name="AcquisitionEnd_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventAcquisitionEndPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntReg Name="AcquisitionEnd_BlockId_Reg">
      <Address>6</Address>
      <Length>2</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventAcquisitionEndPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>

    <Category Name="EventLine1EventData" NameSpace="Standard">
      <ToolTip>Data of the line 1 event</ToolTip>
      <Description>Data of the line 1 event</Description>
      <DisplayName>Line 1 Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventLine1Event</pFeature>
      <pFeature>EventLine1EventTimestamp</pFeature>
    </Category>
    <Integer Name="EventLine1Event" NameSpace="Standard">
      <ToolTip>Event on line 1 signal</ToolTip>
      <Description>Generate an event when line 1 is signaled.</Description>
      <DisplayName>Line1 Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9004</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9004</Value>
    </Integer>
    <Integer Name="EventLine1EventTimestamp" NameSpace="Standard">
      <ToolTip>Line 1 event Timestamp</ToolTip>
      <Description>Timestamp of the Line 1 event.</Description>
      <DisplayName>Line1 Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>Line1Event_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="Line1Event_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventLine1Port</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventLine2EventData" NameSpace="Standard">
      <ToolTip>Data of the line 2 event</ToolTip>
      <Description>Data of the line 2 event</Description>
      <DisplayName>Line 2 Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventLine2Event</pFeature>
      <pFeature>EventLine2EventTimestamp</pFeature>
    </Category>
    <Integer Name="EventLine2Event" NameSpace="Standard">
      <ToolTip>Event on line 2 signal</ToolTip>
      <Description>Generate an event when line 2 is signaled.</Description>
      <DisplayName>Line2 Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9005</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9005</Value>
    </Integer>
    <Integer Name="EventLine2EventTimestamp" NameSpace="Standard">
      <ToolTip>Line 2 event Timestamp</ToolTip>
      <Description>Timestamp of the Line 2 event.</Description>
      <DisplayName>Line2 Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>Line2Event_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="Line2Event_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventLine2Port</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventLine3EventData" NameSpace="Standard">
      <ToolTip>Data of the line 3 event</ToolTip>
      <Description>Data of the line 3 event</Description>
      <DisplayName>Line 3 Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventLine3Event</pFeature>
      <pFeature>EventLine3EventTimestamp</pFeature>
    </Category>
    <Integer Name="EventLine3Event" NameSpace="Standard">
      <ToolTip>Event on line 3 signal</ToolTip>
      <Description>Generate an event when line 3 is signaled.</Description>
      <DisplayName>Line3 Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9006</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9006</Value>
    </Integer>
    <Integer Name="EventLine3EventTimestamp" NameSpace="Standard">
      <ToolTip>Line 3 event Timestamp</ToolTip>
      <Description>Timestamp of the Line 3 event.</Description>
      <DisplayName>Line3 Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>Line3Event_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="Line3Event_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventLine3Port</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventLine4EventData" NameSpace="Standard">
      <ToolTip>Data of the line 4 event</ToolTip>
      <Description>Data of the line 4 event</Description>
      <DisplayName>Line 4 Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventLine4Event</pFeature>
      <pFeature>EventLine4EventTimestamp</pFeature>
    </Category>
    <Integer Name="EventLine4Event" NameSpace="Standard">
      <ToolTip>Event on line 4 signal</ToolTip>
      <Description>Generate an event when line 4 is signaled.</Description>
      <DisplayName>Line4 Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9007</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9007</Value>
    </Integer>
    <Integer Name="EventLine4EventTimestamp" NameSpace="Standard">
      <ToolTip>Line 4 event Timestamp</ToolTip>
      <Description>Timestamp of the Line 4 event.</Description>
      <DisplayName>Line4 Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>Line4Event_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="Line4Event_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventLine4Port</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Category Name="EventInvalidFrameTriggerData" NameSpace="Standard">
      <ToolTip>Data of the invalid frame trigger event</ToolTip>
      <Description>Data of the invalid frame trigger event</Description>
      <DisplayName>Invalid Frame Trigger Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventInvalidFrameTrigger</pFeature>
      <pFeature>EventInvalidFrameTriggerTimestamp</pFeature>
    </Category>
    <Integer Name="EventInvalidFrameTrigger" NameSpace="Standard">
      <ToolTip>Event when invalid trigger received</ToolTip>
      <Description>Generate an event when an invalid trigger is received.</Description>
      <DisplayName>InvalidFrameTrigger Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9008</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9008</Value>
    </Integer>
    <Integer Name="EventInvalidFrameTriggerTimestamp" NameSpace="Standard">
      <ToolTip>Timestamp of the invalid trigger event</ToolTip>
      <Description>Timestamp of the invalid triggerevent.</Description>
      <DisplayName>InvalidFrameTrigger Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>InvalidTrigger_TimeStamp_Reg</pValue>
    </Integer>
    <Category Name="EventFrameSkippedData" NameSpace="Standard">
      <ToolTip>Data of the frame skipped event</ToolTip>
      <Description>Data of the frame skipped event</Description>
      <DisplayName>Frame Skipped Data</DisplayName>
      <Visibility>Expert</Visibility>
      <pFeature>EventFrameSkipped</pFeature>
      <pFeature>EventFrameSkippedTimestamp</pFeature>
    </Category>
    <Integer Name="EventFrameSkipped" NameSpace="Standard">
      <ToolTip>Event when a frame is skipped</ToolTip>
      <Description>Generate an event when an frame is skipped.</Description>
      <DisplayName>FrameSkipped Event</DisplayName>
      <Visibility>Expert</Visibility>
      <EventID>9009</EventID>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0x9009</Value>
    </Integer>
    <Integer Name="EventFrameSkippedTimestamp" NameSpace="Standard">
      <ToolTip>Timestamp of the frame skipped event</ToolTip>
      <Description>Timestamp of the frame skipped event.</Description>
      <DisplayName>FrameSkipped Event Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>FrameSkipped_TimeStamp_Reg</pValue>
    </Integer>
    <IntReg Name="FrameSkipped_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventFrameSkippedPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  EventsData  ================ -->
  <Group Comment="EventsData">
    <Category Name="EventsData">
      <ToolTip>Features related to the event reseption</ToolTip>
      <pFeature>Event_FrameTrigger_TimeStamp</pFeature>
      <pFeature>Event_ExposureStart_TimeStamp</pFeature>
      <pFeature>Event_ExposureEnd_TimeStamp</pFeature>
      <pFeature>Event_InvalidTrigger_TimeStamp</pFeature>
    </Category>

    <Integer Name="Event_FrameTrigger_TimeStamp">
      <ToolTip>Event on a frame trigger</ToolTip>
      <Description>Generate an event on a frame trigger.</Description>
      <DisplayName>Event FrameTrigger TimeStamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>FrameTrigger_TimeStamp_Reg</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="FrameTrigger_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventFrameTriggerPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="Event_ExposureStart_TimeStamp">
      <ToolTip>Event on exposure start</ToolTip>
      <Description>Generate an event on exposure start.</Description>
      <DisplayName>Event ExposureStart TimeStamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ExposureStart_TimeStamp_Reg</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="ExposureStart_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventExposureStartPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="Event_ExposureEnd_TimeStamp">
      <ToolTip>Event on exposure end</ToolTip>
      <Description>Generate an event on exposure end.</Description>
      <DisplayName>Event ExposureEnd TimeStamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>ExposureEnd_TimeStamp_Reg</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="ExposureEnd_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventExposureEndPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="Event_InvalidTrigger_TimeStamp">
      <ToolTip>Event when invalid trigger received</ToolTip>
      <Description>Generate an event when invalid trigger received.</Description>
      <DisplayName>Event Invalid Frame Trigger TimeStamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>InvalidTrigger_TimeStamp_Reg</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="InvalidTrigger_TimeStamp_Reg">
      <Address>8</Address>
      <Length>8</Length>
      <AccessMode>RO</AccessMode>
      <pPort>EventInvalidTriggerPort</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>

  </Group>

  <!-- ================  AnalogControl  ================ -->
  <Group Comment="AnalogControl">
    <Category Name="AnalogControl" NameSpace="Standard">
      <ToolTip>Features related to the video signal in the analog domain (before digitization)</ToolTip>
      <DisplayName>Analog Controls</DisplayName>
      <pFeature>GainSelector</pFeature>
      <pFeature>GainAbs</pFeature>
      <pFeature>GainRaw</pFeature>
      <pFeature>BlackLevelSelector</pFeature>
      <pFeature>BlackLevelAbs</pFeature>
      <pFeature>BlackLevelRaw</pFeature>
    </Category>

    <Enumeration Name="GainSelector" NameSpace="Standard">
      <ToolTip>Selects which Gain to control</ToolTip>
      <Description>Selects which Gain to control (All, Red, Green, Blue, ...).</Description>
      <DisplayName>Gain Selector</DisplayName>
      <EnumEntry Name="DigitalAll">
        <DisplayName>Digital All</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
      <pSelected>GainRaw</pSelected>
      <pSelected>GainAbs</pSelected>
    </Enumeration>
    <Converter Name="GainAbs" NameSpace="Standard">
      <ToolTip>Digital gain</ToolTip>
      <Description>Digital gain</Description>
      <DisplayName>Gain</DisplayName>
      <pAlias>GainRaw</pAlias>
      <FormulaTo>200 * LG(FROM)</FormulaTo>
      <FormulaFrom> 10 ** (TO / 200)</FormulaFrom>
      <pValue>GainRaw</pValue>
      <Representation>Logarithmic</Representation>
      <Slope>Increasing</Slope>
    </Converter>
    <Integer Name="GainRaw" NameSpace="Standard">
      <ToolTip>Digital gain in 0.1 dB</ToolTip>
      <Description>Digital gain in tenth of dB from 0 to +12dB</Description>
      <DisplayName>Gain (Raw)</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pGainReg</pValue>
      <Min>0</Min>
      <Max>120</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pGainReg">
      <ToolTip>Gain register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000014</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Signed</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="BlackLevelSelector">
      <ToolTip>Selects which tap is controlled by BlackLevel feature</ToolTip>
      <Description>Select from (All, Red, Green, Blue, Tap1, Tap2, …}</Description>
      <DisplayName>Black Level Selector</DisplayName>
      <EnumEntry Name="DigitalAll">
        <DisplayName>Digital All</DisplayName>
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
      <pSelected>BlackLevelRaw</pSelected>
      <pSelected>BlackLevelAbs</pSelected>
    </Enumeration>
    <IntSwissKnife Name="BlackLevelInc">
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <Formula> (PIXEL_FORMAT = 0x1080001)? 1:4  </Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="BlackLevelMax">
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <Formula> 1023 * ((PIXEL_FORMAT = 0x1080001)? 1:4)  </Formula>
    </IntSwissKnife>
    <IntConverter Name="BlackLevelValue">
      <pVariable Name="FACTOR">BlackLevelInc</pVariable>
      <FormulaTo> FROM / FACTOR </FormulaTo>
      <FormulaFrom> TO * FACTOR </FormulaFrom>
      <pValue>pOffsetReg</pValue>
      <Slope>Increasing</Slope>
    </IntConverter>
    <Integer Name="BlackLevelRaw" NameSpace="Standard">
      <ToolTip>Black level (offset) in 1/4 of DN</ToolTip>
      <Description>Black level (offset) in 1/4 of DN (0 – 4092 with increments of 4 in 10-bit mode, 0 – 1023 with increments of 1 in 8-bit mode).</Description>
      <DisplayName>Black Level (Raw)</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BlackLevelValue</pValue>
      <Min>0</Min>
      <pMax>BlackLevelMax</pMax>
      <pInc>BlackLevelInc</pInc>
      <Representation>Linear</Representation>
    </Integer>
    <Converter Name="BlackLevelAbs" NameSpace="Standard">
      <ToolTip>Black level (offset) in DN</ToolTip>
      <Description>Black level (offset) in DN</Description>
      <DisplayName>Black Level</DisplayName>
      <Visibility>Expert</Visibility>
      <pAlias>BlackLevelRaw</pAlias>
      <FormulaTo>0 - FROM * 4</FormulaTo>
      <FormulaFrom>0 - TO / 4</FormulaFrom>
      <pValue>BlackLevelRaw</pValue>
      <Slope>Decreasing</Slope>
    </Converter>
    <IntReg Name="pOffsetReg">
      <ToolTip>Offset register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x3000001C</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pPixelFormatReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  ShadingCorrection  ================ -->
  <Group Comment="ShadingCorrection">
    <Category Name="ShadingCorrection" NameSpace="Custom">
      <ToolTip>Features in this section describe the Shading Correction realated features</ToolTip>
      <DisplayName>Shading Correction</DisplayName>
      <pFeature>ShadingCorrectionMode</pFeature>
      <pFeature>ShadingCorrectionPixelYCoordinate</pFeature>
      <pFeature>ShadingCorrectionPixelXCoordinate</pFeature>
      <pFeature>ShadingCorrectionReplacePixel</pFeature>
      <pFeature>ShadingCorrectionGain</pFeature>
      <pFeature>ShadingCorrectionOffset</pFeature>
      <pFeature>ShadingCorrectionGainAll</pFeature>
      <pFeature>ShadingCorrectionOffsetAll</pFeature>
    </Category>


    <IntSwissKnife Name="NoShadingCalibration_or_UseSet_IsBussy">
      <pVariable Name="LOAD_STATUS">UseSet_IsLoading</pVariable>
      <pVariable Name="SAVE_STATUS">UseSet_IsSaving</pVariable>
      <pVariable Name="FF_CALIBRATION">ShadingCorrectionEnable_Reg</pVariable>
      <Formula>( FF_CALIBRATION = 2) || (LOAD_STATUS = 1 ) || (SAVE_STATUS = 1)</Formula>
    </IntSwissKnife>
    <Enumeration Name="ShadingCorrectionMode">
      <ToolTip>Select shading correction mode</ToolTip>
      <Description>Select shading correction mode (Enable, Disable, or Calibration mode).</Description>
      <DisplayName>Shading Correction Mode</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Disable">
        <ToolTip>Disable the shading correction</ToolTip>
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="Enable">
        <ToolTip>Enable the shading correction</ToolTip>
        <Value>1</Value>
      </EnumEntry>
      <EnumEntry Name="Calibration">
        <ToolTip>Shading correction calibration mode</ToolTip>
        <Value>2</Value>
      </EnumEntry>
      <pValue>ShadingCorrectionEnable_Reg</pValue>
    </Enumeration>
    <IntReg Name="ShadingCorrectionEnable_Reg">
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x300000B0</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>WriteThrough</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="ShadingCorrection_isCalibration">
      <pVariable Name="CORRECTION_MODE">ShadingCorrectionEnable_Reg</pVariable>
      <Formula> (CORRECTION_MODE = 2)</Formula>
    </IntSwissKnife>
    <Integer Name="ShadingCorrectionPixelXCoordinate" NameSpace="Custom">
      <ToolTip>Pixel X Coordinate in the coefficient table</ToolTip>
      <Description>X Coordinate of the current pixel of the Shading Correction coefficient table.</Description>
      <DisplayName>Pixel X Coordinate</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsAvailable>ShadingCorrection_isCalibration</pIsAvailable>
      <pValue>SCPixelXCoordinate</pValue>
      <Min>1</Min>
      <pMax>SensorWidth</pMax>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
      <pSelected>ShadingCorrectionReplacePixel</pSelected>
      <pSelected>ShadingCorrectionGain</pSelected>
      <pSelected>ShadingCorrectionOffset</pSelected>
    </Integer>
    <Integer Name ="SCPixelXCoordinate" >
      <Value>1</Value>
    </Integer>
    <Integer Name="ShadingCorrectionPixelYCoordinate" NameSpace="Custom">
      <ToolTip>Pixel Y Coordinate in the coefficient table</ToolTip>
      <Description>Y Coordinate of the current pixel of the Shading Correction coefficient table.</Description>
      <DisplayName>Pixel Y Coordinate</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsAvailable>ShadingCorrection_isCalibration</pIsAvailable>
      <Value>1</Value>
      <Min>1</Min>
      <pMax>SensorHeight</pMax>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
      <pSelected>ShadingCorrectionPixelXCoordinate</pSelected>
    </Integer>
    <IntSwissKnife Name="CoefficientValue_IsAvailable">
      <pVariable Name="VALUE">FFOffset_expr2</pVariable>
      <Formula>(VALUE = 255)?0:1</Formula>
    </IntSwissKnife>
    <IntConverter Name="ShadingCorrectionReplacePixel_Value">
      <FormulaTo>FROM</FormulaTo>
      <FormulaFrom>(TO = 255)? 255:0 </FormulaFrom>
      <pValue>FFOffset_expr2</pValue>
      <Slope>Increasing</Slope>
    </IntConverter>
    <Boolean Name="ShadingCorrectionReplacePixel">
      <ToolTip>Enable pixel replacement for current pixel</ToolTip>
      <Description>Enable pixel replacement for current pixel.</Description>
      <DisplayName>Replace Pixel</DisplayName>
      <pValue>ShadingCorrectionReplacePixel_Value</pValue>
      <OnValue>255</OnValue>
      <OffValue>0</OffValue>
    </Boolean>
    <IntSwissKnife Name="Coefficient_Index">
      <pVariable Name="INDEX_X">SCPixelXCoordinate</pVariable>
      <pVariable Name="INDEX_Y">ShadingCorrectionPixelYCoordinate</pVariable>
      <pVariable Name="WIDHT">SensorWidth</pVariable>
      <Formula> (INDEX_X -1) + ((INDEX_Y -1) * WIDHT)</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="Coefficient_offset">
      <pVariable Name="INDEX">Coefficient_Index</pVariable>
      <Formula> (INDEX / 4) &lt;&lt; 2 </Formula>
    </IntSwissKnife>
    <IntReg Name="ShadingCorrectionGain_Reg">
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x31A00000</Address>
      <pAddress>Coefficient_offset</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>SCPixelXCoordinate</pInvalidator>
      <pInvalidator>ShadingCorrectionPixelYCoordinate</pInvalidator>
      <pInvalidator>pPixelFormatReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntConverter Name="FFGain_expr">
      <pVariable Name="INDEX">Coefficient_Index</pVariable>
      <pVariable Name="VALUE">ShadingCorrectionGain_Reg</pVariable>
      <FormulaTo>
        ((INDEX &amp; 3) = 3)?
        ((((FROM &lt;&lt; 24) &amp; 0xFF000000) + (VALUE &amp; 0xFFFFFF)) ):
        ( (INDEX &amp; 3 = 2)?
        ((((FROM &lt;&lt; 16) &amp; 0xFF0000) + (VALUE &amp; 0xFF00FFFF)) ) :
        ( (INDEX &amp; 3 = 1)?
        ((((FROM &lt;&lt; 8) &amp; 0xFF00) + (VALUE &amp; 0xFFFF00FF)) ) :
        ( ((FROM  &amp; 0xFF) + (VALUE &amp; 0xFFFFFF00) ))))
      </FormulaTo>
      <FormulaFrom>
        ((INDEX &amp; 3) = 3)?
        ((  TO &amp; 0xFF000000) &gt;&gt; 24 ):
        ( ((INDEX &amp; 3) = 2)?
        ((  TO &amp; 0xFF0000) &gt;&gt; 16 ):
        ( ((INDEX &amp; 3) = 1)?
        ((  TO &amp; 0xFF00) &gt;&gt; 8 ):
        (TO &amp; 0xFF) ))
      </FormulaFrom>
      <pValue>ShadingCorrectionGain_Reg</pValue>
      <Slope>Increasing</Slope>
    </IntConverter>
    <Converter Name="FFGain_Convertor">
      <FormulaTo> (FROM*128) </FormulaTo>
      <FormulaFrom> (TO/128)</FormulaFrom>
      <pValue>FFGain_expr</pValue>
    </Converter>
    <Float Name="ShadingCorrectionGain">
      <ToolTip>Current Pixel multiplier</ToolTip>
      <Description>Gain factor (multiplier) for the current pixel.</Description>
      <DisplayName>Gain</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsAvailable>CoefficientValue_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>FFGain_Convertor</pValue>
    </Float>
    <IntReg Name="ShadingCorrectionOffset_Reg">
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x31700000</Address>
      <pAddress>Coefficient_offset</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>SCPixelXCoordinate</pInvalidator>
      <pInvalidator>ShadingCorrectionPixelYCoordinate</pInvalidator>
      <pInvalidator>pPixelFormatReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntConverter Name="FFOffset_expr2">
      <pVariable Name="INDEX">Coefficient_Index</pVariable>
      <pVariable Name="VALUE">ShadingCorrectionOffset_Reg</pVariable>
      <FormulaTo>
        ((INDEX &amp; 3) = 3)?
        ((((FROM &lt;&lt; 24) &amp; 0xFF000000) + (VALUE &amp; 0xFFFFFF)) ):
        ( (INDEX &amp; 3 = 2)?
        ((((FROM &lt;&lt; 16) &amp; 0xFF0000) + (VALUE &amp; 0xFF00FFFF)) ) :
        ( (INDEX &amp; 3 = 1)?
        ((((FROM &lt;&lt; 8) &amp; 0xFF00) + (VALUE &amp; 0xFFFF00FF)) ) :
        ( ((FROM  &amp; 0xFF) + (VALUE &amp; 0xFFFFFF00) ))))
      </FormulaTo>
      <FormulaFrom>
        ((INDEX &amp; 3) = 3)?
        ((  TO &amp; 0xFF000000) &gt;&gt; 24 ):
        ( ((INDEX &amp; 3) = 2)?
        ((  TO &amp; 0xFF0000) &gt;&gt; 16 ):
        ( ((INDEX &amp; 3) = 1)?
        ((  TO &amp; 0xFF00) &gt;&gt; 8 ):
        (TO &amp; 0xFF) ))
      </FormulaFrom>
      <pValue>ShadingCorrectionOffset_Reg</pValue>
      <Slope>Increasing</Slope>
    </IntConverter>
    <IntConverter Name="FFOffset_expr">
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <FormulaTo> (PIXEL_FORMAT = 0x1080001  )?  (0 - (FROM &lt;&lt; 2)) : ( 0 - (FROM))  </FormulaTo>
      <FormulaFrom> ( PIXEL_FORMAT = 0x1080001 )?  ( 0 - (TO &gt;&gt; 2)) : (0 - TO ) </FormulaFrom>
      <pValue>FFOffset_expr2</pValue>
      <Slope>Decreasing</Slope>
    </IntConverter>
    <IntSwissKnife Name="ShadingCorrectionOffsetMin">
      <pVariable Name="PIXEL_FORMAT">pPixelFormatReg</pVariable>
      <Formula> ( PIXEL_FORMAT = 0x1080001 )?   (0 - 63) : (0 - 254 ) </Formula>
    </IntSwissKnife>
    <Integer Name="ShadingCorrectionOffset">
      <ToolTip>Current Pixel offset</ToolTip>
      <Description>Offset value added to the pixel before the Gain multiplier.</Description>
      <DisplayName>Offset</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsAvailable>CoefficientValue_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>FFOffset_expr</pValue>
      <pMin>ShadingCorrectionOffsetMin</pMin>
    </Integer>
    <Register Name="ShadingCorrectionGainAll" NameSpace="Custom">
      <ToolTip>Shading Correction Pixel Multiplier</ToolTip>
      <Description>All pixels gain factor (multiplier).</Description>
      <DisplayName>All Shading Correction Gains</DisplayName>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x31A00000</Address>
      <pLength>SensorSize</pLength>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <pInvalidator>ShadingCorrectionGain_Reg</pInvalidator>
    </Register>
    <Register Name="ShadingCorrectionOffsetAll" NameSpace="Custom">
      <ToolTip>Shading Correction Pixel Offset</ToolTip>
      <Description>All pixels offset.</Description>
      <DisplayName>All Shading Correction Offsets</DisplayName>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x31700000</Address>
      <pLength>SensorSize</pLength>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <pInvalidator>ShadingCorrectionOffset_Reg</pInvalidator>
    </Register>
  </Group>

  <!-- ================  LUTControl  ================ -->
  <Group Comment="LUTControl">
    <Category Name="LUTControl" NameSpace="Standard">
      <ToolTip>Features in this section describe the Look-up table (LUT) realated features</ToolTip>
      <DisplayName>LUT Controls</DisplayName>
      <pFeature>LUTSelector</pFeature>
      <pFeature>LUTEnable</pFeature>
      <pFeature>LUTIndex</pFeature>
      <pFeature>LUTValue</pFeature>
    </Category>

    <Enumeration Name="LUTSelector" NameSpace="Standard">
      <ToolTip>Select the LUT to control</ToolTip>
      <Description>Select the LUT to control { Luminance=0 }.</Description>
      <DisplayName>LUT Selector</DisplayName>
      <Visibility>Expert</Visibility>
      <EnumEntry Name="Luminance">
        <Value>0</Value>
      </EnumEntry>
      <Value>0</Value>
      <pSelected>LUTEnable</pSelected>
      <pSelected>LUTIndex</pSelected>
    </Enumeration>
    <IntReg Name="pLutEnable">
      <ToolTip>User set selector register</ToolTip>
      <pIsLocked>NoShadingCalibration_or_UseSet_IsBussy</pIsLocked>
      <Address>0x30000060</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Boolean Name="LUTEnable" NameSpace="Standard">
      <ToolTip>Enable selected LUT</ToolTip>
      <Description>Enable the selected LUT { False, True }.</Description>
      <DisplayName>LUT Enable</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pLutEnable</pValue>
    </Boolean>
    <Integer Name="LUTIndex_Value" NameSpace="Custom">
      <Value>0</Value>
    </Integer>
    <Integer Name="LUTIndex" NameSpace="Standard">
      <ToolTip>LUT data index</ToolTip>
      <Description>LUT data index {0 to 255 for 8-bit LUT,  0 to 1023 for a 10-bit LUT}</Description>
      <DisplayName>LUT Index</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>LUTIndex_Value</pValue>
      <Min>0</Min>
      <Max>1023</Max>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
      <pSelected>LUTValue</pSelected>
    </Integer>
    <IntSwissKnife Name="LUTValue_Offset">
      <pVariable Name="OFFSET">LUTIndex_Value</pVariable>
      <Formula>(OFFSET / 2) *4</Formula>
    </IntSwissKnife>
    <IntConverter Name="LUTValue_expr">
      <pVariable Name="OFFSET">LUTIndex_Value</pVariable>
      <pVariable Name="VALUE">LUTValueReg</pVariable>
      <FormulaTo>
        (OFFSET &amp; 1)?
        (((FROM &lt;&lt; 16) &amp; 0xFFF0000) + (VALUE &amp; 0xFFF)):
        ((VALUE  &amp; 0xFFF0000) + ( FROM &amp; 0xFFF))
      </FormulaTo>
      <FormulaFrom> (OFFSET &amp; 1)? ((  TO &amp; 0xFFF0000) &gt;&gt; 16 ): TO &amp; 0xFFF </FormulaFrom>
      <pValue>LUTValueReg</pValue>
      <Slope>Increasing</Slope>
    </IntConverter>
    <IntReg Name="LUTValueReg">
      <ToolTip>User set selector register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x31000000</Address>
      <pAddress>LUTValue_Offset</pAddress>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>PersistenceLuminanceLut</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="LUTValue" NameSpace="Standard">
      <ToolTip>Data value at LUT index</ToolTip>
      <Description>Value of selected LUT element at the LUT index.</Description>
      <DisplayName>LUT Value</DisplayName>
      <Visibility>Guru</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>LUTValue_expr</pValue>
      <Min>0</Min>
      <Max>1023</Max>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
    </Integer>
  </Group>

  <!-- ================  TransportLayerControl  ================ -->
  <Group Comment="TransportLayerControl">
    <Category Name="TransportLayerControl" NameSpace="Standard">
      <ToolTip>Features related to GigE Vision specification</ToolTip>
      <DisplayName>GigE Vision</DisplayName>
      <pFeature>PayloadSize</pFeature>
      <pFeature>GevVersionMajor</pFeature>
      <pFeature>GevVersionMinor</pFeature>
      <pFeature>GevDeviceModeIsBigEndian</pFeature>
      <pFeature>GevDeviceModeCharacterSet</pFeature>
      <pFeature>GevInterfaceSelector</pFeature>
      <pFeature>GevMACAddress</pFeature>
      <pFeature>GevSupportedIPConfigurationLLA</pFeature>
      <pFeature>GevSupportedIPConfigurationDHCP</pFeature>
      <pFeature>GevSupportedIPConfigurationPersistentIP</pFeature>
      <pFeature>GevCurrentIPConfiguration</pFeature>
      <pFeature>GevCurrentIPAddress</pFeature>
      <pFeature>GevCurrentSubnetMask</pFeature>
      <pFeature>GevCurrentDefaultGateway</pFeature>
      <pFeature>GevPersistentIPAddress</pFeature>
      <pFeature>GevPersistentSubnetMask</pFeature>
      <pFeature>GevPersistentDefaultGateway</pFeature>
      <pFeature>GevFirstURL</pFeature>
      <pFeature>GevSecondURL</pFeature>
      <pFeature>GevNumberOfInterfaces</pFeature>
      <pFeature>GevMessageChannelCount</pFeature>
      <pFeature>GevStreamChannelCount</pFeature>
      <pFeature>GevSupportedOptionalCommandsUserDefinedName</pFeature>
      <pFeature>GevSupportedOptionalCommandsSerialNumber</pFeature>
      <pFeature>GevSupportedOptionalCommandsEVENTDATA</pFeature>
      <pFeature>GevSupportedOptionalCommandsEVENT</pFeature>
      <pFeature>GevSupportedOptionalCommandsPACKETRESEND</pFeature>
      <pFeature>GevSupportedOptionalCommandsWRITEMEM</pFeature>
      <pFeature>GevSupportedOptionalCommandsConcatenation</pFeature>
      <pFeature>GevHeartbeatTimeout</pFeature>
      <pFeature>GevTimestampTickFrequency</pFeature>
      <pFeature>GevTimestampControlLatch</pFeature>
      <pFeature>GevTimestampControlReset</pFeature>
      <pFeature>GevTimestampValue</pFeature>
      <pFeature>GevStreamChannelSelector</pFeature>
      <pFeature>GevSCPInterfaceIndex</pFeature>
      <pFeature>GevSCPSPacketSize</pFeature>
      <pFeature>GevSCPD</pFeature>
    </Category>

    <Integer Name="PayloadSize" NameSpace="Standard">
      <ToolTip>Payload Size in bytes</ToolTip>
      <Description>Size of the payload in bytes. This is the total number of bytes sent in the payload. No packet headers included.</Description>
      <DisplayName>Payload Size</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>pPayloadSize_value</pValue>
      <Representation>Linear</Representation>
    </Integer>
    <IntSwissKnife Name="pPayloadSize_value">
      <Visibility>Invisible</Visibility>
      <pVariable Name="HEIGHT">pAoiHeightReg</pVariable>
      <pVariable Name="WIDTH_BYTE">pLinePitch_value</pVariable>
      <Formula>WIDTH_BYTE * HEIGHT</Formula>
    </IntSwissKnife>
    <Integer Name="GevVersionMajor" NameSpace="Standard">
      <ToolTip>GigE Vision Major Version</ToolTip>
      <Description>Specifies the major version of the GigE Vision specification supported by this device.</Description>
      <DisplayName>GigE Vision Major Version</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_VersionMajor</pValue>
    </Integer>
    <MaskedIntReg Name="BootStrap_VersionMajor">
      <Description>GigE Vision Major Version</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <LSB>15</LSB>
      <MSB>0</MSB>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Integer Name="GevVersionMinor" NameSpace="Standard">
      <ToolTip>GigE Vision Minor Version</ToolTip>
      <Description>Specifies the minor version of the GigE Vision specification supported by this device.</Description>
      <DisplayName>GigE Vision Minor Version</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_VersionMinor</pValue>
    </Integer>
    <MaskedIntReg Name="BootStrap_VersionMinor">
      <Description>GigE Vision Minor Version</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <LSB>31</LSB>
      <MSB>16</MSB>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevDeviceModeIsBigEndian" NameSpace="Standard">
      <ToolTip>Bootstrap registers endianess</ToolTip>
      <Description>Endianess of Bootstrap registers (FALSE: Little-endian device, TRUE: Big-endian device)</Description>
      <DisplayName>GigE Vision is Device Big-endian</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_DeviceEndianess</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_DeviceEndianess" NameSpace="Custom">
      <Description>BootStrap Endianess</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x4</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <LSB>0</LSB>
      <MSB>0</MSB>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Enumeration Name="GevDeviceModeCharacterSet" NameSpace="Standard">
      <ToolTip>Boot strap strings character set</ToolTip>
      <Description>Describes the character set of all boot strap strings.</Description>
      <DisplayName>GigE Vision Character Set</DisplayName>
      <Visibility>Guru</Visibility>
      <EnumEntry Name="UTF8">
        <Value>1</Value>
      </EnumEntry>
      <pValue>BootStrap_CharacterSet</pValue>
    </Enumeration>
    <MaskedIntReg Name="BootStrap_CharacterSet">
      <Description>BootStrap CharacterSet</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x4</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <LSB>31</LSB>
      <MSB>24</MSB>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Integer Name="GevInterfaceSelector" NameSpace="Standard">
      <ToolTip>Network interface to configure</ToolTip>
      <Description>Index to the network interface to configure</Description>
      <DisplayName>GigE Vision Interface Selector</DisplayName>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0</Value>
      <pSelected>GevMACAddress</pSelected>
      <pSelected>GevSupportedIPConfigurationLLA</pSelected>
      <pSelected>GevSupportedIPConfigurationDHCP</pSelected>
      <pSelected>GevSupportedIPConfigurationPersistentIP</pSelected>
      <pSelected>GevCurrentIPConfiguration</pSelected>
      <pSelected>GevCurrentIPAddress</pSelected>
      <pSelected>GevCurrentSubnetMask</pSelected>
      <pSelected>GevCurrentDefaultGateway</pSelected>
      <pSelected>GevPersistentIPAddress</pSelected>
      <pSelected>GevPersistentSubnetMask</pSelected>
      <pSelected>GevPersistentDefaultGateway</pSelected>
    </Integer>
    <Integer Name="GevMACAddress" NameSpace="Standard">
      <ToolTip>48-bit MAC address of the selected interface</ToolTip>
      <Description>48-bit MAC address of the selected interface</Description>
      <DisplayName>Interface MACAddress</DisplayName>
      <Visibility>Beginner</Visibility>
      <pValue>MACAddress_Value</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntSwissKnife Name="MACAddress_Value">
      <pVariable Name="HIGH">BootStrap_MACAddress_High</pVariable>
      <pVariable Name="LOW">BootStrap_MACAddress_Low</pVariable>
      <Formula>(HIGH&lt;&lt; 32) | LOW</Formula>
    </IntSwissKnife>
    <MaskedIntReg Name="BootStrap_MACAddress_High">
      <Visibility>Invisible</Visibility>
      <Address>0x8</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <LSB>31</LSB>
      <MSB>16</MSB>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <IntReg Name="BootStrap_MACAddress_Low">
      <Visibility>Invisible</Visibility>
      <Address>0xc</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Boolean Name="GevSupportedIPConfigurationLLA" NameSpace="Standard">
      <ToolTip>Indicates if LLA mode is supported</ToolTip>
      <Description>Indicates if LLA (Auto-IP) is supported by the selected interface.</Description>
      <DisplayName>LLA Is Supported</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_SupportedLLA</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_SupportedLLA">
      <Description>LLA Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x10</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>29</Bit>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedIPConfigurationDHCP" NameSpace="Standard">
      <ToolTip>Indicates if DHCP is supported</ToolTip>
      <Description>Indicates if DHCP is supported by the selected interface.</Description>
      <DisplayName>DHCP Is Supported</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_SupportedDHCP</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_SupportedDHCP">
      <Description>DHCP Register</Description>
      <Address>0x10</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>30</Bit>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedIPConfigurationPersistentIP" NameSpace="Standard">
      <ToolTip>Indicates if Persistent IP is supported</ToolTip>
      <Description>Indicates if Persistent IP is supported by the selected interface.</Description>
      <DisplayName>Persistent IP Is Supported</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_SupportedPersistentIP</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_SupportedPersistentIP">
      <Description>PersistentIP Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x10</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>31</Bit>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Enumeration Name="GevCurrentIPConfiguration" NameSpace="Standard">
      <ToolTip>Current camera IP configuration</ToolTip>
      <Description>Current camera IP configuration of the selected interface.</Description>
      <DisplayName>Current Camera IP Configuration</DisplayName>
      <Visibility>Beginner</Visibility>
      <EnumEntry Name="LLA">
        <Value>4</Value>
      </EnumEntry>
      <EnumEntry Name="DHCP">
        <pIsAvailable>BootStrap_SupportedDHCP</pIsAvailable>
        <Value>6</Value>
      </EnumEntry>
      <EnumEntry Name="PersistentIP">
        <pIsAvailable>BootStrap_SupportedPersistentIP</pIsAvailable>
        <Value>5</Value>
      </EnumEntry>
      <pValue>BootStrap_CurrentIPConfiguration</pValue>
    </Enumeration>
    <IntReg Name="BootStrap_CurrentIPConfiguration">
      <Description>Current IP Configuration Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x14</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevCurrentIPAddress" NameSpace="Standard">
      <ToolTip>IP address of the selected interface</ToolTip>
      <Description>IP address of the selected interface</Description>
      <DisplayName>Current IP Address</DisplayName>
      <Visibility>Beginner</Visibility>
      <pValue>BootStrap_IPAddress</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_IPAddress">
      <Description>Current IP Address Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x24</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevCurrentSubnetMask" NameSpace="Standard">
      <ToolTip>Subnet mask of the selected interface</ToolTip>
      <Description>Subnet mask of the selected interface</Description>
      <DisplayName>Current Subnet Mask</DisplayName>
      <Visibility>Beginner</Visibility>
      <pValue>BootStrap_SubnetMask</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_SubnetMask">
      <Description>Current Subnet Mask Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x34</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevCurrentDefaultGateway" NameSpace="Standard">
      <ToolTip>Default gateway of the selected interface</ToolTip>
      <Description>Default gateway of the selected interface</Description>
      <DisplayName>Current Default Gateway</DisplayName>
      <Visibility>Beginner</Visibility>
      <pValue>BootStrap_Gateway</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_Gateway">
      <Description>Current Subnet Mask Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x44</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevPersistentIPAddress" NameSpace="Standard">
      <ToolTip>Persistent IP address for the selected interface</ToolTip>
      <Description>Persistent IP address for the selected interface</Description>
      <DisplayName>Persistent IP Address</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_PersistentIPAddress</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_PersistentIPAddress">
      <Description>Persistent IP Address Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x64c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevPersistentSubnetMask" NameSpace="Standard">
      <ToolTip>Persistent subnet mask for the selected interface</ToolTip>
      <Description>Persistent subnet mask for the selected interface</Description>
      <DisplayName>Persistent Subnet Mask</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_PersistentSubnetMask</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_PersistentSubnetMask">
      <Description>Persistent Subnet Mask Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x65c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevPersistentDefaultGateway" NameSpace="Standard">
      <ToolTip>Persistent default gateway for the selected interface</ToolTip>
      <Description>Persistent default gateway for the selected interface</Description>
      <DisplayName>Persistent Default Gateway</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_PersistentDefaultGateway</pValue>
      <Representation>HexNumber</Representation>
    </Integer>
    <IntReg Name="BootStrap_PersistentDefaultGateway">
      <Description>Persistent Default Gateway Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x66c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <StringReg Name="GevFirstURL" NameSpace="Standard">
      <ToolTip>First URL to XML device description file</ToolTip>
      <Description>NULL-terminated string providing the first URL to the XML device description file.</Description>
      <DisplayName>First URL</DisplayName>
      <Visibility>Guru</Visibility>
      <Address>0x200</Address>
      <Length>512</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <StringReg Name="GevSecondURL" NameSpace="Standard">
      <ToolTip>Second URL to the XML device description file</ToolTip>
      <Description>NULL-terminated string providing the second URL to the XML device description file.</Description>
      <DisplayName>Second URL</DisplayName>
      <Visibility>Guru</Visibility>
      <Address>0x400</Address>
      <Length>512</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
    </StringReg>
    <Integer Name="GevNumberOfInterfaces" NameSpace="Standard">
      <ToolTip>Number of device physical network interfaces</ToolTip>
      <Description>Indicates the number of physical network interfaces on this device.</Description>
      <DisplayName>Number of Interfaces</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_NumberOfInterfaces</pValue>
    </Integer>
    <IntReg Name="BootStrap_NumberOfInterfaces">
      <Description>Number Of Interfacesy Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x600</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevMessageChannelCount" NameSpace="Standard">
      <ToolTip>Number of message channels</ToolTip>
      <Description>Indicates the number of message channels supported by this device.</Description>
      <DisplayName>Number of Message Channel</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_MessageChannelCount</pValue>
    </Integer>
    <IntReg Name="BootStrap_MessageChannelCount">
      <Description>Number fo Message Channel Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x900</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevStreamChannelCount" NameSpace="Standard">
      <ToolTip>Number of stream channels</ToolTip>
      <Description>Indicates the number of stream channels supported by this device.</Description>
      <DisplayName>Number of Stream Channel</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_StreamChannelCount</pValue>
    </Integer>
    <IntReg Name="BootStrap_StreamChannelCount">
      <Description>Number of Stream Channel Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x904</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Boolean Name="GevSupportedOptionalCommandsUserDefinedName" NameSpace="Standard">
      <ToolTip>User-defined Name register support</ToolTip>
      <Description>Indicates if the User-defined Name register is supported.</Description>
      <DisplayName>User Defined Name Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_UserDefinedNameSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_UserDefinedNameSupported">
      <Description>User Defined Name Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>0</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsSerialNumber" NameSpace="Standard">
      <ToolTip>Serial Number register support</ToolTip>
      <Description>Indicates if the Serial Number register is supported.</Description>
      <DisplayName>Serial Number Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_SerialNumberSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_SerialNumberSupported">
      <Description>Serial Number Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>1</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsEVENTDATA" NameSpace="Standard">
      <ToolTip>EVENTDATA_CMD and EVENTDATA_ACK support</ToolTip>
      <Description>Indicates if EVENTDATA_CMD and EVENTDATA_ACK are supported.</Description>
      <DisplayName>EVENTDATA Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_EVENTDATASupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_EVENTDATASupported">
      <Description>EVENTDATA Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>27</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsEVENT" NameSpace="Standard">
      <ToolTip>EVENT_CMD and EVENT_ACK support</ToolTip>
      <Description>Indicates if EVENT_CMD and EVENT_ACK are supported.</Description>
      <DisplayName>EVENT Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_EVENTSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_EVENTSupported">
      <Description>EVENT Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>28</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsPACKETRESEND" NameSpace="Standard">
      <ToolTip>PACKETRESEND_CMD support</ToolTip>
      <Description>Indicates if PACKETRESEND_CMD is supported.</Description>
      <DisplayName>PACKETRESEND Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_PACKETRESENDSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_PACKETRESENDSupported">
      <Description>PACKETRESEND Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>29</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsWRITEMEM" NameSpace="Standard">
      <ToolTip>WRITEMEM_CMD and WRITEMEM_ACK support</ToolTip>
      <Description>Indicates if WRITEMEM_CMD and WRITEMEM_ACK are supported.</Description>
      <DisplayName>WRITEMEM Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_WRITEMEMSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_WRITEMEMSupported">
      <Description>WRITEMEM Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>30</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Boolean Name="GevSupportedOptionalCommandsConcatenation" NameSpace="Standard">
      <ToolTip>Multiple operations in a single message support</ToolTip>
      <Description>Indicates if multiple operations in a single message are supported.</Description>
      <DisplayName>Concatenation Supported</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_ConcatenationSupported</pValue>
    </Boolean>
    <MaskedIntReg Name="BootStrap_ConcatenationSupported">
      <Description>Concatenation Supported</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x0934</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Bit>31</Bit>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Integer Name="GevHeartbeatTimeout" NameSpace="Standard">
      <ToolTip>Heartbeat timeout ms)</ToolTip>
      <Description>Current heartbeat timeout in milliseconds</Description>
      <DisplayName>Heartbeat Timeout</DisplayName>
      <Visibility>Guru</Visibility>
      <pValue>BootStrap_GevHeartbeatTimeout</pValue>
      <Min>500</Min>
      <Max>65000</Max>
      <Inc>1</Inc>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="BootStrap_GevHeartbeatTimeout">
      <Description>Current heartbeat timeout in milliseconds</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x938</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevTimestampTickFrequency" NameSpace="Standard">
      <ToolTip>Number of timestamp clock ticks/sec</ToolTip>
      <Description>64-bit value indicating the number of timestamp clock ticks in 1 second.</Description>
      <DisplayName>Timestamp Frequency</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>GevTimestampTickFrequency_Value</pValue>
      <Representation>PureNumber</Representation>
    </Integer>
    <IntSwissKnife Name="GevTimestampTickFrequency_Value">
      <pVariable Name="HIGH">BootStrap_TimestampTickFrequencyHigh</pVariable>
      <pVariable Name="LOW">BootStrap_TimestampTickFrequencyLow</pVariable>
      <Formula>(HIGH&lt;&lt; 32) | LOW</Formula>
    </IntSwissKnife>
    <IntReg Name="BootStrap_TimestampTickFrequencyHigh">
      <Description>32-MSB of the timestamp Frequency</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x93c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntReg Name="BootStrap_TimestampTickFrequencyLow">
      <Description>32-LSB of the timestamp Frequency</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x940</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="GevTimestampControlLatch" NameSpace="Standard">
      <ToolTip>Latch current timestamp value</ToolTip>
      <Description>Latches the current timestamp value of the device.</Description>
      <DisplayName>Latch Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_GevTimestampControl</pValue>
      <CommandValue>2</CommandValue>
    </Command>
    <IntReg Name="BootStrap_GevTimestampControl">
      <Description>Timestamp Control Register</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x944</Address>
      <Length>4</Length>
      <AccessMode>WO</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="GevTimestampControlReset" NameSpace="Standard">
      <ToolTip>Reset timestamp count</ToolTip>
      <Description>Resets the timestamp count of the device.</Description>
      <DisplayName>Reset Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>BootStrap_GevTimestampControl</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <Integer Name="GevTimestampValue" NameSpace="Standard">
      <ToolTip>Latched Timestamp value</ToolTip>
      <Description>64-bit value of the timestamp. Value must first be latched using GevTimestampControlLatch.</Description>
      <DisplayName>Timestamp</DisplayName>
      <Visibility>Expert</Visibility>
      <pValue>GevTimestampValue_Value</pValue>
      <Representation>PureNumber</Representation>
    </Integer>
    <IntSwissKnife Name="GevTimestampValue_Value">
      <pVariable Name="HIGH">BootStrap_TimestampValueHigh</pVariable>
      <pVariable Name="LOW">BootStrap_TimestampValueLow</pVariable>
      <Formula>(HIGH&lt;&lt; 32) | LOW</Formula>
    </IntSwissKnife>
    <IntReg Name="BootStrap_TimestampValueHigh">
      <Description>32-MSB of the timestamp Value</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x948</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>BootStrap_GevTimestampControl</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntReg Name="BootStrap_TimestampValueLow">
      <Description>32-LSB of the timestamp Value</Description>
      <Visibility>Invisible</Visibility>
      <Address>0x94c</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>BootStrap_GevTimestampControl</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Integer Name="GevStreamChannelSelector" NameSpace="Standard">
      <ToolTip>Stream channel to configure</ToolTip>
      <Description>Indicate which stream channel to configure.</Description>
      <DisplayName>Stream Channel Selector</DisplayName>
      <Visibility>Expert</Visibility>
      <Value>0</Value>
      <Min>0</Min>
      <Max>0</Max>
      <pSelected>GevSCPInterfaceIndex</pSelected>
      <pSelected>GevSCPSPacketSize</pSelected>
      <pSelected>GevSCPD</pSelected>
    </Integer>
    <Integer Name="GevSCPInterfaceIndex" NameSpace="Standard">
      <ToolTip>Index of network interface</ToolTip>
      <Description>Index of network interface.</Description>
      <DisplayName>Stream Channel Interface Index</DisplayName>
      <Visibility>Guru</Visibility>
      <ImposedAccessMode>RO</ImposedAccessMode>
      <Value>0</Value>
    </Integer>
    <Integer Name="GevSCPSPacketSize" NameSpace="Standard">
      <ToolTip>Size of tream packet</ToolTip>
      <Description>The size of the stream packet to send on this channel.</Description>
      <DisplayName>Packet Size</DisplayName>
      <Visibility>Expert</Visibility>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <Streamable>Yes</Streamable>
      <pValue>pGevSCPSPacketSizeReg</pValue>
      <Min>512</Min>
      <Max>9216</Max>
      <Inc>4</Inc>
      <Representation>Linear</Representation>
    </Integer>
    <MaskedIntReg Name="pGevSCPSPacketSizeReg">
      <Address>0xd04</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <LSB>31</LSB>
      <MSB>16</MSB>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </MaskedIntReg>
    <Integer Name="GevSCPD" NameSpace="Standard">
      <ToolTip>Delay to insert between packets</ToolTip>
      <Description>Delay (in 1µs) to insert between each packet for this stream channel.</Description>
      <DisplayName>Inter-Packet Delay</DisplayName>
      <Visibility>Expert</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pGevSCPDReg</pValue>
      <Min>0</Min>
      <Max>65535</Max>
      <Representation>Linear</Representation>
    </Integer>
    <IntReg Name="pGevSCPDReg">
      <Address>0xd08</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  UserSetControl  ================ -->
  <Group Comment="UserSetControl">
    <Category Name="UserSetControl" NameSpace="Standard">
      <ToolTip>Features used to save camera settings to on-board non-volatile memory</ToolTip>
      <DisplayName>User Sets</DisplayName>
      <pFeature>UserSetDefaultSelector</pFeature>
      <pFeature>UserSetSelector</pFeature>
      <pFeature>UserSetLoad</pFeature>
      <pFeature>UserSetSave</pFeature>
    </Category>

    <Enumeration Name="UserSetSelector" NameSpace="Standard">
      <ToolTip>Select feature User Set to configure</ToolTip>
      <Description>Selects the feature User Set to configure.</Description>
      <DisplayName>User Set Selector</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Factory">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="UserSet1">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pUserSetSelectorReg</pValue>
      <pSelected>UserSetLoad</pSelected>
      <pSelected>UserSetSave</pSelected>
    </Enumeration>
    <IntReg Name="pUserSetSelectorReg">
      <ToolTip>User set selector register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000064</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Command Name="UserSetLoad" NameSpace="Standard">
      <ToolTip>Load User Set specified by UserSetSelector and make active</ToolTip>
      <Description>Loads the User Set specified by UserSetSelector to the camera and makes it active.</Description>
      <DisplayName>User Set Load</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pUserSetLoadReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pUserSetLoadReg">
      <ToolTip>User set load register</ToolTip>
      <pIsLocked>UseSet_IsSaving</pIsLocked>
      <Address>0x10000068</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="UserSetSave_IsAvailable">
      <Visibility>Invisible</Visibility>
      <pVariable Name="SELECTOR">pUserSetSelectorReg</pVariable>
      <Formula>((SELECTOR = 0) ? 0 : 1)</Formula>
    </IntSwissKnife>
    <Command Name="UserSetSave" NameSpace="Standard">
      <ToolTip>Save User Set specified by UserSetSelector to the camera</ToolTip>
      <Description>Saves the User Set specified by UserSetSelector to the camera.</Description>
      <DisplayName>User Set Save</DisplayName>
      <pIsAvailable>UserSetSave_IsAvailable</pIsAvailable>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <pValue>pUserSetSaveReg</pValue>
      <CommandValue>1</CommandValue>
    </Command>
    <IntReg Name="pUserSetSaveReg">
      <ToolTip>User set save register</ToolTip>
      <pIsLocked>UseSet_IsLoading</pIsLocked>
      <Address>0x1000006C</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <Enumeration Name="UserSetDefaultSelector" NameSpace="Standard">
      <ToolTip>Select feature User Set to load on reset</ToolTip>
      <Description>Selects the feature User Set to load at camera reset.</Description>
      <DisplayName>User Set Default Selector</DisplayName>
      <pIsLocked>TLParamsLocked</pIsLocked>
      <EnumEntry Name="Factory">
        <Value>0</Value>
      </EnumEntry>
      <EnumEntry Name="UserSet1">
        <Value>1</Value>
      </EnumEntry>
      <pValue>pUserSetDefaultSelectorReg</pValue>
    </Enumeration>
    <IntReg Name="pUserSetDefaultSelectorReg">
      <ToolTip>User set default selector register</ToolTip>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Address>0x10000070</Address>
      <Length>4</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="UseSet_IsBussy">
      <pVariable Name="LOAD_STATUS">UseSet_IsLoading</pVariable>
      <pVariable Name="SAVE_STATUS">UseSet_IsSaving</pVariable>
      <Formula>((LOAD_STATUS = 1 ) | (SAVE_STATUS = 1) )?1:0</Formula>
    </IntSwissKnife>
    <IntSwissKnife Name="UseSet_IsSaving">
      <pVariable Name="SAVE_STATUS">pUserSetSaveStatusReg</pVariable>
      <Formula>(SAVE_STATUS = 1)?1:0</Formula>
    </IntSwissKnife>
    <IntReg Name="pUserSetSaveStatusReg">
      <Address>0x1000006C</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetSaveReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
    <IntSwissKnife Name="UseSet_IsLoading">
      <pVariable Name="LOAD_STATUS">pUserSetLoadStatusReg</pVariable>
      <Formula>(LOAD_STATUS = 1)?1:0</Formula>
    </IntSwissKnife>
    <IntReg Name="pUserSetLoadStatusReg">
      <Address>0x10000068</Address>
      <Length>4</Length>
      <AccessMode>RO</AccessMode>
      <pPort>Device</pPort>
      <pInvalidator>pUserSetLoadReg</pInvalidator>
      <Sign>Unsigned</Sign>
      <Endianess>BigEndian</Endianess>
    </IntReg>
  </Group>

  <!-- ================  Persistence  ================ -->
  <Group Comment="Persistence">
    <Category Name="Persistence">
      <ToolTip>Persistence feature list</ToolTip>
      <Visibility>Invisible</Visibility>
      <pFeature>PersistenceAoiWidthReg</pFeature>
      <pFeature>PersistenceAoiHeightReg</pFeature>
      <pFeature>PersistenceAoiLeftReg</pFeature>
      <pFeature>PersistenceAoiTopReg</pFeature>
      <pFeature>PersistenceHorizontalBinningReg</pFeature>
      <pFeature>PersistenceVerticalBinningReg</pFeature>
      <pFeature>PersistencePixelFormatReg</pFeature>
      <pFeature>PersistenceTestImageSelectorReg</pFeature>
      <pFeature>PersistenceAcqFrameCount</pFeature>
      <pFeature>PersistenceFrameRateReg</pFeature>
      <pFeature>PersistenceTriggerModeReg</pFeature>
      <pFeature>PersistenceTriggerSourceReg</pFeature>
      <pFeature>PersistenceTriggerDelayReg</pFeature>
      <pFeature>PersistenceShutterModeReg</pFeature>
      <pFeature>PersistenceExposureAlignmentReg</pFeature>
      <pFeature>PersistenceExposureDelayReg</pFeature>
      <pFeature>PersistenceShutterReg</pFeature>
      <pFeature>PersistenceEventSelector</pFeature>
      <pFeature>PersistenceEventNotificationReg</pFeature>
      <pFeature>PersistenceGainReg</pFeature>
      <pFeature>PersistenceBlackLevelReg</pFeature>
      <pFeature>PersistenceGevConterSource</pFeature>
      <pFeature>PersistenceInput_first</pFeature>
      <pFeature>PersistenceInput_second</pFeature>
      <pFeature>PersistenceOutput</pFeature>
      <pFeature>PersistenceLuminanceLut</pFeature>
      <pFeature>PersistenceLutEnableReg</pFeature>
      <pFeature>CounterResetModeReg</pFeature>
      <pFeature>CounterResetLineReg</pFeature>
    </Category>

    <Integer Name="PersistenceAoiWidthReg" NameSpace="Custom">
      <ToolTip>AOI Width Register for Persistence</ToolTip>
      <Description>AOI Width Register for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pAoiWidthReg</pValue>
    </Integer>
    <Integer Name="PersistenceAoiHeightReg" NameSpace="Custom">
      <ToolTip>AOI Height Register for Persistence</ToolTip>
      <Description>AOI Height Register for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pAoiHeightReg</pValue>
    </Integer>
    <Integer Name="PersistenceAoiLeftReg" NameSpace="Custom">
      <ToolTip>AOI Left Register for Persistence</ToolTip>
      <Description>AOI Left Register for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pAoiLeftReg</pValue>
    </Integer>
    <Integer Name="PersistenceAoiTopReg" NameSpace="Custom">
      <ToolTip>AOI Top Register for Persistence</ToolTip>
      <Description>AOI Top Register for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pAoiTopReg</pValue>
    </Integer>
    <Integer Name="PersistenceHorizontalBinningReg" NameSpace="Custom">
      <ToolTip>AOI Horizontal Binning for Persistence</ToolTip>
      <Description>AOI Horizontal Binning for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pHorizontalBinningReg</pValue>
    </Integer>
    <Integer Name="PersistenceVerticalBinningReg" NameSpace="Custom">
      <ToolTip>AOI Vertical Binning for Persistence</ToolTip>
      <Description>AOI Vertical Binning for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pVerticalBinningReg</pValue>
    </Integer>
    <Integer Name="PersistencePixelFormatReg" NameSpace="Custom">
      <ToolTip>AOI Pixel Format for Persistence</ToolTip>
      <Description>?AOI Pixel Format for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pPixelFormatReg</pValue>
    </Integer>
    <Integer Name="PersistenceTestImageSelectorReg" NameSpace="Custom">
      <ToolTip>Test Image Selector for Persistence</ToolTip>
      <Description>Test Image Selector for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pTestImageSelectorReg</pValue>
    </Integer>
    <Integer Name="PersistenceAcqFrameCount" NameSpace="Custom">
      <ToolTip>Acquisition Frame Count Register for Persistence</ToolTip>
      <Description>Acquisition Frame Count Register for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pNumFramesReg</pValue>
    </Integer>
    <Integer Name="PersistenceFrameRateReg" NameSpace="Custom">
      <ToolTip>Frame Rate for Persistence</ToolTip>
      <Description>Frame Rate for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pFrameRateReg</pValue>
    </Integer>
    <Integer Name="PersistenceTriggerModeReg" NameSpace="Custom">
      <ToolTip>Trigger Mode for Persistence</ToolTip>
      <Description>Trigger Mode for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pTriggerModeReg</pValue>
    </Integer>
    <Integer Name="PersistenceTriggerSourceReg" NameSpace="Custom">
      <ToolTip>Trigger Source for Persistence</ToolTip>
      <Description>Trigger Source for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pTriggerSourceReg</pValue>
    </Integer>
    <Integer Name="PersistenceTriggerDelayReg" NameSpace="Custom">
      <ToolTip>Trigger Delay for Persistence</ToolTip>
      <Description>Trigger Delay for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pTriggerDelayReg</pValue>
    </Integer>
    <Integer Name="PersistenceShutterModeReg" NameSpace="Custom">
      <ToolTip>Shutter Mode for Persistence</ToolTip>
      <Description>Shutter Mode for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pShutterModeReg</pValue>
    </Integer>
    <Integer Name="PersistenceExposureAlignmentReg" NameSpace="Custom">
      <ToolTip>Exposure Alignment for Persistence</ToolTip>
      <Description>Exposure Alignment for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pExposureAlignmentReg</pValue>
    </Integer>
    <Integer Name="PersistenceExposureDelayReg" NameSpace="Custom">
      <ToolTip>Exposure Delay for Persistence</ToolTip>
      <Description>Exposure Delay for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <pValue>pTriggerDelayReg</pValue>
    </Integer>
    <Integer Name="PersistenceShutterReg" NameSpace="Custom">
      <ToolTip>Shutter for Persistence</ToolTip>
      <Description>Shutter for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pShutterReg</pValue>
    </Integer>
    <Enumeration Name="PersistenceEventSelector" NameSpace="Custom">
      <ToolTip>Event Selector for Persistence</ToolTip>
      <Description>Event Selector for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <EnumEntry Name="FrameTrigger">
        <Value>2</Value>
      </EnumEntry>
      <EnumEntry Name="ExposureStart">
        <Value>3</Value>
      </EnumEntry>
      <EnumEntry Name="ExposureEnd">
        <Value>4</Value>
      </EnumEntry>
      <EnumEntry Name="InvalidFrameTrigger">
        <Value>0x9008</Value>
      </EnumEntry>
      <EnumEntry Name="AcquisitionEnd">
        <Value>0x9003</Value>
      </EnumEntry>
      <pValue>pEventSelectorReg</pValue>
      <pSelected>PersistenceEventNotificationReg</pSelected>
    </Enumeration>
    <Integer Name="PersistenceEventNotificationReg" NameSpace="Custom">
      <ToolTip>Event Notification for Persistence</ToolTip>
      <Description>Event Notification for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pEventNotificationReg</pValue>
    </Integer>
    <Integer Name="PersistenceGainReg" NameSpace="Custom">
      <ToolTip>Gain for Persistence</ToolTip>
      <Description>Gain for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pGainReg</pValue>
    </Integer>
    <Integer Name="PersistenceBlackLevelReg" NameSpace="Custom">
      <ToolTip>Black Level for Persistence</ToolTip>
      <Description>Black Level for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pOffsetReg</pValue>
    </Integer>
    <Register Name="PersistenceGevConterSource" NameSpace="Custom">
      <ToolTip>GevConterSource for Persistence</ToolTip>
      <Description>GevConterSource for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x30001090</Address>
      <Length>8</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
    </Register>
    <Register Name="PersistenceInput_first" NameSpace="Custom">
      <ToolTip>First input group</ToolTip>
      <Description>First input group</Description>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x30000040</Address>
      <Length>8</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
    </Register>
    <Register Name="PersistenceInput_second" NameSpace="Custom">
      <ToolTip>First input group</ToolTip>
      <Description>First input group</Description>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x30000050</Address>
      <Length>8</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
    </Register>
    <Register Name="PersistenceOutput" NameSpace="Custom">
      <ToolTip>First input group</ToolTip>
      <Description>First input group</Description>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x30000068</Address>
      <Length>48</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
    </Register>
    <Register Name="PersistenceLuminanceLut" NameSpace="Custom">
      <ToolTip>Persistence Luminance Lut</ToolTip>
      <Description>Persistence Luminance Lut</Description>
      <Visibility>Invisible</Visibility>
      <pIsLocked>UseSet_IsBussy</pIsLocked>
      <Streamable>Yes</Streamable>
      <Address>0x31000000</Address>
      <Length>2048</Length>
      <AccessMode>RW</AccessMode>
      <pPort>Device</pPort>
      <Cachable>NoCache</Cachable>
    </Register>
    <Integer Name="PersistenceLutEnableReg" NameSpace="Custom">
      <ToolTip>Lut Enable for Persistence</ToolTip>
      <Description>Lut Enable for Persistence</Description>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>pLutEnable</pValue>
    </Integer>
    <Integer Name="PersistenceShadingCalibrationEnable" NameSpace="Custom">
      <ToolTip>Persistence Luminance Lut</ToolTip>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>ShadingCorrectionEnable_Reg</pValue>
    </Integer>
    <Integer Name="PersistencReverseX" NameSpace="Custom">
      <ToolTip>Persistence Horizontal Flip</ToolTip>
      <Visibility>Invisible</Visibility>
      <Streamable>Yes</Streamable>
      <pValue>ReverseX_Reg</pValue>
    </Integer>
  </Group>

  <!-- ================  TLParamsLocked_Group  ================ -->
  <Group Comment="GenICamAccess">
    <Category Name="GenICamAccess" NameSpace="Standard">
      <ToolTip>GenICam specific features</ToolTip>
      <Visibility>Invisible</Visibility>
      <pFeature>TLParamsLocked</pFeature>
    </Category>

    <Integer Name="TLParamsLocked">
      <ToolTip>Features locked during acquisition</ToolTip>
      <Description>Flag to indicate if features are locked during acquisition.</Description>
      <Visibility>Invisible</Visibility>
      <Value>0</Value>
      <Min>0</Min>
      <Max>1</Max>
    </Integer>
    <IntSwissKnife Name="NOT_TLParamsLocked">
      <ToolTip>Negation of the TLParamsLocked value</ToolTip>
      <Visibility>Invisible</Visibility>
      <pVariable Name="TLPL">TLParamsLocked</pVariable>
      <Formula>(TLPL = 0) ? 1 : 0</Formula>
    </IntSwissKnife>
  </Group>

  <Port Name="Device">
    <ToolTip>Access to GigE Vision device</ToolTip>
  </Port>
  <Port Name="EventFrameTriggerPort">
    <EventID>0002</EventID>
  </Port>
  <Port Name="EventExposureStartPort">
    <EventID>0003</EventID>
  </Port>
  <Port Name="EventExposureEndPort">
    <EventID>0004</EventID>
  </Port>
  <Port Name="EventReadoutStartPort">
    <EventID>9001</EventID>
  </Port>
  <Port Name="EventReadoutEndPort">
    <EventID>9002</EventID>
  </Port>
  <Port Name="EventAcquisitionEndPort">
    <EventID>9003</EventID>
  </Port>
  <Port Name="EventLine1Port">
    <EventID>9004</EventID>
  </Port>
  <Port Name="EventLine2Port">
    <EventID>9005</EventID>
  </Port>
  <Port Name="EventLine3Port">
    <EventID>9006</EventID>
  </Port>
  <Port Name="EventLine4Port">
    <EventID>9007</EventID>
  </Port>
  <Port Name="EventInvalidTriggerPort">
    <EventID>9008</EventID>
  </Port>
  <Port Name="EventFrameSkippedPort">
    <EventID>9009</EventID>
  </Port>
</RegisterDescription>
