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 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.
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.
clang warned that lvl_len could be used unitialized in a call to
rig_debug. Initialze lvl_len to 0 as its assignement is inside an if
conditional.
Also reported by Greg Troxel.
Only ask Icom rigs once then desist if bandwidth request returns
command rejected. This avoids sending the request with every mode
query and possibly retrying 'retries' times for rigs that do not
suport the '1a 03' command which wastes much time at slow baud rates.
Icom users, who use the K9JM CI-V router to protect their PW-1
amplifiers from damage due to Icom's broken CI-V protocol handling,
require a 1s delay after opening the serial port. This is due to the
router using an Arduino & Arduino USB adapter that employs a
bootloader which holds the RS-232 interface for 1s after reset (DTR
releases reset). Hamlib already has a retry and timeout mechanism
which was set to 3 and 200ms respectively for most Icom rigs. This
change increses that timeout to 1s. The increaased timeout will have
little or no impact on clients as it only comes into play if there is
a problem.