Here’s a chirp* run with a “bad” FT2D image. I’ve elided most of the "Bandplan … duplicates" warnings. The traceback occurs after loading the image, navigating to the Banks tab, when I try to click on a box in the second bank, which the radio’s user had defined with an immutable special memory location. The UI gives a modal error dialog “Failed to add # to mapping: list index out of range”, where # is the memory “Loc” I touched. The UI will never add or delete any instance in the selected bank thereafter. If one never touches a checkbox in the bank, all is OK. Chirp does not crash, but it won’t allow access to that memory bank. I believe it also does not change the entry in the bank location, so it’s not “corrupting” the memory image.
When I look at the browser, the entry for the “bad” bank is 0x1801, which is clearly too large for a 1000-entry memory. I’ve determined that the “18” bits are actually flags defining which immutable address to use for that location. They are [usually?] not in the memory image that chirp can access.
The easy changes will special-case those entries and prevent the UI from ever seeing them. I will also add the non-immutable special memory entries so that they can be displayed and changed in memedit.py. I do not think that the radio will allow those entries to be included in a bank, so they should have no effect on bankedit.py. If I could figure out the syntax, it’d probably be best to make the image actually acknowledge the top bit as an “unused” flag,
Since I do not have FT1D, I cannot test these changes on that radio. By reading the Yaesu manuals, it’s clear to me that the FT1D also has the problem that a radio can put a special memory into a bank reference, and that will cause FT1D users the same problem as an FT2D. The FTM-3200D also inherits from the FT1D. That will also need to be checked, although that radio shouldn’t be capable of getting into the special memory situation (according to its manual.)
$ chirp
2017-12-03 14:26:37.923 python2.7[17267:1313234] *** WARNING: Method userSpaceScaleFactor in class NSView is deprecated on 10.7 and later. It should not be used in new applications. Use convertRectToBacking: instead.
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: Warning: invalid cast from 'GtkMenuBar' to 'GtkWindow'
macapp.set_menu_bar(menu_bar)
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/mainapp.py:1971: GtkWarning: gtk_window_add_accel_group: assertion 'GTK_IS_WINDOW (window)' failed
macapp.set_menu_bar(menu_bar)
WARNING: Bandplan North American Band Plan has duplicates [1800000-2000000 160 Meter Band simplex , 1800000-2000000 160 Meter Band simplex mode: CW ]
…
WARNING: Bandplan North American Band Plan has duplicates [29300000-29510000 Satellite downlink simplex , 29300000-29510000 Satellite Downlinks simplex ]
/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/settingsedit.py:126: Warning: value "0" of type 'guint' is invalid or out of range for property 'n-rows' of type 'guint'
table = gtk.Table(len(group), 2, False)
ERROR: Exception running RadioJob: list index out of range
ERROR: -- Exception: --
ERROR: Traceback (most recent call last):
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/common.py", line 116, in _execute
result = func(*self.args, **self.kwargs)
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 503, in add_memory_to_mapping
self.update_vfo()
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/drivers/ft1d.py", line 452, in update_vfo
if not flags[channel].nosubvfo:
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/bitwise.py", line 208, in __getitem__
return self.__items[index]
IndexError: list index out of range
ERROR: ----------------
ERROR: Job Args: (Memory[6], FT2Bank-1)
ERROR: Job KWArgs: {}
ERROR: Job Called from:
File "/usr/local/bin/chirp", line 143, in <module>
gtk.main()
File "/usr/local/Cellar/chirp/20170714/libexec/lib/python2.7/site-packages/chirp/ui/bankedit.py", line 229, in do_mapping_adjustment
job = common.RadioJob(do_mapping_index, fn, memory, mapping)
* I used the latest chirp from “brew” for Macintosh:
CHIRP daily-20170714 on Darwin XXXXX 17.2.0 Darwin Kernel Version 17.2.0: Fri Sep 29 18:27:05 PDT 2017; root:xnu-4570.20.62~3/RELEASE_X86_64 x86_64 (Python 2.7.14)