[chirp_devel] [PATCH][BTECH] Bug fix about radios resetting on the download, fixes #3015

M.Sc. Pavel Milanes Costa
Wed Apr 6 07:06:13 PDT 2016



El 05/04/16 a las 18:57, Dan Smith via chirp_devel escribió:
>> No, it means that the radio answer with a variable length
> You don't really think that the radio is answering with a variable
> length, right? Or are you saying we don't always know whether we need to
> read 8 or 16 bytes because we haven't identified the model yet? The
> radio isn't really capable of sending a random length of data...

No, I have confirmation by the first ID that this radio is the model I 
know it's; but the OEM reads the second ID of the radio and we are 
copying this behavior... _and now I realize that maybe we don't need to 
do that_, as we know for sure that this is the radio it's.

Jim, we will test in that way this night.

This read of the second ID is way beyond in the high mem area, the area 
that is not touched by the OEM software, we are doing a simple and 
common read but this radios has the bad behavior (bug? feature? flag?) 
to send a misplaced \x05 byte on the first reads... and this misplaced 
\x05 is the one that is doing the block shorter or longer.

The OEM always use the 64 bytes length on the reads, but this particular 
high mem reads is always 16 bytes, the restriction you see later in the 
code about almost 16 bytes is because the string we need is in the lower 
16 bytes.

This can be another approach, send the request for the 16 bytes and read 
at least 16 (from the 21 it must be) then process it and at the end do a 
serial flush to get the buffer clean (or a dummy read of the 5 following 
bytes)

>> This way is more intrusive and will require more code changes, I
>> realized of this alternative way right now.
> I really think that it's most likely that you're reading the blocks at
> different sizes than you should, which causes you to get out of sync,
> and thus depend on the timeouts to avoid hanging too long in between
> them.

No, the OEM doit in this sizes as the logs shows, and we are doing it 
the same size. The OEM always use the 64 bytes length on the reads, but 
this particular high mem reads is always 16 bytes only.

> That would explain why the download and upload performance differs
> so much -- sometimes we get lucky and don't hit a lot of timeouts, but
> if we get out of sync early, we hit the timeout on each block,
> introducing a couple hundred milliseconds of unneeded delay on each round.

Yes, it can be.

>
> If the radio is really writing blocks in different sizes with varying
> delays through the image, then the fully buffered approach I described
> earlier is definitely the way to go...

No, the read size (64 bytes) is constant trough the read, the same we 
have on the write to the radio with 16 bytes on each bloc, but this 
particular high mem reads is always 16 bytes only.

Yes, I'm playing with an approach on buffering the whole data stream and 
them process it, of curse on another similar scenario, to get used to it 
and maybe implement it here.

Dan, I vote for applying the patch as Jim reported it works and it don't 
break anything; we can test further on this two paths and maybe we can 
manage this to work:

- Test if we can avoid this second ID read, as we now for sure with the 
normal ID that we have the correct radio.
- Test the request 16 bytes as usual, but reads at least 16 to process 
and then flush the serial, to get the buffer clean for the next steps.

So it's your call, apply it now or wait to test the two mentioned paths 
to see if one of them works better?

The WACCOM Mini-8900 is another story (bug) with it's annoying \x05 byte 
popping around and the OEM doing silent reties when it found the \x05 
byte in a specific position. It's like the OEM know it will not work and 
retry the entire process from top.

Cheers, Pavel.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20160406/e5bb70ca/attachment-0001.html 


More information about the chirp_devel mailing list