Introduction
The purpose of this document is to describe how the external control interface of the device works.
Home Automation System Integration
The Lyngdorf Audio TDAI-1120 is compatible with home automation systems via the network connectors on the rear socket panel and over WiFi. The TDAI-1120's IR and trigger connections can also be programmed for use in a home automation system.
Control Via Network
Open a TCP connection on port 84 and use the control protocol as described in this document. For control from a PC, use Telnet, Putty, or similar programs to open the TCP connection.
If you do not know the IP address of the TDAI-1120 on your local network, the TDAI-1120 supports Apple's Bonjour Discovery service, which must be on the computer you want to set up the TDAI-1120 with. The software is built-in as part of the Apple OS X operating system. For Windows operating systems, the software can be found at http://www.apple.com/support/bonjour/.
The control protocol is announced via bonjour as the service "slactrl"
.
The TDAI-1120 can also be controlled via the network by accessing http://TDAI-1120.local in your browser.
Control Protocol
Commands
Every command starts with '!' character and ends with carriage return (ascii 0x0D, referred to in this document as <CR>). There are two types of commands: commands and status requests. Commands are used to emulate remote key presses or to set a certain volume etc. Status requests are used to query the current state of the controller (volume, current source etc.). Commands with invalid formats are simply ignored. For example, sending a command !VOL(100)garbage!MUTEON<CR>
will only result in volume being muted, because volume command is not terminated properly.
Responses and Feedback Level
There are three levels of responsiveness, called feedback levels. Each level adds something new to the previous level. Feedback levels can be set from the control interface with command "!VERB(X)<CR>"
(X can be 0, 1 or 2). All responses start either with '!' (status messages) or '#' (echo messages) and end with <CR>.
Feedback level 0: Data is sent only when data is requested by a status request command. For example, command "!VOL?<CR>"
would return "!VOL(XXX)<CR>"
, where "XXX" would be current volume.
Feedback level 1: Data is sent whenever any status changes. The data format is the same as for responses to status request commands.
Feedback level 2: Each command is also echoed back with the '#' in front of the command instead of '!' character. For example, command "!VOL?<CR>"
would return "#VOL?<CR>!VOL(XXX)<CR>"
.
Available Commands and Requests
Commands & Requests | Return format | Values | Description |
---|---|---|---|
!AUDIOSTATUS? |
!AUDIOSTATUS ("Audiostring") |
- | Audiostring is a string describing the current audio input. |
!BAL? |
!BAL(balance) |
- | Balance describes the balance setting in this range: L1 to L10: Balance is to the left. 0: Balance is centered R1 - R10: Balance is to the right |
!BAL(balance) |
- | Balance describes the balance setting in this range: L1 to L10: Balance is to the left. 0: Balance is centered R1 - R10: Balance is to the right | Sets the balance trim setting |
!BASS? |
!BASS(n) |
n = -12 to 12 (dB) | Requests the current bass gain trim setting |
!BASS(n) |
- | n = -12 to 12 (dB) | Sets the bass gain trim setting |
!BASSFREQ? |
!BASSFREQ(n) |
n = 20 to 800 (Hz) | Requests the current bass frequency trim setting |
!BASSFREQ(n) |
- | n = 20 to 800 (Hz) | Sets the bass frequency trim setting |
!DEVICE? |
!DEVICE(TDAI-1120) |
- | Requests identifying information. |
!IPWIFI? |
!IPWIFI(xxx.xxx.xxx.xxx) |
IP for the Wi-Fi interface. If not connected, the return value will be an empty string. | Requests the IP of the Wi-Fi interface. |
!IPWIRED? |
!IPWIRED(xxx.xxx.xxx.xxx) |
IP for the Ethernet interface. If not connected, the return value will be an empty string. | Requests the IP of the Ethernet interface. |
!MACWIFI? |
!MACWIFI(xx:xx:xx:xx:xx:xx) |
- | MAC address for the Wi-Fi interface. |
!MACWIRED? |
!MACWIRED(xx:xx:xx:xx:xx:xx) |
- | MAC address for the Wired interface. |
!MUTE? |
!MUTE(ON) or !MUTE(OFF) |
- | Requests the current mute state. |
!MUTE |
- | - | Toggles the current mute state. Same function as the mute button on the remote. |
!MUTEON |
- | - | Mutes the amplifier. |
!MUTEOFF |
- | - | Demutes the amplifier. |
!NEXT |
- | - | Same function as the Next button on the remote control. |
!OFF |
- | - | Turns the amplifier off. |
!ON |
- | NOTE: When TDAI-1120 is set for Deep Sleep Stand-by, you should send the command twice. | Turns the amplifier on. |
!PLAY |
- | - | Same function as the Play/Pause button on the remote control. |
!PREV |
- | - | Same function as the Previous command on the remote control. |
!PWR? |
!PWR(ON) or !PWR(OFF) |
- | Requests the current power state of the amplifier. |
!PWR |
- | - | Toggles power state of the amplifier. Same function as pressing the power button on the remote. |
!RP? |
!RP(n) |
0: Bypass 1-8: Focus positions 1 to 8 9: Global | Requests the currently selected RoomPerfect position. |
!RP(n) |
- | 0: Bypass 1-8: Focus positions 1 to 8 9: Global | Selects a new RoomPerfect position (if available) |
!RPDN |
- | - | Selects previous RoomPerfect position. Same as pressing down-arrow on the remote. |
!RPUP |
- | - | Selects next RoomPerfect position. Same as pressing up-arrow on the remote. |
!RPLIST? |
!RPCOUNT(N) !RPNAME(a,"Name") !RPNAME(b,"Name") |
N is the total number of positions in the list. a, b etc are the numbers of the RoomPerfect Positions and Name is the corresponding name. One line will be send for each available position. | Requests the index and name for each available RoomPerfect Position. |
!RPNAME? |
!RPNAME(n,"Name") |
n is the current RoomPerfect position Name: A string with the name of the position. | Requests the name of the currently selected RoomPerfect position. |
!RPNAME(n)? |
!RPNAME(n,"Name") |
n is the number of the RoomPerfect position. Name: A string with the name of the position. If the requested position does not exist, Name will be an empty string. | Requests the name of RoomPerfect position n. |
!SRC? |
!SRC(n) |
n is the index of the currently selected source. | Requests the currently selected source. |
!SRCLIST? |
!SRCCOUNT(N) !SRCNAME(a,"Name") !SRCNAME(b,"Name") ... |
N is the total number of positions in the list. A, b etc. are the numbers of the sources and Name is the name of the source. One line will be send for each enabled source. | Requests a list of all available and enabled sources. |
!SRC(n) |
- | n can be any index from the list returned by !SRCLIST? | Selects the source n. |
!SRCDN |
- | - | Selects the previous source. Same function as pressing "SRC -" on the remote. |
!SRCUP |
- | - | Selects the next source. Same function as pressing "SRC +" on the remote. |
!SRCNAME? |
!SRCNAME(n,"Name") |
n is the currently selected source. Name is the name of the currently selected source. | Requests the name of the currently selected source. |
!SRCNAME(n)? |
!SRCNAME(n,"Name") |
Name is the name of source n If the requested source does not exist or is disabled, Name will be an empty string. | Requests the name of source n. |
!STREAMTYPE? |
!STREAMTYPE(n) |
n is the current stream type playing. 0 = none 1 = vTuner 2 = Spotify 3 = Airplay 4 = uPnP 5 = USB File 6 = Roon Ready 7 = Bluetooth 8 = GoogleCast 9 = Unknown stream | Requests the stream type being played. |
!SWVER? |
!VER (Verstring) |
Verstring is a string describing the SW versions. | Requests the current software version information. |
!TREBLE? |
!TREBLE(n) |
n = -12 to 12 (dB) | Requests the current treble gain trim setting |
!TREBLE(n) |
- | n = -12 to 12 (dB) | Sets the treble gain trim setting |
!TREBLEFREQ? |
!TREBLEFREQ(n) |
n = 1500 to 16000 (Hz) | Requests the current treble frequency trim setting |
!TREBLEFREQ(n) |
- | n = 1500 to 16000 (Hz) | Sets the treble frequency trim setting |
!VERB? |
!VERB(n) |
n is the current VERBOSITY setting. See table for values. | Requests the current verbosity setting. |
!VERB(n) |
- | n is the new verbosity level. See table. | Sets a new verbosity level for the interface. |
!VOI? |
!VOI(n) |
n is the currently selected voicing. | Requests the currently selected voicing. |
!VOI(n) |
- | n is the voicing to select. Can be any value from the list returned by !VOILIST? | Selects a new voicing. |
!VOIDN |
- | - | Selects the previous voicing. Same function as pressing the left arrow on the remote. |
!VOIUP |
- | - | Selects the next voicing. Same function as pressing the right arrow on the remote. |
!VOILIST? |
!VOICOUNT(N) !VOINAME(a,"Name") !VOINAME(b,"Name") ... |
N is the total number of positions in the list. A, b etc. are the numbers of the voicings and Name is the name of the voicing One line will be send for each voicing. | Requests a list of available voicings. |
!VOINAME? |
!VOINAME(n,"Name") |
n is the currently selected voicing. Name is the name of the currently selected voicing. If the requested voicing does not exist, Name will be an empty string. | Requests the name of the currently selected voicing. |
!VOINAME(n)? |
!VOINAME(n,"Name") |
Name is the name of voicing n. | Requests the name of voicing n. |
!VOL? |
!VOL(n) |
-999 to 120 (steps of 0.1dB) | Requests the current volume. |
!VOL(n) |
- | -999 to 120 (steps of 0.1dB) | Sets the current volume to a new value. |
!VOLCH(n) |
- | -999 to 999 (steps of 0.1dB) | Changes the volume by the requested amount. |
!VOLDN |
- | - | Volume down (by 0.5dB). |
!VOLUP |
- | - | Volume up (by 0.5dB). |
IR Codes / TDAI-1120
Command | NEC1 Code |
---|---|
Digit 1 | 0x10EF, 0x00FF |
Digit 2 | 0x10EF, 0x01FE |
Digit 3 | 0x10EF, 0x02FD |
Digit 4 | 0x10EF, 0x03FC |
Digit 5 | 0x10EF, 0x04FB |
Digit 6 | 0x10EF, 0x05FA |
Digit 7 | 0x10EF, 0x06F9 |
Digit 8 | 0x10EF, 0x07F8 |
Digit 9 | 0x10EF, 0x08F7 |
Standby | 0x10EF, 0x0FF0 |
Volume Down | 0x10EF, 0x10EF |
Mute | 0x10EF, 0x13EC |
Volume Up | 0x10EF, 0x1AE5 |
Digit 0 | 0x10EF, 0x30CF |
SRC Down | 0x10EF, 0x31CE |
SRC Up | 0x10EF, 0x32CD |
Play | 0x10EF, 0x50AF |
Repeat | 0x10EF, 0x54AB |
Shuffle | 0x10EF, 0x56A9 |
Previous | 0x10EF, 0x57A8 |
Next | 0x10EF, 0x58A7 |
Power On: | 0x10EF, 0x807F |
Power Off: | 0x10EF, 0x817E |
Input Dig 1 Coax | 0x10EF, 0x916E |
Input Dig 2 Coax | 0x10EF, 0x926D |
Input Dig 3 Opt | 0x10EF, 0x936C |
Input Dig 4 Opt | 0x10EF, 0x946B |
Input Hdmi ARC | 0x10EF, 0x9C63 |
Input Ana 1 RIAA | 0x10EF, 0x9D62 |
Input Ana 2 Unbalanced | 0x10EF, 0x9E61 |
InputPreset 0 | 0x10EF, 0xA35C |
InputPreset 1 | 0x10EF, 0xA45B |
InputPreset 2 | 0x10EF, 0xA55A |
InputPreset 3 | 0x10EF, 0xA659 |
InputPreset 4 | 0x10EF, 0xA758 |
InputPreset 5 | 0x10EF, 0xA857 |
InputPreset 6 | 0x10EF, 0xA956 |
InputPreset 7 | 0x10EF, 0xAA55 |
InputPreset 8 | 0x10EF, 0xAB54 |
InputPreset 9 | 0x10EF, 0xAC53 |
Input vTuner | 0x10EF, 0xB847 |
Input Spotify | 0x10EF, 0xB946 |
Input AirPlay | 0x10EF, 0xBA45 |
Input Roon ready | 0x10EF, 0xBB44 |
Input uPnP | 0x10EF, 0xBC43 |
Input USB File | 0x10EF, 0xBD42 |
Input Bluetooth | 0x10EF, 0xBE41 |
Input GoogleCast | 0x10EF, 0xBF40 |
RS232 Pin Out Diagram
The diagram shows the pinout for an RS232 cable. It depicts a connector with six pins labeled 1 through 6. The cable wires are shown in different colors: black, red, yellow, blue, green, and white, corresponding to pins 1 through 6 respectively. Below the diagram, specific pin functions are listed: Pin 4 is GND (Ground), Pin 5 is Rx (Receive), and Pin 6 is Tx (Transmit).