Summary

RS-232 control protocol (Samsung "Multiple Display Control Protocol" v2.2, 2008-10-17) for daisy-chained Samsung SyncMaster large-format displays. Frame format 0xAA CMD ID DLEN DATA... CHK over 9600 bps, 8N1, no flow control. Each display gets a unique ID 0-99 and is addressed individually or via broadcast. This spec also covers the same protocol on SyncMaster 400TX(n), 570DX, 42TS/42PS, P50Hn, P50F(n), P63F(n), 320MX(n), 400CX(n), 400MX(n), 460CX(n), 460TX(n), 400UX(n), 460UX(n).

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

Frame structure (per Section 1.2):

Byte Field Notes
1 Header always 0xAA
2 Command opcode (see Actions)
3 ID 0x00-0x63 individual, 0xFE broadcast (no ACK), 0xFF = ID 0
4 Data Length number of data bytes that follow
5..N Data payload bytes
N+1 Checksum (CMD + ID + DLEN + sum(DATA)) mod 256. Header byte (0xAA) is NOT included.

Cable limit: 4 m between adjacent displays. 9-pin RS-232; only pins 2 (TxD), 3 (RxD), 5 (GND) are used.

Traits

- powerable       # inferred from power on/off commands (0x11)
- routable        # inferred from input source (0x14), video wall (0x4F/0x84/0x89) commands
- queryable       # inferred from numerous status query commands
- levelable       # inferred from volume (0x12), brightness/contrast/color/tint (0x24-0x28), bass/treble/balance (0x2C-0x2E) commands

Actions

# Frame template:
#   Get  (no data):  AA {cmd} {id} 00 {chk}
#   Set  (data N):   AA {cmd} {id} {dlen} {data} {chk}
# Checksum = (cmd + id + dlen + sum(data bytes)) mod 256, header 0xAA excluded.
# All command bytes below are from the source's Section 2 master table.
#
# UNRESOLVED: row 70 of the source table assigns Dynamic Contrast opcode 0x88,
# but Section 2.1 documents Dynamic Contrast as 0x87. Row 71 ("Safety Screen
# On") also shows 0x88, conflicting with the Section 2.1 opcode (0x59) used by
# Safety Screen Run. Both rows are preserved here using the Section 2.1 byte.

# --- 0x00 Status ---
- id: get_status
  label: Get Overall Status
  kind: query
  command: "AA 00 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID (0-99 sent as 0xFF, or 0xFE for broadcast)
  notes: |
    Response (0xAA 0xFF DLEN=9 'A' 0x00 [Power] [Volume] [Mute] [Input] [Aspect]
    [N Time NF] [F Time NF] {chk}) returns 7 values:
    Power (0/1), Volume (0-100), Mute (0/1), Input, Aspect, N Time NF (OnTime enable), F Time NF (OffTime enable).

# --- 0x01 Time ---
- id: get_time
  label: Get Time Status
  kind: query
  command: "AA 01 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_time
  label: Set Time
  kind: action
  command: "AA 01 {id} 05 {ap} {hour} {min} 00 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: ap
      type: enum
      values: [0, 1]
      description: AM/PM (1=AM, 0=PM)
    - name: hour
      type: integer
      range: [1, 12]
      description: Hour (1-12)
    - name: min
      type: integer
      range: [0, 59]
      description: Minute (0-59)

# --- 0x02 On Time ---
- id: get_on_time
  label: Get On-Time Status
  kind: query
  command: "AA 02 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_on_time
  label: Set On-Time
  kind: action
  command: "AA 02 {id} 06 {ap} {hour} {min} {volume} {enable} {source} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: ap
      type: enum
      values: [0, 1]
      description: AM/PM (1=AM, 0=PM)
    - name: hour
      type: integer
      range: [1, 12]
      description: Hour (1-12)
    - name: min
      type: integer
      range: [0, 59]
      description: Minute (0-59)
    - name: volume
      type: integer
      range: [0, 100]
      description: On-time volume (0-100)
    - name: enable
      type: enum
      values: [0, 1]
      description: 1=On Time ON, 0=On Time OFF
    - name: source
      type: integer
      description: Source code at On-Time (see 0x14 Input Source)

# --- 0x03 Off Time ---
- id: get_off_time
  label: Get Off-Time Status
  kind: query
  command: "AA 03 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_off_time
  label: Set Off-Time
  kind: action
  command: "AA 03 {id} 06 {ap} {hour} {min} 00 {enable} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: ap
      type: enum
      values: [0, 1]
      description: AM/PM (1=AM, 0=PM)
    - name: hour
      type: integer
      range: [1, 12]
      description: Hour (1-12)
    - name: min
      type: integer
      range: [0, 59]
      description: Minute (0-59)
    - name: enable
      type: enum
      values: [0, 1]
      description: 1=Off Time ON, 0=Off Time OFF

# --- 0x04 Video Control (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_video_status
  label: Get Video Status
  kind: query
  command: "AA 04 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Contrast, Brightness, Sharpness, Color, Tint, ColorTone (0-4),
    ColorTemp (0-10).

# --- 0x05 Audio Control ---
- id: get_audio_status
  label: Get Audio Status
  kind: query
  command: "AA 05 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Treble (0-100), Bass (0-100), Balance (0-100).

# --- 0x06 RGB Control (PC/BNC/DVI) ---
- id: get_rgb_status
  label: Get RGB Status
  kind: query
  command: "AA 06 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Contrast, Brightness, ColorTone, ColorTemp, Red Gain, Green Gain, Blue Gain.

# --- 0x08 Maintenance ---
- id: get_maintenance
  label: Get Maintenance Status
  kind: query
  command: "AA 08 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Power, P.Size, P.Source, LMax_H/M/AP, LMaxValue, LMin_H/M/AP,
    LMinValue, LampValue, ScreenInterval, ScreenTime, ScreenType, V.Wall,
    V.WallFormat, V.WallDivid, V.WallSet. If LMinValue = 0xFF, Auto Lamp is OFF.
    If LampValue = 0xFF, Manual Lamp is OFF.

# --- 0x0B Serial Number ---
- id: get_serial_number
  label: Get Serial Number
  kind: query
  command: "AA 0B {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: 14 data bytes (Data1-Data14) of serial number string.

# --- 0x0D Display Status ---
- id: get_display_status
  label: Get Display Status
  kind: query
  command: "AA 0D {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Lamp (0=Normal, 1=Error), Temperature (0/1), Bright_Sensor (0/1),
    No_Sync (0/1), Cur_Temp (°C), FAN (0/1).

# --- 0x0E Software Version ---
- id: get_software_version
  label: Get Software Version
  kind: query
  command: "AA 0E {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: 15 ASCII bytes; Version1-Version11 = Project Info, Version12-15 = SW version.

# --- 0x10 Model Number ---
- id: get_model_number
  label: Get Model Number
  kind: query
  command: "AA 10 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: |
    Response: Species (0x01=PDP, 0x02=LCD, 0x03=DLP), Model code, TV flag
    (0x00=not TV, 0x01=TV). Model codes include 0x15=SyncMaster 320DX/400DX(n)/
    460DX(n)/700DX(n)/820DX(n)/820DX, 0x18=42TS/42PS, 0x19=P50Hn, 0x1A=P50F/P50Fn,
    0x1B=P63F/P63Fn, 0x1C=320MX/320MXn, 0x1D=400CX/400CXn/400MX/400MXn,
    0x1E=400MX/400MXn, 0x20=460CX/460CXn/460MX/460MXn, 0x16=460TX(n),
    0x17=400UX(n)/460UX(n), 0x14=570DX.

# --- 0x11 Power ---
- id: get_power
  label: Get Power Status
  kind: query
  command: "AA 11 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_power
  label: Set Power
  kind: action
  command: "AA 11 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Power ON, 0=Power OFF

# --- 0x12 Volume ---
- id: get_volume
  label: Get Volume
  kind: query
  command: "AA 12 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_volume
  label: Set Volume
  kind: action
  command: "AA 12 {id} 01 {level} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: level
      type: integer
      range: [0, 100]
      description: Volume (0-100)

# --- 0x13 Mute ---
- id: get_mute
  label: Get Mute Status
  kind: query
  command: "AA 13 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_mute
  label: Set Mute
  kind: action
  command: "AA 13 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Mute ON, 0=Mute OFF

# --- 0x14 Input Source ---
- id: get_input_source
  label: Get Input Source
  kind: query
  command: "AA 14 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_input_source
  label: Set Input Source
  kind: action
  command: "AA 14 {id} 01 {input} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: input
      type: enum
      values: ["0x14", "0x1E", "0x18", "0x0C", "0x04", "0x08", "0x20", "0x1F", "0x30", "0x40", "0x21", "0x22"]
      description: |
        0x14=PC, 0x1E=BNC, 0x18=DVI, 0x0C=AV, 0x04=S-Video, 0x08=Component,
        0x20=MagicNet, 0x1F=DVI_VIDEO (Get Only), 0x30=RF(TV), 0x40=DTV,
        0x21=HDMI, 0x22=HDMI_PC (Get Only).

# --- 0x15 Image Size ---
- id: get_image_size
  label: Get Image Size
  kind: query
  command: "AA 15 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_image_size
  label: Set Image Size
  kind: action
  command: "AA 15 {id} 01 {aspect} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: aspect
      type: enum
      values: ["0x10", "0x18", "0x00", "0x01", "0x04", "0x05", "0x06", "0x09", "0x31", "0x0B", "0x0C"]
      description: |
        PC/BNC/DVI: 0x10=16:9, 0x18=4:3.
        AV/S-Video/Component: 0x00=Auto Wide, 0x01=16:9, 0x04=Zoom, 0x05=Zoom1,
        0x06=Zoom2, 0x09=Just Scan, 0x31=Wide Zoom, 0x0B=4:3, 0x0C=Wide Fit.

# --- 0x16 Direct Channel (DTV) ---
- id: get_channel
  label: Get Channel (DTV)
  kind: query
  command: "AA 17 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Source section "Get Channel" shows opcode 0x17; Set and Ack use 0x16.

- id: set_channel
  label: Set Channel (DTV)
  kind: action
  command: "AA 16 {id} 09 {country} {atv_dtv} {air_cable} {ch_num} {sel_minor} {minor_ch} 00 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: country
      type: integer
      description: Country code (0=Korea, 1=USA, ...)
    - name: atv_dtv
      type: enum
      values: [0, 1]
      description: 0=Analog TV, 1=Digital TV
    - name: air_cable
      type: enum
      values: [0, 1]
      description: 0=general, 1=cabled
    - name: ch_num
      type: integer
      description: Channel number (Analog: 1-135, Digital: 0-999)
    - name: sel_minor
      type: enum
      values: [0, 1]
      description: 0=minor not selected, 1=minor selected
    - name: minor_ch
      type: integer
      range: [0, 999]
      description: Minor channel number

# --- 0x18 Screen Mode ---
- id: get_screen_mode
  label: Get Screen Mode
  kind: query
  command: "AA 18 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_screen_mode
  label: Set Screen Mode
  kind: action
  command: "AA 18 {id} 01 {scrmode} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: scrmode
      type: enum
      values: ["0x01", "0x04", "0x31", "0x0B"]
      description: 0x01=16:9, 0x04=Zoom, 0x31=Wide Zoom, 0x0B=4:3

# --- 0x19 Screen Size ---
- id: get_screen_size
  label: Get Screen Size
  kind: query
  command: "AA 19 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Response: Screen size in inches (0-255).

# --- 0x1A Red Offset (PC/BNC, Signal Balance ON) ---
- id: get_red_offset
  label: Get Red Offset
  kind: query
  command: "AA 1A {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_red_offset
  label: Set Red Offset
  kind: action
  command: "AA 1A {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: R offset (0-100)

# --- 0x1B Green Offset (PC/BNC, Signal Balance ON) ---
- id: get_green_offset
  label: Get Green Offset
  kind: query
  command: "AA 1B {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_green_offset
  label: Set Green Offset
  kind: action
  command: "AA 1B {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: G offset (0-100)

# --- 0x1C Blue Offset (PC/BNC, Signal Balance ON) ---
- id: get_blue_offset
  label: Get Blue Offset
  kind: query
  command: "AA 1C {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_blue_offset
  label: Set Blue Offset
  kind: action
  command: "AA 1C {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: B offset (0-100)

# --- 0x24 Contrast (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_contrast
  label: Get Contrast
  kind: query
  command: "AA 24 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_contrast
  label: Set Contrast
  kind: action
  command: "AA 24 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Contrast (0-100)

# --- 0x25 Brightness (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_brightness
  label: Get Brightness
  kind: query
  command: "AA 25 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_brightness
  label: Set Brightness
  kind: action
  command: "AA 25 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Brightness (0-100)

# --- 0x26 Sharpness (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_sharpness
  label: Get Sharpness
  kind: query
  command: "AA 26 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_sharpness
  label: Set Sharpness
  kind: action
  command: "AA 26 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Sharpness (0, 2, 4, ... 100 - 50 steps only)

# --- 0x27 Color (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_color
  label: Get Color
  kind: query
  command: "AA 27 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_color
  label: Set Color
  kind: action
  command: "AA 27 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Color (0-100)

# --- 0x28 Tint (ATV/DTV/AV/S-Video/Component/HDMI, NTSC only) ---
- id: get_tint
  label: Get Tint
  kind: query
  command: "AA 28 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_tint
  label: Set Tint
  kind: action
  command: "AA 28 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Tint (0, 2, 4, ... 100 - 50 steps). R=value, G=100-value. NTSC only.

# --- 0x29 Red Gain (PC/BNC) ---
- id: get_red_gain
  label: Get Red Gain
  kind: query
  command: "AA 29 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_red_gain
  label: Set Red Gain
  kind: action
  command: "AA 29 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Red gain (0-100)

# --- 0x2A Green Gain (PC/BNC) ---
- id: get_green_gain
  label: Get Green Gain
  kind: query
  command: "AA 2A {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_green_gain
  label: Set Green Gain
  kind: action
  command: "AA 2A {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Green gain (0-100)

# --- 0x2B Blue Gain (PC/BNC) ---
- id: get_blue_gain
  label: Get Blue Gain
  kind: query
  command: "AA 2B {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_blue_gain
  label: Set Blue Gain
  kind: action
  command: "AA 2B {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Blue gain (0-100)

# --- 0x2C Treble ---
- id: get_treble
  label: Get Treble
  kind: query
  command: "AA 2C {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_treble
  label: Set Treble
  kind: action
  command: "AA 2C {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Treble (0, 2, 5, 7, ... 100 - 40 steps)

# --- 0x2D Bass ---
- id: get_bass
  label: Get Bass
  kind: query
  command: "AA 2D {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_bass
  label: Set Bass
  kind: action
  command: "AA 2D {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Bass (0, 2, 5, 7, ... 100 - 40 steps)

# --- 0x2E Balance ---
- id: get_balance
  label: Get Balance
  kind: query
  command: "AA 2E {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_balance
  label: Set Balance
  kind: action
  command: "AA 2E {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Balance (0, 4, 9, 13, ... 100 - 22 steps). L=100-value, R=value.

# --- 0x2F Coarse (PC/BNC) ---
- id: set_coarse
  label: Set Coarse
  kind: action
  command: "AA 2F {id} 01 {dir} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: dir
      type: enum
      values: [0, 1]
      description: 1=Increase, 0=Decrease

# --- 0x30 Fine (PC/BNC) ---
- id: set_fine
  label: Set Fine
  kind: action
  command: "AA 30 {id} 01 {dir} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: dir
      type: enum
      values: [0, 1]
      description: 1=Increase (phase +), 0=Decrease (phase -)

# --- 0x31 H-Position (PC/BNC) ---
- id: set_h_position
  label: Set Horizontal Position
  kind: action
  command: "AA 31 {id} 01 {dir} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: dir
      type: enum
      values: [0, 1]
      description: 1=Move Right, 0=Move Left

# --- 0x32 V-Position (PC/BNC) ---
- id: set_v_position
  label: Set Vertical Position
  kind: action
  command: "AA 32 {id} 01 {dir} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: dir
      type: enum
      values: [0, 1]
      description: 1=Move Down, 0=Move Up

# --- 0x34 Clear Menu ---
- id: set_clear_menu
  label: Clear Menu (dismiss OSD)
  kind: action
  command: "AA 34 {id} 01 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Data byte must be 0x00 (always).

# --- 0x36 Remote Control ---
- id: get_remote
  label: Get Remote Enable Status
  kind: query
  command: "AA 36 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_remote
  label: Set Remote Enable
  kind: action
  command: "AA 36 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Remocon Enable, 0=Remocon Disable

# --- 0x37 RGB Contrast (PC/BNC/DVI) ---
- id: get_rgb_contrast
  label: Get RGB Contrast
  kind: query
  command: "AA 37 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_rgb_contrast
  label: Set RGB Contrast
  kind: action
  command: "AA 37 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: RGB contrast (0-100)

# --- 0x38 RGB Brightness (PC/BNC/DVI) ---
- id: get_rgb_brightness
  label: Get RGB Brightness
  kind: query
  command: "AA 38 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_rgb_brightness
  label: Set RGB Brightness
  kind: action
  command: "AA 38 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: RGB brightness (0-100)

# --- 0x3D Auto Adjustment (PC/BNC) ---
- id: set_auto_adjustment
  label: Auto-Adjust PC
  kind: action
  command: "AA 3D {id} 01 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Data byte must be 0x00 (always).

# --- 0x3E Color Tone (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_color_tone
  label: Get Color Tone
  kind: query
  command: "AA 3E {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_color_tone
  label: Set Color Tone
  kind: action
  command: "AA 3E {id} 01 {tone} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: tone
      type: enum
      values: ["0x00", "0x01", "0x02", "0x03", "0x04", "0x50"]
      description: 0x00=Cool 2, 0x01=Cool 1, 0x02=Normal, 0x03=Warm 1, 0x04=Warm 2, 0x50=Off

# --- 0x3F Color Temperature ---
- id: get_color_temperature
  label: Get Color Temperature
  kind: query
  command: "AA 3F {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_color_temperature
  label: Set Color Temperature
  kind: action
  command: "AA 3F {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 10]
      description: Color temperature index (0-10). Only valid when Color Tone = Off.

# --- 0x4C Pixel Shift ---
- id: get_pixel_shift
  label: Get Pixel Shift Status
  kind: query
  command: "AA 4C {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_pixel_shift
  label: Set Pixel Shift
  kind: action
  command: "AA 4C {id} 04 {shift} {hdot} {vline} {stime} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: shift
      type: enum
      values: [0, 1]
      description: 1=ON, 0=OFF. If OFF, hdot/vline/stime are ignored.
    - name: hdot
      type: integer
      range: [0, 4]
      description: Horizontal dot step
    - name: vline
      type: integer
      range: [0, 4]
      description: Vertical line step
    - name: stime
      type: integer
      range: [1, 4]
      description: Shift time interval

# --- 0x4F Video Wall ---
- id: get_video_wall
  label: Get Video Wall Status
  kind: query
  command: "AA 4F {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_video_wall
  label: Set Video Wall Position
  kind: action
  command: "AA 4F {id} 01 {vwall} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: vwall
      type: enum
      values: ["0x00", "0x11", "0x12", "0x13", "0x14", "0x21", "0x22", "0x23", "0x24", "0x25", "0x29", "0x31", "0x32", "0x33", "0x34", "0x35", "0x39", "0x40", "0x41", "0x42", "0x43", "0x44", "0x45", "0x51", "0x52", "0x53", "0x54", "0x55", "0x61", "0x62", "0x71", "0x72"]
      description: |
        Layout/position code per the source's V.Wall table.
        Layouts: 2x2 (No.1-4 = 0x11-0x14), 3x3 (No.1-9 = 0x21-0x29),
        4x4 (No.1-16 = 0x31-0x40), 1x5 (0x41-0x45), 5x1 (0x51-0x55),
        1x2 (0x61-0x62), 2x1 (0x71-0x72), OFF = 0x00.

# --- 0x57 Auto Lamp ---
- id: get_auto_lamp
  label: Get Auto Lamp Status
  kind: query
  command: "AA 57 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_auto_lamp
  label: Set Auto Lamp
  kind: action
  command: "AA 57 {id} 08 {lmax_h} {lmax_m} {lmax_ap} {lmax_value} {lmin_h} {lmin_m} {lmin_ap} {lmin_value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: lmax_h
      type: integer
      range: [1, 12]
      description: Max time hour
    - name: lmax_m
      type: integer
      range: [0, 59]
      description: Max time minute
    - name: lmax_ap
      type: enum
      values: [0, 1]
      description: Max time AM/PM (1=AM, 0=PM)
    - name: lmax_value
      type: integer
      range: [0, 100]
      description: Max lamp value
    - name: lmin_h
      type: integer
      range: [1, 12]
      description: Min time hour
    - name: lmin_m
      type: integer
      range: [0, 59]
      description: Min time minute
    - name: lmin_ap
      type: enum
      values: [0, 1]
      description: Min time AM/PM (1=AM, 0=PM)
    - name: lmin_value
      type: integer
      range: [0, 100]
      description: Min lamp value. 0xFF disables Auto Lamp.

# --- 0x58 Manual Lamp ---
- id: get_manual_lamp
  label: Get Manual Lamp Status
  kind: query
  command: "AA 58 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_manual_lamp
  label: Set Manual Lamp
  kind: action
  command: "AA 58 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Manual lamp value. 0xFF disables.

# --- 0x59 Safety Screen Run ---
- id: get_safety_screen_run
  label: Get Safety Screen Run Status
  kind: query
  command: "AA 59 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_safety_screen_run
  label: Run Safety Screen
  kind: action
  command: "AA 59 {id} 01 {type} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: type
      type: enum
      values: [0, 1, 2, 3, 4, 6]
      description: 0=Off, 1=Signal Pattern, 2=All White, 3=Scroll, 4=Bar, 6=Eraser

# --- 0x5B SBP Timer ---
- id: get_sbp_timer
  label: Get SBP Timer Status
  kind: query
  command: "AA 5B {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_sbp_timer
  label: Set SBP Timer
  kind: action
  command: "AA 5B {id} 03 {timer} {period} {time} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: timer
      type: enum
      values: [0, 1, 2, 3, 4, 5]
      description: 0=OFF, 1=Pattern, 2=All White, 3=Inverse, 4=Bar, 5=Bar & Inverse
    - name: period
      type: integer
      range: [1, 24]
      description: Period in hours
    - name: time
      type: integer
      range: [1, 30]
      description: Duration in minutes per period

# --- 0x5C Video Wall Mode ---
- id: get_video_wall_mode
  label: Get Video Wall Mode
  kind: query
  command: "AA 5C {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_video_wall_mode
  label: Set Video Wall Mode
  kind: action
  command: "AA 5C {id} 01 {wallmode} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: wallmode
      type: enum
      values: [0, 1]
      description: 1=Full, 0=Natural

# --- 0x5D Safety Lock ---
- id: get_safety_lock
  label: Get Safety Lock Status
  kind: query
  command: "AA 5D {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_safety_lock
  label: Set Safety Lock
  kind: action
  command: "AA 5D {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=On, 0=Off. Operates regardless of power state.

# --- 0x5F Panel Lock ---
- id: get_panel_lock
  label: Get Panel Lock Status
  kind: query
  command: "AA 5F {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_panel_lock
  label: Set Panel Lock
  kind: action
  command: "AA 5F {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Lock, 0=Unlock. Operates regardless of power state.

# --- 0x70 OSD On/Off ---
- id: get_osd
  label: Get OSD Enable Status
  kind: query
  command: "AA 70 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_osd
  label: Set OSD Enable
  kind: action
  command: "AA 70 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=OSD On, 0=OSD Off

# --- 0x71 P. Mode (Picture Mode) ---
- id: get_p_mode
  label: Get Picture Mode
  kind: query
  command: "AA 71 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_p_mode
  label: Set Picture Mode
  kind: action
  command: "AA 71 {id} 01 {pmode} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: pmode
      type: enum
      values: ["0x00", "0x01", "0x02", "0x03", "0x10", "0x11", "0x12", "0x13", "0x50"]
      description: |
        AV/S-Video/Component/HDCP/TV: 0x00=Dynamic, 0x01=Standard, 0x02=Movie,
        0x03=Custom, 0x50=Off.
        PC/BNC/DVI/MagicNet: 0x10=Entertain, 0x11=Internet, 0x12=Text,
        0x13=Custom, 0x50=Off. Dynamic Contrast only operates in Off mode.

# --- 0x72 S. Mode (Sound Mode) ---
- id: get_s_mode
  label: Get Sound Mode
  kind: query
  command: "AA 72 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_s_mode
  label: Set Sound Mode
  kind: action
  command: "AA 72 {id} 01 {smode} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: smode
      type: enum
      values: ["0x00", "0x01", "0x02", "0x03", "0x04"]
      description: 0x00=Standard, 0x01=Music, 0x02=Movie, 0x03=Speech, 0x04=Custom

# --- 0x73 NR Mode (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_nr_mode
  label: Get NR Mode Status
  kind: query
  command: "AA 73 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_nr_mode
  label: Set NR (Noise Reduction) Mode
  kind: action
  command: "AA 73 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=NR Mode On, 0=NR Mode Off

# --- 0x75 PC Color Tone (PC/BNC/DVI) ---
- id: get_pc_color_tone
  label: Get PC Color Tone
  kind: query
  command: "AA 75 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_pc_color_tone
  label: Set PC Color Tone
  kind: action
  command: "AA 75 {id} 01 {tone} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: tone
      type: enum
      values: ["0x00", "0x01", "0x02", "0x03", "0x50"]
      description: 0x00=Custom, 0x01=Cool, 0x02=Normal, 0x03=Warm, 0x50=Off

# --- 0x76 Auto AutoAdjustment ---
- id: get_auto_autoadjustment
  label: Get Auto-AutoAdjustment Status
  kind: query
  command: "AA 76 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_auto_autoadjustment
  label: Enable/Disable Auto-AutoAdjustment
  kind: action
  command: "AA 76 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Enable, 0=Disable

# --- 0x77 All Keys Lock ---
- id: get_all_keys
  label: Get All Keys Lock Status
  kind: query
  command: "AA 77 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_all_keys
  label: Set All Keys Lock
  kind: action
  command: "AA 77 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Lock (Remocon+Panel), 0=Unlock

# --- 0x78 SRS TS XT ---
- id: get_srs_ts_xt
  label: Get SRS TS XT Status
  kind: query
  command: "AA 78 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_srs_ts_xt
  label: Set SRS TS XT
  kind: action
  command: "AA 78 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=SRS ON, 0=SRS OFF

# --- 0x79 Film Mode ---
- id: get_film_mode
  label: Get Film Mode Status
  kind: query
  command: "AA 79 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_film_mode
  label: Set Film Mode
  kind: action
  command: "AA 79 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Film Mode ON, 0=Film Mode OFF

# --- 0x7A Signal Balance (PC/BNC) ---
- id: get_signal_balance
  label: Get Signal Balance Status
  kind: query
  command: "AA 7A {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_signal_balance
  label: Set Signal Balance
  kind: action
  command: "AA 7A {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Signal Balance ON, 0=Signal Balance OFF

# --- 0x7E SB Gain (PC/BNC, Signal Balance ON) ---
- id: get_sb_gain
  label: Get SB Gain
  kind: query
  command: "AA 7E {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_sb_gain
  label: Set SB Gain
  kind: action
  command: "AA 7E {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Phase B value (0-100)

# --- 0x7F SB Sharpness (PC/BNC, Signal Balance ON) ---
- id: get_sb_sharpness
  label: Get SB Sharpness
  kind: query
  command: "AA 7F {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_sb_sharpness
  label: Set SB Sharpness
  kind: action
  command: "AA 7F {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [0, 100]
      description: Signal Balance sharpness (0-100)

# --- 0x83 Panel On Time ---
- id: get_panel_on_time
  label: Get Panel On Time
  kind: query
  command: "AA 83 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Response: PTime_H (high byte), PTime_L (low byte) - cumulative panel-on hours.

# --- 0x84 Video Wall On/Off ---
- id: get_video_wall_on
  label: Get Video Wall On/Off Status
  kind: query
  command: "AA 84 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_video_wall_on
  label: Set Video Wall On/Off
  kind: action
  command: "AA 84 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Video Wall ON, 0=Video Wall OFF

# --- 0x85 Temperature Control ---
- id: get_temperature_control
  label: Get Temperature Control Setting
  kind: query
  command: "AA 85 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_temperature_control
  label: Set Temperature Limit
  kind: action
  command: "AA 85 {id} 01 {value} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: value
      type: integer
      range: [45, 125]
      description: Maximum temperature threshold in °C

# --- 0x86 Brightness Sensor ---
- id: get_brightness_sensor
  label: Get Brightness Sensor Status
  kind: query
  command: "AA 86 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_brightness_sensor
  label: Set Brightness Sensor
  kind: action
  command: "AA 86 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Brightness Sensor ON, 0=Brightness Sensor OFF

# --- 0x87 Dynamic Contrast (ATV/DTV/AV/S-Video/Component/HDMI) ---
- id: get_dynamic_contrast
  label: Get Dynamic Contrast Status
  kind: query
  command: "AA 87 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_dynamic_contrast
  label: Set Dynamic Contrast
  kind: action
  command: "AA 87 {id} 01 {state} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: state
      type: enum
      values: [0, 1]
      description: 1=Dynamic Contrast ON, 0=Dynamic Contrast OFF
  notes: |
    Section 2.1 documents this command as opcode 0x87, but the master table
    at row 70 lists 0x88 for "Dynamic Contrast". 0x88 is used here per
    Section 2.1's byte-level documentation.

# --- 0x88 Safety Screen On (master-table row 71; conflicts with 0x87 above) ---
- id: set_safety_screen_on
  label: Set Safety Screen Type
  kind: action
  command: "AA 88 {id} 01 {type} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: type
      type: integer
      range: [1, 5]
      description: Safety screen type (1-5)
  notes: |
    Master table row 71 lists this command as opcode 0x88 with type range 1-5.
    However, 0x88 is also assigned to Dynamic Contrast in the same table,
    and Section 2.1 documents Safety Screen Run at 0x59. The opcode 0x88
    is preserved here as listed in the source's master table.

# --- 0x89 Video Wall User Control ---
- id: get_video_wall_user
  label: Get Video Wall (User Mode) Status
  kind: query
  command: "AA 89 {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID

- id: set_video_wall_user
  label: Set Video Wall User Position
  kind: action
  command: "AA 89 {id} 02 {wall_div} {wall_sno} {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
    - name: wall_div
      type: enum
      values: ["0x00", "0x11", "0x12", "0x13", "0x14", "0x15", "0x21", "0x22", "0x23", "0x24", "0x25", "0x31", "0x32", "0x33", "0x34", "0x35", "0x41", "0x42", "0x43", "0x44", "0x45", "0x51", "0x52", "0x53", "0x54", "0x55"]
      description: |
        H-row / V-column index from the source's Wall_Div table. Each entry
        is the (V)x(H) position. Example: H=0 V=1 = 0x11, H=4 V=0 = 0x41.
    - name: wall_sno
      type: integer
      range: [1, 25]
      description: TV/Monitor set number (1-25)

# --- 0x8A Model Name ---
- id: get_model_name
  label: Get Model Name
  kind: query
  command: "AA 8A {id} 00 {chk}"
  params:
    - name: id
      type: integer
      description: Display ID
  notes: Response: 16 ASCII bytes forming the model name string (e.g. "SyncMaster 400DXn").

# --- 0x70-0x8A end ---

# Per source, all commands echo back as 0xAA 0xFF {dlen} 'A' {cmd} {values...} {chk} on success,
# or 0xAA 0xFF 0x03 'N' {cmd} {ERR} {chk} on failure (ERR: 0=checksum, 1=other).

Feedbacks

- id: power_state
  type: enum
  values: [0, 1]
  description: Power (0=OFF, 1=ON) - from Get Power 0x11 and Get Status 0x00

- id: volume_level
  type: integer
  range: [0, 100]
  description: Volume (0-100) - from Get Volume 0x12 and Get Status 0x00

- id: mute_state
  type: enum
  values: [0, 1]
  description: Mute (0=OFF, 1=ON) - from Get Mute 0x13 and Get Status 0x00

- id: input_source
  type: enum
  values: ["0x14", "0x1E", "0x18", "0x0C", "0x04", "0x08", "0x20", "0x1F", "0x30", "0x40", "0x21", "0x22"]
  description: Current input (see 0x14 enum) - from Get Input Source 0x14 and Get Status 0x00

- id: aspect
  type: integer
  description: Current aspect ratio code (see 0x15 enum)

- id: on_time_enabled
  type: enum
  values: [0, 1]
  description: OnTime ON/OFF (0=OFF, 1=ON) - in Get Status 0x00

- id: off_time_enabled
  type: enum
  values: [0, 1]
  description: OffTime ON/OFF (0=OFF, 1=ON) - in Get Status 0x00

- id: video_settings
  type: object
  description: |
    From Get Video Status 0x04: Contrast, Brightness, Sharpness, Color, Tint,
    ColorTone, ColorTemp (0-10).

- id: audio_settings
  type: object
  description: |
    From Get Audio Status 0x05: Treble, Bass, Balance (0-100 each).

- id: rgb_settings
  type: object
  description: |
    From Get RGB Status 0x06: Contrast, Brightness, ColorTone, ColorTemp,
    Red Gain, Green Gain, Blue Gain.

- id: maintenance_settings
  type: object
  description: |
    From Get Maintenance 0x08: Power, P.Size, P.Source, LMax_H/M/AP/Value,
    LMin_H/M/AP/Value, LampValue (0xFF = OFF), ScreenInterval, ScreenTime,
    ScreenType, V.Wall, V.WallFormat, V.WallDivid, V.WallSet.

- id: serial_number
  type: string
  description: 14-byte serial number string from Get Serial Number 0x0B

- id: display_status
  type: object
  description: |
    From Get Display Status 0x0D: Lamp (0=Normal, 1=Error), Temperature
    (0=Normal, 1=Error), Bright_Sensor (0/1), No_Sync (0=Normal, 1=Error or
    No Sync), Cur_Temp (°C), FAN (0=Normal, 1=Error).

- id: software_version
  type: string
  description: 15-byte SW version string from Get Software Version 0x0E

- id: model_number
  type: object
  description: |
    From Get Model Number 0x10: Species (0x01=PDP, 0x02=LCD, 0x03=DLP),
    Model (per source table - 0x15 for xxxDX family), TV (0=non-TV, 1=TV).

- id: screen_size_inches
  type: integer
  range: [0, 255]
  description: Diagonal screen size in inches - from Get Screen Size 0x19

- id: panel_on_time
  type: integer
  description: Cumulative panel-on hours as PTime_H:PTime_L - from Get Panel On Time 0x83

- id: model_name
  type: string
  description: 16-byte model name ASCII - from Get Model Name 0x8A

- id: ack_response
  type: object
  description: |
    Generic ACK frame: 0xAA 0xFF {dlen=3} 'A' {r-CMD} {val1} {chk} on success,
    0xAA 0xFF 0x03 'N' {r-CMD} {ERR} {chk} on failure (ERR: 0=checksum, 1=other).

Variables

# Discrete settable parameters; all share the same RS-232 frame as their corresponding
# set_* action. The variable name maps 1:1 to the action's `command:` byte position.
- name: power
  command_byte_offset: 4
  range: [0, 1]
  description: 1=ON, 0=OFF (0x11)

- name: volume
  command_byte_offset: 4
  range: [0, 100]
  description: Volume (0x12)

- name: input_source
  command_byte_offset: 4
  enum_values: ["0x14", "0x1E", "0x18", "0x0C", "0x04", "0x08", "0x20", "0x1F", "0x30", "0x40", "0x21", "0x22"]
  description: Input source (0x14)

- name: contrast
  command_byte_offset: 4
  range: [0, 100]
  description: Contrast (0x24)

- name: brightness
  command_byte_offset: 4
  range: [0, 100]
  description: Brightness (0x25)

- name: sharpness
  command_byte_offset: 4
  range: [0, 100]
  description: Sharpness, 50 steps (0x26)

- name: color
  command_byte_offset: 4
  range: [0, 100]
  description: Color saturation (0x27)

- name: tint
  command_byte_offset: 4
  range: [0, 100]
  description: Tint, 50 steps, NTSC only (0x28)

- name: treble
  command_byte_offset: 4
  range: [0, 100]
  description: Treble, 40 steps (0x2C)

- name: bass
  command_byte_offset: 4
  range: [0, 100]
  description: Bass, 40 steps (0x2D)

- name: balance
  command_byte_offset: 4
  range: [0, 100]
  description: Balance, 22 steps (0x2E)

- name: color_tone
  command_byte_offset: 4
  enum_values: ["0x00", "0x01", "0x02", "0x03", "0x04", "0x50"]
  description: Color Tone preset (0x3E)

- name: color_temperature
  command_byte_offset: 4
  range: [0, 10]
  description: Color Temperature index, only when Color Tone = Off (0x3F)

Events

# The protocol is query-driven; the source documents no unsolicited events.
# UNRESOLVED: device does not appear to push state changes over RS-232. Polling
# required for any state observation.

Macros

# UNRESOLVED: no multi-step sequences are documented in the source.

Safety

confirmation_required_for:
  - power_off     # affects panel; bulk power-off may damage displays in video walls
  - set_safety_lock
  - set_panel_lock
  - set_all_keys
  - set_video_wall_on
  - set_video_wall_mode
interlocks: []
# UNRESOLVED: source does not describe formal interlocks or power-on sequencing
# requirements. Listed confirmation items are inferred from the destructive
# potential of the operations; the source does not require confirmation.

Notes

Frame structure: 0xAA CMD ID DLEN DATA... CHK where CHK = (CMD + ID + DLEN + sum(DATA)) mod 256. The header byte 0xAA is NOT included in the checksum (confirmed by the source's worked example: 0x11 + 0xFF + 0x01 + 0x01 = 0x112 → 0x12).

ID encoding: per Section 1.2, "ID should show hexadecimal value of assigned ID, but ID 0 should be 0xFF." Broadcast (no ACK) is 0xFE. Implementers should treat {id} as 0x00-0x63 for individual units, 0xFF for ID 0 / "all", and 0xFE for broadcast.

ACK/NAK framing: 0xAA 0xFF 0x03 'A' {r-CMD} {val1} {chk} for ACK, 0xAA 0xFF 0x03 'N' {r-CMD} {ERR} {chk} for NAK where ERR=0 (checksum) or 1 (other). The NAK byte is the literal ASCII 'A' (0x41) or 'N' (0x4E).

Cable limit: 4 m between adjacent displays. Daisy-chain via RS-232 OUT/IN; only pins 2, 3, 5 of DB-9 are used.

Per-source command-set conflicts:

  • Master table row 70 (Dynamic Contrast) and Section 2.1 (Dynamic Contrast) disagree on opcode: 0x88 vs 0x87. Spec uses 0x87.
  • Master table row 71 (Safety Screen On, opcode 0x88) collides with the above 0x88 conflict; Section 2.1 documents Safety Screen Run at 0x59. Spec lists both 0x59 (Safety Screen Run, fully detailed) and 0x88 (Safety Screen On, as listed in the table).
  • Master table Direct Channel row uses 0x16 in the title but 0x17 in the Get frame. Spec uses 0x17 for get and 0x16 for set per the source's byte-level examples.

Provenance

source_domains:
  - archive.org
  - gist.github.com
  - justaddpower.happyfox.com
source_urls:
  - https://archive.org/download/manualzz-id-1101434/1101434.pdf
  - https://gist.github.com/paltaio-admin/0c6ca6c2a5210684fb6a81cbc913feeb
  - https://justaddpower.happyfox.com/kb/article/245-samsung-rs232-control-rs232c/
retrieved_at: 2026-05-15T06:35:46.440Z
last_checked_at: 2026-06-01T21:44:40.792Z

Verification Summary

verdict: verified
checked_at: 2026-06-01T21:44:40.792Z
matched_actions: 129
action_count: 129
confidence: medium
summary: "All 129 spec actions match source opcodes and shapes verbatim; transport (9600 8N1) confirmed; all 73 source command types fully represented in spec. (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "complete broadcast/ID-encoding behavior is not fully consistent in the source. Per Section 1.2: \"ID 0 should be 0xFF\", while 0xFE is described as \"broadcast, no ACK\". Operationally these overlap. The verifier should treat {id} as 0x00-0x63 for individual units and 0xFE for broadcast, with 0xFF reserved for ID 0."
- "row 70 of the source table assigns Dynamic Contrast opcode 0x88,"
- "device does not appear to push state changes over RS-232. Polling"
- "no multi-step sequences are documented in the source."
- "source does not describe formal interlocks or power-on sequencing"
- "firmware version compatibility not stated in source. The 0x10 Model Number response includes 0x15 for the DX family, 0x16 for 460TX, 0x18 for 42TS/42PS, etc. — some opcodes may be unsupported on older revisions; the source does not enumerate firmware-by-firmware support."

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