Summary

Datasat AP25 (and AP20) audio processor controllable via RS-232 ("Control" connector) and Ethernet TCP/IP (port 14500). This spec covers the ASCII Remote Command API documented in TN-H413 rev. D: system inquiry, health/board telemetry, format selection, macro execution, and master/monitor level & mute control. Commands begin with @, arguments space-separated, terminated by <CR> (0x0D).

Transport

protocols:
  - tcp
  - serial
addressing:
  port: 14500
serial:
  baud_rate: null  # UNRESOLVED: user-selectable via System > Automation > Serial menu; no value stated in source
  data_bits: null  # UNRESOLVED: not stated in source
  parity: null  # UNRESOLVED: not stated in source
  stop_bits: null  # UNRESOLVED: not stated in source
  flow_control: null  # UNRESOLVED: not stated in source
# Serial Command Mode must be set to "AP20" in menu (source: System > Automation > Serial)
auth:
  type: password  # source describes AUTH command; AP20/AP25 "may be protected" by NetCmd Password (network) and/or Setup Password (setup commands). Auth optional - only required if a password is configured. AUTH valid only for duration of TCP/IP connection. NetCmd Password does NOT protect serial; Setup Password protects setup commands over all transports.

Traits

- queryable  # inferred: SYSTEM, IDENTIFY, HEALTH, BOARDINFO, SERIALNO, MAC, FADER/MUTED/MONITORLEVEL/MONITORMUTE reads, FORMAT read
- levelable  # inferred: FADER, MONITORLEVEL settable levels

Actions

# Command format: @COMMAND [ARG1] [ARG2]<CR>  (CR = 0x0D)
# All commands shown below include the leading '@' prefix and trailing <CR> per source.
# "Read/Write" commands: omit final value argument to read instead of write.

- id: system_info
  label: System Information
  kind: query
  command: "@SYSTEM<CR>"
  params: []
  response: "VER [Version]<LF> VERDATE [Date]<LF> MAC [Mac Address]<CR><\\0>"
  notes: "Returns software version, software date/time, and MAC address."

- id: identify
  label: Identify
  kind: query
  command: "@IDENTIFY<cr>"
  params: []
  response: "AP20 [IP] [Circuit] [Theater] [Screen]<cr>"
  notes: "Discovery protocol. Returns AP20, IP address, Circuit/Theater/Screen info."

- id: health_temperature
  label: Health Temperature
  kind: query
  command: "@HEALTH TEMPERATURE<cr>"
  params: []
  response: "HEALTH TEMPERATURE t1,t2,t3"
  notes: "t1=H331 board temp, t2=H332 board temp, t3=H335 board temp (Celsius)."

- id: health_h331volts
  label: Health H331 Voltages
  kind: query
  command: "@HEALTH H331VOLTS<cr>"
  params: []
  response: "HEALTH H331VOLTS <vok>,<ref>,<5v>,<+15v>,<-15v>,<-5V>"
  notes: "<vok>=1 if all voltages within limits, else 0. Example: HEALTH H331VOLTS 1,3.18,4.99,15.0,-15.0,-5.0"

- id: health_h332volts
  label: Health H332 Voltages
  kind: query
  command: "@HEALTH H332VOLTS<cr>"
  params: []
  response: "HEALTH H332VOLTS <vok>,<ref>,<5v>,<+15v>,<-15v>,<-5V>"
  notes: "If H332 board absent, response: HEALTH H332VOLTS NA. Example: HEALTH H332VOLTS 1,3.18,4.99,15.0,-15.0,-5.0"

- id: health_h335volts
  label: Health H335 Voltages
  kind: query
  command: "@HEALTH H335VOLTS<cr>"
  params: []
  response: "HEALTH H335VOLTS <vok>,<ref>,<1.3v>"
  notes: "<vok>=1 if within limits else 0. Example: HEALTH H335VOLTS 1,3.13,1.32"

- id: health_h336volts
  label: Health H336 Voltages
  kind: query
  command: "@HEALTH H336VOLTS<cr>"
  params: []
  response: "HEALTH H336VOLTS <vok>,<ref>,<+5V>,<+15V>,<-15V>,<48V>,<vcpu>"
  notes: "<48V> is mic phantom power (0 if off). <vcpu>=1 if CPU power in limits else 0. Example: HEALTH H336VOLTS 1,3.39,5.10,15.0,-14.4,0.0,1"

- id: health_h338volts
  label: Health H338 Voltages
  kind: query
  command: "@HEALTH H338VOLTS<cr>"
  params: []
  response: "HEALTH H338VOLTS <vok>,<ref>,<5v>,<+10V>,<-10V>"
  notes: "If H338 board absent, response: HEALTH H338VOLTS NA. Example: HEALTH H338VOLTS 0,3.18,5.02,10.56,-10.48"

- id: boardinfo
  label: Board Information
  kind: query
  command: "@BOARDINFO<cr>"
  params: []
  response: |
    H331,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    H332,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    H335,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    H337In,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    H337In,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    H338,[ID],[AD],[R],[V],[CS],[FW],[FCS],
    HDMI,[ID],[AD],[R],[V],[CS],[FW],[FCS],
  notes: "Lists present boards (H331, H332, H335, H337In, H337Out, H338, HDMI) with hardware/firmware versions. [ID]=Board ID, [AD]=Slot Address, [R]=HW revision, [V]=Loader version, [CS]=Loader Checksum, [FW]=Firmware version, [FCS]=Firmware Checksum."

- id: auth
  label: Authorization
  kind: query
  command: "@AUTH [Password]<cr>"
  params:
    - name: Password
      type: string
      description: "Operator-level (NetCmd) or Setup-level password. Matched against Setup password first, then Operator password."
  response: "AUTH [SETUP|OP|SECERR]<cr>"
  notes: "Must be issued before any password-protected command or that command results in no action and the AP20/AP25 returns 'SECERR'. Valid only for duration of TCP/IP connection. SETUP=Setup Level granted, OP=Operator Level granted, SECERR=neither granted."

- id: serialno
  label: Serial Number
  kind: query
  command: "@SERIALNO<CR>"
  params: []
  response: "SERIALNO [SN]<CR>"
  notes: "Reads unit serial number programmed at manufacturing."

- id: mac
  label: MAC Address
  kind: query
  command: "@MAC<CR>"
  params: []
  response: "MAC [Mac adr]<CR>"
  notes: "Reads 12-digit network interface MAC address. Example: send MAC, receive MAC 080077124578."

- id: format
  label: Format Selection
  kind: action
  command: "@FORMAT [New Format]<CR>"
  params:
    - name: New Format
      type: string
      description: "Format name to select; must match exactly the format name on AP20/AP25. Spaces may be used within the name. Omit to read current format."
  response: "FORMAT [Format]<CR>"
  notes: "Read/Write. Example: send 'FORMAT Digital Cinema', receive 'FORMAT Digital Cinema'."

- id: runmacro
  label: Execute Macro
  kind: action
  command: "@RUNMACRO [Macro]<CR>"
  params:
    - name: Macro
      type: string
      description: "Macro name to execute; must match exactly the macro name on AP20/AP25. Spaces may be used within the name."
  response: "[OK or ERR no macro]<CR>"
  notes: "Write. OK=macro found and executed. ERR no macro=macro does not exist. Example: send 'RUNMACRO Auto1', receive 'OK'."

- id: fader
  label: Master Fader Level
  kind: action
  command: "@FADER [New Level]<CR>"
  params:
    - name: New Level
      type: integer
      description: "Fader level in tenths (e.g. 70 = 7.0). Omit to read current value."
  response: "FADER [Level]<CR>"
  notes: "Read/Write. Example: send 'FADER 70', receive 'FADER 70'."

- id: muted
  label: Master Fader Mute
  kind: action
  command: "@MUTED [New Value]<CR>"
  params:
    - name: New Value
      type: integer
      description: "1 to mute, 0 to unmute. Omit to read current value."
  response: "MUTED [Value]<CR>"
  notes: "Read/Write. Example: send 'MUTED 1', receive 'MUTED 1'."

- id: monitorlevel
  label: Monitor Level
  kind: action
  command: "@MONITORLEVEL [New Value]<CR>"
  params:
    - name: New Value
      type: integer
      description: "0 (minimum) to 100 (maximum). Omit to read current value."
  response: "MONITORLEVEL [Value]<CR>"
  notes: "Read/Write. Example: send 'MONITORLEVEL 70', receive 'MONITORLEVEL 70'."

- id: monitormute
  label: Monitor Mute
  kind: action
  command: "@MONITORMUTE [New Value]<CR>"
  params:
    - name: New Value
      type: integer
      description: "0 (unmute) or 1 (mute). Omit to read current value."
  response: "MONITORMUTE [Value]<CR>"
  notes: "Read/Write. Example: send 'MONITORMUTE 1', receive 'MONITORMUTE 1'."

Feedbacks

- id: system_version
  type: string
  source: SYSTEM response field VER [Version]
- id: system_mac_address
  type: string
  source: SYSTEM / MAC response field
- id: board_present_h332
  type: enum
  values: [present, absent]
  notes: Derived from HEALTH H332VOLTS response - "NA" indicates absent.
- id: board_present_h338
  type: enum
  values: [present, absent]
  notes: Derived from HEALTH H338VOLTS response - "NA" indicates absent.
- id: auth_level
  type: enum
  values: [SETUP, OP, SECERR]
  source: AUTH response

Variables

- id: fader_level
  type: integer
  unit: tenths
  access: read_write
- id: monitor_level
  type: integer
  range: [0, 100]
  access: read_write
- id: master_mute
  type: enum
  values: [muted, unmuted]
  access: read_write
- id: monitor_mute
  type: enum
  values: [muted, unmuted]
  access: read_write
- id: current_format
  type: string
  access: read_write

Events

# UNRESOLVED: no unsolicited notification events documented in source. All responses are solicited (command → response).

Macros

# Device-side macros: invoke via RUNMACRO action. Macro definitions themselves are stored on the AP20/AP25 (out of band of this API).
# UNRESOLVED: source documents no specific macro contents; only the RUNMACRO invocation command.

Safety

confirmation_required_for: []
interlocks: []
# UNRESOLVED: source contains no safety warnings, interlock procedures, or power-on sequencing requirements.

Notes

  • Source document TN-H413 rev. D is a dual-device spec covering AP20 and AP25 with a shared command set; commands are identical for both models.
  • Every command MUST begin with @ and terminate with <CR> (ASCII 0x0D). The source explicitly flags this as a common failure point when simple commands do not execute.
  • Responses are ASCII text terminated by <CR>.
  • Serial Command Mode on the device must be set to AP20 (System > Automation > Serial menu) for these commands to be accepted over RS-232.
  • Two password tiers exist: NetCmd Password (network operator-level, does not protect serial) and Setup Password (setup/config commands over all transports — front panel, serial, Ethernet). Inquiry commands (SYSTEM, IDENTIFY) operate without any password.
  • The included sample C program (Ap20NetCmd.cpp) connects via TCP to port 14500, optionally sends AUTH <password>, then sends the user command prefixed with @ and suffixed with \r, reading the response byte-by-byte until \r.

Provenance

source_domains:
  - datasatdigital.com
source_urls:
  - https://www.datasatdigital.com/download/55/ap25/2762/tn-h413_rev-d_ap20-ap25-remote-command-api.pdf
retrieved_at: 2026-07-01T15:20:23.130Z
last_checked_at: 2026-07-07T11:32:12.552Z

Verification Summary

verdict: verified
checked_at: 2026-07-07T11:32:12.552Z
matched_actions: 18
action_count: 18
confidence: medium
summary: "All 18 spec actions matched literally to source commands; every transport parameter verified; spec fully represents all documented protocol commands. (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "source documents no power on/off command, no input/output routing commands, no input-select command. Baud rate is user-selectable in menu (System > Automation > Serial) but no default or supported range stated."
- "user-selectable via System > Automation > Serial menu; no value stated in source"
- "not stated in source"
- "no unsolicited notification events documented in source. All responses are solicited (command → response)."
- "source documents no specific macro contents; only the RUNMACRO invocation command."
- "source contains no safety warnings, interlock procedures, or power-on sequencing requirements."
- "serial port line parameters (baud, data bits, parity, stop bits, flow control) are configurable on-device but not stated in this document. Power on/off, input selection, and routing commands are not present in TN-H413 — may exist in the full User Guide (TM-H795) which is out of scope for this source. Firmware version compatibility range not stated."

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