Summary

Sony data/video projector series controllable via multiple protocols: ADCP (Advanced Display Control Protocol) text commands over RS-232C or TCP, PJLink class 1 over TCP, and PJ Control API (HTTP/JSON). Discovery via SDAP (UDP broadcast), DDDP (AMX), SDDP (Control4), plus Crestron Control and SNMP. This spec covers the protocol family described in the Sony "Protocol Manual (COMMON) 1st Edition (Revised 2)".

Transport

# Source documents 4 transports: serial (RS-232C, ADCP), tcp (ADCP, PJLink),
# http (PJ Control API), udp (SDAP advertisement).
protocols:
  - serial
  - tcp
  - http
  - udp
serial:
  baud_rate: 38400
  data_bits: 8
  parity: even
  stop_bits: 1
  flow_control: none  # inferred: "No flow control" stated for serial channel
addressing:
  # ADCP TCP default port (source: section 4-2 ADCP protocol table)
  port: 53595
  # PJLink uses port 4352 (source: section 4-3 PJLink Specifications)
  # PJ Control API uses port 80, fixed (source: section 4-8-2)
  # SDAP advertisement uses UDP port 53862 (source: section 4-1)
  base_url: "http://<IP>/sony/"  # PJ Control API base path (source: section 4-8-2)
auth:
  # Mixed auth per protocol:
  # - ADCP: ON by default, password "Projector" default, SHA256(random+password)
  # - PJLink: optional, set via web screen, MD5(random+password) per PJLink std
  # - PJ Control API: pre-shared key in X-Auth-PSK header when enabled; level varies per method
  type: mixed  # source: sections 4-2, 4-3, 4-8-2
  notes: "ADCP default password 'Projector'. PJ Control API uses X-Auth-PSK header when enabled; auth levels (source 4-8-2): private=auth required (device-id class info), generic=auth required (control/status-change APIs), none=no auth. PJLink auth optional via web screen."

Traits

traits:
  - powerable    # inferred: POWR / setPowerStatus / power on-off commands present
  - routable     # inferred: INPT input-switch commands present
  - queryable    # inferred: POWR? INPT? AVMT? ERST? LAMP? etc. query commands present
  - levelable    # inferred: ADCP numeric-value set/get syntax documented (relative --rel supported)

Actions

# Coverage note: source (Protocol Manual COMMON) documents protocol mechanics + PJLink
# command set + 2 PJ Control API methods. ADCP-specific command mnemonics live in the
# separate "Supported Command List" - UNRESOLVED here.

# === ADCP text-command format (no specific mnemonics in this source) ===
# Format templates - payload syntax documented but specific ADCP commands not listed here.

- id: adcp_set_string_value
  label: ADCP Set Selected Value (string)
  kind: action
  command: 'command "txt_param1"'
  params:
    - name: command
      type: string
      description: ADCP command mnemonic (see Supported Command List)
    - name: txt_param1
      type: string
      description: String value to set, enclosed in double quotes
  notes: "Return: ok. Source: section 4-2 ADCP command."

- id: adcp_set_numeric_value
  label: ADCP Set Numeric Value
  kind: action
  command: "command 88"
  params:
    - name: command
      type: string
      description: ADCP command mnemonic
    - name: value
      type: integer
      description: Numeric value (typed directly, no quotes)
  notes: "Return: ok. Source: section 4-2 ADCP command."

- id: adcp_set_numeric_relative
  label: ADCP Set Numeric Value (relative)
  kind: action
  command: "command --rel {delta}"
  params:
    - name: command
      type: string
      description: ADCP command mnemonic
    - name: delta
      type: integer
      description: Relative delta (negative for decrement)
  notes: "Return: ok. Source: section 4-2 ADCP command."

- id: adcp_get_value
  label: ADCP Get Value
  kind: query
  command: "command?"
  params:
    - name: command
      type: string
      description: ADCP command mnemonic
  notes: "Return: configured value (string in quotes, or numeric). Source: 4-2."

- id: adcp_get_range
  label: ADCP Get Settable Choice/Range
  kind: query
  command: "command? --range"
  params:
    - name: command
      type: string
      description: ADCP command mnemonic
  notes: "Return: [\"txt1\",\"txt2\"] for enum, or {\"min\":0,\"max\":100,\"step\":1} for numeric. Source: 4-2."

- id: adcp_get_info
  label: ADCP Get Command Info
  kind: query
  command: "command? --info"
  params:
    - name: command
      type: string
      description: ADCP command mnemonic
  notes: 'Return: {"type":"cmd_type","version":"1.0","range":[...]}. Source: 4-2.'

# === PJLink class 1 commands (source: section 4-3) ===
# Wire format: PJLink class1 standard prepends "%1" prefix and uses CR terminator.
# Source shows bare mnemonic + parameter; verbatim from source tables below.

- id: pjlink_powr_set
  label: PJLink Power Set
  kind: action
  command: "POWR {value}"
  params:
    - name: value
      type: integer
      description: "0 = Standby, 1 = Lamp ON"
      enum: [0, 1]
  notes: "Return: OK / ERR2 (out of range) / ERR3 (unacceptable period) / ERR4 (projector error). Source: 4-3 (1)."

- id: pjlink_powr_query
  label: PJLink Power Status Query
  kind: query
  command: "POWR ?"
  params: []
  notes: "Return: 0=Standby, 1=Lamp ON, 2=Cooling, 3=Warm-up, 4=Unacceptable, 5=Defect, or ERR4. Source: 4-3 (2)."

- id: pjlink_inpt_set
  label: PJLink Input Switch
  kind: action
  command: "INPT {value}"
  params:
    - name: value
      type: integer
      description: "1=RGB, 2=VIDEO, 3=DIGITAL, 4=STORAGE, 5=NETWORK (assignment model-dependent)"
      enum: [1, 2, 3, 4, 5, 11, 12, 21, 22, 31, 32, 41, 51]
  notes: "Extended params 11/12/21/22/31/32/41/51 documented in 4-3 (3). Returns OK/ERR2/ERR3/ERR4."

- id: pjlink_inpt_query
  label: PJLink Input Status Query
  kind: query
  command: "INPT ?"
  params: []
  notes: "Return: current input source No. or ERR3/ERR4. Source: 4-3 (4)."

- id: pjlink_avmt_set
  label: PJLink AV Mute Set
  kind: action
  command: "AVMT {value}"
  params:
    - name: value
      type: integer
      description: "10=video off, 11=video on, 20=audio off, 21=audio on, 30=both off, 31=both on"
      enum: [10, 11, 20, 21, 30, 31]
  notes: "Returns OK/ERR2/ERR3/ERR4. Source: 4-3 (5)."

- id: pjlink_avmt_query
  label: PJLink AV Mute Status Query
  kind: query
  command: "AVMT ?"
  params: []
  notes: "Return: 11/21/30/31 or ERR3/ERR4. Source: 4-3 (6)."

- id: pjlink_erst_query
  label: PJLink Error Status Query
  kind: query
  command: "ERST ?"
  params: []
  notes: "Return: 6-digit ABCDEF; each digit 0/1/2. Position: fan/lamp/temp/cover/filter/other. Source: 4-3 (7)."

- id: pjlink_lamp_query
  label: PJLink Lamp Count/Time Query
  kind: query
  command: "LAMP ?"
  params: []
  notes: "Return: lamp accumulative time + illuminated state per lamp (e.g. '40 1' or '40 1 20 0'). Source: 4-3 (8)."

- id: pjlink_inst_query
  label: PJLink Input Switch List Query
  kind: query
  command: "INST ?"
  params: []
  notes: "Return: space-separated source No. list (e.g. '21 22 31 32 33'). Source: 4-3 (9)."

- id: pjlink_name_query
  label: PJLink Projector Name Query
  kind: query
  command: "NAME ?"
  params: []
  notes: "Return: projector name string (max 64 chars) or space. Source: 4-3 (10)."

- id: pjlink_inf1_query
  label: PJLink Manufacturer Name Query
  kind: query
  command: "INF1 ?"
  params: []
  notes: "Return: manufacturer name (SONY). Source: 4-3 (11)."

- id: pjlink_inf2_query
  label: PJLink Model Name Query
  kind: query
  command: "INF2 ?"
  params: []
  notes: "Return: model name (max 32 chars). Source: 4-3 (12)."

- id: pjlink_info_query
  label: PJLink Other Information Query
  kind: query
  command: "INFO ?"
  params: []
  notes: "Return: desired information (max 32 chars) or space. Source: 4-3 (13)."

- id: pjlink_clss_query
  label: PJLink Class Information Query
  kind: query
  command: "CLSS ?"
  params: []
  notes: 'Return: "1" (class 1). Source: 4-3 (14).'

# === PJ Control API (HTTP/JSON) - methods documented in source 4-8 ===

- id: pjctrl_setPowerStatus
  label: PJ Control API Set Power Status
  kind: action
  command: 'POST http://<IP>/sony/system  body: {"method":"setPowerStatus","params":[{"status":{status}}],"version":"1.0","id":1}'
  params:
    - name: status
      type: boolean
      description: "true = power on, false = standby"
  notes: "Requires auth header X-Auth-PSK when enabled (auth level 'generic'). Returns {\"result\":[],\"id\":1}. Source: 4-8."

- id: pjctrl_getPowerStatus
  label: PJ Control API Get Power Status
  kind: query
  command: 'POST http://<IP>/sony/system  body: {"method":"getPowerStatus","params":[],"version":"1.0","id":1}'
  params: []
  notes: "Auth level 'none' - pre-shared key not required. Returns {\"result\":[{\"status\":\"active\"}],\"id\":1}. Source: 4-8."

Feedbacks

- id: power_state
  type: enum
  values: [standby, lamp_on, cooling, warm_up, unacceptable, defect]
  source: PJLink POWR? response (section 4-3)
- id: input_source
  type: enum
  values: [RGB, VIDEO, DIGITAL, STORAGE, NETWORK]
  source: PJLink INPT? response (section 4-3)
- id: av_mute_state
  type: enum
  values: [video_on, video_off, audio_on, audio_off, both_on, both_off]
  source: PJLink AVMT? response (section 4-3)
- id: lamp_time
  type: object
  description: "Lamp accumulative time (0-65535) + illuminated state per lamp"
  source: PJLink LAMP? response (section 4-3)
- id: error_status
  type: string
  description: "6-digit error code: fan/lamp/temp/cover/filter/other, each 0/1/2"
  source: PJLink ERST? response (section 4-3)
# UNRESOLVED: ADCP unsolicited feedback events not documented in this source

Variables

# Source documents ADCP generic parameter set/get mechanics but no specific
# settable variables (lamp hours, brightness, etc. live in Supported Command List).
# UNRESOLVED: populate from Supported Command List if obtained

Events

# SDAP advertisement broadcast (UDP 53862, every 30s) carries:
#   category (projector = 0Ah), equipment name (max 12 chars), serial number,
#   install location (max 24 chars), community (4 bytes), power status (FFFFh on comm error)
# Packet layout (source 4-1-1): HEADER(4) + COMMUNITY(4) + PRODUCT NAME(12) +
#   SERIAL NO.(4) + POWER STATUS(2) + LOCATION(24). HEADER = ID(2, fixed 4441h) + VERSION(1, 01h) + CATEGORY(1, 0Ah).
# Treated as discovery beacon, not a command-channel event.
# UNRESOLVED: no other unsolicited event notifications documented in this source

Macros

# UNRESOLVED: no multi-step sequences documented in this source

Safety

confirmation_required_for: []
interlocks:
  - "Command entry cancelled if 60s elapse without newline (source: 4-2-2 Prescription)"
  - "Must wait for response before sending next command; multi-controller concurrent control prohibited (source: 4-2-2)"
  - "When Standby Mode=Low or Network Mgmt=Off, first command after standby returns err_cmd; resend. VPL-GTZ/VW/HW series: wait up to 10s then resend (source: 4-2-2)"
  - "Values not reflected if input signal unstable (source: 4-2-2)"
  - "PJLink: max 1 controller connected simultaneously; concurrent connections not supported (source: 4-3 Specifications)"
  - "PJ Control API request body max 1024 bytes; non-JSON body returns 'JSON Format Error' (source: 4-8-2)"
timing:
  command_response_wait_ms: "30-1000 typical (source: 4-2-2)"
  adcp_tcp_timeout_s: 60
  pjctrl_request_timeout_s: 30
  pjctrl_max_body_bytes: 1024
# UNRESOLVED: no high-voltage interlock or lamp-cooling lockout procedure stated in this source

Notes

  • Source: Sony "DATA PROJECTOR VIDEO PROJECTOR PROTOCOL MANUAL (COMMON) 1st Edition (Revised 2)". Path: docs/pdfs/sony_vpl_dw_dx_ew_ex_sw_sx_100_200_500_series_unknown.refined.md
  • Source covers protocol family generically. Per-model command support lives in separate "Protocol Manual (SUPPORTED COMMAND LIST)" — not ingested here.
  • ADCP character code US-ASCII; newline CR+LF (0x0D 0x0A); max command size 512 bytes incl. newline.
  • ADCP errors: ok, err_cmd, err_option, err_inactive, err_val, err_auth, err_internal1, err_internal2.
  • PJLink errors: OK, ERR2 (param), ERR3 (unacceptable period), ERR4 (projector error); auth fail returns PJLINK ERRA.
  • PJ Control API errors: HTTP 400/403/404/413/414/501/503; JSON error: [code, msg] codes 1/2/3/5/7/12/14/15.
  • Serial cable: D-Sub 9-pin cross (reverse), pins 2=RxD, 3=TxD, 5=GND, FG=GND; max 15m.
  • Standby mode "Standard" or Network Mgmt "ON" required for comms during standby.
  • Discovery protocols (not command channels): SDAP (UDP 53862, Sony), DDDP (AMX), SDDP (Control4), Crestron RoomView, SNMP. IPv6 not supported on DDDP/SDDP/Crestron/SNMP.

Provenance

source_domains:
  - sony.com
  - pro.sony
  - store.controlworks.com
source_urls:
  - https://www.sony.com/electronics/support/res/manuals/9932/56e8960c34dfa2b9a3c29caae4b87340/99327515M.pdf
  - https://pro.sony/s3/2018/07/05125823/Sony_Protocol-Manual_1st-Edition.pdf
  - https://pro.sony/s3/2018/07/19110602/Sony_Protocol-Manual_Supported-Command-List_1st-Edition-Revised-1.pdf
  - "https://store.controlworks.com/product_resources/documentation/ControlWorks%20Sony%20P2%20Protocol%20Module%20Help%20v1.pdf"
  - https://www.sony.com/electronics/support/res/manuals/W001/W0015153M.pdf
retrieved_at: 2026-06-18T09:05:02.121Z
last_checked_at: 2026-08-05T08:47:27.378Z

Verification Summary

verdict: verified
checked_at: 2026-08-05T08:47:27.378Z
matched_actions: 22
action_count: 22
confidence: medium
summary: "All 22 spec actions match literal source tokens; transport params (port 53595, baud 38400, /sony base path) verified; every source-documented control command is represented. (13 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "model list inferred from family token; source does not enumerate exact members. Verify against per-model Supported Command List."
- "per-model command support matrix lives in separate \"Supported Command List\" doc, not in this source."
- "firmware version compatibility not stated in source"
- "ADCP unsolicited feedback events not documented in this source"
- "populate from Supported Command List if obtained"
- "no other unsolicited event notifications documented in this source"
- "no multi-step sequences documented in this source"
- "no high-voltage interlock or lamp-cooling lockout procedure stated in this source"
- "exact model list in series not enumerated in source (family token inferred)"
- "ADCP-specific command mnemonics not in this source (separate Supported Command List)"
- "full PJ Control API method catalogue not in this source (separate Supported Command List)"
- "SNMP OIDs / community strings not specified in this source"
- "Crestron RoomView / DDDP / SDDP payload formats not specified (refer to vendor)"

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