# HG changeset patch # User Bernhard Hailer ham73tux@gmail.com # Date 1577395355 28800 # Thu Dec 26 13:22:35 2019 -0800 # Node ID 826a0f4b373066fb73e255e1f82b1cf190830763 # Parent c3c7ee53893ff6ff83798bd9cc0a424dae201d3f [vx8] #129, #1735 (same issue): fix for incorrect channel initializations
Users complained that under certain circumstances 2m repeaters with negative offsets were not programmed correctly and resulted in a frequency offset or even an incorrect transmit/receive mode. Both issues #129 and #1735 essentially describe that same problem for the Yaesu VX-8. I ran into the same issue with a VX-8DR I just got - which made me dig into Chirp :-)
Two bytes were found to be initialized differently when manually programmed, both were marked "unknown". After a few experiments these bytes could be (at least partially) identified. (A side product was that I found the bit responsible for narrowband transmit - that will be used in another patch fixing issue #1615 to enable this radio for Chirp's "NFM" mode).
Tested with a VX-8DR.
73 Bernhard AE6YN
diff --git a/chirp/drivers/vx8.py b/chirp/drivers/vx8.py --- a/chirp/drivers/vx8.py +++ b/chirp/drivers/vx8.py @@ -152,7 +152,9 @@
#seekto 0x328A; struct { - u8 unknown1; + u8 unknown1a:2, + half_deviation:1, + unknown1b:5; u8 mode:2, duplex:2, tune_step:4; @@ -167,7 +169,12 @@ tone:6; u8 unknown6:1, dcs:7; - u8 unknown7[3]; + u8 pr_frequency; + u8 unknown7; + u8 unknown8a:3, + unknown8b:1, + rx_mode_auto:1, + unknown8c:3; } memory[900];
#seekto 0xC0CA; @@ -494,7 +501,9 @@
def _wipe_memory(mem): mem.set_raw("\x00" * (mem.size() / 8)) - mem.unknown1 = 0x05 + mem.pr_frequency = 0x1d # default PR frequency of 1600 Hz + mem.unknown8b = 1 # This bit must be 1, but its meaning is unknown + mem.rx_mode_auto = 1 # rx auto mode bit defaults to 1
@directory.register @@ -701,6 +710,7 @@ _mem.duplex = DUPLEX.index(mem.duplex) _mem.mode = MODES.index(mem.mode) _mem.dcs = chirp_common.DTCS_CODES.index(mem.dtcs) + # Radio doesn't do that when programmed manually, but tox needs it: _mem.tune_step = STEPS.index(mem.tuning_step) if mem.power: _mem.power = 3 - POWER_LEVELS.index(mem.power)