# HG changeset patch
# User Nicolas Pike <nicolas.jon.pike@gmail.com>
# Date 1520895999 0
#      Mon Mar 12 23:06:39 2018 +0000
# Node ID c0dd892751c37b7049d77fe400909c4ada3630c5
# Parent  d8e76240546ea505b065854afb9c1da11f8b2070
[FT-70] Banks support fixes for New Model #5329
Some pep8 fixes to Sorry.

diff -r d8e76240546e -r c0dd892751c3 chirp/drivers/ft70.py
--- a/chirp/drivers/ft70.py	Sun Mar 11 14:34:13 2018 -0400
+++ b/chirp/drivers/ft70.py	Mon Mar 12 23:06:39 2018 +0000
@@ -62,6 +62,8 @@
 // MYCALL and Opening Message errors if not 10 characters
 // Values greater than one sometimes stored as whole bytes, these need to be refactored into bit fields
 // to prevent accidental overwriting of adjacent values  
+// Bank Name length not checked on gui input - but first 6 characters are saved correctly. 
+// Extended characters entered as bank names on radio are corrupted in Chirp
 
 // Missing
 // 50 SCV.WTH Set the VFO scan frequency range. BAND / ALL - NOT FOUND
@@ -127,7 +129,7 @@
     u8 unknown2_1;
     u8 mic_gain;                        // 31 MCGAIN    Adjust the microphone gain level
     u8 unknown2_3;
-    u8 dw_interval;                     // 21 DW INT Set the priority memory channel monitoring interval during Dual Receive. 0.1S - 5.0S - 10.0S
+    u8 dw_interval;                     // 21 DW INT Set the priority memory ch mon int during Dual RX 0.1S-5.0S-10.0S
     u8 ptt_delay;                       // 42 PTT.DLY   Set the PTT delay time. OFF / 20 MS / 50 MS / 100 MS / 200 MS
     u8 rx_save;                         // 48 RX.SAVE   Set the battery save time. OFF / 0.2 S - 60.0 S    
     u8 scan_restart;                    // 53 SCN.STR   Set the scanning restart time.  0.1 S - 2.0 S - 10.0 S
@@ -136,7 +138,7 @@
     u8 unknown4[5];
     u8 tot;                             // 56 TOT       Set the transmission timeout timer 
     u8 unknown5[3];          // 26                                                
-    u8 vfo_mode:1,                      // 60 VFO.MOD   Set the frequency setting range in the VFO mode by DIAL knob. ALL / BAND
+    u8 vfo_mode:1,                      // 60 VFO.MOD   Set freq setting range in the VFO mode by DIAL knob. ALL / BAND
     unknown7:1,
     scan_lamp:1,                        // 51 SCN.LMP   Set the scan lamp ON or OFF when scanning stops On/Off
     unknown8:1,
@@ -160,7 +162,7 @@
     password:1,                         // Placeholder location
     home_rev:1,                         // 26 HOME/REV   Select the function of the [HOME/REV] key.
     moni:1;                             // 32 Mon/T-Call Select the function of the [MONI/T-CALL] switch.
-    u8 gm_interval:4,       // 30       // 25 GM INT Set the transmission interval of digital GM information. OFF / NORMAL / LONG 
+    u8 gm_interval:4,       // 30       // 25 GM INT Set tx interval of digital GM information. OFF / NORMAL / LONG 
     unknown10:4;
     u8 unknown11;          
     u8 unknown12:1,
@@ -170,7 +172,7 @@
     home_vfo:1,                         // 27 HOME->VFO  Turn transfer VFO to the Home channel ON or OFF.
     unknown12_6:1, 
     unknown12_7:1,
-    dw_rt:1;                // 32       // 23 DW RVT     Turn the "Priority Channel Revert" feature ON or OFF during Dual Receive.
+    dw_rt:1;                // 32       // 23 DW RVT Turn "Priority Channel Revert" feature ON or OFF during Dual Rx.
     u8 unknown33;
     u8 unknown34;
     u8 unknown35;
@@ -220,51 +222,7 @@
     u8 unknown[48];
     u8 unknown1[16];
     } vfo_backup_info_1;      
-       
-    #seekto 0x064a;         // Unknown (From FT1D) For reference only
-    struct {
-    u8 unknown0[4];
-    u8 frequency_band;
-    u8 unknown1:6,
-    manual_or_mr:2;
-    u8 unknown2:7,
-    mr_banks:1;
-    u8 unknown3;
-    u16 mr_index;
-    u16 bank_index;
-    u16 bank_enable;
-    u8 unknown4[5];
-    u8 unknown5:6,
-    power:2;                // 3 - High, 2 - Mid, 1 - Low
-    u8 unknown6:4,
-    tune_step:4;
-    u8 unknown7:6,
-    duplex:2;
-    u8 unknown8:6,
-    tone_mode:2;
-    u8 unknown9:2,
-    tone:6;
-    u8 unknown10;
-    u8 unknown11:6,
-    mode:2;
-    bbcd freq0[4];
-    bbcd offset_freq[4];
-    u8 unknown12[2];
-    char label[16];
-    u8 unknown13[6];
-    bbcd band_lower[4];
-    bbcd band_upper[4];
-    bbcd rx_freq[4];
-    u8 unknown14[22];
-    bbcd freq1[4];
-    u8 unknown15[11];
-    u8 unknown16:3,
-    volume:5;
-    u8 unknown17[18];
-    u8 active_menu_item;
-    u8 checksum;
-    } vfo_info[6];
-    
+   
     #seekto 0x047e;
     struct {
     u8 unknown1;
@@ -273,7 +231,7 @@
     struct {
     char padded_string[6];              // 36 OPN.MSG   Select MSG then key vm to edit it
     } message;
-    } opening_message;                  // 36 OPN.MSG   Select the Opening Message when the transceiver is ON. OFF / MSG / DC    
+    } opening_message;                  // 36 OPN.MSG   Select the Opening Message when transceiver is ON. OFF/MSG/DC    
  
     #seekto 0x094a;                     // DTMF Memories
     struct {
@@ -318,7 +276,7 @@
     standby_beep:1;                     // 07 BEP.STB   Standby Beep in the digital C4FM mode. On/Off
     u8 unknown3; 
     u8 unknown4:6,
-    gm_ring:2;                          // 24 GM RNG Select the beep option while receiving digital GM information. OFF / IN RNG /ALWAYS
+    gm_ring:2;                          // 24 GM RNG Select beep option while rx digital GM info. OFF/IN RNG/ALWAYS
     u8 unknown5;
     u8 rx_dg_id;                        // RX DG-ID     Long Press Mode Key, Mode Key to select, Dial
     u8 tx_dg_id;                        // TX DG-ID     Long Press Mode Key, Dial                  
@@ -456,48 +414,6 @@
         _members = self._radio._memobj.bank_members[bank.index]
         return set([int(ch) + 1 for ch in _members.channel if ch != 0xFFFF])
 
-    def update_vfo(self):
-        chosen_bank = [None, None]
-        chosen_mr = [None, None]
-
-        flags = self._radio._memobj.flag
-
-        # Find a suitable bank and MR for VFO A and B.  # From FT1D for ref only
-        for bank in self.get_mappings():
-            for channel in self._channel_numbers_in_bank(bank):
-                chosen_bank[0] = bank.index
-                chosen_mr[0] = channel
-                if not flags[channel].nosubvfo:
-                    chosen_bank[1] = bank.index
-                    chosen_mr[1] = channel
-                    break
-            if chosen_bank[1]:
-                break
-
-        for vfo_index in (0, 1):        # From FT1D for ref only
-            # 3 VFO info structs are stored as 3 pairs of (master, backup)
-            vfo = self._radio._memobj.vfo_info[vfo_index * 2]
-            vfo_bak = self._radio._memobj.vfo_info[(vfo_index * 2) + 1]
-
-            if vfo.checksum != vfo_bak.checksum:
-                LOG.warn("VFO settings are inconsistent with backup")
-            else:
-                if ((chosen_bank[vfo_index] is None) and (vfo.bank_index !=
-                                                          0xFFFF)):
-                    LOG.info("Disabling banks for VFO %d" % vfo_index)
-                    vfo.bank_index = 0xFFFF
-                    vfo.mr_index = 0xFFFF
-                    vfo.bank_enable = 0xFFFF
-                elif ((chosen_bank[vfo_index] is not None) and
-                      (vfo.bank_index == 0xFFFF)):
-                    LOG.info("Enabling banks for VFO %d" % vfo_index)
-                    vfo.bank_index = chosen_bank[vfo_index]
-                    vfo.mr_index = chosen_mr[vfo_index]
-                    vfo.bank_enable = 0x0000
-                vfo_bak.bank_index = vfo.bank_index
-                vfo_bak.mr_index = vfo.mr_index
-                vfo_bak.bank_enable = vfo.bank_enable
-
     def _update_bank_with_channel_numbers(self, bank, channels_in_bank):
         _members = self._radio._memobj.bank_members[bank.index]
         if len(channels_in_bank) > len(_members.channel):
@@ -518,8 +434,6 @@
         _bank_used = self._radio._memobj.bank_used[bank.index]
         _bank_used.in_use = 0x06
 
-        self.update_vfo()
-
     def remove_memory_from_mapping(self, memory, bank):
         channels_in_bank = self._channel_numbers_in_bank(bank)
         try:
@@ -533,8 +447,6 @@
             _bank_used = self._radio._memobj.bank_used[bank.index]
             _bank_used.in_use = 0xFFFF
 
-        self.update_vfo()
-
     def get_mapping_memories(self, bank):
         memories = []
         for channel in self._channel_numbers_in_bank(bank):
@@ -704,16 +616,6 @@
         mem.skip = flag.pskip and "P" or flag.skip and "S" or ""
         mem.name = self._decode_label(_mem)
 
-        mem.extra = RadioSettingGroup("extra", "Extra Settings")
-
-        rs = RadioSetting("display_tag", "Display Name/Frequency",
-                          RadioSettingValueBoolean(_mem.display_tag))
-        mem.extra.append(rs)
-
-        rs = RadioSetting("ams", "AMS",
-                          RadioSettingValueBoolean(_mem.ams))
-        mem.extra.append(rs)
-
         return mem
 
     def _decode_label(self, mem):
@@ -726,7 +628,7 @@
         # We only speak english here in chirpville
         return [0x00, 0x00]
 
-    def _decode_power_level(self, mem):             # 3 High 2 Mid 1 Low
+    def _decode_power_level(self, mem):  # 3 High 2 Mid 1 Low
         return POWER_LEVELS[3 - mem.power]
 
     def _encode_power_level(self, mem):
@@ -880,25 +782,6 @@
         rs = RadioSetting("opening_message.flag", "Opening Msg Mode", val)
         menu.append(rs)
 
-        val = RadioSettingValueString(0, 6, str(opening_message.message.padded_string).rstrip("\xFF"))
-        rs = RadioSetting("opening_message.message.padded_string", "Opening Message", val)
-        rs.set_apply_callback(self.apply_ff_padded_string, opening_message.message)
-        menu.append(rs)
-
-        # Indicates the current temperature inside the transceiver.
-        # Displays the internal temperature sensor F or C.
-        # Press the [V/M] key to toggle the measurement units between F or C.
-        # In this setting, press and hold the [F] key to return to normal operation.
-
-        # Only seems to change the radio display, back to C when radio powered off
-
-        # first_settings = self._memobj.first_settings
-        # val = RadioSettingValueList(
-        #    self._TEMP_CF,
-        #    self._TEMP_CF[first_settings.temp_cf])
-        # rs = RadioSetting("first_settings.temp_cf", "Temperature unit", val)
-        # menu.append(rs)
-
         return menu
 
     def _get_config_settings(self):
@@ -955,16 +838,6 @@
         rs = RadioSetting("scan_settings.busy_led", "Busy LED", val)
         menu.append(rs)
 
-        # 40 Password   Turn the password function ON or OFF.
-
-        # val = RadioSettingValueList(
-        #    self._OFF_ON,
-        #    self._OFF_ON[scan_settings.password])
-        # rs = RadioSetting("scan_settings.password", "Password", val)
-        # menu.append(rs)
-
-        # 41 PSWDWT     Input the password.
-
         # 26 HOME/REV   Select the function of the [HOME/REV] key.
 
         val = RadioSettingValueList(
@@ -1037,30 +910,6 @@
         rs = RadioSetting("scan_settings.tot", "Transmit Timeout (TOT)", val)
         menu.append(rs)
 
-        # P1 Set Mode Items to the Programmable Key
-        # 1-12 Maps directly to setting
-        # 14 setting 13
-        # 15-17 setting 14 - 16
-        # 24 setting 17
-        # 26-31 setting 18 - 23
-        # 33-40 setting 24 - 31
-
-        # Further checking required
-
-        # val = RadioSettingValueList(
-        #    self._SET_MODE,
-        #    self._SET_MODE[scan_settings.prog_key1])
-        # rs = RadioSetting("scan_settings.prog_key1", "P1 Key", val)
-        # menu.append(rs)
-
-        # P2 Set Mode Items to the Programmable Key
-
-        # val = RadioSettingValueList(
-        #    self._SET_MODE,
-        #    self._SET_MODE[scan_settings.prog_key2])
-        # rs = RadioSetting("scan_settings.prog_key2", "P2 Key", val)
-        # menu.append(rs)
-
         # 31 MCGAIN     Adjust the microphone gain level
 
         val = RadioSettingValueList(
@@ -1087,28 +936,11 @@
         rs = RadioSetting("squelch_settings.squelch", "Squelch", val)
         menu.append(rs)
 
-        # Power Level   F key, TX PO, Dial to adjust power level
-
-        # scan_settings_2 = self._memobj.scan_settings_2
-        # val = RadioSettingValueList(
-        #     self._VOLUME,
-        #     self._VOLUME[scan_settings_2.volume])
-        # rs = RadioSetting("scan_settings_2.volume", "Volume", val)
-        # menu.append(rs)
-
         return menu
 
     def _get_digital_settings(self):
         menu = RadioSettingGroup("digital_settings", "Digital")
 
-        # 63  MYCALL    Set the call sign.
-
-        my_call = self._memobj.my_call
-        val = RadioSettingValueString(0, 10, str(my_call.padded_string).rstrip("\xFF"))
-        rs = RadioSetting("my_call.padded_string", "My Call", val)
-        rs.set_apply_callback(self.apply_ff_padded_string, my_call)
-        menu.append(rs)
-
         # Short Press AMS button AMS TX Mode
 
         digital_settings = self._memobj.digital_settings
@@ -1248,21 +1080,6 @@
 
         # 50 SCV.WTH Set the VFO scan frequency range. BAND / ALL  - NOT FOUND!
 
-        # scan_settings_1 = self._memobj.scan_settings_1
-        # val = RadioSettingValueList(
-        #    self._VFO_SCAN_MODE,
-        #    self._VFO_SCAN_MODE[scan_settings_1.vfo_scan_width])
-        # rs = RadioSetting("scan_settings_1.vfo_scan_width", "VFO Scan Width", val)
-        # menu.append(rs)
-
-        # 49 SCM.WTH Set the memory scan frequency range. ALL / BAND - NOT FOUND!
-
-        # val = RadioSettingValueList(
-        #    self._MEMORY_SCAN_MODE,
-        #    self._MEMORY_SCAN_MODE[scan_settings_1.memory_scan_width])
-        # rs = RadioSetting("scan_settings_1.memory_scan_width", "Memory Scan Width", val)
-        # menu.append(rs)
-
         # Scan Resume Section
 
         # 52 SCN.RSM    Configure the scan stop mode settings. 2.0 S - 5.0 S - 10.0 S / BUSY / HOLD
@@ -1356,4 +1173,3 @@
         rawval = setting.value.get_value()
         val = 0 if cls._DIG_POP_UP.index(rawval) == 0 else cls._DIG_POP_UP.index(rawval) + 9
         obj.digital_popup = val
-
