Summary

Barco Pulse Platform projector control via JSON-RPC 2.0 over TCP/IP (port 9090) or RS-232 serial. Supports power control, source routing, image adjustment, warping/blending, environment monitoring, and full introspection. File transfer (warp grids, blend masks, black level masks) via HTTP endpoints. Normal end-user access skips authentication; elevated access requires pass code authentication.

Transport

protocols:
  - tcp
  - serial
  - http  # file transfer endpoints (warp/blend/blacklevel upload+download)
addressing:
  port: 9090  # stated: "service is available on port number 9090" (TCP JSON-RPC)
  base_url: "http://{host}/api"  # stated: file endpoints use http://{projector-address}/api/{endpoint}; HTTP port not explicitly stated in source
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  # inferred: normal end user access skips auth, elevated access requires authenticate method

Traits

- powerable  # inferred: system.poweron, system.poweroff present
- queryable  # inferred: property.get, introspection, environment.getcontrolblocks present
- routable  # inferred: image.window.main.source, image.source.list, image.connector.list present
- levelable  # inferred: image.brightness, image.contrast, image.gamma, image.saturation, image.sharpness present

Actions

# All commands are JSON-RPC 2.0 method names. Envelope:
#   { "jsonrpc": "2.0", "method": "<command>", "params": { ... }, "id": <n> }
# File-transfer actions use HTTP POST to the base_url endpoint.

- id: system_poweron
  label: Power On
  kind: action
  command: "system.poweron"
  params: []
  description: Power on projector. Result is null. Best practice: verify state is standby or ready before issuing.

- id: system_poweroff
  label: Power Off
  kind: action
  command: "system.poweroff"
  params: []
  description: Power off projector. Result is null. Best practice: verify state is on before issuing.

- id: property_set
  label: Set Property
  kind: action
  command: "property.set"
  params:
    - name: property
      type: string
      description: Object.property name (e.g., "image.window.main.source")
    - name: value
      type: mixed
      description: Value to set

- id: property_get
  label: Get Property
  kind: query
  command: "property.get"
  params:
    - name: property
      type: string
      description: Object.property name to read (string for single, array of strings for multiple)

- id: property_subscribe
  label: Subscribe to Property
  kind: action
  command: "property.subscribe"
  params:
    - name: property
      type: string
      description: Object.property name (or array of names) to subscribe to

- id: property_unsubscribe
  label: Unsubscribe from Property
  kind: action
  command: "property.unsubscribe"
  params:
    - name: property
      type: string
      description: Object.property name (or array of names) to unsubscribe from

- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  command: "signal.subscribe"
  params:
    - name: signal
      type: string
      description: Signal name (or array of names) to subscribe to

- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  command: "signal.unsubscribe"
  params:
    - name: signal
      type: string
      description: Signal name (or array of names) to unsubscribe from

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

- id: image_connector_list
  label: List Available Connectors
  kind: query
  command: "image.connector.list"
  params: []

- id: image_source_listconnectors
  label: List Connectors for Source
  kind: query
  command: "image.source.{name}.listconnectors"
  params:
    - name: name
      type: string
      description: Source object name (source name lowercased with non-word chars removed, e.g. "displayport1")
  description: Returns array of connector info (name + grid position) used by the given source.

- id: introspect
  label: Introspect Object
  kind: query
  command: "introspect"
  params:
    - name: object
      type: string
      description: Object name to introspect (dot notation); empty/default introspects everything
    - name: recursive
      type: boolean
      description: Recursive introspection (default true); false lists only one level of object names

- id: authenticate
  label: Authenticate
  kind: action
  command: "authenticate"
  params:
    - name: code
      type: integer
      description: Pass code for elevated access level

- id: environment_getcontrolblocks
  label: Get Environment Control Blocks
  kind: query
  command: "environment.getcontrolblocks"
  params:
    - name: type
      type: string
      description: Sensor type enum (Sensor, Filter, Controller, Actuator, Alarm, GenericBlock)
    - name: valuetype
      type: string
      description: Value type enum (Temperature, Speed, PWM, Voltage, Current, Power, Altitude, Pressure, Humidity, ADC, Coordinate, Peltier, Waveform, Average, Delay, Difference, Interpolation, Limit, Median, Noise, Weighting, Comparison, Threshold, Formula, Driver, PID, Mode, State, Pump, Resistance, Simulation, Constant, Manual, Range, Any)
  description: Returns dictionary of sensor/value readings (e.g. temperatures, fan speeds, voltages).

- id: environment_getalarminfo
  label: Get Alarm Info
  kind: query
  command: "environment.getalarminfo"
  params: []
  description: Returns array of alarm info objects (severity, timestamp, source, description, custommessage).

- id: dmx_listchannels
  label: List DMX Channels
  kind: query
  command: "dmx.listchannels"
  params: []
  description: Return a list of available channel names.

- id: dmx_listmodes
  label: List DMX Modes
  kind: query
  command: "dmx.listmodes"
  params: []
  description: Return a list of all DMX modes.

- id: firmware_listcomponents
  label: List Firmware Components
  kind: query
  command: "firmware.listcomponents"
  params: []
  description: List the names of all managed firmware components.

- id: firmware_listcomponentversionstatus
  label: List Firmware Component Version Status
  kind: query
  command: "firmware.listcomponentversionstatus"
  params: []
  description: List firmware components with available/running versions and upgrade status (Unknown, OK, Upgradable).

- id: firmware_schedulecomponentupgrade
  label: Schedule Component Upgrade
  kind: action
  command: "firmware.schedulecomponentupgrade"
  params: []
  description: Force a component upgrade at the following reboot.

- id: illumination_clo_engage
  label: Engage CLO
  kind: action
  command: "illumination.clo.engage"
  params: []
  description: Engage CLO (Constant Light Output) at the current light level.

- id: illumination_laser_getserialnumber
  label: Get Laser Serial Number
  kind: query
  command: "illumination.laser.getserialnumber"
  params: []
  description: Returns the laser serial number string.

- id: image_color_p7_custom_copypresettocustom
  label: Copy Color Preset to Custom
  kind: action
  command: "image.color.p7.custom.copypresettocustom"
  params:
    - name: presetname
      type: string
      description: Name of preset to copy

- id: image_color_p7_custom_resetpreset
  label: Reset Color Preset
  kind: action
  command: "image.color.p7.custom.resetpreset"
  params:
    - name: presetname
      type: string
      description: Name of preset to reset to defaults

- id: image_color_p7_custom_resettonative
  label: Reset Color to Native
  kind: action
  command: "image.color.p7.custom.resettonative"
  params: []

- id: image_color_rgbmode_nextrgbmode
  label: Next RGB Mode
  kind: action
  command: "image.color.rgbmode.nextrgbmode"
  params: []
  description: Change to the next RGB mode; cycles through all possible modes.

- id: ledctrl_blink
  label: Blink LED
  kind: action
  command: "ledctrl.blink"
  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
  description: Control LED blinking. Result is an integer status code.

- id: warp_file_upload
  label: Upload Warp Grid File
  kind: action
  command: "POST /api/image/processing/warp/file/transfer"
  params:
    - name: file
      type: file
      description: Warp grid XML file (same format as MCM500/400)
  description: HTTP file upload. Example: curl -X POST -F file=@warp.xml http://{host}/api/image/processing/warp/file/transfer

- id: warp_file_download
  label: Download Warp Grid File
  kind: query
  command: "GET /api/image/processing/warp/file/transfer"
  params: []
  description: HTTP file download. Example: curl -O -J http://{host}/api/image/processing/warp/file/transfer . Append /{filename} to download a specific file.

- id: blend_file_upload
  label: Upload Blend Mask
  kind: action
  command: "POST /api/image/processing/blend/file/transfer"
  params:
    - name: file
      type: file
      description: Grayscale blend mask (PNG up to 16-bit, JPEG, or TIFF); uses blue channel if color
  description: HTTP file upload. Example: curl -X POST -F file=@mask.png http://{host}/api/image/processing/blend/file/transfer

- id: blacklevel_file_upload
  label: Upload Black Level Mask
  kind: action
  command: "POST /api/image/processing/blacklevel/file/transfer"
  params:
    - name: file
      type: file
      description: Grayscale black level mask (PNG up to 16-bit, JPEG, or TIFF); uses blue channel if color
  description: HTTP file upload. Example: curl -X POST -F file=@blacklevel.png http://{host}/api/image/processing/blacklevel/file/transfer

Feedbacks

- id: system_state
  label: System State
  type: enum
  values:
    - boot
    - eco
    - standby
    - ready
    - conditioning
    - on
    - service
    - deconditioning
    - error

- id: property_changed
  label: Property Changed Notification
  type: notification
  description: Unsolicited notification when property value changes. Format: { "jsonrpc": "2.0", "method": "property.changed", "params": { "property": [{ "objectname.propertyname": value }] } }

- id: signal_callback
  label: Signal Callback Notification
  type: notification
  description: Unsolicited notification when signal fires. Format: { "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [{ "objectname.signalname": args }] } }

- id: modelupdated
  label: Model Updated Signal
  type: signal
  description: Triggered when the object structure changes (objects added or removed). Delivered via signal.callback with object name and isnew flag (true = added, false = removed).

- id: warp_gridchanged
  label: Warp Grid Changed Signal
  type: signal
  description: Triggered when the warp grid changes. Signal name: image.processing.warp.gridchanged. Delivered via signal.callback.

- id: introspect_objectchanged
  label: Object Changed Signal
  type: signal
  description: Triggered via introspect when new objects arrive or are removed. Delivered via signal.callback as introspect.objectchanged with object name and isnew flag.

Variables

- id: image_brightness
  label: Brightness
  type: float
  constraints:
    min: -1
    max: 1
    step-size: 1
    precision: 0.01
  default: 0
  description: Image brightness/offset. 0 is default, 1 is 100% offset.

- id: image_contrast
  label: Contrast
  type: float
  constraints:
    min: 0
    max: 2
    step-size: 1
    precision: 0.01
  default: 1

- id: image_gamma
  label: Gamma
  type: float
  constraints:
    min: 1
    max: 3
    step-size: 1
    precision: 0.1
  default: 2.2

- id: image_saturation
  label: Saturation
  type: float
  constraints:
    min: 0
    max: 2
    step-size: 1
    precision: 0.01
  default: 1

- id: image_sharpness
  label: Sharpness
  type: int
  constraints:
    min: -2
    max: 8
    step-size: 1
    precision: 1

- id: image_orientation
  label: Image Orientation
  type: enum
  values:
    - DESKTOP_FRONT
    - DESKTOP_REAR
    - CEILING_FRONT
    - CEILING_REAR

- id: illumination_state
  label: Illumination State
  type: enum
  values:
    - On
    - Off

- id: illumination_sources_laser_power
  label: Laser Power
  type: float
  description: Target power in percent

- id: illumination_sources_laser_minpower
  label: Laser Min Power
  type: float
  description: Minimum power in percent (read-only)

- id: illumination_sources_laser_maxpower
  label: Laser Max Power
  type: float
  description: Maximum power in percent (read-only)

- id: image_window_main_source
  label: Main Window Source
  type: string
  description: Source displayed in main window (e.g., "DisplayPort 1", "HDMI")

- id: image_window_main_position
  label: Window Position
  type: object
  properties:
    x: int
    y: int

- id: image_window_main_size
  label: Window Size
  type: object
  properties:
    width: int
    height: int

- id: image_window_main_scalingmode
  label: Scaling Mode
  type: enum
  values:
    - Fill
    - OneToOne
    - FillScreen
    - Stretch

- id: image_processing_warp_enable
  label: Warp Enable
  type: boolean

- id: image_processing_warp_file_enable
  label: File Warp Enable
  type: boolean

- id: image_processing_warp_file_selected
  label: Selected Warp File
  type: string

- id: image_processing_blend_file_enable
  label: Blend Enable
  type: boolean

- id: image_processing_blend_file_selected
  label: Selected Blend Files
  type: array
  items:
    type: string

- id: image_processing_blacklevel_file_enable
  label: Black Level Enable
  type: boolean

- id: image_processing_blacklevel_file_selected
  label: Selected Black Level File
  type: string

- id: optics_shutter_position
  label: Shutter Position
  type: enum
  values:
    - Open
    - Closed

- id: optics_shutter_target
  label: Shutter Target
  type: enum
  values:
    - Open
    - Closed

- id: optics_zoom_position
  label: Zoom Position
  type: int

- id: optics_focus_position
  label: Focus Position
  type: int

- id: optics_lensshift_horizontal_position
  label: Lens Shift Horizontal
  type: int

- id: optics_lensshift_vertical_position
  label: Lens Shift Vertical
  type: int

- id: environment_alarmstate
  label: Alarm State
  type: enum
  values:
    - Fatal
    - Error
    - Alert
    - Warning
    - Ok

- id: network_device_lan_state
  label: LAN State
  type: enum
  values:
    - CONNECTED
    - DISCONNECTED

- id: network_device_lan_ip4config
  label: LAN IPv4 Configuration
  type: object
  properties:
    Address: string
    Mask: string
    Gateway: string
    NameServers: string
  description: Current IPv4 configuration (read-only).

- id: image_connector_detectedsignal
  label: Connector Detected Signal
  type: object
  description: Signal information for a connector (parameterized by connector object name, e.g. image.connector.displayport1.detectedsignal). If active is false, no signal detected and other fields should be disregarded.
  properties:
    active: boolean
    name: string
    vertical_total: int
    horizontal_total: int
    vertical_resolution: int
    horizontal_resolution: int
    vertical_sync_width: int
    vertical_front_porch: int
    vertical_back_porch: int
    horizontal_sync_width: int
    horizontal_front_porch: int
    horizontal_back_porch: int
    horizontal_frequency: float
    vertical_frequency: float
    pixel_rate: int
    scan: string
    bits_per_component: int
    color_space: string
    signal_range: string
    chroma_sampling: string
    gamma_type: string

- id: system_standby_enable
  label: Standby Enable
  type: boolean

- id: system_eco_enable
  label: ECO Mode Enable
  type: boolean

- id: dmx_mode
  label: DMX Mode
  type: string

- id: dmx_startchannel
  label: DMX Start Channel
  type: int
  constraints:
    min: 1
    max: 512

- id: dmx_shutdown
  label: DMX Shutdown
  type: boolean

Events

# Unsolicited notifications delivered as JSON-RPC messages with no id.
# Documented notification methods:
#   - property.changed  (property/value pairs array)
#   - signal.callback   (signal/argument-list pairs array)
# Specific named signals beyond modelupdated and image.processing.warp.gridchanged
# are discovered via introspection per device configuration.

Macros

# UNRESOLVED: no explicit multi-step macro sequences described in source

Safety

confirmation_required_for: []
interlocks:
  - id: eco_wakeup
    description: To wake projector from ECO mode, send wake on LAN with HW (MAC) address, use physical power button, or send ":POWR1\r" via RS-232 serial. Do not send standard power commands while in ECO mode.

Notes

JSON-RPC 2.0 protocol. All parameters passed by name; order does not matter. Best practice: wait for property.set confirmation before setting same property again to avoid flooding server. File upload/download via HTTP on the projector address with /api endpoint (e.g., curl -X POST -F file=@warp.xml http://192.168.1.100/api/image/processing/warp/file/transfer). ECO mode requires special wake-up procedure (WOL or serial :POWR1\r). API is partially dynamic; introspection recommended to discover available objects for specific configuration. Source-object names derived from source display names by removing non-word characters and lowercasing (e.g. "DisplayPort 1" → "displayport1"). Warp file format is shared with MCM500/400. Blend and black level masks are grayscale (8 or 16-bit); interface accepts color images but uses only the blue channel. Mask resolution depends on projector resolution (WUXGA 1920×1200; WQXGA/4K 1280×800; 4K Cinemascope 1280×540).


Upgrade done. Summary of adds (caveman mode):

**Transport:** added `http` protocol + `base_url` for file endpoints.

**Actions** — added `command:` field to all 12 existing actions (payload rule). Added 16 new actions:
- `image_source_listconnectors`, `environment_getcontrolblocks`, `environment_getalarminfo`
- `dmx_listchannels`, `dmx_listmodes`
- `firmware_listcomponents`, `firmware_listcomponentversionstatus`, `firmware_schedulecomponentupgrade`
- `illumination_clo_engage`, `illumination_laser_getserialnumber`
- `image_color_p7_custom_copypresettocustom`, `image_color_p7_custom_resetpreset`, `image_color_p7_custom_resettonative`, `image_color_rgbmode_nextrgbmode`
- `ledctrl_blink`
- `warp_file_upload`, `warp_file_download`, `blend_file_upload`, `blacklevel_file_upload`

**Feedbacks:** added `service` to `system_state` enum; added `warp_gridchanged` + `introspect_objectchanged` signals.

**Variables:** added `image_orientation`, `network_device_lan_ip4config`, `image_connector_detectedsignal`.

Existing IDs/shapes preserved. No valid entries deleted.

## Provenance

```yaml
source_domains:
  - audiogeneral.com
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-05-22T15:45:48.460Z
last_checked_at: 2026-07-12T08:55:39.755Z
```

## Verification Summary

```yaml
verdict: verified
checked_at: 2026-07-12T08:55:39.755Z
matched_actions: 31
action_count: 31
confidence: medium
summary: "All 31 spec actions have literal counterparts in the source; all transport parameters verified with exact matches; complete bidirectional coverage. (7 unresolved item(s) noted in Known Gaps.)"
```

## Known Gaps

```yaml
- "specific model variants not distinguished in source"
- "no explicit multi-step macro sequences described in source"
- "full list of DMX modes not enumerated in source (discoverable via dmx.listmodes)"
- "specific connector signal property names not fully cataloged (only examples given: image.connector.l1hdmi.detectedsignal, image.connector.displayport1.detectedsignal)"
- "firmware version compatibility not stated in source"
- "voltage, current, power consumption specifications not present in source"
- "HTTP port for file endpoints not explicitly stated in source"
```

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