On 24/11/2014 22:51, Michael Black wrote: Hi Mike, > You referred to me to whatever version this is which I assume is the hamlib3 > custom one you've referred to for WSJT-X? > git clone git://git.code.sf.net/u/bsomervi/hamlib src OK, some comments below. > Mike W9MDB > > -----Original Message----- > From: Bill Somerville [mailto:g4...@classdesign.com] > Sent: Monday, November 24, 2014 4:38 PM > To: wsjt-devel@lists.sourceforge.net > Subject: Re: [wsjt-devel] Rig control problem with RigBlaster > > On 24/11/2014 22:27, Michael Black wrote: > Hi Mike, >> 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. read_string() is clearly documented as taking the receive buffer length in the rxmax argument, i.e. including room for the terminating '\0' char that will be added to the end. >> >> 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. Most protocols have a specific terminating character, as does the ten-tec protocol, you will not get a time out if the terminating character is seen, i.e. the '\r' char.
Looks to me that the whole problem stems from tentec_transaction() in tentec.c not using the message termination character set arguments to read_string(). Are there some ten-tec protocols that don;'t use the '\r' terminator character? >> 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. read_string() is clearly documented as requiring a buffer pointer and a length including the space for the terminating '\0' char that will be added to make the reply a valid C string. If you make that change you will break many other back ends. >> >> >> 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; >> } > These changes are very familiar. What version of hamlib are you basing your > changes on? This area is definitely a bit dubious, I have made some fixes there but it may still be broken. The select further up is where the time out happens, total_count should be incremented there because the read just above is guaranteed to have read a character. If you are seeing the read being called after a time out then something is broken in the select code. >> Mike W9MDB >> > 73 > Bill > G4WJS. 73 Bill G4WJS. ------------------------------------------------------------------------------ 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 wsjt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/wsjt-devel