Summary
JSON-RPC 2.0 control API for Barco Pulse projectors, reachable over TCP/IP (port 9090) and RS-232 serial (19200 8N1). Covers power, source selection, illumination/laser power, picture settings, warping, blending, black-level correction, optics (shutter/zoom/focus/lens shift), DMX, environment telemetry, and firmware management. Property introspection drives much of the surface.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: none # inferred: normal end-user access requires no auth (source: "Authentication is only necessary when a higher level than normal end user is required")
# NOTE: source documents an `authenticate` method requiring a numeric secret passcode for elevated access.
# Passcode value/format UNRESOLVED (credential - not populated per policy). Example uses code 98765.
Traits
traits:
- powerable # inferred: system.poweron / system.poweroff
- queryable # inferred: property.get / introspect / environment.getcontrolblocks
- routable # inferred: image.window.main.source selection
- levelable # inferred: brightness/contrast/gamma/laser power set
Actions
# JSON-RPC 2.0 method = one action. Parameterized methods carry the variable
# part in params. Literal payloads copied verbatim from source.
# All requests use envelope: { "jsonrpc": "2.0", "method": <m>, "params": {...}, "id": <n> }
actions:
# --- Authentication ---
- id: authenticate
label: Authenticate (elevated access)
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":98765},"id":1}'
params:
- name: code
type: integer
description: Secret passcode (value UNRESOLVED - example shows 98765)
notes: Only required for access levels above normal end user.
# --- Power ---
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron"}'
params: []
notes: No-op if already on or transitioning. Best practice: verify system.state is standby/ready first.
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
params: []
notes: No-op if already off or transitioning. Best practice: verify system.state is on first.
- id: eco_wake_serial
label: ECO Mode Wake (serial only)
kind: action
command: ':POWR1\r'
params: []
notes: ASCII string sent over RS-232 to wake a projector in ECO mode. TCP equivalent not documented.
# --- Generic property API (parameterized) ---
- id: property_set
label: Set Property
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"{property}","value":{value}},"id":{id}}'
params:
- name: property
type: string
description: Dot-notation property name (e.g. image.brightness)
- name: value
type: any
description: Value matching the property type
notes: Wait for confirmation before re-setting the same property (source guidance).
- id: property_get
label: Get Property
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"{property}"},"id":{id}}'
params:
- name: property
type: string
description: Dot-notation property name
- id: property_subscribe
label: Subscribe to Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"{property}"},"id":{id}}'
params:
- name: property
type: string
description: Property name or array of property names
- id: property_unsubscribe
label: Unsubscribe from Property Changes
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"},"id":{id}}'
params:
- name: property
type: string
description: Property name or array of property names
# --- Signal API ---
- id: signal_subscribe
label: Subscribe to Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"{signal}"},"id":{id}}'
params:
- name: signal
type: string
description: Signal name or array of signal names
- id: signal_unsubscribe
label: Unsubscribe from Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"{signal}"},"id":{id}}'
params:
- name: signal
type: string
description: Signal name or array of signal names
# --- Introspection ---
- id: introspect
label: Introspect Object Metadata
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":["{object}",{recursive}],"id":{id}}'
params:
- name: object
type: string
description: Object name in dot notation (empty = all)
- name: recursive
type: boolean
description: If false, only immediate object names listed (one level)
notes: Result restricted by authenticated access level.
# --- Sources / connectors ---
- id: image_source_list
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list","id":{id}}'
params: []
notes: Returns array of source name strings; contents vary by model.
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list","id":{id}}'
params: []
- id: image_source_listconnectors
label: List Connectors Used By Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{name}.listconnectors","id":{id}}'
params:
- name: name
type: string
description: Source object name (source name lowercased, non-word chars removed, e.g. displayport1)
# --- Environment telemetry ---
- id: environment_getcontrolblocks
label: Get Environment Sensor Readings
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"},"id":{id}}'
params:
- name: type
type: string
description: 'Sensor type. Values: Sensor, Filter, Controller, Actuator, Alarm, GenericBlock'
- name: valuetype
type: string
description: 'Value type. Values: 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'
notes: Returns dictionary of sensor-name -> reading.
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo","id":{id}}'
params: []
notes: Returns array of {severity, timestamp, source, description, custommessage}.
# --- DMX ---
- id: dmx_listchannels
label: List DMX Channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels","id":{id}}'
params: []
- id: dmx_listmodes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes","id":{id}}'
params: []
# --- Firmware ---
- id: firmware_listcomponents
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents","id":{id}}'
params: []
- id: firmware_listcomponentversionstatus
label: List Firmware Version Status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus","id":{id}}'
params: []
notes: Returns per-component {name, versions{available,running}, status: Unknown|OK|Upgradable}.
- id: firmware_schedulecomponentupgrade
label: Schedule Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
notes: Forces component upgrade at next reboot.
# --- Illumination ---
- id: illumination_clo_engage
label: Engage CLO (Constant Light Output)
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
notes: Engages 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","id":{id}}'
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":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
description: Preset name to copy
- id: image_color_p7_custom_resetpreset
label: Reset Color Preset
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 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: []
notes: Cycles through all available RGB modes.
# --- LED control (documented in method-invocation example) ---
- id: ledctrl_blink
label: Blink LED
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"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
Feedbacks
feedbacks:
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
access: read
notes: Queried via property.get on "system.state". Observable via property.changed.
- id: illumination_state
type: enum
values: [On, Off]
access: read
- id: laser_minpower
type: float
access: read
notes: Minimum laser power percent. Dynamic; affected by lens type/position.
- id: laser_maxpower
type: float
access: read
notes: Maximum laser power percent. Dynamic; affected by lens type/position.
- id: image_connector_detectedsignal
type: object
access: read
notes: |
Queried via property.get on "image.connector.{name}.detectedsignal".
Fields: active(bool), name(string), vertical_total, horizontal_total,
vertical_resolution, horizontal_resolution, vertical_sync_width,
vertical_front_porch, vertical_back_porch, horizontal_sync_width,
horizontal_front_porch, horizontal_back_porch, horizontal_frequency(float),
vertical_frequency(float), pixel_rate(int), scan(enum), bits_per_component(int),
color_space(enum), signal_range(enum: 0-255|16-235), chroma_sampling(enum: 4:4:4|4:2:2|4:2:0),
gamma_type(enum: POWER|sRGB|REC_BT1886|SMPTE_ST2084), color_primaries(enum:
REC709|REC2020|DCI-P3-D65|DCI-P3-Theater), mastering_luminance(float),
content_aspect_ratio(enum), is_stereo(bool), stereo_mode(enum:
None|Sequential|FramePacked|TopBottom|SideBySide).
- id: network_device_lan_ip4config
type: object
access: read
notes: Fields Address, Mask, Gateway, NameServers (all string).
- id: network_device_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
access: read
- id: environment_alarmstate
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
access: read
- id: environment_temperatures
type: dictionary
access: read
notes: |
Retrieved via environment.getcontrolblocks {type: Sensor, valuetype: Temperature}.
Example keys: environment.laser.boardN.bankN.temperature,
environment.laser.boardN.heatsinkN.temperature, environment.temperature.cyclon5,
environment.temperature.imx6, environment.temperature.inlet,
environment.temperature.mainboard, environment.temperature.mainpower,
environment.temperature.outlet, environment.temperature.scalerfpga.
- id: environment_fanspeeds
type: dictionary
access: read
notes: |
Retrieved via environment.getcontrolblocks {type: Sensor, valuetype: Speed}.
Example keys: environment.fan.{ar1..ar5,driver,optics,pcb,phosphorleft,phosphorright,psu}.tacho.
- id: active_source
type: string
access: read
notes: Queried via property.get on "image.window.main.source".
Variables
variables:
- id: illumination_sources_laser_power
type: float
access: read_write
unit: percent
notes: Target laser power. Queried/set via property on "illumination.sources.laser.power".
- id: image_window_main_source
type: string
access: read_write
notes: Active source for main window. Set via property "image.window.main.source".
- id: image_window_main_position
type: object
access: read_write
notes: '{x: int, y: int}'
- id: image_window_main_size
type: object
access: read_write
notes: '{width: int, height: int}'
- id: image_window_main_scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
access: read_write
- id: image_brightness
type: float
access: read_write
constraints: {min: -1, max: 1, step_size: 1, precision: 0.01}
notes: Normalized; 0 default, 1 = 100% offset.
- id: image_contrast
type: float
access: read_write
constraints: {min: 0, max: 2, step_size: 1, precision: 0.01}
notes: Normalized; 1 default.
- id: image_gamma
type: float
access: read_write
constraints: {min: 1, max: 3, step_size: 1, precision: 0.1}
notes: Default 2.2.
- id: image_saturation
type: float
access: read_write
constraints: {min: 0, max: 2, step_size: 1, precision: 0.01}
notes: Normalized; 1 default.
- id: image_sharpness
type: integer
access: read_write
constraints: {min: -2, max: 8, step_size: 1, precision: 1}
notes: Normalized.
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
access: read_write
- id: image_processing_warp_enable
type: boolean
access: read_write
notes: Globally enable/disable all warp functions.
- id: image_processing_warp_file_enable
type: boolean
access: read_write
notes: Enable/disable file warp.
- id: image_processing_warp_file_selected
type: string
access: read_write
notes: Currently selected warp file. Upload via HTTP POST to /api/image/processing/warp/file/transfer.
- id: image_processing_blend_file_enable
type: boolean
access: read_write
- id: image_processing_blend_file_selected
type: array
items: string
access: read_write
notes: Upload via HTTP POST to /api/image/processing/blend/file/transfer. PNG/JPEG/TIFF grayscale (blue channel used if RGB).
- id: image_processing_blacklevel_file_enable
type: boolean
access: read_write
- id: image_processing_blacklevel_file_selected
type: string
access: read_write
notes: Upload via HTTP POST to /api/image/processing/blacklevel/file/transfer.
- id: dmx_mode
type: string
access: read_write
- id: dmx_startchannel
type: integer
access: read_write
constraints: {min: 1, max: 512}
- id: dmx_shutdown
type: boolean
access: read_write
- id: optics_shutter_position
type: enum
values: [Open, Closed]
access: read_write
- id: optics_shutter_target
type: enum
values: [Open, Closed]
access: read_write
- id: optics_zoom_position
type: integer
access: read_write
- id: optics_focus_position
type: integer
access: read_write
- id: optics_lensshift_horizontal_position
type: integer
access: read_write
- id: optics_lensshift_vertical_position
type: integer
access: read_write
- id: system_standby_enable
type: boolean
access: read_write
notes: Check availability first.
- id: system_eco_enable
type: boolean
access: read_write
notes: Check availability first.
Events
events:
- id: property_changed
direction: server_to_client
payload: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"{property}":{value}}]}}'
notes: Unsolicited. No id, no response to return. Delivered on subscribed property changes. May fire twice for source switches (deselect then select).
- id: signal_callback
direction: server_to_client
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"{signal}":{"arg1":100,"arg2":"cat"}}]}}'
notes: Unsolicited. Delivered on subscribed signal emission.
- id: introspect_objectchanged
direction: server_to_client
payload: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"introspect.objectchanged":{"object":"{object}","newobject":true}}]}}'
notes: Subscribed via signal "modelupdated". Fires when objects added/removed. Args: object(string), isnew(bool).
Macros
macros: []
# UNRESOLVED: source documents no explicit named multi-step macro sequences.
# Note: programmer's guide describes procedures (e.g. "set source, then enable warp,
# then upload+select+enable warp file") but these are guidance, not named macros.
Safety
confirmation_required_for: []
interlocks:
- power_on_guard: "Verify system.state is standby or ready before issuing system.poweron (no-op otherwise)."
- power_off_guard: "Verify system.state is on before issuing system.poweroff (no-op otherwise)."
- property_set_rate: "Wait for property.set confirmation before re-setting the same property (flooding degrades performance)."
# UNRESOLVED: no explicit safety warnings, interlock procedures, or power-on
# sequencing requirements stated beyond the operational best-practice notes above.
Notes
- Protocol is JSON-RPC 2.0 over TCP (port 9090) or RS-232 (19200 8N1, no flow control). Serial cable: 9-pin female host to 9-pin male projector, pin 2↔2, 3↔3, 5↔5.
- Parameters passed by name; order insignificant.
- API is partly dynamic — actual surface depends on peripherals/config (e.g. motorized zoom lens, DMX extended mode). Use
introspectfor the authoritative per-device API. - File endpoints accessed over plain HTTP at
http://<projector-ip>/api/...(e.g. warp, blend, blacklevel transfers via curl-F file=@...). Base URL host is the projector IP; example uses 192.168.1.100. - ECO-mode wake requires Wake-on-LAN (MAC address), physical power button, or the serial ASCII string
:POWR1\r. - Warp file format shared with MCM500/MCM400.
- Source name -> object name translation: lowercase, strip non-word chars (e.g. "DisplayPort 1" -> "displayport1").
Provenance
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-26T10:23:18.312Z
last_checked_at: 2026-08-05T08:03:21.536Z
Verification Summary
verdict: verified
checked_at: 2026-08-05T08:03:21.536Z
matched_actions: 28
action_count: 28
confidence: medium
summary: "All 28 spec action units map literally to JSON-RPC method tokens or the serial :POWR1 wake string documented in the refined source. (11 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "The provided device name \"Barco Fiberlink 2 Receiver Multi Mode\" (a fiber-optic signal extender) does not match the source document, which is the generic Pulse projector API (\"Pulse API\"). This spec reflects the source content (Pulse projectors), not a Fiberlink receiver. Confirm the correct source artifact before publishing."
- "No single projector model named; \"Pulse\" family inferred. Warp file format cross-references MCM500/MCM400."
- "firmware version compatibility not stated in source"
- "source documents no explicit named multi-step macro sequences."
- "no explicit safety warnings, interlock procedures, or power-on"
- "Device name \"Barco Fiberlink 2 Receiver Multi Mode\" supplied by operator does not match source (Pulse projector API). Likely wrong source artifact paired with this entity."
- "Specific projector model(s) not stated; \"Pulse\" family assumed."
- "Authenticate passcode value/format is a credential and not populated; only the method envelope is documented."
- "HTTP file-transfer endpoints lack documented auth and content-type constraints beyond \"blue channel used for grayscale-as-RGB\"."
- "No firmware version compatibility ranges stated."
- "LED/DMX color/mode vocabularies only exemplified, not enumerated exhaustively in source."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0