Skip to content

Projector Control Interface (projector)

The Projector Control Interface provides consistent controls for controlling Projectors across control protocols. It's primary use is with PJLink but may be extended for Projectors that do not implement the PJLink control protocol – such as Barco Pulse.

ProjectorControlInterface

errors

Query projector error status including fan, lamp, temperature, cover, filter, and other error conditions.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "errors",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: ERST ?

Example Response:

json
{
    "id": "ERST",
    "value": "000000",
    "raw": "000000"
}

Response format (6 digits): FLTCPO where each position is:

  • F = Fan error (0=OK, 1=Warning, 2=Error)
  • L = Lamp error (0=OK, 1=Warning, 2=Error)
  • T = Temperature error (0=OK, 1=Warning, 2=Error)
  • C = Cover open error (0=OK, 1=Warning, 2=Error)
  • P = Filter error (0=OK, 1=Warning, 2=Error)
  • O = Other error (0=OK, 1=Warning, 2=Error)

freeze

Freeze or unfreeze the projected image (pauses the current frame on screen).

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "freeze",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "freeze",
    "data": {
        "type": "ValueSetBoolean",
        "value": true
    },
    "mid": "123abc"
}

Accepts: ValueSetBoolean / Returns: ControlState

PJLink Command: FREZ 1 (freeze) / FREZ 0 (unfreeze) / FREZ ? (query)


input

Get/set the Projector input by friendly name.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input",
    "data": {
        "type": "ValueSet",
        "value": "HDMI 1"
    },
    "mid": "123abc"
}

Accepts: ValueSet / Returns: ControlState

PJLink Command: INNM ? (query input name)

Note: This uses PJLink Class 2 INNM command to query/set inputs by name. For setting inputs by numeric code, use input_num instead.


input_num

Get/set the Projector input by numeric PJLink input code.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input_num",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "input_num",
    "data": {
        "type": "ValueSet",
        "value": "31"
    },
    "mid": "123abc"
}

Accepts: ValueSet / Returns: ControlState

PJLink Command: INPT <code> (set) / INPT ? (query)

Standard Input Codes:

  • 11-19: RGB inputs (VGA/Computer)
  • 21-29: VIDEO inputs (Composite/Component/S-Video)
  • 31-39: DIGITAL inputs (HDMI/DVI/DisplayPort)
  • 41-49: STORAGE inputs (USB/Memory card)
  • 51-59: NETWORK inputs (LAN/HDBaseT)

See PJLinkInput enum in the PJLink implementation for convenience constants.


inputs

Query the list of available inputs on the projector.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "inputs",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: INST ?

Example Response:

json
{
    "id": "INST",
    "value": "11 12 31 32",
    "raw": "11 12 31 32"
}

Response contains space-separated list of available input codes.


lamp

Query lamp status and running hours.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "lamp",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: LAMP ?

Example Response:

json
{
    "id": "LAMP",
    "value": "1234 1",
    "raw": "1234 1"
}

Response format: <hours> <status> where status is:

  • 0 = Lamp off
  • 1 = Lamp on

For projectors with multiple lamps, multiple pairs are returned.


name

Query the projector's configured name.

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "name",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

PJLink Command: NAME ?


shutter

Mute or unmute the projector's AV output (video and audio blanking).

Get

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "shutter",
    "mid": "123abc"
}

Accepts: None / Returns: ControlState

Set

json
{
    "msg": "io.upswell.xagent.ControlRequest",
    "device": "<device alias>",
    "method": "shutter",
    "data": {
        "type": "ValueSetBoolean",
        "value": true
    },
    "mid": "123abc"
}

Accepts: ValueSetBoolean / Returns: ControlState

PJLink Command: AVMT 11 (mute on) / AVMT 10 (mute off) / AVMT ? (query)

Note: PJLink AVMT command uses:

  • 11 = Video and audio mute ON
  • 10 = Video and audio mute OFF
  • 21 = Video mute ON
  • 20 = Video mute OFF
  • 31 = Audio mute ON
  • 30 = Audio mute OFF

This implementation uses 11/10 to control both video and audio together.

Atlas, Hybrid cloud, on-premesis platform for large scale media program development, delivery and operation.