aboutsummaryrefslogtreecommitdiff
path: root/share
diff options
context:
space:
mode:
authorMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
committerMatthew Poletiek <matthew.poletiek@gmail.com>2020-12-08 21:03:16 -0600
commite99416456afd4aa8bde42016826f9a345291cbf3 (patch)
treea7a95639cd1cb5dbe2d91a2ca8e8defafac4296d /share
parent194cf4e5e0b6a2811103a9b739a72b9afe2b886c (diff)
downloadchirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.gz
chirp-e99416456afd4aa8bde42016826f9a345291cbf3.tar.xz
Initial Commit
Diffstat (limited to 'share')
-rw-r--r--share/chirp.desktop13
-rw-r--r--share/chirp.icnsbin0 -> 80528 bytes
-rwxr-xr-xshare/chirp.icobin0 -> 119911 bytes
-rw-r--r--share/chirp.pngbin0 -> 9687 bytes
-rw-r--r--share/chirp.svg224
-rw-r--r--share/chirpw.146
-rw-r--r--share/contrib/chirp.rnc28
-rw-r--r--share/contrib/chirp.rng58
-rw-r--r--share/contrib/chirp_banks.rnc3
-rw-r--r--share/contrib/chirp_banks.rng11
-rw-r--r--share/contrib/chirp_memory.rnc64
-rw-r--r--share/contrib/chirp_memory.rng193
-rwxr-xr-xshare/make_supported.py178
13 files changed, 818 insertions, 0 deletions
diff --git a/share/chirp.desktop b/share/chirp.desktop
new file mode 100644
index 0000000..966e2a0
--- /dev/null
+++ b/share/chirp.desktop
@@ -0,0 +1,13 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Name=CHIRP
+GenericName=Radio Programming Tool
+Comment=Program amateur radios
+Icon=chirp
+Exec=chirpw %F
+Terminal=false
+MimeType=inode/directory
+Categories=Utility;HamRadio
+Keywords=Hamradio;Programming;Handheld;Radio;Amateur;Programmer
+StartupNotify=true
diff --git a/share/chirp.icns b/share/chirp.icns
new file mode 100644
index 0000000..2ac96be
--- /dev/null
+++ b/share/chirp.icns
Binary files differ
diff --git a/share/chirp.ico b/share/chirp.ico
new file mode 100755
index 0000000..4006ff9
--- /dev/null
+++ b/share/chirp.ico
Binary files differ
diff --git a/share/chirp.png b/share/chirp.png
new file mode 100644
index 0000000..fe57c1a
--- /dev/null
+++ b/share/chirp.png
Binary files differ
diff --git a/share/chirp.svg b/share/chirp.svg
new file mode 100644
index 0000000..38d0d05
--- /dev/null
+++ b/share/chirp.svg
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="256"
+ height="256"
+ id="svg3773"
+ version="1.1"
+ inkscape:version="0.48.0 r9654"
+ sodipodi:docname="icon.svg"
+ inkscape:export-filename="/home/dan/chirp/share/chirp_icon.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs3775">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4534">
+ <stop
+ style="stop-color:#cccccc;stop-opacity:1;"
+ offset="0"
+ id="stop4536" />
+ <stop
+ style="stop-color:#cccccc;stop-opacity:0;"
+ offset="1"
+ id="stop4538" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective3781" />
+ <inkscape:perspective
+ id="perspective3791"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <inkscape:perspective
+ id="perspective3918"
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+ inkscape:vp_z="1 : 0.5 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_x="0 : 0.5 : 1"
+ sodipodi:type="inkscape:persp3d" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4534"
+ id="linearGradient4540"
+ x1="53.92857"
+ y1="895.57648"
+ x2="258.29047"
+ y2="978.07648"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1149719,0,0,1.1149719,-14.716407,-106.21001)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4534"
+ id="linearGradient4581"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1149719,0,0,1.1149719,-14.716407,-106.21001)"
+ x1="53.92857"
+ y1="895.57648"
+ x2="258.29047"
+ y2="978.07648" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4534"
+ id="linearGradient3870"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.1149719,0,0,1.1149719,-14.716406,-105.63857)"
+ x1="53.92857"
+ y1="895.57648"
+ x2="258.29047"
+ y2="978.07648" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.979899"
+ inkscape:cx="111.6916"
+ inkscape:cy="154.81709"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1111"
+ inkscape:window-height="898"
+ inkscape:window-x="1"
+ inkscape:window-y="51"
+ inkscape:window-maximized="0"
+ borderlayer="true" />
+ <metadata
+ id="metadata3778">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-796.36218)">
+ <rect
+ ry="15.791736"
+ y="873.21082"
+ x="1.2642059"
+ height="102.30268"
+ width="253.47159"
+ id="rect3872"
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.23044455000000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+ <rect
+ style="fill:url(#linearGradient3870);fill-opacity:1;stroke:#000000;stroke-width:1.23044455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="rect2898"
+ width="253.47159"
+ height="102.30268"
+ x="1.2642059"
+ y="873.21082"
+ ry="15.791736" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#999999;fill-opacity:1;stroke:#000000;stroke-width:1.23044455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 176.78712,885.35647 c -33.62642,0.1389 -67.25587,-0.18333 -100.880357,0.1862 -10.307609,1.15201 -19.345272,9.79377 -20.699091,20.10844 -0.734857,7.05609 0.897593,14.58458 1.473236,21.58057 0.575642,6.99598 2.096299,13.83094 4.182258,19.70411 3.479417,9.79656 6.451804,11.97487 16.555151,16.29131 7.142428,0.37214 13.943255,0.28453 21.089461,0.46476 27.657372,-0.0642 53.912612,-1.19078 81.567102,-1.59673 10.50595,-5.2167 13.89795,-6.89364 18.02695,-17.49826 1.87897,-7.32651 3.80822,-16.77839 4.02861,-24.11121 0.009,-5.82937 0.31554,-11.74161 -0.81517,-17.4877 -2.45934,-9.1155 -10.69152,-16.42239 -20.14851,-17.42617 -1.43779,-0.21495 -2.92033,-0.22722 -4.37962,-0.21532 z"
+ id="rect2830"
+ sodipodi:nodetypes="ccczscccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#59aab2;fill-opacity:1;stroke:#000000;stroke-width:1.23044455;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ d="m 177.85993,889.75915 c -34.19435,0.32943 -68.39927,-0.43608 -102.586798,0.42688 -6.581373,1.02477 -12.230044,5.96703 -14.624589,12.10443 -1.284683,3.33332 -1.417022,6.99701 -1.014183,10.53154 0.538398,7.49048 1.640967,14.91401 2.648463,22.35103 1.207501,6.2585 2.930373,12.62821 6.648149,17.88864 2.721379,2.88972 6.415636,4.83199 10.246351,5.75465 4.307496,0.36597 8.637278,0.11598 12.951316,0.33184 28.885631,0.36595 57.750051,-1.08191 86.627201,-1.48002 2.83271,-1.09459 5.46743,-2.62236 8.0348,-4.2381 3.3277,-2.36475 5.74082,-5.93039 6.84205,-9.85432 2.19763,-6.55876 3.08044,-13.48374 3.81607,-20.33915 0.52396,-6.74433 0.69701,-13.6319 -0.80149,-20.26168 -2.52836,-7.83335 -10.57852,-13.40621 -18.78734,-13.21574 z"
+ id="path3672" />
+ <text
+ xml:space="preserve"
+ style="font-size:17.71840286px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:BankGothic Md BT;-inkscape-font-specification:BankGothic Md BT Bold"
+ x="77.551765"
+ y="917.85834"
+ id="text3710"><tspan
+ sodipodi:role="line"
+ id="tspan3712"
+ x="77.551765"
+ y="917.85834"
+ dx="0 0 -0.70311111 0 4.2186675 0 4.9217787 0 1.0546669"
+ style="font-size:20.91755867px">c h i r p</tspan></text>
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3716"
+ sodipodi:cx="-634.28571"
+ sodipodi:cy="583.79077"
+ sodipodi:rx="74.285713"
+ sodipodi:ry="74.285713"
+ d="m -559.99999,583.79077 a 74.285713,74.285713 0 1 1 -148.57143,0 74.285713,74.285713 0 1 1 148.57143,0 z"
+ transform="matrix(0.12304446,0,0,0.12304446,104.62155,854.11197)" />
+ <path
+ transform="matrix(0.12304446,0,0,0.12304446,309.93003,852.31903)"
+ d="m -559.99999,583.79077 a 74.285713,74.285713 0 1 1 -148.57143,0 74.285713,74.285713 0 1 1 148.57143,0 z"
+ sodipodi:ry="74.285713"
+ sodipodi:rx="74.285713"
+ sodipodi:cy="583.79077"
+ sodipodi:cx="-634.28571"
+ id="path3718"
+ style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path3741"
+ sodipodi:cx="-48.57143"
+ sodipodi:cy="689.50507"
+ sodipodi:rx="28.571428"
+ sodipodi:ry="28.571428"
+ d="m -20.000002,689.50507 a 28.571428,28.571428 0 1 1 -57.142857,0 28.571428,28.571428 0 1 1 57.142857,0 z"
+ transform="matrix(0.12304446,0,0,0.12304446,100.75445,851.65107)" />
+ <path
+ transform="matrix(0.12304446,0,0,0.12304446,123.39463,851.65107)"
+ d="m -20.000002,689.50507 a 28.571428,28.571428 0 1 1 -57.142857,0 28.571428,28.571428 0 1 1 57.142857,0 z"
+ sodipodi:ry="28.571428"
+ sodipodi:rx="28.571428"
+ sodipodi:cy="689.50507"
+ sodipodi:cx="-48.57143"
+ id="path3743"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ transform="matrix(0.12304446,0,0,0.12304446,168.92106,851.65107)"
+ d="m -20.000002,689.50507 a 28.571428,28.571428 0 1 1 -57.142857,0 28.571428,28.571428 0 1 1 57.142857,0 z"
+ sodipodi:ry="28.571428"
+ sodipodi:rx="28.571428"
+ sodipodi:cy="689.50507"
+ sodipodi:cx="-48.57143"
+ id="path3747"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:type="arc"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+ id="path4566"
+ sodipodi:cx="-48.57143"
+ sodipodi:cy="689.50507"
+ sodipodi:rx="28.571428"
+ sodipodi:ry="28.571428"
+ d="m -20.000002,689.50507 a 28.571428,28.571428 0 1 1 -57.142857,0 28.571428,28.571428 0 1 1 57.142857,0 z"
+ transform="matrix(0.12304446,0,0,0.12304446,145.69407,851.65107)" />
+ </g>
+</svg>
diff --git a/share/chirpw.1 b/share/chirpw.1
new file mode 100644
index 0000000..ba9b9e8
--- /dev/null
+++ b/share/chirpw.1
@@ -0,0 +1,46 @@
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH CHIRP 1 "February 12, 2011"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+chirpw \- A tool for programming two-way radio equipment
+.SH SYNOPSIS
+.B chirpw
+.RI [ options ]
+.br
+.SH DESCRIPTION
+This manual page documents briefly the
+.B chirpw
+command.
+.PP
+\fBchirpw\fP is a tool for programming two-way radio equipment
+It provides a generic user interface to the programming data and
+process that can drive many radio models under the hood.
+.SH OPTIONS
+This program follows the usual GNU command line syntax, with long
+options starting with two dashes (`--').
+A summary of options is included below.
+.TP
+.B \-\-help
+Show summary of options.
+.TP
+.B \-\-profile
+Enable Profiling.
+.SH AUTHOR
+chirpw was written by Dan Smith.
+.PP
+This manual page was written by Dan Smith (with help from Steve Conklin),
+for the Debian project (and may be used by others).
diff --git a/share/contrib/chirp.rnc b/share/contrib/chirp.rnc
new file mode 100644
index 0000000..6ea2715
--- /dev/null
+++ b/share/contrib/chirp.rnc
@@ -0,0 +1,28 @@
+#
+# CHIRP XML Schema
+# Copyright 2008 Dan Smith <dsmith@danplanet.com>
+#
+
+include "chirp_memory.rnc"
+include "chirp_banks.rnc"
+
+start = radio
+
+radio = element radio {
+ attribute version { chirpSchemaVersionType }?,
+ comment?,
+ memories,
+ banks
+}
+
+comment = element comment { xsd:string }?
+
+memories = element memories {
+ element memory { memoryType }*
+}
+
+banks = element banks {
+ element bank { bankType }*
+}
+
+chirpSchemaVersionType = xsd:string { pattern = "[0-9][0-9]*.[0-9][0-9]*.[0-9]{1,4}" }
diff --git a/share/contrib/chirp.rng b/share/contrib/chirp.rng
new file mode 100644
index 0000000..d6020e5
--- /dev/null
+++ b/share/contrib/chirp.rng
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!--
+
+ CHIRP XML Schema
+ Copyright 2008 Dan Smith <dsmith@danplanet.com>
+
+ -->
+ <include href="chirp_memory.rng"/>
+ <include href="chirp_banks.rng"/>
+ <start>
+ <ref name="radio"/>
+ </start>
+ <define name="radio">
+ <element name="radio">
+ <optional>
+ <attribute name="version">
+ <ref name="chirpSchemaVersionType"/>
+ </attribute>
+ </optional>
+ <optional>
+ <ref name="comment"/>
+ </optional>
+ <ref name="memories"/>
+ <ref name="banks"/>
+ </element>
+ </define>
+ <define name="comment">
+ <optional>
+ <element name="comment">
+ <data type="string"/>
+ </element>
+ </optional>
+ </define>
+ <define name="memories">
+ <element name="memories">
+ <zeroOrMore>
+ <element name="memory">
+ <ref name="memoryType"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="banks">
+ <element name="banks">
+ <zeroOrMore>
+ <element name="bank">
+ <ref name="bankType"/>
+ </element>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="chirpSchemaVersionType">
+ <data type="string">
+ <param name="pattern">[0-9][0-9]*.[0-9][0-9]*.[0-9]{1,4}</param>
+ </data>
+ </define>
+</grammar>
diff --git a/share/contrib/chirp_banks.rnc b/share/contrib/chirp_banks.rnc
new file mode 100644
index 0000000..d832539
--- /dev/null
+++ b/share/contrib/chirp_banks.rnc
@@ -0,0 +1,3 @@
+bankType =
+ attribute id { xsd:nonNegativeInteger },
+ attribute label { xsd:string }
diff --git a/share/contrib/chirp_banks.rng b/share/contrib/chirp_banks.rng
new file mode 100644
index 0000000..fa25081
--- /dev/null
+++ b/share/contrib/chirp_banks.rng
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <define name="bankType">
+ <attribute name="id">
+ <data type="nonNegativeInteger"/>
+ </attribute>
+ <attribute name="label">
+ <data type="string"/>
+ </attribute>
+ </define>
+</grammar>
diff --git a/share/contrib/chirp_memory.rnc b/share/contrib/chirp_memory.rnc
new file mode 100644
index 0000000..ad7ee2e
--- /dev/null
+++ b/share/contrib/chirp_memory.rnc
@@ -0,0 +1,64 @@
+memoryType =
+ attribute location { xsd:nonNegativeInteger }?,
+ shortName,
+ longName?,
+ frequency,
+ SquelchList,
+ squelchSetting?,
+ duplex,
+ offset,
+ mode,
+ tuningStep,
+ skip?,
+ bank?,
+ dv?
+
+shortName = element shortName { xsd:string { pattern = "[A-Z0-9/ >\-]{0,6}" } }
+
+frequencyType =
+ attribute units { "Hz" | "kHz" | "MHz" | "GHz" },
+ xsd:decimal
+
+longName = element longName { xsd:string { pattern = "[.A-Za-z0-9/ >\-]{0,16}" } }
+
+frequency = element frequency { frequencyType }
+
+SquelchList =
+ element squelch { squelchType }?,
+ element squelch { squelchType }?,
+ element squelch { squelchType }?
+
+squelchType =
+ element tone { xsd:decimal { minInclusive = "67.0" maxInclusive = "254.1" } }?, # could also use enumeration
+ element code { xsd:positiveInteger }?,
+ element polarity { xsd:string { pattern = "[RN]{2}" } }?,
+ attribute id { text }?,
+ attribute type { text }?
+
+offset = element offset { frequencyType }
+
+tuningStep = element tuningStep { frequencyType }
+
+squelchSetting = element squelchSetting { xsd:string }
+
+duplex = element duplex { "positive" | "negative" | "none" }
+
+mode = element mode { "FM" | "NFM" | "WFM" | "AM" | "NAM" | "DV" }
+
+dv = element dv {
+ element urcall { callsignType },
+ element rpt1call { callsignType },
+ element rpt2call { callsignType },
+ element digitalCode { digitalCodeType }?
+}
+
+callsignType = xsd:string { pattern = "[A-Z0-9/ ]*" }
+
+digitalCodeType = xsd:integer { minInclusive = "0" }
+
+skip = element skip { "S" | "P" | "" }
+
+bank = element bank {
+ attribute bankId { xsd:nonNegativeInteger },
+ attribute bankIndex { xsd:nonNegativeInteger }?
+}
diff --git a/share/contrib/chirp_memory.rng b/share/contrib/chirp_memory.rng
new file mode 100644
index 0000000..0d88eac
--- /dev/null
+++ b/share/contrib/chirp_memory.rng
@@ -0,0 +1,193 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <define name="memoryType">
+ <optional>
+ <attribute name="location">
+ <data type="nonNegativeInteger"/>
+ </attribute>
+ </optional>
+ <ref name="shortName"/>
+ <optional>
+ <ref name="longName"/>
+ </optional>
+ <ref name="frequency"/>
+ <ref name="SquelchList"/>
+ <optional>
+ <ref name="squelchSetting"/>
+ </optional>
+ <ref name="duplex"/>
+ <ref name="offset"/>
+ <ref name="mode"/>
+ <ref name="tuningStep"/>
+ <optional>
+ <ref name="skip"/>
+ </optional>
+ <optional>
+ <ref name="bank"/>
+ </optional>
+ <optional>
+ <ref name="dv"/>
+ </optional>
+ </define>
+ <define name="shortName">
+ <element name="shortName">
+ <data type="string">
+ <param name="pattern">[A-Z0-9/ &gt;\-]{0,6}</param>
+ </data>
+ </element>
+ </define>
+ <define name="frequencyType">
+ <attribute name="units">
+ <choice>
+ <value>Hz</value>
+ <value>kHz</value>
+ <value>MHz</value>
+ <value>GHz</value>
+ </choice>
+ </attribute>
+ <data type="decimal"/>
+ </define>
+ <define name="longName">
+ <element name="longName">
+ <data type="string">
+ <param name="pattern">[.A-Za-z0-9/ &gt;\-]{0,16}</param>
+ </data>
+ </element>
+ </define>
+ <define name="frequency">
+ <element name="frequency">
+ <ref name="frequencyType"/>
+ </element>
+ </define>
+ <define name="SquelchList">
+ <optional>
+ <element name="squelch">
+ <ref name="squelchType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="squelch">
+ <ref name="squelchType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="squelch">
+ <ref name="squelchType"/>
+ </element>
+ </optional>
+ </define>
+ <define name="squelchType">
+ <optional>
+ <element name="tone">
+ <data type="decimal">
+ <param name="minInclusive">67.0</param>
+ <param name="maxInclusive">254.1</param>
+ </data>
+ </element>
+ </optional>
+ <optional>
+ <!-- could also use enumeration -->
+ <element name="code">
+ <data type="positiveInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="polarity">
+ <data type="string">
+ <param name="pattern">[RN]{2}</param>
+ </data>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="id"/>
+ </optional>
+ <optional>
+ <attribute name="type"/>
+ </optional>
+ </define>
+ <define name="offset">
+ <element name="offset">
+ <ref name="frequencyType"/>
+ </element>
+ </define>
+ <define name="tuningStep">
+ <element name="tuningStep">
+ <ref name="frequencyType"/>
+ </element>
+ </define>
+ <define name="squelchSetting">
+ <element name="squelchSetting">
+ <data type="string"/>
+ </element>
+ </define>
+ <define name="duplex">
+ <element name="duplex">
+ <choice>
+ <value>positive</value>
+ <value>negative</value>
+ <value>none</value>
+ </choice>
+ </element>
+ </define>
+ <define name="mode">
+ <element name="mode">
+ <choice>
+ <value>FM</value>
+ <value>NFM</value>
+ <value>WFM</value>
+ <value>AM</value>
+ <value>NAM</value>
+ <value>DV</value>
+ </choice>
+ </element>
+ </define>
+ <define name="dv">
+ <element name="dv">
+ <element name="urcall">
+ <ref name="callsignType"/>
+ </element>
+ <element name="rpt1call">
+ <ref name="callsignType"/>
+ </element>
+ <element name="rpt2call">
+ <ref name="callsignType"/>
+ </element>
+ <optional>
+ <element name="digitalCode">
+ <ref name="digitalCodeType"/>
+ </element>
+ </optional>
+ </element>
+ </define>
+ <define name="callsignType">
+ <data type="string">
+ <param name="pattern">[A-Z0-9/ ]*</param>
+ </data>
+ </define>
+ <define name="digitalCodeType">
+ <data type="integer">
+ <param name="minInclusive">0</param>
+ </data>
+ </define>
+ <define name="skip">
+ <element name="skip">
+ <choice>
+ <value>S</value>
+ <value>P</value>
+ <value/>
+ </choice>
+ </element>
+ </define>
+ <define name="bank">
+ <element name="bank">
+ <attribute name="bankId">
+ <data type="nonNegativeInteger"/>
+ </attribute>
+ <optional>
+ <attribute name="bankIndex">
+ <data type="nonNegativeInteger"/>
+ </attribute>
+ </optional>
+ </element>
+ </define>
+</grammar>
diff --git a/share/make_supported.py b/share/make_supported.py
new file mode 100755
index 0000000..67ecebd
--- /dev/null
+++ b/share/make_supported.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+
+import sys
+import serial
+
+sys.path.insert(0, ".")
+sys.path.insert(0, "..")
+
+tmp = sys.stdout
+sys.stdout = sys.stderr
+from chirp import *
+from chirp.drivers import *
+sys.stdout = tmp
+
+RF = chirp_common.RadioFeatures()
+KEYS = [x for x in sorted(RF.__dict__.keys())
+ if "_" in x and not x.startswith("_")]
+
+RADIO_TYPES = {
+ 'Clone': chirp_common.CloneModeRadio,
+ 'File': chirp_common.FileBackedRadio,
+ 'Live': chirp_common.LiveRadio,
+}
+
+
+counter = 0
+
+def radio_type(radio):
+ for k, v in RADIO_TYPES.items():
+ if isinstance(radio, v):
+ return k
+ return ""
+
+
+def supported_row(radio):
+ global counter
+ counter += 1
+ odd = counter % 2
+
+ row = '<tr class="%s" title="%s %s %s">' % (odd and "odd" or "even",
+ radio.VENDOR,
+ radio.MODEL,
+ radio.VARIANT)
+ row += "<td><a href=\"#%s\" name=\"%s\">%s %s %s</a></td>\n" % (
+ 'row%04i' % counter,
+ 'row%04i' % counter,
+ radio.VENDOR, radio.MODEL, radio.VARIANT)
+ rf = radio.get_features()
+ for key in KEYS:
+ value = rf.__dict__[key]
+ if key == "valid_bands":
+ value = ["%s-%s MHz" % (chirp_common.format_freq(x),
+ chirp_common.format_freq(y))
+ for x, y in value]
+
+ if key in ["valid_bands", "valid_modes", "valid_power_levels",
+ "valid_tuning_steps"]:
+ try:
+ value = ", ".join([str(x) for x in value
+ if not str(x).startswith("?")])
+ except Exception, e:
+ raise
+
+ if key == "memory_bounds":
+ value = "%i-%i" % value
+
+ if key == "requires_call_lists":
+ if "DV" not in rf.valid_modes:
+ value = None
+ elif value:
+ value = "Required"
+ else:
+ value = "Optional"
+
+ if value is None:
+ row += '<td class="%s"><span class="False">N/A</span></td>' % key
+ elif isinstance(value, bool):
+ row += '<td class="%s"><span class="%s">%s</span></td>' % \
+ (key,
+ value,
+ value and "Yes" or "No")
+ else:
+ row += '<td class="%s">%s</td>' % (key, value)
+ row += '<td class="radio_type">%s</td>' % radio_type(radio)
+ row += "</tr>\n"
+ return row
+
+
+def header_row():
+ row = "<thead><tr>"
+ row += "<th>Radio</th>\n"
+ for key in KEYS:
+ Key = key.split("_", 1)[1].title().replace("_", " ")
+ row += '<th title="%s">%s</th>' % (RF.get_doc(key), Key)
+ row += '<th title="Radio programming type">Type</th>\n'
+ row += "</tr></thead>\n"
+ return row
+
+
+dest = sys.stdout
+if len(sys.argv) > 1:
+ dest = open(sys.argv[1], 'w')
+
+
+def output(string):
+ dest.write(string + '\n')
+
+
+output("""
+<style>
+td {
+ white-space: nowrap;
+ border-right: thin solid black;
+ padding: 3px;
+}
+tr.odd {
+ background: #E8E8E8;'
+}
+tr.odd:hover, tr.even:hover {
+ background-color: #FFCCFF;
+}
+th {
+ border-right: thin solid black;
+}
+table {
+ border-collapse: collapse;
+}
+th {
+ border-bottom: thick solid black;
+}
+span.false {
+ color: grey;
+}
+a {
+ text-decoration: none;
+ color: inherit;
+}
+</style>
+<table>
+""")
+
+models = {"Icom": [],
+ "Kenwood": [],
+ "Yaesu": [],
+ "Alinco": [],
+ "Baofeng": [],
+ "z_Other": [],
+ }
+
+models = []
+
+exclude = [directory.DRV_TO_RADIO["Icom_7200"]]
+
+for radio in directory.DRV_TO_RADIO.values():
+ if radio in exclude:
+ continue
+
+ models.append(radio)
+ for alias in radio.ALIASES:
+ class DynamicRadioAlias(radio):
+ VENDOR = alias.VENDOR
+ MODEL = alias.MODEL
+ VARIANT = alias.VARIANT
+ models.append(DynamicRadioAlias)
+
+
+def get_key(rc):
+ return '%s %s %s' % (rc.VENDOR, rc.MODEL, rc.VARIANT)
+
+for radio in sorted(models, cmp=lambda a, b: get_key(a) < get_key(b) and -1 or 1):
+ if counter % 10 == 0:
+ output(header_row())
+ _radio = radio(None)
+ if _radio.get_features().has_sub_devices:
+ for __radio in _radio.get_sub_devices():
+ output(supported_row(__radio))
+ else:
+ output(supported_row(_radio))