[chirp_devel] [PATCH] [csv] Read KG-UV Commander CSV files. #1367
Tom Hayward
Fri Jan 10 15:43:32 PST 2014
# HG changeset patch
# User Tom Hayward <tom at tomh.us>
# Date 1389397329 28800
# Node ID bb16a5d953d8170af322b6e3e9284c5bb05dbe4c
# Parent b47ccb638b9bd90927ddf442368dde7df3ad0355
[csv] Read KG-UV Commander CSV files. #1367
diff -r b47ccb638b9b -r bb16a5d953d8 chirp/generic_csv.py
--- a/chirp/generic_csv.py Fri Jan 10 09:50:34 2014 -0800
+++ b/chirp/generic_csv.py Fri Jan 10 15:42:09 2014 -0800
@@ -262,6 +262,89 @@
@directory.register
+class CommanderCSVRadio(CSVRadio):
+ """A driver for reading CSV files generated by KG-UV Commander software"""
+ VENDOR = "Commander"
+ MODEL = "KG-UV"
+ FILE_EXTENSION = "csv"
+
+ MODE_MAP = {
+ "NARR": "NFM",
+ "WIDE": "FM",
+ }
+
+ SCAN_MAP = {
+ "ON": "",
+ "OFF": "S"
+ }
+
+ ATTR_MAP = {
+ "#": (int, "number"),
+ "Name": (str, "name"),
+ "RX Freq": (chirp_common.parse_freq, "freq"),
+ "Scan": (lambda v: CommanderCSVRadio.SCAN_MAP.get(v), "skip"),
+ "TX Dev": (lambda v: CommanderCSVRadio.MODE_MAP.get(v), "mode"),
+ "Group/Notes": (str, "comment"),
+ }
+
+ def _clean_number(self, headers, line, mem):
+ if mem.number == 0:
+ for memory in self.memories:
+ if memory.empty:
+ mem.number = memory.number
+ break
+ return mem
+
+ def _clean_duplex(self, headers, line, mem):
+ try:
+ txfreq = chirp_common.parse_freq(
+ get_datum_by_header(headers, line, "TX Freq"))
+ except ValueError:
+ mem.duplex = "off"
+ return mem
+
+ if mem.freq == txfreq:
+ mem.duplex = ""
+ elif txfreq:
+ mem.duplex = "split"
+ mem.offset = txfreq
+
+ return mem
+
+ def _clean_tmode(self, headers, line, mem):
+ rtone = get_datum_by_header(headers, line, "Encode")
+ ctone = get_datum_by_header(headers, line, "Decode")
+ if rtone == "OFF":
+ rtone = None
+ else:
+ rtone = float(rtone)
+
+ if ctone == "OFF":
+ ctone = None
+ else:
+ ctone = float(ctone)
+
+ if rtone:
+ mem.tmode = "Tone"
+ if ctone:
+ mem.tmode = "TSQL"
+
+ mem.rtone = rtone or 88.5
+ mem.ctone = ctone or mem.rtone
+
+ return mem
+
+ @classmethod
+ def match_model(cls, filedata, filename):
+ """Match files ending in .csv and using Commander column names."""
+ return filename.lower().endswith("." + cls.FILE_EXTENSION) and \
+ filedata.startswith("Name,RX Freq,TX Freq,Decode,Encode,TX Pwr,"
+ "Scan,TX Dev,Busy Lck,Group/Notes") or \
+ filedata.startswith('"#","Name","RX Freq","TX Freq","Decode",'
+ '"Encode","TX Pwr","Scan","TX Dev","Busy Lck","Group/Notes"')
+
+
+ at directory.register
class RTCSVRadio(CSVRadio):
"""A driver for reading CSV files generated by RT Systems software"""
VENDOR = "RT Systems"
More information about the chirp_devel
mailing list