The string length logic seems a bit inconsistent on hamlib.
It looks to me like all rigs that use hamlib serial com should be having
problems.
I checked some other rigs and it appears they should have similar problems
with truncated responses.
If you read_string() with a correct expected length for the response you get
back length-1. Maybe this doesn't cause problems if most rigs return a 0x0d
or such on the end of their responses.
If you ask for more bytes than you expect you get a timeout and an extra
byte.
It's fairly obvious that you don't want to hit a timeout on every
command...so the "expected response length" should be the right argument.
The Omni VII has some commands which are binary and exact length is returned
plus the implementation for several commands was wrong and I'm fixing those.
I've got basic operation working now and am working on split mode.
In read_string() it does this incorrect logic which ends up return one less
byte than requested
while (total_count < rxmax-1) {
Presumably to make room for this
rxbuffer[total_count] = '\000';
I changed that and commented out the insertion of the terminator
while (total_count < rxmax) {
// rxbuffer[total_count] = '\000';
// maybe this should be rxbuffer[total_count+1]='\000' but I'm leary of this
since I'm sure many calling functions may not expect to have to allow for an
extra byte
Either string_read should add the terminating zero and the calling functions
ensure they have length+1 bytes available....
Or...the calling functions should be responsible for ensuring a terminating
zero.
With that change it behaves for the Omni VII with the corrected command set
that I've implemented getting back the correct length for all commands.
And I think the extra byte on timeout is fixed with this in iofunc.c by
adding a rd_count > 0 check instead of always incrementing total_count
rd_count = port_read(p, &rxbuffer[total_count], 1);
if (rd_count > 0) {
++total_count;
}
Mike W9MDB
------------------------------------------------------------------------------
Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server
from Actuate! Instantly Supercharge Your Business Reports and Dashboards
with Interactivity, Sharing, Native Excel Exports, App Integration & more
Get technology previously reserved for billion-dollar corporations, FREE
http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk
_______________________________________________
wsjt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/wsjt-devel