[chirp_devel] [PATCH] [KG816] Initial support - still experimental
Marco Filippi IZ3GME
Sun Oct 14 11:57:45 PDT 2012
# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1350240956 -7200
# Node ID 9bc54b04aade4c837fe6341ddb0a61d475945e25
# Parent 3ad553c1b546c38efee6a35e02938dce74a38427
[KG816] Initial support - still experimental
First implementation of issue #320
diff --git a/chirp/wouxun.py b/chirp/wouxun.py
--- a/chirp/wouxun.py
+++ b/chirp/wouxun.py
@@ -463,8 +463,10 @@
# New-style image (CHIRP 0.1.12)
if len(filedata) == 8192 and \
filedata[0x60:0x64] != "2009" and \
- filedata[0x1f77:0x1f7d] == "\xff\xff\xff\xff\xff\xff":
- # that area is (seems to be) unused
+ filedata[0x1f77:0x1f7d] == "\xff\xff\xff\xff\xff\xff" and \
+ filedata[0x0d70:0x0d80] == "\xff\xff\xff\xff\xff\xff\xff\xff" \
+ "\xff\xff\xff\xff\xff\xff\xff\xff":
+ # those areas are (seems to be) unused
return True
# Old-style image (CHIRP 0.1.11)
if len(filedata) == 8200 and \
@@ -572,3 +574,123 @@
filedata[0x1f77:0x1f7d] == "WELCOM":
return True
return False
+
+ at directory.register
+class KG816Radio(KGUVD1PRadio,
+ chirp_common.ExperimentalRadio):
+ """Wouxun KG816"""
+ MODEL = "KG816"
+
+ _MEM_FORMAT = """
+ #seekto 0x0010;
+ struct {
+ lbcd rx_freq[4];
+ lbcd tx_freq[4];
+ ul16 rx_tone;
+ ul16 tx_tone;
+ u8 _3_unknown_1:4,
+ bcl:1,
+ _3_unknown_2:3;
+ u8 splitdup:1,
+ skip:1,
+ power_high:1,
+ iswide:1,
+ _2_unknown_2:4;
+ u8 unknown[2];
+ } memory[199];
+
+ #seekto 0x0d70;
+ 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];
+ u8 name[6];
+ u8 pad[2];
+ } names[199];
+ """
+
+ @classmethod
+ def get_experimental_warning(cls):
+ return ('We have not that much information on this model '
+ 'up to now we only know it has the same memory '
+ 'organization of KGUVD1 but uses 199 memories. '
+ 'it has been reported to work but '
+ 'proceed at your own risk!')
+
+ def get_features(self):
+ rf = KGUVD1PRadio.get_features(self)
+ rf.memory_bounds = (1, 199) # this is the only known difference
+ return rf
+
+ def get_settings(self):
+ freqranges = RadioSettingGroup("freqranges", "Freq ranges (read only)")
+ top = RadioSettingGroup("top", "All Settings", freqranges)
+
+ rs = RadioSetting("vhf_rx_start", "vhf rx start",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_rx_stop", "vhf rx stop",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_start", "uhf rx start",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_rx_stop", "uhf rx stop",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_rx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_start", "vhf tx start",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("vhf_tx_stop", "vhf tx stop",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.vhf_tx_stop)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_start", "uhf tx start",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_start)))
+ freqranges.append(rs)
+ rs = RadioSetting("uhf_tx_stop", "uhf tx stop",
+ RadioSettingValueInteger(136, 520,
+ decode_freq(
+ self._memobj.freq_ranges.uhf_tx_stop)))
+ freqranges.append(rs)
+
+ # tell the decoded ranges to UI
+ self.valid_freq = [
+ ( decode_freq(self._memobj.freq_ranges.vhf_rx_start) * 1000000,
+ (decode_freq(self._memobj.freq_ranges.vhf_rx_stop)+1) * 1000000)]
+
+ return top
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ if len(filedata) == 8192 and \
+ filedata[0x60:0x64] != "2009" and \
+ filedata[0x1f77:0x1f7d] == "\xff\xff\xff\xff\xff\xff" and \
+ filedata[0x0d70:0x0d80] != "\xff\xff\xff\xff\xff\xff\xff\xff" \
+ "\xff\xff\xff\xff\xff\xff\xff\xff":
+ return True
+ return False
+
diff --git a/tests/images/Wouxun_KG816.img b/tests/images/Wouxun_KG816.img
new file mode 100644
index 0000000000000000000000000000000000000000..090e18d5f3a084671fe7b738efae97824273b450
GIT binary patch
literal 8192
zc%1E*KaAT{9LJySB=*ZSZqAo~#ksqx$mkXj6(9?V%^eYXV(7$BdFoiGtf)C?RSC}R
z);4zoAhiMtEds>CpA94yCKwS5d#8c~LTusZ92bB6Jvvo)f-1l2o$}4c?|omKm+#M=
zPOGKVl|-o^DPHf$FzJoNq&?9$?VTB)2=9yj!rA3p!rP+1+~v{LL`5s}`AS`v>${~k
zvc3s`%k^rdT;It0reFF8*Af$SN}XR#OkQ07V{NA6D~XAN`F at mnOXh1>|4mun1Ap-|
zE3p2ytUnNa&))q!xqO~w_`LZ)pLcJ68%Z(d>t!dCVw8S2<oX_PnV&6#-V)u0^{>hG
z<>yn8 at CbM&`_15f8d={I>pxN7nI3#8rIKQl_e&+kDEBKo0v-#Gfg9llcq%*vo(a!@
z=fZQ~%1Vk+`ddjcN`K)I at K|^Z+z2<oQ{gG_On3%77oG!Gc2bPe-%g5A`U{VM$HHUa
zMz{f<3QvJ&!ZYBx at Eo{ul46uv&Y#+V{cI$~DEA{g0v-#Gfz$alsqhrfv+%6cQRB?1
zV(jT`aOPAo=KQ4alfV<<3GmaxPXj+I{4DUx!Y>1#2%nT%Mb9V2DEI$dQj9(QsMWqa
zF_H(S4c`~#?L1HR&X4fC4d<oEuQJa}Ao&(R9!0{VWjHUwW8g-(0Y1;if6q6Q3(tXb
zKM5qS1IYhKcm#Z3o>%*YNrk5{KNFq-&xPj??k^^g{t-Z)Qok~>@EG%!`b8={1y1?Q
z{fYCP`<aS_N5Es at F>oW?08fRdz%$_)_DA74aO%G%xGw(Ck0ap`@K|_^{aUyIo(fNa
zXTme!x$qn~^+OZL^F#psF%ljDkA=s;so(8;9?67fFh3Wb!+d^T2`1v-2Y=xaJa5Fp
zW8nNek_u0OXTme!x$qpg+7|!81D`ikBs>Bh3y%ljFWi)RQHwgvQbzi(f&NSV>0xX4
z_pm+teb)Zk>u+0geb}|Vee2d_a{cCwci(=e)i~m5t(r~uvyVQ#d-ucJpMUV)H(x#V
z<ge|{)6f3)`=2kp`0^|Fr}w9S%>J!Rm#1sfOQY=TZ_h`!@A&7(7dJ<*@%o#i%|4D#
z?))MbzAzq-E{xBQMkBud=jG8 at -X4EEn!LKXG8(zfbFaT~Df#Kb#dGrZ%J_h9N6mID
z%Tlhglr8 at aP?qBqf9tlgX5 at XP>PmfQslBpP at wzp8?S8MU1K!_%pwvC}gY}s8%<T2f
z?)d*!Yt0`Hebm9Q54;`v>pr~E3i`utr_}3#AL4{1KWw`&|F}Q&yP$i`5arCT33_R;
z8a83QPUs)S1^lqn?LS`X(C-b8EW`Q(zu(6F_tyM=3piXm<IPpyQq}$7{{3#h(^~>Q
zXtx94VRN;O_p8|*w!)*}*F1r at Z`v8iilBSFK?`pG^!VDbV}1zx3)h?7)#;&Ct at ypG
zs<!N^w(C{xxK&-J`3;)y(tNKv-y(mD{4Mgg$loG=i~KF}x5(cnf1CVm^0&#~CV!j!
zZSuFt->LfB9_#9UY_GZ>+pF%!_UbghLGy7x$9iEU!$sSq9nv+ at b<z#eE@=;S$3KB`
z8d??mN3J+eYL3^aeqUar`h9tg>iO{+)$`-I)$`)H)$`)H)$`)H4$UWjm;7Dwcgdg5
zt4HV6qx0&~dG+YLdURerkNiFI*W|CsUz5Kke@*_H{5AROs=ucE)Rdo^@>5fOYRXSd
z`Kc*CHRY$K{M3}6n(|Xqern23P5G%QKQ-m2ru@{DpPKShQ+{g7Pfhu$DL*ykr>6YW
z4*5Ie?~uPk{to#&<nNGwjr?omUnBn-`Pa~YQHwgv;{MD1>0!%OZUY07^`aKFsDrD&
E0e{M*+W-In
More information about the chirp_devel
mailing list