[chirp_devel] [PATCH 1 of 1] [ft857] Add settings support

Marco Filippi IZ3GME
Thu Apr 4 02:14:20 PDT 2013


# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1365065994 -7200
# Node ID 95e92b683b9cbab04193e673a6315721e20f0c55
# Parent  69e2514f8f1e4154c50591b788e7494f2ef40a78
[ft857] Add settings support
not complete yet, still missing a few settings (see TODO comments)
and all panel settings
Implements part of #569

diff --git a/chirp/ft857.py b/chirp/ft857.py
--- a/chirp/ft857.py
+++ b/chirp/ft857.py
@@ -17,6 +17,10 @@
 """FT857 - FT857/US management module"""
 
 from chirp import ft817, chirp_common, errors, directory
+from chirp.settings import RadioSetting, RadioSettingGroup, \
+    RadioSettingValueInteger, RadioSettingValueList, \
+    RadioSettingValueBoolean, RadioSettingValueString
+import os
 
 @directory.register
 class FT857Radio(ft817.FT817Radio):
@@ -97,6 +101,148 @@
         u8   name[8];
         };
         
+        #seekto 0x5;
+        struct {
+            u8  unknown1:4,
+                cw_speed_unit:1,
+                cw_key_rev:1,
+                unknown2:2;
+            u8  unknown3[2];
+            u8  disp_mode:2,
+                unknown4:2,
+                disp_contrast:4;
+            u8  unknown5:4,
+                clar_dial_sel:2,
+                beep_tone:2;
+            u8  arts_beep:2,
+                dial_step:1,
+                arts_id:1,
+                unknown6:1,
+                pkt_rate:1,
+                unknown7:2;
+            u8  unknown8:2,
+                lock_mode:2,
+                unknown9:1,
+                cw_pitch:3;
+            u8  sql_rf_gain:1,
+                ars_144:1,
+                ars_430:1,
+                cw_weight:5;
+            u8  cw_delay;
+            u8  cw_delay_hi:1
+                cw_sidetone:7;
+            u8  unknown10: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,
+                unknown11:1,
+                apo_time:3;
+            u8  dcs_inv:2,
+                unknown12:1,
+                tot_time:5;
+            u8  mic_scan:1,
+                ssb_mic:7;
+            u8  cw_paddle:1,
+                am_mic:7;
+            u8  unknown13:1,
+                fm_mic:7;
+            u8  unknown14:1,
+                dig_mic:7;
+            u8  extended_menu:1,
+                pkt1200:7;
+            u8  unknown15:1,
+                pkt9600:7;
+            ul16 dig_shift;
+            ul16 dig_disp;
+            u8  r_lsb_car;
+            u8  r_usb_car;
+            u8  t_lsb_car;
+            u8  t_usb_car;
+            u8  unknown16:1,
+                menu_item:7;
+            u8  unknown17[5];
+            u8  unknown18:1,
+                mtr_peak_hold:1,
+                mic_sel:2,
+                cat_lin_tun:2,
+                unknown19:1,
+                split_tone:1;
+            u8  unknown20:1,
+                beep_vol:7;
+            u8  unknown21:1,
+                dig_vox:7;
+            u8  ext_menu:1,
+                home_vfo:1,
+                scan_mode:2,
+                scan_resume:4;
+            u8  cw_auto_mode:1,
+                cw_training:2,
+                cw_qsk:3,
+                cw_bfo:2;
+            u8  dsp_nr:4,
+                dsp_bpf:2,
+                dsp_mic_eq:2;
+            u8  unknown22:3,
+                dsp_lpf:5;
+            u8  mtr_atx_sel:3,
+                unknown23:1,
+                dsp_hpf:4;
+            u8  unknown24:2,
+                disp_intensity:2,
+                unknown25:1,
+                disp_color:3;
+            u8  unknown26:1,
+                disp_color_vfo:1,
+                disp_color_mtr:1,
+                disp_color_mode:1,
+                disp_color_memgrp:1,
+                unknown27:1,
+                disp_color_band:1,
+                disp_color_arts:1;
+            u8  unknown28:3,
+                disp_color_fix:5;
+            u8  unknown29:1,
+                nb_level:7;
+            u8  unknown30:1,
+                proc_level:7;
+            u8  unknown31:1,
+                rf_power_hf:7;
+            u8  unknown32:2,
+                tuner_atas:3,
+                mem_vfo_dial_mode:3;
+            u8  pg_a;
+            u8  pg_b;
+            u8  pg_c;
+            u8  pg_acc;
+            u8  pg_p1;
+            u8  pg_p2;
+            u8  unknown33:3,
+                xvtr_sel:2,
+                unknown33_1:2,
+                op_filter1:1;
+            u8  unknown34:6,
+                tx_if_filter:2;
+            u8  unknown35:3,
+                xvtr_a_negative:1,
+                xvtr_b_negative:1,
+                mtr_arx_sel:3;
+            u8  beacon_time;
+            u8  unknown36[2];
+            u8  dig_vox_enable:1,
+                unknown37:7;
+            u8  unknown39:1,
+                rf_power_6m:7;
+            u8  unknown40:1,
+                rf_power_vhf:7;
+            u8  unknown41:1,
+                rf_power_uhf:7;
+        } settings;
+
         #seekto 0x54;
         struct mem_struct vfoa[16];
         struct mem_struct vfob[16];
@@ -117,11 +263,25 @@
         struct mem_struct memory[200];
         struct mem_struct pms[10];
         
+        #seekto 0x1bf3;
+        u8 arts_idw[10];
+        u8 beacon_text1[40];
+        u8 beacon_text2[40];
+        u8 beacon_text3[40];
+
         #seekto 0x1CAD;
         struct mem_struct sixtymeterchannels[5];
     
     """
 
+    _CALLSIGN_CHARSET = [chr(x) for x in range(ord("0"), ord("9")+1) +
+                           range(ord("A"), ord("Z")+1)] + [" ", "/"]
+    _CALLSIGN_CHARSET_REV = dict(zip(_CALLSIGN_CHARSET,
+                                    range(0,len(_CALLSIGN_CHARSET))))
+    _BEACON_CHARSET =  _CALLSIGN_CHARSET + ["+", "."]
+    _BEACON_CHARSET_REV = dict(zip(_BEACON_CHARSET,
+                                    range(0,len(_BEACON_CHARSET))))
+
     # WARNING Index are hard wired in memory management code !!!
     SPECIAL_MEMORIES = {
         "VFOa-1.8M" : -37,
@@ -186,6 +346,55 @@
     SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(),
                                     SPECIAL_MEMORIES.keys()))
 
+    FILTERS  = [ "CFIL", "FIL1", "FIL2" ]
+    PROGRAMMABLEOPTIONS = [
+        "MFa:A/B",              "MFa:A=B",          "MFa:SPL",
+        "MFb:MW",               "MFb:SKIP/MCLR",    "MFb:TAG",
+        "MFc:STO",              "MFc:RCL",          "MFc:PROC",
+        "MFd:RPT",              "MFd:REV",          "MFd:VOX",
+        "MFe:TON/ENC",          "MFe:TON/DEC",      "MFe:TDCH",   
+        "MFf:ARTS",             "MFf:SRCH",         "MFf:PMS",
+        "MFg:SCN",              "MFg:PRI",          "MFg:DW",     
+        "MFh:SCOP",             "MFh:WID",          "MFh:STEP",
+        "MFi:MTR",              "MFi:SWR",          "MFi:DISP",   
+        "MFj:SPOT",             "MFj:BK",           "MFj:KYR",
+        "MFk:TUNE",             "MFk:DOWN",         "MFk:UP",     
+        "MFl:NB",               "MFl:AGC",          "MFl:AGC SEL",
+        "MFm:IPO",              "MFm:ATT",          "MFm:NAR",    
+        "MFn:CFIL",             "MFn:FIL1",         "MFn:FIL2",
+        "MFo:PLY1",             "MFo:PLY2",         "MFo:PLY3",   
+        "MFp:DNR",              "MFp:DNF",          "MFp:DBF",
+        "01:EXT MENU",          "02:144MHz ARS",    "03:430MHz ARS",     
+        "04:AM&FM DIAL",        "05:AM MIC GAIN",   "06:AM STEP",        
+        "07:APO TIME",          "08:ARTS BEEP",     "09:ARTS ID",          
+        "10:ARTS IDW",          "11:BEACON TEXT",   "12:BEACON TIME",
+        "13:BEEP TONE",         "14:BEEP VOL",      "15:CAR LSB R",     
+        "16:CAR LSB T",         "17:CAR USB R",     "18:CAR USB T",
+        "19:CAT RATE",          "20:CAT/LIN/TUN",   "21:CLAR DIAL SEL",
+        "22:CW AUTO MODE",      "23:CW BFO",        "24:CW DELAY",
+        "25:CW KEY REV",        "26:CW PADDLE",     "27:CW PITCH",      
+        "28:CW QSK",            "29:CW SIDE TONE",  "30:CW SPEED",
+        "31:CW TRAINING",       "32:CW WEIGHT",     "33:DCS CODE",
+        "34:DCS INV",           "35:DIAL STEP",     "36:DIG DISP",
+        "37:DIG GAIN",          "38:DIG MODE",      "39:DIG SHIFT",      
+        "40:DIG VOX",           "41:DISP COLOR",    "42:DISP CONTRAST",
+        "43:DISP INTENSITY",    "44:DISP MODE",     "45:DSP BPF WIDTH",
+        "46:DSP HPF CUTOFF",    "47:DSP LPF CUTOFF","48:DSP MIC EQ",
+        "49:DSP NR LEVEL",      "50:EMERGENCY",     "51:FM MIC GAIN",   
+        "52:FM STEP",           "53:HOME->VFO",     "54:LOCK MODE",
+        "55:MEM GROUP",         "56:MEM TAG",       "57:MEM/VFO DIAL MODE",
+        "58:MIC SCAN",          "59:MIC SEL",       "60:MTR ARX",
+        "61:MTR ATX",           "62:MTR PEAK HOLD", "63:NB LEVEL",
+        "64:OP FILTER",         "71:PKT 1200",      "72:PKT 9600",
+        "73:PKT RATE",          "74:PROC LEVEL",    "75:RF POWER SET",
+        "76:RPT SHIFT",         "77:SCAN MODE",     "78:SCAN RESUME",
+        "79:SPLIT TONE",        "80:SQL/RF GAIN",   "81:SSB MIC GAIN",
+        "82:SSB STEP",          "83:TONE FREQ",     "84:TX TIME",
+        "85:TUNER/ATAS",        "86:TX IF FILTER",  "87:VOX DELAY",
+        "88:VOX GAIN",          "89:XVTR A FREQ",   "90:XVTR B FREQ",
+        "91:XVTR SEL",
+        "MONI", "Q.SPL",  "TCALL",  "ATC",  "USER"]
+        
     def get_features(self):
         rf = ft817.FT817Radio.get_features(self)
         rf.has_cross = True
@@ -193,7 +402,6 @@
         rf.has_rx_dtcs = True
         rf.valid_tmodes = self.TMODES_REV.keys()
         rf.valid_cross_modes = self.CROSS_MODES_REV.keys()
-        rf.has_settings = False # not implemented yet
         return rf
 
     def _get_duplex(self, mem, _mem):
@@ -256,6 +464,447 @@
         # dunno if there's the same problem here but to be safe ...
         _mem.unknown_rxtoneflag = 0
 
+    def get_settings(self):
+        _settings = self._memobj.settings
+        basic = RadioSettingGroup("basic", "Basic")
+        cw = RadioSettingGroup("cw", "CW")
+        packet = RadioSettingGroup("packet", "Digital & packet")
+        panel = RadioSettingGroup("panel", "Panel settings")
+        extended = RadioSettingGroup("extended", "Extended")
+        antenna = RadioSettingGroup("antenna", "Antenna selection")
+        panelcontr = RadioSettingGroup("panelcontr", "Panel controls")
+        top = RadioSettingGroup("top", "All Settings", basic, cw, packet,
+                                panelcontr, panel, extended, antenna)
+
+        rs = RadioSetting("extended_menu", "Extended menu",
+                          RadioSettingValueBoolean(_settings.extended_menu))
+        extended.append(rs)
+        rs = RadioSetting("ars_144", "144MHz ARS",
+                          RadioSettingValueBoolean(_settings.ars_144))
+        basic.append(rs)
+        rs = RadioSetting("ars_430", "430MHz ARS",
+                          RadioSettingValueBoolean(_settings.ars_430))
+        basic.append(rs)
+        options = ["enable", "disable"]
+        rs = RadioSetting("disable_amfm_dial", "AM&FM Dial",
+                          RadioSettingValueList(options,
+                                        options[_settings.disable_amfm_dial]))
+        panel.append(rs)
+        rs = RadioSetting("am_mic", "AM mic gain",
+                          RadioSettingValueInteger(0, 100, _settings.am_mic))
+        basic.append(rs)
+        options = ["OFF", "1h", "2h", "3h", "4h", "5h", "6h"]
+        rs = RadioSetting("apo_time", "APO time",
+                          RadioSettingValueList(options,
+                                        options[_settings.apo_time]))
+        basic.append(rs)
+        options = ["OFF", "Range", "All"]
+        rs = RadioSetting("arts_beep", "ARTS beep",
+                          RadioSettingValueList(options,
+                                        options[_settings.arts_beep]))
+        basic.append(rs)
+        rs = RadioSetting("arts_id", "ARTS ID",
+                          RadioSettingValueBoolean(_settings.arts_id))
+        extended.append(rs)
+        s = RadioSettingValueString(0, 10, 
+                            ''.join([self._CALLSIGN_CHARSET[x] for x in 
+                                        self._memobj.arts_idw]))
+        s.set_charset(self._CALLSIGN_CHARSET)
+        rs = RadioSetting("arts_idw", "ARTS IDW", s)
+        extended.append(rs)
+        s = RadioSettingValueString(0, 40, 
+                            ''.join([self._BEACON_CHARSET[x] for x in 
+                                        self._memobj.beacon_text1]))
+        s.set_charset(self._BEACON_CHARSET)
+        rs = RadioSetting("beacon_text1", "Beacon text1", s)
+        extended.append(rs)
+        s = RadioSettingValueString(0, 40, 
+                            ''.join([self._BEACON_CHARSET[x] for x in 
+                                        self._memobj.beacon_text2]))
+        s.set_charset(self._BEACON_CHARSET)
+        rs = RadioSetting("beacon_text2", "Beacon text2", s)
+        extended.append(rs)
+        s = RadioSettingValueString(0, 40, 
+                            ''.join([self._BEACON_CHARSET[x] for x in 
+                                        self._memobj.beacon_text3]))
+        s.set_charset(self._BEACON_CHARSET)
+        rs = RadioSetting("beacon_text3", "Beacon text3", s)
+        extended.append(rs)
+        options = ["OFF"]+["%i sec" % i for i in range(1,256)]
+        rs = RadioSetting("beacon_time", "Beacon time",
+                          RadioSettingValueList(options,
+                                        options[_settings.beacon_time]))
+        extended.append(rs)
+        options = ["440Hz", "880Hz", "1760Hz"]
+        rs = RadioSetting("beep_tone", "Beep tone",
+                          RadioSettingValueList(options,
+                                        options[_settings.beep_tone]))
+        panel.append(rs)
+        rs = RadioSetting("beep_vol", "Beep volume",
+                          RadioSettingValueInteger(0, 100, _settings.beep_vol))
+        panel.append(rs)
+        rs = RadioSetting("r_lsb_car", "LSB Rx carrier point (*10 Hz)",
+                          RadioSettingValueInteger(-30, 30, _settings.r_lsb_car))
+        extended.append(rs)
+        rs = RadioSetting("r_usb_car", "USB Rx carrier point (*10 Hz)",
+                          RadioSettingValueInteger(-30, 30, _settings.r_usb_car))
+        extended.append(rs)
+        rs = RadioSetting("t_lsb_car", "LSB Tx carrier point (*10 Hz)",
+                          RadioSettingValueInteger(-30, 30, _settings.t_lsb_car))
+        extended.append(rs)
+        rs = RadioSetting("t_usb_car", "USB Tx carrier point (*10 Hz)",
+                          RadioSettingValueInteger(-30, 30, _settings.t_usb_car))
+        extended.append(rs)
+        options = ["4800", "9600", "38400"]
+        rs = RadioSetting("cat_rate", "CAT rate",
+                          RadioSettingValueList(options,
+                                        options[_settings.cat_rate]))
+        basic.append(rs)
+        options = ["CAT", "Linear", "Tuner"]
+        rs = RadioSetting("cat_lin_tun", "CAT/LIN/TUN selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.cat_lin_tun]))
+        extended.append(rs)
+        options = ["MAIN", "VFO/MEM", "CLAR"]   # TODO test the 3 options on non D radio
+                                                # which have only SEL and MAIN
+        rs = RadioSetting("clar_dial_sel", "Clarifier dial selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.clar_dial_sel]))
+        panel.append(rs)
+        rs = RadioSetting("cw_auto_mode", "CW Automatic mode",
+                          RadioSettingValueBoolean(_settings.cw_auto_mode))
+        cw.append(rs)
+        options = ["USB", "LSB", "AUTO"]
+        rs = RadioSetting("cw_bfo", "CW BFO",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_bfo]))
+        cw.append(rs)
+        options = ["FULL"]+["%i ms" % (i*10) for i in range(3,301)]
+        val = (_settings.cw_delay + _settings.cw_delay_hi * 256) - 2
+        rs = RadioSetting("cw_delay", "CW delay",
+                          RadioSettingValueList(options,
+                                        options[val]))
+        cw.append(rs)
+        options = ["Normal", "Reverse"]
+        rs = RadioSetting("cw_key_rev", "CW key reverse",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_key_rev]))
+        cw.append(rs)
+        rs = RadioSetting("cw_paddle", "CW paddle",
+                          RadioSettingValueBoolean(_settings.cw_paddle))
+        cw.append(rs)
+        options = ["%i Hz" % i for i in range(400,801,100)]
+        rs = RadioSetting("cw_pitch", "CW pitch",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_pitch]))
+        cw.append(rs)
+        options = ["%i ms" % i for i in range(5,31,5)]
+        rs = RadioSetting("cw_qsk", "CW QSK",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_qsk]))
+        cw.append(rs)
+        rs = RadioSetting("cw_sidetone", "CW sidetone volume",
+                          RadioSettingValueInteger(0, 100, _settings.cw_sidetone))
+        cw.append(rs)
+        options = ["%i wpm" % i for i in range(4,61)]
+        rs = RadioSetting("cw_speed", "CW speed",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_speed]))
+        cw.append(rs)
+        options = ["Numeric", "Alphabet", "AlphaNumeric"]
+        rs = RadioSetting("cw_training", "CW trainig",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_training]))
+        cw.append(rs)
+        options = ["1:%1.1f" % (i/10) for i in range(25,46,1)]
+        rs = RadioSetting("cw_weight", "CW weight",
+                          RadioSettingValueList(options,
+                                        options[_settings.cw_weight]))
+        cw.append(rs)
+        options = ["Tn-Rn", "Tn-Riv", "Tiv-Rn", "Tiv-Riv"]
+        rs = RadioSetting("dcs_inv", "DCS inv",
+                          RadioSettingValueList(options,
+                                        options[_settings.dcs_inv]))
+        extended.append(rs)
+        options = ["Fine", "Coarse"]
+        rs = RadioSetting("dial_step", "Dial step",
+                          RadioSettingValueList(options,
+                                        options[_settings.dial_step]))
+        panel.append(rs)
+        rs = RadioSetting("dig_disp", "Dig disp (*10 Hz)",
+                          RadioSettingValueInteger(-300, 300, _settings.dig_disp))
+        packet.append(rs)
+        rs = RadioSetting("dig_mic", "Dig gain",
+                          RadioSettingValueInteger(0, 100, _settings.dig_mic))
+        packet.append(rs)
+        options = ["RTTYL", "RTTYU", "PSK31-L", "PSK31-U", "USER-L", "USER-U"]
+        rs = RadioSetting("dig_mode", "Dig mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.dig_mode]))
+        packet.append(rs)
+        rs = RadioSetting("dig_shift", "Dig shift (*10 Hz)",
+                          RadioSettingValueInteger(-300, 300, _settings.dig_shift))
+        packet.append(rs)
+        rs = RadioSetting("dig_vox", "Dig vox",
+                          RadioSettingValueInteger(0, 100, _settings.dig_vox))
+        packet.append(rs)
+        options = ["ARTS", "BAND", "FIX", "MEMGRP", "MODE", "MTR", "VFO"]
+        rs = RadioSetting("disp_color", "Display color mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.disp_color]))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_arts", "Display color ARTS set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_arts))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_band", "Display color band set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_band))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_memgrp", "Display color memory group set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_memgrp))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_mode", "Display color mode set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_mode))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_mtr", "Display color meter set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_mtr))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_vfo", "Display color VFO set",
+                          RadioSettingValueInteger(0, 1,_settings.disp_color_vfo))
+        panel.append(rs)
+        rs = RadioSetting("disp_color_fix", "Display color fix set",
+                          RadioSettingValueInteger(1, 32,_settings.disp_color_fix-1)) 
+        panel.append(rs)
+        rs = RadioSetting("disp_contrast", "Contrast",
+                          RadioSettingValueInteger(3, 15,_settings.disp_contrast+2))
+        panel.append(rs)
+        rs = RadioSetting("disp_intensity", "Intensity",
+                          RadioSettingValueInteger(1, 3,_settings.disp_intensity))
+        panel.append(rs)
+        options = ["OFF", "Auto1", "Auto2", "ON"]
+        rs = RadioSetting("disp_mode", "Display backlight mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.disp_mode]))
+        panel.append(rs)
+        options = ["60Hz", "120Hz", "240Hz"]
+        rs = RadioSetting("dsp_bpf", "Dsp band pass filter",
+                          RadioSettingValueList(options,
+                                        options[_settings.dsp_bpf]))
+        cw.append(rs)
+        options = ["100Hz", "160Hz", "220Hz", "280Hz", "340Hz", "400Hz", "460Hz", "520Hz",
+            "580Hz", "640Hz", "720Hz", "760Hz", "820Hz", "880Hz", "940Hz", "1000Hz"]
+        rs = RadioSetting("dsp_hpf", "Dsp hi pass filter cut off",
+                          RadioSettingValueList(options,
+                                        options[_settings.dsp_hpf]))
+        basic.append(rs)
+        options = ["1000Hz", "1160Hz", "1320Hz", "1480Hz", "1650Hz", "1800Hz", "1970Hz", "2130Hz",
+            "2290Hz", "2450Hz", "2610Hz", "2770Hz", "2940Hz", "3100Hz", "3260Hz", "3420Hz",
+            "3580Hz", "3740Hz", "3900Hz", "4060Hz", "4230Hz", "4390Hz", "4550Hz", "4710Hz",
+            "4870Hz", "5030Hz", "5190Hz", "5390Hz", "5520Hz", "5680Hz", "5840Hz", "6000Hz"]
+        rs = RadioSetting("dsp_lpf", "Dsp low pass filter cut off",
+                          RadioSettingValueList(options,
+                                        options[_settings.dsp_lpf]))
+        basic.append(rs)
+        options = ["OFF", "LPF", "HPF", "BOTH"]
+        rs = RadioSetting("dsp_mic_eq", "Dsp mic equalization",
+                          RadioSettingValueList(options,
+                                        options[_settings.dsp_mic_eq]))
+        basic.append(rs)
+        rs = RadioSetting("dsp_nr", "DSP noise reduction level",
+                          RadioSettingValueInteger(1, 16, _settings.dsp_nr+1))
+        basic.append(rs)
+        # emergency only for US model
+        rs = RadioSetting("fm_mic", "FM mic gain",
+                          RadioSettingValueInteger(0, 100, _settings.fm_mic))
+        basic.append(rs)
+        rs = RadioSetting("home_vfo", "Enable HOME to VFO moving",
+                          RadioSettingValueBoolean(_settings.home_vfo))
+        panel.append(rs)
+        options = ["Dial", "Freq", "Panel", "All"]
+        rs = RadioSetting("lock_mode", "Lock mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.lock_mode]))
+        panel.append(rs)
+        rs = RadioSetting("mem_group", "Mem group",
+                          RadioSettingValueBoolean(_settings.mem_group))
+        basic.append(rs)
+        options = ["CW SIDETONE", "CW SPEED", "MHz/MEM GRP", "MIC GAIN",
+            "NB LEVEL", "RF POWER", "STEP"]
+        rs = RadioSetting("mem_vfo_dial_mode", "Mem/VFO dial mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.mem_vfo_dial_mode]))
+        panel.append(rs)
+        rs = RadioSetting("mic_scan", "Mic scan",
+                          RadioSettingValueBoolean(_settings.mic_scan))
+        basic.append(rs)
+        options = ["NOR", "RMT", "CAT"]
+        rs = RadioSetting("mic_sel", "Mic selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.mic_sel]))
+        extended.append(rs)
+        options = ["SIG", "CTR", "VLT", "N/A", "FS",  "OFF"]
+        rs = RadioSetting("mtr_arx_sel", "Meter receive selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.mtr_arx_sel]))
+        extended.append(rs)
+        options = ["PWR", "ALC", "MOD", "SWR", "VLT", "N/A", "OFF"]
+        rs = RadioSetting("mtr_atx_sel", "Meter transmit selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.mtr_atx_sel]))
+        extended.append(rs)
+        rs = RadioSetting("mtr_peak_hold", "Meter peak hold",
+                          RadioSettingValueBoolean(_settings.mtr_peak_hold))
+        extended.append(rs)
+        rs = RadioSetting("nb_level", "Noise blanking level",
+                          RadioSettingValueInteger(0, 100, _settings.nb_level))
+        basic.append(rs)
+        # TODO op_filter1
+        # TODO op_filter2
+        rs = RadioSetting("pg_a", "Programmable key MFq:A",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_a]))
+        extended.append(rs)
+        rs = RadioSetting("pg_b", "Programmable key MFq:B",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_b]))
+        extended.append(rs)
+        rs = RadioSetting("pg_c", "Programmable key MFq:C",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_c]))
+        extended.append(rs)
+        rs = RadioSetting("pg_acc", "Programmable mic key ACC",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_acc]))
+        extended.append(rs)
+        rs = RadioSetting("pg_p1", "Programmable mic key P1",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_p1]))
+        extended.append(rs)
+        rs = RadioSetting("pg_p2", "Programmable mic key P2",
+                          RadioSettingValueList(self.PROGRAMMABLEOPTIONS,
+                                        self.PROGRAMMABLEOPTIONS[_settings.pg_p2]))
+        extended.append(rs)
+        rs = RadioSetting("pkt1200", "Packet 1200 gain level",
+                          RadioSettingValueInteger(0, 100, _settings.pkt1200))
+        packet.append(rs)
+        rs = RadioSetting("pkt9600", "Packet 9600 gain level",
+                          RadioSettingValueInteger(0, 100, _settings.pkt9600))
+        packet.append(rs)
+        options = ["1200", "9600"]
+        rs = RadioSetting("pkt_rate", "Packet rate",
+                          RadioSettingValueList(options,
+                                        options[_settings.pkt_rate]))
+        packet.append(rs)
+        rs = RadioSetting("proc_level", "Proc level",
+                          RadioSettingValueInteger(0, 100, _settings.proc_level))
+        basic.append(rs)
+        rs = RadioSetting("rf_power_hf", "Rf power set HF",
+                          RadioSettingValueInteger(5, 100, _settings.rf_power_hf))
+        basic.append(rs)
+        rs = RadioSetting("rf_power_6m", "Rf power set 6m",
+                          RadioSettingValueInteger(5, 100, _settings.rf_power_6m))
+        basic.append(rs)
+        rs = RadioSetting("rf_power_vhf", "Rf power set VHF",
+                          RadioSettingValueInteger(5, 50, _settings.rf_power_vhf))
+        basic.append(rs)
+        rs = RadioSetting("rf_power_uhf", "Rf power set UHF",
+                          RadioSettingValueInteger(2, 20, _settings.rf_power_uhf))
+        basic.append(rs)
+        options = ["TIME", "BUSY", "STOP"]
+        rs = RadioSetting("scan_mode", "Scan mode",
+                          RadioSettingValueList(options,
+                                        options[_settings.scan_mode]))
+        basic.append(rs)
+        rs = RadioSetting("scan_resume", "Scan resume",
+                          RadioSettingValueInteger(1, 10, _settings.scan_resume))
+        basic.append(rs)
+        rs = RadioSetting("split_tone", "Split tone enable",
+                          RadioSettingValueBoolean(_settings.split_tone))
+        extended.append(rs)
+        options = ["RF-Gain", "Squelch"]
+        rs = RadioSetting("sql_rf_gain", "Squelch/RF-Gain",
+                          RadioSettingValueList(options,
+                                        options[_settings.sql_rf_gain]))
+        panel.append(rs)
+        rs = RadioSetting("ssb_mic", "SSB Mic gain",
+                          RadioSettingValueInteger(0, 100, _settings.ssb_mic))
+        basic.append(rs)
+        options = ["Off"]+["%i" % i for i in range(1, 21)]
+        rs = RadioSetting("tot_time", "Time-out timer",
+                          RadioSettingValueList(options,
+                                        options[_settings.tot_time]))
+        basic.append(rs)
+        options = ["OFF", "ATAS(HF)", "ATAS(HF&50)", "ATAS(ALL)", "TUNER"]
+        rs = RadioSetting("tuner_atas", "Tuner/ATAS device",
+                          RadioSettingValueList(options,
+                                        options[_settings.tuner_atas]))
+        extended.append(rs)
+        rs = RadioSetting("tx_if_filter", "Transmit IF filter",
+                          RadioSettingValueList(self.FILTERS,
+                                        self.FILTERS[_settings.tx_if_filter]))
+        basic.append(rs)
+        rs = RadioSetting("vox_delay", "VOX delay (*100 ms)",
+                          RadioSettingValueInteger(1, 30, _settings.vox_delay))
+        basic.append(rs)
+        rs = RadioSetting("vox_gain", "VOX Gain",
+                          RadioSettingValueInteger(1, 100, _settings.vox_gain))
+        basic.append(rs)
+        # TODO xvtr_a_freq
+        # TODO xvtr_b_freq
+        options = ["OFF", "XVTR A", "XVTR B"]
+        rs = RadioSetting("xvtr_sel", "Transverter function selection",
+                          RadioSettingValueList(options,
+                                        options[_settings.xvtr_sel]))
+        extended.append(rs)
+        
+        return top
+
+    def set_settings(self, settings):
+        _settings = self._memobj.settings
+        for element in settings:
+            if not isinstance(element, RadioSetting):
+                self.set_settings(element)
+                continue
+            try:
+                if "." in element.get_name():
+                    bits = element.get_name().split(".")
+                    obj = self._memobj
+                    for bit in bits[:-1]:
+                        obj = getattr(obj, bit)
+                    setting = bits[-1]
+                else:
+                    obj = _settings
+                    setting = element.get_name()
+                if os.getenv("CHIRP_DEBUG"):
+	                print "Setting %s(%s) <= %s" % (setting, 
+                                    getattr(obj, setting), element.value)
+                if setting == "arts_idw":
+                    self._memobj.arts_idw = \
+                        [self._CALLSIGN_CHARSET_REV[x] for x in 
+                                                        str(element.value)]
+                elif setting in ["beacon_text1", "beacon_text2", "beacon_text3"]:
+                    setattr(self._memobj, setting,
+                        [self._BEACON_CHARSET_REV[x] for x in 
+                                                        str(element.value)])
+                elif setting == "cw_delay":
+                    val = int(element.value)+2
+                    setattr(obj, "cw_delay_hi", val/256)
+                    setattr(obj, setting, val&0xff)
+                elif setting == "dig_vox":
+                    val = int(element.value)
+                    setattr(obj, "dig_vox_enable", int(val>0))
+                    setattr(obj, setting, val)
+                elif setting == "disp_color_fix":
+                    setattr(obj, setting, int(element.value)+1)
+                elif setting == "disp_contrast":
+                    setattr(obj, setting, int(element.value)-2)
+                elif setting == "dsp_nr" :
+                    setattr(obj, setting, int(element.value)-1)
+                else:
+                    setattr(obj, setting, element.value)
+            except Exception, e:
+                print element.get_name()
+                raise
+
 @directory.register
 class FT857USRadio(FT857Radio):
     """Yaesu FT857/897 (US version)"""
@@ -339,3 +988,12 @@
             return self._set_special_60m(memory)
         else:
             return FT857Radio.set_memory(self, memory)
+
+    def get_settings(self):
+        top = FT857Radio.get_settings(self)
+        basic = top["basic"]
+        rs = RadioSetting("emergency", "Emergency",
+                          RadioSettingValueBoolean(self._memobj.settings.emergency))
+        basic.append(rs)
+        return top
+



More information about the chirp_devel mailing list