Summary

ViewSonic CDE6502 large-format commercial display supporting RS-232 and TCP/IP control. Protocol uses a 9-byte ASCII packet: [Len=0x38][ID_hi][ID_lo][Type][Cmd][v1][v2][v3][CR=0x0D]. Set command type is s (0x73), Get is g (0x67), Get reply is r (0x72), Set ack is + (0x2B valid) / - (0x2D invalid). Broadcast ID 99 applies to all displays (only ID#1 replies). Auto-reply events fire on power, input, brightness, backlight, volume, and mute changes.

Transport

protocols:
  - serial
  - tcp
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
addressing:
  port: 5000
auth:
  type: none  # inferred: source states "Logon Credentials: No"

Traits

- powerable
- routable
- queryable
- levelable

Actions

# All Set-Function packets: 0x38 {id2}{id3} 0x73 {cmd} {v1}{v2}{v3} 0x0D
# ID default 01; broadcast 99. Value is 3 ASCII digits unless noted.

- id: power_on
  label: Power On
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x21 0x30 0x30 0x31 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits (01~98, default 01, 99=broadcast)"
  notes: "Power-on via LAN may work only under specific mode (see UG). WOL by MAC available as alternative."

- id: power_off
  label: Power Off (Standby)
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x21 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits (01~98, default 01, 99=broadcast)"

- id: set_power
  label: Set Power State
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x21 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=STBY, 001=ON"

- id: select_input
  label: Select Input
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x22 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: input
      type: integer
      description: "000: TV 001: AV 002: S-Video 003: YPbPr 004: HDMI1 014: HDMI2 024: HDMI3 034: HDMI4 005: DVI 006: VGA1 016: VGA2 026: VGA3 007: Slot-in PC/OPS/HDBT 008: Internal memory 009: DP 00A: Embedded/Main (Android)"

- id: set_brightness
  label: Set Brightness
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x24 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100, 900=bright down (-1), 901=bright up (+1)"

- id: set_backlight
  label: Set Backlight
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x42 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"
  notes: "Source table shows Type col 'A', Code col 'B', Hex 42 for Backlight - hex 42='B'. NOTE: hex 0x42 collides with Set-Remote-Control command byte; treat as source ambiguity. For Android platform main mode = backlight, other sources = brightness."

- id: set_power_lock
  label: Set Power Lock
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x34 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=Unlock, 001=Lock"

- id: set_volume
  label: Set Volume
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x35 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100, 900=volume down (-1), 901=volume up (+1)"

- id: set_mute
  label: Set Mute
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x36 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=OFF, 001=ON"

- id: set_button_lock
  label: Set Button Lock
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x38 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=Unlock, 001=Lock"

- id: set_menu_lock
  label: Set Menu Lock
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x3E {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=Unlock, 001=Lock"

- id: send_number
  label: Send Number
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x40 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~009"

- id: send_key_pad
  label: Send Key Pad
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x41 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: key
      type: integer
      description: "000: UP 001: DOWN 002: LEFT 003: RIGHT 004: ENTER 005: INPUT 006: MENU/(EXIT) 007: EXIT"

- id: set_remote_control
  label: Set Remote Control
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x42 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: Disable 001: Enable 002: Pass through"
  notes: "Disable: RCU no function. Enable: RCU controls normally. Pass through: Display bypasses RC code to connected device via RS-232, does not react itself. NOTE: cmd byte 0x42 collides with Set-Backlight in source table."

- id: restore_default
  label: Restore Default
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x7E 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  notes: "Value must be 000. Recovers to factory setting."

- id: set_contrast
  label: Set Contrast
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x23 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_sharpness
  label: Set Sharpness
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x25 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_color
  label: Set Color
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x26 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_tint
  label: Set Tint
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x27 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_backlight_on_off
  label: Set Backlight On/Off
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x28 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000=Off, 001=On"

- id: set_color_mode
  label: Set Color Mode
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x29 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: Normal 001: Warm 002: Cold 003: Personal"

- id: set_surround_sound
  label: Set Surround Sound
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x2D {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_bass
  label: Set Bass
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x2E {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_treble
  label: Set Treble
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x2F {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100"

- id: set_balance
  label: Set Balance
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x30 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000~100 (050=central)"

- id: set_picture_size
  label: Set Picture Size
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x31 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: FULL (16:9) 001: NORMAL (4:3) 002: REAL (1:1)"

- id: set_osd_language
  label: Set OSD Language
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x32 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: English 001: French 002: Spanish"

- id: set_pip_mode
  label: Set PIP Mode
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x39 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: OFF 001: PIP(POP) 002: PBP"

- id: set_pip_sound_select
  label: Set PIP Sound Select
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x3A {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: Main 001: Sub"

- id: set_pip_position
  label: Set PIP Position
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x3B {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: Up 001: Down 002: Left 003: Right"

- id: set_pip_input
  label: Set PIP Input
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x37 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: input
      type: integer
      description: "Same range as Set-Input select"

- id: set_tiling_mode
  label: Set Tiling Mode
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x50 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: OFF 001: ON (video wall)"

- id: set_tiling_compensation
  label: Set Tiling Compensation
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x51 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "000: OFF 001: ON (bezel width compensation)"

- id: set_tiling_h_monitors
  label: Set Tiling H Monitors
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x52 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "01x~09x (2nd digit H monitors 1~9). Source combines H+V in one cmd 0x52 row."
  notes: "Source lists H and V monitors as a single row (cmd 0x52) encoding both digits. This action targets the H (2nd) digit."

- id: set_tiling_v_monitors
  label: Set Tiling V Monitors
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x52 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "0x1~0x9 (3rd digit V monitors 1~9). Source combines H+V in one cmd 0x52 row."
  notes: "Source lists H and V monitors as a single row (cmd 0x52) encoding both digits. This action targets the V (3rd) digit."

- id: set_tiling_position
  label: Set Tiling Position
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x53 {v1}{v2}{v3} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: integer
      description: "001~025 (copy screen of Position# to identified display)"

- id: set_date_year
  label: Set Date Year
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x56 0x59 {yy2} {yy1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "Y17~Y99 (last 2 digits, (20)17~(20)99)"
  notes: "Value prefix 'Y' is literal ASCII 0x59 in the packet. Example Y17 → bytes 0x59 0x31 0x37."

- id: set_date_month
  label: Set Date Month
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x56 0x4D {m2} {m1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "M01~M12"
  notes: "Value prefix 'M' is literal ASCII 0x4D. Example M03 → bytes 0x4D 0x30 0x33."

- id: set_date_day
  label: Set Date Day
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x56 0x44 {d2} {d1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "D01~D31"
  notes: "Value prefix 'D' is literal ASCII 0x44. Example D15 → bytes 0x44 0x31 0x35."

- id: set_time_hour
  label: Set Time Hour
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x57 0x48 {h2} {h1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "H00~H23 (24-hr format)"
  notes: "Value prefix 'H' is literal ASCII 0x48. Example H16 → bytes 0x48 0x31 0x36."

- id: set_time_minute
  label: Set Time Minute
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x57 0x4D {m2} {m1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "M00~M59"
  notes: "Value prefix 'M' is literal ASCII 0x4D. Example M27 → bytes 0x4D 0x32 0x37."

- id: set_time_second
  label: Set Time Second
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x57 0x53 {s2} {s1} 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: value
      type: string
      description: "S00~S59"
  notes: "Value prefix 'S' is literal ASCII 0x53. Example S59 → bytes 0x53 0x35 0x39."

# ---- Get-Function queries (added in upgrade pass) ----
# All Get packets: 0x38 {id_hi}{id_lo} 0x67 {cmd} 0x30 0x30 0x30 0x0D (value always 000)
# Valid reply: 0x38 {id_hi}{id_lo} 0x72 {cmd} {v1}{v2}{v3} 0x0D

- id: get_brightness
  label: Get Brightness
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x62 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x62, type r)"

- id: get_backlight
  label: Get Backlight
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x42 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x42, type r)"

- id: get_volume
  label: Get Volume
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x66 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x66, type r)"

- id: get_mute
  label: Get Mute
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x67 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Off 001: On (reply cmd 0x67, type r)"

- id: get_input_select
  label: Get Input Select
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x6A 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "3 digits: 1st = signal detection (0=no signal, 1=detected); 2nd/3rd = input source code (see Set-Input). Reply cmd 0x6A, type r."

- id: get_power_status
  label: Get Power Status (ON/STBY)
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x6C 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "001: ON 000: STBY (reply cmd 0x6C, type r)"

- id: get_remote_control
  label: Get Remote Control Mode
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x6E 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Disable 001: Enable 002: Pass through (reply cmd 0x6E, type r)"

- id: get_power_lock
  label: Get Power Lock
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x6F 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Unlock 001: Lock (reply cmd 0x6F, type r)"

- id: get_button_lock
  label: Get Button Lock
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x70 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Unlock 001: Lock (reply cmd 0x70, type r)"

- id: get_menu_lock
  label: Get Menu Lock
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x6C 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Unlock 001: Lock (reply cmd 0x6C, type r)"
  notes: "Source table lists Get-Menu-Lock with same cmd byte 0x6C as Get-Power-Status - likely source typo. Flag for device verification."

- id: get_ack
  label: Get ACK (Link Test)
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x7A 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000 (reply cmd 0x7A, type r). Used to test the communication link."

- id: get_thermal
  label: Get Thermal
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x30 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000~100 = 0~+100 deg C; -01~-99 = -1~-99 deg C (reply cmd 0x30, type r)"

- id: get_operation_time
  label: Get Operation Time
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x31 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "Accumulated hours, 6-digit integer (000001~999999). Reply in 32-byte format. Example reply: 0x32 0x30 0x31 0x72 0x31 [6 ASCII digits] 0x00...0x00 0x0D. Cannot be reset on FW update / factory init."

- id: get_device_name
  label: Get Device Name
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x34 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "ASCII string, 32-byte reply format. Example reply for 'CDE-5500': 0x32 0x30 0x31 0x72 0x34 0x43 0x44 0x45 0x2D 0x35 0x35 0x30 0x30 0x00...0x00 0x0D"

- id: get_mac_address
  label: Get MAC Address
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x35 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "ASCII MAC, 32-byte reply format. Example for 00:11:22:aa:bb:cc: 0x32 0x30 0x31 0x72 0x35 0x30 0x30 0x31 0x31 0x32 0x32 0x61 0x61 0x62 0x62 0x63 0x63 0x00...0x00 0x0D. LAN models only."

- id: get_ip_address
  label: Get IP Address
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x36 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "ASCII dotted-quad, 32-byte reply format. Example for 192.168.100.2: 0x32 0x30 0x31 0x72 0x36 0x31 0x39 0x32 0x2E 0x31 0x36 0x38 0x2E 0x31 0x30 0x30 0x2E 0x32 0x00...0x00 0x0D. LAN models only."

- id: get_serial_number
  label: Get Serial Number
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x37 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "ASCII string, 32-byte reply format. Example for 'ABC180212345': 0x32 0x30 0x31 0x72 0x37 0x41 0x42 0x43 0x31 0x38 0x30 0x32 0x31 0x32 0x33 0x34 0x35 0x00...0x00 0x0D"

- id: get_fw_version
  label: Get Firmware Version
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x38 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "ASCII version string, 32-byte reply format. Example for '3.02.001': 0x32 0x30 0x31 0x72 0x38 0x33 0x2E 0x30 0x32 0x2E 0x30 0x30 0x31 0x00...0x00 0x0D"

- id: get_contrast
  label: Get Contrast
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x61 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x61, type r)"

- id: get_sharpness
  label: Get Sharpness
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x63 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x63, type r)"

- id: get_color
  label: Get Color
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x64 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x64, type r)"

- id: get_tint
  label: Get Tint
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x65 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "integer 000~100 (reply cmd 0x65, type r)"

- id: get_backlight_on_off
  label: Get Backlight On/Off
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x68 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: Off 001: On (reply cmd 0x68, type r)"

- id: get_pip_mode
  label: Get PIP Mode
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x74 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: OFF 001: PIP(POP) 002: PBP (reply cmd 0x74, type r)"

- id: get_pip_input
  label: Get PIP Input
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x75 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "input code, see Set-Input select (reply cmd 0x75, type r)"

- id: get_tiling_mode
  label: Get Tiling Mode
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x76 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: OFF 001: ON (reply cmd 0x76, type r)"

- id: get_tiling_compensation
  label: Get Tiling Compensation
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x77 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: OFF 001: ON (reply cmd 0x77, type r)"

- id: get_tiling_h_v_monitors
  label: Get Tiling H by V Monitors
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x78 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "3 digits: 2nd = H monitors (1~9), 3rd = V monitors (1~9) (reply cmd 0x78, type r)"

- id: get_tiling_position
  label: Get Tiling Position
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x79 0x30 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "000: OFF, 001~025 position (reply cmd 0x79, type r)"

- id: get_date_year
  label: Get Date Year
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x32 0x59 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "Y-prefix + 2 digits, e.g. Y17 (reply cmd 0x32 type r, value col 2nd byte = 0x59 'Y')"

- id: get_date_month
  label: Get Date Month
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x32 0x4D 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "M-prefix + 2 digits, e.g. M03 (reply cmd 0x32, value 2nd byte = 0x4D 'M')"

- id: get_date_day
  label: Get Date Day
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x32 0x44 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "D-prefix + 2 digits, e.g. D15 (reply cmd 0x32, value 2nd byte = 0x44 'D')"

- id: get_time_hour
  label: Get Time Hour
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x33 0x48 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "H-prefix + 2 digits, e.g. H16 (reply cmd 0x33, value 2nd byte = 0x48 'H')"

- id: get_time_minute
  label: Get Time Minute
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x33 0x4D 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "M-prefix + 2 digits, e.g. M27 (reply cmd 0x33, value 2nd byte = 0x4D 'M')"

- id: get_time_second
  label: Get Time Second
  kind: query
  command: "0x38 {id_hi}{id_lo} 0x67 0x33 0x53 0x30 0x30 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  returns: "S-prefix + 2 digits, e.g. S59 (reply cmd 0x33, value 2nd byte = 0x53 'S')"

- id: ir_pass_through
  label: IR Pass Through (enable mode then listen)
  kind: action
  command: "0x38 {id_hi}{id_lo} 0x73 0x42 0x30 0x30 0x32 0x0D"
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
  notes: "Sets Remote Control mode to 002 (Pass through). Once active, RCU button presses produce 7-byte 'p' (0x70) reply packets - see Events: ir_pass_through_event. VOL+/VOL- repeat while held."

Feedbacks

- id: command_ack
  label: Command Acknowledgement
  type: enum
  values:
    - valid
    - invalid
  notes: "Valid reply: 0x34 {id_hi}{id_lo} 0x2B 0x0D ('+'). Invalid reply: 0x34 {id_hi}{id_lo} 0x2D 0x0D ('-'). Length byte 0x34='4' (4 bytes follow)."

- id: power_state
  label: Power State
  type: enum
  values:
    - ON
    - STBY

- id: input_status
  label: Input Select Status
  type: object
  fields:
    signal_detected: boolean
    input_source: integer
  values_description: "1st digit: 0=no signal, 1=signal detected; 2nd/3rd digit: input source code"

- id: mute_state
  label: Mute State
  type: enum
  values:
    - OFF
    - ON

- id: remote_control_mode
  label: Remote Control Mode
  type: enum
  values:
    - Disable
    - Enable
    - Pass_through

- id: power_lock_state
  label: Power Lock State
  type: enum
  values:
    - Unlock
    - Lock

- id: button_lock_state
  label: Button Lock State
  type: enum
  values:
    - Unlock
    - Lock

- id: menu_lock_state
  label: Menu Lock State
  type: enum
  values:
    - Unlock
    - Lock

Variables

- id: brightness
  label: Brightness
  type: integer
  range: 000~100

- id: backlight
  label: Backlight
  type: integer
  range: 000~100

- id: volume
  label: Volume
  type: integer
  range: 000~100

- id: contrast
  label: Contrast
  type: integer
  range: 000~100

- id: sharpness
  label: Sharpness
  type: integer
  range: 000~100

- id: color
  label: Color
  type: integer
  range: 000~100

- id: tint
  label: Tint
  type: integer
  range: 000~100

- id: backlight_on_off
  label: Backlight On/Off
  type: enum
  values:
    - Off
    - On

- id: color_mode
  label: Color Mode
  type: enum
  values:
    - Normal
    - Warm
    - Cold
    - Personal

- id: surround_sound
  label: Surround Sound
  type: integer
  range: 000~100

- id: bass
  label: Bass
  type: integer
  range: 000~100

- id: treble
  label: Treble
  type: integer
  range: 000~100

- id: balance
  label: Balance
  type: integer
  range: 000~100
  note: "050 is central"

- id: picture_size
  label: Picture Size
  type: enum
  values:
    - FULL_16_9
    - NORMAL_4_3
    - REAL_1_1

- id: osd_language
  label: OSD Language
  type: enum
  values:
    - English
    - French
    - Spanish

- id: pip_mode
  label: PIP Mode
  type: enum
  values:
    - OFF
    - PIP_POP
    - PBP

- id: pip_sound_select
  label: PIP Sound Select
  type: enum
  values:
    - Main
    - Sub

- id: pip_position
  label: PIP Position
  type: enum
  values:
    - Up
    - Down
    - Left
    - Right

- id: pip_input
  label: PIP Input
  type: integer

- id: tiling_mode
  label: Tiling Mode
  type: enum
  values:
    - OFF
    - ON

- id: tiling_compensation
  label: Tiling Compensation
  type: enum
  values:
    - OFF
    - ON

- id: tiling_h_monitors
  label: Tiling H Monitors
  type: integer

- id: tiling_v_monitors
  label: Tiling V Monitors
  type: integer

- id: tiling_position
  label: Tiling Position
  type: integer
  range: 001~025

- id: date
  label: Date
  type: object
  fields:
    year: string
    month: string
    day: string

- id: time
  label: Time
  type: object
  fields:
    hour: string
    minute: string
    second: string

- id: thermal
  label: Thermal
  type: integer
  note: "0~+100 deg C = 000~100; -1~-99 deg C = -01~-99"

- id: operation_hours
  label: Operation Hours
  type: integer
  note: "000,001~999,999 hours; 6-digit integer"

- id: device_name
  label: Device Name
  type: string

- id: mac_address
  label: MAC Address
  type: string
  note: "Format 00:11:22:aa:bb:cc"

- id: ip_address
  label: IP Address
  type: string
  note: "Format xxx.xxx.xxx.xxx"

- id: serial_number
  label: Serial Number
  type: string

- id: fw_version
  label: Firmware Version
  type: string

- id: rs232_version
  label: RS232 Protocol Version
  type: string
  note: "Added in upgrade pass. Source Get-RS232-version example: send 0x38 0x30 0x31 0x67 0x36 0x30 0x30 0x30 0x0D, reply 0x38 0x30 0x31 0x72 0x36 0x33 0x30 0x31 0x0D ('301'). NOTE: cmd byte 0x36 collides with Get-IP-Address (0x36) in source table - likely source typo; flagged for device verification."

Events

# Auto-reply: display sends updated status unsolicited when changed via RCU/front keys/touch.
- id: event_power_change
  label: Power State Changed
  params:
    - name: state
      type: string
      description: ON or STBY

- id: event_input_change
  label: Input Changed
  params:
    - name: input
      type: integer

- id: event_brightness_change
  label: Brightness Changed
  params:
    - name: value
      type: integer

- id: event_backlight_change
  label: Backlight Changed
  params:
    - name: value
      type: integer

- id: event_volume_change
  label: Volume Changed
  params:
    - name: value
      type: integer

- id: event_mute_change
  label: Mute Changed
  params:
    - name: state
      type: string

# IR Pass-Through event: 7-byte packet when RCU key pressed while in Pass-through mode.
# Format: 0x36 {id_hi}{id_lo} 0x70 {rcu_msb} {rcu_lsb} 0x0D
- id: ir_pass_through_event
  label: IR Pass-Through RCU Code
  params:
    - name: id
      type: string
      description: "LFD ID, 2 ASCII digits"
    - name: rcu_code
      type: integer
      description: "RCU key code (hex, see table below). VOL+/VOL- (0x10/0x11) repeat while held."
  notes: |
    RCU pass-through code table (from source):
      01=Key1 02=Key2 03=Key3 04=Key4 05=Key5 06=Key6 07=Key7 08=Key8 09=Key9
      0A=Key0 0B='-' 0C=RECALL(LAST) 0D=INFO(DISPLAY) 0E=(reserved)
      0F=ASPECT(ZOOM,SIZE) 10=VOL+ 11=VOL- 12=MUTE
      13=CH+/BRIGHTNESS+ 14=CH-/BRIGHTNESS- 15=POWER 16=SOURCES(INPUTS)
      17=(reserved) 18=(reserved) 19=SLEEP 1A=MENU 1B=UP 1C=DOWN
      1D=LEFT(-) 1E=RIGHT(+) 1F=OK(ENTER,SET) 20=EXIT
      21~2B=(reserved) 2C=RED(F1) 2D=GREEN(F2) 2E=YELLOW(F3) 2F=BLUE(F4)
    Special POWER sequence under pass-through:
      Display OFF + IR POWER → turn on, then forward POWER code to host.
      Display ON + IR POWER → forward POWER code to host, then turn off.
      SET-POWER-LOCK enabled → Display ignores POWER key.

Macros

- id: wake_on_lan
  label: Wake-on-LAN
  description: "Alternative to Set-Power-On via LAN. 126-byte magic packet."
  command: "0xFF 0xFF 0xFF 0xFF 0xFF 0xFF {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} {MAC x6} 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00"
  params:
    - name: mac
      type: string
      description: "Target MAC address (6 bytes), repeated 16 times in payload"
  notes: "Layout: 6 bytes 0xFF + (MAC × 16) + 24 bytes 0x00 = 126 bytes total."

Safety

confirmation_required_for: []
interlocks:
  - id: power_lock_interlock
    description: "When POWER LOCK is enabled: POWER key on front panel + RCU locked; SET_POWER on/off via RS-232 still works but does NOT release the lock; lock cannot be cleared by OSD reset; will auto AC power-on in power-lock; will NOT enter power saving when no PC signal and will NOT turn off when no video signal after 15 minutes."
  - id: button_lock_interlock
    description: "Button Lock locks all front-panel + RCU keys except POWER. All SET functions still workable via RS-232, including hot-key functions like Mute."
  - id: menu_lock_interlock
    description: "Menu Lock locks MENU key on front panel + RCU. Factory and Hospitality modes (entered via MENU-combined key) are not blocked; alternative entry indicated separately per model."
  - id: remote_control_disable_interlock
    description: "Remote Control Disable locks RCU keys but keeps front-panel buttons workable."
  - id: ir_power_sequence
    description: "Under IR pass-through: Display ON + IR POWER received = forward POWER code to host then turn off; Display OFF + IR POWER received = turn on then forward POWER code to host. Under SET-POWER-LOCK the Display ignores POWER key entirely."

Notes

  • Packet framing is fixed 9 bytes for Set/Get (excluding CR). Length byte is ASCII '8' (0x38). Reply ack is 4 bytes (0x34 + id + type + CR).
  • ID field is 2 ASCII digits, range 01~98, default 01. ID 99 = broadcast to all connected displays; only ID#1 replies.
  • RS-232 hardware: DB9 male or 3.5mm barrel; use null-modem (crossover) cable. DB9 pin 2=RXD, 3=TXD, 5=GND, 9=+5V/2A dongle power. Barrel: tip=TXD, ring=RXD, sleeve=GND.
  • LAN: RJ45, TCP/IP, port 5000 fixed, no cross-subnet, no logon credentials.
  • Value field is always 3 ASCII bytes; for Set-Date/Set-Time the first value byte is a literal prefix char (Y/M/D/H/S).
  • 32-byte reply format used by: operation hours, device name, MAC, IP, serial number, FW version.
  • Auto-reply fires unsolicited on changes to: power, input, brightness, backlight, volume, mute — regardless of how the change was triggered (RCU, front keys, touch).

Spec above. Key upgrades vs on-disk:
- Added `command:` payloads to ALL existing actions (verbatim hex packet templates)
- Added 30 Get-Function query actions (`get_*`) — were entirely missing
- Added `ir_pass_through_event` with full RCU code table (01–2F)
- Added WOL macro command bytes
- Added Safety interlocks for button_lock / menu_lock / remote_control_disable
- Added `rs232_version` variable
- Transport: annotated `auth.type: none` with inference note

Flagged 3 source cmd-byte collisions (backlight/remote, menu_lock/power_status, ip/rs232_version) as UNRESOLVED for device verification — did not invent resolution.

## Provenance

```yaml
source_domains:
  - manuals.viewsonic.com
  - pdf.projectorpoint.co.uk
  - mans.io
  - manua.ls
source_urls:
  - https://manuals.viewsonic.com/IFP32_RS-232_Protocols
  - https://manuals.viewsonic.com/LDM_RS-232_Protocol
  - http://pdf.projectorpoint.co.uk/pub/media/pp_products/displays/viewsonic/cde6502/viewsonic_cde6502-manual.pdf
  - https://mans.io/files/viewer/467356/29
  - https://www.manua.ls/viewsonic/cde6502/manual
retrieved_at: 2026-07-17T03:45:02.011Z
last_checked_at: 2026-07-22T07:56:23.966Z

Verification Summary

verdict: verified
checked_at: 2026-07-22T07:56:23.966Z
matched_actions: 78
action_count: 78
confidence: medium
summary: "All 78 spec actions matched in source protocol tables; transport parameters verified; complete command coverage. (6 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "specific CDE6502 model confirmed only by filename; document is generic IFP32 RS-232 protocol applicable to ViewSonic LFD line. Backlight Set command (0x42) collides with Remote Control Set command (0x42) in the source table — see set_backlight note."
- "CDE6502-specific model confirmation — source doc is generic IFP32 protocol shared across ViewSonic LFD line."
- "Set-Backlight (0x42) and Set-Remote-Control (0x42) share the same command byte in the source table — source ambiguity, needs device verification."
- "Get-Menu-Lock listed with cmd 0x6C, same as Get-Power-Status — likely source typo."
- "Get-IP-Address (0x36) and Get-RS232-Version example (0x36) share cmd byte — likely source typo."
- "Firmware version compatibility range not stated in source."

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