Summary

Barco Pulse projector (Icx1 5). Control via Pulse API = JSON-RPC 2.0 over TCP/IP (port 9090) or RS-232 serial. Same command set both transports. HTTP file endpoints for warp/blend/blacklevel mask upload-download. Laser illumination source.

Transport

protocols:
  - tcp
  - serial
  - http
addressing:
  port: 9090                 # TCP Pulse service port (stated)
  base_url: "http://{projector_address}/api/{file_endpoint}"  # HTTP file endpoints (stated)
serial:
  baud_rate: 19200
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
  wiring: "9-pin male on projector; pin2-pin2, pin3-pin3, pin5-pin5"
auth:
  type: optional  # source: auth only required for higher-than-end-user access; end-user access skips auth
  # authenticate method: {"jsonrpc":"2.0","method":"authenticate","params":{"code":<secret_code>}}
  # example code in source: 98765 (placeholder, real code UNRESOLVED)

Traits

traits:
  - powerable     # inferred: system.poweron / system.poweroff methods present
  - queryable     # inferred: property.get + many query methods present
  - levelable     # inferred: brightness/contrast/gamma/saturation/power level controls present
  - routable      # inferred: image.window.main.source select + source/connector lists present

Actions

# All commands are JSON-RPC 2.0 over TCP (port 9090) or serial. Same payload either transport.
# ECO-wake uses a raw ASCII serial sequence instead of JSON-RPC.

- id: system_poweron
  label: Power On
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweron"}'
  params: []
  notes: "No-op if already on or in transition. Best practice: verify system.state is standby or ready first."

- id: system_poweroff
  label: Power Off
  kind: action
  command: '{"jsonrpc": "2.0", "method": "system.poweroff"}'
  params: []
  notes: "No-op if already off or in transition. Best practice: verify system.state is on first."

- id: eco_wake_serial
  label: ECO Mode Wake (Serial)
  kind: action
  command: ':POWR1\r'
  params: []
  notes: "Raw ASCII sent on RS232 port to wake projector from ECO mode. Not JSON-RPC. Alt wake methods: WoL (MAC addr), IR remote power, keypad power."

- id: authenticate
  label: Authenticate (raise access level)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "authenticate", "params": {"code": <secret_code>}}'
  params:
    - name: code
      type: integer
      description: Secret pass code (example in source: 98765). Real code UNRESOLVED.
  notes: "Only required for higher-than-end-user access. End-user access skips auth."

- id: property_set
  label: Set Property
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "<objectname.propertyname>", "value": <value>}}'
  params:
    - name: property
      type: string
      description: Dot-notation property name (see Variables).
    - name: value
      type: any
      description: Value matching property type.
  notes: "Wait for confirmation before re-setting same property (flood warning in source)."

- id: property_get
  label: Get Property
  kind: query
  command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "<objectname.propertyname>"}}'
  params:
    - name: property
      type: string
      description: Dot-notation property name, or array of names for multi-get.

- id: property_subscribe
  label: Subscribe to Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.subscribe", "params": {"property": "<objectname.propertyname>"}}'
  params:
    - name: property
      type: string
      description: Single property name or array of names.

- id: property_unsubscribe
  label: Unsubscribe from Property Changes
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.unsubscribe", "params": {"property": "<objectname.propertyname>"}}'
  params:
    - name: property
      type: string
      description: Single property name or array of names.

- id: signal_subscribe
  label: Subscribe to Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.subscribe", "params": {"signal": "<signalname>"}}'
  params:
    - name: signal
      type: string
      description: Signal name (e.g. modelupdated) or array of names.

- id: signal_unsubscribe
  label: Unsubscribe from Signal
  kind: action
  command: '{"jsonrpc": "2.0", "method": "signal.unsubscribe", "params": {"signal": "<signalname>"}}'
  params:
    - name: signal
      type: string
      description: Signal name or array of names.

- id: introspect
  label: Introspect Object Metadata
  kind: query
  command: '{"jsonrpc": "2.0", "method": "introspect", "params": {"object": "<name>", "recursive": true}}'
  params:
    - name: object
      type: string
      description: Object name in dot notation; empty introspects everything.
    - name: recursive
      type: boolean
      description: If false, only one level of object names listed.

- id: image_source_list
  label: List Available Sources
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.list"}'
  params: []
  notes: "Returns array of source names. Varies by projector model. Source names e.g. DVI 1, DVI 2, DisplayPort 1, DisplayPort 2, Dual DVI, Dual DisplayPort, Dual Head DVI, Dual Head DisplayPort, HDBaseT, HDMI, SDI."

- id: image_connector_list
  label: List Available Connectors
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.connector.list"}'
  params: []
  notes: "Returns array of physical connector names. Varies by model."

- id: image_source_listconnectors
  label: List Connectors Used by Source
  kind: query
  command: '{"jsonrpc": "2.0", "method": "image.source.<sourceobjectname>.listconnectors"}'
  params:
    - name: sourceobjectname
      type: string
      description: Source name lowercased, non-word chars removed (e.g. DisplayPort 1 -> displayport1).
  notes: "Returns array of {gridposition:{row,column,plane}, name}."

- id: select_input
  label: Select Active Source
  kind: action
  command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "image.window.main.source", "value": "<source_name>"}}'
  params:
    - name: source_name
      type: string
      description: Source name from image.source.list (e.g. DisplayPort 1, HDMI).

- id: environment_getcontrolblocks
  label: Get Environment Sensor Readings
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getcontrolblocks", "params": {"type": "<sensortype>", "valuetype": "<valuetype>"}}'
  params:
    - name: type
      type: string
      description: Sensor type enum - Sensor, Filter, Controller, Actuator, Alarm, GenericBlock.
    - name: valuetype
      type: string
      description: Value type enum - Temperature, Speed, PWM, Voltage, Current, Power, Altitude, Pressure, Humidity, ADC, Coordinate, Peltier, Waveform, Average, Delay, Difference, Interpolation, Limit, Median, Noise, Weighting, Comparison, Threshold, Formula, Driver, PID, Mode, State, Pump, Resistance, Simulation, Constant, Manual, Range, Any.
  notes: "Returns dictionary of sensor-name -> reading. Used for temps, fan speeds, voltages, etc."

- id: dmx_listchannels
  label: List DMX Channels
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listchannels"}'
  params: []
  notes: "Returns array of available channel names."

- id: dmx_listmodes
  label: List DMX Modes
  kind: query
  command: '{"jsonrpc": "2.0", "method": "dmx.listmodes"}'
  params: []
  notes: "Returns array of mode names. Basic mode = 2 channels; extended mode exposes more."

- id: environment_getalarminfo
  label: Get Alarm Info
  kind: query
  command: '{"jsonrpc": "2.0", "method": "environment.getalarminfo"}'
  params: []
  notes: "Returns array of {severity, timestamp, source, description, custommessage}."

- id: firmware_listcomponents
  label: List Firmware Components
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponents"}'
  params: []
  notes: "Returns array of managed firmware component names."

- id: firmware_listcomponentversionstatus
  label: List Firmware Version Status
  kind: query
  command: '{"jsonrpc": "2.0", "method": "firmware.listcomponentversionstatus"}'
  params: []
  notes: "Returns array of {name, versions:{available, running}, status}. status enum: Unknown, OK, Upgradable."

- id: firmware_schedulecomponentupgrade
  label: Schedule Firmware Upgrade
  kind: action
  command: '{"jsonrpc": "2.0", "method": "firmware.schedulecomponentupgrade"}'
  params: []
  notes: "Forces component upgrade at next reboot. Param details UNRESOLVED - source does not specify params."

- id: illumination_clo_engage
  label: Engage CLO (Constant Light Output)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "illumination.clo.engage"}'
  params: []
  notes: "Engages CLO at current light level."

- id: illumination_laser_getserialnumber
  label: Get Laser Serial Number
  kind: query
  command: '{"jsonrpc": "2.0", "method": "illumination.laser.getserialnumber"}'
  params: []
  notes: "Returns string serial number."

- id: image_color_p7_custom_copypresettocustom
  label: Copy Color Preset to Custom (P7)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.copypresettocustom", "params": {"presetname": "<name>"}}'
  params:
    - name: presetname
      type: string
      description: Preset name to copy.

- id: image_color_p7_custom_resetpreset
  label: Reset Color Preset (P7)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resetpreset", "params": {"presetname": "<name>"}}'
  params:
    - name: presetname
      type: string
      description: Preset name to reset.

- id: image_color_p7_custom_resettonative
  label: Reset Color to Native (P7)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.p7.custom.resettonative"}'
  params: []

- id: image_color_rgbmode_nextrgbmode
  label: Next RGB Mode
  kind: action
  command: '{"jsonrpc": "2.0", "method": "image.color.rgbmode.nextrgbmode"}'
  params: []
  notes: "Cycles through all possible RGB modes."

- id: ledctrl_blink
  label: LED Blink (example method)
  kind: action
  command: '{"jsonrpc": "2.0", "method": "ledctrl.blink", "params": {"led": "<ledname>", "color": "<color>", "period": <int>}}'
  params:
    - name: led
      type: string
      description: LED name (e.g. systemstatus).
    - name: color
      type: string
      description: Color name (e.g. red).
    - name: period
      type: integer
      description: Blink period.
  notes: "Documented as methods API example. Availability model-dependent."

- id: file_upload
  label: Upload File (HTTP)
  kind: action
  command: 'curl -X POST -F file=@<filename> http://{projector_address}/api/<endpoint>'
  params:
    - name: filename
      type: string
      description: Local file to upload.
    - name: endpoint
      type: string
      description: File endpoint path (e.g. image/processing/warp/file/transfer, image/processing/blend/file/transfer, image/processing/blacklevel/file/transfer).

- id: file_download
  label: Download File (HTTP)
  kind: query
  command: 'curl -O -J http://{projector_address}/api/<endpoint>/<filename>'
  params:
    - name: endpoint
      type: string
      description: File endpoint path.
    - name: filename
      type: string
      description: Optional specific file; some endpoints serve current file without name.

Feedbacks

- id: system_state
  type: enum
  values: [boot, eco, standby, ready, conditioning, on, deconditioning, service, error]
  query_command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "system.state"}}'

- id: illumination_state
  type: enum
  values: [On, Off]
  query_command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "illumination.state"}}'

- id: environment_alarmstate
  type: enum
  values: [Fatal, Error, Alert, Warning, Ok]
  query_command: '{"jsonrpc": "2.0", "method": "property.get", "params": {"property": "environment.alarmstate"}}'

- id: network_device_lan_state
  type: enum
  values: [CONNECTED, DISCONNECTED]

- id: optics_shutter_position
  type: enum
  values: [Open, Closed]

- id: image_connector_detectedsignal
  type: object
  description: "Detected signal info per connector (image.connector.<name>.detectedsignal). Fields: active(bool), name, vertical/horizontal totals & resolutions & porches & 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: illumination_sources_laser_minpower
  type: float
  description: Min laser power percent (read-only).

- id: illumination_sources_laser_maxpower
  type: float
  description: Max laser power percent (read-only).

Variables

- id: illumination_sources_laser_power
  type: float
  access: RW
  description: Target laser power in percent.
  set_command: '{"jsonrpc": "2.0", "method": "property.set", "params": {"property": "illumination.sources.laser.power", "value": <value>}}'

- id: image_window_main_source
  type: string
  access: RW
  description: Source displayed in main window.

- id: image_window_main_position
  type: object
  access: RW
  description: "{x:int, y:int}"

- id: image_window_main_size
  type: object
  access: RW
  description: "{width:int, height:int}"

- id: image_window_main_scalingmode
  type: enum
  access: RW
  values: [Fill, OneToOne, FillScreen, Stretch]

- id: image_brightness
  type: float
  access: RW
  min: -1
  max: 1
  step_size: 1
  precision: 0.01
  description: "Normalized brightness/offset; 0 default, 1 = 100% offset."

- id: image_contrast
  type: float
  access: RW
  min: 0
  max: 2
  step_size: 1
  precision: 0.01
  description: "Normalized contrast/gain; 1 default."

- id: image_gamma
  type: float
  access: RW
  min: 1
  max: 3
  step_size: 1
  precision: 0.1
  description: "Image gamma; default 2.2."

- id: image_saturation
  type: float
  access: RW
  min: 0
  max: 2
  step_size: 1
  precision: 0.01
  description: "Normalized saturation; 1 default."

- id: image_sharpness
  type: integer
  access: RW
  min: -2
  max: 8
  step_size: 1
  precision: 1

- id: image_orientation
  type: enum
  access: RW
  values: [DESKTOP_FRONT, DESKTOP_REAR, CEILING_FRONT, CEILING_REAR]

- id: image_processing_warp_enable
  type: boolean
  access: RW
  description: Enable/disable all warp functions.

- id: image_processing_warp_file_enable
  type: boolean
  access: RW
  description: Enable/disable file warp.

- id: image_processing_warp_file_selected
  type: string
  access: RW
  description: Currently selected warp file.

- id: image_processing_blend_file_enable
  type: boolean
  access: RW
  description: Enable/disable file blend.

- id: image_processing_blend_file_selected
  type: array
  access: RW
  description: Currently selected blend files (string array).

- id: image_processing_blacklevel_file_enable
  type: boolean
  access: RW
  description: Enable/disable black level correction.

- id: image_processing_blacklevel_file_selected
  type: string
  access: RW
  description: Currently selected black level file.

- id: optics_zoom_position
  type: integer
  access: RW
  description: Current zoom position.

- id: optics_focus_position
  type: integer
  access: RW
  description: Current focus position.

- id: optics_lensshift_horizontal_position
  type: integer
  access: RW
  description: Current horizontal lens shift position.

- id: optics_lensshift_vertical_position
  type: integer
  access: RW
  description: Current vertical lens shift position.

- id: optics_shutter_target
  type: enum
  access: RW
  values: [Open, Closed]

- id: dmx_mode
  type: string
  access: RW
  description: Current DMX mode.

- id: dmx_startchannel
  type: integer
  access: RW
  min: 1
  max: 512
  description: DMX start channel.

- id: dmx_shutdown
  type: boolean
  access: RW
  description: Shutdown enabled or not.

- id: system_standby_enable
  type: boolean
  access: RW
  description: Enable/disable standby state. Check availability first.

- id: system_eco_enable
  type: boolean
  access: RW
  description: Enable/disable ECO state. Check availability first.

- id: network_device_lan_ip4config
  type: object
  access: R
  description: "{Address, Mask, Gateway, NameServers} - IPv4 config."

Events

- id: property_changed
  direction: server_to_client
  description: "Unsolicited notification when a subscribed property value changes."
  payload: '{"jsonrpc": "2.0", "method": "property.changed", "params": {"property": [{"<objectname.propertyname>": <value>}]}}'
  notes: "No id field; no response must be returned. Two notifications delivered on source switch (deselect then select)."

- id: signal_callback
  direction: server_to_client
  description: "Unsolicited notification when a subscribed signal fires."
  payload: '{"jsonrpc": "2.0", "method": "signal.callback", "params": {"signal": [{"<objectname.signalname>": {<args>}}]}}'

- id: modelupdated
  direction: server_to_client
  description: "Signal triggered when object structure changes (objects added/removed). Subscribe via signal.subscribe."
  # UNRESOLVED: full payload args for modelupdated beyond introspect.objectchanged example

Macros

- id: warp_grid_apply
  description: "Upload + select + enable a warp grid file."
  steps:
    - "Upload via HTTP: curl -X POST -F file=@warp.xml http://{addr}/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 (global warp enable)"

- id: blend_mask_apply
  description: "Upload + select + enable a blend mask."
  steps:
    - "Upload via HTTP: curl -X POST -F file=@mask.png http://{addr}/api/image/processing/blend/file/transfer"
    - "property.set image.processing.blend.file.selected = mask.png"
    - "property.set image.processing.blend.file.enable = true"
  notes: "Grayscale 8 or 16 bit. Size per projector resolution (WUXGA 1920x1200, WQXGA/4K 1280x800, 4K Cinemascope 1280x540). PNG/JPEG/TIFF; blue channel used if color image."

- id: blacklevel_mask_apply
  description: "Upload + select + enable a black level mask."
  steps:
    - "Upload via HTTP: curl -X POST -F file=@blacklevel.png http://{addr}/api/image/processing/blacklevel/file/transfer"
    - "property.set image.processing.blacklevel.file.selected = blacklevel.png"
    - "property.set image.processing.blacklevel.file.enable = true"
  notes: "Same size/format constraints as blend mask."

Safety

confirmation_required_for: []
interlocks:
  - "Power on is no-op if projector already on or in state transition. Best practice: verify system.state is standby or ready before system.poweron."
  - "Power off is no-op if already off or in transition. Best practice: verify system.state is on before system.poweroff."
  - "ECO mode wake requires special handling: WoL (MAC), IR remote power, keypad power, or raw serial ':POWR1\\r'. JSON-RPC system.poweron does not wake from ECO."
  - "property.set: wait for confirmation before re-setting same property - continuous re-set floods server, degrades performance."
  - "Lens/lens-position may affect min/max illumination power levels (dynamic values)."
# UNRESOLVED: no explicit safety interlocks, voltage/current hazards, or power-sequencing warnings stated beyond operational notes above.

Notes

Pulse API = JSON-RPC 2.0. Same commands work over TCP (9090) and RS-232. API is dynamic — availability depends on peripherals/config (e.g. motorized zoom lens, DMX mode). Best method to know exact API per unit: introspect. Object/member naming = lowercase dot notation (JS-like). Multiple objects of a kind modeled as kind.name (e.g. tempctrl.fans.mainfan). Params passed by name; order irrelevant. Warp file format same as MCM500/400.


## Provenance

```yaml
source_domains:
  - audiogeneral.com
source_urls:
  - "https://www.audiogeneral.com/barco/UDX%20Series/JSON_ReferenceGuide.pdf"
retrieved_at: 2026-08-12T18:09:39.443Z
last_checked_at: 2026-08-19T08:41:04.113Z

Verification Summary

verdict: verified
checked_at: 2026-08-19T08:41:04.113Z
matched_actions: 34
action_count: 34
confidence: medium
summary: "All 34 spec actions match source JSON-RPC methods/HTTP/serial literals verbatim; all transport parameters (port 9090, 19200/8/N/1) confirmed; source method catalog fully represented. (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "hardware specs (lumens, resolution, power draw) not in source. firmware version range not stated. exact model variants unknown."
- "full payload args for modelupdated beyond introspect.objectchanged example"
- "no explicit safety interlocks, voltage/current hazards, or power-sequencing warnings stated beyond operational notes above."
- "real auth pass code (98765 is example placeholder). firmware version compatibility range. hardware model variants under Icx1 5 family. full field list for image.connector.detectedsignal enums (color_space, signal_range, scan, stereo_mode values partially listed). DMX extended-mode channel list. firmware.schedulecomponentupgrade params. modelupdated full payload schema beyond introspect.objectchanged example."

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0