[chirp_devel] [PATCH] [FT-70] #5329 and issue #5647 Revise handling of empty chunks in yaesu_clone.py

nicolas jon pike
Fri Mar 23 10:52:38 PDT 2018


# HG changeset patch
# User Nicolas Pike <nicolas.jon.pike at gmail.com>
# Date 1521827521 0
#      Fri Mar 23 17:52:01 2018 +0000
# Node ID 9e3b0ff763087f08758900b006199e2ea60b57dc
# Parent  96bc56916c955098f4a5b71cc174edeef1f090d9
[FT-70]  #5329 and issue #5647 Revise handling of empty chunks in yaesu_clone.py
#5647 Empty chunks no longer counted towards blocks read.
#5329 Can now set correct memory size read request, as no getting empty blocks.
Yaesu_clone change proposed by Dan - Thanks! I have only tested it on the FT-70, would be great to see it tested on other Yaesu radios.
This replaces my last submitted patch.

diff -r 96bc56916c95 -r 9e3b0ff76308 chirp/drivers/ft70.py
--- a/chirp/drivers/ft70.py	Tue Mar 20 21:38:07 2018 -0400
+++ b/chirp/drivers/ft70.py	Fri Mar 23 17:52:01 2018 +0000
@@ -466,14 +466,14 @@
 @directory.register
 class FT70Radio(yaesu_clone.YaesuCloneModeRadio):
     """Yaesu FT-70DE"""
-    BAUD_RATE = 115200
+    BAUD_RATE = 38400
     VENDOR = "Yaesu"
     MODEL = "FT-70D"
 
     _model = "AH51G"
 
-    _memsize = 65227  # 65227 read from dump ?
-    _block_lengths = [10, 65555]  # ????? Not sure why this works to match _memsize
+    _memsize = 65227  # 65227 read from dump
+    _block_lengths = [10, 65217]
     _block_size = 32
     _mem_params = (900,  # size of memories array
                    900,  # size of flags array
diff -r 96bc56916c95 -r 9e3b0ff76308 chirp/drivers/yaesu_clone.py
--- a/chirp/drivers/yaesu_clone.py	Tue Mar 20 21:38:07 2018 -0400
+++ b/chirp/drivers/yaesu_clone.py	Fri Mar 23 17:52:01 2018 +0000
@@ -43,14 +43,22 @@
 
 
 def _chunk_read(pipe, count, status_fn):
+    timer = time.time()
     block = 32
     data = ""
-    for _i in range(0, count, block):
-        data += pipe.read(block)
-        if data:
+    while len(data) < count:
+        # Don't read past the end of our block if we're not on a 32-byte boundary
+        chunk_size = min(block, count - len(data))
+        chunk = pipe.read(chunk_size)
+        if chunk:
+            timer = time.time()
+            data += chunk
             if data[0] == chr(CMD_ACK):
                 data = data[1:]  # Chew an echo'd ack if using a 2-pin cable
-                # LOG.debug("Chewed an ack")
+        # LOG.debug("Chewed an ack")
+        if time.time() - timer > 2:
+            # It's been two seconds since we last saw data from the radio, so it's time to give up.
+            raise errors.RadioError("Timed out reading from radio")
         status = chirp_common.Status()
         status.msg = "Cloning from radio"
         status.max = count



More information about the chirp_devel mailing list