HI! I don't really remember why but we used negative index for special memories ... probably Dan can tell if it's a must ...
You can look to ft817 driver for a sample.
73 de IZ3GME Marco
On 26/02/2015 09:40, K. Arvanitis wrote:
# HG changeset patch # User K. Arvanitis kosta@alumni.uvic.ca # Date 1424938909 28800 # Thu Feb 26 00:21:49 2015 -0800 # Node ID 51e10c5f7447b6b025514d75d03215b9d4088479 # Parent 81465a9a288b84f8fd835ceaaf8e3eb249d5bbd0 [FT-60] Adding support for PMS channels
Added special channel support for yasue programmable memory scan channels: L1 - L50 and U1 - U50.
Bug #2367
diff -r 81465a9a288b -r 51e10c5f7447 chirp/ft60.py --- a/chirp/ft60.py Wed Feb 25 08:17:24 2015 -0800 +++ b/chirp/ft60.py Thu Feb 26 00:21:49 2015 -0800 @@ -204,8 +204,7 @@ #seekto 0x09E; ul16 mbs;
-#seekto 0x0248; -struct { +struct mem { u8 used:1, unknown1:1, isnarrow:1, @@ -224,7 +223,13 @@ u8 unknown5[2]; u8 offset; u8 unknown6[3]; -} memory[1000]; +};
+#seekto 0x0248; +struct mem memory[1000];
+#seekto 0x40c8; +struct mem pms[100];
#seekto 0x6EC8; // skips:2 for Memory M in [1, 1000] is in flags[(M-1)/4].skip((M-1)%4). @@ -263,6 +268,8 @@ STEPS = [5.0, 10.0, 12.5, 15.0, 20.0, 25.0, 50.0, 100.0] SKIPS = ["", "S", "P"] CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ [?]^__|`?$%&-()*+,-,/|;/=>?@" +SPECIALS = ["%s%d" % (c,i+1) for i in range(0, 50) for c in ('L', 'U') ]
class FT60BankModel(chirp_common.BankModel): def get_num_mappings(self):
@@ -346,6 +353,7 @@ rf.valid_power_levels = POWER_LEVELS rf.valid_tuning_steps = STEPS rf.valid_skips = SKIPS
rf.valid_special_chans = SPECIALS rf.valid_characters = CHARSET rf.valid_name_length = 6 rf.valid_modes = ["FM", "NFM", "AM"]
@@ -629,14 +637,28 @@ repr(self._memobj.names[number - 1])
def get_memory(self, number):
_mem = self._memobj.memory[number - 1]
_skp = self._memobj.flags[(number - 1) / 4]
_nam = self._memobj.names[number - 1]
mem = chirp_common.Memory()
skip = _skp["skip%i" % ((number - 1) % 4)]
mem = chirp_common.Memory()
mem.number = number
if isinstance(number, str):
# pms channel
mem.number = 1001 + SPECIALS.index(number)
mem.extd_number = number
mem.immutable = ["number", "extd_number", "name", "skip"]
_mem = self._memobj.pms[mem.number - 1001]
_nam = _skp = None
elif number > 1000:
# pms channel
mem.number = number
mem.extd_number = SPECIALS[number - 1001]
mem.immutable = ["number", "extd_number", "name", "skip"]
_mem = self._memobj.pms[mem.number - 1001]
_nam = _skp = None
else:
mem.number = number
_mem = self._memobj.memory[mem.number - 1]
_nam = self._memobj.names[mem.number - 1]
_skp = self._memobj.flags[(mem.number - 1) / 4] if not _mem.used: mem.empty = True
@@ -644,7 +666,6 @@
mem.freq = _decode_freq(_mem.freq) mem.offset = int(_mem.offset) * 50000
mem.duplex = DUPLEX[_mem.duplex] if mem.duplex == "split": mem.offset = _decode_freq(_mem.tx_freq)
@@ -654,26 +675,36 @@ mem.power = POWER_LEVELS[_mem.power] mem.mode = _mem.isam and "AM" or _mem.isnarrow and "NFM" or "FM" mem.tuning_step = STEPS[_mem.step]
mem.skip = SKIPS[skip]
if _nam.use_name and _nam.valid:
mem.name = _decode_name(_nam.name).rstrip()
if not _skp is None:
skip = _skp["skip%i" % ((mem.number - 1) % 4)]
mem.skip = SKIPS[skip]
if not _nam is None:
if _nam.use_name and _nam.valid:
mem.name = _decode_name(_nam.name).rstrip() return mem def set_memory(self, mem):
_mem = self._memobj.memory[mem.number - 1]
_skp = self._memobj.flags[(mem.number - 1) / 4]
_nam = self._memobj.names[mem.number - 1]
if mem.number > 1000:
# pms channel
_mem = self._memobj.pms[mem.number - 1001]
_nam = _skp = None
else:
_mem = self._memobj.memory[mem.number - 1]
_nam = self._memobj.names[mem.number - 1]
_skp = self._memobj.flags[(mem.number - 1) / 4]
assert(_mem) if mem.empty: _mem.used = False return
if not _mem.used: _mem.set_raw("\x00" * 16) _mem.used = 1
print "Wiped" _mem.freq, flags = _encode_freq(mem.freq) _mem.freq[0].set_bits(flags)
@@ -693,8 +724,10 @@ _mem.isam = mem.mode == "AM" _mem.step = STEPS.index(mem.tuning_step)
_skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip)
if not _skp is None:
_skp["skip%i" % ((mem.number - 1) % 4)] = SKIPS.index(mem.skip)
_nam.name = _encode_name(mem.name)
_nam.use_name = mem.name.strip() and True or False
_nam.valid = _nam.use_name
if not _nam is None:
_nam.name = _encode_name(mem.name)
_nam.use_name = mem.name.strip() and True or False
_nam.valid = _nam.use_name
chirp_devel mailing list chirp_devel@intrepid.danplanet.com http://intrepid.danplanet.com/mailman/listinfo/chirp_devel Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers