I'm implementing several changes to support some functionality for the
IC7300. In order to minimize the review process I'm submitting this
small one separately (still working on finish the IC7300 but it's some
fairly extensive changes since ICOM has changed the protocol for several
things).
For the IC7300 turning power on requires ~150 0xfe's be sent to wake up
the rig. This causes a buffer overflow condition in icom/frame.c. This
patch increases the buffer size and ensures no overflow.
73
Mike W9MDB
This makes the first non-option argument end getopt_long() parsing
stop rather than shuffling non-option arguments to the end. This is
necessary so that rig/rotator command language arguments can start
with a '-' character and also it enables the '-' pseudo command to
switch to reading commands from stdin work correctly.
The change also make checking for the '-', switch to stdin, command
stricter in that it must be where a command is expected and it must be
a word containing exactly a single '-' character.
Overall this allows the following styles of use:
$ rigctl R -
$ rigctl - <<EOF
>R -
>EOF
R -
$ echo "R -" | rigctl -
R -
$ rigctl -m 1 M CW -1
$ rigctl F 434000000 - <<EOF
>M FM 15000
>f m
>EOF
M FM 15000
f 145000000
m FM
15000
$
as well as the command line interpreter operation where no commands
nor '-' are provided:
$ rigctl
Rig command: R -
Rig command: r
Rptr Shift: -
Rig command: f
Frequency: 145000000
Rig command: m
Mode: FM
Passband: 15000
Rig command: F 434000000
Rig command: f
Frequency: 434000000
Rig command: q
$
This change allows the set_mode functions to leave the rig passband
unchanged if required. For the few rigs that do not have explcit
passband width control either current state is read and rewritten or a
"normal" width is chosen e.g. select a normal width when there is a
choice like CW and CW-NARROW.
It seems like || was used where && was intended here. Currently, the
conditions are always true, and there's no reason for them to be written
this way.
Found with Coccinelle.
This back end used a 480 second timeout which effectively blocks
retries. The long timeout claimed to be for something to do with
tuning which I assume is related to an auto ATU blocking rig CAT
responses. The standard retry mechanism should cope with this without
resorting to an artificially extended timeout.
The rig->state.rigport retry option can be overridden by a
configuration option and therefore should be used rather than the
initial capabilities default value.
Thanks to Ervin HA2OS for finding this defect.
JTSDK allow building hamlib from JTSDK-QT or JT-MSYS.
However, on Windows 7 64-bit the i/o redirects are causing the command
console to crash when building from JTSDK-QT.
This patch simply removes the input redirect which shouldn't be
necessary.
73
Mike W9MDB
Do the minimum swapping and other manipulation to determine the Tx and
VFO status when setting the split frequency and mode.
TODO - other funcitons.
The strategy to determine the current VFO at the start of a set or
query sequence of the split transmit VFO should not switch back to the
Rx VFO unless it is certain that it was current at the start of the
sequence.
This implementation reduces the number of VFO excahnges or sets to a
minimum when setting the TX VFO frequency and mode together.
This also includes a much smarter implementation of the logic used
when the new config option 'no_xchg' is enabled. Now it is able to
accurately determine the original VFO selected and leaves the
sequences with the same VFO selected. There is one corner case when
both VFOs are identical (frequency, mode and width) at the start where
it has to take a guess as to the selected originally VFO (Icom CAT
protocol has no command to elicit this information). In that case it
guesses as the last VFO selected using Hamlib. Applications can gain
absolute certainty by setting the VFO themselves prior to using the
rig_{set,get}_{split,}_{freq,mode,freq_mode}() function series. This
now gives seamless TX VFO configuration without any relay clattering
or TX/RX audio glitches.
This optimized implementation takes advantage of the CAT protocol
command to set both frequency and mode at the same time. It also only
needs to switch VFOs once either side of the command.
CAT protocols that don't allow direct addressing of VFOs require that
the "other" VFO be queried or set via a select then get/set then
select back to original or swap then get/set then swap again. When
both frequncy and mode need to be set the sequences can be optimized
if a single funciton is avaiable.
This enhancement adds those single functions rig_set_split_freq_mode()
and rig_get_split_freq_mode() with a default impelementation that
calls the individual rig_{get,set}_split_{freq,mode}() functions. Back
ends can choose to implement an optimized version which is used
instead of the default if present.
Using these functions when an optimized implementation is available
allows the TX VFO's frequency and mode to be set in a single operation
with only one VFO exchange or selection either side of the
operation. Many CAT protocols are very efficient when getting or
setting both frequency and mode and some even combine the two in a
single command.
The letters 'K' and 'k' are used for the rigctl short command name for
these functions.
Adds a new config param "-C fakefreq=1"
The ft757gx only has one-way comm so this simply returns the last freq
set.
WSJT-X can operate in fake it split mode with this too.
RRR
Mike W9MDB
Some distributions--Debian and Alpine tested--put libusb.h under the
libusb-1.0 directory. Test for its presence and if found define
HAVE_LIBUSB_1_0_LIBUSB_H. Also test for HAVE_LIBUSB or
HAVE_LIBUSB_1_0_LIBUSB_H and conditionally include the correct header
file in the sources.