o
odinpkg.dev
packages / library / Odin_control_program_for_Eversolo_A6

Odin_control_program_for_Eversolo_A6

08d32f8library

This is a small command line program to facilitate control of Eversolo A6 DAC on my Linux.

No license · updated 6 days ago

Odin control program for Eversolo A6

This is a small command line program to facilitate control of Eversolo A6 DAC on my Linux.

Description

A small terminal-based remote control for the Eversolo A6 DAC/streamer, written in Odin programming language for Linux. It talks to the device's HTTP ControlCenter API over a fixed port (9529) and lets you switch inputs/outputs, change volume and power off using single key presses — no Enter required.

This is a client only. It runs on your computer and sends HTTP requests to the A6; it does not expose any server.


Features

  • Single key press control (raw terminal mode, no Enter needed).
  • Fixed port 9529 — only the IP needs to be supplied.
  • On startup it automatically switches the device input to USB DAC.
  • Each request is checked: HTTP 200 = success, any other code = HTTP error, and an unreachable device is reported as a connection error.
  • Status output stays on a single status line (\r + clear-to-end-of-line) so the on-screen keys manual is always visible and never scrolls away.
  • The terminal is always restored on exit (even on Ctrl-C / kill), via an atexit handler.

Requirements

  • Linux (uses POSIX termios / poll / popen).
  • Odin compiler — odin version dev-2025-12 or newer.
  • curl installed and on PATH (used to perform the HTTP GETs).

Building

The project ships with a Makefile. The common targets:

make clean      # remove the binary
make            # build odin_control_for_eversolo_a6.exe ( default target: 'all' )

Manual build ( without make )

odin build eversolo_a6_control.odin -file -out:odin_eversolo_a6_control.exe -o:speed

Usage

./odin_control_for_eversolo_a6.exe <ip-address>

Example:

./odin_control_for_eversolo_a6.exe 192.168.1.78

Run it directly via make (default IP 192.168.1.78, overridable):

make run

Finding the device IP / port

The program prints these hints at startup. The port used by the Eversolo A6 ControlCenter service can be dynamic on the network, so if 9529 does not respond, scan for it:

ip address
nmap -p 9529 192.168.1.80/24

Keys

Key Action API key sent
o Power off Key.Poweroff
s Speakers (XLR output) Key.OUT.XLR
p Phones (RCA output) Key.OUT.RCA
i Show playback info on the device screen Key.Info
Up arrow Volume up Key.VolumeUp
Down arrow Volume down Key.VolumeDown
q / Ctrl-C Quit

On startup the program also sends Key.DAC.USB once, to switch the device input to USB DAC.

Output

$ ❯ make run
./odin_control_for_eversolo_a6.exe 192.168.1.78
==============================================================
 Odin control for Eversolo A6 DAC
==============================================================
Target: http://192.168.1.78:9529

To check the dynamic port of the Eversolo A6 on the network
ip address
nmap -p 9529 192.168.1.80/24

Keys (no Enter needed):
  o          Power off
  s          Speakers   (XLR output)
  p          Phones     (RCA output)
  i          Playback info on the device screen
  Up arrow   Volume up
  Down arrow Volume down
  q          Quit
==============================================================

Press a key ( q to quit ):
[OK]        Phones ( RCA ) ×2 -> Key.OUT.RCA

HTTP requests

Each key triggers an HTTP GET of the form:

http://<ip>:9529/ControlCenter/RemoteControl/sendkey?key=<Key.XXX>

performed via curl. The HTTP status code is captured and interpreted as:

  • 200[OK]
  • any other code → [HTTP ERR]
  • 000 / curl fails to connect → [CONN ERROR]

Project files

control_for_eversolo_a6.odin       # Odin source ( single-file )
Makefile                           # build / run / clean targets
odin_control_for_eversolo_a6.exe   # compiled binary ( after `make` )

Notes

  • If stdin is not a TTY (e.g. output piped to another command), raw mode is skipped and a warning is printed; keys may then require Enter.
  • The terminal is restored on normal exit and via atexit, so it will not be left in raw mode even if the process is killed abruptly.

License

MIT Open Source License

Have fun

Best regards,
Joao Carvalho