<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent posts to Discussion</title><link>https://sourceforge.net/p/hamlib/discussion/</link><description>Recent posts to Discussion</description><atom:link href="https://sourceforge.net/p/hamlib/discussion/feed.rss" rel="self"/><language>en</language><lastBuildDate>Mon, 20 Apr 2026 10:00:04 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/hamlib/discussion/feed.rss" rel="self" type="application/rss+xml"/><item><title>Icom 7300 with Openwebrx with Hamlib Radio-Control</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/17b8ce7a03/?limit=25#d6d3</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hello everyone,&lt;br/&gt;
I am very new with  groups Discussion Group about software, I am not a programmer. I would like the Gui to work with Icom 7300 like the SDR web page work. &lt;br/&gt;
I am attempting to install Openwebrx with Hamlib in the background to connect to my Icom 7300. All other software in the past has work that has Hamlib, for example FLDIGI, and other FL .. items. WSVIEW also works.&lt;br/&gt;
Openwebrx works great with with SDR dongle RTL , Yet, I want to it to work with Icom 7300 because it allow many ham radio packages to  work together.  Many that were created with Hamlib.&lt;br/&gt;
Yes, from the text line I have tested it with hamlib-util . My results were these:&lt;/p&gt;
&lt;p&gt;rigctl -r 127.0.0.1 -m 3073 -s 19200 -p 4533&lt;br/&gt;
 no reply &lt;/p&gt;
&lt;p&gt;rigctl -r 127.0.0.1:4533 -m 3073 -s 19200 -p 4533&lt;/p&gt;
&lt;p&gt;rigctl -r 127.0.0.1:8073 -m 3073 -s 19200 -p 4533&lt;/p&gt;
&lt;p&gt;rigctld -r 127.0.0.1 -m 3073 -s 19200 -p 4533&lt;br/&gt;
^Crig_open: error = rig_init: rig has VFO_A&lt;br/&gt;
rig_init: rig has VFO_B&lt;br/&gt;
rig_init: rig has VFO_MEM&lt;br/&gt;
rig.c(994) trace&lt;br/&gt;
&lt;em&gt;1:icom.c(707):icom_init entered&lt;br/&gt;
&lt;/em&gt;1:icom.c(777):icom_init returning(0) &lt;br/&gt;
rig_set_conf called&lt;br/&gt;
main: twiddle=0, uplink=0, twiddle_rit=0&lt;br/&gt;
main: defaulting to RTS PTT&lt;br/&gt;
rig.c(1050):rig_open entered&lt;br/&gt;
rig_settings_get_path: path=/home/yf3vkz4hamradio/.config/hamlib_settings&lt;br/&gt;
rig_open: async_data_enable=0, async_data_supported=1&lt;br/&gt;
rig_open: using network address 127.0.0.1&lt;br/&gt;
network_open: TCP connect&lt;br/&gt;
network_open: hoststr=127.0.0.1, portstr=&lt;br/&gt;
connect to 127.0.0.1 failed, (trying next interface): Network error 111: Connection refused&lt;br/&gt;
network_open: failed to connect to 127.0.0.1&lt;br/&gt;
rig.c(1284):rig_open returning2(-6) IO error&lt;/p&gt;
&lt;p&gt;IO error&lt;br/&gt;
 127.0.0.1 Connection refused &lt;/p&gt;
&lt;h1 id="h-terminating-application-caught-signal-2"&gt;Terminating application, caught signal 2&lt;/h1&gt;
&lt;p&gt;rigctl -r 127.0.0.1:8073 -m 3073 -R /dev/ttyUSB0 -s 19200 -p 4533&lt;br/&gt;
rigctl: invalid option -- 'R'&lt;br/&gt;
Usage: rigctl &lt;span&gt;[OPTION]&lt;/span&gt;... &lt;span&gt;[-m ID]&lt;/span&gt; &lt;span&gt;[-r DEVICE]&lt;/span&gt; &lt;span&gt;[-s BAUD]&lt;/span&gt; &lt;span&gt;[COMMAND...|-]&lt;/span&gt;&lt;br/&gt;
Send COMMANDs to a connected radio transceiver or receiver.&lt;/p&gt;
&lt;h1 id="h-type-rigctl-help-for-extended-usage"&gt;Type: rigctl --help for extended usage.&lt;/h1&gt;
&lt;p&gt;rigctlcom -r 192.168.0.6:4533 -m 3073 -R /dev/ttyUSB0 -s 115200 -p 8080&lt;br/&gt;
rigctlcom Version 1.6&lt;br/&gt;
rig_open: error = rig_init: rig_model=Icom IC-7300 20250517.14&lt;br/&gt;
Requesting 47928 bytes for rig_struct&lt;br/&gt;
Requesting 728 bytes for rig_cache&lt;br/&gt;
rig_init: rig has VFO_A&lt;br/&gt;
rig_init: rig has VFO_B&lt;br/&gt;
rig_init: rig has VFO_MEM&lt;br/&gt;
rig.c(994) trace&lt;br/&gt;
&lt;em&gt;1:icom.c(707):icom_init entered&lt;br/&gt;
&lt;/em&gt;1:icom.c(777):icom_init returning(0) &lt;br/&gt;
rig.c(1050):rig_open entered&lt;br/&gt;
rig_settings_get_path: path=/home/yf3vkz4hamradio/.config/hamlib_settings&lt;br/&gt;
rig_open: async_data_enable=0, async_data_supported=1&lt;br/&gt;
rig_open: using network address 192.168.0.6:4533&lt;br/&gt;
network_open: TCP connect&lt;br/&gt;
network_open: hoststr=192.168.0.6, portstr=4533&lt;br/&gt;
connect to 192.168.0.6:4533 failed, (trying next interface): Network error 110: Connection timed out&lt;br/&gt;
network_open: failed to connect to 192.168.0.6:4533&lt;br/&gt;
rig.c(1284):rig_open returning2(-6) IO error&lt;/p&gt;
&lt;h1 id="h-io-error"&gt;IO error&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://fms.komkon.org/OWRX/#INSTALL-PACKAGES" rel="nofollow"&gt;https://fms.komkon.org/OWRX/#INSTALL-PACKAGES&lt;/a&gt;  (Refer to his Git pages in the web page )&lt;/p&gt;
&lt;p&gt;The source code rigcontrol.py :&lt;/p&gt;
&lt;p&gt;from owrx.feature import FeatureDetector&lt;br/&gt;
from owrx.property import PropertyStack&lt;br/&gt;
from owrx.config import Config&lt;br/&gt;
from subprocess import Popen, PIPE, STDOUT, TimeoutExpired&lt;/p&gt;
&lt;p&gt;import threading&lt;br/&gt;
import select&lt;br/&gt;
import os&lt;/p&gt;
&lt;p&gt;import logging&lt;/p&gt;
&lt;p&gt;logger = logging.getLogger(&lt;strong&gt;name&lt;/strong&gt;)&lt;/p&gt;
&lt;p&gt;class RigControl():&lt;br/&gt;
    # Mapping from rig names to Rigctl rig types (in the list) &lt;br/&gt;
     "Icom IC-7300" : 3073,&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Mapping&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;OpenWebRX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modulations&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Rigctl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;modulations&lt;/span&gt;
&lt;span class="n"&gt;MODES&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"nfm"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"FM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;"wfm"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"WFM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"am"&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"AM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="ss"&gt;"sam"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"SAM"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"lsb"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"LSB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"usb"&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"USB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"lsbd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"PKTLSB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"usbd"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"PKTUSB"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="ss"&gt;"cw"&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"CWR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PropertyStack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pm&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;"rig_enabled"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigctl&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thread&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="w"&gt;     &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fCenter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subscriptions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;
&lt;span class="n"&gt;        props.wireProperty("offset_freq", self.setFrequencyOffset),&lt;/span&gt;
&lt;span class="n"&gt;        props.wireProperty("center_freq", self.setCenterFrequency),&lt;/span&gt;
&lt;span class="n"&gt;        props.wireProperty("rig_enabled", self.setRigEnabled),&lt;/span&gt;
&lt;span class="n"&gt;        props.wireProperty("mod", self.setDemodulator),&lt;/span&gt;
&lt;span class="n"&gt;    &lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;super&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Start&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;RigControl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;subscriptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cancel&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subscriptions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigStop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setFrequencyOffset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fCenter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;fOffset&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigFrequency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fCenter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;offset&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setCenterFrequency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;center&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fCenter&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;center&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fOffset&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setDemodulator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigModulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;mod&lt;/span&gt;

&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;setRigEnabled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;!=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nl"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;enabled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enabled&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigStart&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigStop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Press&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;or&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;release&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rig&lt;/span&gt;&lt;span class="s1"&gt;'s PTT (i.e. transmit)&lt;/span&gt;
&lt;span class="s1"&gt;def rigTX(self, active: bool) -&amp;gt; bool:&lt;/span&gt;
&lt;span class="s1"&gt;    return self.rigCommand("T {0}".format(1 if active else 0))&lt;/span&gt;

&lt;span class="s1"&gt;# Set rig'&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;frequency&lt;/span&gt;
&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rigFrequency&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nc"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;bool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigCommand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;"F {0}"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;freq&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rig&lt;/span&gt;&lt;span class="s1"&gt;'s modulation&lt;/span&gt;
&lt;span class="s1"&gt;def rigModulation(self, mod: str) -&amp;gt; bool:&lt;/span&gt;
&lt;span class="s1"&gt;    if mod in self.MODES:&lt;/span&gt;
&lt;span class="s1"&gt;        return self.rigCommand("M {0} 0".format(self.MODES[mod]))&lt;/span&gt;
&lt;span class="s1"&gt;    else:&lt;/span&gt;
&lt;span class="s1"&gt;        return False&lt;/span&gt;

&lt;span class="s1"&gt;# Start Rigctl and associated thread&lt;/span&gt;
&lt;span class="s1"&gt;def rigStart(self):&lt;/span&gt;
&lt;span class="s1"&gt;    # Do not start twice&lt;/span&gt;
&lt;span class="s1"&gt;    if self.rigctl is not None:&lt;/span&gt;
&lt;span class="s1"&gt;        return True&lt;/span&gt;
&lt;span class="s1"&gt;    # Must have Hamlib/Rigctl installed&lt;/span&gt;
&lt;span class="s1"&gt;    if not FeatureDetector().is_available("rigcontrol"):&lt;/span&gt;
&lt;span class="s1"&gt;        return False&lt;/span&gt;
&lt;span class="s1"&gt;    # Must have rig control enabled&lt;/span&gt;
&lt;span class="s1"&gt;    if not self.enabled:&lt;/span&gt;
&lt;span class="s1"&gt;        return False&lt;/span&gt;
&lt;span class="s1"&gt;    # Compose Rigctl command&lt;/span&gt;
&lt;span class="s1"&gt;    pm = Config.get()&lt;/span&gt;
&lt;span class="s1"&gt;    address = pm["rig_address"]&lt;/span&gt;
&lt;span class="s1"&gt;    cmd = [&lt;/span&gt;
&lt;span class="s1"&gt;        "rigctl", "-m", str(pm["rig_model"]), "-r", pm["rig_device"]&lt;/span&gt;
&lt;span class="s1"&gt;    ] + (&lt;/span&gt;
&lt;span class="s1"&gt;        ["-c", str(address)] if address &amp;gt; 0 and address &amp;lt; 256 else []&lt;/span&gt;
&lt;span class="s1"&gt;    ) + ["-"]&lt;/span&gt;
&lt;span class="s1"&gt;    #cmd = ["rigctl", "-"] # @@@ REMOVE ME!!!!&lt;/span&gt;
&lt;span class="s1"&gt;    # Create Rigctl process, make stdout/stderr pipes non-blocking&lt;/span&gt;
&lt;span class="s1"&gt;    self.rigctl = Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, text=True)&lt;/span&gt;
&lt;span class="s1"&gt;    os.set_blocking(self.rigctl.stdout.fileno(), False)&lt;/span&gt;
&lt;span class="s1"&gt;    os.set_blocking(self.rigctl.stderr.fileno(), False)&lt;/span&gt;
&lt;span class="s1"&gt;    # Create and start thread&lt;/span&gt;
&lt;span class="s1"&gt;    self.thread = threading.Thread(target=self._rigThread, name=type(self).__name__)&lt;/span&gt;
&lt;span class="s1"&gt;    self.thread.start()&lt;/span&gt;
&lt;span class="s1"&gt;    # Clear current frequency and modulation&lt;/span&gt;
&lt;span class="s1"&gt;    self.mod     = None&lt;/span&gt;
&lt;span class="s1"&gt;    self.fCenter = None&lt;/span&gt;
&lt;span class="s1"&gt;    self.fOffset = None&lt;/span&gt;
&lt;span class="s1"&gt;    # Done&lt;/span&gt;
&lt;span class="s1"&gt;    logger.debug("Started RigControl as '&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;'.".format(" ".join(cmd)))&lt;/span&gt;
&lt;span class="s1"&gt;    return True&lt;/span&gt;

&lt;span class="s1"&gt;# Stop Rigctl and associated thread&lt;/span&gt;
&lt;span class="s1"&gt;def rigStop(self):&lt;/span&gt;
&lt;span class="s1"&gt;    # Do not stop twice&lt;/span&gt;
&lt;span class="s1"&gt;    if self.rigctl is None:&lt;/span&gt;
&lt;span class="s1"&gt;        return&lt;/span&gt;
&lt;span class="s1"&gt;    # If Rigctl still running...&lt;/span&gt;
&lt;span class="s1"&gt;    if self.rigctl.poll() is None:&lt;/span&gt;
&lt;span class="s1"&gt;        # Try terminating Rigctl normally, kill if failed&lt;/span&gt;
&lt;span class="s1"&gt;        logger.info("Stopping RigControl executable...")&lt;/span&gt;
&lt;span class="s1"&gt;        try:&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl.terminate()&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl.wait(3)&lt;/span&gt;
&lt;span class="s1"&gt;        except TimeoutExpired:&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl.kill()&lt;/span&gt;
&lt;span class="s1"&gt;    # The thread should have exited, since Rigctl exited&lt;/span&gt;
&lt;span class="s1"&gt;    logger.info("Waiting for RigControl thread...")&lt;/span&gt;
&lt;span class="s1"&gt;    self.thread.join()&lt;/span&gt;
&lt;span class="s1"&gt;    logger.info("Stopped RigControl.")&lt;/span&gt;
&lt;span class="s1"&gt;    self.thread = None&lt;/span&gt;
&lt;span class="s1"&gt;    self.rigctl = None&lt;/span&gt;

&lt;span class="s1"&gt;# Send command to Rigctl&lt;/span&gt;
&lt;span class="s1"&gt;def rigCommand(self, cmd: str) -&amp;gt; bool:&lt;/span&gt;
&lt;span class="s1"&gt;    if self.rigctl is not None:&lt;/span&gt;
&lt;span class="s1"&gt;        if self.rigctl.poll() is not None:&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl = None&lt;/span&gt;
&lt;span class="s1"&gt;            return False&lt;/span&gt;
&lt;span class="s1"&gt;        try:&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl.stdin.write(cmd + "\n")&lt;/span&gt;
&lt;span class="s1"&gt;            self.rigctl.stdin.flush()&lt;/span&gt;
&lt;span class="s1"&gt;            logger.debug("Sent '&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;' to RigControl.".format(cmd))&lt;/span&gt;
&lt;span class="s1"&gt;            return True&lt;/span&gt;
&lt;span class="s1"&gt;        except Exception as e:&lt;/span&gt;
&lt;span class="s1"&gt;            logger.debug("Failed sending '&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="err"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;' to RigControl: {1}.".format(cmd, str(e)))&lt;/span&gt;
&lt;span class="s1"&gt;    # Failed to send command&lt;/span&gt;
&lt;span class="s1"&gt;    return False&lt;/span&gt;

&lt;span class="s1"&gt;# This thread function reads from Rigctl process'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;
&lt;span class="n"&gt;def&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_rigThread&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;While&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;running&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigctl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;poll&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;None&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Wait&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;output&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;process&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;readable&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;self.rigctl.stdout, self.rigctl.stderr&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;[]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;readable&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="w"&gt;                &lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;"STD{0}: {1}"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;"ERR"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;pipe&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigctl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stderr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;"OUT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;rsp&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="ow"&gt;except&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;Exception&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;"Failed receiving from RigControl: {1}."&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)))&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;stopped&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;"RigControl process quit ({0})."&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rigctl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;poll&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;I&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;hope&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;give&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;me&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;solution&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;by&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;step&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;this&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;issue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ow"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;using&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;network&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;directly&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;my&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Icom&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;transceiver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;Robert&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;N6VKZ&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;YF3VKZ&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">n6vkz</dc:creator><pubDate>Mon, 20 Apr 2026 10:00:04 -0000</pubDate><guid>https://sourceforge.net5d7103e44c91d3324f3910dbe27b1c5ce5476f9c</guid></item><item><title>Kenwood TS-480 (and others?) 2 VFO</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/db780998/?limit=25#a1d3</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi, did you ever find an answer to this? I have the same issue with IC-7610 only showing 1 VFO.&lt;br/&gt;
73 Geoff G4XMJ&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Geoff Wiggins</dc:creator><pubDate>Fri, 28 Nov 2025 16:25:34 -0000</pubDate><guid>https://sourceforge.net42bfc28f8b683f2de43020c5cc6db38c57c319b9</guid></item><item><title>HamLib 4 use-case from YO3HEX - C# application with wrapper</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/5deb69b641/?limit=25#ec7a</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hello,&lt;/p&gt;
&lt;p&gt;I really hope that this email will get to you.&lt;br/&gt;
My name is Dex (YO3HEX) and i'm working right now on quite a big project that would allow the remote operation of up to 2 transceivers without any PC on the remote side (that includes bidirectional streaming, cat 2 ethernet and a remote keyer just to name a few).&lt;br/&gt;
First of all I would like to give the team a big thank you for the impressive work that you've done.&lt;br/&gt;
In my case i'm working on a small PC application that would allow the use of the cat 2 ethernet endpoint to control various transceivers on the other side and this lib fitted as a glove - given the fact that i'm using C# as my main development platform (one of the main reasons being the GUI) i had to create a little bit of a wrapper to expose the DLL methods / functionalities in C# but, everything works as expected and as good as it gets - there were some small problems in regards to data serialization and to the fact that as far as i understand the lib is not necessary thread safe but nothing a good ol' mutex cannot solve.&lt;br/&gt;
There is a small thing that I would like to discuss if you have the time in regard to the power on and power off functionality that is present in the hamlib (yes i do understand quite well that there are some limitations).&lt;br/&gt;
The scenario is like this - regardless if using rigctl or my own software - but i will refer to rigctl because it is easier to test.&lt;/p&gt;
&lt;p&gt;Scenario 1 - rig is in power on state (icom 7300 for example) and i connect to the rig using rigctl - i'm issuing a power off command which would bring the rig in power off state as expected, i'm issuing then a power on command that is bringing the rig in power on state as expected - so this is working as intended.&lt;/p&gt;
&lt;p&gt;Scenario 2 - rig is in power off state - rigctl will cont connect to the rig - which i do think is kinda by design because it would be expected that the rig would reply with some data when rigctl tries to query it - but in case of many transceivers the cat interface would listen only for power on frames (which is the case of 7300 for example) and in this case would not reply to any other types of cat queries - in this scenario, if rigctl is disconnected from the rig after a power off there would be no way to turn it back on (maybe i'm wrong and there are other parameters that can be passed to rigctl which i might have missed or i do not know about - by no means i did not review the whole code of hamlib)&lt;/p&gt;
&lt;p&gt;As a final word i'm sending you some screens with the application that i'm working on, which right now is on the development phase (mouse wheel would also allow to modify the VFO when mouse is over the VFO display) and yes everything works stellar - again thank you for the magnificent work that the team have done.&lt;/p&gt;
&lt;p&gt;73 DE YO3HEX / YP3X&lt;br/&gt;
Dex&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Gabriel Tudoran</dc:creator><pubDate>Sun, 14 Sep 2025 07:03:19 -0000</pubDate><guid>https://sourceforge.nete9f860a4a90486ccdc9b405a6603f165d026aefc</guid></item><item><title>Problems using rotctld</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/5942faa2a9/?limit=25#3ed8/dfd4</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Did you try &lt;code&gt;rotctl.exe&lt;/code&gt; stand alone as I suggested?  Make sure any &lt;code&gt;rotctld.exe&lt;/code&gt; processes are killed first.&lt;/p&gt;
&lt;p&gt;Let's simplify this as much as possible.  Also, please add &lt;code&gt;-vvvvv&lt;/code&gt; to the command line.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nate Bargmann</dc:creator><pubDate>Sun, 10 Aug 2025 15:45:50 -0000</pubDate><guid>https://sourceforge.net39a1eb4e65cc3813c82375e6dd80d24e58389b2b</guid></item><item><title>Problems using rotctld</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/5942faa2a9/?limit=25#3ed8</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks for the advice.&lt;/p&gt;
&lt;p&gt;Some hours later without success...&lt;/p&gt;
&lt;p&gt;I started rotctld in a commandline box&lt;br/&gt;
I started rotctl in another commandline box&lt;/p&gt;
&lt;p&gt;If I paste P 20 20 into rotctl I can see rotctld is receiving data but rotor stays quite.&lt;/p&gt;
&lt;p&gt;I think there is a problem with the speed of the COM-Port.&lt;br/&gt;
In the Documentation of Sarctrac I noticed it needs 9600.&lt;br/&gt;
starting rotctld -s 9600 will produce an error (invalid configuration)&lt;/p&gt;
&lt;p&gt;So I cheked what happens with different connection speed using Putty.&lt;br/&gt;
Puty with 9600 works, I can controll Sarctrac&lt;br/&gt;
Puty with 19200 produce an error 31 (a connected device ist noch working)&lt;/p&gt;
&lt;p&gt;It seems, that Sarctrac just accept 9600.&lt;br/&gt;
Cause rotctld -s 9600 will produce an error (invalid configuration), I think rotctld will not accept 9600&lt;br/&gt;
- It doesn't matter, if I set the Com-Port to 9600 or 19200 in the Devicemanager...&lt;/p&gt;
&lt;p&gt;I checked that there just one process of rotctld and rotctl ist running and no other Program that may use the Com-Port. Putty is also closed when using the rot-commands.&lt;/p&gt;
&lt;p&gt;What do you think about my thoughts, that rotctld has problems with speed of 9600?&lt;/p&gt;
&lt;p&gt;Maybe I also should look for a Serialport-Monitor to see what happens when I use Putty @9600 and rotctld @19.200 ...&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Achim Knierim</dc:creator><pubDate>Tue, 05 Aug 2025 19:42:41 -0000</pubDate><guid>https://sourceforge.net8f0acd34222e08d59ac4189fb82e2b37d38a2380</guid></item><item><title>Problems using rotctld</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/5942faa2a9/?limit=25#9203/3513</link><description>&lt;div class="markdown_content"&gt;&lt;blockquote&gt;
&lt;p&gt;Using commandline&lt;br/&gt;
&lt;code&gt;"C:\Program Files\hamlib-w64-4.5.5\bin\rotctld.exe" -m 202 -r COM6 -s 9600 -T 127.0.0.1 -t 4533&lt;/code&gt; creates the error above.&lt;/p&gt;
&lt;p&gt;Now changed to 19200 in the Config for COM6 and used -s 19200 and the commandline returns no error - I think I am a step ahead... But Rotor dosn't move at all..&lt;/p&gt;
&lt;p&gt;Now tested:&lt;br/&gt;
&lt;code&gt;"C:\Program Files\hamlib-w64-4.5.5\bin\rotctl.exe" -m 202 -r COM6 -s 19200 -t 4533&lt;/code&gt;&lt;br/&gt;
Got no error!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Did you kill the &lt;code&gt;rotctld&lt;/code&gt; process before starting &lt;code&gt;rotctl&lt;/code&gt;?  If not, you have two programs in contention for the same serial port.&lt;/p&gt;
&lt;p&gt;Make sure you have no &lt;code&gt;rotctld&lt;/code&gt; process(es) running in Task Manager (or whatever they call it now).  Then try:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;"C:\Program Files\hamlib-w64-4.5.5\bin\rotctl.exe" -m 202 -r COM6 -s 9600&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;As I see it, unless the serial rate in the rotator controller has been changed, then 9600 is the rate that should be used.  If 19200 works, then I suspect the controller setting has been changed and you'll need to use 19200 throughout.&lt;/p&gt;
&lt;p&gt;If that succeeds, then close &lt;code&gt;rotctl&lt;/code&gt; and start &lt;code&gt;rotctld&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;"C:\Program Files\hamlib-w64-4.5.5\bin\rotctld.exe" -m 202 -r COM6 -s 9600 -T 127.0.0.1 -t 4533&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;To have &lt;code&gt;rotctl&lt;/code&gt; communicate with it, you'll use a different syntax than you used above:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;"C:\Program Files\hamlib-w64-4.5.5\bin\rotctl.exe" -m 2 -r 127.0.0.1:4533&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;You can find an example at:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://n0nb.users.sourceforge.net/man1/rotctl.1.html#EXAMPLES" rel="nofollow"&gt;https://n0nb.users.sourceforge.net/man1/rotctl.1.html#EXAMPLES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Years back I learned that MS Windows doesn't seem to like &lt;code&gt;localhost&lt;/code&gt; and works with &lt;code&gt;127.0.0.1&lt;/code&gt;.  Perhaps that has changed.&lt;/p&gt;
&lt;p&gt;Bear in mind that &lt;code&gt;rotctld&lt;/code&gt; is using the serial port, and then &lt;code&gt;rotctl&lt;/code&gt; is using the network loopback address to communicate to it.  This should probably be explained more clearly in the manual page.&lt;/p&gt;
&lt;p&gt;Finally, regarding serial speeds.  Unless otherwise told, e.g. the &lt;code&gt;-s&lt;/code&gt; option, Hamlib will select the fastest serial rate defined in the device's capability structure.  Here is that part of the capabilities for rotator model 202:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nx"&gt;Port&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="nx"&gt;RS&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;232&lt;/span&gt;
&lt;span class="nx"&gt;Serial&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;speed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="m m-Double"&gt;.19200&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;bauds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="nx"&gt;N1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;ctrl&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;NONE&lt;/span&gt;
&lt;span class="nx"&gt;Write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;timeout&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;retries&lt;/span&gt;
&lt;span class="nx"&gt;Post&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;write&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Hope this helps.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Nate Bargmann</dc:creator><pubDate>Mon, 04 Aug 2025 19:25:11 -0000</pubDate><guid>https://sourceforge.net4f9a4634ec27784c7a48c0d021072b22fba0bb17</guid></item><item><title>Problems using rotctld</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/5942faa2a9/?limit=25#9203</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Thanks for replying, Nate.&lt;br/&gt;
CH340 is a USB Serial to WiFi-Adapter shipped with theSarctrac.&lt;br/&gt;
It connects the Rotor via COM-Interface by WiFi.&lt;br/&gt;
I can control the Rotor this way by Ham Radio Deluxe and by Putty - so it basicly works.&lt;/p&gt;
&lt;p&gt;Using commandline&lt;br/&gt;
C:\Program Files\hamlib-w64-4.5.5\bin\rotctld.exe -m 202 -r COM6 -s 9600 -T 127.0.0.1 -t 4533    creates the error above.&lt;/p&gt;
&lt;p&gt;Now changed to 19200 in the Config for COM6 and used -s 19200 and the commandline returns no error - I think I am a step ahead... But Rotor dosn't move at all..&lt;/p&gt;
&lt;p&gt;Now tested:&lt;br/&gt;
"C:\Program Files\hamlib-w64-4.5.5\bin\rotctl.exe" -m 202 -r COM6 -s 19200 -t 4533&lt;br/&gt;
Got no error!&lt;/p&gt;
&lt;p&gt;Rotator command: P&lt;br/&gt;
Azimuth: 30&lt;br/&gt;
Elevation: 30&lt;/p&gt;
&lt;p&gt;Nothng happpens, so I'll check the current Position that should be at 0, 0&lt;/p&gt;
&lt;p&gt;Rotator command: p&lt;br/&gt;
get_pos: error = easycomm_rot_set_position called: 30.000000 30.000000&lt;br/&gt;
easycomm_transaction called: AZ30.0 EL30.0&lt;/p&gt;
&lt;p&gt;rig_flush: called for serial device&lt;br/&gt;
read_string_generic called, rxmax=4095 direct=1, expected_len=1&lt;br/&gt;
tcflush&lt;br/&gt;
write_block(): TX 14 bytes, method=2&lt;br/&gt;
rot_get_position called&lt;br/&gt;
easycomm_rot_get_position called&lt;br/&gt;
easycomm_transaction called: AZ EL&lt;/p&gt;
&lt;p&gt;rig_flush: called for serial device&lt;br/&gt;
read_string_generic called, rxmax=4095 direct=1, expected_len=1&lt;br/&gt;
tcflush&lt;br/&gt;
write_block(): TX 7 bytes, method=2&lt;br/&gt;
read_string_generic called, rxmax=32 direct=1, expected_len=1&lt;br/&gt;
read_string_generic(): Timed out 0.481 seconds after 2 chars, direct=1&lt;br/&gt;
easycomm_transaction read_string failed with status -5&lt;br/&gt;
easycomm_rot_get_position got error: -5&lt;br/&gt;
Communication timed out&lt;/p&gt;
&lt;p&gt;At &lt;a href="https://www.sarcnet.org/sarctrac-mk3.html" rel="nofollow"&gt;https://www.sarcnet.org/sarctrac-mk3.html&lt;/a&gt; they wrote:&lt;br/&gt;
Rotator emulation - Serial protocol: AMSAT EasyCommII with position feedback - 9600/N/8/1.&lt;/p&gt;
&lt;p&gt;Maybe hamlib won't accept 9600 and Sarctrac won't accept 19200?&lt;br/&gt;
But what I saw at other COM-Devices that it soesn't matter, what speed was selected it always worked...&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Achim Knierim</dc:creator><pubDate>Mon, 04 Aug 2025 17:04:53 -0000</pubDate><guid>https://sourceforge.net1a7b90b88a91b3ff9f72b135fdfea391ddc8b92d</guid></item><item><title>Rig type FLRig seems to have a bad name</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/9859a3e545/?limit=25#c314</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hello,&lt;br/&gt;
 what I can report back, is with the new HAMLIB DLL's it reports back extra information to WSJT-X in the form of the Rig type that is connected to FLRIG and that string is stored in the WSJT-X INI file.  This extra information in the RIG= string of WSJT-X triggers some form of mis match error and forces it back to being the 1st rig type in the list ( ADAT )&lt;/p&gt;
&lt;p&gt;When I start WSJT-X and select the entry for "W1HKJ FLRig" and save that, it is all runs fine for that session BUT what is stored in the INI file for WSJT-X is actually: "W1HKJ IC-7610(FLRig)"&lt;br/&gt;
 it would seem that some where HAMLIB is reading the Rig type from FLRIg and then passing that along in the rig list array, which also has now dynamically changed to be "W1HKJ IC-7610(FLRig)" this cascades into an eventual mis match of information.&lt;/p&gt;
&lt;p&gt;Is there any way to stop HAMLIB reading the extra information from FLRig so that the list of rigs will always be predictable?&lt;/p&gt;
&lt;p&gt;Regards&lt;br/&gt;
 Peter, vk5pj&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">VK5PJ Peter Sumner</dc:creator><pubDate>Sat, 02 Aug 2025 21:54:39 -0000</pubDate><guid>https://sourceforge.net03942d5175e8ee7918c7f97ed2d100fae1beecf8</guid></item><item><title>Rig type FLRig seems to have a bad name</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/9859a3e545/?limit=25#4907</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Nate,&lt;br/&gt;
 I grabbed the nightly build for 2025-08-02 (2nd Aug) and I can see the change of the name for the FLRIG entry, thanks.  I am finding it still miss behaves when used with WSJT-X 2.7, It is hard to describe but no where as smooth as when I use the very old HAMLIB DLL so it seems there is some thing not quite right for me.  If I go through all the setup for the rig and it works well but when I close WSJT-X and open it again, I am back to a RIG error and it defaults to the ADAT rig settings grrrr...   not sure how to describe it any better right now.  Will look again when I have had a sleep.&lt;/p&gt;
&lt;p&gt;Peter Sumner, vk5pj&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">VK5PJ Peter Sumner</dc:creator><pubDate>Sat, 02 Aug 2025 10:14:59 -0000</pubDate><guid>https://sourceforge.net2eee16aa76feecf4ac1074ea183addc4b5fb7e20</guid></item><item><title>Rig type FLRig seems to have a bad name</title><link>https://sourceforge.net/p/hamlib/discussion/25919/thread/9859a3e545/?limit=25#9b00</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;Hi Nate,&lt;br/&gt;
thanks for the update, I have been swapping HAMLIB DLL's back and forth to try and work out where it went wrong, the only data points I have is one that works from back in 2023 (came with WSJT-X v2.61) and those that do not from 2024 (part of the ver 2.7x R.C stream) up to now (all were part of the WSJT-X packages)  will have a look tomorrow or the next day to see what is in the nightly builds.  I only just recently heard that Michael Black had died, which was very sad, he had always been a great help to us using HAMLIB as part of WSJT-X.&lt;br/&gt;
Regards,&lt;br/&gt;
Peter Sumner&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">VK5PJ Peter Sumner</dc:creator><pubDate>Sat, 02 Aug 2025 03:02:42 -0000</pubDate><guid>https://sourceforge.net6ad3522d0f1dfeb30a3fe75273fab00c1c5b1ee2</guid></item></channel></rss>