Summary

RS-232C control protocol for LG commercial displays in the 49UJ series. Source document is the LG commercial display serial protocol reference; the 49UJ series is one product family that uses this protocol. All commands are ASCII over a UART link using a 9600-8-N-1 frame with no flow control.

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 ka (Power) command
- routable        # inferred from kb (Input Select) command
- queryable       # inferred from FF-data read mode described in source
- levelable       # inferred from kf (Volume), kg (Contrast), kh (Brightness), etc.

Actions

- id: power_set
  label: Power
  kind: action
  command: "ka {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
      description: Set ID (0 = broadcast to all displays, 1-99 for specific unit)
    - name: data
      type: integer
      enum: [0, 1]
      description: "00H = Power Off, 01H = Power On"

- id: power_status
  label: Power Status
  kind: query
  command: "ka {set_id} FF\r"
  params:
    - name: set_id
      type: integer
      description: Set ID (1-99; 0 not allowed for read)

- id: input_select_set
  label: Input Select
  kind: action
  command: "kb {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [2, 4, 5, 6, 7, 8, 9]
      description: "02H=AV, 04H=Component1, 05H=Component2, 06H=RGB(DTV), 07H=RGB(PC), 08H=HDMI(DTV), 09H=HDMI(PC)"

- id: input_select_status
  label: Input Select Status
  kind: query
  command: "kb {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: aspect_ratio_set
  label: Aspect Ratio
  kind: action
  command: "kc {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [1, 2, 3, 4, 5, 6, 7, 8, 9]
      description: "01H=Normal(4:3), 02H=Wide(16:9), 03H=Horizon, 04H=Zoom1, 05H=Zoom2, 06H=Original, 07H=14:9, 08H=Full(Europe), 09H=1:1(PC)"

- id: aspect_ratio_status
  label: Aspect Ratio Status
  kind: query
  command: "kc {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: screen_mute_set
  label: Screen Mute
  kind: action
  command: "kd {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [0, 1]
      description: "00H=Screen mute off (picture on), 01H=Screen mute on (picture off)"

- id: screen_mute_status
  label: Screen Mute Status
  kind: query
  command: "kd {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: volume_mute_set
  label: Volume Mute
  kind: action
  command: "ke {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [0, 1]
      description: "00H=Volume Mute On (Volume Off), 01H=Volume Mute Off (Volume On)"

- id: volume_mute_status
  label: Volume Mute Status
  kind: query
  command: "ke {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: volume_control_set
  label: Volume Control
  kind: action
  command: "kf {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Real data mapping: 0=Step 0, A=Step 10, F=Step 15, 10=Step 16, 64=Step 100"

- id: volume_control_status
  label: Volume Control Status
  kind: query
  command: "kf {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: contrast_set
  label: Contrast
  kind: action
  command: "kg {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Real data mapping as for Volume Control."

- id: contrast_status
  label: Contrast Status
  kind: query
  command: "kg {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: brightness_set
  label: Brightness
  kind: action
  command: "kh {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Real data mapping as for Volume Control."

- id: brightness_status
  label: Brightness Status
  kind: query
  command: "kh {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: color_set
  label: Color
  kind: action
  command: "ki {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Video only. Real data mapping as for Volume Control."

- id: color_status
  label: Color Status
  kind: query
  command: "ki {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: tint_set
  label: Tint
  kind: action
  command: "kj {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H=Red, 64H=Green. Video only. Real data mapping: 0=Step -50, 64=Step 50."

- id: tint_status
  label: Tint Status
  kind: query
  command: "kj {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: sharpness_set
  label: Sharpness
  kind: action
  command: "kk {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Video only. Real data mapping as for Volume Control."

- id: sharpness_status
  label: Sharpness Status
  kind: query
  command: "kk {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: osd_select_set
  label: OSD Select
  kind: action
  command: "kl {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [0, 1]
      description: "00H=OSD Off, 01H=OSD On"

- id: osd_select_status
  label: OSD Select Status
  kind: query
  command: "kl {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: remote_lock_set
  label: Remote Lock / Key Lock
  kind: action
  command: "km {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [0, 1]
      description: "00H=Off, 01H=On. When controlled via RS-232C, locks the remote control and the local keys."

- id: remote_lock_status
  label: Remote Lock Status
  kind: query
  command: "km {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: balance_set
  label: Balance
  kind: action
  command: "kt {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H. Real mapping L50 to R50."

- id: balance_status
  label: Balance Status
  kind: query
  command: "kt {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: color_temperature_set
  label: Color Temperature
  kind: action
  command: "ku {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [0, 1, 2, 3]
      description: "00H=Normal, 01H=Cool, 02H=Warm, 03H=User"

- id: color_temperature_status
  label: Color Temperature Status
  kind: query
  command: "ku {set_id} FF\r"
  params:
    - name: set_id
      type: integer

- id: abnormal_state
  label: Abnormal State
  kind: query
  command: "kz {set_id} FF\r"
  params:
    - name: set_id
      type: integer
  description: Read power-off status during Stand-by mode. Response data 00H=Normal, 01H=No signal, 02H=Off by remote, 03H=Off by sleep timer, 04H=Off by RS-232C, 06H=AC down, 08H=Off by off-timer, 09H=Off by auto-off.

- id: ism_mode_set
  label: ISM Mode
  kind: action
  command: "jp {set_id} {data}\r"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      enum: [1, 2, 4, 8]
      description: "01H=Inversion, 02H=Orbiter, 04H=White Wash, 08H=Normal. Afterimage-prevention function."

- id: auto_configure
  label: Auto Configure
  kind: action
  command: "ju {set_id} 01\r"
  params:
    - name: set_id
      type: integer
  description: Adjust picture position and minimize image shaking automatically. Operates only in RGB(PC) mode. Data is fixed at 01H.

- id: key
  label: Key (IR Remote Code Send)
  kind: action
  command: "mc {set_id} {key_code}\r"
  params:
    - name: set_id
      type: integer
    - name: key_code
      type: string
      description: IR remote key code. See the IR Codes table; source directs operator to "page A18" of the vendor manual for the full list.

- id: tile_mode_set
  label: Tile Mode
  kind: action
  command: "dd {set_id} {data}x"
  params:
    - name: set_id
      type: integer
    - name: data
      type: string
      description: "00H=Tile off, 12H=1x2, 13H=1x3, 14H=1x4, ... 44H=4x4. The data cannot be set to 0X or X0 except 00. Source uses literal 'x' suffix (not Cr) for the 'd' command family."

- id: tile_h_size_set
  label: Tile Horizontal Size
  kind: action
  command: "dg {set_id} {data}x"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H."

- id: tile_v_size_set
  label: Tile Vertical Size
  kind: action
  command: "dh {set_id} {data}x"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 100
      description: "00H-64H."

- id: tile_id_set
  label: Tile ID Set
  kind: action
  command: "di {set_id} {data}x"
  params:
    - name: set_id
      type: integer
    - name: data
      type: integer
      min: 0
      max: 16
      description: "00H-10H. Assigns the Tile ID used for the tiling function."

- id: elapsed_time
  label: Elapsed Time Return
  kind: query
  command: "dl {set_id} FFx"
  params:
    - name: set_id
      type: integer
  description: Read used hours. Data always FF on send; response is one byte of used hours in hexadecimal.

- id: temperature_value
  label: Temperature Value
  kind: query
  command: "dn {set_id} FFx"
  params:
    - name: set_id
      type: integer
  description: Read inside temperature. Data always FF on send; response is one byte in hexadecimal.

- id: lamp_fault_check
  label: Lamp Fault Check
  kind: query
  command: "dp {set_id} FFx"
  params:
    - name: set_id
      type: integer
  description: Check lamp fault. Data always FF on send; response: 00H=Lamp Fault, 01H=Lamp OK.

Feedbacks

- id: power_state
  type: enum
  values: [off, on]

- id: input_state
  type: enum
  values: [av, component_1, component_2, rgb_dtv, rgb_pc, hdmi_dtv, hdmi_pc]

- id: aspect_ratio_state
  type: enum
  values: [normal_4_3, wide_16_9, horizon, zoom1, zoom2, original, ratio_14_9, full_europe, one_to_one_pc]

- id: screen_mute_state
  type: enum
  values: [picture_on, picture_off]

- id: volume_mute_state
  type: enum
  values: [mute_on, mute_off]

- id: volume_level
  type: integer
  range: [0, 100]
  description: 0=Step 0, 100=Step 100 (mapped from 00H-64H)

- id: contrast_level
  type: integer
  range: [0, 100]

- id: brightness_level
  type: integer
  range: [0, 100]

- id: color_level
  type: integer
  range: [0, 100]

- id: tint_level
  type: integer
  range: [-50, 50]
  description: 00H=-50 (red), 64H=+50 (green)

- id: sharpness_level
  type: integer
  range: [0, 100]

- id: osd_state
  type: enum
  values: [off, on]

- id: remote_lock_state
  type: enum
  values: [off, on]

- id: balance_level
  type: integer
  range: [-50, 50]
  description: 00H=L50, 64H=R50

- id: color_temperature_state
  type: enum
  values: [normal, cool, warm, user]

- id: abnormal_state_reason
  type: enum
  values: [normal, no_signal, off_by_remote, off_by_sleep_timer, off_by_rs232, ac_down, off_by_off_timer, off_by_auto_off]

- id: elapsed_hours
  type: integer
  description: Used hours, hexadecimal byte returned by the display

- id: internal_temperature
  type: integer
  description: One-byte hexadecimal temperature reading returned by the display

- id: lamp_fault_state
  type: enum
  values: [fault, ok]

Variables

# Source describes all settable parameters as discrete command actions above; no
# standalone variable space is exposed in the protocol.

Events

# Source describes no unsolicited notifications.

Macros

# Source describes no multi-step sequences.

Safety

confirmation_required_for: []
interlocks: []
# Source contains no explicit safety warnings, interlock procedures, or
# power-on sequencing requirements. The "Abnormal State" feedback (kz) enumerates
# reasons the display may have powered itself off (AC down, off-by-remote, etc.)
# but does not document a recovery procedure.

Notes

All command/response strings use ASCII. The command terminator is carriage return (0x0D) for the k/j/m command families, and a literal x character (no Cr) for the d-family commands. Responses always terminate with a literal x. The Set ID byte in position 4 selects the target display; Set ID 0 broadcasts to all displays, in which case ACKs are not checked (every display responds).

Read mode for any set/read opcode is invoked by sending the same command with the data byte replaced by FF. Some set/read opcodes document this only implicitly (kb-kc-kd-ke-kf-kg-kh-ki-kj-kk-kl-km-kt-ku); only ka documents it as a separate "To show the status" command format.

The m c Key action accepts an IR remote key code, but the source directs the operator to a manual page (A18) for the full key-code table. Only a partial set of codes appears in the IR Codes table; the spec above documents the action but does not enumerate the key codes.

The d-family command format uses [Data][x] rather than [Data][Cr]. This is taken verbatim from the source, which consistently uses x (not Cr) for the d-family in both command and ACK format strings. Likely a documentation quirk; the spec preserves it as written.

Provenance

source_domains:
  - proaudioinc.com
source_urls:
  - https://www.proaudioinc.com/Dealer_Area/RS232C_EN_160526.pdf
retrieved_at: 2026-06-02T01:17:34.385Z
last_checked_at: 2026-06-02T17:22:55.190Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T17:22:55.190Z
matched_actions: 41
action_count: 41
confidence: medium
summary: "All 41 spec actions matched to source commands; transport parameters verified verbatim. (1 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source is a generic LG commercial display RS-232 protocol reference, not a 49UJ-specific document. The 49UJ is presumed to implement this protocol, but no explicit confirmation appears in the source."

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