Summary

Barco PDS projector with dual-protocol control via RS-232 and TCP/IP (JSON-RPC 2.0). TCP service runs on port 9090. Serial uses 19200 baud, 8N1. Authentication is optional for normal end-user access; elevated privileges require a numeric pass code. Supports power control, source routing, image adjustment, lens control, warping/blending, and comprehensive monitoring via property/signal subscriptions.

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 9090  # TCP port for Pulse services
serial:
  baud_rate: 19200
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: optional  # normal end-user access requires no auth; elevated access uses pass code

Traits

- powerable       # system.poweron / system.poweroff present
- queryable       # property.get, property.subscribe present
- routable        # image.window.main.source selection present
- levelable       # brightness, contrast, saturation, gamma, laser power, etc.

Actions

- id: system_poweron
  label: Power On
  kind: action
  params: []

- id: system_poweroff
  label: Power Off
  kind: action
  params: []

- id: property_set
  label: Set Property
  kind: action
  params:
    - name: property
      type: string
      description: Object.property path (e.g. "image.window.main.source")
    - name: value
      type: any
      description: New value for the property

- id: property_get
  label: Get Property
  kind: query
  params:
    - name: property
      type: string
      description: Object.property path (single or array for bulk)

- id: property_subscribe
  label: Subscribe to Property Changes
  kind: action
  params:
    - name: property
      type: string
      description: Object.property path (single or array)

- id: property_unsubscribe
  label: Unsubscribe from Property Changes
  kind: action
  params:
    - name: property
      type: string
      description: Object.property path (single or array)

- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  params:
    - name: signal
      type: string
      description: Signal name (e.g. "modelupdated", "image.processing.warp.gridchanged")

- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  params:
    - name: signal
      type: string
      description: Signal name

- id: authenticate
  label: Authenticate
  kind: action
  params:
    - name: code
      type: integer
      description: Numeric pass code for elevated access level

- id: introspect
  label: Introspect Object
  kind: query
  params:
    - name: object
      type: string
      description: Object name to introspect (dot notation)
    - name: recursive
      type: boolean
      description: Recursive introspection (default true)

- id: select_source
  label: Select Input Source
  kind: action
  params:
    - name: source
      type: string
      description: Source name (e.g. "DisplayPort 1", "HDMI")

- id: system_gotoeco
  label: Set ECO Mode
  kind: action
  params: []

- id: system_gotoready
  label: Set Ready State
  kind: action
  params: []

- id: system_reboot
  label: Reboot Projector
  kind: action
  params: []

- id: system_reset
  label: Reset Domains
  kind: action
  params:
    - name: domains
      type: array
      description: List of domains to reset (e.g. ["ImageWarp", "ImageBlend"])

- id: optics_shutter_toggle
  label: Toggle Shutter
  kind: action
  params: []

- id: image_source_list
  label: List Available Sources
  kind: query
  params: []

- id: image_connector_list
  label: List Available Connectors
  kind: query
  params: []

Feedbacks

- id: system_state
  type: enum
  values:
    - "boot"
    - "eco"
    - "standby"
    - "ready"
    - "conditioning"
    - "on"
    - "deconditioning"
    - "error"
  description: Current projector operating state

- id: property_changed
  type: notification
  description: |
    Property change notification sent via property.changed method.
    Payload: array of {propertyPath: value} pairs.

- id: signal_callback
  type: notification
  description: |
    Signal callback notification sent via signal.callback method.
    Payload: array of {signalName: arguments} pairs.

- id: modelupdated
  type: signal
  description: |
    Fired when objects appear or disappear.
    Payload: {object: string, newobject: bool, accesslevel: enum}

Variables

# Image Properties
- id: image_brightness
  type: float
  range: [-1, 1]
  default: 0
  description: Image brightness/offset (normalized)

- id: image_contrast
  type: float
  range: [0, 2]
  default: 1
  description: Image contrast/gain (normalized)

- id: image_saturation
  type: float
  range: [0, 2]
  default: 1
  description: Image color saturation (normalized)

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

- id: image_sharpness
  type: integer
  range: [-2, 8]
  description: Image sharpness

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

# Illumination
- id: illumination_state
  type: enum
  values: ["On", "Off"]

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

- id: illumination_sources_laser_minpower
  type: float
  description: Minimum laser power in percent (read-only)

- id: illumination_sources_laser_maxpower
  type: float
  description: Maximum laser power in percent (read-only)

# Source/Window
- id: image_window_main_source
  type: string
  description: Currently active source name

- 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_window_main_scalingmode
  type: enum
  values: ["Fill", "OneToOne", "FillScreen", "Stretch"]

# Signal Detection
- id: image_connector_detectedsignal
  type: object
  description: |
    Detected signal info: {active, name, horizontal_resolution, vertical_resolution,
    horizontal_frequency, vertical_frequency, pixel_rate, scan, bits_per_component,
    color_space, signal_range, chroma_sampling, gamma_type, color_primaries,
    content_aspect_ratio, is_stereo, stereo_mode}

# Warp/Blend
- id: image_processing_warp_enable
  type: boolean
  description: Global warp enable/disable

- id: image_processing_warp_file_enable
  type: boolean
  description: File-based warp enable/disable

- id: image_processing_warp_file_selected
  type: string
  description: Active warp file name

- id: image_processing_blend_file_enable
  type: boolean
  description: File-based blend enable/disable

- id: image_processing_blend_file_selected
  type: array
  description: List of selected blend files

- id: image_processing_blacklevel_file_enable
  type: boolean
  description: Black level correction enable/disable

# Optics
- id: optics_zoom_position
  type: integer
  description: Current zoom position

- id: optics_focus_position
  type: integer
  description: Current focus position

- id: optics_lensshift_horizontal_position
  type: integer
  description: Current horizontal lens shift position

- id: optics_lensshift_vertical_position
  type: integer
  description: Current vertical lens shift position

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

# Network
- id: network_device_lan_ip4config
  type: object
  description: IPv4 configuration {Address, Mask, Gateway, NameServers}

- id: network_device_lan_state
  type: enum
  values: ["CONNECTED", "DISCONNECTED"]

- id: network_hostname
  type: string

# System
- id: system_modelname
  type: string

- id: system_firmwareversion
  type: string

- id: system_serialnumber
  type: string

- id: system_articlenumber
  type: string

- id: environment_alarmstate
  type: enum
  values: ["Fatal", "Error", "Alert", "Warning", "Ok"]

- id: statistics_laserruntime_value
  type: integer
  description: Laser runtime counter

- id: statistics_projectorruntime_value
  type: integer
  description: Projector runtime counter

- id: notification_count
  type: integer
  description: Number of notifications received and dismissed

Events

# Unsolicited notifications the device sends (client must implement handlers):

- id: property_changed
  method: property.changed
  description: Property value changed notification
  params:
    - name: property
      type: array
      description: Array of {objectPath: newValue} pairs

- id: signal_callback
  method: signal.callback
  description: Signal callback notification
  params:
    - name: signal
      type: array
      description: Array of {signalName: arguments} pairs

- id: modelupdated
  method: signal.modelupdated
  description: Object tree changed
  params:
    - name: object
      type: string
    - name: newobject
      type: boolean
    - name: accesslevel
      type: enum

- id: notification_emitted
  method: notification.emitted
  description: New notification
  params:
    - name: notification
      type: object
      description: {severity, id, code, timestamp, message, timeout, actions}

- id: notification_dismissed
  method: notification.dismissed
  description: Notification was dismissed
  params:
    - name: id
      type: string
    - name: response
      type: enum

- id: image_processing_warpgrid_gridchanged
  method: image.processing.warpgrid.gridchanged
  description: Warp grid changed
  params:
    - name: grid
      type: array
      description: Array of {x, y} points

- id: system_license_licensechanged
  method: system.license.licensechanged
  description: License changed

- id: system_performed
  method: system.performed
  description: Domain reset completed
  params:
    - name: domains
      type: array
      description: List of domains that completed reset

- id: ui_settings_added
  method: ui.settings.added
  params:
    - name: key
      type: string
    - name: value
      type: string

- id: ui_settings_changed
  method: ui.settings.changed
  params:
    - name: key
      type: string
    - name: value
      type: string

- id: ui_settings_removed
  method: ui.settings.removed
  params:
    - name: key
      type: string

Macros

# ECO Wake-Up Procedure (from source):
# 1. Send wake-on-LAN with projector MAC address, OR
# 2. Use power button on remote/keypad, OR
# 3. Send ":POWR1\r" on RS-232 serial port

# Source Switching Flow (from source):
# 1. Call image.source.list to get available sources
# 2. Translate source name to object name: remove non-word chars, lowercase
#    (e.g. "DisplayPort 1" -> "displayport1")
# 3. Call property.set with property="image.window.main.source" and value=<sourceName>
# 4. Wait for property.changed notification confirming the change

# File Upload Pattern (HTTP POST via curl):
# curl -F file=@<filename> http://<ip>/api/<endpoint>/transfer

Safety

confirmation_required_for: []
interlocks:
  - description: "Verify projector state is standby/ready before issuing power on"
    reference: "Source states: 'If the projector already is on, or if it's in transition between states, nothing will happen.'"
  - description: "Verify projector state is on before issuing power off"
    reference: "Source states: 'If the projector already is off, or if it's in transition between states, nothing will happen.'"
  - description: "Wait for property.set confirmation before setting the same property again"
    reference: "Source states: 'It is best practice to wait for the confirmation of the property.set before setting the same property again.'"
# UNRESOLVED: no explicit safety warnings or interlock procedures found in source beyond state-transition notes above

Notes

Protocol: JSON-RPC 2.0 over TCP (port 9090) or serial. All commands are JSON objects with jsonrpc: "2.0", method, optional params, and optional id. Responses include result or error with matching id. Notifications have no id and require no response.

Authentication: Normal end-user access requires no authentication. Higher access levels require authenticate with a numeric pass code. The source does not disclose the pass code value.

Available Sources (example, varies by model): DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI

File Transfer: Uses HTTP POST to /api/<service>/file/transfer endpoints. Firmware, EDID, warp, blend, black level, and test pattern files can be uploaded/downloaded.

ECO Mode: Projectors in ECO mode require wake-on-LAN, physical power button, or serial :POWR1\r command to wake.

Serial Cable: 9-pin female to host, 9-pin male to projector. Pin 2-to-2, Pin 3-to-3, Pin 5-to-5 (null modem).

Provenance

source_domains:
  - audiogeneral.com
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-04-29T22:42:16.621Z
last_checked_at: 2026-06-02T21:40:47.411Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T21:40:47.411Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions traced to source. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "specific pass code value not disclosed in source"
- "no explicit safety warnings or interlock procedures found in source beyond state-transition notes above"
- "authentication pass code value not disclosed"
- "specific model variants or firmware compatibility not stated"
- "DMX/RDM protocol details not covered in this companion document"

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