Summary

HDMI-TPN-TX107 is an SDVoE (BlueRiver) networked AV transmitter endpoint in the Lightware TPN matrix system. The source document states that the endpoint is not controlled directly: all documented control is issued to the TPN-MMU-X100 Matrix Management Unit, which addresses each endpoint by its MAC address (or user-set alias). Two control interfaces are documented: the Lightware REST API over HTTP(S) and the LW3 protocol over raw TCP (port 6107) or WS/WSS. Stream IDs use <MAC>_S0 / <MAC>_D0, serial ports use <MAC>_P1.

Transport

protocols:
  - http
  - tcp
addressing:
  base_url: "https://<ip>/api"   # "All properties and methods are available HTTP(S) below /api as an URL."
  port: 443                      # HTTPS server port, stated; HTTPS enabled by factory default
  # Additional stated service ports (Reserved Ports and Security Options / section 9.4.2):
  #   80   TCP  HTTP port (LW3 over WS, REST API) - disabled by factory default
  #   443  TCP  HTTPS port (LW3 over WSS, REST API)
  #   6107 TCP  LW3 protocol (raw connection type)
  #   6970 TCP  BlueRiver TCI API - disabled by factory default
  #   8080 TCP  REST API and websocket
  #   8001, 8002 TCP  Serial over IP (RS-232)
  # LW3 websocket paths (stated): ws://<ip>/lw3 and wss://<ip>/lw3
auth:
  type: basic   # "Basic access authentication ... requires user authentication by using a password (username is fixed)"
  username: admin  # "The username is always 'admin' in the MMU devices and it cannot be changed."
  # password: UNRESOLVED - MMU ships with a random per-unit factory password on a sticker; "No password is set by default" for REST basic auth.
  # HTTP authentication and HTTPS authentication are enabled by factory default (Factory Default Settings table).
  optional: true  # "Both of them are optional and can be used independently of each other."
framing:
  lw3: "Each line terminated with Carriage Return and Line Feed (CrLf); max line length 800 bytes."
  rest: "Arguments and property values given in the HTTP request body as plain text."
limits:
  max_clients: 18  # "It can manage 18 connected clients in total simultaneously for WS (80), WSS (443) and LW3 (6107) ports."

Traits

- routable    # inferred from video/audio/USB HID/Icron crosspoint switch and switchAll commands
- queryable   # inferred from GET / GETALL query commands returning state
- resettable  # inferred from documented restart / factoryReset / factoryDefaults commands
# NOT powerable: no power on/off command is documented in the source.

Actions

# --- REST API (chapter 8): request-line payloads, verbatim from source ---

- id: rest_set_device_label
  label: Set Device Label (MMU)
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/LABEL/DeviceLabel"
  body: "<custom_name>"
  params:
    - name: custom_name
      type: string
      description: "Max 49 ASCII characters; longer names are truncated."

- id: rest_restart_device
  label: Restart the MMU
  kind: action
  command: "POST http://<ip>/api/V1/SYS/restart"
  params: []
  notes: "Body has to be empty, content type text/plain. Current connections will be terminated."

- id: rest_factory_defaults
  label: Restore Factory Default Settings (MMU)
  kind: action
  command: "POST http://<ip>/api/V1/SYS/factoryDefaults"
  params: []
  notes: "Body has to be empty, content type text/plain. Device restarts, connections terminated."

- id: rest_query_package_version
  label: Query Firmware Package Version
  kind: query
  command: "GET http://<ip>/api/V1/PackageVersion"
  params: []

- id: rest_query_serial_number
  label: Query Serial Number
  kind: query
  command: "GET http://<ip>/api/V1/SerialNumber"
  params: []

- id: rest_query_current_time
  label: Query System Date and Time
  kind: query
  command: "GET http://<ip>/api/V1/MANAGEMENT/DATETIME/CurrentTime"
  params: []

- id: rest_set_time
  label: Set Date and Time Manually
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/DATETIME/setTime"
  body: "<date_time>"
  params:
    - name: date_time
      type: string
      description: "ISO 8601 date time format (YYYY-MM-DDTHH:MM:SS). Example: 2034-05-06T14:47:25"

- id: rest_set_ntp_enabled
  label: Enable/Disable NTP
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/DATETIME/NTP/Enabled"
  body: "<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_set_ntp_server
  label: Set NTP Server
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/DATETIME/NTP/ServerPool"
  body: "<server_address>"
  params:
    - name: server_address
      type: string
      description: "Example: pool.ntp.org"

- id: rest_discover_endpoints
  label: Discover Endpoints on the Network
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/discover"
  params: []

- id: rest_add_endpoint
  label: Add an Endpoint to the Matrix
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/addToMainGroup"
  params:
    - name: MAC_address
      type: string
      description: "MAC address in capital letters and without colons. Example: A8D236F08863"

- id: rest_remove_endpoint
  label: Remove an Endpoint from the Matrix
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/removeFromConfiguration"
  params:
    - name: MAC_address
      type: string

- id: rest_identify_endpoint
  label: Identify an Endpoint
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/identifyMe"
  params:
    - name: MAC_address
      type: string
  notes: "Front panel status LEDs blink for 10 seconds."

- id: rest_set_endpoint_alias
  label: Set Endpoint Alias Name
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/Alias"
  body: "<alias>"
  params:
    - name: MAC_address
      type: string
    - name: alias
      type: string
      description: "Non-empty, only [A-Z, 0-9, '_'], maximum 32 characters."

- id: rest_restart_endpoint
  label: Restart an Endpoint
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/restart"
  params:
    - name: MAC_address
      type: string

- id: rest_factory_reset_endpoint
  label: Restore Factory Defaults on an Endpoint
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/factoryReset"
  params:
    - name: MAC_address
      type: string

- id: rest_video_switch
  label: Switch Video Stream to One Destination
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/XP/switch"
  body: "<source_stream>:<destination_stream>"
  params:
    - name: source_stream
      type: string
      description: "<MAC>_S0 or <alias>_S0. Example: A8D236F08863_S0"
    - name: destination_stream
      type: string
      description: "<MAC>_D0 or <alias>_D0. Example: A8D236F08864_D0"

- id: rest_video_switch_all
  label: Switch Video Stream to All Destinations
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/XP/switchAll"
  body: "<source_stream>"
  params:
    - name: source_stream
      type: string

- id: rest_video_source_enable
  label: Enable/Disable Video Source Stream
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<source_stream>/Enable"
  body: "<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_video_query_parameter
  label: Query Video Stream Parameter
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/VIDEO/<stream_ID>/<parameter>"
  params:
    - name: stream_ID
      type: string
      description: "<MAC>_S0 or <MAC>_D0"
    - name: parameter
      type: enum
      values: [SignalPresent, ActiveResolution, RefreshRate, ColorDepth, ColorSpace, ColorRange, SourceStream, SourceStreamAlias]

- id: rest_video_hdcp_source
  label: Set Allowed HDCP Version (Source Stream)
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<source_stream>/HDCP/AllowedHdcpVersion"
  body: "<HDCP_encr>"
  params:
    - name: source_stream
      type: string
    - name: HDCP_encr
      type: enum
      values: ["off", "HDCP 1.4", "HDCP 2.2"]

- id: rest_video_hdcp_destination
  label: Set HDCP Output Mode (Destination Stream)
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<destination_stream>/HDCP/HdcpOutputMode"
  body: "<HDCP_auth>"
  params:
    - name: destination_stream
      type: string
    - name: HDCP_auth
      type: enum
      values: ["FollowSource", "FollowSink (Always Follow)", "FollowSink (Follow Once)"]

- id: rest_query_edid_destination
  label: Query EDID Data of the Destination
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/VIDEO/<destination_stream>/EDID/Data"
  params:
    - name: destination_stream
      type: string

- id: rest_upload_edid_source
  label: Upload EDID Data for the Source
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/<source_stream>/EDID/setData"
  body: "<EDID_data>"
  params:
    - name: source_stream
      type: string
    - name: EDID_data
      type: string
      description: "Hex EDID payload. Example in source: 00ffffffffffff0010a6000156524c4208160103..."
  notes: "Source shows both '/api/V1/MEDIA/<source_stream>/EDID/setData' (syntax line) and '/api/V1/MEDIA/VIDEO/A8D236F08863_S0/EDID/setData' (worked example); both reproduced verbatim."

- id: rest_set_scaler_mode
  label: Set Scaler Display Mode (staged)
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<destination_stream>/SCALING/StagedDisplayMode"
  body: "<scaler_mode>"
  params:
    - name: destination_stream
      type: string
    - name: scaler_mode
      type: enum
      values: [Genlock, GenlockScaling, FastSwitch, FastSwitchCrop, FastSwitchStretch, GenlockWall, FastSwitchWall, Multiview]
  notes: "-SR scaling receiver models only. applySettings must be called afterwards."

- id: rest_set_scaler_resolution
  label: Set Scaler Resolution (staged)
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<destination_stream>/SCALING/StagedFormatName"
  body: "<resolution>"
  params:
    - name: destination_stream
      type: string
    - name: resolution
      type: enum
      values: ["640x480p60", "720x480p60", "720x480p60(16:9)", "720x576p50", "720x576p50(16:9)", "1280x720p24", "1280x720p25", "1280x720p30", "1280x720p50", "1280x720p60", "1920x1080p24", "1920x1080p25", "1920x1080p30", "1920x1080p50", "1920x1080p60", "3840x2160p24", "3840x2160p25", "3840x2160p30", "3840x2160p50", "3840x2160p60", "4096x2160p24", "4096x2160p25", "4096x2160p30", "4096x2160p50", "4096x2160p60"]

- id: rest_scaler_apply_settings
  label: Apply Scaler Settings
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/VIDEO/<destination_stream>/SCALING/applySettings"
  params:
    - name: destination_stream
      type: string
  notes: "Required to apply staged scaler settings."

- id: rest_audio_follow_video
  label: Enable/Disable Audio Follow Video
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/AUDIO/XP/FollowVideo"
  body: "<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_audio_switch
  label: Switch Audio Stream to One Destination
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/AUDIO/XP/switch"
  body: "<source_stream>:<destination_stream>"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: rest_audio_switch_all
  label: Switch Audio Stream to All Destinations
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/AUDIO/XP/switchAll"
  body: "<source_stream>"
  params:
    - name: source_stream
      type: string

- id: rest_audio_source_enable
  label: Enable/Disable Audio Source Stream
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/AUDIO/<source_stream>/Enable"
  body: "<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_audio_query_parameter
  label: Query Audio Stream Parameter
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/AUDIO/<stream_ID>/<parameter>"
  params:
    - name: stream_ID
      type: string
    - name: parameter
      type: enum
      values: [SignalPresent, SignalType, SamplingFreq, NumberOfChannels, SampleSize, SourceStream, SourceStreamAlias]

- id: rest_set_dhcp_enabled
  label: Set DHCP State (Control LAN)
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/DhcpEnabled"
  body: "<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_set_static_ip
  label: Set Static IP Address (Control LAN)
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/StaticIpAddress"
  body: "<IP_address>"
  params:
    - name: IP_address
      type: string

- id: rest_set_static_netmask
  label: Set Static Subnet Mask (Control LAN)
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/StaticNetworkMask"
  body: "<netmask>"
  params:
    - name: netmask
      type: string

- id: rest_set_static_gateway
  label: Set Static Gateway Address (Control LAN)
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/StaticGatewayAddress"
  body: "<gw_address>"
  params:
    - name: gw_address
      type: string

- id: rest_network_apply_settings
  label: Apply Network Settings
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/applySettings"
  params: []
  notes: "Body has to be empty, content type text/plain. Saves and applies staged network values and reboots the network interface."

- id: rest_set_hostname
  label: Set Hostname
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/HostName"
  body: "<unique_name>"
  params:
    - name: unique_name
      type: string
      description: "1-64 characters, English alphabet and numbers; hyphen and dot accepted except as last character."

- id: rest_query_service_port
  label: Query Network Service Port Number
  kind: query
  command: "GET http://<ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/<port>/Port"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS, LW3, "BLUERIVER/TCI", "BLUERIVER/HTTP"]

- id: rest_set_service_enabled
  label: Enable/Disable Network Service Port
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/<port>/Enabled"
  body: "<status>"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS]
    - name: status
      type: enum
      values: ["true", "false"]
  notes: "Source syntax line shows GET for this row; the worked example uses POST (POST .../SERVICES/HTTP/Enabled --data false). POST reproduced here."

- id: rest_set_authentication_enabled
  label: Enable/Disable Basic Authentication
  kind: action
  command: "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/<port>/AuthenticationEnabled"
  body: "<status>"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS]
    - name: status
      type: enum
      values: ["true", "false"]

- id: rest_set_auth_password
  label: Set Authentication Password
  kind: action
  command: "POST <ip>/api/V1/MANAGEMENT/NETWORK/AUTHENTICATION/setPassword"
  body: "<new_password>"
  params:
    - name: new_password
      type: string
      description: "Min 10, max 100 UTF-8 characters (per Update Options / password criteria)."

- id: rest_restart_http_service
  label: Restart HTTP Network Service
  kind: action
  command: "POST <ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/HTTP/restart"
  params: []
  notes: "Step 3 of the authentication enable procedure."

- id: rest_sdvoe_dhcp_state
  label: Set DHCP State for SDVoE Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedIpAcquisitionMode"
  body: "<logical_value>"
  params:
    - name: MAC_address
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_sdvoe_static_ip
  label: Set Static IP Address for SDVoE Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedIpAddress"
  body: "<IP_address>"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string

- id: rest_sdvoe_static_netmask
  label: Set Static Subnet Mask for SDVoE Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedSubnetMask"
  body: "<netmask>"
  params:
    - name: MAC_address
      type: string
    - name: netmask
      type: string

- id: rest_sdvoe_static_gateway
  label: Set Static Gateway Address for SDVoE Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedGatewayAddress"
  body: "<gw_address>"
  params:
    - name: MAC_address
      type: string
    - name: gw_address
      type: string

- id: rest_icron_dhcp_state
  label: Set DHCP State for Icron Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedIpAcquisitionMode"
  body: "<logical_value>"
  params:
    - name: MAC_address
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_icron_static_ip
  label: Set Static IP Address for Icron Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedIpAddress"
  body: "<IP_address>"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string

- id: rest_icron_static_netmask
  label: Set Static Subnet Mask for Icron Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedSubnetMask"
  body: "<netmask>"
  params:
    - name: MAC_address
      type: string
    - name: netmask
      type: string

- id: rest_icron_static_gateway
  label: Set Static Gateway Address for Icron Component
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedGatewayAddress"
  body: "<gw_address>"
  params:
    - name: MAC_address
      type: string
    - name: gw_address
      type: string

- id: rest_serial_set_baudrate
  label: Set Serial BAUD Rate
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/BaudRate"
  body: "<baudrate>"
  params:
    - name: serial_port
      type: string
      description: "<MAC>_P1. Example: A8D236F08863_P1"
    - name: baudrate
      type: enum
      values: [9600, 19200, 38400, 57600, 115200]

- id: rest_serial_set_stopbits
  label: Set Serial Stop Bits
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/StopBits"
  body: "<stopbits>"
  params:
    - name: serial_port
      type: string
    - name: stopbits
      type: enum
      values: [1, 2]

- id: rest_serial_query_databits
  label: Query Serial Data Bits
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/DataBits"
  params:
    - name: serial_port
      type: string

- id: rest_serial_set_parity
  label: Set Serial Parity
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/Parity"
  body: "<parity>"
  params:
    - name: serial_port
      type: string
    - name: parity
      type: enum
      values: [None, Odd, Even]

- id: rest_serial_query_configuration
  label: Query Serial Port Configuration
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/Configuration"
  params:
    - name: serial_port
      type: string
  notes: "Response format example: '115200, 8N1'."

- id: rest_serial_service_enabled
  label: Enable/Disable Serial over IP Port
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/SERVICE/Enabled"
  body: "<logical_value>"
  params:
    - name: serial_port
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]
  notes: "Must be enabled for the RS-232 command injection feature."

- id: rest_serial_command_injection
  label: Command Injection over Serial Port
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/SERIAL/<port_ID>/SERVICE/send"
  body: "<data>"
  params:
    - name: MAC_address
      type: string
    - name: port_ID
      type: enum
      values: [P1, P2]
    - name: data
      type: string
      description: "Control command of the connected source or sink device in ASCII code. Example body from source: 02 50 4F 4E 03"
  notes: "Implemented only in REST API, not in LW3 protocol."

- id: rest_usbhid_follow_video
  label: Enable/Disable USB HID Follow Video
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBHID/XP/FollowVideo"
  body: "<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_usbhid_switch
  label: Switch USB HID Stream to One Destination
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBHID/XP/switch"
  body: "<source_stream>:<destination_stream>"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: rest_usbhid_switch_all
  label: Switch USB HID Stream to All Destinations
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBHID/XP/switchAll"
  body: "<source_stream>"
  params:
    - name: source_stream
      type: string

- id: rest_usbhid_source_enable
  label: Enable/Disable USB HID Source Stream
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBHID/<source_stream>/Enable"
  body: "<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_usbhid_query_parameter
  label: Query USB HID Signal Parameter
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/USBHID/<stream_ID>/<parameter>"
  params:
    - name: stream_ID
      type: string
    - name: parameter
      type: enum
      values: [SignalPresent, Role, ConnectedDeviceNumber, HostStatus, SourceStream, SourceStreamAlias]

- id: rest_usbicron_follow_video
  label: Enable/Disable Icron USB Follow Video
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBICRON/XP/FollowVideo"
  body: "<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: rest_usbicron_switch
  label: Switch Icron USB Stream to One Destination
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBICRON/XP/switch"
  body: "<source_stream>:<destination_stream>"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: rest_usbicron_switch_all
  label: Switch Icron USB Stream to All Destinations
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/USBICRON/XP/switchAll"
  body: "<source_stream>"
  params:
    - name: source_stream
      type: string

- id: rest_usbicron_query_parameter
  label: Query Icron USB Signal Parameter
  kind: query
  command: "GET http://<ip>/api/V1/MEDIA/USBICRON/<stream_ID>/<parameter>"
  params:
    - name: stream_ID
      type: string
    - name: parameter
      type: enum
      values: [SignalPresent, LinkStatus, DevicePairing, SourceStream, SourceStreamAlias]

- id: rest_icron_query_mac
  label: Query MAC Address of the Icron Module
  kind: query
  command: "GET http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/MacAddress"
  params:
    - name: MAC_address
      type: string

- id: rest_icron_query_mode
  label: Query Operation Mode of the Icron Device
  kind: query
  command: "GET http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/Mode"
  params:
    - name: MAC_address
      type: string
  notes: "Returns LEX (Local Extender) or REX (Remote Extender)."

- id: rest_icron_set_usb_mode
  label: Set USB Mode of the Icron Device
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/UsbMode"
  body: "<USB_mode>"
  params:
    - name: MAC_address
      type: string
    - name: USB_mode
      type: enum
      values: [SUI, MSA]

- id: rest_icron_remove_all_pairings
  label: Remove All Pairings of the Icron Device
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/removeAllPairings"
  params:
    - name: MAC_address
      type: string

- id: rest_icron_recover_with_dhcp
  label: Recover the Icron Module with DHCP
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/recoverWithDhcp"
  params:
    - name: MAC_address
      type: string

- id: rest_icron_recover_with_static_ip
  label: Recover the Icron Module with Static IP Address
  kind: action
  command: "POST http://<ip>/api/V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/recoverWithStaticIp"
  body: "<IP_address>,<subnet_mask>,<gateway_address>"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string
    - name: subnet_mask
      type: string
    - name: gateway_address
      type: string

- id: rest_set_ocs_sensor_type
  label: Set OCS Sensor Type
  kind: action
  command: "POST http://<ip>/api/V1/MEDIA/OCS/P1/SensorType"
  body: "<value>"
  params:
    - name: value
      type: string
      description: "Example value from source: Active low"
  notes: "Appears only as a terminal-usage worked example (section 8.2.2 POST Command Example 2); no parameter table is given for it."

# --- LW3 protocol (chapter 9): ASCII command lines, CrLf terminated ---

- id: lw3_get
  label: LW3 GET (generic)
  kind: query
  command: "GET /<NODEPATH>.<PropertyName>"
  params:
    - name: NODEPATH
      type: string
    - name: PropertyName
      type: string
  notes: "Also usable without a property to list child nodes of a node."

- id: lw3_getall
  label: LW3 GETALL (generic)
  kind: query
  command: "GETALL /<NODEPATH>"
  params:
    - name: NODEPATH
      type: string

- id: lw3_set
  label: LW3 SET (generic)
  kind: action
  command: "SET /<NODEPATH>.<PropertyName>=<new_value>"
  params:
    - name: NODEPATH
      type: string
    - name: PropertyName
      type: string
    - name: new_value
      type: string

- id: lw3_call
  label: LW3 CALL (generic)
  kind: action
  command: "CALL /<NODEPATH>:<methodName>(<value>)"
  params:
    - name: NODEPATH
      type: string
    - name: methodName
      type: string
    - name: value
      type: string

- id: lw3_man
  label: LW3 MAN (manual for a node, property or method)
  kind: query
  command: "MAN /<NODEPATH>"
  params:
    - name: NODEPATH
      type: string
  notes: "Example from source: MAN /V1/MEDIA/USBHID/XP:switch"

- id: lw3_open_node
  label: LW3 OPEN (subscribe to a node)
  kind: action
  command: "OPEN /<NODEPATH>"
  params:
    - name: NODEPATH
      type: string

- id: lw3_open_wildcard
  label: LW3 OPEN (subscribe to multiple nodes)
  kind: action
  command: "OPEN /<NODEPATH>/*"
  params:
    - name: NODEPATH
      type: string

- id: lw3_open_list
  label: LW3 OPEN (list active subscriptions)
  kind: query
  command: "OPEN"
  params: []

- id: lw3_close_node
  label: LW3 CLOSE (unsubscribe from a node)
  kind: action
  command: "CLOSE /<NODEPATH>"
  params:
    - name: NODEPATH
      type: string

- id: lw3_close_wildcard
  label: LW3 CLOSE (unsubscribe from multiple nodes)
  kind: action
  command: "CLOSE /<NODEPATH>/*"
  params:
    - name: NODEPATH
      type: string

- id: lw3_set_device_label
  label: Set Device Label (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/LABEL.DeviceLabel=<custom_name>"
  params:
    - name: custom_name
      type: string
      description: "Max 49 ASCII characters."

- id: lw3_restart_device
  label: Restart the MMU (LW3)
  kind: action
  command: "CALL /V1/SYS:restart()"
  params: []

- id: lw3_factory_defaults
  label: Restore Factory Default Settings (LW3)
  kind: action
  command: "CALL /V1/SYS:factoryDefaults()"
  params: []

- id: lw3_query_package_version
  label: Query Firmware Package Version (LW3)
  kind: query
  command: "GET /V1/MANAGEMENT/UID/PACKAGE.Version"
  params: []

- id: lw3_query_package_version_short
  label: Query Firmware Package Version (short path)
  kind: query
  command: "GET /V1.PackageVersion"
  params: []

- id: lw3_query_serial_number
  label: Query Serial Number (LW3)
  kind: query
  command: "GET /V1.SerialNumber"
  params: []

- id: lw3_set_time
  label: Set Date and Time Manually (LW3)
  kind: action
  command: "CALL /V1/MANAGEMENT/DATETIME:setTime(<date_time>)"
  params:
    - name: date_time
      type: string
      description: "ISO 8601 date time format."

- id: lw3_set_ntp_enabled
  label: Enable/Disable NTP (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/DATETIME/NTP.Enabled=<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_set_ntp_server
  label: Set NTP Server (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/DATETIME/NTP.ServerPool=<server_address>"
  params:
    - name: server_address
      type: string

- id: lw3_discover_endpoints
  label: Discover Endpoints on the Network (LW3)
  kind: action
  command: "CALL /V1/DEVICES:discover()"
  params: []

- id: lw3_add_endpoint
  label: Add an Endpoint to the Matrix (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>:addToMainGroup()"
  params:
    - name: MAC_address
      type: string

- id: lw3_remove_endpoint
  label: Remove an Endpoint from the Matrix (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>:removeFromConfiguration()"
  params:
    - name: MAC_address
      type: string

- id: lw3_identify_endpoint
  label: Identify an Endpoint (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>:identifyMe()"
  params:
    - name: MAC_address
      type: string

- id: lw3_set_endpoint_alias
  label: Set Endpoint Alias Name (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>.Alias=<alias>"
  params:
    - name: MAC_address
      type: string
    - name: alias
      type: string
      description: "Non-empty, only [A-Z, 0-9, '_'], maximum 32 characters."

- id: lw3_restart_endpoint
  label: Restart an Endpoint (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>:restart()"
  params:
    - name: MAC_address
      type: string

- id: lw3_factory_reset_endpoint
  label: Restore Factory Defaults on an Endpoint (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>:factoryReset()"
  params:
    - name: MAC_address
      type: string

- id: lw3_video_switch
  label: Switch Video Stream to One Destination (LW3)
  kind: action
  command: "CALL /V1/MEDIA/VIDEO/XP:switch(<source_stream>:<destination_stream>)"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: lw3_video_switch_all
  label: Switch Video Stream to All Destinations (LW3)
  kind: action
  command: "CALL /V1/MEDIA/VIDEO/XP:switchAll(<source_stream>)"
  params:
    - name: source_stream
      type: string

- id: lw3_video_query_all
  label: Query All Video Stream Parameters (LW3)
  kind: query
  command: "GETALL /V1/MEDIA/VIDEO/<stream_ID>"
  params:
    - name: stream_ID
      type: string

- id: lw3_video_source_enable
  label: Enable/Disable Video Source Stream (LW3)
  kind: action
  command: "SET /V1/MEDIA/VIDEO/<source_stream>.Enabled=<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_video_hdcp_source
  label: Set Allowed HDCP Version, Source Stream (LW3)
  kind: action
  command: "SET /V1/MEDIA/VIDEO/<source_stream>/HDCP.AllowedHdcpVersion=<HDCP_encr>"
  params:
    - name: source_stream
      type: string
    - name: HDCP_encr
      type: enum
      values: ["off", "HDCP 1.4", "HDCP 2.2"]

- id: lw3_video_hdcp_destination
  label: Set HDCP Output Mode, Destination Stream (LW3)
  kind: action
  command: "SET /V1/MEDIA/VIDEO/<destination_stream>/HDCP.HdcpOutputMode=<HDCP_auth>"
  params:
    - name: destination_stream
      type: string
    - name: HDCP_auth
      type: enum
      values: ["FollowSource", "FollowSink (Always Follow)", "FollowSink (Follow Once)"]

- id: lw3_query_edid_destination
  label: Query EDID Data of the Destination (LW3)
  kind: query
  command: "GET /V1/MEDIA/VIDEO/<destination_stream>/EDID.Data"
  params:
    - name: destination_stream
      type: string

- id: lw3_upload_edid_source
  label: Upload EDID Data for the Source (LW3)
  kind: action
  command: "CALL /V1/MEDIA/VIDEO/<source_stream>/EDID:setData(<EDID_data>)"
  params:
    - name: source_stream
      type: string
    - name: EDID_data
      type: string

- id: lw3_set_scaler_mode
  label: Set Scaler Display Mode, staged (LW3)
  kind: action
  command: "SET /V1/MEDIA/VIDEO/<destination_stream>/SCALING.StagedDisplayMode=<scaler_mode>"
  params:
    - name: destination_stream
      type: string
    - name: scaler_mode
      type: enum
      values: [Genlock, GenlockScaling, FastSwitch, FastSwitchCrop, FastSwitchStretch, GenlockWall, FastSwitchWall, Multiview]

- id: lw3_set_scaler_resolution
  label: Set Scaler Resolution, staged (LW3)
  kind: action
  command: "SET /V1/MEDIA/VIDEO/<destination_stream>/SCALING.StagedFormatName=<resolution>"
  params:
    - name: destination_stream
      type: string
    - name: resolution
      type: string
      description: "Same resolution list as the REST scaler resolution action."

- id: lw3_scaler_apply_settings
  label: Apply Scaler Settings (LW3)
  kind: action
  command: "CALL /V1/MEDIA/VIDEO/<destination_stream>/SCALING:applySettings()"
  params:
    - name: destination_stream
      type: string

- id: lw3_audio_follow_video
  label: Enable/Disable Audio Follow Video (LW3)
  kind: action
  command: "SET /V1/MEDIA/AUDIO/XP.FollowVideo=<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_audio_switch
  label: Switch Audio Stream to One Destination (LW3)
  kind: action
  command: "CALL /V1/MEDIA/AUDIO/XP:switch(<source_stream>:<destination_stream>)"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: lw3_audio_switch_all
  label: Switch Audio Stream to All Destinations (LW3)
  kind: action
  command: "CALL /V1/MEDIA/AUDIO/XP:switchAll(<source_stream>)"
  params:
    - name: source_stream
      type: string

- id: lw3_audio_source_enable
  label: Enable/Disable Audio Source Stream (LW3)
  kind: action
  command: "SET /V1/MEDIA/AUDIO/<source_stream>.Enabled=<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_audio_query_all
  label: Query All Audio Stream Parameters (LW3)
  kind: query
  command: "GETALL /V1/MEDIA/AUDIO/<stream_ID>"
  params:
    - name: stream_ID
      type: string

- id: lw3_set_dhcp_enabled
  label: Set DHCP State, Control LAN (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK.DhcpEnabled=<dhcp_status>"
  params:
    - name: dhcp_status
      type: enum
      values: ["true", "false"]

- id: lw3_set_static_ip
  label: Set Static IP Address, Control LAN (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK.StaticIpAddress=<IP_address>"
  params:
    - name: IP_address
      type: string

- id: lw3_set_static_netmask
  label: Set Static Subnet Mask, Control LAN (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK.StaticNetworkMask=<netmask>"
  params:
    - name: netmask
      type: string

- id: lw3_set_static_gateway
  label: Set Static Gateway Address, Control LAN (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK.StaticGatewayAddress=<gw_address>"
  params:
    - name: gw_address
      type: string

- id: lw3_set_hostname
  label: Set Hostname (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK.HostName=<unique_name>"
  params:
    - name: unique_name
      type: string
      description: "1-64 characters; hyphen and dot accepted except as last character."

- id: lw3_network_apply_settings
  label: Apply Network Settings (LW3)
  kind: action
  command: "CALL /V1/MANAGEMENT/NETWORK:applySettings()"
  params: []

- id: lw3_query_service_port
  label: Query Service Port Number (LW3)
  kind: query
  command: "GET /V1/MANAGEMENT/NETWORK/SERVICES/<port>.Port"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS, LW3, "BLUERIVER/TCI", "BLUERIVER/HTTP"]

- id: lw3_set_service_enabled
  label: Enable/Disable Network Service Port (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK/SERVICES/<port>.Enabled=<status>"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS]
    - name: status
      type: enum
      values: ["true", "false"]

- id: lw3_set_authentication_enabled
  label: Enable/Disable Authentication (LW3)
  kind: action
  command: "SET /V1/MANAGEMENT/NETWORK/SERVICES/<port>.AuthenticationEnabled=<status>"
  params:
    - name: port
      type: enum
      values: [HTTP, HTTPS]
    - name: status
      type: enum
      values: ["true", "false"]

- id: lw3_sdvoe_dhcp_state
  label: Set DHCP State for SDVoE Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedIpAcquisitionMode=<dhcp_status>"
  params:
    - name: MAC_address
      type: string
    - name: dhcp_status
      type: enum
      values: ["true", "false"]

- id: lw3_sdvoe_static_ip
  label: Set Static IP Address for SDVoE Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedIpAddress=<IP_address>"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string

- id: lw3_sdvoe_static_netmask
  label: Set Static Subnet Mask for SDVoE Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedSubnetMask=<netmask>"
  params:
    - name: MAC_address
      type: string
    - name: netmask
      type: string

- id: lw3_sdvoe_static_gateway
  label: Set Static Gateway Address for SDVoE Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/SDVOE/NETWORK/StagedGatewayAddress=<gw_address>"
  params:
    - name: MAC_address
      type: string
    - name: gw_address
      type: string

- id: lw3_icron_dhcp_state
  label: Set DHCP State for Icron Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedIpAcquisitionMode=<dhcp_status>"
  params:
    - name: MAC_address
      type: string
    - name: dhcp_status
      type: enum
      values: ["true", "false"]

- id: lw3_icron_static_ip
  label: Set Static IP Address for Icron Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedIpAddress=<IP_address>"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string

- id: lw3_icron_static_netmask
  label: Set Static Subnet Mask for Icron Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedSubnetMask=<netmask>"
  params:
    - name: MAC_address
      type: string
    - name: netmask
      type: string

- id: lw3_icron_static_gateway
  label: Set Static Gateway Address for Icron Component (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON/NETWORK/StagedGatewayAddress=<gw_address>"
  params:
    - name: MAC_address
      type: string
    - name: gw_address
      type: string

- id: lw3_serial_set_baudrate
  label: Set Serial BAUD Rate (LW3)
  kind: action
  command: "SET /V1/MEDIA/SERIAL/<serial_port>.BaudRate=<baudrate>"
  params:
    - name: serial_port
      type: string
      description: "<MAC>_P1"
    - name: baudrate
      type: enum
      values: [9600, 19200, 38400, 57600, 115200]
  notes: "Worked example in source uses the spelling '.Baudrate=19200'; syntax line uses '.BaudRate'."

- id: lw3_serial_set_stopbits
  label: Set Serial Stop Bits (LW3)
  kind: action
  command: "SET /V1/MEDIA/SERIAL/<serial_port>.StopBits=<stopbits>"
  params:
    - name: serial_port
      type: string
    - name: stopbits
      type: enum
      values: [1, 2]

- id: lw3_serial_query_databits
  label: Query Serial Data Bits (LW3)
  kind: query
  command: "GET /V1/MEDIA/SERIAL/<serial_port>.DataBits"
  params:
    - name: serial_port
      type: string

- id: lw3_serial_set_parity
  label: Set Serial Parity (LW3)
  kind: action
  command: "SET /V1/MEDIA/SERIAL/<serial_port>.Parity=<parity>"
  params:
    - name: serial_port
      type: string
    - name: parity
      type: enum
      values: [None, Odd, Even]

- id: lw3_serial_query_configuration
  label: Query Serial Port Configuration (LW3)
  kind: query
  command: "GET /V1/MEDIA/SERIAL/<serial_port>.Configuration"
  params:
    - name: serial_port
      type: string

- id: lw3_serial_service_enabled
  label: Enable/Disable Serial over IP Port (LW3)
  kind: action
  command: "SET /V1/MEDIA/SERIAL/<serial_port>/SERVICE.Enabled=<logical_value>"
  params:
    - name: serial_port
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_usbhid_follow_video
  label: Enable/Disable USB HID Follow Video (LW3)
  kind: action
  command: "SET /V1/MEDIA/USBHID/XP.FollowVideo=<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_usbhid_switch
  label: Switch USB HID Stream to One Destination (LW3)
  kind: action
  command: "CALL /V1/MEDIA/USBHID/XP:switch(<source_stream>:<destination_stream>)"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: lw3_usbhid_switch_all
  label: Switch USB HID Stream to All Destinations (LW3)
  kind: action
  command: "CALL /V1/MEDIA/USBHID/XP:switchAll(<source_stream>)"
  params:
    - name: source_stream
      type: string

- id: lw3_usbhid_source_enable
  label: Enable/Disable USB HID Source Stream (LW3)
  kind: action
  command: "SET /V1/MEDIA/USBHID/<source_stream>.Enabled=<logical_value>"
  params:
    - name: source_stream
      type: string
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_usbhid_query_all
  label: Query All USB HID Signal Parameters (LW3)
  kind: query
  command: "GETALL /V1/MEDIA/USBHID/<stream_ID>"
  params:
    - name: stream_ID
      type: string

- id: lw3_usbicron_follow_video
  label: Enable/Disable Icron USB Follow Video (LW3)
  kind: action
  command: "SET /V1/MEDIA/USBICRON/XP.FollowVideo=<logical_value>"
  params:
    - name: logical_value
      type: enum
      values: ["true", "false"]

- id: lw3_usbicron_switch
  label: Switch Icron USB Stream to One Destination (LW3)
  kind: action
  command: "CALL /V1/MEDIA/USBICRON/XP:switch(<source_stream>:<destination_stream>)"
  params:
    - name: source_stream
      type: string
    - name: destination_stream
      type: string

- id: lw3_usbicron_switch_all
  label: Switch Icron USB Stream to All Destinations (LW3)
  kind: action
  command: "CALL /V1/MEDIA/USBICRON/XP:switchAll(<source_stream>)"
  params:
    - name: source_stream
      type: string

- id: lw3_usbicron_query_all
  label: Query All Icron USB Signal Parameters (LW3)
  kind: query
  command: "GETALL /V1/MEDIA/USBICRON/<stream_ID>"
  params:
    - name: stream_ID
      type: string

- id: lw3_icron_query_mac
  label: Query MAC Address of the Icron Module (LW3)
  kind: query
  command: "GET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON.MacAddress"
  params:
    - name: MAC_address
      type: string

- id: lw3_icron_query_mode
  label: Query Operation Mode of the Icron Device (LW3)
  kind: query
  command: "GET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON.Mode"
  params:
    - name: MAC_address
      type: string

- id: lw3_icron_set_usb_mode
  label: Set USB Mode of the Icron Device (LW3)
  kind: action
  command: "SET /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON.UsbMode=<USB_mode>"
  params:
    - name: MAC_address
      type: string
    - name: USB_mode
      type: enum
      values: [SUI, MSA]

- id: lw3_icron_remove_all_pairings
  label: Remove All Pairings of the Icron Device (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON:removeAllPairings()"
  params:
    - name: MAC_address
      type: string

- id: lw3_icron_recover_with_dhcp
  label: Recover the Icron Module with DHCP (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON:recoverWithDhcp()"
  params:
    - name: MAC_address
      type: string

- id: lw3_icron_recover_with_static_ip
  label: Recover the Icron Module with Static IP Address (LW3)
  kind: action
  command: "CALL /V1/DEVICES/<MAC_address>/COMPONENTS/ICRON:recoverWithStaticIp(<IP_address>,<subnet_mask>,<gateway_address>)"
  params:
    - name: MAC_address
      type: string
    - name: IP_address
      type: string
    - name: subnet_mask
      type: string
    - name: gateway_address
      type: string

Feedbacks

# Video stream parameters (REST GET .../MEDIA/VIDEO/<stream_ID>/<parameter>; LW3 GETALL)
- id: video_signal_present
  type: enum
  values: ["true", "false"]
  source_parameter: SignalPresent

- id: video_active_resolution
  type: string
  source_parameter: ActiveResolution
  example: "3840x2160"

- id: video_refresh_rate
  type: string
  source_parameter: RefreshRate
  example: "60.00"

- id: video_color_depth
  type: enum
  values: ["8 bpc", "10 bpc", "12 bpc"]
  source_parameter: ColorDepth

- id: video_color_space
  type: enum
  values: ["RGB", "YCbCr 4:4:4", "YCbCr 4:2:2", "YCbCr 4:2:0"]
  source_parameter: ColorSpace

- id: video_color_range
  type: enum
  values: [Default, Full, Limited]
  source_parameter: ColorRange

- id: video_source_stream
  type: string
  source_parameter: SourceStream
  example: "A8D236F08863_S0"

- id: video_source_stream_alias
  type: string
  source_parameter: SourceStreamAlias
  example: "MTR_TX_S0"

# Additional video properties observed in the GETALL worked example
- id: video_total_resolution
  type: string
  source_parameter: TotalResolution
  example: "4400x2250"

- id: video_multicast_source_address
  type: string
  source_parameter: MulticastSourceAddress
  example: "224.1.1.3"

- id: video_stream_alias
  type: string
  source_parameter: StreamAlias

- id: video_stream_id
  type: string
  source_parameter: StreamId
  example: "D0"

- id: video_device_alias
  type: string
  source_parameter: DeviceAlias

# Audio stream parameters
- id: audio_signal_present
  type: enum
  values: ["true", "false"]
  source_parameter: SignalPresent

- id: audio_signal_type
  type: enum
  values: [PCM, HBR, Other, "N/A"]
  source_parameter: SignalType

- id: audio_sampling_freq
  type: enum
  values: ["22.05 kHz", "24 kHz", "32 kHz", "44.1 kHz", "48 kHz", "88.2 kHz", "96 kHz", "176.4 kHz", "192 kHz", "768 kHz", "N/A"]
  source_parameter: SamplingFreq

- id: audio_number_of_channels
  type: integer
  source_parameter: NumberOfChannels

- id: audio_sample_size
  type: integer
  source_parameter: SampleSize
  units: bits

# USB HID parameters
- id: usbhid_signal_present
  type: enum
  values: ["true", "false"]
  source_parameter: SignalPresent

- id: usbhid_role
  type: enum
  values: [Disabled, Local, Remote]
  source_parameter: Role

- id: usbhid_connected_device_number
  type: integer
  source_parameter: ConnectedDeviceNumber

- id: usbhid_host_status
  type: enum
  values: [Disconnected, Configuring, Connected]
  source_parameter: HostStatus

# Icron USB parameters
- id: icron_link_status
  type: enum
  values: [NotPaired, Paired, Linked]
  source_parameter: LinkStatus

- id: icron_device_pairing
  type: string
  source_parameter: DevicePairing
  description: "List of MAC addresses of paired devices."

- id: icron_mode
  type: enum
  values: [LEX, REX]
  source_parameter: Mode

- id: icron_usb_mode
  type: enum
  values: [SUI, MSA]
  source_parameter: UsbMode

- id: icron_mac_address
  type: string
  source_parameter: MacAddress
  example: "a8:d2:36:f1:88:63"

# Serial port feedback
- id: serial_configuration
  type: string
  source_parameter: Configuration
  example: "115200, 8N1"

- id: serial_data_bits
  type: enum
  values: [8, 9]
  source_parameter: DataBits

# Protocol-level responses
- id: rest_status_code
  type: enum
  values: ["200 OK", "401 Unauthorized", "404 Not Found", "405 Method Not Allowed", "406 Not Acceptable", "500 Internal Server Error"]
  description: "HTTP status codes defined by the REST API."

- id: lw3_response_prefix
  type: enum
  values: ["n-", "nE", "nm", "pr", "pw", "pE", "pm", "m-", "mO", "mF", "mE", "mm"]
  description: "2-character prefix describing the type of an LW3 response."

Variables

- id: device_label
  type: string
  max_length: 49
  path_rest: "/api/V1/MANAGEMENT/LABEL/DeviceLabel"
  path_lw3: "/V1/MANAGEMENT/LABEL.DeviceLabel"

- id: endpoint_alias
  type: string
  max_length: 32
  allowed_characters: "A-Z, 0-9, _"
  path_rest: "/api/V1/DEVICES/<MAC_address>/Alias"
  path_lw3: "/V1/DEVICES/<MAC_address>.Alias"

- id: hostname
  type: string
  min_length: 1
  max_length: 64
  path_rest: "/api/V1/MANAGEMENT/NETWORK/HostName"
  path_lw3: "/V1/MANAGEMENT/NETWORK.HostName"

- id: serial_baud_rate
  type: enum
  values: [9600, 19200, 38400, 57600, 115200]
  factory_default: 9600  # Factory Default Settings, TPN/OPTN series endpoint devices

- id: serial_data_bits
  type: enum
  values: [8, 9]
  factory_default: 8

- id: serial_parity
  type: enum
  values: [None, Odd, Even]
  factory_default: None

- id: serial_stop_bits
  type: enum
  values: [1, 2]
  factory_default: 1

- id: ntp_server_pool
  type: string
  example: "pool.ntp.org"

- id: system_time
  type: string
  format: "ISO 8601 (YYYY-MM-DDTHH:MM:SS)"

- id: hdcp_allowed_version_source
  type: enum
  values: ["off", "HDCP 1.4", "HDCP 2.2"]

- id: hdcp_output_mode_destination
  type: enum
  values: ["FollowSource", "FollowSink (Always Follow)", "FollowSink (Follow Once)"]

- id: scaler_display_mode
  type: enum
  values: [Genlock, GenlockScaling, FastSwitch, FastSwitchCrop, FastSwitchStretch, GenlockWall, FastSwitchWall, Multiview]

- id: icron_usb_mode
  type: enum
  values: [SUI, MSA]
  factory_default: SUI  # only for U2K models

- id: ip_acquisition_mode
  type: enum
  values: ["true", "false"]
  factory_default: "true"  # DHCP is the factory default IP address mode

Events

- id: lw3_property_change_notification
  trigger: "A subscribed node's property value changes (after OPEN /<NODEPATH>)."
  message: "CHG /<NODEPATH>.<PropertyName>=<value>"
  example: "CHG /V1/MEDIA/VIDEO/A8D236F48643_S0.Enabled=false"
  notes: "Asynchronous. Subscriptions are per-connection and are deleted when the connection terminates. REST API does not support subscription; polling must be used instead."

- id: lw3_error_message
  trigger: "A command fails."
  message: "mE /<NODEPATH>:<method> %E<code>: <text>"
  example: "mE /V1/MEDIA/USBHID/XP:switch %E004: Invalid value: tpn-mmu-crosspoint: Invalid switch parameters | Switching streams failed!"

# Factory-module driver events named in the source (LARA/LWR factory module):
- id: lw3_get_response_received
  description: "A response has been received for a request."
- id: signal_present_changed
  description: "Signal present property has been changed on one of the input/output ports of an endpoint device."
- id: crosspoint_changed
  description: "A crosspoint setting has been changed."

Macros

- id: apply_static_network_settings
  description: "Network property changes are stored but not applied until applySettings is called; one call suffices for several changed parameters."
  steps:
    - "SET/POST the desired network properties (DhcpEnabled, StaticIpAddress, StaticNetworkMask, StaticGatewayAddress, HostName, or the SDVOE/ICRON Staged* properties)"
    - "POST http://<ip>/api/V1/MANAGEMENT/NETWORK/applySettings   # or LW3: CALL /V1/MANAGEMENT/NETWORK:applySettings()"
  notes: "applySettings saves and applies the new values and reboots the network interface."

- id: apply_scaler_settings
  description: "Scaler settings are staged only until applySettings is called."
  steps:
    - "SET/POST SCALING.StagedDisplayMode and/or SCALING.StagedFormatName"
    - "CALL /V1/MEDIA/VIDEO/<destination_stream>/SCALING:applySettings()"

- id: enable_basic_authentication
  description: "Documented three-step procedure for enabling REST basic authentication."
  steps:
    - "POST <ip>/api/V1/MANAGEMENT/NETWORK/AUTHENTICATION/setPassword   body: <new_password>"
    - "POST <ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/HTTP/AuthenticationEnabled   body: true"
    - "POST <ip>/api/V1/MANAGEMENT/NETWORK/SERVICES/HTTP/restart"
  notes: "Set the password before enabling authentication; no password is set by default. Restart of the HTTP(S) services is required."

- id: enable_serial_command_injection
  description: "Serial over IP service must be enabled before command injection can be used."
  steps:
    - "POST http://<ip>/api/V1/MEDIA/SERIAL/<serial_port>/SERVICE/Enabled   body: true"
    - "POST http://<ip>/api/V1/DEVICES/<MAC_address>/SERIAL/<port_ID>/SERVICE/send   body: <data>"

Safety

confirmation_required_for:
  - rest_factory_defaults
  - lw3_factory_defaults
  - rest_factory_reset_endpoint
  - lw3_factory_reset_endpoint
  - rest_restart_device
  - lw3_restart_device
  - rest_restart_endpoint
  - lw3_restart_endpoint
  - rest_network_apply_settings
  - lw3_network_apply_settings
  - rest_set_dhcp_enabled
  - lw3_set_dhcp_enabled
  - rest_set_static_ip
  - lw3_set_static_ip
  - rest_icron_remove_all_pairings
interlocks:
  - id: serial_service_required_for_injection
    rule: "The Serial over IP SERVICE.Enabled property must be enabled before RS-232 command injection can be used."
    source: "ATTENTION: The following property is required to be enabled for the RS-232 command injection feature."
  - id: scaler_apply_required
    rule: "Scaler settings are staged only; applySettings() must be called for the setting to take effect in the receiver."
    source: "ATTENTION: Calling of applySettings() method is required for applying the setting in the receiver."
  - id: network_apply_required
    rule: "Network property writes are stored but not applied until applySettings is called; applySettings reboots the network interface."
    source: "ATTENTION: When you change a network property, the new value is stored, but the applySettings method must always be called to apply the new settings."
warnings:
  - "ATTENTION: Always be careful when applying static IP address. Incorrect IP address assignment may create network loop or the devices might be unreachable. Lightware recommends using DHCP (dynamic IP address) setting."
  - "ATTENTION: In case of static IP address, please be sure the given IP address is in the same subnet network with the controller device."
  - "ATTENTION: Known issue: when IP settings are changed to static IP and there is an active RS-232 TCP communication, the changing may break it. Workaround: Disable the related TCP ports before performing network configuration changes."
  - "ATTENTION: All configuration data (including IP addresses) will be overwritten by restoring a configuration (clone file restore)."
  - "ATTENTION: While the firmware is being updated, the normal operation mode is suspended, as the device is switched to bootload mode. Signal processing is not performed. Do not interrupt the firmware update."
  - "ATTENTION: Before mounting the MMU, please keep a record of the default password from the sticker on the device's top. It will be necessary for the first login and this password will be restored after a factory reset."
  - "ATTENTION: Please ensure proper time and date setting in the MMU, because it affects the self-signed certificate (SSL) generation when using WSS or HTTPS. Improper time and date setting may lead to certificate rejection."
  - "Restart and factory reset terminate current connections and interrupt signal transmission."
  - "There is no encryption when the REST API communication happens via HTTP; HTTP should be disabled and HTTPS used instead to avoid password interception."
# UNRESOLVED: no electrical, thermal, or power-sequencing safety requirements are stated for the endpoint beyond PoE PD standard (IEEE802.3af) compliance.

Notes

  • Control topology. The source documents no direct control protocol for the HDMI-TPN-TX107 itself. Every command is sent to the TPN-MMU-X100 Matrix Management Unit, which targets the endpoint by MAC address (capital letters, no colons), by stream ID (<MAC>_S0, <MAC>_D0, or <alias>_S0), or by serial port ID (<MAC>_P1). Aliases may be substituted for MAC addresses in stream IDs.
  • Two equivalent interfaces. "All methods and properties of the LW3 tree structure appear below /api as a HTTP(s) URL. The separator character is always a slash ('/') instead of point ('.') and colon (':')." REST URLs are case-insensitive; LW3 commands are case-sensitive. Only Command Injection over Serial Port is REST-only.
  • REST limitations. Node querying (GET /<NODEPATH> without a property) returns 404; OPEN/CLOSE subscription is not interpreted. Polling substitutes for subscription.
  • LW3 connection. Raw TCP to port 6107, or WS on port 80 / WSS on port 443 at path /lw3. Lines terminated CrLf, max 800 bytes. Optional four-hex-digit signature may precede any command to group the response lines in {...}.
  • Escaping (LW3).

Provenance

source_domains:
  - assets.prod.pim.lightware.com
  - go.lightware.com
  - academy.lightware.com
source_urls:
  - https://assets.prod.pim.lightware.com/assets/File-Downloads/Guides-and-Manuals/User-Manual/TPN-MMU_UserManual.pdf
  - https://go.lightware.com/tpn-mmu-pum
  - https://academy.lightware.com/
retrieved_at: 2026-08-10T20:48:42.721Z
last_checked_at: 2026-08-19T09:32:48.967Z

Verification Summary

verdict: verified
checked_at: 2026-08-19T09:32:48.967Z
matched_actions: 154
action_count: 154
confidence: medium
summary: "All 154 spec actions mirror verbatim REST/LW3 commands in the source; transport values all documented. (5 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "no direct-to-endpoint control interface is documented; every command in this spec is addressed to the MMU."
- "firmware compatibility range for HDMI-TPN-TX107 not stated."
- "the endpoint RS-232 port is a pass-through/command-injection port for a connected third-party device, not a control interface for the TX107 itself; it is therefore not listed under Transport.protocols."
- "several sections of the source are chunked excerpts; chapters 1-5 and parts of 10-13 are summaries or non-protocol content."
- "no electrical, thermal, or power-sequencing safety requirements are stated for the endpoint beyond PoE PD standard (IEEE802.3af) compliance."

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