[chirp_devel] [PATCH] [BJ9900] Recognize and load baojie dat files

Marco Filippi IZ3GME
Mon Oct 19 09:04:02 PDT 2015


# HG changeset patch
# User Marco Filippi <iz3gme.marco at gmail.com>
# Date 1445270616 -7200
#      Mon Oct 19 18:03:36 2015 +0200
# Node ID 07e6b30ab6107002029ab090ecccb10b2798a979
# Parent  f058a8b7061f9febb79806190175d46e7d0e3092
[BJ9900] Recognize and load baojie dat files

Allow opening dat files of original baojie software simply selecting them from
File-Open menu

refs #1185

diff --git a/chirp/drivers/bj9900.py b/chirp/drivers/bj9900.py
--- a/chirp/drivers/bj9900.py
+++ b/chirp/drivers/bj9900.py
@@ -56,6 +56,13 @@
             chirp_common.PowerLevel("High", watts=40.00)]
 
     _memsize = 0x18F1
+
+    # dat file format is
+    # 2 char per byte hex string
+    # on CR LF terminated lines of 96 char
+    # plus an empty line at the end
+    _datsize = (_memsize * 2) / 96 * 98 + 2
+
     # block are read in same order as original sw eventhough they are not
     # in physical order
     _blocks = [
@@ -184,6 +191,12 @@
             raise errors.RadioError("Failed to communicate with radio: %s" % e)
 
     def process_mmap(self):
+        if len(self._mmap) == self._datsize:
+            self._mmap = memmap.MemoryMap([
+                    chr(int(self._mmap.get(i, 2), 16))
+                    for i in range(0, self._datsize, 2)
+                    if self._mmap.get(i, 2) != "\r\n"
+                    ])
         try:
             self._memobj = bitwise.parse(
                 self.MEM_FORMAT % self._memstart, self._mmap)
@@ -379,7 +392,8 @@
 
     @classmethod
     def match_model(cls, filedata, filename):
-        return len(filedata) == cls._memsize
+        return len(filedata) == cls._memsize or \
+            (len(filedata) == cls._datsize and filedata[-4:] == "\r\n\r\n")
 
 class BJ9900RadioLeft(BJ9900Radio):
     """Baojie BJ-9900 Left VFO subdevice"""



More information about the chirp_devel mailing list