Summary

Sony display supporting IP and RS-232C control via ADCP (Advanced Display Control Protocol) and PJLink Class 1, with SDAP (Simple Display Advertisement Protocol) for network discovery. ADCP provides system, menu, and remote-controller-emulation commands over TCP (port 53595) or serial (38400 bps). PJLink provides standardized projector control over TCP (port 4352). SDAP broadcasts device information over UDP (port 53862).

Transport

protocols:
  - tcp
  - serial
  - udp
addressing:
  port: null  # UNRESOLVED: multiple services - ADCP=53595, PJLink=4352, SDAP=53862; no single port
serial:
  baud_rate: 38400
  data_bits: 8
  parity: even
  stop_bits: 1
  flow_control: none
auth:
  type: none  # UNRESOLVED: ADCP supports SHA256 challenge-response (factory password "Projector"); PJLink supports digest auth (factory password "JBMIAProjectorLink"). Both configurable ON/OFF. Single auth.type cannot represent multi-protocol auth.

Traits

traits:
  - powerable  # inferred: POWR and power commands present
  - queryable  # inferred: multiple query commands (POWR?, INPT?, AVMT?, ERST?, LAMP?, etc.)
  - routable  # inferred: INPT input switching commands present
  - levelable  # inferred: ADCP numeric range setting format documented

Actions

actions:
  # === ADCP Commands ===
  # Source only shows `power "on"` as example. Full ADCP command catalogue not in source.
  - id: adcp_power_set
    label: ADCP Power Set
    kind: action
    protocol: adcp
    command: 'power "{state}"'
    params:
      - name: state
        type: string
        description: "Power state - e.g. \"on\", \"off\""
    response: ok
    notes: Only explicit ADCP command example in source. System, menu, and remote-key command catalogues not enumerated.

  - id: adcp_query_value
    label: ADCP Query Selected Value
    kind: query
    protocol: adcp
    command: "command?"
    params:
      - name: command
        type: string
        description: ADCP command name to query
    response: '"txt_param1"'
    notes: Generic ADCP query format - returns current value of named command.

  - id: adcp_query_range
    label: ADCP Query Settable Range
    kind: query
    protocol: adcp
    command: "command? --range"
    params:
      - name: command
        type: string
        description: ADCP command name to query range for
    response: '["txt_param1","txt_param2"] or {"min":0,"max":100,"step":1}'
    notes: Returns settable choices (text) or numeric range.

  - id: adcp_query_info
    label: ADCP Query Command Info
    kind: query
    protocol: adcp
    command: "command? --info"
    params:
      - name: command
        type: string
        description: ADCP command name to query info for
    response: '{"type":"cmd_type","version":"1.0","range":[...]}'

  # === PJLink Commands ===
  - id: pjlink_power_set
    label: PJLink Power Control
    kind: action
    protocol: pjlink
    command: "%1POWR {param}"
    params:
      - name: param
        type: integer
        enum: [0, 1]
        description: "0 = Standby, 1 = Lamp ON"
    response: "OK / ERR2 / ERR3 / ERR4"

  - id: pjlink_power_query
    label: PJLink Power Status Query
    kind: query
    protocol: pjlink
    command: "%1POWR ?"
    params: []
    response: "0=Standby, 1=Power ON, 2=Cooling, 3=Startup, ERR4=error"

  - id: pjlink_input_set
    label: PJLink Input Switch
    kind: action
    protocol: pjlink
    command: "%1INPT {param}"
    params:
      - name: param
        type: integer
        description: "Input number - 1*=RGB, 2*=VIDEO, 3*=DIGITAL, 4*=STORAGE, 5*=NETWORK. Second digit selects sub-input."
    response: "OK / ERR2 / ERR3 / ERR4"

  - id: pjlink_input_query
    label: PJLink Current Input Query
    kind: query
    protocol: pjlink
    command: "%1INPT ?"
    params: []
    response: "Current input number"

  - id: pjlink_avmt_set
    label: PJLink AV Mute Control
    kind: action
    protocol: pjlink
    command: "%1AVMT {param}"
    params:
      - name: param
        type: integer
        enum: [10, 11, 20, 21, 30, 31]
        description: "1X=video, 2X=audio, 3X=both. X0=off, X1=on"
    response: "OK / ERR2 / ERR3 / ERR4"

  - id: pjlink_avmt_query
    label: PJLink AV Mute Status Query
    kind: query
    protocol: pjlink
    command: "%1AVMT ?"
    params: []
    response: "11=video mute ON, 21=audio mute ON, 30=both OFF, 31=both ON"

  - id: pjlink_error_query
    label: PJLink Error Status Query
    kind: query
    protocol: pjlink
    command: "%1ERST ?"
    params: []
    response: "6-digit: fan/lamp/temperature/cover/filter/other. 0=no error, 1=warning, 2=error"

  - id: pjlink_lamp_query
    label: PJLink Lamp Status Query
    kind: query
    protocol: pjlink
    command: "%1LAMP ?"
    params: []
    response: "Lamp hours (0-65535) and illuminated state (1=lit, 0=unlit) per lamp"

  - id: pjlink_input_list_query
    label: PJLink Available Inputs Query
    kind: query
    protocol: pjlink
    command: "%1INST ?"
    params: []
    response: "Source numbers of switchable inputs"

  - id: pjlink_name_query
    label: PJLink Projector Name Query
    kind: query
    protocol: pjlink
    command: "%1NAME ?"
    params: []
    response: "Projector name (max 64 characters)"

  - id: pjlink_manufacturer_query
    label: PJLink Manufacturer Name Query
    kind: query
    protocol: pjlink
    command: "%1INF1 ?"
    params: []
    response: "Manufacturer name (e.g. SONY)"

  - id: pjlink_model_query
    label: PJLink Model Name Query
    kind: query
    protocol: pjlink
    command: "%1INF2 ?"
    params: []
    response: "Model name (max 32 characters)"

  - id: pjlink_info_query
    label: PJLink Other Info Query
    kind: query
    protocol: pjlink
    command: "%1INFO ?"
    params: []
    response: "Returns a space"

  - id: pjlink_class_query
    label: PJLink Class Query
    kind: query
    protocol: pjlink
    command: "%1CLSS ?"
    params: []
    response: "1 (PJLink Class 1)"

  # === SDAP ===
  # SDAP is broadcast-only discovery - no actionable commands. Device sends
  # category, name, serial, location, community, power status via UDP port 53862
  # every 30 seconds. No controller-initiated commands documented.

Feedbacks

feedbacks:
  - id: adcp_response_ok
    type: enum
    values: [ok]
    description: ADCP normal command completion

  - id: adcp_response_error
    type: enum
    values: [err_cmd, err_option, err_inactive, err_val, err_auth, err_internal1, err_internal2]
    description: "ADCP error responses - command format error, option error, temporarily invalidated, value out of range, auth failure, internal comm error 1/2"

  - id: pjlink_power_state
    type: enum
    values: ["0", "1", "2", "3", "ERR4"]
    description: "PJLink POWR? response - 0=Standby, 1=Power ON, 2=Cooling, 3=Startup, ERR4=error"

  - id: pjlink_avmt_state
    type: enum
    values: ["11", "21", "30", "31"]
    description: "PJLink AVMT? response - video/audio muting state"

  - id: pjlink_error_status
    type: string
    description: "6-digit error status from ERST? - fan/lamp/temp/cover/filter/other"

  - id: pjlink_lamp_status
    type: string
    description: "Lamp hours and illuminated state per lamp"

  - id: sdap_broadcast
    type: object
    description: "SDAP periodic UDP broadcast - category, equipment name, serial number, installation info, community, power status"
    notes: Sent every 30 seconds on UDP port 53862. No subscription needed.

  # UNRESOLVED: ADCP unsolicited notifications / event push not documented in source

Variables

# UNRESOLVED: ADCP numeric parameter ranges described in format but specific settable
# variables not enumerated in source beyond the generic command/format description.

Events

events:
  - id: sdap_advertisement
    description: "SDAP broadcast packet sent every 30 seconds (factory default) on UDP 53862. Contains category, equipment name, serial number, location, community, power status."
    trigger: periodic

  # UNRESOLVED: ADCP unsolicited events not documented in source

Macros

# UNRESOLVED: no multi-step sequences described in source

Safety

confirmation_required_for: []
interlocks:
  - description: "Standby mode must be set to \"Standard\" or \"Network management\" set to \"ON\" for serial/network control during standby. Low standby mode or network management OFF returns err_cmd."
  - description: "ADCP: must receive response before sending next command. Sending without waiting causes reception failure."
  - description: "ADCP: command entry timeout of 60 seconds - incomplete commands are discarded."
# UNRESOLVED: no power-on sequencing or interlock procedures documented beyond standby mode requirement

Notes

  • Source document is Sony DATA PROJECTOR protocol manual — may not fully cover KDXD8599 Series consumer TV.
  • ADCP max command size: 512 bytes including newline. Command/parameter delimited by space (0x20). Newline: CR+LF (0x0D+0x0A). Character code: US-ASCII.
  • ADCP command response wait: approximately 30–1000 ms.
  • ADCP supports serial and network connections. Network auth uses SHA256 hash of (random number + password).
  • PJLink Class 1 only. Max 1 simultaneous controller connection. Port 4352.
  • SDAP category byte for projector: 0x0A. Power status FFFFh on communication error.
  • IPv6 not supported for AMX DDDP, Control4 SDDP, Crestron, or SNMP.

Provenance

source_domains:
  - pro.sony
  - pro-bravia.sony.net
source_urls:
  - https://pro.sony/s3/2018/07/05125823/Sony_Protocol-Manual_1st-Edition.pdf
  - https://pro-bravia.sony.net/remote-display-control/simple-ip-control/
  - https://pro-bravia.sony.net/remote-display-control/serial-control/
  - https://pro-bravia.sony.net/remote-display-control/ircc-ip/
  - https://pro-bravia.sony.net/remote-display-control/rest-api/
retrieved_at: 2026-05-27T14:23:38.003Z
last_checked_at: 2026-06-12T19:52:54.082Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:52:54.082Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions match verbatim in source with correct transport parameters verified. (13 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "Source is Sony DATA PROJECTOR protocol manual used as fallback reference for KDXD8599. Full ADCP command catalogue not enumerated — only `power` example shown. Actual device command set may differ. ADCP system/menu/remote-key command lists absent from source."
- "multiple services - ADCP=53595, PJLink=4352, SDAP=53862; no single port"
- "ADCP supports SHA256 challenge-response (factory password \"Projector\"); PJLink supports digest auth (factory password \"JBMIAProjectorLink\"). Both configurable ON/OFF. Single auth.type cannot represent multi-protocol auth."
- "ADCP unsolicited notifications / event push not documented in source"
- "ADCP numeric parameter ranges described in format but specific settable"
- "ADCP unsolicited events not documented in source"
- "no multi-step sequences described in source"
- "no power-on sequencing or interlock procedures documented beyond standby mode requirement"
- "full ADCP command catalogue — system commands, menu commands, remote controller key commands not enumerated"
- "SNMP MIB/OID details not documented"
- "AMX DDDP, Control4 SDDP, Crestron Control details not documented beyond discovery mention"
- "firmware version compatibility not stated"
- "specific input names/mapping for INPT numeric values beyond category (1*=RGB, 2*=VIDEO, etc.)"

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