Summary

Xilica Solaro Series DSP processors controlled via ASCII-based TCP/UDP protocol. TCP port 10007 for commands and responses; UDP port 10008 for subscription broadcast notifications. Supports parameter get/set, presets, subscriptions, control groups, and password-protected login. Keep-alive required every 60 seconds on TCP connection.

Transport

protocols:
  - tcp
  - udp
addressing:
  port: 10007
  # UNRESOLVED: UDP subscription port 10008 - no separate addressing field for secondary protocol
auth:
  type: password
  description: >-
    Optional password protection. If enabled, LOGIN command must be sent before
    any other command. Auth persists for duration of TCP connection only.
    Re-login required after reconnection.
connection:
  keepalive_interval_ms: 60000
  keepalive_command: KEEPALIVE
  note: >-
    TCP keep-alive mandatory every 60 seconds. On disconnect all subscriptions
    and groups are lost and must be reconfigured.

Traits

traits:
  - powerable     # REBOOT command
  - queryable     # GET, GETRAW, REFRESH commands
  - levelable     # SET, INC, DEC commands for gain/fader parameters

Actions

actions:
  - id: set
    label: Set Parameter
    kind: action
    description: "Set a control object or group to a value (number, string, or boolean)"
    command: "SET {control_object} {data}"
    params:
      - name: control_object
        type: string
        description: "Control object name or $group name (up to 32 chars, case-sensitive)"
      - name: data
        type: string
        description: "Number, quoted string, or boolean (TRUE/FALSE)"

  - id: setraw
    label: Set Raw Parameter
    kind: action
    description: "Set a control object or group using raw numeric value"
    command: "SETRAW {control_object} {data}"
    params:
      - name: control_object
        type: string
        description: "Control object name or $group name"
      - name: data
        type: number
        description: "Raw numeric value (e.g. -3200 for -3.2 dB)"

  - id: get
    label: Get Parameter
    kind: query
    description: "Get formatted value of a control object or group"
    command: "GET {control_object}"
    response: "{control_object}={data}"
    params:
      - name: control_object
        type: string
        description: "Control object name or $group name"

  - id: getraw
    label: Get Raw Parameter
    kind: query
    description: "Get raw numeric value of a control object or group"
    command: "GETRAW {control_object}"
    response: "{control_object}={data}"
    params:
      - name: control_object
        type: string
        description: "Control object name or $group name"

  - id: inc
    label: Increment Parameter
    kind: action
    description: "Increment a control object or group by a numeric amount (formatted)"
    command: "INC {control_object} {data}"
    params:
      - name: control_object
        type: string
      - name: data
        type: number
        description: "Increment amount (e.g. 0.5 for +0.5 dB)"

  - id: incraw
    label: Increment Raw Parameter
    kind: action
    description: "Increment a control object or group by raw numeric amount"
    command: "INCRAW {control_object} {data}"
    params:
      - name: control_object
        type: string
      - name: data
        type: number

  - id: dec
    label: Decrement Parameter
    kind: action
    description: "Decrement a control object or group by a numeric amount (formatted)"
    command: "DEC {control_object} {data}"
    params:
      - name: control_object
        type: string
      - name: data
        type: number

  - id: decraw
    label: Decrement Raw Parameter
    kind: action
    description: "Decrement a control object or group by raw numeric amount"
    command: "DECRAW {control_object} {data}"
    params:
      - name: control_object
        type: string
      - name: data
        type: number

  - id: toggle
    label: Toggle Parameter
    kind: action
    description: "Toggle boolean state of a control object or group"
    command: "TOGGLE {control_object}"
    params:
      - name: control_object
        type: string

  - id: preset_recall
    label: Recall Preset
    kind: action
    description: "Recall a preset by number or name"
    command: "PRESET {data}"
    params:
      - name: data
        type: string
        description: "Preset number (e.g. 4) or quoted preset name"

  - id: subscribe
    label: Subscribe to Parameter
    kind: action
    description: "Subscribe to notifications for a control object"
    command: "SUBSCRIBE {control_object} {transport}"
    params:
      - name: control_object
        type: string
      - name: transport
        type: string
        description: 'Optional: "TCP" (unicast, default) or "UDP" (broadcast on port 10008)'

  - id: unsubscribe
    label: Unsubscribe from Parameter
    kind: action
    description: "Unsubscribe from notifications for a control object"
    command: "UNSUBSCRIBE {control_object}"
    params:
      - name: control_object
        type: string

  - id: keepalive
    label: Keep Alive
    kind: action
    description: "Send keep-alive to maintain TCP connection. No response from device."
    command: "KEEPALIVE"
    params: []

  - id: interval
    label: Set Subscription Interval
    kind: action
    description: "Set global minimum notification interval for all subscriptions (Solaro: global across all connections)"
    command: "INTERVAL {time_ms}"
    params:
      - name: time_ms
        type: integer
        description: "Minimum interval in milliseconds (minimum 100)"

  - id: login
    label: Login
    kind: action
    description: "Authenticate if device is password-protected. Required before other commands when protection enabled."
    command: "LOGIN {password}"
    params:
      - name: password
        type: string
        description: "Quoted password string"

  - id: reboot
    label: Reboot Device
    kind: action
    description: "Remotely reboot the device. No response; device reboots immediately (Solaro behavior)."
    command: "REBOOT"
    params: []

  - id: refresh
    label: Refresh All Parameters
    kind: query
    description: "Get formatted data values for all control objects"
    command: "REFRESH"
    response: "{control_object}={data} {control_object}={data} ..."
    params: []

  - id: group_create
    label: Create Control Group
    kind: action
    description: "Create a named control group (no $ prefix needed in CREATE command; added automatically)"
    command: "CREATE {group_name}"
    params:
      - name: group_name
        type: string
        description: "Group name (up to 32 chars, no $ prefix, no double quotes)"

  - id: group_remove
    label: Remove Control Group
    kind: action
    description: "Remove a control group and free resources"
    command: "REMOVE ${group_name}"
    params:
      - name: group_name
        type: string
        description: "Group name with $ prefix"

  - id: group_join
    label: Join Control Group
    kind: action
    description: "Add a control object to a group"
    command: "JOIN ${group_name} {control_object}"
    params:
      - name: group_name
        type: string
        description: "Group name with $ prefix"
      - name: control_object
        type: string
        description: "Quoted control object name"

  - id: group_leave
    label: Leave Control Group
    kind: action
    description: "Remove a control object from a group"
    command: "LEAVE ${group_name} {control_object}"
    params:
      - name: group_name
        type: string
        description: "Group name with $ prefix"
      - name: control_object
        type: string
        description: "Quoted control object name"

Feedbacks

feedbacks:
  - id: parameter_value
    type: string
    description: "Current formatted value of a control object"
    trigger: "Response to GET command"
    format: "{control_object}={data}"

  - id: parameter_raw_value
    type: number
    description: "Current raw value of a control object"
    trigger: "Response to GETRAW command"
    format: "{control_object}={data}"

  - id: subscription_notification
    type: string
    description: "Unsolicited notification of data change on subscribed control object"
    trigger: "Automatic on subscribed parameter change"
    format: "#{control_object}={data}"
    note: "Sent via TCP unicast or UDP broadcast per subscription config"

  - id: error_response
    type: enum
    description: "Error code returned for invalid commands"
    trigger: "Invalid command or arguments"
    format: "ERROR={code}"
    values:
      - "101"  # Invalid Command
      - "102"  # Bad Arguments
      - "103"  # Invalid Data Format
      - "104"  # Control Object Not Found
      - "105"  # Parameter Not Found
      - "106"  # Data Value Not Found
      - "107"  # Max Subscription Reached
      - "108"  # Password Error
      - "109"  # Not Yet Login
      - "110"  # Command Not Supported for Control Object
      - "111"  # Invalid Group Name
      - "112"  # Max Control Group Reached
      - "113"  # Max Control Object in Group Reached
      - "114"  # Object Already in Group
      - "115"  # Object Not in Group
      - "116"  # Conflicting With Other Objects in Group
      - "117"  # Invalid Preset #
      - "118"  # Invalid Preset Name

  - id: ok_response
    type: enum
    description: "Success acknowledgement for most commands"
    values: ["OK"]

Variables

# Control objects are user-defined in Xilica Designer and discovered at runtime.
# No static variable list available from source.
# UNRESOLVED: variable list is dynamic per device configuration (set up in Xilica Designer)

Events

events:
  - id: subscription_update
    description: "Pushed when a subscribed control object's value changes"
    format: "#{control_object}={data}<CR>"
    transport: "TCP unicast or UDP broadcast per subscription setting"

Macros

# UNRESOLVED: no macro sequences described in source

Safety

confirmation_required_for:
  - reboot  # No response, immediate reboot; all subscriptions and groups lost
interlocks: []
note: >-
  REBOOT on Solaro has no response - device reboots immediately.
  TCP disconnect causes loss of all subscriptions and group configurations.
  Control object names must be configured in Xilica Designer before use.
# UNRESOLVED: no safety interlock procedures stated in source

Notes

  • Command strings are ASCII, fields separated by single space, terminated with <CR>. Multiple spaces cause parse errors.
  • Control object names are case-sensitive, up to 32 chars, no double quotes, cannot start with $.
  • Group names always prefixed with $ (except in CREATE command where $ is auto-added).
  • String data values must be enclosed in double quotes.
  • Boolean values are TRUE or FALSE (case-sensitive).
  • INTERAL (sic — source typo for INTERVAL) command is global on Solaro (all connections share one interval), unlike Neutrino where it is per-connection.
  • UDP port 10008 used for subscription broadcast when "UDP" specified in SUBSCRIBE command.
  • REFRESH returns all control object values in a single response.
  • SETRAW uses fixed-point raw values (e.g. -3200 for -3.2 dB); raw scaling factor not documented.

Provenance

source_domains:
  - cdn.xilica.com
  - support.xilica.com
source_urls:
  - https://cdn.xilica.com/designer/FAQ/X22_Solaro_API_Guide.pdf
  - https://support.xilica.com/en/articles/3940994
  - https://support.xilica.com/en/articles/3942338
  - https://support.xilica.com/en/categories/1363842-programming-api
retrieved_at: 2026-04-29T20:51:03.649Z
last_checked_at: 2026-06-02T22:16:25.915Z

Verification Summary

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

Known Gaps

- "exact Solaro model variants (e.g. Solaro QR1, QR5) not stated — source says \"Solaro Series\""
- "firmware version compatibility not stated in source"
- "UDP subscription port 10008 - no separate addressing field for secondary protocol"
- "variable list is dynamic per device configuration (set up in Xilica Designer)"
- "no macro sequences described in source"
- "no safety interlock procedures stated in source"
- "raw value scaling factor for SETRAW/GETRAW/INCRAW/DECRAW not documented"
- "maximum number of subscriptions (error 107 implies a limit but value not stated)"
- "maximum number of control groups (error 112 implies a limit but value not stated)"
- "maximum control objects per group (error 113 implies a limit but value not stated)"
- "verbose/simple mode (section 8) marked as future implementation"
- "string data values (filter types, slopes, AFS settings, ramp types) — enumerated in section 11 but mapping to control objects not specified"

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