[chirp_devel] Fwd: Fix downloading/uploading issue for UV-5R. Fixes #2317

Dan Smith
Mon Mar 9 18:16:13 PDT 2015


Hi Mathieu,

It came through this time :)

> # HG changeset patch
> # User Mathieu Rozon <mathrozon at gmail.com>
> # Date 1425778153 18000
> #      Sat Mar 07 20:29:13 2015 -0500
> # Node ID cfdd6f6577f1c8d420376c35bb684a9552042179
> # Parent  d84dfd6c29d61268de11584f5d427e60936131d9
> Fix downloading/uploading issue for UV-5R. Fixes #2317
> 
> diff -r d84dfd6c29d6 -r cfdd6f6577f1 chirp/drivers/uv5r.py
> --- a/chirp/drivers/uv5r.py	Tue Mar 03 22:25:38 2015 -0800
> +++ b/chirp/drivers/uv5r.py	Sat Mar 07 20:29:13 2015 -0500
> @@ -438,17 +438,22 @@
>      ack = serial.read(1)
>      if ack != "\x06":
>          raise errors.RadioError("Radio refused clone")
> -
> +    

You're adding whitespace here, please remove this.

>      return ident
>  
>  
> -def _read_block(radio, start, size):
> +def _read_block(radio, start, size, firstCommand):

Since this is not needed every time, you should default this to False
for easier calling. Like this:

  def _read_block(radio, start, size, first_command=False):
      ...

>      msg = struct.pack(">BHB", ord("S"), start, size)
>      radio.pipe.write(msg)
>  
> +    if(firstCommand == False):

Please don't use camelCase identifiers and observe proper spacing; the
parentheses are unnecessary. Also, the pythonic way to do this would be:

  if not first_command:
      ...

> +        ack = radio.pipe.read(1)
> +        if ack != "\x06":
> +            raise errors.RadioError("Radio refused to send second block 0x%04x" % start)
> +
>      answer = radio.pipe.read(4)
>      if len(answer) != 4:
> -        raise errors.RadioError("Radio refused to send block 0x%04x" % start)
> +        raise errors.RadioError("Radio refused to send first block 0x%04x" % start)

I don't think you should make this change, as you could hit this error
on a non-first block.

>  
>      cmd, addr, length = struct.unpack(">BHB", answer)
>      if cmd != ord("X") or addr != start or length != size:
> @@ -464,28 +469,25 @@
>          raise errors.RadioError("Radio sent incomplete block 0x%04x" % start)
>  
>      radio.pipe.write("\x06")
> -
> -    ack = radio.pipe.read(1)
> -    if ack != "\x06":
> -        raise errors.RadioError("Radio refused to send block 0x%04x" % start)
> +    time.sleep(0.005)
>  
>      return chunk
>  
>  
>  def _get_radio_firmware_version(radio):
>      if radio.MODEL == "BJ-UV55":
> -        block = _read_block(radio, 0x1FF0, 0x40)
> +        block = _read_block(radio, 0x1FF0, 0x40, True)
>          version = block[0:6]
>      else:
> -        block1 = _read_block(radio, 0x1EC0, 0x40)
> -        block2 = _read_block(radio, 0x1F00, 0x40)
> +        block1 = _read_block(radio, 0x1EC0, 0x40, True)
> +        block2 = _read_block(radio, 0x1F00, 0x40, False)

If you make the change I suggested above about the defaulted parameter,
then you won't need to pass False here.

I'm worried that this may not work for other UV5R variants, other than
the ones mentioned in the bug.

Jim, can you look the changes here over and see if you think it'll be a
problem for the other versions of this radio?

Thanks!

--Dan

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
Url : http://intrepid.danplanet.com/pipermail/chirp_devel/attachments/20150309/93c3fda8/attachment-0001.bin 


More information about the chirp_devel mailing list