Summary
Control spec for Barco Light On Demand HDX projector. Covers the Pulse JSON-RPC API exposed over TCP/IP on port 9090 and over RS-232 serial. Includes system power, illumination/laser power, source selection, image properties, warp/blend/blacklevel file management, environment sensors, optics, and DMX.
Transport
protocols:
- tcp
- serial
addressing:
port: 9090 # stated: "available on port number 9090"
serial:
baud_rate: 19200 # stated: RS232 Communication Parameters table
data_bits: 8
parity: none
flow_control: none
stop_bits: 1
auth:
type: optional # source: auth via "authenticate" method with pass code; can be skipped for normal end user
# UNRESOLVED: exact pass code length, format, and session expiry not stated in source
Traits
# - powerable (system.poweron / system.poweroff)
# - queryable (property.get / environment.getcontrolblocks)
# - routable (image.window.main.source selection)
# - levelable (illumination.sources.laser.power, image.brightness/contrast/gamma/saturation/sharpness)
Actions
- id: power_on
label: Power On
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweron"}'
params: []
# Note: verify projector state is "standby" or "ready" before issuing
notes: no-op if projector already on or in transition
- id: power_off
label: Power Off
kind: action
command: '{"jsonrpc":"2.0","method":"system.poweroff"}'
params: []
notes: no-op if already off or in transition; verify state is "on" before issuing
- id: wake_from_eco
label: Wake Projector From ECO Mode (Serial)
kind: action
command: ':POWR1\r'
params: []
notes: ASCII sequence sent on RS-232 serial port; alternative wake methods are WOL packet, remote power button, keypad power button
- id: 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 as returned by image.source.list
- id: get_active_source
label: Get Active Source
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.window.main.source"}}'
params: []
- id: list_sources
label: List Available Sources
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.list"}'
params: []
- id: list_connectors
label: List Available Connectors
kind: query
command: '{"jsonrpc":"2.0","method":"image.connector.list"}'
params: []
- id: list_source_connectors
label: List Connectors For Source
kind: query
command: '{"jsonrpc":"2.0","method":"image.source.{source}.listconnectors","params":{}}'
params:
- name: source
type: string
description: Source object name (e.g. displayport1, hdmi)
- id: get_connector_signal
label: Get Connector Signal Info
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.connector.{connector}.detectedsignal"}}'
params:
- name: connector
type: string
description: Connector object name (e.g. l1hdmi)
- id: get_system_state
label: Get Projector State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"system.state"}}'
params: []
- id: get_illumination_state
label: Get Illumination State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.state"}}'
params: []
- id: get_laser_power
label: Get Laser Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.power"}}'
params: []
- id: set_laser_power
label: Set Laser Power
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"illumination.sources.laser.power","value":{power}}}'
params:
- name: power
type: integer
description: Target laser power in percent (within dynamic minpower/maxpower range)
- id: get_laser_minpower
label: Get Laser Min Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.minpower"}}'
params: []
- id: get_laser_maxpower
label: Get Laser Max Power
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"illumination.sources.laser.maxpower"}}'
params: []
- id: engage_clo
label: Engage Constant Light Output
kind: action
command: '{"jsonrpc":"2.0","method":"illumination.clo.engage"}'
params: []
- id: get_image_brightness
label: Get Image Brightness
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.brightness"}}'
params: []
- id: set_image_brightness
label: Set Image Brightness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.brightness","value":{value}}}'
params:
- name: value
type: float
description: Normalized brightness; 0 = default, 1 = 100% offset; range -1..1
- id: get_image_contrast
label: Get Image Contrast
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.contrast"}}'
params: []
- id: set_image_contrast
label: Set Image Contrast
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.contrast","value":{value}}}'
params:
- name: value
type: float
description: Normalized contrast/gain; 1 = default; range 0..2
- id: get_image_gamma
label: Get Image Gamma
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.gamma"}}'
params: []
- id: set_image_gamma
label: Set Image Gamma
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.gamma","value":{value}}}'
params:
- name: value
type: float
description: Gamma; default 2.2; range 1..3
- id: get_image_saturation
label: Get Image Saturation
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.saturation"}}'
params: []
- id: set_image_saturation
label: Set Image Saturation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.saturation","value":{value}}}'
params:
- name: value
type: float
description: Normalized saturation; 1 = default; range 0..2
- id: get_image_sharpness
label: Get Image Sharpness
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"image.sharpness"}}'
params: []
- id: set_image_sharpness
label: Set Image Sharpness
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.sharpness","value":{value}}}'
params:
- name: value
type: integer
description: Sharpness; range -2..8
- id: set_image_orientation
label: Set Image Orientation
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.orientation","value":"{orientation}"}}'
params:
- name: orientation
type: string
description: DESKTOP_FRONT | DESKTOP_REAR | CEILING_FRONT | CEILING_REAR
- 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":{x},"y":{y}}}}'
params:
- name: x
type: integer
- name: y
type: integer
- 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":{w},"height":{h}}}}'
params:
- name: w
type: integer
- name: h
type: integer
- id: set_window_scalingmode
label: Set Window Scaling Mode
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.window.main.scalingmode","value":"{mode}"}}'
params:
- name: mode
type: string
description: Fill | OneToOne | FillScreen | Stretch
- id: set_warp_enable
label: Enable Global Warp
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
- id: upload_warp_file
label: Upload Warp File
kind: action
command: 'curl -X POST -F file=@{filename} http://{host}/api/image/processing/warp/file/transfer'
params:
- name: filename
type: string
- name: host
type: string
- id: select_warp_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
- id: set_warp_file_enable
label: Enable Warp File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.warp.file.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
- id: upload_blend_mask
label: Upload Blend Mask
kind: action
command: 'curl -X POST -F file=@{filename} http://{host}/api/image/processing/blend/file/transfer'
params:
- name: filename
type: string
description: PNG/JPEG/TIFF, 8 or 16 bit grayscale
- name: host
type: string
- 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":"{filename}"}}'
params:
- name: filename
type: string
- id: set_blend_file_enable
label: Enable Blend File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blend.file.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
- id: upload_blacklevel_mask
label: Upload Black Level Mask
kind: action
command: 'curl -X POST -F file=@{filename} http://{host}/api/image/processing/blacklevel/file/transfer'
params:
- name: filename
type: string
description: PNG/JPEG/TIFF, 8 or 16 bit grayscale
- name: host
type: string
- 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":"{filename}"}}'
params:
- name: filename
type: string
- id: set_blacklevel_file_enable
label: Enable Black Level File
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"image.processing.blacklevel.file.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
- id: get_shutter_position
label: Get Shutter Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.shutter.position"}}'
params: []
- id: set_shutter_target
label: Set Shutter Target
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"optics.shutter.target","value":"{target}"}}'
params:
- name: target
type: string
description: Open | Closed
- id: get_optics_zoom
label: Get Zoom Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.zoom.position"}}'
params: []
- id: get_optics_focus
label: Get Focus Position
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.focus.position"}}'
params: []
- id: get_optics_lensshift_h
label: Get Lens Shift Horizontal
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.lensshift.horizontal.position"}}'
params: []
- id: get_optics_lensshift_v
label: Get Lens Shift Vertical
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"optics.lensshift.vertical.position"}}'
params: []
- id: get_environment_sensors
label: Get Environment Sensors
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getcontrolblocks","params":{"type":"{type}","valuetype":"{valuetype}"}}'
params:
- name: type
type: string
description: Sensor | Filter | Controller | Actuator | Alarm | GenericBlock
- name: valuetype
type: string
description: Temperature | Speed | PWM | Voltage | Current | Power | ...
- id: get_environment_alarminfo
label: Get Alarm Info
kind: query
command: '{"jsonrpc":"2.0","method":"environment.getalarminfo"}'
params: []
- id: get_environment_alarmstate
label: Get Environment Alarm State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"environment.alarmstate"}}'
params: []
- id: set_system_standby_enable
label: Set System Standby Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.standby.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
notes: check availability first
- id: set_system_eco_enable
label: Set System ECO Enable
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"system.eco.enable","value":{enabled}}}'
params:
- name: enabled
type: boolean
notes: check availability first
- id: get_dmx_mode
label: Get DMX Mode
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.mode"}}'
params: []
- id: get_dmx_startchannel
label: Get DMX Start Channel
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.startchannel"}}'
params: []
- id: set_dmx_startchannel
label: Set DMX Start Channel
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.startchannel","value":{channel}}}'
params:
- name: channel
type: integer
description: 1..512
- id: get_dmx_shutdown
label: Get DMX Shutdown
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"dmx.shutdown"}}'
params: []
- id: set_dmx_shutdown
label: Set DMX Shutdown
kind: action
command: '{"jsonrpc":"2.0","method":"property.set","params":{"property":"dmx.shutdown","value":{enabled}}}'
params:
- name: enabled
type: boolean
- id: list_dmx_channels
label: List DMX Channel Names
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listchannels"}'
params: []
- id: list_dmx_modes
label: List DMX Modes
kind: query
command: '{"jsonrpc":"2.0","method":"dmx.listmodes"}'
params: []
- id: list_firmware_components
label: List Firmware Components
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponents"}'
params: []
- id: list_firmware_versions
label: List Firmware Component Versions
kind: query
command: '{"jsonrpc":"2.0","method":"firmware.listcomponentversionstatus"}'
params: []
- id: schedule_firmware_upgrade
label: Schedule Firmware Component Upgrade
kind: action
command: '{"jsonrpc":"2.0","method":"firmware.schedulecomponentupgrade"}'
params: []
- id: get_network_ipv4_config
label: Get LAN IPv4 Configuration
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.ip4config"}}'
params: []
- id: get_network_lan_state
label: Get LAN State
kind: query
command: '{"jsonrpc":"2.0","method":"property.get","params":{"property":"network.device.lan.state"}}'
params: []
- id: get_laser_serial
label: Get Laser Serial Number
kind: query
command: '{"jsonrpc":"2.0","method":"illumination.laser.getserialnumber"}'
params: []
- id: next_rgb_mode
label: Cycle RGB Mode
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.rgbmode.nextrgbmode"}'
params: []
- id: p7_custom_copy_preset
label: P7 Custom - Copy Preset To Custom
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.copypresettocustom","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
- id: p7_custom_reset_preset
label: P7 Custom - Reset Preset
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resetpreset","params":{"presetname":"{presetname}"}}'
params:
- name: presetname
type: string
- id: p7_custom_reset_to_native
label: P7 Custom - Reset To Native
kind: action
command: '{"jsonrpc":"2.0","method":"image.color.p7.custom.resettonative"}'
params: []
- id: subscribe_property
label: Subscribe To Property
kind: action
command: '{"jsonrpc":"2.0","method":"property.subscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
description: Dot-notation property name
- id: unsubscribe_property
label: Unsubscribe From Property
kind: action
command: '{"jsonrpc":"2.0","method":"property.unsubscribe","params":{"property":"{property}"}}'
params:
- name: property
type: string
- id: subscribe_signal
label: Subscribe To Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.subscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
description: Signal name in dot notation
- id: unsubscribe_signal
label: Unsubscribe From Signal
kind: action
command: '{"jsonrpc":"2.0","method":"signal.unsubscribe","params":{"signal":"{signal}"}}'
params:
- name: signal
type: string
- id: introspect
label: Introspect Object
kind: query
command: '{"jsonrpc":"2.0","method":"introspect","params":{"object":"{object}","recursive":{recursive}}}'
params:
- name: object
type: string
- name: recursive
type: boolean
description: default true; false lists one level only
- id: authenticate
label: Authenticate Session
kind: action
command: '{"jsonrpc":"2.0","method":"authenticate","params":{"code":{code}}}'
params:
- name: code
type: string
description: Secret pass code; grants elevated access level (skippable for normal end user)
notes: send as the first message of a session to raise access level
Feedbacks
# Unsolicited notifications implement these server-side callbacks.
# The client must implement property.changed and signal.callback to receive them.
- id: property_changed
type: object
description: |
Server-to-client notification when a subscribed property changes.
Payload example:
{"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"system.state":"ready"}]}}
Optional per source-switch: server first sends empty value (deselect) then new value.
- id: signal_callback
type: object
description: |
Server-to-client notification when a subscribed signal fires.
Payload example:
{"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"objectname.signalname":{"arg1":100}}]}}
- id: signal_modelupdated
type: object
description: |
Fired via signal.callback when the object model changes (objects added/removed).
Arguments: object (string), isnew (bool).
- id: signal_objectchanged
type: object
description: |
Variant of modelupdated for introspection objects.
Arguments: object (string), newobject (bool).
Variables
- name: system.state
type: enum
values: [boot, eco, standby, ready, conditioning, on, service, deconditioning, error]
access: read
description: Current operational state of the unit
- name: illumination.state
type: enum
values: [On, Off]
access: read
description: State of the illumination (lamp/LED/laser)
- name: illumination.sources.laser.power
type: float
access: read_write
description: Target laser power in percent; bounded by dynamic minpower/maxpower
- name: illumination.sources.laser.minpower
type: float
access: read
description: Minimum laser power in percent (dynamic, lens-dependent)
- name: illumination.sources.laser.maxpower
type: float
access: float
access: read
description: Maximum laser power in percent (dynamic)
- name: image.brightness
type: float
access: read_write
range: [-1, 1]
description: Normalized brightness; 0 = default, 1 = 100% offset
- name: image.contrast
type: float
access: read_write
range: [0, 2]
description: Normalized contrast/gain; 1 = default
- name: image.gamma
type: float
access: read_write
range: [1, 3]
description: Gamma; default 2.2
- name: image.saturation
type: float
access: read_write
range: [0, 2]
description: Normalized color saturation; 1 = default
- name: image.sharpness
type: integer
access: read_write
range: [-2, 8]
description: Normalized image sharpness
- name: image.orientation
type: enum
values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]
access: read_write
- name: image.window.main.source
type: string
access: read_write
description: Source displayed in the main window
- name: image.window.main.position
type: object
fields: {x: int, y: int}
access: read_write
- name: image.window.main.size
type: object
fields: {width: int, height: int}
access: read_write
- name: image.window.main.scalingmode
type: enum
values: [Fill, OneToOne, FillScreen, Stretch]
access: read_write
- name: image.processing.warp.enable
type: boolean
access: read_write
description: Global warp on/off
- name: image.processing.warp.file.enable
type: boolean
access: read_write
- name: image.processing.warp.file.selected
type: string
access: read_write
- name: image.processing.blend.file.enable
type: boolean
access: read_write
- name: image.processing.blend.file.selected
type: array
items: string
access: read_write
- name: image.processing.blacklevel.file.enable
type: boolean
access: read_write
- name: image.processing.blacklevel.file.selected
type: string
access: read_write
- name: optics.shutter.position
type: enum
values: [Open, Closed]
access: read
- name: optics.shutter.target
type: enum
values: [Open, Closed]
access: read_write
- name: optics.zoom.position
type: integer
access: read
- name: optics.focus.position
type: integer
access: read
- name: optics.lensshift.horizontal.position
type: integer
access: read
- name: optics.lensshift.vertical.position
type: integer
access: read
- name: system.standby.enable
type: boolean
access: read_write
description: Check availability before reading/writing
- name: system.eco.enable
type: boolean
access: read_write
description: Check availability before reading/writing
- name: environment.alarmstate
type: enum
values: [Fatal, Error, Alert, Warning, Ok]
access: read
- name: dmx.mode
type: string
access: read
- name: dmx.startchannel
type: integer
access: read_write
range: [1, 512]
- name: dmx.shutdown
type: boolean
access: read_write
- name: network.device.lan.ip4config
type: object
fields: {Address: string, Mask: string, Gateway: string, NameServers: string}
access: read
- name: network.device.lan.state
type: enum
values: [CONNECTED, DISCONNECTED]
access: read
- name: image.connector.{name}.detectedsignal
type: object
access: read
description: |
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, scan(enum), bits_per_component,
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)
Events
- id: property_changed
description: |
Sent when a subscribed property changes.
Payload: {"jsonrpc":"2.0","method":"property.changed","params":{"property":[{"key":"value"}]}}
Note: subscription does NOT deliver current value; use property.get to retrieve state.
- id: signal_callback
description: |
Sent when a subscribed signal fires.
Payload: {"jsonrpc":"2.0","method":"signal.callback","params":{"signal":[{"signalname":{"args":{}}}]}}
No id member; client must NOT respond.
- id: modelupdated
description: object model structure changed (objects added/removed); arguments: object, isnew.
Macros
# All sequences from the source, captured as multi-step guides.
- id: power_on_safe
label: Safe Power On
steps:
- property.get system.state -> expect standby or ready
- system.poweron
notes: skipping state check risks no-op or unexpected behavior
- id: power_off_safe
label: Safe Power Off
steps:
- property.get system.state -> expect on
- system.poweroff
- id: switch_source_with_updates
label: Switch Source With Listener
steps:
- image.source.list -> enumerate sources
- property.subscribe image.window.main.source
- property.set image.window.main.source = "{source}"
- on property.changed, reconcile active source in client UI
notes: server emits one notification clearing the old source then one for the new
- id: upload_and_apply_warp
label: Upload Warp File And Apply
steps:
- curl POST file to /api/image/processing/warp/file/transfer
- property.set image.processing.warp.file.selected = "{filename}"
- property.set image.processing.warp.file.enable = true
- property.set image.processing.warp.enable = true
- id: upload_and_apply_blend
label: Upload Blend Mask And Apply
steps:
- curl POST file to /api/image/processing/blend/file/transfer
- property.set image.processing.blend.file.selected = "{filename}"
- property.set image.processing.blend.file.enable = true
- id: upload_and_apply_blacklevel
label: Upload Black Level Mask And Apply
steps:
- curl POST file 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_serial
label: Wake Projector From ECO Via Serial
steps:
- send ASCII :POWR1\r over RS-232
notes: | alternatives: WOL magic packet (MAC), remote power button, keypad power button
- id: monitor_connector_signal
label: Monitor Connector Signal Changes
steps:
- image.source.list -> translate source names to object names
- for each source: image.source.{name}.listconnectors
- for each connector: property.subscribe image.connector.{name}.detectedsignal
- on property.changed, reconcile display
Safety
confirmation_required_for:
- illumination.sources.laser.power # high-power laser illumination
- system.poweroff
- firmware.schedulecomponentupgrade
interlocks:
- "Verify system.state is 'standby' or 'ready' before issuing system.poweron."
- "Verify system.state is 'on' before issuing system.poweroff."
- "Waking a projector from ECO mode requires WOL, remote, keypad, or serial :POWR1\\r."
notes: |
The source contains operational guidance but no explicit hazard warnings.
All laser-power setting, power state transitions, and firmware upgrades should be
treated as safety-sensitive.
Notes
Same JSON-RPC 2.0 surface over TCP 9090 and RS-232 (19200 8N1). All commands are name-dot notation; ordering of jsonrpc/method/params/id is free. Auth is optional — authenticate with a pass code raises the access level for higher-privilege properties/methods. Wait for property.set confirmation before issuing the same set again to avoid flooding. Source-switching generates two property.changed notifications: empty (deselect) then new value. Notification messages carry no id; client does not reply. Blend and blacklevel masks must be grayscale (8 or 16 bit), sized to the blend/blacklevel layer (WUXGA 1920x1200 / WQXGA 1280x800 / 4K 1280x800 / 4K Cinemascope 1280x540); only the blue channel is read. API is dynamic; peripherals and lens configuration gate available objects — rely on introspect for the live tree.
Self-check: no voltages/faults invented, port 9090 + baud 19200 from source, `status: draft`, `declared_confidence: low`, unresolved markers present, YAML quoted JSON payloads to dodge colon-trap.
## Provenance
```yaml
source_domains:
- audiogeneral.com
source_urls:
- "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-18T18:16:34.250Z
last_checked_at: 2026-08-19T08:55:31.062Z
Verification Summary
verdict: verified
checked_at: 2026-08-19T08:55:31.062Z
matched_actions: 74
action_count: 74
confidence: medium
summary: "All 74 spec actions match JSON-RPC method/property tokens, curl endpoints, or serial ASCII in the refined Pulse API source; transport values (9090/19200/8N1) are verbatim. (7 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- ledctrl.blink
- "source is the generic Pulse API manual; device-specific command surface must be confirmed via introspection."
- "exact pass code length, format, and session expiry not stated in source"
- "pass code length/format/session expiry for authenticate not stated."
- "HTTP base URL for control layer not stated; only the curl example uses http://{host}/api/...."
- "the refined source is the generic Pulse API manual; the device-specific command surface for HDX must be discovered via introspect."
- "which DMX modes, channels, and counts apply to this projector; introspect dmx.listmodes and dmx.listchannels to enumerate."
- "which illumination sources are present on this device (laser only? xenon? UHP?); introspect illumination.sources."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0