[chirp_devel] [PATCH 0 of 1] Add a new FileBackedRadio subclass between CloneModeRadio and Radio
Dan,
Your patch almost worked. There were two little bugs where CloneModeRadio needed to be replaced with FileBackedRadio.
Tom KD7LXL
# HG changeset patch # User Dan Smith dsmith@danplanet.com # Date 1333721605 25200 # Node ID 34584e37cb7086abed774829515fb7dcf50d4ca3 # Parent 925f294665e14cb3527b4a682c505b9855952e29 Add a new FileBackedRadio subclass between CloneModeRadio and Radio
This helps to distinguish between purely file-based drivers (such as CSV and XML) and a file-backed radio that can be uploaded (such as all the current clone-type radios). This also changes the logic in chirpui/clone.py that filters out drivers that can't be connected to an actual device.
Related to Bug #102
diff -r 925f294665e1 -r 34584e37cb70 chirp/chirp_common.py --- a/chirp/chirp_common.py Fri Apr 06 09:09:33 2012 -0600 +++ b/chirp/chirp_common.py Fri Apr 06 07:13:25 2012 -0700 @@ -904,28 +904,10 @@
return msgs
-class CloneModeRadio(Radio): - """A clone-mode radio does a full memory dump in and out and we store - an image of the radio into an image file""" - - _memsize = 0 - +class FileBackedRadio(Radio): + """A file-backed radio stores its data in a file""" FILE_EXTENSION = "img"
- def __init__(self, pipe): - self.errors = [] - self._mmap = None - - if isinstance(pipe, str): - self.pipe = None - self.load_mmap(pipe) - elif isinstance(pipe, memmap.MemoryMap): - self.pipe = None - self._mmap = pipe - self.process_mmap() - else: - Radio.__init__(self, pipe) - def save(self, filename): self.save_mmap(filename)
@@ -953,20 +935,12 @@ except IOError,e: raise Exception("File Access Error")
- def sync_in(self): - "Initiate a radio-to-PC clone operation" - pass - - def sync_out(self): - "Initiate a PC-to-radio clone operation" - pass + def get_mmap(self): + return self._mmap
def get_memsize(self): return self._memsize
- def get_mmap(self): - return self._mmap - @classmethod def match_model(cls, filedata, filename): """Given contents of a stored file (@filedata), return True if @@ -979,6 +953,35 @@ # memories of the same size. return len(filedata) == cls._memsize
+ +class CloneModeRadio(FileBackedRadio): + """A clone-mode radio does a full memory dump in and out and we store + an image of the radio into an image file""" + + _memsize = 0 + + def __init__(self, pipe): + self.errors = [] + self._mmap = None + + if isinstance(pipe, str): + self.pipe = None + self.load_mmap(pipe) + elif isinstance(pipe, memmap.MemoryMap): + self.pipe = None + self._mmap = pipe + self.process_mmap() + else: + Radio.__init__(self, pipe) + + def sync_in(self): + "Initiate a radio-to-PC clone operation" + pass + + def sync_out(self): + "Initiate a PC-to-radio clone operation" + pass + class LiveRadio(Radio): pass
diff -r 925f294665e1 -r 34584e37cb70 chirp/directory.py --- a/chirp/directory.py Fri Apr 06 09:09:33 2012 -0600 +++ b/chirp/directory.py Fri Apr 06 07:13:25 2012 -0700 @@ -99,7 +99,7 @@ filedata = ""
for radio in DRV_TO_RADIO.values(): - if not issubclass(radio, chirp_common.CloneModeRadio): + if not issubclass(radio, chirp_common.FileBackedRadio): continue if radio.match_model(filedata, image_file): return radio(image_file) diff -r 925f294665e1 -r 34584e37cb70 chirp/generic_csv.py --- a/chirp/generic_csv.py Fri Apr 06 09:09:33 2012 -0600 +++ b/chirp/generic_csv.py Fri Apr 06 07:13:25 2012 -0700 @@ -22,7 +22,7 @@ pass
@directory.register -class CSVRadio(chirp_common.CloneModeRadio, chirp_common.IcomDstarSupport): +class CSVRadio(chirp_common.FileBackedRadio, chirp_common.IcomDstarSupport): VENDOR = "Generic" MODEL = "CSV" FILE_EXTENSION = "csv" @@ -57,7 +57,7 @@ self.memories.append(m)
def __init__(self, pipe): - chirp_common.CloneModeRadio.__init__(self, None) + chirp_common.FileBackedRadio.__init__(self, None)
self._filename = pipe if self._filename and os.path.exists(self._filename): diff -r 925f294665e1 -r 34584e37cb70 chirp/xml.py --- a/chirp/xml.py Fri Apr 06 09:09:33 2012 -0600 +++ b/chirp/xml.py Fri Apr 06 07:13:25 2012 -0700 @@ -62,7 +62,7 @@ return banks
@directory.register -class XMLRadio(chirp_common.CloneModeRadio, chirp_common.IcomDstarSupport): +class XMLRadio(chirp_common.FileBackedRadio, chirp_common.IcomDstarSupport): VENDOR = "Generic" MODEL = "XML" FILE_EXTENSION = "chirp" diff -r 925f294665e1 -r 34584e37cb70 chirpui/clone.py --- a/chirpui/clone.py Fri Apr 06 09:09:33 2012 -0600 +++ b/chirpui/clone.py Fri Apr 06 07:13:25 2012 -0700 @@ -65,7 +65,8 @@ def __make_vendor(self, model): vendors = {} for rclass in sorted(directory.DRV_TO_RADIO.values()): - if rclass.VENDOR == "Generic": + if not issubclass(rclass, chirp_common.CloneModeRadio) and \ + not issubclass(rclass, chirp_common.LiveRadio): continue
if not vendors.has_key(rclass.VENDOR):
On Fri, Apr 6, 2012 at 10:19, Dan Smith dsmith@danplanet.com wrote:
Your patch almost worked. There were two little bugs where CloneModeRadio needed to be replaced with FileBackedRadio.
Ah, yep, thanks. So does your last hmk set work as is with this in front of it, or should I wait for another?
Yes, no changes were needed to my last hmk set. It works.
Tom KD7LXL
participants (2)
-
Dan Smith
-
Tom Hayward