[chirp_devel] [PATCH 1 of 1] [KG-UVD1P KG-UV6] Decode configured frequency ranges and expose them in settings
Marco Filippi IZ3GME
Thu Oct 11 15:58:47 PDT 2012
# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1349996123 -7200
# Node ID d18da6970f5b9a1b99d230c0ecd3d75e3bddbc30
# Parent e6cdd20727bb3d4f7fbf89d9c4f848d49714fba5
[KG-UVD1P KG-UV6] Decode configured frequency ranges and expose them in settings
First step to Feature #285
diff -r e6cdd20727bb -r d18da6970f5b chirp/wouxun.py
--- a/chirp/wouxun.py gio ott 11 18:14:37 2012 +0200
+++ b/chirp/wouxun.py ven ott 12 00:55:23 2012 +0200
@@ -18,7 +18,8 @@
import os
from chirp import util, chirp_common, bitwise, memmap, errors, directory
from chirp.settings import RadioSetting, RadioSettingGroup, \
- RadioSettingValueBoolean, RadioSettingValueList
+ RadioSettingValueBoolean, RadioSettingValueList, \
+ RadioSettingValueInteger
if os.getenv("CHIRP_DEBUG"):
DEBUG = True
@@ -27,6 +28,31 @@
def wipe_memory(_mem, byte):
_mem.set_raw(byte * (_mem.size() / 8))
+
+FREQ_ENCODE_TABLE = [ 0x7, 0xa, 0x0, 0x9, 0xb, 0x2, 0xe, 0x1, 0x3, 0xf ]
+
+# writing bad frequency ranges on the radio can brick it
+# the encode function here has not been tested
+# it has been included for documentation purpouse only as I never call it
+# you have been warned, use at your own risk
+def encode_freq(freq):
+ enc = 0
+ div = 1000
+ for i in range(0, 4):
+ enc <<= 8
+ enc |= FREQ_ENCODE_TABLE[ (freq/div) % 10 ]
+ div /= 10
+ return enc
+
+def decode_freq(bytes):
+ freq = 0
+ shift = 12
+ for i in range(0, 4):
+ freq *= 10
+ freq += FREQ_ENCODE_TABLE.index( (bytes>>shift) & 0xf )
+ shift -= 4
+ # print "bytes %04x freq %d shift %d" % (bytes, freq, shift)
+ return freq
@directory.register
class KGUVD1PRadio(chirp_common.CloneModeRadio):
@@ -61,6 +87,18 @@
_2_unknown_2:4;
u8 unknown[2];
} memory[199];
+
+ #seekto 0x0970;
+ struct {
+ u16 vhf_rx_start;
+ u16 vhf_rx_stop;
+ u16 uhf_rx_start;
+ u16 uhf_rx_stop;
+ u16 vhf_tx_start;
+ u16 vhf_tx_stop;
+ u16 uhf_tx_start;
+ u16 uhf_tx_stop;
+ } freq_ranges;
#seekto 0x0E5C;
struct {
@@ -227,19 +265,55 @@
return rf
def get_settings(self):
- group = RadioSettingGroup("top", "All Settings")
+ freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
+ top = RadioSettingGroup("top", "All Settings", freqranges)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(self._memobj.settings.menu_available))
- group.append(rs)
+ top.append(rs)
- return group
+ rs = RadioSetting("vhf_rx_start", "vhf rx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_rx_stop", "vhf rx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_start", "uhf rx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_stop", "uhf rx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_start", "vhf tx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_stop", "vhf tx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_tx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_start", "uhf tx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_stop", "uhf tx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_tx_stop)))
+ freqranges.append(rs)
+
+ return top
def set_settings(self, settings):
for element in settings:
if not isinstance(element, RadioSetting):
- self.set_settings(element)
- continue
+ if element.get_shortname() != "freqranges" :
+ # frequency ranges are read only
+ self.set_settings(element)
+ continue
try:
setattr(self._memobj.settings, element.get_name(), element.value)
except Exception, e:
@@ -474,6 +548,18 @@
menu_available:1;
} settings;
+ #seekto 0x0ff0;
+ struct {
+ u16 vhf_rx_start;
+ u16 vhf_rx_stop;
+ u16 uhf_rx_start;
+ u16 uhf_rx_stop;
+ u16 vhf_tx_start;
+ u16 vhf_tx_stop;
+ u16 uhf_tx_start;
+ u16 uhf_tx_stop;
+ } freq_ranges;
+
#seekto 0x1008;
struct {
u8 unknown[8];
@@ -490,32 +576,65 @@
return rf
def get_settings(self):
- group = RadioSettingGroup("top", "All Settings")
+ freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
+ top = RadioSettingGroup("top", "All Settings", freqranges)
rs = RadioSetting("menu_available", "Menu Available",
RadioSettingValueBoolean(self._memobj.settings.menu_available))
- group.append(rs)
+ top.append(rs)
rs = RadioSetting("beep", "Beep",
RadioSettingValueBoolean(self._memobj.settings.beep))
- group.append(rs)
+ top.append(rs)
options = ["Off", "Welcome", "V bat"]
rs = RadioSetting("ponmsg", "PONMSG",
RadioSettingValueList(options,
options[self._memobj.settings.ponmsg]))
- group.append(rs)
+ top.append(rs)
options = ["Off", "Chinese", "English"]
rs = RadioSetting("voice", "Voice",
RadioSettingValueList(options,
options[self._memobj.settings.voice]))
- group.append(rs)
+ top.append(rs)
options = ["CH A", "CH B"]
rs = RadioSetting("sos_ch", "SOS CH",
RadioSettingValueList(options,
options[self._memobj.settings.sos_ch]))
- group.append(rs)
+ top.append(rs)
+ rs = RadioSetting("vhf_rx_start", "vhf rx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_rx_stop", "vhf rx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_start", "uhf rx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_stop", "uhf rx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_start", "vhf tx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_stop", "vhf_tx_stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.vhf_tx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_start", "uhf tx start",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_stop", "uhf tx stop",
+ RadioSettingValueInteger(0, 700,
+ decode_freq(self._memobj.freq_ranges.uhf_tx_stop)))
+ freqranges.append(rs)
- return group
+ return top
def set_settings(self, settings):
for element in settings:
More information about the chirp_devel
mailing list