From 7e9eae46c6843ab2a67ee93308595f3f56ffde82 Mon Sep 17 00:00:00 2001 From: Vincent Stipo Date: Mon, 3 Dec 2018 08:31:11 -0800 Subject: [PATCH] [FT818] New Model Support Yaesu FT-818 #5607 --- chirp/drivers/ft818.py | 252 ++++++++++++++++++++++++++++++++++ tests/images/Yaesu_FT-818.img | Bin 0 -> 6730 bytes tools/cpep8.manifest | 1 + 3 files changed, 253 insertions(+) create mode 100755 chirp/drivers/ft818.py create mode 100644 tests/images/Yaesu_FT-818.img diff --git a/chirp/drivers/ft818.py b/chirp/drivers/ft818.py new file mode 100755 index 00000000..21ab3afe --- /dev/null +++ b/chirp/drivers/ft818.py @@ -0,0 +1,252 @@ +# +# Copyright 2012 Filippi Marco +# Copyright 2018 Vinny Stipo +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +"""FT818 management module""" + +from chirp.drivers import ft817 +from chirp import chirp_common, errors, directory +from chirp.settings import RadioSetting, RadioSettingGroup, \ + RadioSettingValueInteger, RadioSettingValueList, \ + RadioSettingValueBoolean, RadioSettingValueString, \ + RadioSettings +import os +import logging +from textwrap import dedent +from chirp.util import safe_charset_string + +LOG = logging.getLogger(__name__) + + +@directory.register +class FT818Radio(ft817.FT817Radio): + + """Yaesu FT-818""" + BAUD_RATE = 9600 + MODEL = "FT-818" + _model = "" + _memsize = 6573 + _block_lengths = [2, 40, 208, 208, 208, 208, 198, 53, 130, 118, 130] + + MEM_FORMAT = """ + struct mem_struct { + u8 tag_on_off:1, + tag_default:1, + unknown1:3, + mode:3; + u8 duplex:2, + is_duplex:1, + is_cwdig_narrow:1, + is_fm_narrow:1, + freq_range:3; + u8 skip:1, + unknown2:1, + ipo:1, + att:1, + unknown3:4; + u8 ssb_step:2, + am_step:3, + fm_step:3; + u8 unknown4:6, + tmode:2; + u8 unknown5:2, + tx_mode:3, + tx_freq_range:3; + u8 unknown6:1, + unknown_toneflag:1, + tone:6; + u8 unknown7:1, + dcs:7; + ul16 rit; + u32 freq; + u32 offset; + u8 name[8]; + }; + + #seekto 0x4; + struct { + u8 fst:1, + lock:1, + nb:1, + pbt:1, + unknownb:1, + dsp:1, + agc:2; + u8 vox:1, + vlt:1, + bk:1, + kyr:1, + unknown5:1, + cw_paddle:1, + pwr_meter_mode:2; + u8 vfob_band_select:4, + vfoa_band_select:4; + u8 unknowna; + u8 backlight:2, + color:2, + contrast:4; + u8 beep_freq:1, + beep_volume:7; + u8 arts_beep:2, + main_step:1, + cw_id:1, + scope:1, + pkt_rate:1, + resume_scan:2; + u8 op_filter:2, + lock_mode:2, + cw_pitch:4; + u8 sql_rf_gain:1, + ars_144:1, + ars_430:1, + cw_weight:5; + u8 cw_delay; + u8 unknown8:1, + sidetone:7; + u8 batt_chg:2, + cw_speed:6; + u8 disable_amfm_dial:1, + vox_gain:7; + u8 cat_rate:2, + emergency:1, + vox_delay:5; + u8 dig_mode:3, + mem_group:1, + unknown9:1, + apo_time:3; + u8 dcs_inv:2, + unknown10:1, + tot_time:5; + u8 mic_scan:1, + ssb_mic:7; + u8 mic_key:1, + am_mic:7; + u8 unknown11:1, + fm_mic:7; + u8 unknown12:1, + dig_mic:7; + u8 extended_menu:1, + pkt_mic:7; + u8 unknown14:1, + pkt9600_mic:7; + il16 dig_shift; + il16 dig_disp; + i8 r_lsb_car; + i8 r_usb_car; + i8 t_lsb_car; + i8 t_usb_car; + u8 unknown15:2, + menu_item:6; + u8 unknown16:4, + menu_sel:4; + u16 unknown17; + u8 art:1, + scn_mode:2, + dw:1, + pri:1, + unknown18:1, + tx_power:2; + u8 spl:1, + unknown:1, + uhf_antenna:1, + vhf_antenna:1, + air_antenna:1, + bc_antenna:1, + sixm_antenna:1, + hf_antenna:1; + } settings; + + #seekto 0x2A; + struct mem_struct vfoa[16]; + struct mem_struct vfob[16]; + struct mem_struct home[4]; + struct mem_struct qmb; + struct mem_struct mtqmb; + struct mem_struct mtune; + + #seekto 0x431; + u8 visible[25]; + u8 pmsvisible; + + #seekto 0x44B; + u8 filled[25]; + u8 pmsfilled; + + #seekto 0x465; + struct mem_struct memory[200]; + struct mem_struct pms[2]; + + #seekto 0x1903; + u8 callsign[7]; + + #seekto 0x19AD; + struct mem_struct sixtymeterchannels[5]; + """ + + SPECIAL_MEMORIES = { + "VFOa-1.8M": -37, + "VFOa-3.5M": -36, + "VFOa-5M": -35, + "VFOa-7M": -34, + "VFOa-10M": -33, + "VFOa-14M": -32, + "VFOa-18M": -31, + "VFOa-21M": -30, + "VFOa-24M": -29, + "VFOa-28M": -28, + "VFOa-50M": -27, + "VFOa-FM": -26, + "VFOa-AIR": -25, + "VFOa-144": -24, + "VFOa-430": -23, + "VFOa-HF": -22, + "VFOb-1.8M": -21, + "VFOb-3.5M": -20, + "VFOb-5M": -19, + "VFOb-7M": -18, + "VFOb-10M": -17, + "VFOb-14M": -16, + "VFOb-18M": -15, + "VFOb-21M": -14, + "VFOb-24M": -13, + "VFOb-28M": -12, + "VFOb-50M": -11, + "VFOb-FM": -10, + "VFOb-AIR": -9, + "VFOb-144M": -8, + "VFOb-430M": -7, + "VFOb-HF": -6, + "HOME HF": -5, + "HOME 50M": -4, + "HOME 144M": -3, + "HOME 430M": -2, + "QMB": -1, + } + FIRST_VFOB_INDEX = -6 + LAST_VFOB_INDEX = -21 + FIRST_VFOA_INDEX = -22 + LAST_VFOA_INDEX = -37 + + SPECIAL_PMS = { + "PMS-L": -39, + "PMS-U": -38, + } + LAST_PMS_INDEX = -39 + + SPECIAL_MEMORIES.update(SPECIAL_PMS) + + SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(), + SPECIAL_MEMORIES.keys())) diff --git a/tests/images/Yaesu_FT-818.img b/tests/images/Yaesu_FT-818.img new file mode 100644 index 0000000000000000000000000000000000000000..59b6e62681e131d4fee9f5c83518637a7753cc57 GIT binary patch literal 6730 zcmcJUe{7Xk8OPsVU{nytWCIDPjX@90l|OqPVLHW`RX^CNqhwCImzv+M%>5EE;i`;+YpczftmQwxxF zW3VynSPEK}x7h1gWYb`I0kZkW<2G@dq8JqXcBkp^go!~W;gocA4(A;H7?NJ(_?n#j z4S9=6W^v@L@sF1s=P&)nCP`Un;(zKSo?o-qS^Aw8Lx$pruKrWM9Rn+F|3iMvI^^19 zTj$3RYn}f~e#|;|=jR?o=f{w{^JD7ZzsZjq=jV?aZa6djx;&%r4TyTzmn!{geq0)AjOA3HZYl9^GzmxR@JI~ zM26VrL6H69uyK{wl{4gikTGgp@|IR^ST^MSAct?mTT11tfgx)x5~^Yu3aoXGPQjZ> zS6tQxvH~_j0_C!aCMzxCrvUD(bwq&>QeBuIx9bhI2~;sd&UDA z8;U^*I|V_7Xc8t>rHdp;U1L8nk-E0Lz4a8l(SC}wRk4AB8$!ricakd}HptJ7ziold zj+{q{YdLh2x@3!}-qhjDwhd7wb`~f>u-USP_cOC(3On7A$5yR%bVLJ{rP?*?pi4}w zmG2_k@lIzx{tI{`)ty}NAPKC~`8Kp=RbL@VWQaQ$(V2Pi2uNC`(-dtXAB4@%+eKS4 z8)spaO{f=g98q{fUC;b-J-lU9cbU>)uOq}ws$yIro8ax`e`*D8mTjOKJH2t|CWuOP zaFL2PQ6M&f$``$eV7kl*p-SxN(_ODS%Mh*uy;DQ3q2faogp^XOGmp5cSgjca61SUs zpsh7uj_VrLJ0pbVsMT|*gNVfIG&$&!ncFS!mQuA&t~W#!HEM{byeb9Gj`hE;Np!mU zx}z9~wtEqYj*w90dFQD$C!jF8^m3YUeGqAEg4TSAs;4}Y*Wq0su7*W#_K}-XpS~Hn2C+eKN6C% zv|(O1)Bz@bMrFIBoT7s@p%`Sc6dx-KjpRpRqdGJ3$%Ke%Vn(vcOPGLlnG=0sE~@df&eV-WPv1x0%k^6j^>moQb2*!=qXG~ zU!_xBkqrxQ8s{d&TQM^~Ixnq+H&>PT>L9A64usIT(AmKg7VAj8{q9$yAW6R`GR(7= z z6it6aQmW)f=K@sE4y46fMxq0o2RJ&jd*2aKD8zFIu{I>BxaqYv@%GGR*-vM7-n5+k zhIBB^oq)Rp>&Q+u2^FVw&Q9yc+1uRdk9wOG5~`#Zp9`qo*&h@{b*dDfKfE2skc`T8 zlWtLfoN7XoJdJLIHq1n0qcRn`@@X5XH$5%q5S(VSR~Czcd^MgSqD_-5jpZl?RA{8_ z*FQzv=yWdg&HEH*j@L;{gd6z*5z-x&hM2A@)|Qyub&-jm+Fr_$?88)VGD8xR-)&_Q zs9X*eAA38!;W^mkl<)H?gBs=OlBlmc29i{z8c%-^D5yUIZ@#C}T-ZW53yFHAoo(nw zEM0He94v#Fh~9(flL=%gyuAW%zVegE0tn|PQ8y%+#{B?#>GbW0?2A6lPjh`k}6r_Q^s0H+vJs;!5}gZ zghY2f5ahJ}cOAD5Zf)(2t140dcMGpWXJZK!4;!AAQ60D{*UPmNuM<^>s``B60^yU% z*aWIl#zX?)ZcI#$%1-G$myK*t2WK93u+y|E_eMKK9cV)5X|_fsFYBPHV&YY~=dg}= zd;EYzRL^S=#Nf;@6ol!WDSk?bjgXhxVUtrGU3}+*4WA{6GjE9Mq{_Q|YJ#9b&OXo& z8=8D&8e>8bQA0BHY~u+F8{|im=sX31>WJv~90+1yyqS3b!o8h1`&rSZN<8@VIs_s@ zXGzA7v@NrVd27O(?B}TLhq7IXREq*3)b$0N3zq7?-bM_lgZrYcNA;c?K)w0Ca&do) zZO(oF9{J&WeByiSufiMM@GDVHu^&wW6%^-rJO6dqgoq$hjjuK*5Wf5_k-!NvOZ<3?`nj6tDi~q zs-&K!6mbuMH>{)I!SuZg9~e4rsOzW>?0X^;r!nsaiJfu`5@-H!k#`!XLN6VF zErKmj&_`OZz-`3VfIVEl0PWfI8+StY^zcS9+sDFxSIvfvyaL+mA*P(ju zeP<<;Mk{VyWK+%Zy%+mIm(;)7!qG9_7W}61U4Zp<^3pes+FzVMxca^|%hqmmoTvG} zI+|EX^tC&Fpg-8L<)Qf_S8WeA`50{_{;v_6Y~8#NX?txU^2w@AoIAVrjC|q1t&x4Z zou=V~`LhHr2qf` literal 0 HcmV?d00001 diff --git a/tools/cpep8.manifest b/tools/cpep8.manifest index 89954c63..e17ed894 100644 --- a/tools/cpep8.manifest +++ b/tools/cpep8.manifest @@ -24,6 +24,7 @@ ./chirp/drivers/ft60.py ./chirp/drivers/ft7800.py ./chirp/drivers/ft817.py +./chirp/drivers/ft818.py ./chirp/drivers/ft857.py ./chirp/drivers/ft90.py ./chirp/drivers/ftm350.py