Summary
JSON-RPC 2.0 API ("Pulse") for Barco Pulse projectors. Two transports: TCP/IP on port 9090 and RS-232 serial (19200 baud). Covers power, sources, illumination, image, optics, warp/blend/blacklevel files, environment telemetry, DMX, firmware.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: passcode # source describes authenticate method with secret code; access level elevation optional
Traits
# inferred from documented commands:
# - powerable (system.poweron / system.poweroff)
# - queryable (property.get across many properties)
# - routable (image.window.main.source selection)
# - levelable (image.brightness/contrast/gamma/saturation/sharpness, illumination power)
traits:
- powerable
- queryable
- routable
- levelable
Actions
# Each entry = one documented JSON-RPC method or one settable property target
# (source lists each property as a separate row). Commands verbatim from source.
# --- System / Power ---
- id: system_poweron
label: Power On
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
params: []
- id: system_poweroff
label: Power Off
kind: action
command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
params: []
- id: eco_wake_serial
label: ECO Wake via Serial
kind: action
command: ':POWR1\r'
params: []
notes: ASCII string on RS232 to wake from ECO mode
# --- Authentication ---
- id: authenticate
label: Authenticate
kind: action
command: '{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": 98765}}'
params:
- name: code
type: integer
description: Secret pass code (example value 98765 shown in source)
# --- Introspection ---
- id: introspect_recursive
label: Introspect (recursive)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": {"object": "foo", "recursive": true}, "id": 1}'
params:
- name: object
type: string
description: Object name in dot notation; empty = all
- name: recursive
type: boolean
description: If false, only one level listed
- id: introspect_nonrecursive
label: Introspect (non-recursive)
kind: query
command: '{"jsonrpc": "2.0", "method": "introspect", "params": ["motors", false], "id": 2}'
params:
- name: object
type: string
- name: recursive
type: boolean
# --- Property methods (generic) ---
- id: property_set
label: Property Set
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "objectname.propertyname", "value": 100}}'
params:
- name: property
type: string
- name: value
type: any
notes: Wait for confirmation before setting same property again
- id: property_get
label: Property Get
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "objectname.propertyname"}}'
params:
- name: property
type: string
- id: property_get_multi
label: Property Get Multiple
kind: query
command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": ["image.brightness", "image.contrast"]}, "id": 5}'
params:
- name: property
type: array
description: List of property names
- id: property_subscribe
label: Property Subscribe
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "image.brightness"}}'
params:
- name: property
type: string # also accepts array
- id: property_subscribe_multi
label: Property Subscribe Multiple
kind: action
command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": ["image.brightness", "image.contrast"]}}'
params:
- name: property
type: array
- id: property_unsubscribe
label: Property Unsubscribe
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "image.brightness"}}'
params:
- name: property
type: string
- id: property_unsubscribe_multi
label: Property Unsubscribe Multiple
kind: action
command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": ["image.brightness", "image.contrast"]}}'
params:
- name: property
type: array
# --- Signal methods ---
- id: signal_subscribe
label: Signal Subscribe
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "modelupdated"}}'
params:
- name: signal
type: string
- id: signal_subscribe_multi
label: Signal Subscribe Multiple
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": ["modelupdated", "image.processing.warp.gridchanged"]}}'
params:
- name: signal
type: array
- id: signal_unsubscribe
label: Signal Unsubscribe
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "modelupdated"}}'
params:
- name: signal
type: string
- id: signal_unsubscribe_multi
label: Signal Unsubscribe Multiple
kind: action
command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": ["modelupdated", "image.processing.warp.gridchanged"]}}'
params:
- name: signal
type: array
# --- Image source / connector ---
- 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: Source List Connectors
kind: query
command: '{"jsonrpc": "2.0", "method": "image.source.{sourcename}.listconnectors", "id": 4}'
params:
- name: sourcename
type: string
description: Source name lowercased with non-word chars removed (e.g. displayport1)
# --- Environment ---
- id: environment_getcontrolblocks
label: Environment Get Control Blocks
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": {"type": "Sensor", "valuetype": "Temperature"}, "id": 18}'
params:
- name: type
type: string
description: 'One of: Sensor, Filter, Controller, Actuator, Alarm, GenericBlock'
- name: valuetype
type: string
description: 'One of: 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'
- id: environment_getalarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo"}'
params: []
# --- DMX ---
- id: dmx_listchannels
label: DMX List Channels
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listchannels"}'
params: []
- id: dmx_listmodes
label: DMX List Modes
kind: query
command: '{"jsonrpc": "2.0", "method": "dmx.listmodes"}'
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
kind: action
command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade"}'
params: []
notes: Forces upgrade at next reboot
# --- Illumination ---
- id: illumination_clo_engage
label: Engage CLO
kind: action
command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage"}'
params: []
notes: Engage CLO at current light level
- id: illumination_laser_getserialnumber
label: Laser Get Serial Number
kind: query
command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber"}'
params: []
# --- Image color ---
- id: image_color_p7_custom_copypresettocustom
label: Copy Preset to Custom
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": {"presetname": ""}}'
params:
- name: presetname
type: string
- id: image_color_p7_custom_resetpreset
label: Reset Preset
kind: action
command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": {"presetname": ""}}'
params:
- name: presetname
type: string
- id: image_color_p7_custom_resettonative
label: Reset 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: []
# --- LED (from example) ---
- id: ledctrl_blink
label: LED Blink
kind: action
command: '{"jsonrpc": "2.0", "method": "ledctrl.blink", "params": {"led": "systemstatus", "color": "red", "period": 42}}'
params:
- name: led
type: string
- name: color
type: string
- name: period
type: integer
# --- Settable properties (each documented property = one set action) ---
- id: set_image_window_main_source
label: Set Active Source
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.source", "value": "DisplayPort 1"}}'
params:
- name: value
type: string
description: 'Source name. Examples: DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI'
- id: set_image_brightness
label: Set Brightness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.brightness", "value": 0.15}}'
params:
- name: value
type: float
description: Min -1, Max 1, Step 1, Precision 0.01
- id: set_image_contrast
label: Set Contrast
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.contrast"}}'
params:
- name: value
type: float
description: Min 0, Max 2, Step 1, Precision 0.01
- id: set_image_gamma
label: Set Gamma
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.gamma"}}'
params:
- name: value
type: float
description: Min 1, Max 3, Step 1, Precision 0.1. Default 2.2
- id: set_image_saturation
label: Set Saturation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.saturation"}}'
params:
- name: value
type: float
description: Min 0, Max 2, Step 1, Precision 0.01
- id: set_image_sharpness
label: Set Sharpness
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.sharpness"}}'
params:
- name: value
type: integer
description: Min -2, Max 8, Step 1, Precision 1
- id: set_image_orientation
label: Set Orientation
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.orientation"}}'
params:
- name: value
type: string
description: 'One of: DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR'
- id: set_image_window_main_scalingmode
label: Set Scaling Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.scalingmode"}}'
params:
- name: value
type: string
description: 'One of: Fill, OneToOne, FillScreen, Stretch'
- id: set_image_window_main_position
label: Set Window Position
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.position"}}'
params:
- name: x
type: integer
- name: y
type: integer
- id: set_image_window_main_size
label: Set Window Size
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.size"}}'
params:
- name: width
type: integer
- name: height
type: integer
- id: set_illumination_sources_laser_power
label: Set Laser Power
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "illumination.sources.laser.power", "value": 40}}'
params:
- name: value
type: float
description: Target power in percent
- id: set_image_processing_warp_enable
label: Enable Warp
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.enable", "value": true}}'
params:
- name: value
type: boolean
- id: set_image_processing_warp_file_enable
label: Enable File Warp
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.file.enable", "value": true}}'
params:
- name: value
type: boolean
- id: set_image_processing_warp_file_selected
label: Select Warp File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.warp.file.selected", "value": "warp.xml"}}'
params:
- name: value
type: string
- id: set_image_processing_blend_file_enable
label: Enable File Blend
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.enable", "value": true}}'
params:
- name: value
type: boolean
- id: set_image_processing_blend_file_selected
label: Select Blend File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blend.file.selected", "value": "mask.png"}}'
params:
- name: value
type: string
- id: set_image_processing_blacklevel_file_enable
label: Enable Black Level Correction
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blacklevel.file.enable", "value": true}}'
params:
- name: value
type: boolean
- id: set_image_processing_blacklevel_file_selected
label: Select Black Level File
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.processing.blacklevel.file.selected", "value": "blacklevel.png"}}'
params:
- name: value
type: string
- id: set_dmx_mode
label: Set DMX Mode
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "dmx.mode"}}'
params:
- name: value
type: string
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "dmx.startchannel"}}'
params:
- name: value
type: integer
description: 1..512
- id: set_dmx_shutdown
label: Set DMX Shutdown
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "dmx.shutdown"}}'
params:
- name: value
type: boolean
- id: set_optics_shutter_position
label: Set Shutter Position
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "optics.shutter.position"}}'
params:
- name: value
type: string
description: 'One of: Open, Closed'
- id: set_optics_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "optics.shutter.target"}}'
params:
- name: value
type: string
description: 'One of: Open, Closed'
- id: set_system_standby_enable
label: Enable Standby State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "system.standby.enable"}}'
params:
- name: value
type: boolean
- id: set_system_eco_enable
label: Enable ECO State
kind: action
command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "system.eco.enable"}}'
params:
- name: value
type: boolean
# --- File upload (HTTP) ---
- id: upload_warp_file
label: Upload Warp File
kind: action
command: 'curl -X POST -F file=@warp.xml http://{projector_ip}/api/image/processing/warp/file/transfer'
params:
- name: projector_ip
type: string
- id: upload_blend_mask
label: Upload Blend Mask
kind: action
command: 'curl -X POST -F file=@mask.png http://{projector_ip}/api/image/processing/blend/file/transfer'
params:
- name: projector_ip
type: string
- id: upload_blacklevel_mask
label: Upload Black Level Mask
kind: action
command: 'curl -X POST -F file=@blacklevel.png http://{projector_ip}/api/image/processing/blacklevel/file/transfer'
params:
- name: projector_ip
type: string
Feedbacks
# Each documented property.get target and property.changed notification
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, deconditioning, service, error]
- id: illumination_state
type: enum
values: [On, Off]
- id: illumination_sources_laser_power
type: number
- id: illumination_sources_laser_minpower
type: number
- id: illumination_sources_laser_maxpower
type: number
- id: image_window_main_source
type: string
- id: image_window_main_position
type: object
values: [{x: int, y: int}]
- id: image_window_main_size
type: object
values: [{width: int, height: int}]
- id: image_window_main_scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: image_brightness
type: number
range: [-1, 1]
- id: image_contrast
type: number
range: [0, 2]
- id: image_gamma
type: number
range: [1, 3]
- id: image_saturation
type: number
range: [0, 2]
- id: image_sharpness
type: integer
range: [-2, 8]
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: detectedsignal
type: object
description: image.connector.{name}.detectedsignal - signal info struct
fields: [active, name, 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, vertical_frequency, pixel_rate, scan, bits_per_component, color_space, signal_range, chroma_sampling, gamma_type, color_primaries, mastering_luminance, content_aspect_ratio, is_stereo, stereo_mode]
- id: image_processing_warp_enable
type: boolean
- id: image_processing_warp_file_enable
type: boolean
- id: image_processing_warp_file_selected
type: string
- id: image_processing_blend_file_enable
type: boolean
- id: image_processing_blend_file_selected
type: array
- id: image_processing_blacklevel_file_enable
type: boolean
- id: image_processing_blacklevel_file_selected
type: string
- id: dmx_mode
type: string
- id: dmx_startchannel
type: integer
range: [1, 512]
- id: dmx_shutdown
type: boolean
- id: network_device_lan_ip4config
type: object
fields: [Address, Mask, Gateway, NameServers]
- id: network_device_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
- id: optics_shutter_position
type: enum
values: [Open, Closed]
- 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: system_standby_enable
type: boolean
- id: system_eco_enable
type: boolean
- id: environment_alarmstate
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
Variables
# Properties with ranges exposed as variables (already represented as Feedbacks above).
# Source treats them as property.get/property.set; nothing additional to model here.
Events
# Unsolicited JSON-RPC notifications from server (no id, no response expected).
- id: property_changed
description: property.changed - array of property/value pairs
payload_example: '{"jsonrpc": "2.0", "method": "property.changed", "params": {"property": [{"image.brightness": 0.15}]}}'
- id: signal_callback
description: signal.callback - array of signal/argument-list pairs
payload_example: '{"jsonrpc": "2.0", "method": "signal.callback", "params": {"signal": [{"introspect.objectchanged": {"object": "motors.motor1", "newobject": true}}]}}'
- id: modelupdated_signal
description: Triggered when object structure changes (objects added/removed)
Macros
# Source describes a multi-step "ECO mode wake" procedure:
- id: eco_mode_wake
description: Wake projector from ECO mode
steps:
- option_a: Send wake-on-LAN request with projector MAC address
- option_b: Press power button on remote
- option_c: Press power button on keypad
- option_d: Send ':POWR1\r' on RS232 serial
# UNRESOLVED: WoL packet format not detailed in source
Safety
confirmation_required_for: []
interlocks:
- id: poweron_state_check
description: Source recommends verifying system.state is standby or ready before issuing system.poweron; if already on or transitioning, nothing happens.
- id: poweroff_state_check
description: Source recommends verifying system.state is on before issuing system.poweroff.
- id: property_set_wait
description: Best practice - wait for property.set confirmation before re-setting same property; flooding may degrade server performance.
# UNRESOLVED: no formal interlock or power-sequencing table provided in source.
Notes
- API is JSON-RPC 2.0 over TCP (port 9090) and RS-232 (19200/8N1, no flow control).
- Object/property naming is dot notation, lowercase, JavaScript-like.
- API surface is partially dynamic — actual objects depend on projector config (lens, peripherals). Best practise is to introspect.
- Warp file format shared with MCM500/400.
- Supported image upload formats: PNG (up to 16-bit), JPEG, TIFF. Only grayscale/blue channel used.
- Blend/black-level mask sizes vary by projector resolution (WUXGA/WQXGA/4K/4K Cinemascope).
- DMX has basic mode (2 channels) and extended mode (more channels exposed).
Self-check pass: no voltage/current/power invented, port 9090 + baud 19200 verbatim from source, status/confidence/derived_from correct, entity_id placeholder kept, UNRESOLVED markers on all gaps.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-07-18T06:08:12.057Z
last_checked_at: 2026-07-21T20:46:28.099Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-07-21T20:46:28.099Z
matched_actions: 62
action_count: 62
confidence: medium
summary: "All 62 actions have direct method/command matches in source; transport parameters (TCP 9090, serial 19200/8N1) verified; JSON-RPC methods, settable properties, file upload endpoints, and RS-232 commands all present and match spec declarations. (9 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "specific projector model not stated; device-name token in input (\"3D Glasses\") conflicts with source content (Pulse projector)."
- "WoL packet format not detailed in source"
- "no formal interlock or power-sequencing table provided in source."
- "input device name was \"Barco 3D Glasses\" but source content is the Pulse projector JSON-RPC API. Spec authored against actual source content; operator should reconcile entity_id/spec_id naming."
- "specific Pulse model not stated; source says \"Pulse projectors\" generically."
- "firmware version compatibility not stated."
- "WoL packet format for ECO wake not detailed."
- "source names a connector property \"image.connector.l1hdmi.detectedsignal\" but body examples reference \"displayport1\" — exact connector object names are model-dependent and not enumerated."
- "authentication pass code value (98765) is an example, not a default."
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0