[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