Skip to main content

Christie Projector (Serial-over-IP)

Drives Christie Digital venue projectors that speak the classic Christie serial ASCII protocol over TCP on port 3002 (serial-over-Ethernet). Covers the D-Series HD, M-Series, HS-Series, Boxer 4K, and GS-Series product lines — the projectors that fill boardrooms, lecture theatres, houses of worship, and mid-tier venues. Wire format is a (VERB VALUE) frame terminated by CR; the driver strips response prefixes, normalizes state, and writes power_state, mute_state, input, lamp_hours, and a raw temperature string back onto the device.

Not a Cinema DCP driver. Christie's cinema-server product line (CP2230, IMB-S3, and friends) speaks the DLP Cinema JNIOR protocol and is out of scope here. This driver targets the presentation / venue projector families.

Prerequisites

  • Christie projector on the LAN with serial-over-Ethernet enabled (System → Communications → Serial-over-Ethernet on modern OSDs). Older projectors expose this only when the optional network card is installed.
  • TCP/3002 reachable from the GEM controller to the projector.
  • The projector's input slot list already configured under Configuration → Input Selection (SIN values match those slot numbers, not physical connector labels).

Setup

  1. Enable serial-over-Ethernet. From the OSD, System → Communications → Serial-over-Ethernet. Confirm it's enabled and note the TCP port (default 3002 on every modern Christie model).
  2. Reserve an IP. Static IP or DHCP reservation so the device row's ip stays stable across power cycles.
  3. Add the device. System → Devices → Add Device, pick Christie Projector (Serial-over-IP) (key christie_projector), and set Projector IP to the unit's address. Leave TCP Port on 3002.
  4. Cross-check input slots. Open the OSD's Configuration → Input Selection page and note which slot number corresponds to each physical connector. set_source takes the slot number, not the connector label.
  5. (Optional) Expose slots as named AV sources. For a touch-panel source picker, define one AV Source per slot on AV → AV Sources, keyed to the slot number.
  6. (Optional) Bind the projector to an AV zone. On AV → AV Zones, set the zone's display_device_id to this device. The driver fans power_state changes out to bound zones so touch-panel power indicators track the projector's real warmup/cooldown.

Device attributes

AttributeRequiredDefaultDescription
ipyesLAN IP or hostname of the projector.
portno3002Serial-over-IP TCP port.
status_intervalno60000Poll cadence in ms. Venue projectors don't change state often; 60 s is plenty.
command_throttleno200Minimum gap between outbound commands (ms). Lower values can drop frames on lamp-based models during warmup.
max_input_slotno32Upper bound for set_source validation. Default 32 covers Boxer 4K30's full slot list.

The driver also writes these state attributes back onto the device as they arrive:

  • power_stateon / off.
  • mute_stateon (shutter closed) / off (shutter open).
  • input — current input slot number.
  • lamp_hours — cumulative illumination hours (name kept even on solid-state HS/GS units so the attribute triggers stay stable).
  • temperature_raw — model-specific temperature string as reported by TMP?. Not further parsed — Christie temperature block varies too widely across product lines to normalize safely.

Commands

  • power_on / power_off (aliases: on / off) — sends (PWR 1) / (PWR 0).
  • shutter_open / shutter_close — sends (SHU 0) / (SHU 1). Christie's polarity is inverted; the named verbs shield callers from it.
  • mute_on / mute_off — aliases for shutter_close / shutter_open; matches GEM's AV mute convention.
  • set_source — accepts source (input slot 1..max_input_slot); sends (SIN <n>).
  • test_pattern — accepts pattern (integer index; 0 turns the pattern off). Values are model-specific; the driver validates the range but not the semantics.
  • get_power / get_shutter / get_source / get_lamp_hours / get_temperature — single-verb queries.
  • get_status — force a full re-read of power, shutter, source, lamp hours, and temperature.

Zone address format

Not used — the projector is a single-headed device. Instead, bind AV zones to this device via display_device_id on the AV Zones page. The driver fans out power_state to those zones so the touch-panel UI mirrors the projector's real state.

Known limitations

  • Shutter polarity is inverted. (SHU 1) closes the shutter (dims the image); (SHU 0) opens it. The driver exposes shutter_open / shutter_close (and mute_on / mute_off aliases) so callers don't have to remember. If you send a raw command through the Command grid, respect the wire polarity.
  • Warmup / cooldown. Lamp-based projectors take 60–120 s between "we accepted the power command" and "the image is actually on". Callers should subscribe to power_state or poll it — never race a fixed sleep.
  • Slot numbering. SIN values map to the projector's configured slot list under Configuration → Input Selection, not to bare HDMI/HDBaseT connector labels. Cross-check the mapping on the OSD before hard-coding source values.
  • Single control session. The serial-over-IP bridge accepts one client at a time on most Christie models. A second telnet from a spare integrator laptop silently steals the socket — coordinate with anyone using ChristieTools or a peer control system.
  • Test pattern indexes vary. The driver validates pattern as an integer 0–99 but does not know which patterns your specific model supports. Consult the OSD's built-in test-pattern list.
  • Temperature block is not parsed. Different Christie families report temperature in different shapes ((TMP!"L1=41C,L2=42C") on some, (TMP!41) on others). The driver saves the raw string as temperature_raw and leaves higher-level parsing to macros / dashboards.
  • No color / lens control yet. Lens shift, zoom, focus, color adjustment, and 3D mode are not yet exposed. The command() switch returns unknown command for anything outside the enumerated set. Follow-up work would extend getCommands() and dispatch.

Troubleshooting

SymptomCheck
connect succeeds but every command is silently ignoredA second control session is holding TCP/3002 — close the peer session (ChristieTools, a leftover telnet, another controller) and reconnect.
power_on returns immediately but no image appearsLamp warmup — 60–120 s on D-Series / M-Series. Solid-state HS/GS units reach on in a few seconds. Watch power_state rather than racing a sleep.
set_source succeeds but no imageThe slot number references the projector's configured slot list, not the physical port. Cross-check under Configuration → Input Selection.
shutter behaves backwardsExpected — Christie's (SHU 1) closes. Use the driver's named shutter_open / shutter_close verbs.
connection accepted, then silenceSerial-over-Ethernet is disabled on the OSD. Enable it under System → Communications → Serial-over-Ethernet.
lamp_hours reads 0 forever on a solid-state modelSolid-state HS/GS projectors report their illumination hours through LPH? even though they have no lamp — the naming is legacy. If the value is truly 0, the illuminator has been reset; verify against the OSD's Statistics page.
  • Devices — add and configure the projector.
  • Commands — command grid and Test runner for set_source, shutter_open, and the mute aliases.
  • AV Zones and AV Sources — bind the projector to a zone and name input slots for a touch-panel source picker.
  • PJLink — a vendor-agnostic projector control fallback. Some Christie models support PJLink as an alternative to the native serial protocol.