Summary

Simple IP control protocol for Sony BRAVIA displays (2014 models, including the KDX755 Series) over TCP. 24-byte fixed-size messages carry Four-CC function codes for power, volume, mute, channel, input, picture-mute, PIP, and IR-emulation commands. Source: "Sony Simple IP Control Protocol for BRAVIA" v0.6.

Transport

protocols:
  - tcp
addressing:
  port: 20060
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable       # inferred from setPowerStatus / getPowerStatus commands
- levelable       # inferred from setAudioVolume / getAudioVolume commands
- routable        # inferred from setInput / setInputSource commands
- queryable       # inferred from getPowerStatus, getAudioVolume, etc.

Actions

# Frame format: 24 bytes total
#   [0..1]  Header  = 0x2A 0x53  (fixed, "*S")
#   [2]     Type    = 0x43 'C' | 0x45 'E' | 0x41 'A' | 0x4E 'N'
#   [3..6]  Function = 4 ASCII bytes (Four-CC)
#   [7..22] Parameter = 16 bytes (each byte is an ASCII hex digit "0"-"9")
#   [23]    Footer  = 0x0A (LF)
#
# command: strings below show the literal 24-byte payload (hex-escaped) with
# the Four-CC function and parameter bytes copied verbatim from the source.
# A trailing LF (0x0A) and the leading 0x2A 0x53 header are part of every frame.

# --- IR (setIrccCode) ---------------------------------------------------------
# Single IRCC command; parameter byte values per Table 5.
- id: ircc_power_off
  label: IR Power Off
  kind: action
  command: "*SCIRCC0000000000000000\n"
  params: []
- id: ircc_input
  label: IR Input
  kind: action
  command: "*SCIRCC0000000000000001\n"
  params: []
- id: ircc_gguide
  label: IR GGuide
  kind: action
  command: "*SCIRCC0000000000000002\n"
  params: []
- id: ircc_epg
  label: IR EPG
  kind: action
  command: "*SCIRCC0000000000000003\n"
  params: []
- id: ircc_favorites
  label: IR Favorites
  kind: action
  command: "*SCIRCC0000000000000004\n"
  params: []
- id: ircc_display
  label: IR Display
  kind: action
  command: "*SCIRCC0000000000000005\n"
  params: []
- id: ircc_home
  label: IR Home
  kind: action
  command: "*SCIRCC0000000000000006\n"
  params: []
- id: ircc_options
  label: IR Options
  kind: action
  command: "*SCIRCC0000000000000007\n"
  params: []
- id: ircc_return
  label: IR Return
  kind: action
  command: "*SCIRCC0000000000000008\n"
  params: []
- id: ircc_up
  label: IR Up
  kind: action
  command: "*SCIRCC0000000000000009\n"
  params: []
- id: ircc_down
  label: IR Down
  kind: action
  command: "*SCIRCC0000000000000010\n"
  params: []
- id: ircc_right
  label: IR Right
  kind: action
  command: "*SCIRCC0000000000000011\n"
  params: []
- id: ircc_left
  label: IR Left
  kind: action
  command: "*SCIRCC0000000000000012\n"
  params: []
- id: ircc_confirm
  label: IR Confirm
  kind: action
  command: "*SCIRCC0000000000000013\n"
  params: []
- id: ircc_red
  label: IR Red
  kind: action
  command: "*SCIRCC0000000000000014\n"
  params: []
- id: ircc_green
  label: IR Green
  kind: action
  command: "*SCIRCC0000000000000015\n"
  params: []
- id: ircc_yellow
  label: IR Yellow
  kind: action
  command: "*SCIRCC0000000000000016\n"
  params: []
- id: ircc_blue
  label: IR Blue
  kind: action
  command: "*SCIRCC0000000000000017\n"
  params: []
- id: ircc_num1
  label: IR Num1
  kind: action
  command: "*SCIRCC0000000000000018\n"
  params: []
- id: ircc_num2
  label: IR Num2
  kind: action
  command: "*SCIRCC0000000000000019\n"
  params: []
- id: ircc_num3
  label: IR Num3
  kind: action
  command: "*SCIRCC0000000000000020\n"
  params: []
- id: ircc_num4
  label: IR Num4
  kind: action
  command: "*SCIRCC0000000000000021\n"
  params: []
- id: ircc_num5
  label: IR Num5
  kind: action
  command: "*SCIRCC0000000000000022\n"
  params: []
- id: ircc_num6
  label: IR Num6
  kind: action
  command: "*SCIRCC0000000000000023\n"
  params: []
- id: ircc_num7
  label: IR Num7
  kind: action
  command: "*SCIRCC0000000000000024\n"
  params: []
- id: ircc_num8
  label: IR Num8
  kind: action
  command: "*SCIRCC0000000000000025\n"
  params: []
- id: ircc_num9
  label: IR Num9
  kind: action
  command: "*SCIRCC0000000000000026\n"
  params: []
- id: ircc_num0
  label: IR Num0
  kind: action
  command: "*SCIRCC0000000000000027\n"
  params: []
- id: ircc_num11
  label: IR Num11
  kind: action
  command: "*SCIRCC0000000000000028\n"
  params: []
- id: ircc_num12
  label: IR Num12
  kind: action
  command: "*SCIRCC0000000000000029\n"
  params: []
- id: ircc_volume_up
  label: IR Volume Up
  kind: action
  command: "*SCIRCC0000000000000030\n"
  params: []
- id: ircc_volume_down
  label: IR Volume Down
  kind: action
  command: "*SCIRCC0000000000000031\n"
  params: []
- id: ircc_mute
  label: IR Mute
  kind: action
  command: "*SCIRCC0000000000000032\n"
  params: []
- id: ircc_channel_up
  label: IR Channel Up
  kind: action
  command: "*SCIRCC0000000000000033\n"
  params: []
- id: ircc_channel_down
  label: IR Channel Down
  kind: action
  command: "*SCIRCC0000000000000034\n"
  params: []
- id: ircc_subtitle
  label: IR Subtitle
  kind: action
  command: "*SCIRCC0000000000000035\n"
  params: []
- id: ircc_closed_caption
  label: IR Closed Caption
  kind: action
  command: "*SCIRCC0000000000000036\n"
  params: []
- id: ircc_enter
  label: IR Enter
  kind: action
  command: "*SCIRCC0000000000000037\n"
  params: []
- id: ircc_dot
  label: IR DOT
  kind: action
  command: "*SCIRCC0000000000000038\n"
  params: []
- id: ircc_analog
  label: IR Analog
  kind: action
  command: "*SCIRCC0000000000000039\n"
  params: []
- id: ircc_teletext
  label: IR Teletext
  kind: action
  command: "*SCIRCC0000000000000040\n"
  params: []
- id: ircc_exit
  label: IR Exit
  kind: action
  command: "*SCIRCC0000000000000041\n"
  params: []
- id: ircc_analog2
  label: IR Analog2
  kind: action
  command: "*SCIRCC0000000000000042\n"
  params: []
- id: ircc_ad
  label: IR *AD
  kind: action
  command: "*SCIRCC0000000000000043\n"
  params: []
- id: ircc_digital
  label: IR Digital
  kind: action
  command: "*SCIRCC0000000000000044\n"
  params: []
- id: ircc_analog_q
  label: IR Analog?
  kind: action
  command: "*SCIRCC0000000000000045\n"
  params: []
- id: ircc_bs
  label: IR BS
  kind: action
  command: "*SCIRCC0000000000000046\n"
  params: []
- id: ircc_cs
  label: IR CS
  kind: action
  command: "*SCIRCC0000000000000047\n"
  params: []
- id: ircc_bs_cs
  label: IR BS/CS
  kind: action
  command: "*SCIRCC0000000000000048\n"
  params: []
- id: ircc_ddata
  label: IR Ddata
  kind: action
  command: "*SCIRCC0000000000000049\n"
  params: []
- id: ircc_pic_off
  label: IR Pic Off
  kind: action
  command: "*SCIRCC0000000000000050\n"
  params: []
- id: ircc_tv_radio
  label: IR Tv_Radio
  kind: action
  command: "*SCIRCC0000000000000051\n"
  params: []
- id: ircc_theater
  label: IR Theater
  kind: action
  command: "*SCIRCC0000000000000052\n"
  params: []
- id: ircc_sen
  label: IR SEN
  kind: action
  command: "*SCIRCC0000000000000053\n"
  params: []
- id: ircc_internet_widgets
  label: IR Internet Widgets
  kind: action
  command: "*SCIRCC0000000000000054\n"
  params: []
- id: ircc_internet_video
  label: IR Internet Video
  kind: action
  command: "*SCIRCC0000000000000055\n"
  params: []
- id: ircc_netflix
  label: IR Netflix
  kind: action
  command: "*SCIRCC0000000000000056\n"
  params: []
- id: ircc_scene_select
  label: IR Scene Select
  kind: action
  command: "*SCIRCC0000000000000057\n"
  params: []
- id: ircc_mode3d
  label: IR Mode3D
  kind: action
  command: "*SCIRCC0000000000000058\n"
  params: []
- id: ircc_imanual
  label: IR iManual
  kind: action
  command: "*SCIRCC0000000000000059\n"
  params: []
- id: ircc_audio
  label: IR Audio
  kind: action
  command: "*SCIRCC0000000000000060\n"
  params: []
- id: ircc_wide
  label: IR Wide
  kind: action
  command: "*SCIRCC0000000000000061\n"
  params: []
- id: ircc_jump
  label: IR Jump
  kind: action
  command: "*SCIRCC0000000000000062\n"
  params: []
- id: ircc_pap
  label: IR PAP
  kind: action
  command: "*SCIRCC0000000000000063\n"
  params: []
- id: ircc_myepg
  label: IR MyEPG
  kind: action
  command: "*SCIRCC0000000000000064\n"
  params: []
- id: ircc_program_description
  label: IR Program Description
  kind: action
  command: "*SCIRCC0000000000000065\n"
  params: []
- id: ircc_write_chapter
  label: IR Write Chapter
  kind: action
  command: "*SCIRCC0000000000000066\n"
  params: []
- id: ircc_trackid
  label: IR TrackID
  kind: action
  command: "*SCIRCC0000000000000067\n"
  params: []
- id: ircc_ten_key
  label: IR Ten Key
  kind: action
  command: "*SCIRCC0000000000000068\n"
  params: []
- id: ircc_applicast
  label: IR AppliCast
  kind: action
  command: "*SCIRCC0000000000000069\n"
  params: []
- id: ircc_activila
  label: IR acTVila
  kind: action
  command: "*SCIRCC0000000000000070\n"
  params: []
- id: ircc_delete_video
  label: IR Delete Video
  kind: action
  command: "*SCIRCC0000000000000071\n"
  params: []
- id: ircc_photo_frame
  label: IR Photo Frame
  kind: action
  command: "*SCIRCC0000000000000072\n"
  params: []
- id: ircc_tv_pause
  label: IR TV Pause
  kind: action
  command: "*SCIRCC0000000000000073\n"
  params: []
- id: ircc_keypad
  label: IR KeyPad
  kind: action
  command: "*SCIRCC0000000000000074\n"
  params: []
- id: ircc_media
  label: IR Media
  kind: action
  command: "*SCIRCC0000000000000075\n"
  params: []
- id: ircc_sync_menu
  label: IR Sync Menu
  kind: action
  command: "*SCIRCC0000000000000076\n"
  params: []
- id: ircc_forward
  label: IR Forward
  kind: action
  command: "*SCIRCC0000000000000077\n"
  params: []
- id: ircc_play
  label: IR Play
  kind: action
  command: "*SCIRCC0000000000000078\n"
  params: []
- id: ircc_rewind
  label: IR Rewind
  kind: action
  command: "*SCIRCC0000000000000079\n"
  params: []
- id: ircc_prev
  label: IR Prev
  kind: action
  command: "*SCIRCC0000000000000080\n"
  params: []
- id: ircc_stop
  label: IR Stop
  kind: action
  command: "*SCIRCC0000000000000081\n"
  params: []
- id: ircc_next
  label: IR Next
  kind: action
  command: "*SCIRCC0000000000000082\n"
  params: []
- id: ircc_rec
  label: IR Rec
  kind: action
  command: "*SCIRCC0000000000000083\n"
  params: []
- id: ircc_pause
  label: IR Pause
  kind: action
  command: "*SCIRCC0000000000000084\n"
  params: []
- id: ircc_eject
  label: IR Eject
  kind: action
  command: "*SCIRCC0000000000000085\n"
  params: []
- id: ircc_flash_plus
  label: IR Flash Plus
  kind: action
  command: "*SCIRCC0000000000000086\n"
  params: []
- id: ircc_flash_minus
  label: IR Flash Minus
  kind: action
  command: "*SCIRCC0000000000000087\n"
  params: []
- id: ircc_topmenu
  label: IR TopMenu
  kind: action
  command: "*SCIRCC0000000000000088\n"
  params: []
- id: ircc_popupmenu
  label: IR PopupMenu
  kind: action
  command: "*SCIRCC0000000000000089\n"
  params: []
- id: ircc_rakuraku_start
  label: IR Rakuraku Start
  kind: action
  command: "*SCIRCC0000000000000090\n"
  params: []
- id: ircc_one_touch_time_rec
  label: IR One Touch Time Rec
  kind: action
  command: "*SCIRCC0000000000000091\n"
  params: []
- id: ircc_one_touch_view
  label: IR One Touch View
  kind: action
  command: "*SCIRCC0000000000000092\n"
  params: []
- id: ircc_one_touch_rec
  label: IR One Touch Rec
  kind: action
  command: "*SCIRCC0000000000000093\n"
  params: []
- id: ircc_one_touch_stop
  label: IR One Touch Stop
  kind: action
  command: "*SCIRCC0000000000000094\n"
  params: []
- id: ircc_dux
  label: IR DUX
  kind: action
  command: "*SCIRCC0000000000000095\n"
  params: []
- id: ircc_football_mode
  label: IR Football Mode
  kind: action
  command: "*SCIRCC0000000000000096\n"
  params: []
- id: ircc_social
  label: IR Social
  kind: action
  command: "*SCIRCC0000000000000097\n"
  params: []

# --- Power (POWR) ------------------------------------------------------------
- id: set_power_status
  label: Set Power Status
  kind: action
  command: "*SCPOWR0000000000000000\n"  # 0 = Standby (Off); last byte 1 = Active (On)
  params:
    - name: state
      type: integer
      description: 0 = Standby (Off), 1 = Active (On)
- id: get_power_status
  label: Get Power Status
  kind: query
  command: "*SEPOWR################\n"
  params: []

# --- Volume (VOLU) ------------------------------------------------------------
- id: set_audio_volume
  label: Set Audio Volume
  kind: action
  command: "*SCVOLU000000000000XXXX\n"  # parameter bytes = decimal volume zero-padded left, e.g. 41 = "0000000000000029"
  params:
    - name: level
      type: integer
      description: Volume value (decimal, written into 16 parameter bytes as ASCII digits, right-aligned, left-padded with "0")
- id: get_audio_volume
  label: Get Audio Volume
  kind: query
  command: "*SEVOLU################\n"
  params: []

# --- Mute (AMUT) --------------------------------------------------------------
- id: set_audio_mute
  label: Set Audio Mute
  kind: action
  command: "*SCAMUT000000000000000X\n"  # last byte 0 = Unmute, 1 = Mute
  params:
    - name: state
      type: integer
      description: 0 = Unmute, 1 = Mute
- id: get_audio_mute
  label: Get Audio Mute
  kind: query
  command: "*SEAMUT################\n"
  params: []

# --- Channel preset (CHNN) ----------------------------------------------------
- id: set_channel
  label: Set Channel (preset)
  kind: action
  command: "*SCCHNNXXXXXXXX.XXXXXXX\n"  # e.g. "00000050.1000000" = channel 50.1; "00000006.0000000" = channel 6
  params:
    - name: channel
      type: string
      description: Preset channel as "XXXXXXXX.XXXXXXX" (16 ASCII digit bytes, "." in byte 8)
- id: get_channel
  label: Get Channel (preset)
  kind: query
  command: "*SECHNN################\n"
  params: []

# --- Channel triplet (TCHN) ---------------------------------------------------
- id: set_triplet_channel
  label: Set Channel (triplet)
  kind: action
  command: "*SCTCHNXXXXXXXXXXXX####\n"  # last 4 bytes of parameter reserved; e.g. "7FE07FE00400" = 32736.32736.1024
  params:
    - name: triplet
      type: string
      description: 12 hex digits for the triplet (16 param bytes; bytes 0-7 = main, 8-11 = sub, 12-15 reserved "#")
- id: get_triplet_channel
  label: Get Channel (triplet)
  kind: query
  command: "*SETCHN################\n"
  params: []

# --- Input source label (ISRC) ------------------------------------------------
- id: set_input_source
  label: Set Input Source
  kind: action
  command: "*SCISRCXXXXXXXXXXXXXXXX\n"  # right-padded with "#"; e.g. "dvbt############"
  params:
    - name: source
      type: string
      description: One of dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt (right-padded with "#" to 16 bytes)
- id: get_input_source
  label: Get Input Source
  kind: query
  command: "*SEISRC################\n"
  params: []

# --- Input (INPT) -------------------------------------------------------------
- id: set_input
  label: Set Input
  kind: action
  command: "*SCINPT0000000000XXXXXX\n"  # byte 8 = kind (0=TV, 1=HDMI, 2=SCART, 3=Composite, 4=Component, 5=Screen Mirroring, 6=PC RGB); bytes 12-15 = number 1-9999
  params:
    - name: kind
      type: integer
      description: Input kind (0=TV, 1=HDMI, 2=SCART, 3=Composite, 4=Component, 5=Screen Mirroring, 6=PC RGB)
    - name: number
      type: integer
      description: Input number 1-9999 (0 when kind=TV)
- id: get_input
  label: Get Input
  kind: query
  command: "*SEINPT################\n"
  params: []

# --- Picture mute (PMUT) ------------------------------------------------------
- id: set_picture_mute
  label: Set Picture Mute
  kind: action
  command: "*SCPMUT000000000000000X\n"  # last byte 0 = Disable, 1 = Enable
  params:
    - name: state
      type: integer
      description: 0 = Disable, 1 = Enable
- id: get_picture_mute
  label: Get Picture Mute
  kind: query
  command: "*SEPMUT################\n"
  params: []
- id: toggle_picture_mute
  label: Toggle Picture Mute
  kind: action
  command: "*SCTPMU################\n"
  params: []

# --- PIP (PIPI) ---------------------------------------------------------------
- id: set_pip
  label: Set PIP
  kind: action
  command: "*SCPIPI000000000000000X\n"  # last byte 0 = Disable, 1 = Enable
  params:
    - name: state
      type: integer
      description: 0 = Disable, 1 = Enable
- id: get_pip
  label: Get PIP
  kind: query
  command: "*SEPIPI################\n"
  params: []
- id: toggle_pip
  label: Toggle PIP
  kind: action
  command: "*SCTPIP################\n"
  params: []
- id: toggle_pip_position
  label: Toggle PIP Position
  kind: action
  command: "*SCTPPP################\n"
  params: []

# --- Network info (BADR / MADR) -----------------------------------------------
- id: get_broadcast_address
  label: Get Broadcast Address
  kind: query
  command: "*SEBADReth0###########\n"  # parameter 0-3 = "eth0", padded to 16 with "#"
  params: []
- id: get_mac_address
  label: Get MAC Address
  kind: query
  command: "*SEMADReth0###########\n"  # parameter 0-3 = "eth0", padded to 16 with "#"
  params: []

Feedbacks

# All feedback is carried in 24-byte Answer (0x41) frames with the same
# Four-CC as the originating Control/Enquiry and an "0000000000000000" body
# (success) or "FFFFFFFFFFFFFFFF" body (error). Bodies are decoded per command.
- id: power_state
  type: enum
  values: [standby, active]
- id: audio_mute_state
  type: enum
  values: [not_muted, muted]
- id: picture_mute_state
  type: enum
  values: [disabled, enabled]
- id: pip_state
  type: enum
  values: [disabled, enabled]
- id: audio_volume
  type: integer
  description: Decimal volume, right-aligned ASCII digits in 16 parameter bytes
- id: channel_preset
  type: string
  description: Preset channel "XXXXXXXX.XXXXXXX"
- id: channel_triplet
  type: string
  description: 12 hex digits
- id: input_source_label
  type: string
  description: One of dvbt, dvbc, dvbs, isdbt, isdbbs, isdbcs, antenna, cable, isdbgt
- id: input_kind
  type: enum
  values: [tv, hdmi, scart, composite, component, screen_mirroring, pc_rgb]
- id: broadcast_address
  type: string
- id: mac_address
  type: string
- id: control_result
  type: enum
  values: [success, error]
- id: channel_error
  type: string
  description: "FFFFFFFFFFFFFFFF" error body for setChannel/setTripletChannel (no such channel)
- id: input_error
  type: string
  description: "FFFFFFFFFFFFFFFF" error body for setInput (Not Found)
- id: source_error
  type: string
  description: "FFFFFFFFFFFFFFFF" error body for setInputSource (no such source / not tuned / no signal)

Variables

# No discrete settable parameters beyond the command parameters above.
# UNRESOLVED: no separate variable table in source.

Events

# Notify (0x4E) messages the TV sends unsolicited. Same 24-byte frame.
- id: fire_power_change
  type: enum
  values: [standby, active]
  notes: FourCC "POWR"; last parameter byte 0=powering off, 1=powering on
- id: fire_channel_change
  type: string
  notes: FourCC "CHNN"; "XXXXXXXX.XXXXXXX" preset
- id: fire_input_change
  type: enum
  values: [tv, hdmi, scart, composite, component, screen_mirroring, pc_rgb]
  notes: FourCC "INPT"; same body encoding as setInput Answer
- id: fire_volume_change
  type: integer
  notes: FourCC "VOLU"
- id: fire_mute_change
  type: enum
  values: [not_muted, muted]
  notes: FourCC "AMUT"; last byte 0=unmuting, 1=muting
- id: fire_pip_change
  type: enum
  values: [disabled, enabled]
  notes: FourCC "PIPI"; last byte 0=disabled, 1=enabled
- id: fire_picture_mute_change
  type: enum
  values: [disabled, enabled]
  notes: FourCC "PMUT"; last byte 0=disabled, 1=enabled

Macros

# UNRESOLVED: no multi-step sequences described in source.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlocks, or power-on sequencing requirements.

Notes

  • Every TCP frame is exactly 24 bytes: 0x2A 0x53 header, 1-byte type (C/E/A/N), 4-byte Four-CC function, 16-byte parameter (each byte is one ASCII hex digit or ASCII alphanumeric), 0x0A footer.
  • Server listens on TCP port 20060; idle connections dropped by server after 30 s with no command from client.
  • "Simple IP Control" must be enabled in TV settings: Network > Home Network Setup > IP Control > Simple IP Control (Normal Mode) or Hotel/Pro Mode > IP Control > Simple IP Control.
  • "Low Level Protocol is designed as a protocol bridge to High Level Protocol" — same commands are reachable via JSON-RPC over HTTP (WebAPI); this spec covers only the Low Level TCP frame format.
  • Source doc identifies coverage as "BRAVIA 2014 models"; KDX755-Series-specific confirmation not stated in the source.

Provenance

source_domains:
  - aca.im
  - raw.githubusercontent.com
  - pro.sony
source_urls:
  - "https://aca.im/driver_docs/Sony/sony%20bravia%20simple%20ip%20control.pdf"
  - https://raw.githubusercontent.com/xiaolaba/bravia_console_sony/master/Sony_Simple_IP_Control_Protocol_for_BRAVIA.pdf
  - https://pro.sony/
retrieved_at: 2026-06-12T10:33:25.229Z
last_checked_at: 2026-06-12T19:48:44.311Z

Verification Summary

verdict: verified
checked_at: 2026-06-12T19:48:44.311Z
matched_actions: 121
action_count: 121
confidence: medium
summary: "All 121 spec actions confirmed in source with correct Four-CC codes and IR parameter values; transport port 20060 and TCP protocol verified; all 7 notify events represented in spec Events section. (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "KDX755-specific model coverage not explicitly stated in source — protocol described as \"BRAVIA 2014 models\". Firmware range not stated."
- "no separate variable table in source."
- "no multi-step sequences described in source."
- "source contains no safety warnings, interlocks, or power-on sequencing requirements."
- "firmware version compatibility not stated in source."
- "KDX755-Series-specific model coverage not confirmed in source (described as \"BRAVIA 2014 models\")."

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