API for Third-Party Control

Edited

1. Introduction

This API enables third-party control of the Solaro, Gio, Neutrino & Uno products.

2. Overview

For Ethernet connection:

  • Send messages using TCP port #10007

  • The server responds using the same TCP connection

  • Send a keep-alive message every 60 seconds to maintain the connection

You can also use UDP port #10008 to listen to Subscription messages. Choose whether parameters send changes via TCP Unicast or UDP Broadcast when issuing a subscription command. By default, parameters notify via TCP Unicast.

A separate TCP connection is required for status updates, and keep-alive messages must be sent continuously even when using UDP Broadcast. If the TCP connection drops, you'll need to reconfigure all subscriptions and group settings.

3. Syntax

The third-party controller string uses human-readable ASCII characters with this format:

COMMAND [CONTROL OBJECT/GROUP] [DATA]<CR>

  • Fields are separated by a single white space

  • A carriage-return (<CR>) marks the end of the message

  • CONTROL OBJECT: Up to 32 characters assigned in software (first character cannot be a dollar sign)

  • CONTROL GROUP: Up to 32 characters created with the CREATE command (always begins with '

    apos;)

  • For strings with spaces, encapsulate with double quotes

  • COMMAND and CONTROL OBJECT/GROUP are case-sensitive

  • DATA can be a number, string (in double quotes), or Boolean (TRUE or FALSE)

4. Responses

The device responds to all commands. If you don't receive a response, check your connection. All responses end with <CR>.

Response formats:

  • Invalid command: ERROR=<ERROR CODE><CR>

  • GET or GETRAW command: <CONTROL OBJECT>=<DATA><CR>

  • REFRESH command: <CONTROL OBJECT>=<DATA><CONTROL OBJECT>=<DATA> … <CR>

  • KEEPALIVE command: No response

  • REBOOT command:

    • Neutrino system: Replies "OK<CR>"

    • Solaro system: No response (device reboots)

  • All other commands: OK<CR>

5. Subscriptions

Subscribe to control objects to receive notifications when values change:

SUBSCRIBE <CONTROL OBJECT> ["TCP"/"UDP"] <CR>
UNSUBSCRIBE <CONTROL OBJECT> <CR>

SUBSCRIBE <CONTROL OBJECT> ["TCP"/"UDP"] <CR> UNSUBSCRIBE <CONTROL OBJECT> <CR>

Notifications are sent automatically via TCP Unicast or UDP Broadcast with this format: #<CONTROL OBJECT>=<DATA><CR>

Set the notification interval with: INTERVAL <TIME in milliseconds> <CR>

6. Control Groups

Control multiple parameters at once using groups:

CREATE <CONTROL GROUP> <CR>
JOIN <CONTROL GROUP> <CONTROL OBJECT> <CR>
LEAVE <CONTROL GROUP> <CONTROL OBJECT> <CR>
REMOVE <CONTROL GROUP> <CR>

CREATE <CONTROL GROUP> <CR> JOIN <CONTROL GROUP> <CONTROL OBJECT> <CR> LEAVE <CONTROL GROUP> <CONTROL OBJECT> <CR> REMOVE <CONTROL GROUP> <CR>

Ensure parameters in a group are the same type and support the same commands. Groups persist only during active connections.

7. Password Protection

For password-protected devices, unlock before sending commands:

LOGIN <PASSWORD> <CR>

Authentication persists only for the duration of the connection.

8. Verbose/Simple Mode

Future implementation to configure response detail levels.

9. Control Objects Setup

Set up control object strings using Xilica Designer:

  1. In Project Design Mode, select the DSP module

  2. Double-click to open the module control panel

  3. Hold Ctrl and select the control object

  4. Right-click and select "Create third party control object name"

  5. Enter a unique control object name

A small red indicator appears in the top left corner of objects with third-party control names defined.

To see all defined control object names, select "Project" → "Device third party control elements" from the menu. You can export this list to Excel for reference.

10. Commands List

SET <CONTROL OBJECT/GROUP> <DATA - number/string/Boolean> Examples:

  • SET gain1 -3.2 (Set "gain1" to -3.2 dB)

  • SET polarity1 TRUE (Set "polarity1" to ON position)

  • SET filter1 "Butterworth" (Set "filter1" to Butterworth Filter)

  • SET $group1 -15.7 (Set all parameters in group1 to -15.7dB)

SETRAW <CONTROL OBJECT/GROUP> <DATA - number> Examples:

  • SETRAW gain1 -3200 (Set "gain1" to -3.2 dB)

  • SETRAW polarity1 1 (Set "polarity1" to ON position)

  • SETRAW filter1 1 (Set "filter1" to Butterworth Filter)

  • SETRAW $group1 1000 (Set all parameters in group1 to +1.0dB)

GET <CONTROL OBJECT/GROUP> Examples:

  • GET EQslope (Get "EQslope" formatted value)

  • GET $group1 (Get formatted value for all parameters in group1)

GETRAW <CONTROL OBJECT/GROUP> Examples:

  • GETRAW EQslope (Get "EQslope" raw value)

  • GETRAW $group1 (Get raw value for all parameters in group1)

INC <CONTROL OBJECT/GROUP> <DATA - number> Examples:

  • INC fader3 0.5 (Increase "fader3" by 0.5 dB)

  • INC $group1 1 (Increase all parameters in group1 by 1dB)

INCRAW <CONTROL OBJECT/GROUP> <DATA - number> Examples:

  • INCRAW fader3 500 (Increase "fader3" by 0.5 dB)

  • INCRAW $group1 1000 (Increase all parameters in group1 by 1dB)

DEC <CONTROL OBJECT/GROUP> <DATA - number> Examples:

  • DEC fader3 0.5 (Decrease "fader3" by 0.5 dB)

  • DEC $group1 1 (Decrease all parameters in group1 by 1dB)

DECRAW <CONTROL OBJECT/GROUP> <DATA - number> Examples:

  • DECRAW fader3 500 (Decrease "fader3" by 0.5 dB)

  • DECRAW $group1 1000 (Decrease all parameters in group1 by 1dB)

TOGGLE <CONTROL OBJECT/GROUP> Examples:

  • TOGGLE mute1 (Toggle "mute1" state)

  • TOGGLE $group2 (Toggle all parameters in group2)

PRESET <DATA - number/string> Examples:

  • PRESET 4 (Recall preset #4)

  • PRESET "preset name" (Recall preset with name "preset name")

SUBSCRIBE <CONTROL OBJECT/GROUP> <DATA - string>* Examples:

  • SUBSCRIBE meter6 (Subscribe to "meter6" via TCP Unicast)

  • SUBSCRIBE meter6 "TCP" (Subscribe to "meter6" via TCP Unicast)

  • SUBSCRIBE meter6 "UDP" (Subscribe to "meter6" via UDP Broadcast) *DATA - string is optional, TCP Unicast used by default

UNSUBSCRIBE <CONTROL OBJECT/GROUP> Example:

  • UNSUBSCRIBE meter6 (Unsubscribe "meter6")

KEEPALIVE Example:

  • KEEPALIVE (No operation. Used to keep the TCP connection alive)

INTERVAL <DATA - number> Example:

  • INTERVAL 100 (Set subscription interval to minimum 100ms) Minimum value is 100 ms In Neutrino Series processors, Interval applies to individual TCP connections *In Solaro Series processors, Interval applies globally to all connections

LOGIN <DATA - string> Example:

  • LOGIN "password" (Login for external control with "password")

REBOOT Example:

  • REBOOT (Remotely reboot device)

REFRESH Example:

  • REFRESH (Get formatted data value for all control objects)

CREATE <CONTROL GROUP> Example:

  • CREATE group1 (Create a group with the name "group1") *The '

    apos; sign is automatically added when the group is created

REMOVE <CONTROL GROUP> Example:

  • REMOVE $group1 (Remove the group with name "group1")

JOIN <CONTROL GROUP> <DATA - string> Example:

  • JOIN $group1 "gain1" ("gain1" will join group1)

LEAVE <CONTROL GROUP> <DATA - string> Example:

  • LEAVE $group2 "mute2" ("mute2" will leave group2)

11. Data String

String Values

Filter Type: Butterworth, LR, Bessel

Filter Slope: 6db/Oct, 12db/Oct, 18db/Oct, 24db/Oct, 30db/Oct, 36db/Oct, 42db/Oct, 48db/Oct

AFS Sensitivity: Very Low, Low, Medium, High, Very High

AFS Type: Dynamic, Fixed

Control Ramp Type: Linear, Log, Audio

12. Error Codes

Error Code

Description

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