Dear Tom,
First of all, thank you for updating the QSO maps in the latest version. They work great.
I’m using RUMlogNG with a Yaesu FTX-1 connected via Serial/USB-C (native FTX-1 driver, 38400 Bd), together with WSJT-X. RUMlogNG acts as a server on port 7374, emulating DX Lab Suite Commander (Preferences → UDP → WSJT-X → Exchange CAT data). It works very well.
I would like to send radio-specific commands (e.g. antenna tuner start AC003;, DNR level RL0nn;) from my own small tool, initially just from the terminal, while RUMlogNG remains the only owner of the serial port. Is this possible with RUMlogNG?
If not, would you consider a local TCP server that forwards raw CAT commands to the radio and returns the replies, similar in spirit to the existing WSJT-X CAT port?
Vy 73 DE SP2AS, Arek
Raw CAT passthrough in RUMlogNG
Re: Raw CAT passthrough in RUMlogNG
Interesting idea, when spare time it allows ....
73 and best dx de Tom, DL2RUM
Re: Raw CAT passthrough in RUMlogNG
Great news! Hope you will have spare time soon 
Re: Raw CAT passthrough in RUMlogNG
See here for a first test: https://dl2rum.de/RUMlogNG/RUMlogNG_Test.zip
Note Menu-->Transceiver-->CAT Raw Server
Note Menu-->Transceiver-->CAT Raw Server
73 and best dx de Tom, DL2RUM
Re: Raw CAT passthrough in RUMlogNG
Dear Tom,
Thank you very much for adding the CAT server so quickly! I’ve tested it with the FTX-1 (Serial, native FTX-1 driver, 38400 Bd) on macOS. Here are my findings:
1. Commands from the client don’t reach the radio.
I connect with a small Python script that keeps the socket open and sends MD0C; (with and without \r\n). The client connects, the “To TRX” LED blinks once, but the radio doesn’t change mode. The same command sent directly to the serial port (RUMlogNG closed, via Hamlib rigctl ... w "MD0C;") works correctly, so the command itself is valid.
2. Replies to client requests are not returned.
After sending FA;, I receive only RUMlogNG’s own polling traffic (IF…;, KS…;, ST…; roughly every second), never the FA…; reply. It looks like the server broadcasts the radio’s replies to RUMlogNG’s own polls but doesn’t forward the client’s commands to the radio, or doesn’t return their replies.
❯ python3 -c "
import socket, time
s = socket.create_connection(('localhost', 7675))
s.sendall(b'FA;')
s.settimeout(0.3)
buf, t0 = b'', time.time()
while time.time() - t0 < 2:
try: buf += s.recv(256)
except socket.timeout: pass
for f in buf.split(b';'):
if f: print(f.decode() + ';')
"
IF00000014015980+000000300003;
KS018;
ST0;
IF00000014015980+000000300003;
KS018;
ST0;
3. Minor: half-closed connections.
A client that sends data and then half-closes the socket (e.g. printf 'FA;' | nc localhost 7675) is disconnected immediately (“Socket closed by remote peer”) and its data seems to be discarded. Not critical, but it would make quick terminal tests easier.
4. Suggestion: bind to localhost by default.
The server listens on all interfaces (*:7675, IPv4 and IPv6). Since it accepts any raw CAT command, including TX1; and tuner start, binding to 127.0.0.1 by default, with an option for remote access, would be safer. The same applies to the WSJT-X CAT port 7374.
Ideal behaviour from my point of view: the client sends a raw command, RUMlogNG inserts it into its serial queue between its own polls, and returns the radio’s reply (or ?;) to that client.
Happy to test further builds.
Vy 73 DE SP2AS, Arek
Thank you very much for adding the CAT server so quickly! I’ve tested it with the FTX-1 (Serial, native FTX-1 driver, 38400 Bd) on macOS. Here are my findings:
1. Commands from the client don’t reach the radio.
I connect with a small Python script that keeps the socket open and sends MD0C; (with and without \r\n). The client connects, the “To TRX” LED blinks once, but the radio doesn’t change mode. The same command sent directly to the serial port (RUMlogNG closed, via Hamlib rigctl ... w "MD0C;") works correctly, so the command itself is valid.
2. Replies to client requests are not returned.
After sending FA;, I receive only RUMlogNG’s own polling traffic (IF…;, KS…;, ST…; roughly every second), never the FA…; reply. It looks like the server broadcasts the radio’s replies to RUMlogNG’s own polls but doesn’t forward the client’s commands to the radio, or doesn’t return their replies.
❯ python3 -c "
import socket, time
s = socket.create_connection(('localhost', 7675))
s.sendall(b'FA;')
s.settimeout(0.3)
buf, t0 = b'', time.time()
while time.time() - t0 < 2:
try: buf += s.recv(256)
except socket.timeout: pass
for f in buf.split(b';'):
if f: print(f.decode() + ';')
"
IF00000014015980+000000300003;
KS018;
ST0;
IF00000014015980+000000300003;
KS018;
ST0;
3. Minor: half-closed connections.
A client that sends data and then half-closes the socket (e.g. printf 'FA;' | nc localhost 7675) is disconnected immediately (“Socket closed by remote peer”) and its data seems to be discarded. Not critical, but it would make quick terminal tests easier.
4. Suggestion: bind to localhost by default.
The server listens on all interfaces (*:7675, IPv4 and IPv6). Since it accepts any raw CAT command, including TX1; and tuner start, binding to 127.0.0.1 by default, with an option for remote access, would be safer. The same applies to the WSJT-X CAT port 7374.
Ideal behaviour from my point of view: the client sends a raw command, RUMlogNG inserts it into its serial queue between its own polls, and returns the radio’s reply (or ?;) to that client.
Happy to test further builds.
Vy 73 DE SP2AS, Arek
Re: Raw CAT passthrough in RUMlogNG
Commands are routed now to the radio. Try again!
73 and best dx de Tom, DL2RUM
Re: Raw CAT passthrough in RUMlogNG
Commands and replies work perfectly now, thank you!
Small follow-up:
1) The server still listens on all interfaces (*:7675) remote too. Could it bind to 127.0.0.1 by default, with an option for remote access?
CAT server:
❯ lsof -nP -i :7675
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
RUMlogNG 57209 areks 39u IPv4 0xab15ac5eabd19117 0t0 TCP *:7675 (LISTEN)
RUMlogNG 57209 areks 40u IPv6 0x59b9495ab0a8e46d 0t0 TCP *:7675 (LISTEN)
wsjt-x server:
❯ lsof -nP -i :7374
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
RUMlogNG 57209 areks 28u IPv4 0xb29d33e7fb53c4b6 0t0 TCP *:7374 (LISTEN)
RUMlogNG 57209 areks 29u IPv6 0x85f46e55f19efcfe 0t0 TCP *:7374 (LISTEN)
2.) Also, a normal client disconnect is logged as “Error: Socket closed by remote peer”. Logging it as info would avoid confusion.
[16:22:35] Server started listening
[16:25:03] Client has connected: ::1 (localhost)
[16:25:04] Client has disconnected: ::1 (localhost)
[16:25:04] Error: Socket closed by remote peer
[16:25:37] Client has connected: ::1 (localhost)
[16:25:39] Client has disconnected: ::1 (localhost)
[16:25:39] Error: Socket closed by remote peer
[16:26:19] Client has connected: ::1 (localhost)
[16:26:20] Client has disconnected: ::1 (localhost)
[16:26:20] Error: Socket closed by remote peer
[16:26:25] Client has connected: ::1 (localhost)
[16:26:26] Client has disconnected: ::1 (localhost)
[16:26:26] Error: Socket closed by remote peer
[16:26:39] Client has connected: ::1 (localhost)
[16:26:40] Client has disconnected: ::1 (localhost)
[16:26:40] Error: Socket closed by remote peer
[16:26:49] Client has connected: ::1 (localhost)
[16:26:51] Client has disconnected: ::1 (localhost)
[16:26:51] Error: Socket closed by remote peer
[16:27:03] Client has connected: ::1 (localhost)
[16:27:04] Client has disconnected: ::1 (localhost)
[16:27:04] Error: Socket closed by remote peer
Once more thank you for great work.
Vy 73 DE SP2AS, Arek
Small follow-up:
1) The server still listens on all interfaces (*:7675) remote too. Could it bind to 127.0.0.1 by default, with an option for remote access?
CAT server:
❯ lsof -nP -i :7675
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
RUMlogNG 57209 areks 39u IPv4 0xab15ac5eabd19117 0t0 TCP *:7675 (LISTEN)
RUMlogNG 57209 areks 40u IPv6 0x59b9495ab0a8e46d 0t0 TCP *:7675 (LISTEN)
wsjt-x server:
❯ lsof -nP -i :7374
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
RUMlogNG 57209 areks 28u IPv4 0xb29d33e7fb53c4b6 0t0 TCP *:7374 (LISTEN)
RUMlogNG 57209 areks 29u IPv6 0x85f46e55f19efcfe 0t0 TCP *:7374 (LISTEN)
2.) Also, a normal client disconnect is logged as “Error: Socket closed by remote peer”. Logging it as info would avoid confusion.
[16:22:35] Server started listening
[16:25:03] Client has connected: ::1 (localhost)
[16:25:04] Client has disconnected: ::1 (localhost)
[16:25:04] Error: Socket closed by remote peer
[16:25:37] Client has connected: ::1 (localhost)
[16:25:39] Client has disconnected: ::1 (localhost)
[16:25:39] Error: Socket closed by remote peer
[16:26:19] Client has connected: ::1 (localhost)
[16:26:20] Client has disconnected: ::1 (localhost)
[16:26:20] Error: Socket closed by remote peer
[16:26:25] Client has connected: ::1 (localhost)
[16:26:26] Client has disconnected: ::1 (localhost)
[16:26:26] Error: Socket closed by remote peer
[16:26:39] Client has connected: ::1 (localhost)
[16:26:40] Client has disconnected: ::1 (localhost)
[16:26:40] Error: Socket closed by remote peer
[16:26:49] Client has connected: ::1 (localhost)
[16:26:51] Client has disconnected: ::1 (localhost)
[16:26:51] Error: Socket closed by remote peer
[16:27:03] Client has connected: ::1 (localhost)
[16:27:04] Client has disconnected: ::1 (localhost)
[16:27:04] Error: Socket closed by remote peer
Once more thank you for great work.
Vy 73 DE SP2AS, Arek
Re: Raw CAT passthrough in RUMlogNG
I have added an option so that you can add an interface that you can bind to.
73 and best dx de Tom, DL2RUM
Re: Raw CAT passthrough in RUMlogNG
Dear Tom,
The bind option works perfectly: with 127.0.0.1 the CAT server now listens on localhost only. Thank you!
Could you add the same option for the WSJT-X CAT port (7374)? I understand that WSJT-X CAT emulates DXlab so option for possible attack are smaller but still it will be safer
I am wondering is it possible to add to the RAW CAT Server checkbox with option to autostart.
Is my understanding correct that when I am closing RUMlogNG it automatically closing its servers?
Vy 73 DE SP2AS, Arek
The bind option works perfectly: with 127.0.0.1 the CAT server now listens on localhost only. Thank you!
Could you add the same option for the WSJT-X CAT port (7374)? I understand that WSJT-X CAT emulates DXlab so option for possible attack are smaller but still it will be safer
I am wondering is it possible to add to the RAW CAT Server checkbox with option to autostart.
Is my understanding correct that when I am closing RUMlogNG it automatically closing its servers?
Vy 73 DE SP2AS, Arek