[chirp_devel] [Yaesu FT-4, FT-65, FT-25] Automatic duplex value selection not working

Bernhard Hailer
Sat Jan 25 19:29:59 PST 2020


# HG changeset patch
# Parent  2d1d2bf03a4ae6f39b8dd2cb1fa83289ebaeadf1
[Yaesu FT-4, FT-65, FT-25] Automatic duplex value selection not working

When a user was programming radio manually and didn't explicitely select 
positive or negative offset, then the radio's automatic preselection was 
being saved to the radio's memory. The driver was able to read that, but 
didn't know what to do with it. Some code to determine the correct value 
for "duplex" (0 or 2, not 5 for auto) was added. This will work for 2m 
only; for 70cm, the rules in the band plans (at least the ones offered 
by ARRL) are not specific enough.

73
Bernhard AE6YN

Fixes: #7605

diff --git a/chirp/drivers/ft4.py b/chirp/drivers/ft4.py
--- a/chirp/drivers/ft4.py
+++ b/chirp/drivers/ft4.py
@@ -470,9 +470,10 @@
  # we can re-arrange the order, and we don't need to have all
  # the values, but we cannot add our own values here.
  DUPLEX = ["+", "", "-", "", "off", "", "split"]  # (0,2,4,5)= (+,-,0, 
auto)
-# the radio implements duplex "auto" as 5. we map to "" It appears to be
-# a convienience function in the radio that affects the offset, but I 
do not
-# understand it.
+# the radio implements duplex "auto" as 5. We map to "". It is
+# a convenience function in the radio that affects the offset, which
+# sets the duplex value according to the frequency in use. Ham band plans
+# prescribe + or - depending on the location in the spectrum.

  SKIPS = ["", "S"]

@@ -1030,6 +1031,20 @@
                  name += chr(y)
              return name.rstrip()

+        def get_duplex(freq):     # auto duplex to real duplex
+            return_value = 4      # off
+            # 2M frequencies (according to ARRL)
+            if freq in range(145200000, 145500000):
+                return_value = 2  # negative
+            if freq in range(146610000, 146970000):
+                return_value = 2  # negative
+            if freq in range(147600000, 147990000):
+                return_value = 0  # positive
+            # ARRL band plan for 70cm does define repeater
+            # frequency ranges, but it allows local entities
+            # to make them input or output channels.
+            return return_value
+
          mem = chirp_common.Memory()
          _mem, ndx, num, regtype, sname = self.slotloc(memref)
          mem.number = num
@@ -1072,7 +1087,10 @@
                  mem.offset = txfreq
              else:
                  mem.offset = int(_mem.offset) * self.freq_offset_scale
-                mem.duplex = DUPLEX[_mem.duplex]
+                if _mem.duplex == 5:  # auto offset
+                    mem.duplex = DUPLEX[get_duplex(mem.freq)]
+                else:
+                    mem.duplex = DUPLEX[_mem.duplex]
              self.decode_sql(mem, _mem)
              mem.power = POWER_LEVELS[mem.tx_pwr]
              mem.mode = ["FM", "NFM"][_mem.tx_width]



More information about the chirp_devel mailing list