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