Summary

The Datasat RS20i is a high-end audio/video processor supporting two-way control over RS-232 (DB-style "Control" connector) and TCP/IP on port 14500. Commands are ASCII text framed by a leading @ and terminated with <CR> (0x0D). A password-based authentication layer (AUTH) gates restricted commands over the network; serial commands are not gated by NetCmd password.

Transport

protocols:
  - serial
  - tcp
addressing:
  port: 14500
serial:
  baud_rate: null  # UNRESOLVED: source says baud rate is user-selectable, no default stated
  data_bits: 8
  parity: null  # UNRESOLVED: not stated in source
  stop_bits: null  # UNRESOLVED: not stated in source
  flow_control: null  # UNRESOLVED: not stated in source
auth:
  type: password
  command: "@AUTH {password}\r"
  notes: "Password is checked against Setup password first, then NetCmd. Returns SETUP, OP, or SECERR."

Traits

- powerable       # POWER command present
- routable        # INPUT command present
- queryable       # Many status query commands present
- levelable       # VOLUME, MONITORLEVEL, MUTED, MONITORMUTE present

Actions

- id: input_select
  label: Input Selection
  kind: action
  command: "@INPUT {input}\r"
  params:
    - name: input
      type: string
      description: Input name (must match RS20i input name exactly; spaces allowed)
- id: input_query
  label: Input Selection Query
  kind: query
  command: "@INPUT\r"
  params: []
- id: eq_set
  label: EQ Selection
  kind: action
  command: "@EQSET {eq}\r"
  params:
    - name: eq
      type: string
      description: EQ set name (must match RS20i EQ name exactly)
- id: eq_query
  label: EQ Selection Query
  kind: query
  command: "@EQSET\r"
  params: []
- id: power_set
  label: Standby Power
  kind: action
  command: "@POWER {mode}\r"
  params:
    - name: mode
      type: enum
      values: ["0", "1"]
      description: "0 = power off / sleep; 1 = operating (requires 15s)"
  notes: "On TCP/IP the network connection is reset during power-on; reconnect after."
- id: power_query
  label: Power State Query
  kind: query
  command: "@POWER\r"
  params: []
- id: screensaver_set
  label: Screensaver On/Off
  kind: action
  command: "@SCR {cmd}\r"
  params:
    - name: cmd
      type: enum
      values: [ON, OFF]
      description: "ON = deactivate screensaver; OFF = display screensaver"
- id: run_macro
  label: Execute RS20i Macro
  kind: action
  command: "@RUNMACRO {macro}\r"
  params:
    - name: macro
      type: string
      description: Macro name (must match exactly; spaces allowed)
- id: pulse_output
  label: GPIO Pulse
  kind: action
  command: "@PULSE {output}\r"
  params:
    - name: output
      type: integer
      description: GPIO number 1 to 21 (pulse is fixed 250ms)
- id: volume_set
  label: Master Volume Level
  kind: action
  command: "@VOLUME {value}\r"
  params:
    - name: value
      type: string
      description: "0 (0dB) to 700 (-70.0dB) in 5-unit (0.5dB) steps. Use +N / -N for relative change."
- id: volume_query
  label: Master Volume Query
  kind: query
  command: "@VOLUME\r"
  params: []
- id: muted_set
  label: Master Volume Mute
  kind: action
  command: "@MUTED {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "+"]
      description: "0 = unmute; 1 = mute; + = toggle"
- id: muted_query
  label: Master Mute Query
  kind: query
  command: "@MUTED\r"
  params: []
- id: monitor_level_set
  label: Monitor Level
  kind: action
  command: "@MONITORLEVEL {level}\r"
  params:
    - name: level
      type: integer
      description: 0 (min) to 100 (max)
- id: monitor_level_query
  label: Monitor Level Query
  kind: query
  command: "@MONITORLEVEL\r"
  params: []
- id: monitor_mute_set
  label: Monitor Mute
  kind: action
  command: "@MONITORMUTE {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1"]
      description: "0 = unmute; 1 = mute"
- id: monitor_mute_query
  label: Monitor Mute Query
  kind: query
  command: "@MONITORMUTE\r"
  params: []
- id: noise_seq_set
  label: Channel Noise Sequencer
  kind: action
  command: "@NOISESEQ {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "2", "3"]
      description: "0 = off; 1 = auto sequence; 2 = manual stop; 3 = step to next channel"
- id: noise_seq_query
  label: Channel Noise Sequencer Query
  kind: query
  command: "@NOISESEQ\r"
  params: []
- id: decoder_post
  label: Post Processing Mode
  kind: action
  command: "@DECODERPOST {mode}\r"
  params:
    - name: mode
      type: enum
      values: ["0", "3", "4", "5", "6", "7", "8", "9"]
      description: "0=Off, 3=DTS Neo:X, 4=Dolby PLII/IIx, 5=PLIIz, 6=Auro-3D, 7=Dolby Surround, 8=DTS Neural:X, 9=Stereo Surround"
- id: decoder_post_query
  label: Post Processing Mode Query
  kind: query
  command: "@DECODERPOST\r"
  params: []
- id: neox_mode
  label: Neo:X Mode
  kind: action
  command: "@NEOXMODE {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "2"]
      description: "0 = Cinema; 1 = Music; 2 = Game"
- id: neox_lfe
  label: Generate Subwoofer with Neo:X
  kind: action
  command: "@NEOXLFE {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1"]
      description: "0 = Disable; 1 = Enable"
- id: dtsx_dialog
  label: DTS:X Dialog Boost
  kind: action
  command: "@DTSXDIALOG {n}\r"
  params:
    - name: n
      type: string
      description: "Gain in dB (0-6) OR + / - for relative step by 1"
- id: dpl2_mode
  label: Pro Logic II/IIx Mode
  kind: action
  command: "@DPL2MODE {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "2", "3", "4"]
      description: "0 = Pro Logic; 2 = Music; 3 = Movie; 4 = Dolby Digital EX"
- id: dpl2_dim
  label: PLIIx Dimension
  kind: action
  command: "@DPL2DIM {dim}\r"
  params:
    - name: dim
      type: integer
      description: "-7 (front) to +7 (rear)"
- id: dpl2_cw
  label: PLIIx Center Width
  kind: action
  command: "@DPL2CW {cw}\r"
  params:
    - name: cw
      type: enum
      values: ["0", "1", "2", "3", "4", "5", "6", "7"]
      description: "0=Off; 3=Neutral; 7=Phantom Center"
- id: dpl2_pano
  label: PLIIx Panorama
  kind: action
  command: "@DPL2PANO {pano}\r"
  params:
    - name: pano
      type: enum
      values: ["0", "1"]
      description: "0 = off; 1 = on"
- id: dpl2_he_gain
  label: PLIIz Height Gain
  kind: action
  command: "@DPL2HEGAIN {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "2"]
      description: "0 = Low; 1 = Mid; 2 = High"
- id: auro_strength
  label: Auro-3D Upmix Strength
  kind: action
  command: "@AUROSTRENGTH {value}\r"
  params:
    - name: value
      type: integer
      description: "1 to 16; 16 is highest strength"
- id: auro_preset
  label: Auro-3D Preset
  kind: action
  command: "@AUROPRESET {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "2", "3"]
      description: "0=Small; 1=Medium; 2=Large; 3=Speech"
- id: auro_listen_mode
  label: Auro-3D Listening Mode
  kind: action
  command: "@AUROLM {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1", "2", "3"]
      description: "0=Native; 1=Stereo; 2=Surround; 3=Auro-3D"
- id: dsu_center_spread
  label: Dolby Surround Upmixer Center Spread
  kind: action
  command: "@DSUCENTERSPREAD {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1"]
      description: "0 = disabled; 1 = enabled"
- id: downsample_for_dsu
  label: Downsample for DSU
  kind: action
  command: "@DOWNSAMPLEFORDSU {value}\r"
  params:
    - name: value
      type: enum
      values: ["0", "1"]
      description: "0 = disabled; 1 = enabled"
  notes: "Response echo uses 'DOWNSAMPEFORDSU' (typo in source) on the wire."
- id: truehd_drc
  label: Dolby DRC Setting
  kind: action
  command: "@TRUEHDDRC {drc}\r"
  params:
    - name: drc
      type: enum
      values: ["0", "1", "2"]
      description: "0 = DRC Off; 1 = On / TrueHD-Auto; 2 = DRC On"
- id: post_stereo_gain
  label: Post Stereo Gain
  kind: action
  command: "@POSTSTEREOGAIN {n}\r"
  params:
    - name: n
      type: integer
      description: "Gain/attenuation in dB; -20 to 0"
- id: decoder_dts_lfe_boost
  label: DTS LFE Boost
  kind: action
  command: "@DECODERDTSLFEBOOST {dtslfe}\r"
  params:
    - name: dtslfe
      type: enum
      values: ["0", "1"]
      description: "0 = do not apply 10dB gain for DTS; 1 = apply 10dB gain for DTS"
- id: decoder_pcm_lfe_boost
  label: PCM LFE Boost
  kind: action
  command: "@DECODERPCMLFEBOOST {pcmlfe}\r"
  params:
    - name: pcmlfe
      type: enum
      values: ["0", "1"]
      description: "0 = do not apply 10dB gain for PCM; 1 = apply 10dB gain for PCM"
- id: decoder_dd_lfe_boost
  label: Dolby Digital LFE Boost
  kind: action
  command: "@DECODERDDLFEBOOST {ddlfe}\r"
  params:
    - name: ddlfe
      type: enum
      values: ["0", "1"]
      description: "0 = do not apply 10dB gain for Dolby Digital; 1 = apply 10dB gain for Dolby Digital"
- id: dec_stream
  label: Decoder Stream Description
  kind: query
  command: "@DECSTREAM\r"
  params: []
- id: dec_chans
  label: Decoder Channels
  kind: query
  command: "@DECCHANS\r"
  params: []
- id: input_names
  label: List Input Names
  kind: query
  command: "@INPUTNAMES\r"
  params: []
- id: macro_names
  label: List Macro Names
  kind: query
  command: "@MACRONAMES\r"
  params: []
- id: eq_names
  label: List EQ Setup Names
  kind: query
  command: "@EQNAMES\r"
  params: []
- id: system_info
  label: System Information
  kind: query
  command: "@SYSTEM\r"
  params: []
- id: identify
  label: Identify
  kind: query
  command: "@IDENTIFY\r"
  params: []
- id: model_query
  label: Model
  kind: query
  command: "@MODEL\r"
  params: []
- id: auth
  label: Authorization
  kind: action
  command: "@AUTH {password}\r"
  params:
    - name: password
      type: string
      description: "Setup or NetCmd password (Latin alphanumeric only)"
- id: serial_no
  label: Serial Number
  kind: query
  command: "@SERIALNO\r"
  params: []
- id: mac
  label: MAC Address
  kind: query
  command: "@MAC\r"
  params: []
- id: vidres
  label: Video Resolution
  kind: query
  command: "@VIDRES\r"
  params: []
- id: vidprot
  label: Video Protection
  kind: query
  command: "@VIDPROT\r"
  params: []

Feedbacks

- id: power_state
  type: enum
  values: ["0", "1"]
  source: "@POWER\r"
- id: muted_state
  type: enum
  values: ["0", "1"]
  source: "@MUTED\r"
- id: monitor_mute_state
  type: enum
  values: ["0", "1"]
  source: "@MONITORMUTE\r"
- id: volume_level
  type: integer
  range: [0, 700]
  source: "@VOLUME\r"
- id: monitor_level
  type: integer
  range: [0, 100]
  source: "@MONITORLEVEL\r"
- id: screensaver_ack
  type: string
  value: "OK"
  source: "@SCR {ON|OFF}\r"
- id: macro_ack
  type: string
  values: ["OK", "ERR no macro"]
  source: "@RUNMACRO {macro}\r"
- id: pulse_ack
  type: string
  value: "OK"
  source: "@PULSE {output}\r"
- id: auth_state
  type: enum
  values: ["SETUP", "OP", "SECERR"]
  source: "@AUTH {password}\r"
- id: model
  type: string
  value: "RS20i"
  source: "@MODEL\r"
- id: dec_stream_text
  type: string
  source: "@DECSTREAM\r"
- id: dec_chans_text
  type: string
  source: "@DECCHANS\r"
- id: input_names_list
  type: string
  source: "@INPUTNAMES\r"
- id: macro_names_list
  type: string
  source: "@MACRONAMES\r"
- id: eq_names_list
  type: string
  source: "@EQNAMES\r"
- id: system_multiline
  type: string
  source: "@SYSTEM\r"
  notes: "Multi-field: VER {version} LF, VERDATE {date} LF, MAC {mac} CR"
- id: identify_payload
  type: string
  source: "@IDENTIFY\r"
  notes: "AP20 {ip},{info2},{info1},{screen}"
- id: serial_no
  type: string
  source: "@SERIALNO\r"
- id: mac_address
  type: string
  source: "@MAC\r"
- id: video_resolution
  type: string
  source: "@VIDRES\r"
- id: video_protection
  type: string
  source: "@VIDPROT\r"

Variables

# UNRESOLVED: source does not document any free-form settable parameters
# outside the per-command enums/ranges enumerated above.

Events

# UNRESOLVED: source does not document unsolicited notifications.

Macros

# UNRESOLVED: user-defined macros are executed by @RUNMACRO {name};
# the list is queried via @MACRONAMES. No built-in macros documented.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no explicit safety warnings, interlocks,
# or power-on sequencing requirements beyond "operating mode requires 15s".

Notes

  • All commands are framed @COMMAND [arg1] [arg2] terminated by <CR> (0x0D). Responses are ASCII terminated by <CR>.
  • For Read/Write commands, omit the final argument to read without changing.
  • TCP port is 14500. Serial: 8 data bits, baud rate user-selectable (System -> Automation -> Serial). Serial Command Mode must be set to "RS20i" for commands to be recognized.
  • NetCmd password is required over TCP/IP for many commands; the AUTH command must be sent first, and authorization is valid for the duration of the TCP connection. Setup password also exists for setup-level commands (not in scope of this operator document). Serial commands are NOT gated by NetCmd password.
  • Sending AUTH with wrong password (or sending a protected command without AUTH first) returns "SECERR" and the command is a no-op.
  • Power-on over TCP/IP drops the network connection; client must reconnect.
  • @DOWNSAMPLEFORDSU response echoes the misspelled "DOWNSAMPEFORDSU" on the wire; senders must accept this echo.
  • @AUTH and passwords accept Latin alphanumeric characters only.
  • Setup Password (front-panel or remote setup) does NOT affect operator-level commands documented here.

Provenance

source_domains:
  - datasatdigital.com
source_urls:
  - https://www.datasatdigital.com/download/53/rs20i/207628/tn-h413-01-rev-b1-rs20i-control.pdf
retrieved_at: 2026-05-04T15:21:18.866Z
last_checked_at: 2026-06-02T21:41:21.252Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T21:41:21.252Z
matched_actions: 52
action_count: 52
confidence: medium
summary: "All 52 spec actions matched literally in source; transport values (port 14500, serial 8 data bits) verified; complete source command coverage. (8 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "serial default baud rate, parity, stop bits, flow control not stated in source (baud rate is user-selectable)"
- "source says baud rate is user-selectable, no default stated"
- "not stated in source"
- "source does not document any free-form settable parameters"
- "source does not document unsolicited notifications."
- "user-defined macros are executed by @RUNMACRO {name};"
- "source contains no explicit safety warnings, interlocks,"
- "serial default baud rate, parity, stop bits, flow control not stated in source."

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