[chirp_devel] [PATCH] [btech] Add support for 16 FM presets for KT-8900R. Part of #4051
# HG changeset patch # User Michael Wagner michael.wagner@gmx.at # Date 1474921370 -7200 # Mon Sep 26 22:22:50 2016 +0200 # Node ID 51ab51073c320b2b383b1ca175cc728a95775273 # Parent 0e35f539fc38800907e088ab95d9d3a6c0071748 [btech] Add support for 16 FM presets for KT-8900R. Part of #4051 Add support for the 16 FM presets. Tested only on QYT KT-8900R - tests on other devices supported by the btech-driver are welcome.
73, Michael, OE4AMW
diff -r 0e35f539fc38 -r 51ab51073c32 chirp/drivers/btech.py --- a/chirp/drivers/btech.py Fri Sep 23 19:43:18 2016 +0200 +++ b/chirp/drivers/btech.py Mon Sep 26 22:22:50 2016 +0200 @@ -27,7 +27,7 @@ from chirp.settings import RadioSettingGroup, RadioSetting, \ RadioSettingValueBoolean, RadioSettingValueList, \ RadioSettingValueString, RadioSettingValueInteger, \ - RadioSettings, InvalidValueError + RadioSettingValueFloat, RadioSettings, InvalidValueError from textwrap import dedent
MEM_FORMAT = """ @@ -155,6 +155,13 @@ u8 unknown1[10]; } names[200];
+#seekto 0x3000; +struct { + u8 freq[8]; + char broadcast_station_name[6]; + u8 unknown[2]; +} fm_radio_preset[16]; + #seekto 0x3C90; struct { u8 vhf_low[3]; @@ -1110,7 +1117,8 @@ advanced = RadioSettingGroup("advanced", "Advanced Settings") other = RadioSettingGroup("other", "Other Settings") work = RadioSettingGroup("work", "Work Mode Settings") - top = RadioSettings(basic, advanced, other, work) + fm_presets = RadioSettingGroup("fm_presets", "FM Presets") + top = RadioSettings(basic, advanced, other, work, fm_presets)
# Basic tdr = RadioSetting("settings.tdr", "Transceiver dual receive", @@ -1547,6 +1555,47 @@ PTTID_LIST[_mem.settings.pttid])) work.append(pttid)
+ #FM presets + def fm_validate(value): + if value == 0: + return chirp_common.format_freq(value) + if not (87.5 <= value and value <= 108.0): # 87.5-108MHz + msg = ("FM-Preset-Frequency: Must be between 87.5 and 108 MHz") + raise InvalidValueError(msg) + return value + + def apply_fm_preset_name(setting, obj): + valstring = str (setting.value) + for i in range(0,6): + if valstring[i] in VALID_CHARS: + obj[i] = valstring[i] + else: + obj[i] = '0xff' + + def apply_fm_freq(setting, obj): + value = chirp_common.parse_freq(str(setting.value)) / 10 + for i in range(7, -1, -1): + obj.freq[i] = value % 10 + value /= 10 + + _presets = self._memobj.fm_radio_preset + i = 1 + for preset in _presets: + line = RadioSetting("fm_presets_"+ str(i), "Station name " + str(i), + RadioSettingValueString(0, 6, _filter( + preset.broadcast_station_name))) + line.set_apply_callback(apply_fm_preset_name, + preset.broadcast_station_name) + + val = RadioSettingValueFloat(0, 108, convert_bytes_to_freq(preset.freq)) + fmfreq = RadioSetting("fm_presets_"+ str(i) + "_freq", "Frequency "+ str(i), val) + val.set_validate_callback(fm_validate) + fmfreq.set_apply_callback(apply_fm_freq, preset) + fm_presets.append(line) + fm_presets.append(fmfreq) + + i = i + 1 + return top
def set_settings(self, settings):
participants (1)
-
Michael Wagner