Summary

RS-232C control spec for Sony KDL-40XBR5 / KDL-46XBR5 / KDL-52XBR5 LCD TVs and KDS-Z60XBR5 / KDS-Z70XBR5 SXRD projection TVs. Fixed-format binary protocol on D-sub 9-pin serial at 9600 baud, 8N1, no flow control. Commands cover power, input select, channel, volume, picture, sound, geometry, screen and closed-caption.

Transport

protocols:
  - serial
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # inferred from Power (0x00) and Standby Command (0x01)
- routable        # inferred from Input Select (0x02) variants
- queryable       # inferred: Control commands return Answer frames with completed/limit/parse state
- levelable       # inferred from Volume (0x05), Treble (0x32), Bass (0x33), Picture (0x23), Brightness (0x24), Color (0x25), Hue (0x26), Sharpness (0x28)

Actions

# Protocol frame (host -> display):
#   0x8C | 0x00 | <fn> | <len> | <data...> | <chk>
#   Header=0x8C, Category=0x00 (fixed), Function code, Length (incl. checksum),
#   data bytes, then 1-byte checksum = low 8 bits of sum of bytes 1..N.
# Answer frame (display -> host):
#   0x70 | <answer> | <chk>
#   answer: 0x00 Completed, 0x01 Limit Over (max), 0x02 Limit Over (min),
#           0x03 Command Canceled, 0x04 Parse Error.

- id: power
  label: Power (Function 0x00)
  kind: action
  command: "8C 00 00 02 {byte0} XX"
  params:
    - name: byte0
      type: enum
      values: [off, on]
      # byte0: 0x00 = OFF (always enable), 0x01 = ON (only enable when Standby Command is Enable)
      description: "0x00 OFF, 0x01 ON"

- id: standby_command
  label: Standby Command (Function 0x01)
  kind: action
  command: "8C 00 01 02 {byte0} XX"
  params:
    - name: byte0
      type: enum
      values: [disable, enable]
      description: "0x00 Disable standby, 0x01 Enable standby (required before Power ON is accepted)"

- id: input_select_toggle
  label: Input Select Toggle
  kind: action
  command: "8C 00 02 02 00 XX"
  params: []

- id: input_select_tv
  label: Input Select TV (last channel)
  kind: action
  command: "8C 00 02 02 01 XX"
  params: []

- id: input_select_video
  label: Input Select Video
  kind: action
  command: "8C 00 02 02 02 XX"
  params: []

- id: input_select_video1
  label: Input Select Video #1
  kind: action
  command: "8C 00 02 03 02 01 XX"
  params: []

- id: input_select_video2
  label: Input Select Video #2
  kind: action
  command: "8C 00 02 03 02 02 XX"
  params: []

- id: input_select_video3
  label: Input Select Video #3
  kind: action
  command: "8C 00 02 03 02 03 XX"
  params: []

- id: input_select_component
  label: Input Select Component
  kind: action
  command: "8C 00 02 03 03 XX"
  params: []

- id: input_select_component1
  label: Input Select Component #1
  kind: action
  command: "8C 00 02 03 03 01 XX"
  params: []

- id: input_select_component2
  label: Input Select Component #2
  kind: action
  command: "8C 00 02 03 03 02 XX"
  params: []

- id: input_select_hdmi
  label: Input Select HDMI
  kind: action
  command: "8C 00 02 03 04 XX"
  params: []

- id: input_select_hdmi1
  label: Input Select HDMI #1
  kind: action
  command: "8C 00 02 03 04 01 XX"
  params: []

- id: input_select_hdmi2
  label: Input Select HDMI #2
  kind: action
  command: "8C 00 02 03 04 02 XX"
  params: []

- id: input_select_hdmi3
  label: Input Select HDMI #3
  kind: action
  command: "8C 00 02 03 04 03 XX"
  params: []

- id: input_select_hdmi4
  label: Input Select HDMI #4
  kind: action
  command: "8C 00 02 03 04 04 XX"
  params: []
  notes: "HDMI #4 only available on SXRD models (KDS-Z60XBR5 / KDS-Z70XBR5)."

- id: input_select_pc
  label: Input Select PC
  kind: action
  command: "8C 00 02 03 05 XX"
  params: []

- id: program_select_up
  label: Program Select Up
  kind: action
  command: "8C 00 04 03 00 00 XX"
  params: []

- id: program_select_down
  label: Program Select Down
  kind: action
  command: "8C 00 04 03 00 01 XX"
  params: []

- id: program_select_direct
  label: Program Select Direct (channel number)
  kind: action
  command: "8C 00 04 0D 01 {type} {ch10bytes...} XX"
  params:
    - name: type
      type: enum
      values: [terr_digital, terr_analogue, catv]
      description: "0x01 Terr Digital, 0x02 Terr Analogue, 0x03 CATV"
    - name: ch10bytes
      type: bytes
      description: "10 bytes fixed length; allowed values 0x00-0x09, 0x2C, 0xFF (terminator). In CATV(US), 0x2C acts as '.'. 0xFF-filled channel = last channel."

- id: volume_up
  label: Volume Up
  kind: action
  command: "8C 00 05 03 00 00 XX"
  params: []

- id: volume_down
  label: Volume Down
  kind: action
  command: "8C 00 05 03 00 01 XX"
  params: []

- id: volume_direct
  label: Volume Direct
  kind: action
  command: "8C 00 05 03 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Volume level byte"

- id: audio_muting_toggle
  label: Audio Muting Toggle
  kind: action
  command: "8C 00 06 02 00 XX"
  params: []

- id: audio_muting_off
  label: Audio Muting Off
  kind: action
  command: "8C 00 06 03 01 00 XX"
  params: []

- id: audio_muting_on
  label: Audio Muting On
  kind: action
  command: "8C 00 06 03 01 01 XX"
  params: []

- id: language_english
  label: Language English
  kind: action
  command: "8C 00 07 05 00 65 6E 67 XX"
  params: []

- id: language_french
  label: Language French
  kind: action
  command: "8C 00 07 05 00 66 72 65 XX"
  params: []

- id: language_spanish
  label: Language Spanish
  kind: action
  command: "8C 00 07 05 00 73 70 61 XX"
  params: []

- id: off_timer_toggle
  label: Off Timer (SLEEP) Toggle
  kind: action
  command: "8C 00 0C 02 00 XX"
  params: []

- id: off_timer_direct
  label: Off Timer (SLEEP) Direct
  kind: action
  command: "8C 00 0C 03 01 {offset} XX"
  params:
    - name: offset
      type: enum
      values: [off, 15, 30, 45, 60, 90, 120]
      description: "0x00 OFF, 0x0F 15min, 0x1E 30min, 0x2D 45min, 0x3C 60min, 0x5A 90min, 0x78 120min"

- id: display_toggle
  label: Display (Info) Toggle
  kind: action
  command: "8C 00 0F 02 00 XX"
  params: []

- id: closed_caption_toggle
  label: Closed Caption Toggle
  kind: action
  command: "8C 00 10 02 00 XX"
  params: []

- id: closed_caption_off
  label: Closed Caption Direct Off
  kind: action
  command: "8C 00 10 03 01 00 XX"
  params: []

- id: closed_caption_on
  label: Closed Caption Direct On
  kind: action
  command: "8C 00 10 03 01 01 XX"
  params: []

- id: closed_caption_setting
  label: Closed Caption Direct Setting
  kind: action
  command: "8C 00 10 04 02 {kind} {value} XX"
  params:
    - name: kind
      type: enum
      values: [analog, digital]
      description: "0x00 Analog, 0x01 Digital"
    - name: value
      type: integer
      description: "Analog: 0x01 CC1, 0x02 CC2, 0x03 CC3, 0x04 CC4, 0x05 Text1, 0x06 Text2, 0x07 Text3, 0x08 Text4. Digital: 0x01 Service1, 0x02 Service2, 0x03 Service3, 0x04 Service4, 0x05 Service5, 0x06 Service6, 0x07 CC1, 0x08 CC2, 0x09 CC3, 0x0A CC4."

- id: picture_mode_toggle
  label: Picture Mode Toggle
  kind: action
  command: "8C 00 20 02 00 XX"
  params: []

- id: picture_mode_vivid
  label: Picture Mode Vivid
  kind: action
  command: "8C 00 20 03 01 00 XX"
  params: []

- id: picture_mode_standard
  label: Picture Mode Standard
  kind: action
  command: "8C 00 20 03 01 01 XX"
  params: []

- id: picture_mode_cinema
  label: Picture Mode Cinema
  kind: action
  command: "8C 00 20 03 01 02 XX"
  params: []

- id: picture_mode_custom
  label: Picture Mode Custom
  kind: action
  command: "8C 00 20 03 01 03 XX"
  params: []

- id: cine_motion_off
  label: Cine Motion Off
  kind: action
  command: "8C 00 2A 02 00 XX"
  params: []

- id: cine_motion_auto1
  label: Cine Motion Auto1
  kind: action
  command: "8C 00 2A 02 02 XX"
  params: []

- id: cine_motion_auto2
  label: Cine Motion Auto2
  kind: action
  command: "8C 00 2A 02 03 XX"
  params: []

- id: advanced_iris_min
  label: Advanced Iris Min
  kind: action
  command: "8C 00 2B 02 00 XX"
  params: []
  notes: "Advanced Iris only available on SXRD models (KDS-Z60XBR5 / KDS-Z70XBR5)."

- id: advanced_iris_low
  label: Advanced Iris Low
  kind: action
  command: "8C 00 2B 02 01 XX"
  params: []

- id: advanced_iris_mid
  label: Advanced Iris Mid
  kind: action
  command: "8C 00 2B 02 02 XX"
  params: []

- id: advanced_iris_high
  label: Advanced Iris High
  kind: action
  command: "8C 00 2B 02 03 XX"
  params: []

- id: advanced_iris_max
  label: Advanced Iris Max
  kind: action
  command: "8C 00 2B 02 04 XX"
  params: []

- id: advanced_iris_auto1
  label: Advanced Iris Auto1
  kind: action
  command: "8C 00 2B 02 05 XX"
  params: []

- id: advanced_iris_auto2
  label: Advanced Iris Auto2
  kind: action
  command: "8C 00 2B 02 06 XX"
  params: []

- id: picture_up
  label: Picture Up
  kind: action
  command: "8C 00 23 03 00 00 XX"
  params: []

- id: picture_down
  label: Picture Down
  kind: action
  command: "8C 00 23 03 00 01 XX"
  params: []

- id: picture_direct
  label: Picture Direct
  kind: action
  command: "8C 00 23 03 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Picture value byte"

- id: brightness_up
  label: Brightness Up
  kind: action
  command: "8C 00 24 03 00 00 XX"
  params: []

- id: brightness_down
  label: Brightness Down
  kind: action
  command: "8C 00 24 03 00 01 XX"
  params: []

- id: brightness_direct
  label: Brightness Direct
  kind: action
  command: "8C 00 24 03 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Brightness value byte"

- id: color_up
  label: Color Up
  kind: action
  command: "8C 00 25 03 00 00 XX"
  params: []

- id: color_down
  label: Color Down
  kind: action
  command: "8C 00 25 03 00 01 XX"
  params: []

- id: color_direct
  label: Color Direct
  kind: action
  command: "8C 00 25 03 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Color value byte"

- id: hue_up
  label: Hue Up
  kind: action
  command: "8C 00 26 04 00 00 00 XX"
  params: []

- id: hue_down
  label: Hue Down
  kind: action
  command: "8C 00 26 04 00 01 01 XX"
  params: []

- id: hue_direct_red
  label: Hue Direct (Red)
  kind: action
  command: "8C 00 26 04 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "Hue value byte (Red axis)"

- id: hue_direct_green
  label: Hue Direct (Green)
  kind: action
  command: "8C 00 26 04 01 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Hue value byte (Green axis)"

- id: sharpness_up
  label: Sharpness Up
  kind: action
  command: "8C 00 28 03 00 00 XX"
  params: []

- id: sharpness_down
  label: Sharpness Down
  kind: action
  command: "8C 00 28 03 00 01 XX"
  params: []

- id: sharpness_direct
  label: Sharpness Direct
  kind: action
  command: "8C 00 28 03 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "Sharpness value byte"

- id: sound_mode_toggle
  label: Sound Mode Toggle
  kind: action
  command: "8C 00 30 02 00 XX"
  params: []

- id: sound_mode_dynamic
  label: Sound Mode Dynamic
  kind: action
  command: "8C 00 30 03 01 00 XX"
  params: []

- id: sound_mode_standard
  label: Sound Mode Standard
  kind: action
  command: "8C 00 30 03 01 01 XX"
  params: []

- id: sound_mode_custom
  label: Sound Mode Custom
  kind: action
  command: "8C 00 30 03 01 02 XX"
  params: []

- id: treble_up
  label: Treble Up
  kind: action
  command: "8C 00 32 03 00 00 XX"
  params: []

- id: treble_direct
  label: Treble Direct
  kind: action
  command: "8C 00 32 04 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "Treble value byte"

- id: bass_up
  label: Bass Up
  kind: action
  command: "8C 00 33 03 00 00 XX"
  params: []

- id: bass_direct
  label: Bass Direct
  kind: action
  command: "8C 00 33 04 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "Bass value byte"

- id: speaker_off_toggle
  label: Speaker Off Toggle
  kind: action
  command: "8C 00 36 02 00 XX"
  params: []

- id: speaker_off
  label: Speaker Off
  kind: action
  command: "8C 00 36 03 01 00 XX"
  params: []

- id: speaker_on
  label: Speaker On
  kind: action
  command: "8C 00 36 03 01 01 XX"
  params: []

- id: h_size_up
  label: H Size Up
  kind: action
  command: "8C 00 40 03 00 00 XX"
  params: []

- id: h_size_direct
  label: H Size Direct
  kind: action
  command: "8C 00 40 04 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "H Size value byte"

- id: h_shift_up
  label: H Shift Up
  kind: action
  command: "8C 00 41 04 00 00 00 XX"
  params: []

- id: h_shift_down
  label: H Shift Down
  kind: action
  command: "8C 00 41 04 00 01 {value} XX"
  params:
    - name: value
      type: integer
      description: "H Shift value byte"

- id: h_shift_direct
  label: H Shift Direct
  kind: action
  command: "8C 00 41 03 01 00 XX"
  params: []

- id: v_size_up
  label: V Size Up
  kind: action
  command: "8C 00 42 03 00 00 XX"
  params: []

- id: v_size_direct
  label: V Size Direct
  kind: action
  command: "8C 00 42 04 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "V Size value byte"

- id: v_shift_up
  label: V Shift Up
  kind: action
  command: "8C 00 43 04 00 00 XX"
  params: []

- id: v_shift_direct
  label: V Shift Direct
  kind: action
  command: "8C 00 43 03 01 00 {value} XX"
  params:
    - name: value
      type: integer
      description: "V Shift value byte"

- id: screen_wide_toggle
  label: Wide (Aspect) Toggle
  kind: action
  command: "8C 00 44 02 00 XX"
  params: []

- id: screen_wide_direct
  label: Wide (Aspect) Direct
  kind: action
  command: "8C 00 44 03 01 {mode} XX"
  params:
    - name: mode
      type: enum
      values: [wide_zoom, full, zoom, normal, pc_normal, pc_full1, pc_full2, pc_zoom]
      description: "0x00 Wide Zoom, 0x01 Full, 0x02 Zoom, 0x03 Normal, 0x05 PCNormal, 0x06 PC_Full1, 0x07 PC_Full2, 0x08 PC_ZOOM (SXRD only)"

- id: mode_4_3_toggle
  label: 4:3 Mode Toggle
  kind: action
  command: "8C 00 46 02 00 XX"
  params: []

- id: mode_4_3_direct
  label: 4:3 Mode Direct
  kind: action
  command: "8C 00 46 03 01 {mode} XX"
  params:
    - name: mode
      type: enum
      values: [off, zoom, full, wide_zoom, normal]
      description: "0x00 Off, 0x01 Zoom, 0x02 Full, 0x03 Wide Zoom, 0x04 Normal"

Feedbacks

- id: control_answer
  label: Control Answer
  type: enum
  values: [completed, limit_over_max, limit_over_min, command_canceled, parse_error]
  # Frame: 0x70 | answer | chk
  # 0x00 Completed, 0x01 Limit Over (max), 0x02 Limit Over (min), 0x03 Command Canceled, 0x04 Parse Error

Variables

# UNRESOLVED: source does not enumerate settable numeric ranges for Direct/UpDown parameters
# (Picture, Brightness, Color, Hue, Sharpness, Treble, Bass, H/V Size, H/V Shift). User-menu
# range applies per source note §3, but no byte-range values are stated.

Events

# UNRESOLVED: source does not document unsolicited notifications from the display.

Macros

# UNRESOLVED: source does not document multi-step sequences.

Safety

confirmation_required_for:
  - power_on
  - input_switch
# Per source §3:
#   - Send control command after 20 seconds of power on.
#   - In standby mode, only the Power ON command is accepted; all others are disabled.
#   - Standby Command (0x01, Enable=0x01) MUST be sent before Power ON is accepted.
#   - Command interval must be >= 500 ms.
#   - Strict round-trip: wait for Answer before next command.
interlocks:
  - "Power ON only accepted after Standby Command Enable (0x01, 0x01) is acknowledged."
  - "Wait >= 20s after power on before issuing control commands."
  - "Command interval >= 500 ms."
  - "Wait for Answer frame (0x70 ...) before sending next command."

Notes

  • Models covered: KDL-40XBR5, KDL-46XBR5, KDL-52XBR5 (LCD), KDS-Z60XBR5, KDS-Z70XBR5 (SXRD).
  • Source: Sony RS-232C Protocol Manual, 1st Edition (file sony_kdl_x0r_5x0a_unknown.refined.md).
  • Frame structure: 0x8C | 0x00 | <function> | <length> | <data...> | <checksum>. Checksum = low 8 bits of sum of bytes 1..N (header through last data byte).
  • Answer frame: 0x70 | <answer_code> | <checksum>.
  • The source is truncated after Screen/4:3 Mode. Command categories that would normally follow (Channel presets, Timer/Clock, Setup, parental control, etc.) are not present in this document and have NOT been enumerated.
  • SXRD-only features: HDMI #4 input, Advanced Iris, PC_ZOOM wide mode.
  • All command hex bytes in the source use lowercase; reproduced verbatim. ASCII Language strings (eng/fre/spa) shown as ASCII byte hex (65 6E 67 etc.) per source.
  • Cable: D-sub 9-pin male on display, D-sub 9-pin on host. Only pins 2 (RD), 3 (TD), 5 (GND) carry signal; remaining pins NC. Cross-over (null-modem) wiring required.
  • Source note: "Value range for direct command is same as user can change by menu." → numeric Direct/UpDown byte ranges (Picture, Brightness, Color, etc.) not enumerated in this source.

Provenance

source_domains:
  - hf-files-oregon.s3.amazonaws.com
  - support.justaddpower.com
  - pro-bravia.sony.net
  - manualslib.com
source_urls:
  - https://hf-files-oregon.s3.amazonaws.com/hdpjustaddpower_kb_attachments/2016/04-20/ab25a088-38d8-41a8-a136-fabda0005a1e/RS232_XBR5_protocol.pdf
  - https://support.justaddpower.com/kb/article/22-sony-rs232-control/
  - https://pro-bravia.sony.net/remote-display-control/serial-control/
  - https://pro-bravia.sony.net/remote-display-control/
  - https://www.manualslib.com/manual/321046/Sony-Bravia-Kdl-40xbr5.html
retrieved_at: 2026-06-11T23:49:10.943Z
last_checked_at: 2026-06-12T19:45:00.990Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:45:00.990Z
matched_actions: 91
action_count: 91
confidence: medium
summary: "All 91 spec actions matched exactly to function codes 0x00-0x46 in the source table; transport parameters verified; source is truncated but fully represented. (4 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is partial (truncated mid-table after Screen/Wide / 4:3 Mode entries). Several command categories in the official Sony manual not captured here."
- "source does not enumerate settable numeric ranges for Direct/UpDown parameters"
- "source does not document unsolicited notifications from the display."
- "source does not document multi-step sequences."

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