Summary

Barco LCD VP laser projector supporting both RS-232 serial and TCP/IP control via JSON-RPC 2.0. The projector exposes a comprehensive property/method/signal API for controlling power, source selection, image adjustment, warping, blending, and system diagnostics. Port 9090 for TCP; RS-232 at 19200/8/N/1. File upload/download (warp grids, blend masks, EDID, firmware, test patterns) uses HTTP POST/GET to /api/<endpoint>/file/transfer.

Transport

protocols:
  - tcp
  - serial
  - http
addressing:
  port: 9090  # stated: "service is available on port number 9090" (TCP JSON-RPC)
  base_url: "http://{host}/api"  # HTTP file-transfer endpoints (POST/GET). Port UNRESOLVED - source omits it.
serial:
  baud_rate: 19200  # stated: "Baud rate | 19200"
  data_bits: 8      # stated: "Data bits | 8"
  parity: none      # stated: "Parity | None"
  stop_bits: 1      # stated: "Stop bits | 1"
  flow_control: none  # stated: "Flow control | None"
auth:
  type: optional  # stated: "Authentication is only necessary when a higher level than normal end user is required"

Traits

- powerable       # system.poweron / system.poweroff present
- queryable       # property.get, environment.getcontrolblocks, system.state queries present
- routable        # image.window.main.source property.set for input selection present
- levelable       # image.brightness, image.contrast, image.saturation, etc. present

Actions

# ============ Existing entries (preserved) ============
- id: system_poweron
  label: Power On
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
  params: []
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "system.poweron"}

- id: system_poweroff
  label: Power Off
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
  params: []
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "system.poweroff"}

- id: property_set
  label: Set Property
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set"}'
  params:
    - name: property
      type: string
      description: Dot-notation property path (e.g. "image.window.main.source")
    - name: value
      type: any
      description: New value for the property
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "property.set", "params": {"property": "...", "value": ...}}
    Best practice: wait for confirmation before setting the same property again.

- id: property_get
  label: Get Property
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get"}'
  params:
    - name: property
      type: string
      description: Dot-notation property path (or array of paths)
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "property.get", "params": {"property": "..."}}

- id: authenticate
  label: Authenticate
  kind: action
  command: '{"jsonrpc": "2.0", "method": "authenticate"}'
  params:
    - name: code
      type: integer
      description: Secret pass code for elevated access level
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "authenticate", "params": {"code": ...}}
    Only needed for access levels higher than normal end user.

- id: system_gotoeco
  label: Set ECO Mode
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.gotoeco"}'
  params: []

- id: system_gotoready
  label: Set Ready Mode
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.gotoready"}'
  params: []

- id: system_reboot
  label: Reboot
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.reboot"}'
  params: []
  description: Reboots the projector; powers off first.

- id: system_reset
  label: Reset Domain
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.reset"}'
  params:
    - name: domains
      type: array
      description: Array of domain names to reset (e.g. ["ImageSource", "ImageWarp"])

- id: system_resetall
  label: Reset All Domains
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.resetall"}'
  params: []

- id: image_source_list
  label: List Sources
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.list"}'
  params: []
  description: Returns array of available source names (e.g. ["DVI 1", "HDMI", "DisplayPort 1"])

- id: image_connector_list
  label: List Connectors
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.connector.list"}'
  params: []
  description: Returns array of available connector names

- id: environment_getcontrolblocks
  label: Get Environment Sensors
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks"}'
  params:
    - name: type
      type: string
      description: Sensor type (e.g. "Sensor", "Filter", "Controller")
    - name: valuetype
      type: string
      description: Value type (e.g. "Temperature", "Speed", "Voltage", "Current", "Power")

- id: optics_zoom_runforward
  label: Zoom Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.runforward"}'
  params: []

- id: optics_zoom_runreverse
  label: Zoom Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.runreverse"}'
  params: []

- id: optics_zoom_stop
  label: Zoom Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.stop"}'
  params: []

- id: optics_focus_runforward
  label: Focus Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.runforward"}'
  params: []

- id: optics_focus_runreverse
  label: Focus Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.runreverse"}'
  params: []

- id: optics_focus_stop
  label: Focus Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.stop"}'
  params: []

- id: optics_shutter_toggle
  label: Toggle Shutter
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.shutter.toggle"}'
  params: []

- id: optics_shifttocenter
  label: Lens Shift to Center
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.shifttocenter"}'
  params: []
  description: Shift lens to center of allowed shift range.

- id: keydispatcher_sendclickevent
  label: Send Key Click Event
  kind: action
  command: '{"jsonrpc": "2.0", "method": "keydispatcher.sendclickevent"}'
  params:
    - name: key
      type: string
      description: 'Key enum (e.g. "RC_POWER_ON", "RC_SHUTTER_OPEN", "KP_MENU")'

- id: ui_menu
  label: Toggle OSD Menu
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "ui.menu"}}'
  params:
    - name: show
      type: boolean
      description: true to show, false to hide

- id: ui_osd
  label: Toggle OSD
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "ui.osd"}}'
  params:
    - name: enable
      type: boolean
      description: true to enable OSD

# ============ Added in upgrade pass ============

# --- Core JSON-RPC API methods (Service API / Signals / Introspection) ---
- id: property_subscribe
  label: Subscribe to Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe"}'
  params:
    - name: property
      type: string
      description: Property path or array of paths to observe
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "..."}}

- id: property_unsubscribe
  label: Unsubscribe from Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.unsubscribe"}'
  params:
    - name: property
      type: string
      description: Property path or array of paths
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "..."}}

- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.subscribe"}'
  params:
    - name: signal
      type: string
      description: Signal name or array of names (e.g. "modelupdated", "image.processing.warp.gridchanged")
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "..."}}

- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe"}'
  params:
    - name: signal
      type: string
      description: Signal name or array of names
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "..."}}

- id: introspect
  label: Introspect Object Metadata
  kind: query
  command: '{"jsonrpc": "2.0", "method": "introspect"}'
  params:
    - name: object
      type: string
      description: Object name in dot notation (default/empty introspects everything)
      required: false
    - name: recursive
      type: boolean
      description: If false, only object names listed (one level). Default true.
      required: false
  description: |
    JSON-RPC: {"jsonrpc": "2.0", "method": "introspect", "params": {"object": "...", "recursive": true}}

# --- DMX ---
- id: dmx_listchannels
  label: List DMX Channels
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listchannels"}'
  params: []
  description: Returns list of available channel names.

- id: dmx_listmodes
  label: List DMX Modes
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listmodes"}'
  params: []
  description: Returns list of all DMX modes.

# --- Environment ---
- id: environment_getalarminfo
  label: Get Alarm Info
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo"}'
  params: []
  description: Returns alarm info array (severity, timestamp, source, description, custommessage).

# --- Firmware ---
- id: firmware_listcomponents
  label: List Firmware Components
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents"}'
  params: []
  description: Lists names of all managed firmware components.

- id: firmware_listcomponentversionstatus
  label: List Firmware Component Version Status
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus"}'
  params: []
  description: Lists firmware components with available/running version and upgrade status.

- id: firmware_schedulecomponentupgrade
  label: Schedule Component Upgrade
  kind: action
  command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade"}'
  params: []
  description: Force a component upgrade at the following reboot.

# --- Illumination ---
- id: illumination_clo_engage
  label: Engage Constant Light Output
  kind: action
  command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage"}'
  params: []
  description: Engage CLO at the current light level.

- id: illumination_laser_getserialnumber
  label: Get Laser Serial Number
  kind: query
  command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber"}'
  params: []

# --- Color management ---
- id: image_color_p7_custom_copypresettocustom
  label: Copy Color Preset to Custom
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom"}'
  params:
    - name: presetname
      type: string

- id: image_color_p7_custom_resetpreset
  label: Reset Color Preset
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset"}'
  params:
    - name: presetname
      type: string
  description: Reset preset back to its default values.

- id: image_color_p7_custom_resettonative
  label: Reset Color to Native
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative"}'
  params: []

- id: image_color_rgbmode_nextrgbmode
  label: Next RGB Mode
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode"}'
  params: []
  description: Cycles to the next RGB mode.

# --- Connectors / sources ---
- id: image_connector_edid_list
  label: List Connector EDID Selections
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.connector.{connector}.edid.list"}'
  params:
    - name: connector
      type: string
      description: 'Connector object name (e.g. "l1displayport", "l1hdmi", "l2displayporta")'
  description: |
    Per-connector methods documented: image.connector.l1displayport.edid.list,
    image.connector.l1hdbaset1.edid.list, image.connector.l1hdbaset2.edid.list,
    image.connector.l1hdmi.edid.list, image.connector.l2displayporta.edid.list,
    image.connector.l2displayportb.edid.list, image.connector.l2displayportc.edid.list,
    image.connector.l2displayportd.edid.list

- id: image_source_listconnectors
  label: List Connectors for Source
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.{source}.listconnectors"}'
  params:
    - name: source
      type: string
      description: 'Source object name (e.g. "l1displayport", "l1hdmi", "l2quaddp")'
  description: |
    Per-source methods documented: image.source.l1displayport.listconnectors,
    image.source.l1hdbaset1.listconnectors, image.source.l1hdbaset2.listconnectors,
    image.source.l1hdmi.listconnectors, image.source.l1quadsdi.listconnectors,
    image.source.l1sdia.listconnectors, image.source.l1sdib.listconnectors,
    image.source.l1sdic.listconnectors, image.source.l1sdid.listconnectors,
    image.source.l2displayporta.listconnectors, image.source.l2displayportb.listconnectors,
    image.source.l2displayportc.listconnectors, image.source.l2displayportd.listconnectors,
    image.source.l2dualdpab.listconnectors, image.source.l2dualdpac.listconnectors,
    image.source.l2dualdpbd.listconnectors, image.source.l2dualdpcd.listconnectors,
    image.source.l2dualheaddpac.listconnectors, image.source.l2dualheaddpbd.listconnectors,
    image.source.l2dualheaddualdpabcd.listconnectors, image.source.l2quadcolumndp.listconnectors,
    image.source.l2quaddp.listconnectors

- id: image_display_listdisplaymodes
  label: List Display Modes
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.display.listdisplaymodes"}'
  params: []
  description: 'Returns enum list: "Mono" "AutoStereo" "ActiveStereo" "NightVision" "IGPixelShift".'

- id: image_resolution_list
  label: List Resolutions
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.resolution.list"}'
  params: []
  description: Returns array of resolution strings.

- id: image_window_list
  label: List Windows
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.window.list"}'
  params: []

- id: image_stereo_listdarktime
  label: List Stereo Darktime Values
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.stereo.listdarktime"}'
  params: []
  description: Returns array of darktime values in microseconds.

# --- Black level ---
- id: image_processing_blacklevel_basicblacklevel_getblacklevelarea
  label: Get Black Level Area
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blacklevel.basicblacklevel.getblacklevelarea"}'
  params:
    - name: resolution_width
      type: float
    - name: resolution_height
      type: float
  description: Returns four boxes describing the black level edges.

- id: image_processing_blacklevel_basicblacklevel_getwarpedblacklevelarea
  label: Get Warped Black Level Area
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blacklevel.basicblacklevel.getwarpedblacklevelarea"}'
  params:
    - name: resolution_width
      type: float
    - name: resolution_height
      type: float

- id: image_processing_blacklevel_file_delete
  label: Delete Black Level File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.processing.blacklevel.file.delete"}'
  params:
    - name: filename
      type: string

- id: image_processing_blacklevel_file_list
  label: List Black Level Files
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blacklevel.file.list"}'
  params: []

# --- Blend ---
- id: image_processing_blend_basicblend_getblendarea
  label: Get Blend Area
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blend.basicblend.getblendarea"}'
  params:
    - name: resolution_width
      type: float
    - name: resolution_height
      type: float

- id: image_processing_blend_basicblend_getwarpedblendarea
  label: Get Warped Blend Area
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blend.basicblend.getwarpedblendarea"}'
  params:
    - name: resolution_width
      type: float
    - name: resolution_height
      type: float

- id: image_processing_blend_file_delete
  label: Delete Blend File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.processing.blend.file.delete"}'
  params:
    - name: filename
      type: string

- id: image_processing_blend_file_list
  label: List Blend Files
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.blend.file.list"}'
  params: []

# --- Warp ---
- id: image_processing_warp_file_delete
  label: Delete Warp File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.processing.warp.file.delete"}'
  params:
    - name: filename
      type: string

- id: image_processing_warp_file_list
  label: List Warp Files
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warp.file.list"}'
  params: []

- id: image_processing_warp_fourcorners_getscaledcorners
  label: Get Scaled Four Corners
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warp.fourcorners.getscaledcorners"}'
  params:
    - name: resolution
      type: object
      description: '{x: int, y: int}'
  description: Returns corners scaled to the given resolution.

- id: image_processing_warp_warpscaledpoints
  label: Warp Scaled Points
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warp.warpscaledpoints"}'
  params:
    - name: points
      type: array
      description: Array of {X: float, Y: float}
    - name: resolution
      type: object
      description: '{X: float, Y: float}'
  description: Returns warped equivalents of the given points.

- id: image_processing_warpgrid_getgrid
  label: Get Warp Grid
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warpgrid.getgrid"}'
  params: []
  description: Returns grid points as normalized and relative [{x: float, y: float}].

- id: image_processing_warpgrid_getgridsize
  label: Get Warp Grid Size
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warpgrid.getgridsize"}'
  params: []
  description: Returns {x: int, y: int}.

- id: image_processing_warpgrid_getscaledgrid
  label: Get Scaled Warp Grid
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.processing.warpgrid.getscaledgrid"}'
  params:
    - name: resolution
      type: object
      description: '{x: int, y: int}'

# --- Test patterns ---
- id: image_testpattern_list
  label: List Test Patterns
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.testpattern.list"}'
  params: []
  description: Returns patterns [{name, location, id, above, internal, properties}].

- id: image_testpattern_setproperties
  label: Set Test Pattern Properties
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.testpattern.setproperties"}'
  params:
    - name: id
      type: string
    - name: properties
      type: array
      description: Array of {key, value}

- id: image_testpattern_file_list
  label: List Custom Test Pattern Files
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.testpattern.file.list"}'
  params: []

- id: image_testpattern_file_delete
  label: Delete Test Pattern File
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.testpattern.file.delete"}'
  params:
    - name: filename
      type: string

# --- Key dispatcher ---
- id: keydispatcher_sendpressevent
  label: Send Key Press Event
  kind: action
  command: '{"jsonrpc": "2.0", "method": "keydispatcher.sendpressevent"}'
  params:
    - name: key
      type: string
      description: 'Key enum (same set as sendclickevent: RC_*, KP_*)'

- id: keydispatcher_sendreleaseevent
  label: Send Key Release Event
  kind: action
  command: '{"jsonrpc": "2.0", "method": "keydispatcher.sendreleaseevent"}'
  params:
    - name: key
      type: string
      description: 'Key enum (same set as sendclickevent: RC_*, KP_*)'

# --- LED ---
- id: led_activity
  label: Activate LEDs
  kind: action
  command: '{"jsonrpc": "2.0", "method": "led.activity"}'
  params: []
  description: Activates LEDs when enabled and restarts the LED timeout counter.

- id: led_list
  label: List LEDs
  kind: query
  command: '{"jsonrpc": "2.0", "method": "led.list"}'
  params: []

# --- Light measurement ---
- id: lightmeasurement_getlightoutput
  label: Get Light Output
  kind: query
  command: '{"jsonrpc": "2.0", "method": "lightmeasurement.getlightoutput"}'
  params: []
  description: Returns lumens (int).

# --- Network ---
- id: network_list
  label: List Network Devices
  kind: query
  command: '{"jsonrpc": "2.0", "method": "network.list"}'
  params: []
  description: Returns logical device ids e.g. ["wired1", "wifi1"].

# --- Notification management ---
- id: notification_dismiss
  label: Dismiss Notification
  kind: action
  command: '{"jsonrpc": "2.0", "method": "notification.dismiss"}'
  params:
    - name: id
      type: string
    - name: response
      type: string
      description: 'Enum: "NONE" "OK" "CANCEL" "IGNORE" "YES" "NO" "SUPPRESS"'

- id: notification_list
  label: List Active Notifications
  kind: query
  command: '{"jsonrpc": "2.0", "method": "notification.list"}'
  params: []
  description: Returns notifications [{severity, id, code, timestamp, message, timeout, actions}].

- id: notification_listsuppressed
  label: List Suppressed Notification Codes
  kind: query
  command: '{"jsonrpc": "2.0", "method": "notification.listsuppressed"}'
  params: []

- id: notification_log
  label: Get Notification Log
  kind: query
  command: '{"jsonrpc": "2.0", "method": "notification.log"}'
  params:
    - name: minimumseverity
      type: string
      description: 'Enum: "INFO" "CAUTION" "WARNING" "ERROR" "CRITICAL"'
    - name: start
      type: integer
    - name: count
      type: integer

- id: notification_suppress
  label: Suppress Notification Code
  kind: action
  command: '{"jsonrpc": "2.0", "method": "notification.suppress"}'
  params:
    - name: code
      type: string

- id: notification_unsuppress
  label: Unsuppress Notification Code
  kind: action
  command: '{"jsonrpc": "2.0", "method": "notification.unsuppress"}'
  params:
    - name: code
      type: string

- id: notification_unsuppressall
  label: Unsuppress All Notification Codes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "notification.unsuppressall"}'
  params: []

# --- Optics: focus ---
- id: optics_focus_addlocation
  label: Add Focus Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.addlocation"}'
  params:
    - name: location
      type: string
  description: Add current position to saved locations.

- id: optics_focus_calibrate
  label: Calibrate Focus
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.calibrate"}'
  params: []

- id: optics_focus_runforwardtime
  label: Focus Forward Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.runforwardtime"}'
  params:
    - name: milliseconds
      type: integer
  description: Run forward for X milliseconds.

- id: optics_focus_runreversetime
  label: Focus Reverse Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.runreversetime"}'
  params:
    - name: milliseconds
      type: integer
  description: Run reverse for X milliseconds.

- id: optics_focus_setlocation
  label: Set Focus Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.setlocation"}'
  params:
    - name: location
      type: string

- id: optics_focus_stepforward
  label: Focus Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.stepforward"}'
  params: []

- id: optics_focus_stepreverse
  label: Focus Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.focus.stepreverse"}'
  params: []

# --- Optics: zoom ---
- id: optics_zoom_addlocation
  label: Add Zoom Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.addlocation"}'
  params:
    - name: location
      type: string

- id: optics_zoom_calibrate
  label: Calibrate Zoom
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.calibrate"}'
  params: []

- id: optics_zoom_runforwardtime
  label: Zoom Forward Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.runforwardtime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_zoom_runreversetime
  label: Zoom Reverse Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.runreversetime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_zoom_setlocation
  label: Set Zoom Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.setlocation"}'
  params:
    - name: location
      type: string

- id: optics_zoom_stepforward
  label: Zoom Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.stepforward"}'
  params: []

- id: optics_zoom_stepreverse
  label: Zoom Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.zoom.stepreverse"}'
  params: []

# --- Optics: lensshift horizontal (runforward/reverse/stop/step/calibrate/location) ---
- id: optics_lensshift_horizontal_addlocation
  label: Add Horizontal Lens Shift Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.addlocation"}'
  params:
    - name: location
      type: string

- id: optics_lensshift_horizontal_calibrate
  label: Calibrate Horizontal Lens Shift
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.calibrate"}'
  params: []

- id: optics_lensshift_horizontal_runforward
  label: Horizontal Lens Shift Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.runforward"}'
  params: []

- id: optics_lensshift_horizontal_runforwardtime
  label: Horizontal Lens Shift Forward Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.runforwardtime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_lensshift_horizontal_runreverse
  label: Horizontal Lens Shift Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.runreverse"}'
  params: []

- id: optics_lensshift_horizontal_runreversetime
  label: Horizontal Lens Shift Reverse Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.runreversetime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_lensshift_horizontal_setlocation
  label: Set Horizontal Lens Shift Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.setlocation"}'
  params:
    - name: location
      type: string

- id: optics_lensshift_horizontal_stepforward
  label: Horizontal Lens Shift Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.stepforward"}'
  params: []

- id: optics_lensshift_horizontal_stepreverse
  label: Horizontal Lens Shift Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.stepreverse"}'
  params: []

- id: optics_lensshift_horizontal_stop
  label: Horizontal Lens Shift Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.horizontal.stop"}'
  params: []

# --- Optics: lensshift vertical (mirror of horizontal) ---
- id: optics_lensshift_vertical_addlocation
  label: Add Vertical Lens Shift Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.addlocation"}'
  params:
    - name: location
      type: string

- id: optics_lensshift_vertical_calibrate
  label: Calibrate Vertical Lens Shift
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.calibrate"}'
  params: []

- id: optics_lensshift_vertical_runforward
  label: Vertical Lens Shift Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.runforward"}'
  params: []

- id: optics_lensshift_vertical_runforwardtime
  label: Vertical Lens Shift Forward Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.runforwardtime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_lensshift_vertical_runreverse
  label: Vertical Lens Shift Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.runreverse"}'
  params: []

- id: optics_lensshift_vertical_runreversetime
  label: Vertical Lens Shift Reverse Timed
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.runreversetime"}'
  params:
    - name: milliseconds
      type: integer

- id: optics_lensshift_vertical_setlocation
  label: Set Vertical Lens Shift Location
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.setlocation"}'
  params:
    - name: location
      type: string

- id: optics_lensshift_vertical_stepforward
  label: Vertical Lens Shift Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.stepforward"}'
  params: []

- id: optics_lensshift_vertical_stepreverse
  label: Vertical Lens Shift Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.stepreverse"}'
  params: []

- id: optics_lensshift_vertical_stop
  label: Vertical Lens Shift Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.lensshift.vertical.stop"}'
  params: []

# --- Optics: shutter/lens misc ---
- id: optics_shutter_getobjectpath
  label: Get Shutter Object Path
  kind: query
  command: '{"jsonrpc": "2.0", "method": "optics.shutter.getobjectpath"}'
  params: []
  description: Returns path string of shutter motor object.

- id: optics_getvalidlensids
  label: Get Valid Lens IDs
  kind: query
  command: '{"jsonrpc": "2.0", "method": "optics.getvalidlensids"}'
  params: []
  description: Returns lensids mapping [{key, value:{0:int, 1:string}}].

- id: optics_setlensid
  label: Set Lens ID
  kind: action
  command: '{"jsonrpc": "2.0", "method": "optics.setlensid"}'
  params:
    - name: lensid
      type: integer
    - name: powerlensid
      type: integer

# --- Peripheral frame: horizontal ---
- id: peripheral_frame_horizontal_calibrate
  label: Calibrate Horizontal Frame
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.calibrate"}'
  params: []

- id: peripheral_frame_horizontal_runforward
  label: Horizontal Frame Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.runforward"}'
  params: []

- id: peripheral_frame_horizontal_runreverse
  label: Horizontal Frame Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.runreverse"}'
  params: []

- id: peripheral_frame_horizontal_stepforward
  label: Horizontal Frame Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.stepforward"}'
  params: []

- id: peripheral_frame_horizontal_stepreverse
  label: Horizontal Frame Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.stepreverse"}'
  params: []

- id: peripheral_frame_horizontal_stop
  label: Horizontal Frame Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.horizontal.stop"}'
  params: []

# --- Peripheral frame: vertical ---
- id: peripheral_frame_vertical_calibrate
  label: Calibrate Vertical Frame
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.calibrate"}'
  params: []

- id: peripheral_frame_vertical_runforward
  label: Vertical Frame Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.runforward"}'
  params: []

- id: peripheral_frame_vertical_runreverse
  label: Vertical Frame Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.runreverse"}'
  params: []

- id: peripheral_frame_vertical_stepforward
  label: Vertical Frame Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.stepforward"}'
  params: []

- id: peripheral_frame_vertical_stepreverse
  label: Vertical Frame Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.stepreverse"}'
  params: []

- id: peripheral_frame_vertical_stop
  label: Vertical Frame Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.vertical.stop"}'
  params: []

# --- Peripheral frame: rotation ---
- id: peripheral_frame_rotation_calibrate
  label: Calibrate Frame Rotation
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.calibrate"}'
  params: []

- id: peripheral_frame_rotation_runforward
  label: Frame Rotation Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.runforward"}'
  params: []

- id: peripheral_frame_rotation_runreverse
  label: Frame Rotation Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.runreverse"}'
  params: []

- id: peripheral_frame_rotation_stepforward
  label: Frame Rotation Step Forward
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.stepforward"}'
  params: []

- id: peripheral_frame_rotation_stepreverse
  label: Frame Rotation Step Reverse
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.stepreverse"}'
  params: []

- id: peripheral_frame_rotation_stop
  label: Frame Rotation Stop
  kind: action
  command: '{"jsonrpc": "2.0", "method": "peripheral.frame.rotation.stop"}'
  params: []

# --- Remote control ---
- id: remotecontrol_listsensors
  label: List IR Sensors
  kind: query
  command: '{"jsonrpc": "2.0", "method": "remotecontrol.listsensors"}'
  params: []
  description: Returns object names of the IR sensors.

# --- Statistics ---
- id: statistics_listcounters
  label: List Counters
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.listcounters"}'
  params: []
  description: Returns [{name, value, unit}].

- id: statistics_laserruntime_getname
  label: Get Laser Runtime Name
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.laserruntime.getname"}'
  params: []

- id: statistics_laserruntime_getunit
  label: Get Laser Runtime Unit
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.laserruntime.getunit"}'
  params: []

- id: statistics_laserstrikes_getname
  label: Get Laser Strikes Name
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.laserstrikes.getname"}'
  params: []

- id: statistics_laserstrikes_getunit
  label: Get Laser Strikes Unit
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.laserstrikes.getunit"}'
  params: []

- id: statistics_projectorruntime_getname
  label: Get Projector Runtime Name
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.projectorruntime.getname"}'
  params: []

- id: statistics_projectorruntime_getunit
  label: Get Projector Runtime Unit
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.projectorruntime.getunit"}'
  params: []

- id: statistics_systemtime_getname
  label: Get System Time Name
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.systemtime.getname"}'
  params: []

- id: statistics_systemtime_getunit
  label: Get System Time Unit
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.systemtime.getunit"}'
  params: []

- id: statistics_uptime_getname
  label: Get Uptime Name
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.uptime.getname"}'
  params: []

- id: statistics_uptime_getunit
  label: Get Uptime Unit
  kind: query
  command: '{"jsonrpc": "2.0", "method": "statistics.uptime.getunit"}'
  params: []

# --- System ---
- id: system_activity
  label: Signal User Activity
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.activity"}'
  params: []
  description: Resets timeout countdown timers.

- id: system_boards_getboardlist
  label: Get Board List
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.boards.getboardlist"}'
  params: []

- id: system_boards_getboardinfo
  label: Get Board Info
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.boards.getboardinfo"}'
  params:
    - name: boardname
      type: string

- id: system_boards_getmissingboardlist
  label: Get Missing Board List
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.boards.getmissingboardlist"}'
  params: []

- id: system_boards_getmoduleinfo
  label: Get Module Info
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.boards.getmoduleinfo"}'
  params:
    - name: boardname
      type: string

- id: system_boards_getdeviceinfo
  label: Get Device Info (Deprecated)
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.boards.getdeviceinfo"}'
  params:
    - name: boardname
      type: string
  description: DEPRECATED. Use GetBoardInfo instead.

- id: system_getidentification
  label: Get Identification
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.getidentification"}'
  params:
    - name: identification
      type: string
  description: Returns {identification, value}.

- id: system_getidentifications
  label: Get All Identifications
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.getidentifications"}'
  params: []
  description: Returns [{key, value}].

- id: system_getsystemdate
  label: Get System Date
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.getsystemdate"}'
  params: []
  description: Returns UTC date {year, month, day, hour, minute, second}.

- id: system_listresetdomains
  label: List Reset Domains
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.listresetdomains"}'
  params: []
  description: 'Returns enum list: ImageConnector, ImageSource, ImageFeatures, ImageRealColor, ImageWarp, ImageBlend, ImageOrientation, ImageResolution, ImageStereo, ImageDisplay, ImageTestPattern, ImageConvergence, UserInterface, Optics, Illumination, Network, Screen, System, LightMeasurement, Dmx.'

- id: system_license_option_flexbrightness_getmaximumlightoutputcode
  label: Get Flex Brightness Code
  kind: query
  command: '{"jsonrpc": "2.0", "method": "system.license.option.flexbrightness.getmaximumlightoutputcode"}'
  params:
    - name: lightoutput
      type: integer
    - name: signature
      type: string
  description: Returns {lightoutput, signature, code}.

- id: system_license_option_flexbrightness_setmaximumlightoutput
  label: Set Flex Brightness Maximum Light Output
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.license.option.flexbrightness.setmaximumlightoutput"}'
  params:
    - name: code
      type: string
    - name: lightoutput
      type: integer

- id: system_license_option_flexbrightness_setmaximumlightoutputcode
  label: Set Flex Brightness Code
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.license.option.flexbrightness.setmaximumlightoutputcode"}'
  params:
    - name: lightoutput
      type: integer
    - name: signature
      type: string
  description: Returns {lightoutput, signature, code}.

# --- UI settings ---
- id: ui_settings_list
  label: List UI Settings
  kind: query
  command: '{"jsonrpc": "2.0", "method": "ui.settings.list"}'
  params: []
  description: Returns [{key, value}].

- id: ui_settings_keys
  label: List UI Setting Keys
  kind: query
  command: '{"jsonrpc": "2.0", "method": "ui.settings.keys"}'
  params: []

- id: ui_settings_get
  label: Get UI Setting
  kind: query
  command: '{"jsonrpc": "2.0", "method": "ui.settings.get"}'
  params:
    - name: key
      type: string

- id: ui_settings_set
  label: Set UI Setting
  kind: action
  command: '{"jsonrpc": "2.0", "method": "ui.settings.set"}'
  params:
    - name: key
      type: string
    - name: value
      type: string

- id: ui_settings_remove
  label: Remove UI Setting
  kind: action
  command: '{"jsonrpc": "2.0", "method": "ui.settings.remove"}'
  params:
    - name: key
      type: string

- id: ui_settings_geticons
  label: Get UI Icons
  kind: query
  command: '{"jsonrpc": "2.0", "method": "ui.settings.geticons"}'
  params:
    - name: category
      type: string
      description: 'Enum: "Source" "Connector" "TestPattern"'

- id: ui_settings_getfonticons
  label: Get UI Font Icons
  kind: query
  command: '{"jsonrpc": "2.0", "method": "ui.settings.getfonticons"}'
  params:
    - name: category
      type: string
      description: 'Enum: "Source" "Connector" "TestPattern"'

- id: ui_togglestealthmode
  label: Toggle Stealth Mode (Deprecated)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "ui.togglestealthmode"}'
  params: []
  description: DEPRECATED.

# --- File transfer HTTP endpoints (HTTP POST upload / GET download) ---
- id: firmware_transfer
  label: Upload Firmware File
  kind: action
  command: 'curl -F file=@firmware.dat http://{host}/api/firmware/transfer'
  params:
    - name: host
      type: string
      description: Projector IP address (e.g. 192.168.1.100)
    - name: file
      type: string
      description: Path to firmware.dat
  description: 'HTTP POST file upload. Example: curl -F file=@firmware.dat http://192.168.1.100/api/firmware/transfer'

- id: image_connector_edid_transfer
  label: Upload/Download EDID File
  kind: action
  command: 'curl -F file=@edid.dat http://{host}/api/image/connector/edid/transfer'
  params:
    - name: host
      type: string
    - name: file
      type: string
  description: 'Upload: curl -F file=@edid.dat http://192.168.1.100/api/image/connector/edid/transfer. Download: curl -O -J http://192.168.1.100/api/image/connector/edid/transfer'

- id: image_processing_blacklevel_file_transfer
  label: Upload/Download Black Level File
  kind: action
  command: 'curl -F file=@blacklevel.dat http://{host}/api/image/processing/blacklevel/file/transfer'
  params:
    - name: host
      type: string
    - name: file
      type: string

- id: image_processing_blend_file_transfer
  label: Upload/Download Blend File
  kind: action
  command: 'curl -F file=@blend.dat http://{host}/api/image/processing/blend/file/transfer'
  params:
    - name: host
      type: string
    - name: file
      type: string

- id: image_processing_warp_file_transfer
  label: Upload/Download Warp File
  kind: action
  command: 'curl -F file=@warp.dat http://{host}/api/image/processing/warp/file/transfer'
  params:
    - name: host
      type: string
    - name: file
      type: string

- id: image_testpattern_file_transfer
  label: Upload/Download Test Pattern File
  kind: action
  command: 'curl -F file=@testpattern.dat http://{host}/api/image/testpattern/file/transfer'
  params:
    - name: host
      type: string
    - name: file
      type: string

- id: notification_logger_transfer
  label: Download Notification Log
  kind: query
  command: 'curl -O -J http://{host}/api/notification/logger/transfer'
  params:
    - name: host
      type: string
  description: Download-only HTTP GET endpoint.

Feedbacks

# ============ Existing entries (preserved) ============
- id: system_state
  type: enum
  values: ["boot", "eco", "standby", "ready", "conditioning", "on", "deconditioning", "error"]
  description: |
    Query: property.get system.state
    Notification: property.changed with system.state value

- id: illumination_state
  type: enum
  values: ["On", "Off"]
  description: |
    Query: property.get illumination.state
    Notification: property.changed with illumination.state value

- id: illumination_sources_laser_power
  type: float
  description: |
    Laser power in percent (0-100). Query property.get illumination.sources.laser.power
    Min: illumination.sources.laser.minpower, Max: illumination.sources.laser.maxpower

- id: active_source
  type: string
  description: |
    Currently active source name. Query: property.get image.window.main.source
    Example values: "DisplayPort 1", "HDMI", "DVI 1"

- id: connector_detected_signal
  type: object
  description: |
    Signal info for a connector. Query: property.get image.connector.{name}.detectedsignal
    Contains: active (bool), name, resolution, frequency, pixel_rate, scan, color_space, etc.

- id: environment_temperatures
  type: object
  description: |
    All temperature sensors. Returns key-value pairs of sensor name to Celsius value.
    Query: environment.getcontrolblocks with valuetype "Temperature"

- id: environment_fan_speeds
  type: object
  description: |
    All fan speed sensors. Returns key-value pairs of fan name to RPM.
    Query: environment.getcontrolblocks with valuetype "Speed"

- id: environment_alarmstate
  type: enum
  values: ["Fatal", "Error", "Alert", "Warning", "Ok"]
  description: Query: property.get environment.alarmstate

- id: network_lan_state
  type: enum
  values: ["CONNECTED", "DISCONNECTED"]
  description: Query: property.get network.device.lan.state

- id: optics_shutter_position
  type: enum
  values: ["Open", "Closed"]
  description: Query: property.get optics.shutter.position

- id: image_brightness
  type: float
  description: |
    Image brightness offset, normalized. Range -1 to 1, default 0.
    Query: property.get image.brightness

- id: image_contrast
  type: float
  description: |
    Image contrast/gain, normalized. Range 0 to 2, default 1.
    Query: property.get image.contrast

- id: image_saturation
  type: float
  description: |
    Image color saturation, normalized. Range 0 to 2, default 1.
    Query: property.get image.saturation

- id: image_sharpness
  type: integer
  description: |
    Image sharpness. Range -2 to 8.
    Query: property.get image.sharpness

- id: image_gamma
  type: float
  description: |
    Image gamma. Range 1 to 3, default 2.2.
    Query: property.get image.gamma

- id: ui_access_enduser
  type: boolean
  description: Whether end user access privileges are available

- id: ui_access_poweruser
  type: boolean
  description: Whether power user access privileges are available

- id: notification_emitted
  type: object
  description: |
    Unsolicited notification. method: "notification.emitted"
    Contains: severity, id, code, timestamp, message, timeout, actions

- id: modelupdated
  type: object
  description: |
    Signal when objects appear/disappear. Subscribe: signal.subscribe with "modelupdated"
    Contains: object (string), newobject (bool), accesslevel

# ============ Added in upgrade pass ============
- id: system_modelname
  type: string
  description: Query property.get system.modelname

- id: system_familyname
  type: string
  description: Query property.get system.familyname

- id: system_serialnumber
  type: string
  description: Query property.get system.serialnumber

- id: system_articlenumber
  type: string
  description: Query property.get system.articlenumber

- id: system_firmwareversion
  type: string
  description: Query property.get system.firmwareversion (or firmware.firmwareversion)

- id: system_initialstate
  type: enum
  values: ["boot", "eco", "standby", "ready", "conditioning", "on", "service", "deconditioning", "error"]
  description: State to transition to when unit started. Query property.get system.initialstate

- id: system_eco_available
  type: boolean
  description: True if eco state available. Query property.get system.eco.available

- id: system_standby_available
  type: boolean
  description: True if standby state available. Query property.get system.standby.available

- id: illumination_sources_laser_maxpower
  type: float
  description: Max laser power percent. Query property.get illumination.sources.laser.maxpower

- id: illumination_sources_laser_minpower
  type: float
  description: Min laser power percent. Query property.get illumination.sources.laser.minpower

- id: illumination_sources_laser_ispowerlimited
  type: boolean
  description: Whether power currently limited. Query property.get illumination.sources.laser.ispowerlimited

- id: illumination_sources_laser_powerlimitreason
  type: string
  description: Reason power limited. Query property.get illumination.sources.laser.powerlimitreason

- id: illumination_clo_availability
  type: enum
  values: ["Available", "SensorUnavailable", "PendingWarmup", "Unavailable", "Unknown"]
  description: Query property.get illumination.clo.availability

- id: illumination_clo_state
  type: enum
  values: ["Ok", "TooDim", "TooBright"]
  description: Query property.get illumination.clo.state

- id: image_orientation
  type: enum
  values: ["DESKTOP_FRONT", "DESKTOP_REAR", "CEILING_FRONT", "CEILING_REAR"]
  description: Query property.get image.orientation

- id: image_intensity
  type: float
  description: 'Range 0-1, step 0.1, precision 0.01. Query property.get image.intensity'

- id: image_display_displaymode
  type: enum
  values: ["Mono", "AutoStereo", "ActiveStereo", "NightVision", "IGPixelShift"]
  description: Query property.get image.display.displaymode

- id: image_window_main_scalingmode
  type: enum
  values: ["Fill", "OneToOne", "FillScreen", "Stretch"]
  description: Query property.get image.window.main.scalingmode

- id: image_testpattern_selected
  type: string
  description: Unique id of selected pattern. Query property.get image.testpattern.selected

- id: image_testpattern_show
  type: boolean
  description: Query property.get image.testpattern.show

- id: optics_zoom_position
  type: integer
  description: Query property.get optics.zoom.position

- id: optics_zoom_state
  type: enum
  values: ["Stopped", "Running", "Calibrating", "Homing"]
  description: Query property.get optics.zoom.state

- id: optics_focus_position
  type: integer
  description: Query property.get optics.focus.position

- id: optics_focus_state
  type: enum
  values: ["Stopped", "Running", "Calibrating", "Homing"]
  description: Query property.get optics.focus.state

- id: optics_lensshift_horizontal_position
  type: integer
  description: Query property.get optics.lensshift.horizontal.position

- id: optics_lensshift_vertical_position
  type: integer
  description: Query property.get optics.lensshift.vertical.position

- id: optics_lenspresent
  type: boolean
  description: Query property.get optics.lenspresent

- id: optics_filteravailable
  type: boolean
  description: Query property.get optics.filteravailable

- id: remotecontrol_address
  type: integer
  description: 'Remote control address 1..31. Query property.get remotecontrol.address'

- id: screen_luminance
  type: float
  description: 'Max luminance cd/m2, range 50-10000. Query property.get screen.luminance'

- id: screen_hdrboost
  type: float
  description: 'HDR intensity, range 0.8-1.2. Query property.get screen.hdrboost'

- id: network_hostname
  type: string
  description: Query property.get network.hostname

- id: network_device_lan_hwaddress
  type: string
  description: Active MAC address. Query property.get network.device.lan.hwaddress

- id: network_device_lan_ip4config
  type: object
  description: '{Address, Mask, Gateway, NameServers}. Query property.get network.device.lan.ip4config'

- id: ui_stealthmode
  type: enum
  values: ["Off", "On"]
  description: Query property.get ui.stealthmode

- id: ui_backlight_state
  type: enum
  values: ["Off", "On", "Auto"]
  description: Query property.get ui.backlight.state

- id: firmware_version
  type: string
  description: Query property.get firmware.firmwareversion

- id: gsm_available
  type: boolean
  description: GSM card present. Query property.get gsm.available

Variables

# ============ Existing entries (preserved) ============
- id: image_brightness
  type: float
  range: [-1, 1]
  default: 0

- id: image_contrast
  type: float
  range: [0, 2]
  default: 1

- id: image_saturation
  type: float
  range: [0, 2]
  default: 1

- id: image_sharpness
  type: integer
  range: [-2, 8]
  default: 0

- id: image_gamma
  type: float
  range: [1, 3]
  default: 2.2

- id: illumination_sources_laser_power
  type: float
  range: [0, 100]
  description: Laser power percentage

- id: optics_shutter_target
  type: enum
  values: ["Open", "Closed"]

- id: optics_zoom_position
  type: integer

- id: optics_focus_position
  type: integer

- id: optics_lensshift_horizontal_position
  type: integer

- id: optics_lensshift_vertical_position
  type: integer

- id: image_window_main_source
  type: string
  description: Active source name (e.g. "HDMI", "DisplayPort 1")

- id: image_window_main_position
  type: object
  description: Window position {x, y}

- id: image_window_main_size
  type: object
  description: Window size {width, height}

- id: image_orientation
  type: enum
  values: ["DESKTOP_FRONT", "DESKTOP_REAR", "CEILING_FRONT", "CEILING_REAR"]

- id: image_processing_warp_enable
  type: boolean

- id: image_processing_blend_file_enable
  type: boolean

- id: screen_hdrboost
  type: float
  range: [0.8, 1.2]

- id: ui_backlight_state
  type: enum
  values: ["Off", "On", "Auto"]

- id: ui_stealthmode
  type: enum
  values: ["Off", "On"]

# ============ Added in upgrade pass ============
- id: image_intensity
  type: float
  range: [0, 1]
  default: 0

- id: image_window_main_scalingmode
  type: enum
  values: ["Fill", "OneToOne", "FillScreen", "Stretch"]

- id: image_testpattern_show
  type: boolean

- id: image_testpattern_selected
  type: string

- id: image_display_desireddisplaymode
  type: enum
  values: ["Mono", "AutoStereo", "ActiveStereo", "NightVision", "IGPixelShift"]

- id: illumination_clo_enable
  type: boolean
  description: Constant light output enabled

- id: illumination_clo_scale
  type: float
  description: Percentage to scale the setpoint by

- id: illumination_clo_setpoint
  type: float
  description: Target luminosity of the light source

- id: image_processing_warp_file_enable
  type: boolean

- id: image_processing_warp_file_selected
  type: string

- id: image_processing_blend_file_selected
  type: string
  description: Array of selected blend files

- id: image_processing_blacklevel_file_enable
  type: boolean

- id: image_processing_blacklevel_file_selected
  type: string

- id: image_processing_blend_scurve
  type: float
  range: [1, 4]

- id: screen_luminance
  type: float
  range: [50, 10000]

- id: remotecontrol_address
  type: integer
  range: [1, 31]

- id: remotecontrol_broadcastaddress
  type: integer
  range: [0, 1]

- id: remotecontrol_sensors_front_enable
  type: boolean

- id: remotecontrol_sensors_rear_enable
  type: boolean

- id: remotecontrol_sensors_side_enable
  type: boolean

- id: network_device_lan_configuration
  type: enum
  values: ["AUTO", "MANUAL"]

- id: network_device_lan_ip4configmanual
  type: object
  description: '{Address, Mask, Gateway, NameServers}'

- id: network_device_lan_ip6configmanual
  type: object
  description: '{Address, Prefix, Gateway, NameServers}'

- id: ui_backlight_timeout
  type: integer
  description: Seconds before LCD backlight switches off

- id: system_eco_enable
  type: boolean

- id: system_standby_enable
  type: boolean

- id: system_standby_timeout_duration
  type: integer

- id: system_ready_timeout_duration
  type: integer

- id: system_on_timeout_duration
  type: integer

- id: system_error_timeout_duration
  type: integer

- id: image_color_p7_custom_whitetemperature
  type: integer
  range: [3200, 13000]

- id: image_blackcontentdetection_threshold
  type: integer
  range: [0, 255]
  description: DEPRECATED

- id: dmx_artnet
  type: boolean

- id: dmx_startchannel
  type: integer
  range: [1, 512]

- id: dmx_mode
  type: string

Events

# ============ Existing entries (preserved) ============
- id: property_changed
  description: |
    method: "property.changed"
    params: { "property": [ {"objectname.propertyname": value}, ... ] }
    Fired when subscribed properties change.

- id: signal_callback
  description: |
    method: "signal.callback"
    params: { "signal": [ {"objectname.signalname": { args } }, ... ] }
    Fired for subscribed signals.

- id: modelupdated
  description: |
    Fired when objects appear or disappear. Params: object (string), newobject (bool), accesslevel

- id: notification_emitted
  description: |
    Fired for system notifications. Params: severity, id, code, timestamp, message, actions

- id: notification_dismissed
  description: |
    Fired when notification is dismissed. Params: id, response

- id: system_identificationchanged
  description: Fired when system identification changes

- id: system_performed
  description: |
    Fired when reset domain completes. Params: domains (array of completed domains)

- id: image_processing_warpgrid_changed
  description: Fired when warp grid changes

- id: image_testpattern_added
  description: Fired when custom test pattern is added

- id: image_testpattern_removed
  description: Fired when custom test pattern is removed

# ============ Added in upgrade pass ============
- id: image_processing_warpgrid_gridchanged
  description: |
    signal.subscribe "image.processing.warpgrid.gridchanged". Params: grid [{x: float, y: float}]

- id: image_testpattern_changed
  description: Fired when a test pattern changes. Params: id, properties.

- id: image_connector_edid_listchanged
  description: |
    Per-connector EDID list changed signals documented:
    image.connector.l1displayport.edid.listchanged, image.connector.l1hdbaset1.edid.listchanged,
    image.connector.l1hdbaset2.edid.listchanged, image.connector.l1hdmi.edid.listchanged,
    image.connector.l2displayporta.edid.listchanged, image.connector.l2displayportb.edid.listchanged,
    image.connector.l2displayportc.edid.listchanged, image.connector.l2displayportd.edid.listchanged

- id: image_processing_warp_file_listchanged
  description: signal.subscribe "image.processing.warp.file.listchanged"

- id: image_processing_blend_file_listchanged
  description: signal.subscribe "image.processing.blend.file.listchanged"

- id: image_processing_blacklevel_file_listchanged
  description: signal.subscribe "image.processing.blacklevel.file.listchanged"

- id: image_testpattern_file_listchanged
  description: signal.subscribe "image.testpattern.file.listchanged"

- id: network_added
  description: Raised when a new device added. Params: id (logical device id).

- id: network_removed
  description: Raised when a device removed. Params: id.

- id: system_license_licensechanged
  description: Fired when license changes.

- id: ui_settings_added
  description: Fired when a new key/value pair added. Params: key, value.

- id: ui_settings_changed
  description: Fired when a key value updated. Params: key, value.

- id: ui_settings_removed
  description: Fired when a key removed. Params: key.

Macros

# ============ Existing entries (preserved) ============
- id: select_source
  label: Select Input Source
  steps:
    - action: image_source_list
      capture: sources
    - action: property_set
      params:
        property: image.window.main.source
        value: "{{source_name}}"  # e.g. "DisplayPort 1", "HDMI"

- id: wake_from_eco
  label: Wake from ECO Mode
  description: |
    ECO mode requires special wake procedure:
    - Send Wake-on-LAN with projector MAC address, OR
    - Use remote control power button, OR
    - Use keypad power button, OR
    - Send ":POWR1\r" on serial port

- id: enable_warp
  label: Enable Warp with File
  steps:
    - action: property_set
      params: {property: image.processing.warp.enable, value: true}
    - action: property_set
      params: {property: image.processing.warp.file.selected, value: "warp.xml"}
    - action: property_set
      params: {property: image.processing.warp.file.enable, value: true}

- id: enable_blend
  label: Enable Blend with File
  steps:
    - action: property_set
      params: {property: image.processing.blend.file.selected, value: "mask.png"}
    - action: property_set
      params: {property: image.processing.blend.file.enable, value: true}

# ============ Added in upgrade pass ============
- id: enable_blacklevel
  label: Enable Black Level with File
  steps:
    - action: property_set
      params: {property: image.processing.blacklevel.file.selected, value: "blacklevel.png"}
    - action: property_set
      params: {property: image.processing.blacklevel.file.enable, value: true}

Safety

confirmation_required_for: []
interlocks:
  - description: |
      Do not power off during "conditioning" state - wait for "on" state.
      Docs: "If the projector already is on, or if it's in transition between states, nothing will happen."
  - description: |
      Verify projector state before issuing power commands.
      Docs: "It's good practice to verify that the projector state is either standby or ready before issuing the power on command."
  - description: |
      Best practice for property.set: wait for confirmation before setting same property again.
      Docs: "It is best practice to wait for the confirmation of the property.set before setting the same property again."
  - description: |
      ECO mode wake requires specific procedure (WoL, remote, keypad, or serial :POWR1 command).
# UNRESOLVED: voltage/power specifications, fault behavior, error recovery sequences not stated

Notes

The Barco LCD VP uses JSON-RPC 2.0 as its control protocol, tunneled over either TCP (port 9090) or RS-232 serial. The API is object-oriented with dot-notation (e.g. image.brightness, system.state). Properties support get/set/subscribe; Methods are invoked directly; Signals provide unsolicited notifications. Authentication is optional and only required for elevated access levels beyond normal end-user. The pass code format is not disclosed in this document — it must be obtained from Barco documentation or the device administrator.

File upload/download uses HTTP POST/GET to /api/<endpoint>/file/transfer (e.g. /api/image/processing/warp/file/transfer, /api/firmware/transfer, /api/image/connector/edid/transfer, /api/image/testpattern/file/transfer, /api/notification/logger/transfer). Example upload: curl -F file=@warp.xml http://192.168.1.100/api/image/processing/warp/file/transfer. The HTTP port is not stated in the source (curl examples omit it, implying the standard HTTP port).

The ECO-mode serial wake command is the ASCII literal :POWR1\r (documented verbatim in the ECO mode section).

Provenance

source_domains:
  - audiogeneral.com
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-12T04:30:31.328Z
last_checked_at: 2026-07-13T06:40:28.190Z

Verification Summary

verdict: verified
checked_at: 2026-07-13T06:40:28.190Z
matched_actions: 174
action_count: 174
confidence: medium
summary: "All 174 spec actions map to literal JSON-RPC methods or HTTP file endpoints in source after removal of the 4 phantom duration params on runforward/runreverse; transport params (port 9090, 19200/8/N/1) verbatim-supported. (9 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "specific model variants not enumerated in source"
- "firmware version compatibility not stated"
- "HTTP file-transfer TCP port not stated in source (curl examples omit port)"
- "voltage/power specifications, fault behavior, error recovery sequences not stated"
- "actual authentication pass code format/structure not stated in source"
- "specific model variant list (this applies to entire LCD VP family)"
- "voltage, current, power specifications not stated"
- "fault behavior / error recovery sequences not stated"
- "HTTP file-transfer TCP port not stated in source"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0