Summary

Extron Annotator 401 — annotation graphics processor / scaler. SIS (Simple Instruction Set) control over RS-232 (rear 3-pole captive screw) and Ethernet (SSH, port 22023) plus Ethernet-over-USB (front USB-C config port, SSH 203.0.113.22:22023). Heavy command set: scaling, EDID, image adjust, HDCP, annotation draw/color/font, OSD menu, image capture/recall, network/IP, NTP, passwords.

Transport

protocols:
  - tcp        # SSH - SIS over Ethernet (LAN) and Ethernet-over-USB
  - serial     # RS-232 rear panel 3-pole captive screw
addressing:
  port: 22023  # SSH port for SIS (Ethernet and USB-C config port)
  # base_url: N/A (SSH, not HTTP)
serial:
  baud_rate: 9600
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: password
  # Username: admin
  # Password: unit serial number (factory); reverts to "extron" after absolute
  # system reset (ZQQQ) or rear-panel RESET. Passwords case-sensitive, max 128
  # chars, pipe "|" not allowed.

Traits

traits:
  - queryable    # inferred: many query/view commands return state (Q, I, E...} view rows)
  - levelable    # inferred: continuous-value set/inc/dec (HCTR, VCTR, HSIZ, VSIZ, TXSZ, LNWT)

Actions

# Symbol legend (from source "Symbol Definitions", used verbatim in command payloads):
#   E or W = Escape key (prefix). } = soft CR (end of host command). ] = CR/LF (end of response).
#   X@   = Output select (0=all, 1=HDMI 1, 2=HDMI 2)
#   X1^  = H/V position (5-digit, signed)
#   X1&  = H/V size (5-digit)
#   X1)  = Enable/Disable (0/1)
#   X2!  = EDID/scaler rate code (see EDID table)
#   X2$  = EDID filename (.bin, 128 or 256 bytes)
#   X2)  = Test pattern (0-6)
#   X2*  = Timeout seconds (0-500, 501=never)
#   X2^  = Input preset (1-128)
#   X3!  = Verbose mode (0-3)
#   X3@  = Hostname string
#   X3#  = Password string
#   X3(  = Aspect ratio (1=Fill, 2=Follow)
#   X4)  = Screen saver mode (1-3)
#   X4@  = Video mute (0/1/2)
#   X4%  = Switch effect (0/1/4)
#   X4&  = HDCP notification mode (0/1/2)
#   X5)  = Annotation type (0-11)
#   X5!  = Font name
#   X5@  = Font size (8-127)
#   X5#  = Line color (6-bit RGB)
#   X5$  = Line weight (1-127)
#   X5^  = On-screen clock mode (0-3)
#   X5&  = Annotation coords (8-digit XXXXYYYY)
#   X5(  = USB/TLI device ID (0-32)
#   X6(  = Auto annotation clear (0/1)
#   X6&  = Network folder path
#   X7(  = Print copies (1-50)
#   X7!  = Output group (0-3)
#   X7@  = White/Blackboard (0/1/2)
#   X8)  = TLI device ID string
#   X8!  = NIC interface (1=LAN, 2=USB Extender Plus Tx)
#   X8#  = NTP setting (0/1/2)
#   X11@ = Filename prefix string
#   X11# = Date/time (MM/DD/YY HH:MM:SS)
#   X11$ = IP address (xxx.xxx.xxx.xxx)
#   X11( = Subnet mask
#   X12) = Admin/user password

actions:
  # ---- Input Configuration ----
  - id: view_detected_format
    label: View Detected Input Format
    kind: query
    command: null  # UNRESOLVED: host→device payload not recoverable from extracted row ("View detected format 1* X#]")
    params: []

  # ---- Input EDID ----
  - id: set_input_edid
    label: Set Input EDID
    kind: action
    command: "E A1* X2! EDID }"
    params:
      - {name: rate, symbol: "X2!", type: integer, description: "EDID rate code (EDID table)"}
  - id: view_input_edid
    label: View Input EDID
    kind: query
    command: "E A1EDID }"
    params: []
  - id: save_output_edid
    label: Save HDMI Output EDID
    kind: action
    command: "E S X@ * X2! EDID }"
    params:
      - {name: output, symbol: "X@", type: integer, description: "1=HDMI1, 2=HDMI2"}
      - {name: rate, symbol: "X2!", type: integer, description: "Custom slot 201/202/203"}
  - id: export_edid
    label: Export EDID File
    kind: action
    command: "E E X2! , X2$ EDID }"
    params:
      - {name: rate, symbol: "X2!", type: integer}
      - {name: filename, symbol: "X2$", type: string}
  - id: import_edid
    label: Import EDID File
    kind: action
    command: "E I X2! , X2$ EDID }"
    params:
      - {name: rate, symbol: "X2!", type: integer, description: "201/202/203"}
      - {name: filename, symbol: "X2$", type: string}

  # ---- Image Reset ----
  - id: image_reset
    label: Image Reset (follow aspect)
    kind: action
    command: "1*0A"
    params: []
  - id: image_reset_fill
    label: Image Reset and Fill
    kind: action
    command: "1*1A"
    params: []
  - id: image_reset_follow
    label: Image Reset and Follow Input Aspect
    kind: action
    command: "1*2A"
    params: []

  # ---- Total / Active pixels ----
  - id: view_total_pixels
    label: View Total Pixels
    kind: query
    command: "E TPIX }"
    params: []
  - id: view_active_pixels
    label: View Active Pixels
    kind: query
    command: "E APIX }"
    params: []

  # ---- Video mute ----
  - id: mute_video_black
    label: Mute Video to Black
    kind: action
    command: "X@ *1B"
    params: [{name: output, symbol: "X@", type: integer}]
  - id: mute_video_sync
    label: Mute Video and Sync
    kind: action
    command: "X@ *2B"
    params: [{name: output, symbol: "X@", type: integer}]
  - id: unmute_video
    label: Unmute Video
    kind: action
    command: "X@ *0B"
    params: [{name: output, symbol: "X@", type: integer}]
  - id: view_video_mute
    label: View Video Mute Status
    kind: query
    command: "X@ *B"
    params: [{name: output, symbol: "X@", type: integer}]

  # ---- Horizontal shift ----
  - id: set_hctr
    label: Set Horizontal Position
    kind: action
    command: "E X1^ HCTR }"
    params: [{name: value, symbol: "X1^", type: integer, description: "-32768..+32768"}]
  - id: inc_hctr
    label: Increment Horizontal Position
    kind: action
    command: "E +HCTR }"
    params: []
  - id: dec_hctr
    label: Decrement Horizontal Position
    kind: action
    command: "E -HCTR }"
    params: []
  - id: view_hctr
    label: View Horizontal Position
    kind: query
    command: "E HCTR }"
    params: []

  # ---- Vertical shift ----
  - id: set_vctr
    label: Set Vertical Position
    kind: action
    command: "E X1^ VCTR }"
    params: [{name: value, symbol: "X1^", type: integer}]
  - id: inc_vctr
    label: Increment Vertical Position
    kind: action
    command: "E +VCTR }"
    params: []
  - id: dec_vctr
    label: Decrement Vertical Position
    kind: action
    command: "E -VCTR }"
    params: []
  - id: view_vctr
    label: View Vertical Position
    kind: query
    command: "E VCTR }"
    params: []

  # ---- Horizontal size ----
  - id: set_hsiz
    label: Set Horizontal Size
    kind: action
    command: "E X1& HSIZ }"
    params: [{name: value, symbol: "X1&", type: integer, description: "10..32768"}]
  - id: inc_hsiz
    label: Increment Horizontal Size
    kind: action
    command: "E +HSIZ }"
    params: []
  - id: dec_hsiz
    label: Decrement Horizontal Size
    kind: action
    command: "E -HSIZ }"
    params: []
  - id: view_hsiz
    label: View Horizontal Size
    kind: query
    command: "E HSIZ }"
    params: []

  # ---- Vertical size ----
  - id: set_vsiz
    label: Set Vertical Size
    kind: action
    command: "E X1& VSIZ }"
    params: [{name: value, symbol: "X1&", type: integer}]
  - id: inc_vsiz
    label: Increment Vertical Size
    kind: action
    command: "E +VSIZ }"
    params: []
  - id: dec_vsiz
    label: Decrement Vertical Size
    kind: action
    command: "E -VSIZ }"
    params: []
  - id: view_vsiz
    label: View Vertical Size
    kind: query
    command: "E VSIZ }"
    params: []

  # ---- Compound image position/size ----
  - id: set_ximg
    label: Set Compound Image Position and Size
    kind: action
    command: "E * X1^ * X1^ * X1& * X1& XIMG }"
    params: []
  - id: view_ximg
    label: View Compound Image Position and Size
    kind: query
    command: "E XIMG }"
    params: []

  # ---- Output scaler rate ----
  - id: set_output_rate
    label: Set Output Scaler Rate
    kind: action
    command: "E X2! RATE }"
    params: [{name: rate, symbol: "X2!", type: integer}]
  - id: view_output_rate
    label: View Output Scaler Rate
    kind: query
    command: "E RATE }"
    params: []

  # ---- Screen saver ----
  - id: set_screensaver_mode
    label: Set Screen Saver Mode
    kind: action
    command: "E M X4) SSAV }"
    params: [{name: mode, symbol: "X4)", type: integer, description: "1=black,2=blue,3=user"}]
  - id: view_screensaver_mode
    label: View Screen Saver Mode
    kind: query
    command: "E MSSAV }"
    params: []
  - id: set_screensaver_timeout
    label: Set Screen Saver Timeout
    kind: action
    command: "E T X2* SSAV }"
    params: [{name: seconds, symbol: "X2*", type: integer, description: "1..500, 501=never"}]
  - id: view_screensaver_timeout
    label: View Screen Saver Timeout
    kind: query
    command: "E TSSAV }"
    params: []
  - id: view_screensaver_status
    label: View Screen Saver Status
    kind: query
    command: "E SSSAV }"
    params: []

  # ---- Printer quantity ----
  - id: set_print_quantity
    label: Set Print Quantity
    kind: action
    command: "E Q X7( PRTR }"
    params: [{name: copies, symbol: "X7(", type: integer, description: "1..50"}]
  - id: view_print_quantity
    label: View Print Quantity
    kind: query
    command: "E QPRTR }"
    params: []

  # ---- Audio mute ----
  - id: audio_mute_on
    label: Audio Mute On
    kind: action
    command: "X@ *1Z"
    params: [{name: output, symbol: "X@", type: integer}]
  - id: audio_mute_off
    label: Audio Mute Off
    kind: action
    command: "X@ *0Z"
    params: [{name: output, symbol: "X@", type: integer}]
  - id: view_audio_mute
    label: View Audio Mute
    kind: query
    command: "X@ Z"
    params: [{name: output, symbol: "X@", type: integer}]

  # ---- Audio input format ----
  - id: set_audio_none
    label: Set Audio None (Mute)
    kind: action
    command: "E I1*0AFMT }"
    params: []
  - id: set_audio_lpcm
    label: Set Audio LPCM-2CH
    kind: action
    command: "E I1*2AFMT }"
    params: []
  - id: set_audio_multich
    label: Set Audio Multi-CH
    kind: action
    command: "E I1*3AFMT }"
    params: []
  - id: view_audio_format
    label: View Audio Input Format
    kind: query
    command: "E I1AFMT }"
    params: []

  # ---- Auto memories ----
  - id: amem_enable
    label: Enable Auto Memory
    kind: action
    command: "E 1*1AMEM }"
    params: []
  - id: amem_disable
    label: Disable Auto Memory
    kind: action
    command: "E 1*0AMEM }"
    params: []
  - id: view_amem
    label: View Auto Memory
    kind: query
    command: "E 1AMEM }"
    params: []

  # ---- Input presets ----
  - id: recall_input_preset
    label: Recall Input Preset
    kind: action
    command: "2* X2^ ."
    params: [{name: preset, symbol: "X2^", type: integer, description: "1..128"}]
  - id: save_input_preset
    label: Save Input Preset
    kind: action
    command: "2* X2^ ,"
    params: [{name: preset, symbol: "X2^", type: integer}]
  - id: delete_input_preset
    label: Delete Input Preset
    kind: action
    command: "E X2* X2^ PRST }"
    params: [{name: preset, symbol: "X2^", type: integer}]

  # ---- Test pattern ----
  - id: set_test_pattern
    label: Set Test Pattern
    kind: action
    command: "E X2) TEST }"
    params: [{name: pattern, symbol: "X2)", type: integer, description: "0-6"}]
  - id: view_test_pattern
    label: View Test Pattern
    kind: query
    command: "E TEST }"
    params: []

  # ---- Freeze ----
  - id: freeze_enable
    label: Freeze Enable
    kind: action
    command: "1F"
    params: []
  - id: freeze_disable
    label: Freeze Disable
    kind: action
    command: "0F"
    params: []
  - id: view_freeze
    label: View Freeze Status
    kind: query
    command: "F"
    params: []

  # ---- Upstream switch effect ----
  - id: set_switch_effect
    label: Set Upstream Switch Effect
    kind: action
    command: "E U1* X4% SWEF }"
    params: [{name: effect, symbol: "X4%", type: integer, description: "0=cut,1=fade,4=low-latency"}]
  - id: view_switch_effect
    label: View Switch Effect
    kind: query
    command: "E U1SWEF }"
    params: []

  # ---- Aspect ratio ----
  - id: aspect_fill
    label: Aspect Fill
    kind: action
    command: "E 1*1ASPR }"
    params: []
  - id: aspect_follow
    label: Aspect Follow
    kind: action
    command: "E 1*2ASPR }"
    params: []
  - id: view_aspect
    label: View Aspect Ratio
    kind: query
    command: "E 1ASPR }"
    params: []

  # ---- Executive mode (front panel lockout) ----
  - id: exec_mode_enable
    label: Executive Mode Enable (panel lockout)
    kind: action
    command: "1X"
    params: []
  - id: exec_mode_disable
    label: Executive Mode Disable
    kind: action
    command: "0X"
    params: []

  # ---- Signal presence / HDCP ----
  - id: view_signal_presence
    label: View Video Signal Presence
    kind: query
    command: "E 0LS }"
    params: []
  - id: set_hdcp_notification
    label: Set HDCP Notification Mode
    kind: action
    command: "E N1* X4& HDCP }"
    params: [{name: mode, symbol: "X4&", type: integer}]
  - id: query_hdcp_notification
    label: Query HDCP Notification
    kind: query
    command: "E N1HDCP }"
    params: []
  - id: enable_usb_device
    label: Enable USB Device
    kind: action
    command: "E X5( *1ADEV }"
    params: [{name: device, symbol: "X5(", type: integer, description: "0=all, 1-32"}]
  - id: disable_usb_device
    label: Disable USB Device
    kind: action
    command: "E X5( *0ADEV }"
    params: [{name: device, symbol: "X5(", type: integer}]
  - id: view_usb_device
    label: View USB Device Status
    kind: query
    command: "E X5( ADEV }"
    params: [{name: device, symbol: "X5(", type: integer}]
  - id: hdcp_auth_on
    label: Input HDCP Authorized On
    kind: action
    command: "E E1*1HDCP }"
    params: []
  - id: hdcp_auth_off
    label: Input HDCP Authorized Off
    kind: action
    command: "E E1*0HDCP }"
    params: []
  - id: view_hdcp_auth
    label: View Input HDCP Authorized
    kind: query
    command: "E E1HDCP }"
    params: []

  # ---- Annotation ----
  - id: set_annotation_type
    label: Set Annotation Type
    kind: action
    command: "E X5) DRAW }"
    params: [{name: type, symbol: "X5)", type: integer, description: "0-11"}]
  - id: view_annotation_type
    label: View Annotation Type
    kind: query
    command: "E DRAW }"
    params: []
  - id: set_annotation_device
    label: Set Annotation TLI Device
    kind: action
    command: "E X8) APID }"
    params: [{name: device, symbol: "X8)", type: string}]
  - id: set_annotation_location
    label: Set Annotation Location
    kind: action
    command: "E X5& APNT }"
    params: [{name: coords, symbol: "X5&", type: string, description: "8-digit XXXXYYYY"}]
  - id: complete_annotation
    label: Complete Annotation
    kind: action
    command: "E ASTP }"
    params: []
  - id: set_annotation_color
    label: Set Annotation Color
    kind: action
    command: "E X5( * X5# ACOL }"
    params:
      - {name: device, symbol: "X5(", type: integer}
      - {name: color, symbol: "X5#", type: string, description: "6-bit RGB"}
  - id: view_annotation_color
    label: View Annotation Color
    kind: query
    command: "E X5( ACOL }"
    params: [{name: device, symbol: "X5(", type: integer}]
  - id: fill_enable
    label: Enable Object Fill
    kind: action
    command: "E 1FILL }"
    params: []
  - id: fill_disable
    label: Disable Object Fill
    kind: action
    command: "E 0FILL }"
    params: []
  - id: view_fill
    label: View Fill Setting
    kind: query
    command: "E FILL }"
    params: []
  - id: set_font
    label: Set Annotation Font
    kind: action
    command: "E X5! FONT }"
    params: [{name: font, symbol: "X5!", type: string}]
  - id: view_font
    label: View Font
    kind: query
    command: "E FONT }"
    params: []
  - id: set_text_size
    label: Set Annotation Text Size
    kind: action
    command: "E X5@ TXSZ }"
    params: [{name: size, symbol: "X5@", type: integer, description: "8..127"}]
  - id: view_text_size
    label: View Text Size
    kind: query
    command: "E TXSZ }"
    params: []
  - id: set_line_weight
    label: Set Line Weight
    kind: action
    command: "E X5$ LNWT }"
    params: [{name: weight, symbol: "X5$", type: integer, description: "1..127"}]
  - id: view_line_weight
    label: View Line Weight
    kind: query
    command: "E LNWT }"
    params: []
  - id: set_eraser_size
    label: Set Eraser/Highlighter Size
    kind: action
    command: "E X5$ ERSR }"
    params: [{name: size, symbol: "X5$", type: integer}]
  - id: set_annotation_output
    label: Set Annotation Output Group
    kind: action
    command: "E X7! ASHW }"
    params: [{name: group, symbol: "X7!", type: integer, description: "0-3"}]
  - id: view_annotation_output
    label: View Annotation Output Group
    kind: query
    command: "E ASHW }"
    params: []
  - id: set_cursor_output
    label: Set Cursor Output Group
    kind: action
    command: "E X7! CSHW }"
    params: [{name: group, symbol: "X7!", type: integer}]
  - id: view_cursor_output
    label: View Cursor Output Group
    kind: query
    command: "E CSHW }"
    params: []
  - id: set_cursor_timeout
    label: Set Cursor Timeout
    kind: action
    command: "E X2* CDUR }"
    params: [{name: seconds, symbol: "X2*", type: integer}]
  - id: view_cursor_timeout
    label: View Cursor Timeout
    kind: query
    command: "E CDUR }"
    params: []
  - id: enable_onscreen_clock
    label: Set On-Screen Clock
    kind: action
    command: "E X5^ TIME }"
    params: [{name: mode, symbol: "X5^", type: integer, description: "0-3"}]
  - id: view_onscreen_clock
    label: View On-Screen Clock
    kind: query
    command: "E TIME }"
    params: []
  - id: set_clock_hctr
    label: Set Clock Horizontal Position
    kind: action
    command: "E K X1^ HCTR }"
    params: [{name: value, symbol: "X1^", type: integer, description: "0..4096"}]
  - id: inc_clock_hctr
    label: Increment Clock Horizontal Position
    kind: action
    command: "E K+HCTR }"
    params: []
  - id: dec_clock_hctr
    label: Decrement Clock Horizontal Position
    kind: action
    command: "E K-HCTR }"
    params: []
  - id: view_clock_hctr
    label: View Clock Horizontal Position
    kind: query
    command: "E KHCTR }"
    params: []
  - id: set_clock_vctr
    label: Set Clock Vertical Position
    kind: action
    command: "E K X1^ VCTR }"
    params: [{name: value, symbol: "X1^", type: integer}]
  - id: inc_clock_vctr
    label: Increment Clock Vertical Position
    kind: action
    command: "E K+VCTR }"
    params: []
  - id: dec_clock_vctr
    label: Decrement Clock Vertical Position
    kind: action
    command: "E K-VCTR }"
    params: []
  - id: view_clock_vctr
    label: View Clock Vertical Position
    kind: query
    command: "E KVCTR }"
    params: []

  # ---- Panel calibration / annotation clear / whiteboard ----
  - id: enter_calibration
    label: Enter Touchpanel Calibration
    kind: action
    command: "E 1PCAL }"
    params: []
  - id: exit_calibration
    label: Exit Touchpanel Calibration
    kind: action
    command: "E 0PCAL }"
    params: []
  - id: view_calibration
    label: View Calibration Setting
    kind: query
    command: "E PCAL }"
    params: []
  - id: set_auto_annotation_clear
    label: Set Auto Annotation Clear
    kind: action
    command: "E X6( ACLR }"
    params: [{name: mode, symbol: "X6(", type: integer, description: "0/1"}]
  - id: view_auto_annotation_clear
    label: View Auto Annotation Clear
    kind: query
    command: "E ACLR }"
    params: []
  - id: whiteboard_disable
    label: Disable Whiteboard
    kind: action
    command: "E 0WHBD }"
    params: []
  - id: whiteboard_enable
    label: Enable Whiteboard
    kind: action
    command: "E 1WHBD }"
    params: []
  - id: blackboard_enable
    label: Enable Blackboard
    kind: action
    command: "E 2WHBD }"
    params: []
  - id: view_whiteboard
    label: View White/Blackboard Status
    kind: query
    command: "E WHBD }"
    params: []

  # ---- On-screen menu ----
  - id: set_menu_timeout
    label: Set Menu Timeout
    kind: action
    command: "E X2* MDUR }"
    params: [{name: seconds, symbol: "X2*", type: integer}]
  - id: view_menu_timeout
    label: View Menu Timeout
    kind: query
    command: "E MDUR }"
    params: []
  - id: set_menu_output
    label: Set Menu Output Group
    kind: action
    command: "E X7! MSHW }"
    params: [{name: group, symbol: "X7!", type: integer}]
  - id: view_menu_output
    label: View Menu Output Group
    kind: query
    command: "E MSHW }"
    params: []

  # ---- OSD capture/recall button modes ----
  - id: mcap_internal
    label: OSD Capture to Internal Flash
    kind: action
    command: "E 0MCAP }"
    params: []
  - id: mcap_iqc
    label: OSD Capture to IQC (RAM)
    kind: action
    command: "E 1MCAP }"
    params: []
  - id: mcap_usb
    label: OSD Capture to USB Flash
    kind: action
    command: "E 2MCAP }"
    params: []
  - id: mcap_network
    label: OSD Capture to Network Drive
    kind: action
    command: "E 3MCAP }"
    params: []
  - id: view_mcap
    label: View OSD Capture Mode
    kind: query
    command: "E MCAP }"
    params: []

  # ---- Image capture/recall ----
  - id: save_image_flash
    label: Save Image to Flash
    kind: action
    command: "E 0* /graphics/<filename> MF }"
    params: [{name: filename, type: string}]
  - id: save_image_usb
    label: Save Image to USB
    kind: action
    command: "E 1* /graphics/<filename> MF }"
    params: [{name: filename, type: string}]
  - id: save_image_network
    label: Save Image to Network
    kind: action
    command: null  # UNRESOLVED: source documents this action but truncates its host payload at "E 0* /shares/<network"; path examples do not supply the complete command row.
    params: [{name: path, type: string}]
  - id: disable_image
    label: Disable Static Image (show live video)
    kind: action
    command: "E 0*0RF }"
    params: []
  - id: view_current_image
    label: View Current Image
    kind: query
    command: "E RF }"
    params: []
  - id: quick_capture_ram
    label: Quick Image Capture to RAM
    kind: action
    command: "E 0* /graphics/temp.bmp MF }"
    params: []
  - id: set_image_prefix
    label: Set Capture Filename Prefix
    kind: action
    command: "E P X11@ CFMT }"
    params: [{name: prefix, symbol: "X11@", type: string}]
  - id: clear_image_prefix
    label: Clear Capture Filename Prefix
    kind: action
    command: "E P• CFMT }"  # • = space (Extron space symbol)
    params: []
  - id: read_image_prefix
    label: Read Capture Filename Prefix
    kind: query
    command: "E PCFMT }"
    params: []

  # ---- Network folder capture settings ----
  - id: set_network_folder
    label: Set Network Folder Path
    kind: action
    command: "E F X6& NTWK }"
    params: [{name: path, symbol: "X6&", type: string}]
  - id: clear_network_folder
    label: Clear Network Folder Path
    kind: action
    command: "E F • NTWK }"
    params: []
  - id: read_network_folder
    label: Read Network Folder Path
    kind: query
    command: "E FNTWK }"
    params: []
  - id: set_network_username
    label: Set Network Username
    kind: action
    command: "E U X1* NTWK }"
    params: [{name: username, symbol: "X1*", type: string}]
  - id: clear_network_username
    label: Clear Network Username
    kind: action
    command: "E U • NTWK }"
    params: []
  - id: read_network_username
    label: Read Network Username
    kind: query
    command: "E UNTWK }"
    params: []
  - id: set_network_password
    label: Set Network Password
    kind: action
    command: "E P X3# NTWK }"
    params: [{name: password, symbol: "X3#", type: string}]
  - id: clear_network_password
    label: Clear Network Password
    kind: action
    command: "E P • NTWK }"
    params: []
  - id: read_network_password
    label: Read Network Password (set/unset only)
    kind: query
    command: "E PNTWK }"
    params: []

  # ---- USB driver / extender ----
  - id: list_usb_drivers
    label: List User USB Driver Files
    kind: query
    command: "E LUSBF }"
    params: []
  - id: delete_usb_driver
    label: Delete User USB Driver File
    kind: action
    command: "E D <filename> USBF }"
    params: [{name: filename, type: string}]
  - id: set_usb_network
    label: Set USB Network Support
    kind: action
    command: "E N X1) USBC }"
    params: [{name: state, symbol: "X1)", type: integer, description: "0/1"}]
  - id: view_usb_network
    label: View USB Network Support
    kind: query
    command: "E NUSBC }"
    params: []

  # ---- Time zone / date-time ----
  - id: set_timezone
    label: Set Time Zone
    kind: action
    command: "E <zone name> *TZON }"  # [24] admin-only
    params: [{name: zone, type: string}]
  - id: view_timezone
    label: View Current Time Zone
    kind: query
    command: "E TZON }"
    params: []
  - id: list_timezones
    label: List All Time Zones
    kind: query
    command: "E *TZON }"
    params: []
  - id: set_datetime
    label: Set Date and Time
    kind: action
    command: "E X11# CT }"  # [24] admin-only
    params: [{name: datetime, symbol: "X11#", type: string, description: "MM/DD/YY HH:MM:SS"}]
  - id: read_datetime
    label: Read Date and Time
    kind: query
    command: "E CT }"
    params: []

  # ---- NTP ----
  - id: ntp_enable
    label: Enable NTP
    kind: action
    command: "E 1NTEN }"  # [24] admin-only
    params: []
  - id: ntp_disable
    label: Disable NTP
    kind: action
    command: "E 0NTEN }"  # [24] admin-only
    params: []
  - id: ntp_sync_now
    label: Sync NTP Now
    kind: action
    command: "E 2NTEN }"  # [24] admin-only
    params: []
  - id: view_ntp
    label: View NTP Status
    kind: query
    command: "E NTEN }"  # [24] admin-only
    params: []
  - id: set_ntp_ip
    label: Set NTP Server IP
    kind: action
    command: "E X11$ NTIP }"  # [24] admin-only
    params: [{name: ip, symbol: "X11$", type: string}]
  - id: set_ntp_ip_default
    label: Set NTP IP to Default
    kind: action
    command: "E • NTIP }"  # [24] admin-only
    params: []
  - id: view_ntp_ip
    label: View NTP Server IP
    kind: query
    command: "E NTIP }"  # [24] admin-only
    params: []
  - id: set_ntp_port
    label: Set NTP Port
    kind: action
    command: null  # [24] admin-only; UNRESOLVED: source set row reads "E N{ port# }MAP }", while reset/disable/view rows use PMAP. The previously inferred PMAP setter is unsupported; the intended setter opcode is unknown.
    params: [{name: port, type: integer}]
  - id: reset_ntp_port
    label: Reset NTP Port to 123
    kind: action
    command: "E N123PMAP }"
    params: []
  - id: disable_ntp_port
    label: Disable NTP Port
    kind: action
    command: "E N0PMAP }"
    params: []
  - id: view_ntp_port
    label: View NTP Port
    kind: query
    command: "E NPMAP }"
    params: []

  # ---- Ethernet port config ----
  - id: set_web_port
    label: Set Web Port
    kind: action
    command: "E W{port}PMAP }"  # [24] admin-only
    params: [{name: port, type: integer}]
  - id: reset_web_port
    label: Reset Web Port to 80
    kind: action
    command: "E W80PMAP }"
    params: []
  - id: disable_web_port
    label: Disable Web Port
    kind: action
    command: "E W0PMAP }"
    params: []
  - id: view_web_port
    label: View Web Port
    kind: query
    command: "E WPMAP }"  # [24] admin-only
    params: []
  - id: set_telnet_port
    label: Set Telnet Port
    kind: action
    command: null  # UNRESOLVED: source documents a set row but shows "E ZPMAP }", identical to its view payload and lacking a port argument. Setter argument placement is unknown.
    params: [{name: port, type: integer}]
  - id: reset_telnet_port
    label: Reset Telnet Port to 23
    kind: action
    command: "E Z23PMAP }"
    params: []
  - id: disable_telnet_port
    label: Disable Telnet Port
    kind: action
    command: "E Z0PMAP }"
    params: []
  - id: view_telnet_port
    label: View Telnet Port
    kind: query
    command: "E ZPMAP }"  # [24] admin-only
    params: []

  # ---- Information requests ----
  - id: general_info
    label: General Information
    kind: query
    command: "I"  # also lowercase "i"
    params: []
  - id: query_model_name
    label: Query Model Name
    kind: query
    command: "1I"
    params: []
  - id: query_model_description
    label: Query Model Description
    kind: query
    command: "2I"
    params: []
  - id: query_firmware_version
    label: Query Firmware Version
    kind: query
    command: "Q"
    params: []
  - id: query_firmware_build
    label: Query Firmware and Build Version
    kind: query
    command: "*Q"
    params: []
  - id: query_part_number
    label: Query Part Number
    kind: query
    command: "N"  # also lowercase "n"
    params: []
  - id: view_temperature
    label: View Internal Temperature
    kind: query
    command: "E 20STAT }"
    params: []
  - id: set_verbose_mode
    label: Set Verbose Mode
    kind: action
    command: "E X3! CV }"
    params: [{name: mode, symbol: "X3!", type: integer, description: "0-3"}]
  - id: view_verbose_mode
    label: View Verbose Mode
    kind: query
    command: "E CV }"
    params: []
  - id: set_hostname
    label: Set Hostname
    kind: action
    command: "E X3@ CN }"
    params: [{name: hostname, symbol: "X3@", type: string}]
  - id: set_hostname_default
    label: Set Hostname to Factory Default
    kind: action
    command: "E • CN }"
    params: []
  - id: view_hostname
    label: View Hostname
    kind: query
    command: "E CN }"
    params: []
  - id: usb_device_info
    label: USB Device Information (last selected)
    kind: query
    command: "45I"
    params: []
  - id: list_all_usb_devices
    label: List All USB Devices
    kind: query
    command: "46I"
    params: []

  # ---- IP setup ----
  - id: dhcp_on
    label: DHCP On (LAN)
    kind: action
    command: "E 1DH }"
    params: []
  - id: dhcp_off
    label: DHCP Off (LAN)
    kind: action
    command: "E 0DH }"
    params: []
  - id: view_dhcp
    label: View DHCP Mode (LAN)
    kind: query
    command: "E DH }"
    params: []
  - id: dhcp_on_nic
    label: DHCP On (per NIC)
    kind: action
    command: "E X8! *1DHCP }"
    params: [{name: nic, symbol: "X8!", type: integer, description: "1=LAN,2=USB Extender Plus Tx"}]
  - id: dhcp_off_nic
    label: DHCP Off (per NIC)
    kind: action
    command: "E X8! *0DHCP }"
    params: [{name: nic, symbol: "X8!", type: integer}]
  - id: view_dhcp_nic
    label: View DHCP Mode (per NIC)
    kind: query
    command: "E X8! DHCP }"
    params: [{name: nic, symbol: "X8!", type: integer}]
  - id: set_ip_address
    label: Set LAN IP Address
    kind: action
    command: "E X11$ CI }"
    params: [{name: ip, symbol: "X11$", type: string}]
  - id: view_gateway
    label: View Gateway IP Address
    kind: query
    command: "E CG }"
    params: []
  - id: set_ip_subnet_gateway
    label: Set IP/Subnet/Gateway (all-at-once)
    kind: action
    command: "E X8! * X11$ * X11( * X11$ CISG }"
    params:
      - {name: nic, symbol: "X8!", type: integer}
      - {name: ip, symbol: "X11$", type: string}
      - {name: subnet, symbol: "X11(", type: string}
      - {name: gateway, symbol: "X11$", type: string}
  - id: view_ip_settings
    label: View All IP Settings
    kind: query
    command: "E X8! CISG }"
    params: [{name: nic, symbol: "X8!", type: integer}]

  # ---- Reset / reboot ----
  - id: absolute_system_reset
    label: Absolute System Reset
    kind: action
    command: "E ZQQQ }"
    params: []
  - id: absolute_system_reset_keep_ip
    label: Absolute System Reset (retain IP)
    kind: action
    command: "E ZY }"
    params: []
  - id: reboot_network
    label: Reboot Networking
    kind: action
    command: "E 2BOOT }"
    params: []

  # ---- Passwords ([24] = admin-only) ----
  - id: set_admin_password
    label: Set Administrator Password
    kind: action
    command: "E X12) CA }"  # [24] admin-only
    params: [{name: password, symbol: "X12)", type: string}]
  - id: reset_admin_password
    label: Reset Administrator Password to Default
    kind: action
    command: "E • CA }"  # [24] admin-only
    params: []
  - id: view_admin_password
    label: View Administrator Password (set/unset only)
    kind: query
    command: "E CA }"  # [24] admin-only
    params: []
  - id: set_user_password
    label: Set User Password
    kind: action
    command: null  # [24] admin-only; UNRESOLVED: source documents this action but shows "EX12)}" without an identifiable opcode. CU cannot be inferred from the Ipu reply or reset/view rows.
    params: [{name: password, symbol: "X12)", type: string}]
  - id: reset_user_password
    label: Reset User Password
    kind: action
    command: "E • CU }"  # [24] admin-only
    params: []
  - id: view_user_password
    label: View User Password (set/unset only)
    kind: query
    command: "E CU }"  # [24] admin-only
    params: []

  # ---- Backup/Restore ----
  # UNRESOLVED: "Save unit configuration E 1*" row is truncated in the supplied source; no complete payload is available.

  # ---- Additional input format queries ----
  - id: view_total_lines
    label: View Total Lines
    kind: query
    command: "E TLIN }"
    params: []
  - id: view_active_lines
    label: View Active Lines
    kind: query
    command: "E ALIN }"
    params: []
  - id: view_horizontal_frequency
    label: View Horizontal Frequency
    kind: query
    command: "E HRATE }"
    params: []
  - id: view_vertical_frequency
    label: View Vertical Frequency
    kind: query
    command: "E VRATE }"
    params: []

  # ---- Output format ----
  - id: set_video_bit_depth
    label: Set Video Color Bit Depth
    kind: action
    command: "E V1* X9( BITD }"
    params: [{name: mode, symbol: "X9(", type: integer, description: "0 = Auto (10-bit to sinks w/deep color support (interface/rate permitting), else 8-bit; default); 1 = Force 8-bit"}]
  - id: view_video_bit_depth
    label: View Video Color Bit Depth
    kind: query
    command: "E V1BITD }"
    params: []
  - id: set_hdmi_output_format
    label: Set HDMI Output Format
    kind: action
    command: "EX@ * X4* VTPO }"
    params:
      - {name: output, symbol: "X@", type: integer, description: "1 = HDMI 1; 2 = HDMI 2"}
      - {name: format, symbol: "X4*", type: integer, description: "0 = Auto (based on the display EDID: default); 1 = DVI RGB 444; 2 = RGB 444 Full; 3 = RGB 444 Limited; 5 = YUV 444 Limited; 7 = YUV 422 Limited"}
  - id: view_hdmi_output_format
    label: View HDMI Output Format
    kind: query
    command: "EX@ VTPO }"
    params: [{name: output, symbol: "X@", type: integer, description: "1 = HDMI 1; 2 = HDMI 2"}]

  # ---- Accu-Rate Frame Lock ----
  - id: disable_afl
    label: Disable AFL Mode
    kind: action
    command: "E 0GLOK }"
    params: []
  - id: enable_afl
    label: Enable AFL Mode
    kind: action
    command: "E 1GLOK }"
    params: []
  - id: view_afl_mode
    label: View AFL Mode Setting
    kind: query
    command: "E GLOK }"
    params: []
  - id: view_afl_status
    label: View AFL Mode Status
    kind: query
    command: "E 41STAT }"
    params: []

  # ---- Network printer ----
  - id: enable_network_printer
    label: Enable Network Printer
    kind: action
    command: "E E1PRTR }"
    params: []
  - id: disable_network_printer
    label: Disable Network Printer
    kind: action
    command: "E E0PRTR }"
    params: []
  - id: view_network_printer
    label: View Network Printer Setting
    kind: query
    command: "E EPRTR }"
    params: []

  # ---- Executive mode status ----
  - id: view_executive_mode
    label: View Executive Mode Status
    kind: query
    command: "E X"
    params: []

Feedbacks

feedbacks:
  - id: powerup_banner
    description: Power-up copyright/firmware banner (RS-232 only)
    format: "(C) Copyright YYYY, Extron Annotator 401, Vn.nn, 60-nnnn-nn"
  - id: error_response
    description: Error codes returned for invalid commands/parameters
    values:
      - {code: E01, meaning: "Invalid input number"}
      - {code: E10, meaning: "Invalid command"}
      - {code: E11, meaning: "Invalid preset number"}
      - {code: E12, meaning: "Invalid port number"}
      - {code: E13, meaning: "Invalid parameter"}
      - {code: E14, meaning: "Invalid for this configuration"}
      - {code: E17, meaning: "Invalid command for signal type"}
      - {code: E22, meaning: "Busy"}
      - {code: E24, meaning: "Privilege violation"}
      - {code: E25, meaning: "Device not present"}
      - {code: E26, meaning: "Maximum number of connectors exceeded"}
      - {code: E28, meaning: "Bad filename / File not found"}
      - {code: E33, meaning: "Bad file type for logo"}

Variables

# UNRESOLVED: continuous-value parameters are exposed via the set/view actions
# above (HCTR, VCTR, HSIZ, VSIZ, TXSZ, LNWT, RATE, SSAV timeouts). No separate
# variable channel documented beyond those action pairs.

Events

# Unsolicited device-initiated messages (require verbose mode 1 or 3 on the
# SIS-over-SSH session):
events:
  - id: input_frequency_change
    message: "Reconfig ]"
  - id: input_video_presence_change
    message: "In00 • 1* X6!]"
  - id: hotplug_output_event
    message: "HplgO X@ * X7)]"
  - id: hdcp_input_status_change
    message: "HdcpI1* X4$]"
  - id: hdcp_output_status_change
    message: "X@ HdcpO X@ * X4$]"
  - id: screen_saver_status_change
    message: "SsavS X6#]"

Macros

# UNRESOLVED: no explicit multi-step macros documented in source.

Safety

confirmation_required_for:
  - absolute_system_reset        # ZQQQ - wipes all settings to factory defaults
  - absolute_system_reset_keep_ip # ZY
  - reboot_network               # 2BOOT - drops all connections
interlocks: []
# UNRESOLVED: source contains no explicit safety interlock procedures or
# power-on sequencing requirements. ZQQQ noted as destructive based on its
# description ("Reset all device settings except firmware version to factory
# defaults").

Notes

  • Two SSH entry points share port 22023: rear LAN port and front USB-C config port (USB-C presents IP 203.0.113.22).
  • Default IP (DHCP off): 192.168.254.254 / 255.255.255.0 / gateway 0.0.0.0. USB Extender Plus Tx default IP 192.168.1.254.
  • Telnet port 23 disabled by default; SIS-over-SSH is the primary Ethernet control path.
  • Command timeout: 10 s pause between ASCII chars aborts the command silently.
  • Verbose mode 1 = default for RS-232; 0 = default for Ethernet. Verbose 1/3 required to receive unsolicited change notices.
  • [24] annotation in command comments = Administrator privilege required (else E24 privilege violation).
  • • in payloads = Extron's space character symbol. } = soft CR (host command terminator). ] = CR/LF (response terminator).

Provenance

source_domains:
  - extron.com
  - media.extron.com
  - manualslib.com
source_urls:
  - https://www.extron.com/download/files/userman/68-2951-01_B_annotator_401.pdf
  - https://media.extron.com/public/download/files/userman/annotator_401_68-2951-50_C.pdf
  - https://www.extron.com/download/files/userman/Annotator_Rev_B.pdf
  - https://www.manualslib.com/manual/3321747/Extron-Electronics-Annotator-401.html
  - https://www.extron.com/product/annotator401
retrieved_at: 2026-07-25T14:03:36.016Z
last_checked_at: 2026-10-07T13:31:58.489Z

Verification Summary

verdict: verified
checked_at: 2026-10-07T13:31:58.489Z
matched_actions: 222
action_count: 222
confidence: medium
summary: "All 222 action units map to source SIS rows; transport matches; only the truncated save-unit-configuration row unrepresented. (11 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "Save unit configuration E 1*"
- "the save-image-to-network command row and Backup/Restore \"Save unit configuration\" row are truncated. The set-Telnet-port row lacks a port argument, and the set-user-password row lacks an identifiable opcode. The set-NTP-port row shows MAP while related rows show PMAP. Power on/off command not seen in the supplied source."
- "host→device payload not recoverable from extracted row (\"View detected format 1* X#]\")"
- "source documents this action but truncates its host payload at \"E 0* /shares/<network\"; path examples do not supply the complete command row."
- "source set row reads \"E N{ port# }MAP }\", while reset/disable/view rows use PMAP. The previously inferred PMAP setter is unsupported; the intended setter opcode is unknown."
- "source documents a set row but shows \"E ZPMAP }\", identical to its view payload and lacking a port argument. Setter argument placement is unknown."
- "source documents this action but shows \"EX12)}\" without an identifiable opcode. CU cannot be inferred from the Ipu reply or reset/view rows."
- "\"Save unit configuration E 1*\" row is truncated in the supplied source; no complete payload is available."
- "continuous-value parameters are exposed via the set/view actions"
- "no explicit multi-step macros documented in source."
- "source contains no explicit safety interlock procedures or"
- "save-image-network and save-unit-configuration rows are truncated. Set-Telnet-port lacks a port argument; set-user-password lacks an identifiable opcode; set-NTP-port shows MAP while related rows show PMAP. These setter/capture command fields are null rather than inferred. The supplied source explicitly documents vertical-size commands, clock vertical-position commands, ASTP and ERSR. Power on/off discrete command is not documented in the supplied source."

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