Summary

RS-232C control protocol for the Viewsonic CDX5562-series commercial display / digital signage. Specifies 9-byte framed Set/Get command packets, fixed 9600 8N1 serial, DSUB 9-pin (or 2.5 mm barrel) connection, and an IR pass-through mode that forwards RCU key codes to the host.

Transport

protocols:
  - serial
serial:
  baud_rate: 9600       # source: "9600bps (fixed)"
  data_bits: 8          # source: "8 bits (fixed)"
  parity: none          # source: "Parity: None (fixed)"
  stop_bits: 1          # source: "Stop Bits: 1 (fixed)"
  flow_control: none    # UNRESOLVED: flow control not stated in source
  connector: DSUB-9 male  # source: "DSUB 9-Pin Male"; 2.5 mm barrel documented as special case
  cable: null-modem (crossover)  # source: "Use of crossover (null modem) cable required"
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable    # inferred: power on/off commands present
- routable     # inferred: input-select commands present
- queryable    # inferred: Get-Function queries present
- levelable    # inferred: volume/brightness/contrast/treble/bass control present

Actions

All Set/Get commands share the same 9-byte frame:

Length  ID     Type  Command  Value1 Value2 Value3  CR
0x38    0x3n m 0x67/0x73  0xnn  0x3n 0x3n  0x3n  0x0D

Where Length is the ASCII byte 0x38 (the digit "8"); ID is two ASCII digits "01""98" (broadcast "99" receives no reply); Type is "s" (0x73) for Set or "g" (0x67) for Get; Command is one ASCII byte; Value[1..3] is three ASCII bytes (Set) or "000" (Get); CR is 0x0D. Set reply is 5 bytes: 0x34 ID "+"|"-" 0x0D. Get reply is 9 bytes: 0x38 ID "r"|"-" Command V1 V2 V3 0x0D. Acknowledgement is "+" (0x2B), rejection is "-" (0x2D).

Example (Set Brightness = 76 on display ID 02): bytes 38 30 32 73 24 30 37 36 0D.

# --- Set-Function commands (command type "s") ---

- id: set_power
  label: Power On/Off (Standby)
  kind: action
  command: "8{id}s!{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID ("01"-"98"; "99" = broadcast, no reply)
    - name: value
      type: string
      description: Three ASCII bytes - "000" = STBY, "001" = ON
  notes: Command code ASCII "!" (0x21). Source: "Power on/off (standby)".

- id: set_input_select
  label: Input Select
  kind: action
  command: "8{id}s\"{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - 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/SDM)/HDBT,
        008:Internal memory, 009:DP, 00A:Embedded/Main (Android).
        Source notes the 2nd digit of duplicate source codes flags an extension.
  notes: Command code ASCII '"' (0x22).

- id: set_brightness
  label: Brightness
  kind: action
  command: "8{id}s${value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "$" (0x24).

- id: set_power_lock
  label: Power Lock
  kind: action
  command: "8{id}s4{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000" = Unlock, "001" = Lock
  notes: Command code ASCII "4" (0x34). Source: "*See note in details".

- id: set_volume
  label: Volume
  kind: action
  command: "8{id}s5{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - "000"-"100" for absolute level,
        "900" = Volume down (-1), "901" = Volume up (+1)
  notes: Command code ASCII "5" (0x35).

- id: set_mute
  label: Mute
  kind: action
  command: "8{id}s6{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000" = OFF, "001" = ON (mute)
  notes: Command code ASCII "6" (0x36).

- id: set_button_lock
  label: Button Lock
  kind: action
  command: "8{id}s8{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000" = Unlock, "001" = Lock
  notes: Command code ASCII "8" (0x38). Source: "*See note in details".

- id: set_menu_lock
  label: Menu Lock
  kind: action
  command: "8{id}s>{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000" = Unlock, "001" = Lock
  notes: Command code ASCII ">" (0x3E). Source: "*See note in details".

- id: set_remote_control
  label: Remote Control Mode
  kind: action
  command: "8{id}sB{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - "000" = Disable, "001" = Enable,
        "002" = Pass-through. Pass-through: display bypasses RCU
        code to connected device via RS232 but does not react itself.
  notes: Command code ASCII "B" (0x42).

- id: set_contrast
  label: Contrast
  kind: action
  command: "8{id}s#{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "#" (0x23).

- id: set_sharpness
  label: Sharpness
  kind: action
  command: "8{id}s%{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "%" (0x25).

- id: set_color
  label: Color
  kind: action
  command: "8{id}s&{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "&" (0x26).

- id: set_tint
  label: Tint
  kind: action
  command: "8{id}s'{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "'" (0x27).

- id: set_color_mode
  label: Color Mode
  kind: action
  command: "8{id}s){value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=Normal, "001"=Warm, "002"=Cold, "003"=Personal
  notes: Command code ASCII ")" (0x29).

- id: set_surround_sound
  label: Surround Sound
  kind: action
  command: "8{id}s-{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000" = Off, "001" = On
  notes: Command code ASCII "-" (0x2D).

- id: set_bass
  label: Bass
  kind: action
  command: "8{id}s.{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "." (0x2E).

- id: set_treble
  label: Treble
  kind: action
  command: "8{id}s/{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100"
  notes: Command code ASCII "/" (0x2F).

- id: set_balance
  label: Balance
  kind: action
  command: "8{id}s0{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"100" (050 = central)
  notes: Command code ASCII "0" (0x30).

- id: set_picture_size
  label: Picture Size
  kind: action
  command: "8{id}s1{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=FULL (16:9), "001"=NORMAL (4:3), "002"=REAL (1:1). Source marks REAL as "3.1.0".
  notes: Command code ASCII "1" (0x31).

- id: set_osd_language
  label: OSD Language
  kind: action
  command: "8{id}s2{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=English, "001"=French, "002"=Spanish (model-dependent extension)
  notes: Command code ASCII "2" (0x32).

- id: set_pip_mode
  label: PIP Mode
  kind: action
  command: "8{id}s9{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=OFF, "001"=PIP (POP), "002"=PBP
  notes: Command code ASCII "9" (0x39).

- id: set_pip_sound_select
  label: PIP Sound Select
  kind: action
  command: "8{id}s:{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=Main, "001"=PIP (POP)
  notes: Command code ASCII ":" (0x3A).

- id: set_pip_position
  label: PIP Position
  kind: action
  command: "8{id}s;{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=Up, "001"=Down, "002"=Left, "003"=Right
  notes: Command code ASCII ";" (0x3B).

- id: set_pip_input
  label: PIP Input
  kind: action
  command: "8{id}s7{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - same code table as set_input_select
  notes: Command code ASCII "7" (0x37). Source marks command as "37*2.9" (likely a version note).

- id: set_number
  label: Number
  kind: action
  command: "8{id}s@{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "000"-"009"
  notes: Command code ASCII "@" (0x40).

- id: set_keypad
  label: Key Pad
  kind: action
  command: "8{id}sA{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - "000"=UP, "001"=DOWN, "002"=LEFT,
        "003"=RIGHT, "004"=ENTER, "005"=INPUT, "006"=MENU/(EXIT),
        "007"=EXIT
  notes: Command code ASCII "A" (0x41).

- id: set_tiling_mode
  label: Tiling Mode (video wall)
  kind: action
  command: "8{id}sP{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=OFF, "001"=ON
  notes: Command code ASCII "P" (0x50).

- id: set_tiling_compensation
  label: Tiling Compensation (bezel width)
  kind: action
  command: "8{id}sQ{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - "000"=OFF, "001"=ON
  notes: Command code ASCII "Q" (0x51).

- id: set_tiling_h_by_v
  label: Tiling H by V Monitors
  kind: action
  command: "8{id}sR{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - 2nd digit is H monitor count
        ("1"-"9"), 3rd digit is V monitor count ("1"-"9").
        Example "132" = 1 H x 3 V.
  notes: Command code ASCII "R" (0x52).

- id: set_tiling_position
  label: Tiling Position
  kind: action
  command: "8{id}sS{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes, "001"-"025" - screen position to copy to the addressed display
  notes: Command code ASCII "S" (0x53).

- id: set_date
  label: Date (Year/Month/Day)
  kind: action
  command: "8{id}sV{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - prefix with field tag then 2 digits:
        Y17-Y99 for Year (last 2 digits of 20YY),
        M01-M12 for Month, D01-D31 for Day.
  notes: Command code ASCII "V" (0x56).

- id: set_time
  label: Time (Hour/Min/Sec)
  kind: action
  command: "8{id}sW{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: |
        Three ASCII bytes - prefix with field tag then 2 digits:
        H00-H23 (24-hr Hour), M00-M59 (Minute), S00-S59 (Second).
  notes: Command code ASCII "W" (0x57).

# --- Get-Function commands (command type "g") ---

- id: get_contrast
  label: Get Contrast
  kind: query
  command: "8{id}ga0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "a" (0x61). Response value range "000"-"100".

- id: get_brightness
  label: Get Brightness
  kind: query
  command: "8{id}gb0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "b" (0x62). Response value range "000"-"100".

- id: get_sharpness
  label: Get Sharpness
  kind: query
  command: "8{id}gc0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "c" (0x63). Response value range "000"-"100".

- id: get_color
  label: Get Color
  kind: query
  command: "8{id}gd0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "d" (0x64). Response value range "000"-"100".

- id: get_tint
  label: Get Tint
  kind: query
  command: "8{id}ge0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "e" (0x65). Response value range "000"-"100".

- id: get_volume
  label: Get Volume
  kind: query
  command: "8{id}gf0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "f" (0x66). Response value range "000"-"100".

- id: get_mute
  label: Get Mute
  kind: query
  command: "8{id}gg0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "g" (0x67). Response "000"=OFF, "001"=ON.

- id: get_input_select
  label: Get Input Select
  kind: query
  command: "8{id}gj0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "j" (0x6A). Response range per set_input_select table (source truncated at "000~").

- id: get_power_status
  label: Get Power Status (ON/STBY)
  kind: query
  command: "8{id}gl0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "l" (0x6C). Response "000"=STBY, "001"=ON.

- id: get_remote_control
  label: Get Remote Control Mode
  kind: query
  command: "8{id}gn0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "n" (0x6E). Response "000"=Disable, "001"=Enable, "002"=Pass-through.

- id: get_power_lock
  label: Get Power Lock
  kind: query
  command: "8{id}go0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "o" (0x6F). Response "000"=Unlock, "001"=Lock.

- id: get_button_lock
  label: Get Button Lock
  kind: query
  command: "8{id}gp0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "p" (0x70). Response "000"=Unlock, "001"=Lock.

- id: get_menu_lock
  label: Get Menu Lock
  kind: query
  command: "8{id}gq0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "q" (0x71). Response "000"=Unlock, "001"=Lock.

- id: get_pip_mode
  label: Get PIP Mode
  kind: query
  command: "8{id}gt0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "t" (0x74). Response "000"=OFF, "001"=PIP (POP), "002"=PBP.

- id: get_pip_input
  label: Get PIP Input
  kind: query
  command: "8{id}gu0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "u" (0x75). Response range per set_input_select table (source truncated at "000 ~").

- id: get_tiling_mode
  label: Get Tiling Mode
  kind: query
  command: "8{id}gv0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "v" (0x76). Response "000"=OFF, "001"=ON.

- id: get_tiling_compensation
  label: Get Tiling Compensation
  kind: query
  command: "8{id}gw0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "w" (0x77). Response "000"=OFF, "001"=ON.

- id: get_tiling_h_by_v
  label: Get Tiling H by V Monitors
  kind: query
  command: "8{id}gx0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: |
    Command code ASCII "x" (0x78). Response: 2nd digit = H monitors
    "1"-"9", 3rd digit = V monitors "1"-"9".

- id: get_tiling_position
  label: Get Tiling Position
  kind: query
  command: "8{id}gy0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "y" (0x79). Response "000"=OFF, "001"-"025"=position.

- id: get_ack
  label: Get ACK (link test)
  kind: query
  command: "8{id}gz0000x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
  notes: Command code ASCII "z" (0x7A). Used to test the communication link. Response always "000".

- id: get_thermal
  label: Get Thermal (temperature)
  kind: query
  command: "8{id}g0{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - typically "000"
  notes: |
    Command code ASCII "0" (0x30). Specific models only.
    Response "000"-"100" = 0 to +100 deg C, "-01" to "-99" = -1 to -99 deg C.

- id: get_power_on_off_log
  label: Get Power On/Off Log
  kind: query
  command: "8{id}g1{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - typically "000"
  notes: Command code ASCII "1" (0x31). Specific models only. Response format referenced by source note.

- id: get_date
  label: Get Date (Year/Month/Day)
  kind: query
  command: "8{id}g2{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - typically "000"
  notes: |
    Command code ASCII "2" (0x32). Specific models only.
    Response prefix indicates field: "Y17"-"Y99" Year, "M01"-"M12" Month,
    "D01"-"D31" Day.

- id: get_time
  label: Get Time (Hour/Min/Sec)
  kind: query
  command: "8{id}g3{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - typically "000"
  notes: |
    Command code ASCII "3" (0x33). Specific models only.
    Response prefix indicates field: "H00"-"H23" Hour, "M00"-"M59" Minute,
    "S00"-"S59" Second.

- id: get_rs232_version
  label: Get RS232 Protocol Version
  kind: query
  command: "8{id}g6{value}0x0D"
  params:
    - name: id
      type: string
      description: Two-ASCII-digit display ID
    - name: value
      type: string
      description: Three ASCII bytes - typically "000"
  notes: |
    Command code ASCII "6" (0x36). Response range "001~" - version
    formatted as "0.0.1" through "9.9.9".

Feedbacks

- id: power_state
  type: enum
  values: [stby, on]
  source: get_power_status
- id: mute_state
  type: enum
  values: [off, on]
  source: get_mute
- id: input_source
  type: string
  description: |
    Three-ASCII-byte code per set_input_select table (000/001/002/003/004/014/024/034/005/006/016/026/007/008/009/00A).
  source: get_input_select
- id: remote_control_mode
  type: enum
  values: [disable, enable, pass_through]
  source: get_remote_control
- id: lock_state
  type: enum
  values: [unlock, lock]
  source: get_power_lock / get_button_lock / get_menu_lock
- id: tiling_mode_state
  type: enum
  values: [off, on]
  source: get_tiling_mode
- id: tiling_compensation_state
  type: enum
  values: [off, on]
  source: get_tiling_compensation
- id: tiling_geometry
  type: string
  description: Three ASCII bytes - 2nd digit H monitors (1-9), 3rd digit V monitors (1-9)
  source: get_tiling_h_by_v
- id: tiling_position_state
  type: string
  description: "000"=OFF or "001"-"025" position
  source: get_tiling_position
- id: pip_mode_state
  type: enum
  values: [off, pip_pop, pbp]
  source: get_pip_mode
- id: pip_input_state
  type: string
  description: Three-ASCII-byte code per set_input_select table
  source: get_pip_input
- id: ack_link
  type: string
  description: Always "000" when link is healthy
  source: get_ack
- id: thermal_celsius
  type: integer
  description: |
    0-100 from response "000"-"100"; negative 1-99 from response "-01"-"-99".
    Specific models only.
  source: get_thermal
- id: rs232_version
  type: string
  description: Protocol version string in 0.0.1 - 9.9.9 format
  source: get_rs232_version
- id: set_command_ack
  type: enum
  values: [valid, invalid]
  description: |
    Valid (Command Type "+", 0x2B) or invalid (Command Type "-", 0x2D)
    reply to any Set command. Reply is 5 bytes: 0x34 ID 0x2B|0x2D 0x0D.
  source: set-command reply
- id: ir_pass_through_key
  type: string
  description: |
    Unsolicited 7-byte packet (Command Type "p", 0x70) sent when the
    display is in Remote Control Pass-through mode. Packet layout:
    0x36 ID 0x70 RCU_Code1 RCU_Code2 0x0D. RCU_Code2 is the MSB,
    RCU_Code1 the LSB. See the IR code table in the source document
    for the full key-to-code map (1=0x01 ... 0=0x0A, VOL+=0x10,
    VOL-=0x11, MUTE=0x12, POWER=0x15, SOURCES=0x16, MENU=0x1A,
    UP=0x1B, DOWN=0x1C, LEFT=0x1D, RIGHT=0x1E, OK=0x1F, EXIT=0x20,
    RED/F1=0x2C, GREEN/F2=0x2D, YELLOW/F3=0x2E, BLUE/F4=0x2F, ...).
  source: IR pass-through reply

Variables

- id: contrast
  type: integer
  range: [0, 100]
  description: Contrast level
  source: get_contrast / set_contrast
- id: brightness
  type: integer
  range: [0, 100]
  description: Brightness level
  source: get_brightness / set_brightness
- id: sharpness
  type: integer
  range: [0, 100]
  description: Sharpness level
  source: get_sharpness / set_sharpness
- id: color
  type: integer
  range: [0, 100]
  description: Color saturation level
  source: get_color / set_color
- id: tint
  type: integer
  range: [0, 100]
  description: Tint level
  source: get_tint / set_tint
- id: volume
  type: integer
  range: [0, 100]
  description: |
    Volume level. Use set_volume values 900/901 for relative -1/+1 steps.
  source: get_volume / set_volume
- id: bass
  type: integer
  range: [0, 100]
  source: set_bass
- id: treble
  type: integer
  range: [0, 100]
  source: set_treble
- id: balance
  type: integer
  range: [0, 100]
  description: 050 = central
  source: set_balance
- id: color_mode
  type: enum
  values: [normal, warm, cold, personal]
  source: set_color_mode
- id: surround_sound
  type: enum
  values: [off, on]
  source: set_surround_sound
- id: picture_size
  type: enum
  values: [full_16_9, normal_4_3, real_1_1]
  source: set_picture_size
- id: osd_language
  type: enum
  values: [english, french, spanish]
  description: Model-dependent - may be extended
  source: set_osd_language
- id: date
  type: object
  description: |
    Year/Month/Day, each field a 2-digit decimal. Set/get via single
    command code (sV / g2) with a Y/M/D prefix in the value/response.
  fields: [year, month, day]
  source: set_date / get_date
- id: time
  type: object
  description: |
    Hour (00-23, 24-hr)/Minute(00-59)/Second(00-59). Set/get via
    single command code (sW / g3) with a H/M/S prefix in the
    value/response.
  fields: [hour, minute, second]
  source: set_time / get_time
- id: number_input
  type: integer
  range: [0, 9]
  description: Numeric keypad entry 000-009
  source: set_number

Events

- id: ir_pass_through
  description: |
    When the display is in Remote Control Pass-through mode (set via
    set_remote_control value 002), the display forwards every RCU key
    press to the host as a 7-byte packet:

      0x36 ID 0x70 RCU_MSB RCU_LSB 0x0D

    where ID is the display ID and the two RCU bytes encode the
    pressed key (see source IR code table). POWER key has a special
    sequence - see Safety section.
  packet_format: "0x36 {id} 0x70 {rcu_msb} {rcu_lsb} 0x0D"
- id: set_command_reply
  description: |
    Every Set command produces a 5-byte reply:
    0x34 ID 0x2B 0x0D  (valid, "+" = 0x2B)
    0x34 ID 0x2D 0x0D  (invalid, "-" = 0x2D)
  packet_format: "0x34 {id} 0x2B|0x2D 0x0D"
- id: get_command_reply
  description: |
    Every Get command produces a 9-byte reply on success (Command
    Type "r", 0x72): 0x38 ID 0x72 CMD V1 V2 V3 0x0D. On error the
    reply collapses to 5 bytes: 0x34 ID 0x2D 0x0D ("-" = invalid).
  packet_format: "0x38 {id} 0x72 {cmd} {v1} {v2} {v3} 0x0D"

Macros

# Multi-step sequences described explicitly in source.
# UNRESOLVED: source does not document composite macros; only single-command
# Set/Get functions and the IR pass-through mode are specified. IR press-and-hold
# for VOLUME UP/DOWN "will repeatedly output when you press and hold the keys"
# is the only multi-frame behaviour noted (treat as repeated single-key events).

Safety

confirmation_required_for:
  - set_power           # source: power on/off (standby)
interlocks:
  - id: power_lock
    description: |
      When set_power_lock is enabled (value 001), the display ignores the
      POWER key. IR pass-through of the POWER key is also suppressed in
      this state.
    source: set_power_lock; IR pass-through note 2-3
  - id: power_ir_sequence
    description: |
      In IR pass-through mode, POWER has a special two-step sequence:
      (a) display OFF + IR POWER -> display turns ON, then forwards POWER
          code to host;
      (b) display ON + IR POWER -> display forwards POWER code to host,
          then turns OFF.
      The PC host receives the POWER code in both cases and can decide
      whether to keep the display on.
    source: IR pass-through note 2-1, 2-2
# UNRESOLVED: source contains no electrical-safety, fire, or shock warnings;
# no firmware downgrade or recovery procedure is documented.

Notes

Command frame (9 bytes). Every Set and Get command follows the layout Length ID Type Command V1 V2 V3 CR where Length is the literal ASCII byte 0x38 (digit "8"), ID is two ASCII digits "01""98", Type is "s" / "g" / "+" / "-" / "r" / "p", Command is one ASCII byte per the tables, V1–V3 are three ASCII bytes, and CR is 0x0D. Get sends V1–V3 as "000"; the response echoes the actual value. Set reply is 5 bytes; Get reply is 9 bytes (or 5 bytes on error).

ID 99 broadcast. Sending to ID "99" writes all displays; no reply is generated. With multiple displays, only the unit with ID "01" is required to acknowledge on the host's behalf.

Source table duplication. The Get-Function tables list four commands (contrast/sharpness/color/tint) in both the "Basic function" and "Optional function" tables with identical opcodes. They are the same commands; the spec lists them once each. The same is true of the four tiling Get commands (mode/compensation/H-by-V/position), which also appear in both tables.

Set-Date / Set-Time are single commands with field-tagged values. The Set-Date Year/Month/Day and Set-Time Hour/Min/Sec each use a single command code (V / W) with a Y/M/D or H/M/S prefix in the value bytes. The spec exposes them as one action with the prefix documented in params.

Exceptions for VT2405LED-1 and VT3205LED. The source notes that those models (not part of the CDX5562 series) have a different "Power on" reply (0x32 0x2B 0x0D = "2+<CR>") and a different "Power STBY status" reply (0x36 0x72 0x6C 0x30 0x30 0x30 0x0D = "6rl000<CR>"). These exceptions are not applicable to the CDX5562 series and are listed here only for completeness.

Cable and connector. Source specifies a crossover (null-modem) DB9 cable, male connector on the display. A 2.5 mm barrel connector variant is documented as a special case with tip=TXD, ring=RXD, sleeve=GND.

Volume relative steps. Volume "900" decrements by 1 and "901" increments by 1; absolute volume is "000""100".

Tiling H-by-V value format. The 2nd ASCII digit of the value specifies H monitor count and the 3rd digit specifies V monitor count, each "1""9". Example "132" = 1 H x 3 V.

Provenance

source_domains:
  - viewsonicglobal.com
  - manualslib.com
  - viewsonic.com
source_urls:
  - https://www.viewsonicglobal.com/public/products_download/user_guide/CD/CDX5560_CDX5562/CDX5560_CDX5562_UG_ENG.pdf
  - "https://www.manualslib.com/manual/3900742/Viewsonic-Cdx5562.html#manual"
  - https://www.viewsonic.com/us/cdx5562.html
retrieved_at: 2026-04-29T10:24:07.729Z
last_checked_at: 2026-06-02T22:16:08.457Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T22:16:08.457Z
matched_actions: 57
action_count: 57
confidence: medium
summary: "All 57 spec actions traced to source (dip-safe re-verify). (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "firmware version compatibility not stated; model-family coverage (e.g. CDX5562 vs CDX5562-1 sub-variants) not enumerated beyond product label."
- "flow control not stated in source"
- "source does not document composite macros; only single-command"
- "source contains no electrical-safety, fire, or shock warnings;"
- "firmware version compatibility not stated in source; per-model availability of get_thermal / get_power_on_off_log / get_date / get_time is flagged in source as \"For specific models only\" but the model list is not enumerated; flow control (RTS/CTS, XON/XOFF) is not stated; maximum packet rate / inter-frame timing is not stated."

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