[chirp_devel] [PATCH 3 of 3] [ft8x7] React correctly on deletion of special memories
Marco Filippi IZ3GME
Thu Apr 19 07:54:04 PDT 2012
# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1334846665 -7200
# Node ID 3caf35f8a005be15e9dfc339a9613579e15f02e2
# Parent f7f98e5d8d1bd29bb0fcf42b8ed959a4ccab8b43
[ft8x7] React correctly on deletion of special memories
diff --git a/chirp/ft817.py b/chirp/ft817.py
--- a/chirp/ft817.py
+++ b/chirp/ft817.py
@@ -232,6 +232,8 @@
FIRST_VFOA_INDEX = -21
LAST_VFOA_INDEX = -35
+ SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(), SPECIAL_MEMORIES.keys()))
+
def sync_in(self):
try:
self._mmap = clone_in(self)
@@ -293,6 +295,9 @@
def get_memory(self, number):
if isinstance(number, str):
return self._get_special(number)
+ elif number < 0:
+ # I can't stop delete operation from loosing extd_number but I know how to get it back
+ return self._get_special(self.SPECIAL_MEMORIES_REV[number])
else:
return self._get_normal(number)
@@ -335,15 +340,18 @@
return mem
def _set_special(self, mem):
- cur_mem = self._get_special(mem.extd_number)
+ if mem.empty:
+ # can't delete special memories!
+ return
+
+ cur_mem = self._get_special(self.SPECIAL_MEMORIES_REV[mem.number])
for key in cur_mem.immutable:
if cur_mem.__dict__[key] != mem.__dict__[key]:
raise errors.RadioError("Editing field `%s' " % key +
- "is not supported on this chanel")
+ "is not supported on this channel")
# TODO add frequency range check for vfo and home memories
-
if mem.number in range(self.FIRST_VFOA_INDEX, self.LAST_VFOA_INDEX -1, -1):
_mem = self._memobj.vfoa[-self.LAST_VFOA_INDEX + mem.number]
elif mem.number in range(self.FIRST_VFOB_INDEX, self.LAST_VFOB_INDEX -1, -1):
@@ -388,7 +396,7 @@
return
self._memobj.visible[(mem.number-1)/8] |= 1 << (mem.number-1)%8
- self._memobj.filled[(mem.number-1)/8] = self._memobj.visible[(mem.number-1)/8]
+ self._memobj.filled[(mem.number-1)/8] |= 1 << (mem.number-1)%8
self._set_memory(mem, _mem)
def _get_memory(self, mem, _mem):
@@ -522,10 +530,10 @@
}
LAST_SPECIAL60M_INDEX = -40
- def get_special_locations(self):
- lista = self.SPECIAL_60M.keys()
- lista.extend(FT817Radio.get_special_locations(self))
- return lista
+ SPECIAL_MEMORIES = dict(FT817Radio.SPECIAL_MEMORIES)
+ SPECIAL_MEMORIES.update(SPECIAL_60M)
+
+ SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(), SPECIAL_MEMORIES.keys()))
def _get_special_60M(self, number):
mem = chirp_common.Memory()
@@ -544,7 +552,11 @@
return mem
def _set_special_60M(self, mem):
- cur_mem = self._get_special_60M(mem.extd_number)
+ if mem.empty:
+ # can't delete 60M memories!
+ return
+
+ cur_mem = self._get_special_60M(self.SPECIAL_MEMORIES_REV[mem.number])
for key in cur_mem.immutable:
if cur_mem.__dict__[key] != mem.__dict__[key]:
@@ -560,11 +572,14 @@
def get_memory(self, number):
if number in self.SPECIAL_60M.keys():
return self._get_special_60M(number)
+ elif number < 0 and self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
+ # I can't stop delete operation from loosing extd_number but I know how to get it back
+ return self._get_special_60M(self.SPECIAL_MEMORIES_REV[number])
else:
return FT817Radio.get_memory(self, number)
def set_memory(self, memory):
- if memory.extd_number in self.SPECIAL_60M.keys():
+ if memory.number in self.SPECIAL_60M.values():
return self._set_special_60M(memory)
else:
return FT817Radio.set_memory(self, memory)
diff --git a/chirp/ft857.py b/chirp/ft857.py
--- a/chirp/ft857.py
+++ b/chirp/ft857.py
@@ -16,6 +16,7 @@
from chirp import ft817, chirp_common, errors, directory
from chirp import bitwise
+import os
mem_format = """
struct mem_struct{
@@ -81,20 +82,6 @@
"""
-SPECIAL_PMS = { # WARNING Index are hard wired in memory management code !!!
- "PMS-1L" : -47,
- "PMS-1U" : -46,
- "PMS-2L" : -45,
- "PMS-2U" : -44,
- "PMS-3L" : -43,
- "PMS-3U" : -42,
- "PMS-4L" : -41,
- "PMS-4U" : -40,
- "PMS-5L" : -39,
- "PMS-5U" : -38,
-}
-
-
@directory.register
class FT857Radio(ft817.FT817Radio):
MODEL = "FT-857/897"
@@ -181,6 +168,24 @@
FIRST_VFOA_INDEX = -22
LAST_VFOA_INDEX = -37
+ SPECIAL_PMS = { # WARNING Index are hard wired in memory management code !!!
+ "PMS-1L" : -47,
+ "PMS-1U" : -46,
+ "PMS-2L" : -45,
+ "PMS-2U" : -44,
+ "PMS-3L" : -43,
+ "PMS-3U" : -42,
+ "PMS-4L" : -41,
+ "PMS-4U" : -40,
+ "PMS-5L" : -39,
+ "PMS-5U" : -38,
+ }
+
+ SPECIAL_MEMORIES = dict(ft817.FT817Radio.SPECIAL_MEMORIES)
+ SPECIAL_MEMORIES.update(SPECIAL_PMS)
+
+ SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(), SPECIAL_MEMORIES.keys()))
+
def get_features(self):
rf = ft817.FT817Radio.get_features(self)
rf.has_cross = True
@@ -214,22 +219,20 @@
def process_mmap(self):
self._memobj = bitwise.parse(mem_format, self._mmap)
- def get_special_locations(self):
- lista = SPECIAL_PMS.keys()
- lista.extend(self.SPECIAL_MEMORIES)
- return lista
-
def _get_special_pms(self, number):
mem = chirp_common.Memory()
- mem.number = SPECIAL_PMS[number]
+ mem.number = self.SPECIAL_PMS[number]
mem.extd_number = number
bitindex = -38 - mem.number
- used = ((self._memobj.pmsvisible & self._memobj.pmsfilled) >> bitindex) & 0x01
+ used = (self._memobj.pmsvisible >> bitindex) & 0x01
+ valid = (self._memobj.pmsfilled >> bitindex) & 0x01
if os.getenv("CHIRP_DEBUG"):
- print "mem.number %i bitindex %i pmsvisible %i pmsfilled %i used %i" % (mem.number, bitindex, self._memobj.pmsvisible, self._memobj.pmsfilled, used)
+ print "mem.number %i bitindex %i pmsvisible %i pmsfilled %i used %i filled %i" % (mem.number, bitindex, self._memobj.pmsvisible, self._memobj.pmsfilled, used, valid)
if not used:
mem.empty = True
+ if not valid:
+ mem.empty = True
return mem
_mem = self._memobj.pms[47 + mem.number]
@@ -239,20 +242,25 @@
mem.immutable = ["number", "skip", "rtone", "ctone",
"extd_number", "dtcs", "tmode", "cross_mode",
"dtcs_polarity", "power", "duplex", "offset",
- "comment", "empty"]
+ "comment"]
return mem
def _set_special_pms(self, mem):
- cur_mem = self._get_special_pms(mem.extd_number)
+ cur_mem = self._get_special_pms(self.SPECIAL_MEMORIES_REV[mem.number])
bitindex = -38 - mem.number
- if mem.empty:
+ wasused = (self._memobj.pmsvisible >> bitindex) & 0x01
+ wasvalid = (self._memobj.pmsfilled >> bitindex) & 0x01
+
+ if mem.empty:
+ if wasvalid and not wasused:
+ self._memobj.pmsfilled &= ~ (1 << bitindex)
self._memobj.pmsvisible &= ~ (1 << bitindex)
- self._memobj.pmsfilled = self._memobj.pmsvisible
return
+
self._memobj.pmsvisible |= 1 << bitindex
- self._memobj.pmsfilled = self._memobj.pmsvisible
+ self._memobj.pmsfilled |= 1 << bitindex
for key in cur_mem.immutable:
if cur_mem.__dict__[key] != mem.__dict__[key]:
@@ -263,13 +271,16 @@
self._set_memory(mem, _mem)
def get_memory(self, number):
- if number in SPECIAL_PMS.keys():
+ if number in self.SPECIAL_PMS.keys():
return self._get_special_pms(number)
+ elif number < 0 and self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_PMS.keys():
+ # I can't stop delete operation from loosing extd_number but I know how to get it back
+ return self._get_special_pms(self.SPECIAL_MEMORIES_REV[number])
else:
return ft817.FT817Radio.get_memory(self, number)
def set_memory(self, memory):
- if memory.extd_number in SPECIAL_PMS.keys():
+ if memory.number in self.SPECIAL_PMS.values():
return self._set_special_pms(memory)
else:
return ft817.FT817Radio.set_memory(self, memory)
@@ -296,10 +307,10 @@
}
LAST_SPECIAL60M_INDEX = -52
- def get_special_locations(self):
- lista = self.SPECIAL_60M.keys()
- lista.extend(FT857Radio.get_special_locations(self))
- return lista
+ SPECIAL_MEMORIES = dict(FT857Radio.SPECIAL_MEMORIES)
+ SPECIAL_MEMORIES.update(SPECIAL_60M)
+
+ SPECIAL_MEMORIES_REV = dict(zip(SPECIAL_MEMORIES.values(), SPECIAL_MEMORIES.keys()))
# this is identical to the one in FT817ND_US_Radio but we inherit from 857
def _get_special_60M(self, number):
@@ -320,7 +331,11 @@
# this is identical to the one in FT817ND_US_Radio but we inherit from 857
def _set_special_60M(self, mem):
- cur_mem = self._get_special_60M(mem.extd_number)
+ if mem.empty:
+ # can't delete 60M memories!
+ return
+
+ cur_mem = self._get_special_60M(self.SPECIAL_MEMORIES_REV[mem.number])
for key in cur_mem.immutable:
if cur_mem.__dict__[key] != mem.__dict__[key]:
@@ -336,11 +351,14 @@
def get_memory(self, number):
if number in self.SPECIAL_60M.keys():
return self._get_special_60M(number)
+ elif number < 0 and self.SPECIAL_MEMORIES_REV[number] in self.SPECIAL_60M.keys():
+ # I can't stop delete operation from loosing extd_number but I know how to get it back
+ return self._get_special_60M(self.SPECIAL_MEMORIES_REV[number])
else:
return FT857Radio.get_memory(self, number)
def set_memory(self, memory):
- if memory.extd_number in self.SPECIAL_60M.keys():
+ if memory.number in self.SPECIAL_60M.values():
return self._set_special_60M(memory)
else:
return FT857Radio.set_memory(self, memory)
More information about the chirp_devel
mailing list