# HG changeset patch # User Rhett Robinson rrhett@gmail.com # Date 1550534826 28800 # Mon Feb 18 16:07:06 2019 -0800 # Node ID 90b4b9e47859a9623d4861f7f1021ba40d870eb2 # Parent b4e8134947c6447fb464d9de662dfc729affde9f [ic2730] Support frequencies requiring a tuning step of 6.25 kHz. Fixes #6457
This radio stores some flags indicating the tuning step of the frequency, and the frequency as a multiple of the tuning step. This patch adds support for a frequency that is a multiple of 6.25 kHz for both the frequency and offset. Still missing is support for a multiple of 25/3 kHz.
diff -r b4e8134947c6 -r 90b4b9e47859 chirp/drivers/ic2730.py --- a/chirp/drivers/ic2730.py Sun Feb 17 20:30:59 2019 -0800 +++ b/chirp/drivers/ic2730.py Mon Feb 18 16:07:06 2019 -0800 @@ -25,11 +25,12 @@ # - weather channel alert MEM_FORMAT = """ struct { - u24 freq; + u24 freq_flags:6 + freq:18; u16 offset; u8 tune_step:4, - unknown5:3, - mode:1; + unknown5:2, + mode:2; u8 unknown6:2, rtone:6; u8 unknown7:2, @@ -86,7 +87,7 @@ TMODES = ["", "Tone", "??0", "TSQL", "??1", "DTCS", "TSQL-R", "DTCS-R", "DTC.OFF", "TON.DTC", "DTC.TSQ", "TON.TSQ"] DUPLEX = ["", "-", "+"] -MODES = ["FM", "NFM"] +MODES = ["FM", "NFM", "AM", "NAM"] DTCSP = ["NN", "NR", "RN", "RR"]
AUTOREPEATER = ["OFF", "DUP", "DUP.TON"] @@ -209,9 +210,19 @@ mem.empty = True return mem
- # Frequencies are stored as kHz/5 - mem.freq = int(_mem.freq) * 5000 - mem.offset = int(_mem.offset) * 5000 + # _mem.freq is stored as a multiple of a tuning step + frequency_flags = int(_mem.freq_flags) + frequency_multiplier = 5000 + offset_multiplier = 5000 + if frequency_flags & 0x08: + frequency_multiplier = 6250 + if frequency_flags & 0x01: + offset_multiplier = 6250 + # flag of 0x10 is related to tuning step of 25./3, but it is not exact, + # so skip this for now + + mem.freq = int(_mem.freq) * frequency_multiplier + mem.offset = int(_mem.offset) * offset_multiplier mem.rtone = chirp_common.TONES[_mem.rtone] mem.ctone = chirp_common.TONES[_mem.ctone] mem.tmode = TMODES[_mem.tmode] @@ -257,8 +268,18 @@ if was_empty: _wipe_memory(_mem, "\x00")
- _mem.freq = mem.freq / 5000 - _mem.offset = mem.offset / 5000 + frequency_flags = 0x00 + frequency_multiplier = 5000 + offset_multiplier = 5000 + if mem.freq % 5000 != 0 and mem.freq % 6250 == 0: + frequency_flags |= 0x08 + frequency_multiplier = 6250 + if mem.offset % 5000 != 0 and mem.offset % 6250 == 0: + frequency_flags |= 0x01 + offset_multiplier = 6250 + _mem.freq = mem.freq / frequency_multiplier + _mem.offset = mem.offset / offset_multiplier + _mem.freq_flags = frequency_flags _mem.rtone = chirp_common.TONES.index(mem.rtone) _mem.ctone = chirp_common.TONES.index(mem.ctone) _mem.tmode = TMODES.index(mem.tmode)