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