Summary

The Barco DP2K-10sX is a Pulse-series DLP cinema projector. This spec covers the Pulse JSON-RPC 2.0 control API exposed over TCP port 9090, the RS-232 serial wake-up interface, and the HTTP file endpoints under /api/.

Transport

protocols:
  - tcp
  - serial
  - http
addressing:
  port: 9090
  base_url: ""  # UNRESOLVED: projector IP/host not stated; pattern is http://<address>/api/...
serial:
  baud_rate: 19200
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: passcode  # source: "authenticate" method with numeric "code"; required for elevated access, skippable for end-user level

Traits

- powerable       # inferred from system.poweron / system.poweroff methods
- routable        # inferred from image.window.main.source property
- queryable       # inferred from property.get / property.subscribe methods
- levelable       # inferred from illumination.sources.laser.power and image.brightness/contrast/gamma/saturation/sharpness properties
- observable      # inferred from property.changed / signal.callback notifications

Actions

# --- Authentication ---
- id: authenticate
  label: Authenticate Session
  kind: action
  command: '{"jsonrpc":"2.0","method":"authenticate","params":{"id":1,"code":98765}}'
  params:
    - name: code
      type: integer
      description: Secret pass code for elevated access level

# --- System power ---
- id: system_poweron
  label: System Power On
  kind: action
  command: '{"jsonrpc":"2.0","method":"system.poweron"}'
  params: []
- id: system_poweroff
  label: System Power Off
  kind: action
  command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
  params: []
- id: serial_wake_from_eco
  label: Wake Projector from ECO (RS-232)
  kind: action
  command: ":POWR1\r"
  params: []
  notes: ASCII string on the RS-232 serial port; wakes projector from ECO mode.

# --- Generic property get/set ---
- id: property_set
  label: Set Property Value
  kind: action
  command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"{property}","value":{value}}}'
  params:
    - name: property
      type: string
      description: Dot-notation property path (e.g. "image.window.main.source")
    - name: value
      type: string
      description: Value to assign; type depends on the target property
- id: property_get
  label: Get Property Value
  kind: query
  command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"{property}"}}'
  params:
    - name: property
      type: string
      description: Dot-notation property path
- id: property_subscribe
  label: Subscribe to Property Changes
  kind: action
  command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"{property}"}}'
  params:
    - name: property
      type: string
      description: Single property path, or array of property paths
- id: property_unsubscribe
  label: Unsubscribe from Property Changes
  kind: action
  command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"}}'
  params:
    - name: property
      type: string
      description: Single property path, or array of property paths

# --- Generic signal subscribe ---
- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"{signal}"}}'
  params:
    - name: signal
      type: string
      description: Signal name (e.g. "modelupdated") or array of names
- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"{signal}"}}'
  params:
    - name: signal
      type: string
      description: Signal name or array of names

# --- Introspection ---
- id: introspect_recursive
  label: Introspect Object (Recursive)
  kind: query
  command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":true},"id":1}'
  params:
    - name: object
      type: string
      description: Object name in dot notation; empty introspects everything
- id: introspect_nonrecursive
  label: Introspect Object (One Level)
  kind: query
  command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":false},"id":2}'
  params:
    - name: object
      type: string
      description: Object name in dot notation

# --- LED control ---
- id: ledctrl_blink
  label: Blink Status LED
  kind: action
  command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"id":3,"led":"{led}","color":"{color}","period":{period}}}'
  params:
    - name: led
      type: string
      description: LED identifier (e.g. "systemstatus")
    - name: color
      type: string
      description: LED color (e.g. "red")
    - name: period
      type: integer
      description: Blink period

# --- Sources / connectors ---
- id: image_source_list
  label: List Available Sources
  kind: query
  command: '{"jsonrpc":"2.0","method":"image.source.list","id":1}'
  params: []
- id: image_connector_list
  label: List Available Connectors
  kind: query
  command: '{"jsonrpc":"2.0","method":"image.connector.list","id":3}'
  params: []
- id: image_source_listconnectors
  label: List Connectors Used by Source
  kind: query
  command: '{"jsonrpc":"2.0","method":"image.source.{source}.listconnectors","id":4}'
  params:
    - name: source
      type: string
      description: Source object name (e.g. "displayport1") derived by lowercasing and stripping non-word characters from the source label

# --- Illumination ---
- id: illumination_clo_engage
  label: Engage CLO at Current Light Level
  kind: action
  command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
  params: []
- id: illumination_laser_getserialnumber
  label: Get Laser Serial Number
  kind: query
  command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
  params: []

# --- Image / color ---
- id: image_color_p7_custom_copypresettocustom
  label: Copy P7 Preset to Custom
  kind: action
  command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":"{presetname}"}}'
  params:
    - name: presetname
      type: string
      description: Preset name to copy
- id: image_color_p7_custom_resetpreset
  label: Reset P7 Preset to Default
  kind: action
  command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":"{presetname}"}}'
  params:
    - name: presetname
      type: string
      description: Preset name to reset
- id: image_color_p7_custom_resettonative
  label: Reset P7 Color to Native
  kind: action
  command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
  params: []
- id: image_color_rgbmode_nextrgbmode
  label: Cycle to Next RGB Mode
  kind: action
  command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
  params: []

# --- Environment ---
- id: environment_getcontrolblocks
  label: Get Environment Sensor Blocks
  kind: query
  command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"}}'
  params:
    - name: type
      type: string
      description: Sensor type (e.g. "Sensor")
    - name: valuetype
      type: string
      description: Sensor value type (e.g. "Temperature", "Speed", "Voltage", "Power")
- id: environment_getalarminfo
  label: Get Alarm Info
  kind: query
  command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
  params: []

# --- Firmware ---
- id: firmware_listcomponents
  label: List Firmware Components
  kind: query
  command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
  params: []
- id: firmware_listcomponentversionstatus
  label: List Firmware Component Version Status
  kind: query
  command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
  params: []
- id: firmware_schedulecomponentupgrade
  label: Schedule Component Upgrade at Next Reboot
  kind: action
  command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
  params: []

# --- DMX ---
- id: dmx_listmodes
  label: List DMX Modes
  kind: query
  command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
  params: []
- id: dmx_listchannels
  label: List DMX Channel Names
  kind: query
  command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
  params: []

# --- HTTP file endpoints ---
- id: upload_warp_grid
  label: Upload Warp Grid File (HTTP)
  kind: action
  command: 'curl -X POST -F file=@warp.xml http://<address>/api/image/processing/warp/file/transfer'
  params:
    - name: address
      type: string
      description: Projector IP/hostname
- id: upload_blend_mask
  label: Upload Blend Mask Image (HTTP)
  kind: action
  command: 'curl -X POST -F file=@mask.png http://<address>/api/image/processing/blend/file/transfer'
  params:
    - name: address
      type: string
      description: Projector IP/hostname
- id: upload_blacklevel_mask
  label: Upload Black Level Mask (HTTP)
  kind: action
  command: 'curl -X POST -F file=@blacklevel.png http://<address>/api/image/processing/blacklevel/file/transfer'
  params:
    - name: address
      type: string
      description: Projector IP/hostname
- id: download_file
  label: Download File from Projector (HTTP)
  kind: action
  command: 'curl -O -J http://<address>/api/<endpoint>'
  params:
    - name: address
      type: string
      description: Projector IP/hostname
    - name: endpoint
      type: string
      description: File endpoint path (e.g. "image/processing/warp/file/transfer")

Feedbacks

- id: system_state
  type: enum
  values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
  source_property: system.state
- id: illumination_state
  type: enum
  values: [On, Off]
  source_property: illumination.state
- id: environment_alarmstate
  type: enum
  values: [Fatal, Error, Alert, Warning, Ok]
  source_property: environment.alarmstate
- id: network_lan_state
  type: enum
  values: [CONNECTED, DISCONNECTED]
  source_property: network.device.lan.state
- id: optics_shutter_position
  type: enum
  values: [Open, Closed]
  source_property: optics.shutter.position
- id: optics_shutter_target
  type: enum
  values: [Open, Closed]
  source_property: optics.shutter.target
- id: detected_signal
  type: object
  description: Signal info dict (active, name, resolutions, frequencies, scan, color_space, etc.) per connector; see image.connector.<name>.detectedsignal

Variables

- id: illumination_laser_power
  property: illumination.sources.laser.power
  type: float
  access: RW
  description: Target laser power in percent
  range:
    min: 0
    max: 100
  notes: min/max dynamic; lens and lens position may affect
- id: illumination_laser_minpower
  property: illumination.sources.laser.minpower
  type: float
  access: R
  description: Minimum laser power in percent
- id: illumination_laser_maxpower
  property: illumination.sources.laser.maxpower
  type: float
  access: R
  description: Maximum laser power in percent
- id: image_brightness
  property: image.brightness
  type: float
  access: RW
  range: {min: -1, max: 1, step: 0.01}
  description: Normalized brightness/offset; 0 default, 1 = 100% offset
- id: image_contrast
  property: image.contrast
  type: float
  access: RW
  range: {min: 0, max: 2, step: 0.01}
  description: Normalized contrast/gain; 1 default
- id: image_gamma
  property: image.gamma
  type: float
  access: RW
  range: {min: 1, max: 3, step: 0.1}
  description: Gamma; 2.2 default
- id: image_saturation
  property: image.saturation
  type: float
  access: RW
  range: {min: 0, max: 2, step: 0.01}
  description: Normalized color saturation; 1 default
- id: image_sharpness
  property: image.sharpness
  type: integer
  access: RW
  range: {min: -2, max: 8, step: 1}
  description: Normalized image sharpness
- id: image_orientation
  property: image.orientation
  type: enum
  access: RW
  values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: image_window_main_source
  property: image.window.main.source
  type: string
  access: RW
  description: Active source label (e.g. "DisplayPort 1", "HDMI")
- id: image_window_main_scalingmode
  property: image.window.main.scalingmode
  type: enum
  access: RW
  values: [Fill, OneToOne, FillScreen, Stretch]
- id: optics_zoom_position
  property: optics.zoom.position
  type: integer
  access: RW
- id: optics_focus_position
  property: optics.focus.position
  type: integer
  access: RW
- id: optics_lensshift_horizontal_position
  property: optics.lensshift.horizontal.position
  type: integer
  access: RW
- id: optics_lensshift_vertical_position
  property: optics.lensshift.vertical.position
  type: integer
  access: RW
- id: dmx_mode
  property: dmx.mode
  type: string
  access: RW
- id: dmx_startchannel
  property: dmx.startchannel
  type: integer
  access: RW
  range: {min: 1, max: 512}
- id: dmx_shutdown
  property: dmx.shutdown
  type: boolean
  access: RW
- id: system_standby_enable
  property: system.standby.enable
  type: boolean
  access: RW
- id: system_eco_enable
  property: system.eco.enable
  type: boolean
  access: RW
- id: image_processing_warp_enable
  property: image.processing.warp.enable
  type: boolean
  access: RW
- id: image_processing_warp_file_selected
  property: image.processing.warp.file.selected
  type: string
  access: RW
- id: image_processing_blend_file_selected
  property: image.processing.blend.file.selected
  type: array
  access: RW
  items: string
- id: image_processing_blacklevel_file_selected
  property: image.processing.blacklevel.file.selected
  type: string
  access: RW

Events

- id: property_changed
  description: Server-pushed notification of property value changes; received via property.changed method
  payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"objectname.propertyname":value}]}}'
- id: signal_callback
  description: Server-pushed notification of emitted signals
  payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"objectname.signalname":{arg1:..,arg2:..}}]}}'
- id: modelupdated
  description: Signal fired when introspectable object structure changes (objects added/removed)
- id: introspect_objectchanged
  description: Signal fired when a specific introspected object is added (isnew=true) or removed (isnew=false)

Macros

- id: enable_warp_from_file
  description: Enable warping from a grid file (4-step sequence from source)
  steps:
    - id: upload_warp_grid
    - id: property_set image.processing.warp.file.selected = "warp.xml"
    - id: property_set image.processing.warp.file.enable = true
    - id: property_set image.processing.warp.enable = true
- id: enable_blend_mask
  description: Apply an uploaded blend mask (3-step sequence)
  steps:
    - id: upload_blend_mask
    - id: property_set image.processing.blend.file.selected = ["mask.png"]
    - id: property_set image.processing.blend.file.enable = true
- id: enable_blacklevel_mask
  description: Apply an uploaded black level mask (3-step sequence)
  steps:
    - id: upload_blacklevel_mask
    - id: property_set image.processing.blacklevel.file.selected = "blacklevel.png"
    - id: property_set image.processing.blacklevel.file.enable = true

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings, interlocks, or power-on sequencing requirements.
# Implicit guidance only: "verify system.state is standby or ready before issuing system.poweron" and
# "verify system.state is on before issuing system.poweroff" - these are operational hints, not safety interlocks.

Notes

All requests/responses are JSON-RPC 2.0 over TCP/9090; param position is irrelevant (named params). Best practice: wait for property.set confirmation before sending the same property again to avoid flooding. system.poweron / system.poweroff return null result, not an error. ECO-mode wake requires either Wake-on-LAN (MAC), the keypad/remote, or the RS-232 string :POWR1\r on the serial port. The API surface is dynamic and depends on connected peripherals (e.g. motorized lens, DMX mode); use introspect to enumerate the live model.

Provenance

source_domains:
  - audiogeneral.com
  - docs
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-05-14T11:37:52.209Z
last_checked_at: 2026-06-02T21:40:31.147Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T21:40:31.147Z
matched_actions: 33
action_count: 33
confidence: medium
summary: "All 33 spec actions match verbatim JSON-RPC methods, RS-232 command, and HTTP endpoints documented in the source; transport (port 9090, baud 19200, serial params) confirmed. (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "full property/method catalogue is dynamic; introspect for exact model config"
- "projector IP/host not stated; pattern is http://<address>/api/..."
- "source contains no explicit safety warnings, interlocks, or power-on sequencing requirements."
- "- firmware compatibility range not stated"

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