[chirp_devel] [PATCH] [UV-5R] "radio refused to send block code 0x1ec0" patch

Jim Unroe
Sat Mar 14 15:03:31 PDT 2015


# HG changeset patch
# User Jim Unroe <rock.unroe at gmail.com>
# Date 1426370486 14400
# Node ID ecba19b26da64ecd03be7d47e04d1ad21d1ae08f
# Parent  c9c9128ca29ea21f54249788a9c0e47c9d5fbdc4
[UV-5R] "radio refused to send block code 0x1ec0" patch

Fix downloading/uploading issue for UV-5R.

Mathieu Rozon created the original patch.
Updated by Jim Unroe for better uploading compatiblilty.

Fixes #2317

diff -r c9c9128ca29e -r ecba19b26da6 chirp/drivers/uv5r.py
--- a/chirp/drivers/uv5r.py	Thu Mar 12 09:49:32 2015 +0100
+++ b/chirp/drivers/uv5r.py	Sat Mar 14 18:01:26 2015 -0400
@@ -442,10 +442,16 @@
     return ident
 
 
-def _read_block(radio, start, size):
+def _read_block(radio, start, size, first_command = False):
     msg = struct.pack(">BHB", ord("S"), start, size)
     radio.pipe.write(msg)
 
+    if(first_command == False):
+        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)
@@ -464,28 +470,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)
         block = block1 + block2
         version = block[48:62]
     return version
 
 
 def _get_radio_special_block(radio):
-    block = _read_block(radio, 0xCF0, 0x40)
+    block = _read_block(radio, 0xCF0, 0x40, False)
     special_block = block[2:9]
     return special_block
 
@@ -517,14 +520,14 @@
     # Main block
     LOG.debug("downloading main block...")
     for i in range(0, 0x1800, 0x40):
-        data += _read_block(radio, i, 0x40)
+        data += _read_block(radio, i, 0x40, False)
         _do_status(radio, i)
     _do_status(radio, radio.get_memsize())
     LOG.debug("done.")
     LOG.debug("downloading aux block...")
     # Auxiliary block starts at 0x1ECO (?)
     for i in range(0x1EC0, 0x2000, 0x40):
-        data += _read_block(radio, i, 0x40)
+        data += _read_block(radio, i, 0x40, False)
     LOG.debug("done.")
     return memmap.MemoryMap(data)
 
@@ -532,6 +535,7 @@
 def _send_block(radio, addr, data):
     msg = struct.pack(">BHB", ord("X"), addr, len(data))
     radio.pipe.write(msg + data)
+    time.sleep(0.05)
 
     ack = radio.pipe.read(1)
     if ack != "\x06":



More information about the chirp_devel mailing list