# HG changeset patch # User Tom Hayward tom@tomh.us # Date 1474068137 25200 # Fri Sep 16 16:22:17 2016 -0700 # Node ID 45cfb92ddc164dbe01354f43cb68cd970c3eb6f3 # Parent c55eeb0b9a3c898ab1a853272404ab247cccfa0f Add FileWrapperMixin for pulling img data out of 3rd party formats. #3755
diff -r c55eeb0b9a3c -r 45cfb92ddc16 chirp/chirp_common.py --- a/chirp/chirp_common.py Fri Sep 16 16:21:51 2016 -0700 +++ b/chirp/chirp_common.py Fri Sep 16 16:22:17 2016 -0700 @@ -1139,6 +1139,33 @@ return self._mmap
+class FileWrapperMixin: + def load_mmap(self, filename): + """Load the radio's memory map from @filename""" + mapfile = file(filename, "rb") + self._head = mapfile.read(self._headsize) + self._mmap = memmap.MemoryMap(mapfile.read(self._mmapsize)) + self._tail = mapfile.read() + if len(self._tail) != self._tailsize: + raise errors.RadioError("File wrapper is wrong length.") + mapfile.close() + self.process_mmap() + + def save_mmap(self, filename): + """ + try to open a file and write to it + If IOError raise a File Access Error Exception + """ + try: + mapfile = file(filename, "wb") + mapfile.write(self._head) + mapfile.write(self._mmap.get_packed()) + mapfile.write(self._tail) + mapfile.close() + except IOError: + raise Exception("File Access Error") + + 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"""