Summary
This spec describes the Pulse API used to control Barco projectors (including the ECU100, ECU110, ECU200, and CRM product lines). The interface exposes a JSON-RPC 2.0 message protocol over both TCP/IP (port 9090) and RS-232 serial (19200 8N1), and covers projector state, source selection, illumination, image settings, warping, blending, optics, network, and environment telemetry.
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 # optional authenticate() call with numeric code; can be skipped for normal end-user access
notes: "authenticate() sets the user access level. Required only for higher-than-end-user access. Skippable for end-user access."
Traits
- powerable
- routable
- queryable
- levelable
Actions
- id: power_on
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron","id":3}'
params: []
notes: "Verify system.state is standby or ready before issuing. No-op if already on or transitioning."
- id: power_off
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff","id":4}'
params: []
notes: "Verify system.state is on before issuing. No-op if already off or transitioning."
- id: wake_from_eco_serial
label: Wake from ECO mode (serial only)
kind: action
command: ":POWR1\r"
params: []
notes: "ASCII string on RS-232 serial port. Used to wake a projector that is in ECO mode."
- id: authenticate
label: Authenticate session
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":98765},"id":1}'
params:
- name: code
type: integer
description: Secret pass code; sets the user access level. Optional for end-user access.
- id: led_blink
label: LED blink
kind: action
command: '{"jsonrpc":"2.0","method":"ledctrl.blink","params":{"led":"systemstatus","color":"red","period":42},"id":3}'
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
- id: property_set
label: Set property value
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"objectname.propertyname","value":100},"id":3}'
params:
- name: property
type: string
description: Dot-notation property path (e.g. image.brightness)
- name: value
type: string
description: New property value; type depends on property
- id: property_get
label: Read property value
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"objectname.propertyname"},"id":4}'
params:
- name: property
type: string
description: Dot-notation property path
- id: property_get_multiple
label: Read multiple property values
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":["image.brightness","image.contrast"]},"id":5}'
params:
- name: property
type: array
description: Array of dot-notation property paths
- id: property_subscribe
label: Subscribe to property changes (one)
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"image.brightness"},"id":6}'
params:
- name: property
type: string
description: Dot-notation property path to observe
- id: property_subscribe_multiple
label: Subscribe to property changes (multiple)
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":["image.brightness","image.contrast"]},"id":7}'
params:
- name: property
type: array
description: Array of dot-notation property paths to observe
- id: property_unsubscribe
label: Unsubscribe from property changes (one)
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"image.brightness"},"id":8}'
params:
- name: property
type: string
description: Dot-notation property path to stop observing
- id: property_unsubscribe_multiple
label: Unsubscribe from property changes (multiple)
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":["image.brightness","image.contrast"]},"id":9}'
params:
- name: property
type: array
description: Array of dot-notation property paths to stop observing
- id: signal_subscribe
label: Subscribe to a signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"modelupdated"},"id":10}'
params:
- name: signal
type: string
description: Signal name (e.g. modelupdated)
- id: signal_subscribe_multiple
label: Subscribe to multiple signals
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":["modelupdated","image.processing.warp.gridchanged"]},"id":11}'
params:
- name: signal
type: array
description: Array of signal names
- id: signal_unsubscribe
label: Unsubscribe from a signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"modelupdated"},"id":12}'
params:
- name: signal
type: string
description: Signal name
- id: signal_unsubscribe_multiple
label: Unsubscribe from multiple signals
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":["modelupdated","image.processing.warp.gridchanged"]},"id":13}'
params:
- name: signal
type: array
description: Array of signal names
- id: introspect_recursive
label: Introspect object (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
- name: recursive
type: boolean
description: If false, only object names are listed (one level)
- id: introspect_non_recursive
label: Introspect object (non-recursive)
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"motors","recursive":false},"id":2}'
params:
- name: object
type: string
description: Object name in dot notation
- 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_list_connectors
label: List connectors used by a source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.displayport1.listconnectors","id":4}'
params:
- name: source_object_name
type: string
description: "Source object name derived by stripping non-word chars and lowercasing the source name (e.g. 'DisplayPort 1' -> 'displayport1')"
- id: set_active_source
label: Set active source
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.source","value":"DisplayPort 1"},"id":2}'
params:
- name: value
type: string
description: Source name from the image.source.list result
- id: set_illumination_power
label: Set illumination power
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"illumination.sources.laser.power","value":40},"id":5}'
params:
- name: value
type: integer
description: Target power in percent
- id: illumination_clo_engage
label: Engage CLO at current light level
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage","id":1}'
params: []
- id: illumination_laser_get_serial_number
label: Get laser serial number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber","id":1}'
params: []
- id: set_brightness
label: Set image brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":0.15},"id":9}'
params:
- name: value
type: float
description: Brightness, normalized (0 = default, 1 = 100% offset). Range -1..1, step 0.01.
- id: set_contrast
label: Set image contrast
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.contrast","value":1.0},"id":1}'
params:
- name: value
type: float
description: Contrast, normalized (1 = default). Range 0..2, step 0.01.
- id: set_gamma
label: Set image gamma
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.gamma","value":2.2},"id":1}'
params:
- name: value
type: float
description: Gamma. Range 1..3, step 0.1. Default 2.2.
- id: set_saturation
label: Set image saturation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.saturation","value":1.0},"id":1}'
params:
- name: value
type: float
description: Saturation, normalized (1 = default). Range 0..2, step 0.01.
- id: set_sharpness
label: Set image sharpness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.sharpness","value":0},"id":1}'
params:
- name: value
type: integer
description: Sharpness, normalized. Range -2..8, step 1.
- id: set_orientation
label: Set image orientation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.orientation","value":"DESKTOP_FRONT"},"id":1}'
params:
- name: value
type: string
enum: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: set_window_scaling_mode
label: Set window scaling mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.scalingmode","value":"Fill"},"id":1}'
params:
- name: value
type: string
enum: [Fill, OneToOne, FillScreen, Stretch]
- id: set_window_position
label: Set window position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.position","value":{"x":0,"y":0}},"id":1}'
params:
- name: value
type: object
description: Object with int fields x and y
- id: set_window_size
label: Set window size
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.size","value":{"width":0,"height":0}},"id":1}'
params:
- name: value
type: object
description: Object with int fields width and height
- id: enable_warp
label: Enable warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":true},"id":10}'
params:
- name: value
type: boolean
- 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
description: Projector IP address
notes: "HTTP POST to the warp file endpoint. Implies -X POST when using -F."
- id: select_warp_file
label: Select uploaded warp file
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.selected","value":"warp.xml"},"id":11}'
params:
- name: value
type: string
description: Filename of previously uploaded warp file
- id: enable_warp_file
label: Enable file warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":true},"id":12}'
params:
- name: value
type: boolean
- 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
description: Projector IP address
notes: "Grayscale 8-bit or 16-bit PNG/JPEG/TIFF. Mask size must match blend layer resolution."
- id: select_blend_file
label: Select blend file
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.selected","value":"mask.png"},"id":13}'
params:
- name: value
type: string
description: Filename of previously uploaded blend file
- id: enable_blend_file
label: Enable file blend
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":true},"id":14}'
params:
- name: value
type: boolean
- 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
description: Projector IP address
notes: "Grayscale 8-bit or 16-bit PNG/JPEG/TIFF. Mask size must match black level layer resolution."
- id: select_blacklevel_file
label: Select black level file
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.selected","value":"blacklevel.png"},"id":15}'
params:
- name: value
type: string
description: Filename of previously uploaded black level file
- id: enable_blacklevel_file
label: Enable black level file
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":true},"id":16}'
params:
- name: value
type: boolean
- id: set_dmx_mode
label: Set DMX mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.mode","value":"basic"},"id":1}'
params:
- name: value
type: string
description: DMX mode name (introspect via dmx.listmodes)
- id: set_dmx_start_channel
label: Set DMX start channel
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.startchannel","value":1},"id":1}'
params:
- name: value
type: integer
description: DMX start channel in range 1..512
- id: set_dmx_shutdown
label: Set DMX shutdown
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.shutdown","value":true},"id":1}'
params:
- name: value
type: boolean
- id: dmx_list_channels
label: List DMX channels
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels","id":1}'
params: []
- id: dmx_list_modes
label: List DMX modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes","id":1}'
params: []
- id: set_lan_ipv4_config
label: Set LAN IPv4 configuration
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"network.device.lan.ip4config","value":{"Address":"","Mask":"","Gateway":"","NameServers":""}},"id":1}'
params:
- name: value
type: object
description: Object with string fields Address, Mask, Gateway, NameServers
- id: set_shutter_position
label: Set shutter position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.position","value":"Open"},"id":1}'
params:
- name: value
type: string
enum: [Open, Closed]
- id: set_shutter_target
label: Set shutter target
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.target","value":"Open"},"id":1}'
params:
- name: value
type: string
enum: [Open, Closed]
- id: set_zoom_position
label: Set zoom position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.zoom.position","value":0},"id":1}'
params:
- name: value
type: integer
description: Zoom position (int; range model-dependent, introspect)
- id: set_focus_position
label: Set focus position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.focus.position","value":0},"id":1}'
params:
- name: value
type: integer
description: Focus position (int; range model-dependent, introspect)
- id: set_lensshift_horizontal
label: Set horizontal lens shift position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.horizontal.position","value":0},"id":1}'
params:
- name: value
type: integer
description: Horizontal lens shift position
- id: set_lensshift_vertical
label: Set vertical lens shift position
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.lensshift.vertical.position","value":0},"id":1}'
params:
- name: value
type: integer
description: Vertical lens shift position
- id: set_standby_enable
label: Enable standby state
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.standby.enable","value":true},"id":1}'
params:
- name: value
type: boolean
notes: "Check availability before issuing."
- id: set_eco_enable
label: Enable ECO state
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.eco.enable","value":true},"id":1}'
params:
- name: value
type: boolean
notes: "Check availability before issuing. ECO mode requires special wake-up procedure (WOL, IR, keypad, or :POWR1 on serial)."
- id: environment_get_control_blocks
label: Read environment control blocks
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"Sensor","valuetype":"Temperature"},"id":18}'
params:
- name: type
type: string
enum: [Sensor, Filter, Controller, Actuator, Alarm, GenericBlock]
- name: valuetype
type: string
description: Sensor value type (Temperature, Speed, PWM, Voltage, Current, Power, etc.)
- id: environment_get_alarm_info
label: Read environment alarm info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo","id":1}'
params: []
- id: firmware_list_components
label: List firmware component names
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents","id":1}'
params: []
- id: firmware_list_component_version_status
label: List firmware component version status
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus","id":1}'
params: []
- id: firmware_schedule_component_upgrade
label: Schedule firmware component upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade","id":1}'
params: []
notes: "Upgrade applies at next reboot."
- id: image_color_p7_custom_copy_preset_to_custom
label: Copy P7 preset to custom
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","id":1}'
params:
- name: presetname
type: string
- id: image_color_p7_custom_reset_preset
label: Reset P7 preset to defaults
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","id":1}'
params:
- name: presetname
type: string
- id: image_color_p7_custom_reset_to_native
label: Reset P7 custom to native
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative","id":1}'
params: []
- id: image_color_rgbmode_next
label: Cycle to next RGB mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode","id":1}'
params: []
Feedbacks
- id: system_state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
- id: illumination_state
type: enum
values: [On, Off]
- id: image_window_main_source
type: string
description: "Name of the source currently displayed in the main window. Empty string indicates deselection."
- id: image_window_main_scaling_mode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
- id: image_brightness
type: float
range: [-1, 1]
step: 0.01
default: 0
- id: image_contrast
type: float
range: [0, 2]
step: 0.01
default: 1
- id: image_gamma
type: float
range: [1, 3]
step: 0.1
default: 2.2
- id: image_saturation
type: float
range: [0, 2]
step: 0.01
default: 1
- id: image_sharpness
type: integer
range: [-2, 8]
step: 1
- id: image_orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
- id: illumination_sources_laser_power
type: integer
description: "Target laser power in percent. Dynamic min/max via illumination.sources.laser.minpower / maxpower."
- id: illumination_sources_laser_minpower
type: integer
description: "Minimum laser power in percent (read-only, dynamic)."
- id: illumination_sources_laser_maxpower
type: integer
description: "Maximum laser power in percent (read-only, dynamic)."
- id: image_connector_detected_signal
type: object
description: "Dictionary returned by property.get on image.connector.{name}.detectedsignal. Includes active, name, vertical/horizontal resolution, sync widths, frequencies, 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: network_device_lan_state
type: enum
values: [CONNECTED, DISCONNECTED]
- id: network_device_lan_ip4config
type: object
description: "Object with string fields Address, Mask, Gateway, NameServers."
- id: dmx_mode
type: string
- id: dmx_startchannel
type: integer
range: [1, 512]
- id: dmx_shutdown
type: boolean
- 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]
- id: environment_temperatures
type: object
description: "Dictionary of sensor name -> temperature (Celsius). Returned by environment.getcontrolblocks with type=Sensor, valuetype=Temperature."
- id: environment_fan_speeds
type: object
description: "Dictionary of fan name -> speed (RPM). Returned by environment.getcontrolblocks with type=Sensor, valuetype=Speed."
- id: firmware_component_version_status
type: object
description: "Array of objects with name, versions {available, running}, and status enum [Unknown, OK, Upgradable]."
- id: image_source_list
type: array
description: "Array of source name strings. Contents vary by model."
- id: image_connector_list
type: array
description: "Array of connector name strings. Contents vary by model."
- id: authenticate_result
type: boolean
description: "Result of authenticate method: true on success."
Variables
# Variables captured as object-typed parameters are also exposed via property.get on the same paths.
# All settable property paths are listed below; their values are dynamically introspectable.
- id: image_brightness
property: image.brightness
type: float
range: [-1, 1]
default: 0
- id: image_contrast
property: image.contrast
type: float
range: [0, 2]
default: 1
- id: image_gamma
property: image.gamma
type: float
range: [1, 3]
default: 2.2
- id: image_saturation
property: image.saturation
type: float
range: [0, 2]
default: 1
- id: image_sharpness
property: image.sharpness
type: integer
range: [-2, 8]
- id: illumination_sources_laser_power
property: illumination.sources.laser.power
type: integer
range: "[minpower, maxpower] (dynamic)"
Events
- id: modelupdated
trigger: "Object structure changes (objects added or removed)."
subscribe: signal.subscribe
payload_example: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"introspect.objectchanged":{"object":"motors.motor1","newobject":true}}]}}'
args:
- name: object
type: string
description: "Name of the changed object"
- name: isnew
type: boolean
description: "true if object is new, false if removed"
- id: property_changed
trigger: "A subscribed property value changes."
subscribe: property.subscribe
payload_example: '{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"system.state":"ready"}]}}'
args:
- name: property
type: array
description: "Array of property/value pairs"
- id: signal_callback
trigger: "A subscribed signal is emitted."
subscribe: signal.subscribe
payload_example: '{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"objectname.signalname":{"arg1":100,"arg2":"cat"}}]}}'
args:
- name: signal
type: array
description: "Array of signal/argument-list pairs"
notes: "Notifications have no id and do not require a response message."
Macros
- id: power_on_sequence
description: "Recommended power-on sequence per source documentation."
steps:
- "property.get system.state"
- "If state is standby or ready, issue system.poweron"
- "Subscribe to system.state to receive the ready/on transition notification"
- id: power_off_sequence
description: "Recommended power-off sequence per source documentation."
steps:
- "property.get system.state"
- "If state is on, issue system.poweroff"
- "Subscribe to system.state to receive the standby notification"
- id: warp_apply_sequence
description: "Three-step procedure to apply a warp grid file."
steps:
- "POST warp file to /api/image/processing/warp/file/transfer"
- "property.set image.processing.warp.file.selected <warp.xml>"
- "property.set image.processing.warp.file.enable true"
- "property.set image.processing.warp.enable true"
- id: blend_mask_apply_sequence
description: "Three-step procedure to apply a blend mask."
steps:
- "POST mask file to /api/image/processing/blend/file/transfer"
- "property.set image.processing.blend.file.selected <mask.png>"
- "property.set image.processing.blend.file.enable true"
- id: blacklevel_apply_sequence
description: "Three-step procedure to apply a black level mask."
steps:
- "POST black level file to /api/image/processing/blacklevel/file/transfer"
- "property.set image.processing.blacklevel.file.selected <blacklevel.png>"
- "property.set image.processing.blacklevel.file.enable true"
- id: wake_from_eco_options
description: "ECO mode wake-up options per source documentation."
steps:
- "Send a wake-on-LAN request to the projector's MAC address"
- "Use the power button on the remote control"
- "Use the power button on the keypad"
- "Send the ASCII string ':POWR1\\r' on the RS-232 serial port"
Safety
confirmation_required_for: []
interlocks: []
notes: |
No explicit safety warnings, interlocks, or power-on sequencing requirements
were stated in the source document. The source recommends verifying
system.state before issuing power on/off to avoid no-op calls during
transitions, but this is best practice rather than a safety interlock.
<!-- UNRESOLVED: source contains no explicit safety warnings or interlock procedures. -->
Notes
- The API is partially dynamic; clients should use
introspectto enumerate available objects, methods, properties, and signals for their specific projector model and configuration (e.g., lens motorization, DMX mode, attached peripherals). - The source document does not specify a default
idfield policy. Examples use small integer ids (1..19) or omitid. Theidis optional in requests; the server uses it to correlate responses. - Notifications (
property.changed,signal.callback) do not carry anidand do not require a response. - Order of fields inside the JSON-RPC envelope is not significant; the server treats request and response as unordered key/value maps.
- It is best practice to await the confirmation response from
property.setbefore issuing the sameproperty.setagain. Continuously setting the same property without waiting may flood the server. - Authentication is optional; for normal end-user access the
authenticatecall can be skipped. Higher access levels require a numeric pass code. - Subscribing to a property does not deliver the current value; use
property.getto read the current state andproperty.subscribeto receive future change notifications. - DMX is configuration-dependent: in basic mode only 2 channels are present; extended mode exposes more channels. Always run
dmx.listmodesanddmx.listchannelsto discover the active set. - HTTP file endpoints live under
/api/.... Two example endpoint patterns are documented:/api/image/processing/warp/file/transfer,/api/image/processing/blend/file/transfer,/api/image/processing/blacklevel/file/transfer. Other endpoints may exist and should be discovered via introspection. - The
image.source.{name}.listconnectorsandimage.connector.{name}.detectedsignalpaths are dynamic, derived from the source/connector list. Source object names are obtained by stripping non-word characters and lowercasing the source name (e.g., "DisplayPort 1" -> "displayport1"). - For the warp file format, the source explicitly defers to the MCM500/400 documentation.
- ECO mode projectors require a special wake-up procedure; the serial wake string is
:POWR1\r(ASCII, with CR). - The source does not document voltage, current, or power specifications. Do not fabricate them.
Provenance
source_domains:
- audiogeneral.com
- docs
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-05-14T11:34:25.101Z
last_checked_at: 2026-06-02T21:40:31.910Z
Verification Summary
verdict: verified
checked_at: 2026-06-02T21:40:31.910Z
matched_actions: 67
action_count: 67
confidence: medium
summary: "All 67 spec actions match source methods/commands verbatim; transport values (port 9090, 19200 8N1, passcode auth) confirmed; source command catalogue fully covered. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "source document explicitly targets \"Pulse projectors\" but the catalog is applied to the ECU/CRM lines by the entity bootstrap. Device-to-API mapping (which model supports which methods) is model-dependent and partially dynamic per the source."
- "source contains no explicit safety warnings or interlock procedures."
- "firmware version compatibility ranges not stated in source."
- "per-model availability of specific properties (e.g., motorized zoom, DMX, illumination source type) must be discovered via introspection."
- "HTTP base URL pattern beyond /api/file/transfer endpoints not stated. The source only documents specific file endpoint paths, not a generic API root or auth scheme for HTTP."
- "exact TCP framing / message delimiter not stated; JSON-RPC 2.0 typically uses newline-delimited or length-prefixed framing but the source does not specify."
- "serial message framing / line terminator not stated for general JSON-RPC over RS-232. The only documented serial string is the ECO wake :POWR1\\r."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0