Summary
This spec covers the Barco DP projector family that runs the Pulse control platform, exposed over both RS-232 serial and TCP/IP as a JSON-RPC 2.0 service. The same Pulse API is reachable via serial cable or network on TCP port 9090, with model-dependent connectors (DisplayPort, HDMI, HDBaseT, DVI, SDI). Authentication is optional for end-user access; an authentication code request can elevate privileges when required.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090
serial:
baud_rate: 19200
data_bits: 8
parity: none
stop_bits: 1
flow_control: none
auth:
type: optional
notes: "authenticate JSON-RPC method with code parameter; required only for elevated access. End-user access can skip auth."
Traits
- powerable
- routable
- queryable
- levelable
Actions
- id: authenticate
label: Authenticate
kind: action
command: '{ "jsonrpc": "2.0", "method": "authenticate", "params": { "code": {code} } }'
params:
- name: code
type: integer
description: Numeric pass code (e.g. 98765) to elevate access level
- id: power_on
label: Power On
kind: action
command: '{ "jsonrpc": "2.0", "method": "system.poweron" }'
params: []
- id: power_off
label: Power Off
kind: action
command: '{ "jsonrpc": "2.0", "method": "system.poweroff" }'
params: []
- id: property_set
label: Set Property
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 to the property
- id: property_get
label: Get Property
kind: query
command: '{ "jsonrpc": "2.0", "method": "property.get", "params": { "property": "{property}" } }'
params:
- name: property
type: string
description: Dot-notation property path
- id: property_get_multiple
label: Get Multiple Properties
kind: query
command: '{ "jsonrpc": "2.0", "method": "property.get", "params": { "property": [ {properties} ] } }'
params:
- name: properties
type: array
description: Array of dot-notation property paths
- 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: Dot-notation property path
- id: property_subscribe_multiple
label: Subscribe to Multiple Properties
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.subscribe", "params": { "property": [ {properties} ] } }'
params:
- name: properties
type: array
description: Array of dot-notation 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: Dot-notation property path
- id: property_unsubscribe_multiple
label: Unsubscribe from Multiple Properties
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.unsubscribe", "params": { "property": [ {properties} ] } }'
params:
- name: properties
type: array
description: Array of dot-notation property paths
- 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: Dot-notation signal path
- id: signal_subscribe_multiple
label: Subscribe to Multiple Signals
kind: action
command: '{ "jsonrpc": "2.0", "method": "signal.subscribe", "params": { "signal": [ {signals} ] } }'
params:
- name: signals
type: array
description: Array of dot-notation signal paths
- 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: Dot-notation signal path
- id: signal_unsubscribe_multiple
label: Unsubscribe from Multiple Signals
kind: action
command: '{ "jsonrpc": "2.0", "method": "signal.unsubscribe", "params": { "signal": [ {signals} ] } }'
params:
- name: signals
type: array
description: Array of dot-notation signal paths
- id: introspect_recursive
label: Introspect Object (Recursive)
kind: query
command: '{ "jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": true } }'
params:
- name: object
type: string
description: Dot-notation object name
- id: introspect_non_recursive
label: Introspect Object (Non Recursive)
kind: query
command: '{ "jsonrpc": "2.0", "method": "introspect", "params": { "object": "{object}", "recursive": false } }'
params:
- name: object
type: string
description: Dot-notation object name
- 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 in seconds
- id: image_source_list
label: List Available Sources
kind: query
command: '{ "jsonrpc": "2.0", "method": "image.source.list" }'
params: []
- id: image_connector_list
label: List Available Connectors
kind: query
command: '{ "jsonrpc": "2.0", "method": "image.connector.list" }'
params: []
- id: image_source_listconnectors
label: List Connectors for Source
kind: query
command: '{ "jsonrpc": "2.0", "method": "image.source.{source}.listconnectors" }'
params:
- name: source
type: string
description: Lowercase, alphanumeric source object name (e.g. displayport1)
- id: environment_getcontrolblocks
label: Get Environment Control Blocks
kind: query
command: '{ "jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": { "type": "{type}", "valuetype": "{valuetype}" } }'
params:
- name: type
type: string
description: 'Sensor type (Sensor, Filter, Controller, Actuator, Alarm, GenericBlock)'
- name: valuetype
type: string
description: 'Sensor value type (Temperature, Speed, Voltage, Current, Power, etc.)'
- id: system_get_state
label: Get Projector State
kind: query
command: '{ "jsonrpc": "2.0", "method": "property.get", "params": { "property": "system.state" } }'
params: []
- id: illumination_get_state
label: Get Illumination State
kind: query
command: '{ "jsonrpc": "2.0", "method": "property.get", "params": { "property": "illumination.state" } }'
params: []
- id: illumination_set_laser_power
label: Set Laser Illumination Power
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "illumination.sources.laser.power", "value": {value} } }'
params:
- name: value
type: number
description: Target power in percent
- id: image_set_brightness
label: Set Image Brightness
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.brightness", "value": {value} } }'
params:
- name: value
type: number
description: Brightness offset (-1 to 1, normalized; 0 is default)
- id: image_set_active_source
label: Set Active Source
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.window.main.source", "value": "{source}" } }'
params:
- name: source
type: string
description: Source name (e.g. "DisplayPort 1", "HDMI", "HDBaseT", "DVI 1")
- id: warp_enable
label: Enable Warp
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.enable", "value": true } }'
params: []
- id: warp_select_file
label: Select Warp File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.selected", "value": "{filename}" } }'
params:
- name: filename
type: string
description: Name of warp file uploaded via HTTP
- id: warp_enable_file
label: Enable Warp File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.warp.file.enable", "value": true } }'
params: []
- id: blend_select_file
label: Select Blend File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.selected", "value": "{filename}" } }'
params:
- name: filename
type: string
description: Name of blend mask file uploaded via HTTP
- id: blend_enable_file
label: Enable Blend File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blend.file.enable", "value": true } }'
params: []
- id: blacklevel_select_file
label: Select Black Level File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.selected", "value": "{filename}" } }'
params:
- name: filename
type: string
description: Name of black level mask file uploaded via HTTP
- id: blacklevel_enable_file
label: Enable Black Level File
kind: action
command: '{ "jsonrpc": "2.0", "method": "property.set", "params": { "property": "image.processing.blacklevel.file.enable", "value": true } }'
params: []
- id: eco_wake_serial
label: Wake from ECO (Serial)
kind: action
command: ':POWR1\r'
params: []
- id: warp_upload_file
label: Upload Warp File (HTTP)
kind: action
command: 'curl -X POST -F file=@{filename} http://{address}/api/image/processing/warp/file/transfer'
params:
- name: address
type: string
description: Projector IP address
- name: filename
type: string
description: Local warp grid file (e.g. warp.xml)
- id: blend_upload_file
label: Upload Blend Mask (HTTP)
kind: action
command: 'curl -X POST -F file=@{filename} http://{address}/api/image/processing/blend/file/transfer'
params:
- name: address
type: string
description: Projector IP address
- name: filename
type: string
description: Local blend mask image (PNG/JPEG/TIFF)
- id: blacklevel_upload_file
label: Upload Black Level Mask (HTTP)
kind: action
command: 'curl -X POST -F file=@{filename} http://{address}/api/image/processing/blacklevel/file/transfer'
params:
- name: address
type: string
description: Projector IP address
- name: filename
type: string
description: Local black level mask image (PNG/JPEG/TIFF)
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, deconditioning]
- id: illumination_state
type: enum
values: [On, Off]
- id: active_source
type: string
values_from: image.source.list
- id: available_sources
type: array
description: List of source names returned by image.source.list (model-dependent)
- id: available_connectors
type: array
description: List of connector names returned by image.connector.list (model-dependent)
- id: image_brightness
type: number
range: [-1, 1]
- id: illumination_laser_power
type: number
description: Laser illumination power in percent
- id: illumination_laser_minpower
type: number
description: Minimum laser power in percent (read-only)
- id: illumination_laser_maxpower
type: number
description: Maximum laser power in percent (read-only)
- id: environment_temperatures
type: object
description: Dictionary of sensor name to temperature reading (Celsius)
- id: environment_fan_speeds
type: object
description: Dictionary of fan name to RPM
- id: environment_alarmstate
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
- id: firmware_firmwareversion
type: string
- id: detected_signal
type: object
description: Detected signal info from image.connector.<name>.detectedsignal (active, name, h/v resolution/freq, scan, bits_per_component, color_space, etc.)
Variables
- name: image.brightness
type: float
range: [-1, 1]
description: Image brightness/offset; 0 default, 1 is 100% offset
- name: image.window.main.source
type: string
description: Active source for the main window
- name: illumination.sources.laser.power
type: float
description: Laser illumination power target in percent
- name: illumination.sources.laser.minpower
type: float
read_only: true
description: Minimum laser power in percent
- name: illumination.sources.laser.maxpower
type: float
read_only: true
description: Maximum laser power in percent
- name: illumination.sources.laser.ispowerlimited
type: bool
read_only: true
description: Whether laser power is currently limited
- name: illumination.sources.laser.powerlimitreason
type: string
read_only: true
description: Reason power is limited
- name: image.processing.warp.enable
type: bool
description: Globally enable warp
- name: image.processing.warp.file.selected
type: string
description: Selected warp grid filename
- name: image.processing.warp.file.enable
type: bool
description: Enable selected warp file
- name: image.processing.blend.file.selected
type: string
description: Selected blend mask filename
- name: image.processing.blend.file.enable
type: bool
description: Enable selected blend mask
- name: image.processing.blacklevel.file.selected
type: string
description: Selected black level mask filename
- name: image.processing.blacklevel.file.enable
type: bool
description: Enable selected black level mask
- name: image.color.rgbmode.rgbmode
type: enum
values: [Full, Red, Green, Blue, RedGreen, GreenBlue, BlueRed]
description: RGB mode
- name: image.color.p7.custom.whitetemperature
type: int
range: [3200, 13000]
description: Desired white point temperature
- name: image.color.p7.custom.redgain
type: float
description: Desired red gain value
- name: image.color.p7.custom.greenx
type: float
description: Desired green x in xy-coordinates
- name: image.color.p7.custom.whitex
type: float
description: Desired white x in xy-coordinates
- name: image.connector.l1hdmi.signalrange
type: enum
values: [Auto, 0-255, 16-235]
- name: image.connector.l1hdmi.colorspace
type: enum
values: [Auto, RGB, REC709, REC601, REC2020]
- name: image.connector.l1displayport.colorprimaries
type: enum
values: [Auto, Uncorrected, REC709, REC2020, DCI-P3-D65, DCI-P3-Theater]
- name: illumination.clo.enable
type: bool
description: Constant light output enabled
- name: illumination.clo.setpoint
type: float
description: Target luminosity of the light source
- name: illumination.clo.scale
type: float
description: Percentage to scale the CLO setpoint by
- name: dmx.artnet
type: bool
description: Artnet enabled
- name: dmx.shutdown
type: bool
description: DMX shutdown enabled
- name: dmx.shutdowntimeout
type: int
description: DMX shutdown timeout in minutes
- name: dmx.startchannel
type: int
range: [1, 512]
description: DMX start channel
- name: gsm.pin
type: string
description: SIM card PIN (RW; requires elevated access)
- name: firmware.firmwareversion
type: string
read_only: true
Events
- id: property_changed
description: Server emits notification when a subscribed property changes; payload is array of property/value pairs
example: '{ "jsonrpc": "2.0", "method": "property.changed", "params": { "property": [ { "system.state": "ready" } ] } }'
- id: signal_callback
description: Server emits notification when a subscribed signal fires; payload is array of signal/argument-list pairs
example: '{ "jsonrpc": "2.0", "method": "signal.callback", "params": { "signal": [ { "introspect.objectchanged": { "object": "motors.motor1", "newobject": true } } ] } }'
Macros
- id: select_displayport1
label: Select DisplayPort 1 as input source
kind: sequence
steps:
- property.set image.window.main.source = "DisplayPort 1"
- id: select_hdmi
label: Select HDMI as input source
kind: sequence
steps:
- property.set image.window.main.source = "HDMI"
- id: power_on_safe
label: Power On (recommended)
kind: sequence
description: Source recommends verifying state is standby or ready before issuing power on
steps:
- property.get system.state
- if state in [standby, ready]: system.poweron
- id: power_off_safe
label: Power Off (recommended)
kind: sequence
description: Source recommends verifying state is on before issuing power off
steps:
- property.get system.state
- if state == on: system.poweroff
- id: warp_apply
label: Apply Warp File
kind: sequence
steps:
- HTTP POST warp file to /api/image/processing/warp/file/transfer
- property.set image.processing.warp.file.selected = filename
- property.set image.processing.warp.file.enable = true
- id: blend_apply
label: Apply Blend Mask
kind: sequence
steps:
- HTTP POST blend image to /api/image/processing/blend/file/transfer
- property.set image.processing.blend.file.selected = filename
- property.set image.processing.blend.file.enable = true
- id: blacklevel_apply
label: Apply Black Level Mask
kind: sequence
steps:
- HTTP POST black level image to /api/image/processing/blacklevel/file/transfer
- property.set image.processing.blacklevel.file.selected = filename
- property.set image.processing.blacklevel.file.enable = true
- id: wake_from_eco
label: Wake Projector from ECO Mode
kind: sequence
description: Source lists three methods: Wake-on-LAN, remote/keypad power button, or serial ":POWR1\r"
steps:
- send ":POWR1\r" on RS-232 serial port
Safety
confirmation_required_for:
- system.poweroff
- system.poweron
interlocks:
- source: "If the projector is already on (or transitioning), system.poweron is a no-op. If already off (or transitioning), system.poweroff is a no-op. Best practice: query system.state before issuing power commands."
- source: "Best practice: wait for property.set confirmation before re-setting the same property to avoid flooding the server."
- source: "Notifications are only sent on actual value changes; subscribing does not deliver the current value (use property.get for that)."
- source: "ECO-mode projectors require explicit wake-up: Wake-on-LAN, remote/keypad power button, or serial ':POWR1\r'."
Notes
Source describes Barco's "Pulse" JSON-RPC 2.0 control service that is exposed identically over RS-232 (19200 8N1, no flow control) and TCP port 9090. Property paths follow dot notation (e.g. image.window.main.source, illumination.sources.laser.power). The same protocol runs across DP projector models with model-dependent source/connector lists (DisplayPort 1/2, HDMI, HDBaseT 1/2, DVI 1/2, SDI A, plus dual-source variants). File endpoints under http:///api/... are used for warp grid, blend mask, and black level mask uploads. Connectors for sources are addressed as image.source..listconnectors, where is the source label with non-word chars stripped and lowercased (e.g. "DisplayPort 1" -> displayport1).
The refine input name in the request was barco_dp_projector.refined.md; the closest matching file on disk is barco_dp_projector_companion.refined.md, which is the Pulse Companion JSON-RPC reference. A separate barco_dp_projector_companion.md exists with the same content as a non-refined extract.
Provenance
source_domains:
- barco.com
source_urls:
- https://www.barco.com/en/support/docs/R5975236
retrieved_at: 2026-08-30T10:33:14.558Z
last_checked_at: 2026-08-30T22:16:34.034Z
Verification Summary
verdict: verified
checked_at: 2026-08-30T22:16:34.034Z
matched_actions: 37
action_count: 37
confidence: medium
summary: "All 37 spec actions map verbatim to source JSON-RPC methods/properties, the serial :POWR1 wake token, or HTTP file-upload endpoints; transport values confirmed. (2 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "list any major gaps here"
- "firmware version compatibility not stated in source; specific DP projector SKU/model list not enumerated in this source (spec applies generically to \"Pulse\" projectors); full property catalogue beyond the samples shown was not transcribed."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0