Not really keen on this change; its not as intuitive to me as the original. %> python chirp.py Feels pretty good. > From: zach@mandolincreekfarm.com > To: chirp_devel@intrepid.danplanet.com > Date: Tue, 24 Feb 2015 23:26:46 -0800 > Subject: [chirp_devel] [PATCH 2/9] Rename chirp.py as chirpc (#2343) > > # HG changeset patch > # User Zach Welch > > Rename chirp.py as chirpc (#2343) > > The chirp CLI needs a better name if it ever will be installed in PATH. > It is better to do that early on rather than later. > > diff --git a/chirp.py b/chirp.py > deleted file mode 100755 > index 9e5c59c..0000000 > --- a/chirp.py > +++ /dev/null > @@ -1,297 +0,0 @@ > -#!/usr/bin/env python > -# > -# Copyright 2008 Dan Smith > -# > -# This program is free software: you can redistribute it and/or modify > -# it under the terms of the GNU General Public License as published by > -# the Free Software Foundation, either version 3 of the License, or > -# (at your option) any later version. > -# > -# This program is distributed in the hope that it will be useful, > -# but WITHOUT ANY WARRANTY; without even the implied warranty of > -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -# GNU General Public License for more details. > -# > -# You should have received a copy of the GNU General Public License > -# along with this program. If not, see . > - > - > -import serial > -import sys > -from optparse import OptionParser > -import optparse > - > -from chirp import * > -from chirp import chirp_common, errors, idrp, directory, util > - > -def fail_unsupported(): > - print "Operation not supported by selected radio" > - sys.exit(1) > - > -def fail_missing_mmap(): > - print "mmap-only operation requires specification of an mmap file" > - sys.exit(1) > - > -RADIOS = directory.DRV_TO_RADIO > - > -def store_tone(option, opt, value, parser): > - if value in chirp_common.TONES: > - setattr(parser.values, option.dest, value) > - else: > - raise optparse.OptionValueError("Invalid tone value: %.1f" % value) > - > -def store_dtcs(option, opt, value, parser): > - try: > - value = int(value, 10) > - except ValueError: > - raise optparse.OptionValueError("Invalid DTCS value: %s" % value) > - > - if value in chirp_common.DTCS_CODES: > - setattr(parser.values, option.dest, value) > - else: > - raise optparse.OptionValueError("Invalid DTCS value: %03i" % value) > - > -def store_dtcspol(option, opt, value, parser): > - if value not in ["NN", "RN", "NR", "RR"]: > - raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value) > - > - setattr(parser.values, option.dest, value) > -if __name__ == "__main__": > - parser = OptionParser() > - parser.add_option("-s", "--serial", dest="serial", > - default="mmap", > - help="Serial port (default: mmap)") > - > - parser.add_option("-i", "--id", dest="id", > - default=False, > - action="store_true", > - help="Request radio ID string") > - parser.add_option("", "--raw", dest="raw", > - default=False, > - action="store_true", > - help="Dump raw memory location") > - > - parser.add_option("", "--get-mem", dest="get_mem", > - default=False, > - action="store_true", > - help="Get and print memory location") > - parser.add_option("", "--set-mem-name", dest="set_mem_name", > - default=None, > - help="Set memory name") > - parser.add_option("", "--set-mem-freq", dest="set_mem_freq", > - type="float", > - default=None, > - help="Set memory frequency") > - > - parser.add_option("", "--set-mem-tencon", dest="set_mem_tencon", > - default=False, > - action="store_true", > - help="Set tone encode enabled flag") > - parser.add_option("", "--set-mem-tencoff", dest="set_mem_tencoff", > - default=False, > - action="store_true", > - help="Set tone decode disabled flag") > - parser.add_option("", "--set-mem-tsqlon", dest="set_mem_tsqlon", > - default=False, > - action="store_true", > - help="Set tone squelch enabled flag") > - parser.add_option("", "--set-mem-tsqloff", dest="set_mem_tsqloff", > - default=False, > - action="store_true", > - help="Set tone squelch disabled flag") > - parser.add_option("", "--set-mem-dtcson", dest="set_mem_dtcson", > - default=False, > - action="store_true", > - help="Set DTCS enabled flag") > - parser.add_option("", "--set-mem-dtcsoff", dest="set_mem_dtcsoff", > - default=False, > - action="store_true", > - help="Set DTCS disabled flag") > - > - parser.add_option("", "--set-mem-tenc", dest="set_mem_tenc", > - type="float", > - action="callback", callback=store_tone, nargs=1, > - help="Set memory encode tone") > - parser.add_option("", "--set-mem-tsql", dest="set_mem_tsql", > - type="float", > - action="callback", callback=store_tone, nargs=1, > - help="Set memory squelch tone") > - parser.add_option("", "--set-mem-dtcs", dest="set_mem_dtcs", > - type="string", > - action="callback", callback=store_dtcs, nargs=1, > - help="Set memory DTCS code") > - > - parser.add_option("", "--set-mem-dtcspol", dest="set_mem_dtcspol", > - type="string", > - action="callback", callback=store_dtcspol, nargs=1, > - help="Set memory DTCS polarity (NN, NR, RN, RR)") > - > - parser.add_option("", "--set-mem-dup", dest="set_mem_dup", > - help="Set memory duplex (+,-, or blank)") > - parser.add_option("", "--set-mem-offset", dest="set_mem_offset", > - type="float", > - help="Set memory duplex offset (in MHz)") > - > - parser.add_option("", "--set-mem-mode", dest="set_mem_mode", > - default=None, > - help="Set mode (%s)" % ",".join(chirp_common.MODES)) > - parser.add_option("-r", "--radio", dest="radio", > - default=None, > - help="Radio model (one of %s)" % ",".join(RADIOS.keys())) > - > - parser.add_option("", "--mmap", dest="mmap", > - default=None, > - help="Radio memory map file location") > - parser.add_option("", "--download-mmap", dest="download_mmap", > - action="store_true", > - default=False, > - help="Download memory map from radio") > - parser.add_option("", "--upload-mmap", dest="upload_mmap", > - action="store_true", > - default=False, > - help="Upload memory map to radio") > - if len(sys.argv) <= 1: > - parser.print_help() > - sys.exit(0) > - (options, args) = parser.parse_args() > - > - if options.id: > - from chirp import icf > - > - s = serial.Serial(port=options.serial, > - baudrate=9600, > - timeout=0.5) > - > - md = icf.get_model_data(s) > - > - print "Model:\n%s" % util.hexprint(md) > - > - sys.exit(0) > - > - if not options.radio: > - if options.mmap: > - rclass = directory.get_radio_by_image(options.mmap).__class__ > - else: > - print "Must specify a radio model" > - sys.exit(1) > - else: > - rclass = directory.get_radio(options.radio) > - > - if options.serial == "mmap": > - if options.mmap: > - s = options.mmap > - else: > - s = options.radio + ".img" > - else: > - print "opening %s at %i" % (options.serial, rclass.BAUD_RATE) > - s = serial.Serial(port=options.serial, > - baudrate=rclass.BAUD_RATE, > - timeout=0.5) > - > - radio = rclass(s) > - > - if options.raw: > - data = radio.get_raw_memory(int(args[0])) > - for i in data: > - if ord(i)> 0x7F: > - print "Memory location %i (%i):\n%s" % (int(args[0]), > - len(data), > - util.hexprint(data)) > - sys.exit(0) > - print data > - sys.exit(0) > - > - if options.set_mem_dup is not None: > - if options.set_mem_dup != "+" and \ > - options.set_mem_dup != "-" and \ > - options.set_mem_dup != "": > - print "Invalid duplex value `%s'" % options.set_mem_dup > - print "Valid values are: '+', '-', ''" > - sys.exit(1) > - else: > - _dup = options.set_mem_dup > - else: > - _dup = None > - > - if options.set_mem_mode: > - print "Set mode: %s" % options.set_mem_mode > - if options.set_mem_mode not in chirp_common.MODES: > - print "Invalid mode `%s'" > - sys.exit(1) > - else: > - _mode = options.set_mem_mode > - else: > - _mode = None > - > - if options.set_mem_name or options.set_mem_freq or \ > - options.set_mem_tencon or options.set_mem_tencoff or \ > - options.set_mem_tsqlon or options.set_mem_tsqloff or \ > - options.set_mem_dtcson or options.set_mem_dtcsoff or \ > - options.set_mem_tenc or options.set_mem_tsql or options.set_mem_dtcs or\ > - options.set_mem_dup is not None or \ > - options.set_mem_mode or options.set_mem_dtcspol or\ > - options.set_mem_offset: > - try: > - mem = radio.get_memory(int(args[0])) > - except errors.InvalidMemoryLocation: > - mem = chirp_common.Memory() > - mem.number = int(args[0]) > - > - mem.name = options.set_mem_name or mem.name > - mem.freq = options.set_mem_freq or mem.freq > - mem.rtone = options.set_mem_tenc or mem.rtone > - mem.ctone = options.set_mem_tsql or mem.ctone > - mem.dtcs = options.set_mem_dtcs or mem.dtcs > - mem.dtcs_polarity = options.set_mem_dtcspol or mem.dtcs_polarity > - if _dup is not None: > - mem.duplex = _dup > - mem.offset = options.set_mem_offset or mem.offset > - mem.mode = _mode or mem.mode > - > - if options.set_mem_tencon: > - mem.tencEnabled = True > - elif options.set_mem_tencoff: > - mem.tencEnabled = False > - > - if options.set_mem_tsqlon: > - mem.tsqlEnabled = True > - elif options.set_mem_tsqloff: > - mem.tsqlEnabled = False > - > - if options.set_mem_dtcson: > - mem.dtcsEnabled = True > - elif options.set_mem_dtcsoff: > - mem.dtcsEnabled = False > - > - radio.set_memory(mem) > - > - if options.get_mem: > - try: > - pos = int(args[0]) > - except ValueError: > - pos = args[0] > - > - try: > - mem = radio.get_memory(pos) > - except errors.InvalidMemoryLocation, e: > - mem = chirp_common.Memory() > - mem.number = pos > - > - print mem > - > - if options.download_mmap: > - #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported() > - radio.sync_in() > - radio.save_mmap(options.mmap) > - > - if options.upload_mmap: > - #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported() > - radio.load_mmap(options.mmap) > - if radio.sync_out(): > - print "Clone successful" > - else: > - print "Clone failed" > - > - if options.mmap and isinstance(radio, chirp_common.CloneModeRadio): > - radio.save_mmap(options.mmap) > - > diff --git a/chirpc b/chirpc > new file mode 100755 > index 0000000..9e5c59c > --- /dev/null > +++ b/chirpc > @@ -0,0 +1,297 @@ > +#!/usr/bin/env python > +# > +# Copyright 2008 Dan Smith > +# > +# This program is free software: you can redistribute it and/or modify > +# it under the terms of the GNU General Public License as published by > +# the Free Software Foundation, either version 3 of the License, or > +# (at your option) any later version. > +# > +# This program is distributed in the hope that it will be useful, > +# but WITHOUT ANY WARRANTY; without even the implied warranty of > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +# GNU General Public License for more details. > +# > +# You should have received a copy of the GNU General Public License > +# along with this program. If not, see . > + > + > +import serial > +import sys > +from optparse import OptionParser > +import optparse > + > +from chirp import * > +from chirp import chirp_common, errors, idrp, directory, util > + > +def fail_unsupported(): > + print "Operation not supported by selected radio" > + sys.exit(1) > + > +def fail_missing_mmap(): > + print "mmap-only operation requires specification of an mmap file" > + sys.exit(1) > + > +RADIOS = directory.DRV_TO_RADIO > + > +def store_tone(option, opt, value, parser): > + if value in chirp_common.TONES: > + setattr(parser.values, option.dest, value) > + else: > + raise optparse.OptionValueError("Invalid tone value: %.1f" % value) > + > +def store_dtcs(option, opt, value, parser): > + try: > + value = int(value, 10) > + except ValueError: > + raise optparse.OptionValueError("Invalid DTCS value: %s" % value) > + > + if value in chirp_common.DTCS_CODES: > + setattr(parser.values, option.dest, value) > + else: > + raise optparse.OptionValueError("Invalid DTCS value: %03i" % value) > + > +def store_dtcspol(option, opt, value, parser): > + if value not in ["NN", "RN", "NR", "RR"]: > + raise optparse.OptionValueError("Invaid DTCS polarity: %s" % value) > + > + setattr(parser.values, option.dest, value) > +if __name__ == "__main__": > + parser = OptionParser() > + parser.add_option("-s", "--serial", dest="serial", > + default="mmap", > + help="Serial port (default: mmap)") > + > + parser.add_option("-i", "--id", dest="id", > + default=False, > + action="store_true", > + help="Request radio ID string") > + parser.add_option("", "--raw", dest="raw", > + default=False, > + action="store_true", > + help="Dump raw memory location") > + > + parser.add_option("", "--get-mem", dest="get_mem", > + default=False, > + action="store_true", > + help="Get and print memory location") > + parser.add_option("", "--set-mem-name", dest="set_mem_name", > + default=None, > + help="Set memory name") > + parser.add_option("", "--set-mem-freq", dest="set_mem_freq", > + type="float", > + default=None, > + help="Set memory frequency") > + > + parser.add_option("", "--set-mem-tencon", dest="set_mem_tencon", > + default=False, > + action="store_true", > + help="Set tone encode enabled flag") > + parser.add_option("", "--set-mem-tencoff", dest="set_mem_tencoff", > + default=False, > + action="store_true", > + help="Set tone decode disabled flag") > + parser.add_option("", "--set-mem-tsqlon", dest="set_mem_tsqlon", > + default=False, > + action="store_true", > + help="Set tone squelch enabled flag") > + parser.add_option("", "--set-mem-tsqloff", dest="set_mem_tsqloff", > + default=False, > + action="store_true", > + help="Set tone squelch disabled flag") > + parser.add_option("", "--set-mem-dtcson", dest="set_mem_dtcson", > + default=False, > + action="store_true", > + help="Set DTCS enabled flag") > + parser.add_option("", "--set-mem-dtcsoff", dest="set_mem_dtcsoff", > + default=False, > + action="store_true", > + help="Set DTCS disabled flag") > + > + parser.add_option("", "--set-mem-tenc", dest="set_mem_tenc", > + type="float", > + action="callback", callback=store_tone, nargs=1, > + help="Set memory encode tone") > + parser.add_option("", "--set-mem-tsql", dest="set_mem_tsql", > + type="float", > + action="callback", callback=store_tone, nargs=1, > + help="Set memory squelch tone") > + parser.add_option("", "--set-mem-dtcs", dest="set_mem_dtcs", > + type="string", > + action="callback", callback=store_dtcs, nargs=1, > + help="Set memory DTCS code") > + > + parser.add_option("", "--set-mem-dtcspol", dest="set_mem_dtcspol", > + type="string", > + action="callback", callback=store_dtcspol, nargs=1, > + help="Set memory DTCS polarity (NN, NR, RN, RR)") > + > + parser.add_option("", "--set-mem-dup", dest="set_mem_dup", > + help="Set memory duplex (+,-, or blank)") > + parser.add_option("", "--set-mem-offset", dest="set_mem_offset", > + type="float", > + help="Set memory duplex offset (in MHz)") > + > + parser.add_option("", "--set-mem-mode", dest="set_mem_mode", > + default=None, > + help="Set mode (%s)" % ",".join(chirp_common.MODES)) > + parser.add_option("-r", "--radio", dest="radio", > + default=None, > + help="Radio model (one of %s)" % ",".join(RADIOS.keys())) > + > + parser.add_option("", "--mmap", dest="mmap", > + default=None, > + help="Radio memory map file location") > + parser.add_option("", "--download-mmap", dest="download_mmap", > + action="store_true", > + default=False, > + help="Download memory map from radio") > + parser.add_option("", "--upload-mmap", dest="upload_mmap", > + action="store_true", > + default=False, > + help="Upload memory map to radio") > + if len(sys.argv) <= 1: > + parser.print_help() > + sys.exit(0) > + (options, args) = parser.parse_args() > + > + if options.id: > + from chirp import icf > + > + s = serial.Serial(port=options.serial, > + baudrate=9600, > + timeout=0.5) > + > + md = icf.get_model_data(s) > + > + print "Model:\n%s" % util.hexprint(md) > + > + sys.exit(0) > + > + if not options.radio: > + if options.mmap: > + rclass = directory.get_radio_by_image(options.mmap).__class__ > + else: > + print "Must specify a radio model" > + sys.exit(1) > + else: > + rclass = directory.get_radio(options.radio) > + > + if options.serial == "mmap": > + if options.mmap: > + s = options.mmap > + else: > + s = options.radio + ".img" > + else: > + print "opening %s at %i" % (options.serial, rclass.BAUD_RATE) > + s = serial.Serial(port=options.serial, > + baudrate=rclass.BAUD_RATE, > + timeout=0.5) > + > + radio = rclass(s) > + > + if options.raw: > + data = radio.get_raw_memory(int(args[0])) > + for i in data: > + if ord(i)> 0x7F: > + print "Memory location %i (%i):\n%s" % (int(args[0]), > + len(data), > + util.hexprint(data)) > + sys.exit(0) > + print data > + sys.exit(0) > + > + if options.set_mem_dup is not None: > + if options.set_mem_dup != "+" and \ > + options.set_mem_dup != "-" and \ > + options.set_mem_dup != "": > + print "Invalid duplex value `%s'" % options.set_mem_dup > + print "Valid values are: '+', '-', ''" > + sys.exit(1) > + else: > + _dup = options.set_mem_dup > + else: > + _dup = None > + > + if options.set_mem_mode: > + print "Set mode: %s" % options.set_mem_mode > + if options.set_mem_mode not in chirp_common.MODES: > + print "Invalid mode `%s'" > + sys.exit(1) > + else: > + _mode = options.set_mem_mode > + else: > + _mode = None > + > + if options.set_mem_name or options.set_mem_freq or \ > + options.set_mem_tencon or options.set_mem_tencoff or \ > + options.set_mem_tsqlon or options.set_mem_tsqloff or \ > + options.set_mem_dtcson or options.set_mem_dtcsoff or \ > + options.set_mem_tenc or options.set_mem_tsql or options.set_mem_dtcs or\ > + options.set_mem_dup is not None or \ > + options.set_mem_mode or options.set_mem_dtcspol or\ > + options.set_mem_offset: > + try: > + mem = radio.get_memory(int(args[0])) > + except errors.InvalidMemoryLocation: > + mem = chirp_common.Memory() > + mem.number = int(args[0]) > + > + mem.name = options.set_mem_name or mem.name > + mem.freq = options.set_mem_freq or mem.freq > + mem.rtone = options.set_mem_tenc or mem.rtone > + mem.ctone = options.set_mem_tsql or mem.ctone > + mem.dtcs = options.set_mem_dtcs or mem.dtcs > + mem.dtcs_polarity = options.set_mem_dtcspol or mem.dtcs_polarity > + if _dup is not None: > + mem.duplex = _dup > + mem.offset = options.set_mem_offset or mem.offset > + mem.mode = _mode or mem.mode > + > + if options.set_mem_tencon: > + mem.tencEnabled = True > + elif options.set_mem_tencoff: > + mem.tencEnabled = False > + > + if options.set_mem_tsqlon: > + mem.tsqlEnabled = True > + elif options.set_mem_tsqloff: > + mem.tsqlEnabled = False > + > + if options.set_mem_dtcson: > + mem.dtcsEnabled = True > + elif options.set_mem_dtcsoff: > + mem.dtcsEnabled = False > + > + radio.set_memory(mem) > + > + if options.get_mem: > + try: > + pos = int(args[0]) > + except ValueError: > + pos = args[0] > + > + try: > + mem = radio.get_memory(pos) > + except errors.InvalidMemoryLocation, e: > + mem = chirp_common.Memory() > + mem.number = pos > + > + print mem > + > + if options.download_mmap: > + #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported() > + radio.sync_in() > + radio.save_mmap(options.mmap) > + > + if options.upload_mmap: > + #isinstance(radio, chirp_common.IcomMmapRadio) or fail_unsupported() > + radio.load_mmap(options.mmap) > + if radio.sync_out(): > + print "Clone successful" > + else: > + print "Clone failed" > + > + if options.mmap and isinstance(radio, chirp_common.CloneModeRadio): > + radio.save_mmap(options.mmap) > + > > _______________________________________________ > chirp_devel mailing list > chirp_devel@intrepid.danplanet.com > http://intrepid.danplanet.com/mailman/listinfo/chirp_devel > Developer docs: http://chirp.danplanet.com/projects/chirp/wiki/Developers